From d0be539e01424fa720840dfe702dedf8e54379fb Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 17 Sep 2014 14:59:24 -0700 Subject: [PATCH 001/194] Revert "Revert "Added a bionic systrace class and tracing to pthread_mutex.cpp."" This reverts commit 26c1420fbb68916d66a8621b5efe8bb25cfdad7b. (cherry picked from commit 9e87f2f876243225deef37645ddceaa5d225cb41) Change-Id: I46a71a456952e3dd2c2bb0d9934820ffe8dc8469 --- libc/Android.mk | 1 + libc/bionic/bionic_systrace.cpp | 107 ++++++++++++++++++++++++++++++++ libc/bionic/pthread_mutex.cpp | 12 ++++ libc/private/bionic_systrace.h | 35 +++++++++++ 4 files changed, 155 insertions(+) create mode 100644 libc/bionic/bionic_systrace.cpp create mode 100644 libc/private/bionic_systrace.h diff --git a/libc/Android.mk b/libc/Android.mk index 5052cb10d..5f5add22b 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -89,6 +89,7 @@ libc_bionic_src_files := \ bionic/access.cpp \ bionic/assert.cpp \ bionic/atof.cpp \ + bionic/bionic_systrace.cpp \ bionic/bionic_time_conversions.cpp \ bionic/brk.cpp \ bionic/c16rtomb.cpp \ diff --git a/libc/bionic/bionic_systrace.cpp b/libc/bionic/bionic_systrace.cpp new file mode 100644 index 000000000..b8e892e72 --- /dev/null +++ b/libc/bionic/bionic_systrace.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "private/bionic_systrace.h" +#include "private/libc_logging.h" + +#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ +#include + +#define WRITE_OFFSET 32 + +static const prop_info* g_pinfo = NULL; +static uint32_t g_serial = -1; +static uint64_t g_tags = 0; +static int g_trace_marker_fd = -1; + +static bool should_trace() { + // If g_pinfo is null, this means that systrace hasn't been run and it's safe to + // assume that no trace writing will need to take place. However, to avoid running + // this costly find check each time, we set it to a non-tracing value so that next + // time, it will just check the serial to see if the value has been changed. + // this function also deals with the bootup case, during which the call to property + // set will fail if the property server hasn't yet started. + if (g_pinfo == NULL) { + g_pinfo = __system_property_find("debug.atrace.tags.enableflags"); + if (g_pinfo == NULL) { + __system_property_set("debug.atrace.tags.enableflags", "0"); + g_pinfo = __system_property_find("debug.atrace.tags.enableflags"); + if (g_pinfo == NULL) { + return false; + } + } + } + + // Find out which tags have been enabled on the command line and set + // the value of tags accordingly. If the value of the property changes, + // the serial will also change, so the costly system_property_read function + // can be avoided by calling the much cheaper system_property_serial + // first. The values within pinfo may change, but its location is guaranteed + // not to move. + const uint32_t cur_serial = __system_property_serial(g_pinfo); + if (cur_serial != g_serial) { + g_serial = cur_serial; + char value[PROP_VALUE_MAX]; + __system_property_read(g_pinfo, 0, value); + g_tags = strtoull(value, NULL, 0); + } + + // Finally, verify that this tag value enables bionic tracing. + return ((g_tags & ATRACE_TAG_BIONIC) != 0); +} + +ScopedTrace::ScopedTrace(const char* message) { + if (!should_trace()) { + return; + } + + if (g_trace_marker_fd == -1) { + g_trace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY | O_CLOEXEC); + if (g_trace_marker_fd == -1) { + __libc_fatal("Could not open kernel trace file: %s\n", strerror(errno)); + } + } + + // If bionic tracing has been enabled, then write the message to the + // kernel trace_marker. + int length = strlen(message); + char buf[length + WRITE_OFFSET]; + size_t len = snprintf(buf, length + WRITE_OFFSET, "B|%d|%s", getpid(), message); + ssize_t wbytes = TEMP_FAILURE_RETRY(write(g_trace_marker_fd, buf, len)); + + // Error while writing + if (static_cast(wbytes) != len) { + __libc_fatal("Could not write to kernel trace file: %s\n", strerror(errno)); + } +} + +ScopedTrace::~ScopedTrace() { + if (!should_trace()) { + return; + } + + ssize_t wbytes = TEMP_FAILURE_RETRY(write(g_trace_marker_fd, "E", 1)); + + // Error while writing + if (static_cast(wbytes) != 1) { + __libc_fatal("Could not write to kernel trace file: %s\n", strerror(errno)); + } +} diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp index 546166166..e00ffb437 100644 --- a/libc/bionic/pthread_mutex.cpp +++ b/libc/bionic/pthread_mutex.cpp @@ -39,6 +39,8 @@ #include "private/bionic_futex.h" #include "private/bionic_tls.h" +#include "private/bionic_systrace.h" + extern void pthread_debug_mutex_lock_check(pthread_mutex_t *mutex); extern void pthread_debug_mutex_unlock_check(pthread_mutex_t *mutex); @@ -333,6 +335,10 @@ static inline void _normal_lock(pthread_mutex_t* mutex, int shared) { * that the mutex is in state 2 when we go to sleep on it, which * guarantees a wake-up call. */ + + ScopedTrace trace("Contending for pthread mutex"); + + while (__bionic_swap(locked_contended, &mutex->value) != unlocked) { __futex_wait_ex(&mutex->value, shared, locked_contended, NULL); } @@ -473,6 +479,8 @@ int pthread_mutex_lock(pthread_mutex_t* mutex) { mvalue = mutex->value; } + ScopedTrace trace("Contending for pthread mutex"); + for (;;) { int newval; @@ -626,6 +634,8 @@ static int __pthread_mutex_timedlock(pthread_mutex_t* mutex, const timespec* abs return 0; } + ScopedTrace trace("Contending for timed pthread mutex"); + // Loop while needed. while (__bionic_swap(locked_contended, &mutex->value) != unlocked) { if (__timespec_from_absolute(&ts, abs_timeout, clock) < 0) { @@ -658,6 +668,8 @@ static int __pthread_mutex_timedlock(pthread_mutex_t* mutex, const timespec* abs mvalue = mutex->value; } + ScopedTrace trace("Contending for timed pthread mutex"); + while (true) { // If the value is 'unlocked', try to acquire it directly. // NOTE: put state to 2 since we know there is contention. diff --git a/libc/private/bionic_systrace.h b/libc/private/bionic_systrace.h new file mode 100644 index 000000000..ad9ff7f71 --- /dev/null +++ b/libc/private/bionic_systrace.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BIONIC_SYSTRACE_H +#define BIONIC_SYSTRACE_H + +#include "bionic_macros.h" + +// Tracing class for bionic. To begin a trace at a specified point: +// ScopedTrace("Trace message"); +// The trace will end when the contructor goes out of scope. + +class ScopedTrace { + public: + explicit ScopedTrace(const char* message); + ~ScopedTrace(); + + private: + DISALLOW_COPY_AND_ASSIGN(ScopedTrace); +}; + +#endif From 411ff42f20729200c0fc2e24a83bc1dcd7a42a51 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Wed, 13 Aug 2014 11:25:01 -0700 Subject: [PATCH 002/194] Hide ScopedTrace. (cherry-pick of f2c1e7ee78a167ff323b9f45d20532d064d6778d.) Bug: 11156955 (cherry picked from commit ebb6b4a4d3fab87800b912c9d6ea917f5359f8af) Change-Id: Ifc10364b35384a9f34e4c2c634dd78a16065a817 --- libc/private/bionic_systrace.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/private/bionic_systrace.h b/libc/private/bionic_systrace.h index ad9ff7f71..0b4560f92 100644 --- a/libc/private/bionic_systrace.h +++ b/libc/private/bionic_systrace.h @@ -23,7 +23,7 @@ // ScopedTrace("Trace message"); // The trace will end when the contructor goes out of scope. -class ScopedTrace { +class __LIBC_HIDDEN__ ScopedTrace { public: explicit ScopedTrace(const char* message); ~ScopedTrace(); From c189ffaaec45efb49e785517e504b41a5e57b088 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 26 Aug 2014 16:20:59 -0700 Subject: [PATCH 003/194] More cases where libc should use O_CLOEXEC. (cherry picked from commit f73183f1a34df22b62a3d0bbf82e18d5797c9cde) (cherry picked from commit 21ce3f506f3b54e4f57a37847375cef9f8aff57f) Change-Id: I70b240bd40ad8d2ba33ae7ab2618782709fd0d6a --- libc/bionic/bionic_systrace.cpp | 2 +- libc/bionic/dirent.cpp | 2 +- libc/bionic/malloc_debug_qemu.cpp | 2 +- libc/bionic/pthread_setname_np.cpp | 2 +- libc/bionic/system_properties.cpp | 21 ++------------------- 5 files changed, 6 insertions(+), 23 deletions(-) diff --git a/libc/bionic/bionic_systrace.cpp b/libc/bionic/bionic_systrace.cpp index b8e892e72..f5be41553 100644 --- a/libc/bionic/bionic_systrace.cpp +++ b/libc/bionic/bionic_systrace.cpp @@ -74,7 +74,7 @@ ScopedTrace::ScopedTrace(const char* message) { } if (g_trace_marker_fd == -1) { - g_trace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY | O_CLOEXEC); + g_trace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_CLOEXEC | O_WRONLY); if (g_trace_marker_fd == -1) { __libc_fatal("Could not open kernel trace file: %s\n", strerror(errno)); } diff --git a/libc/bionic/dirent.cpp b/libc/bionic/dirent.cpp index 7abc7f3ec..5e1c7a565 100644 --- a/libc/bionic/dirent.cpp +++ b/libc/bionic/dirent.cpp @@ -78,7 +78,7 @@ DIR* fdopendir(int fd) { } DIR* opendir(const char* path) { - int fd = open(path, O_RDONLY | O_DIRECTORY); + int fd = open(path, O_CLOEXEC | O_DIRECTORY | O_RDONLY); return (fd != -1) ? __allocate_DIR(fd) : NULL; } diff --git a/libc/bionic/malloc_debug_qemu.cpp b/libc/bionic/malloc_debug_qemu.cpp index b3b604d86..2f4949b12 100644 --- a/libc/bionic/malloc_debug_qemu.cpp +++ b/libc/bionic/malloc_debug_qemu.cpp @@ -606,7 +606,7 @@ extern "C" bool malloc_debug_initialize(HashTable*, const MallocDebug* malloc_di * the memory mapped spaces into writes to an I/O port that emulator * "listens to" on the other end. Note that until we open and map that * device, logging to emulator's stdout will not be available. */ - int fd = open("/dev/qemu_trace", O_RDWR); + int fd = open("/dev/qemu_trace", O_CLOEXEC | O_RDWR); if (fd < 0) { error_log("Unable to open /dev/qemu_trace"); return false; diff --git a/libc/bionic/pthread_setname_np.cpp b/libc/bionic/pthread_setname_np.cpp index 1ddf81044..7b2fa6b0a 100644 --- a/libc/bionic/pthread_setname_np.cpp +++ b/libc/bionic/pthread_setname_np.cpp @@ -67,7 +67,7 @@ int pthread_setname_np(pthread_t t, const char* thread_name) { } char comm_name[sizeof(TASK_COMM_FMT) + 8]; snprintf(comm_name, sizeof(comm_name), TASK_COMM_FMT, tid); - int fd = open(comm_name, O_WRONLY); + int fd = open(comm_name, O_CLOEXEC | O_WRONLY); if (fd == -1) { return errno; } diff --git a/libc/bionic/system_properties.cpp b/libc/bionic/system_properties.cpp index ad69cf5f9..411d6bf34 100644 --- a/libc/bionic/system_properties.cpp +++ b/libc/bionic/system_properties.cpp @@ -201,14 +201,6 @@ static int map_prop_area_rw() return -1; } - // TODO: Is this really required ? Does android run on any kernels that - // don't support O_CLOEXEC ? - const int ret = fcntl(fd, F_SETFD, FD_CLOEXEC); - if (ret < 0) { - close(fd); - return -1; - } - if (ftruncate(fd, PA_SIZE) < 0) { close(fd); return -1; @@ -271,18 +263,9 @@ static int map_fd_ro(const int fd) { static int map_prop_area() { - int fd(open(property_filename, O_RDONLY | O_NOFOLLOW | O_CLOEXEC)); - if (fd >= 0) { - /* For old kernels that don't support O_CLOEXEC */ - const int ret = fcntl(fd, F_SETFD, FD_CLOEXEC); - if (ret < 0) { - close(fd); - return -1; - } - } - + int fd = open(property_filename, O_CLOEXEC | O_NOFOLLOW | O_RDONLY); bool close_fd = true; - if ((fd < 0) && (errno == ENOENT)) { + if (fd == -1 && errno == ENOENT) { /* * For backwards compatibility, if the file doesn't * exist, we use the environment to get the file descriptor. From 9969481d5bf05954fff9c0f3d1c95bb99c36b9a8 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 17 Sep 2014 15:25:35 -0700 Subject: [PATCH 004/194] Fix an unintended difference between aosp/master and lmp-dev-plus-aosp. Whitespace difference presumably introduced while fixing a merge conflict. Bug: 17549448 (cherry picked from commit 8fa377eb6afdea4b03b6a0d112471f7ee988fb96) Change-Id: I7e30f37da4430af19d09a661e489c8ff65e42297 --- libc/Android.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index 5f5add22b..56e98768b 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -865,8 +865,7 @@ LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_cxa -# GCC refuses to hide new/delete -LOCAL_CLANG := true +LOCAL_CLANG := true # GCC refuses to hide new/delete LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := From b5f5b0e418e5c382573e367dd4aff9373180bbe4 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 30 Sep 2014 17:30:01 -0700 Subject: [PATCH 005/194] Fix update-tzdata.py to rebuild icu4c .dat file. Bug: 17731498 (cherry picked from commit f8896c6c93fd698b129742780878123a3a19ae07) Change-Id: If97e1ccf593a2ed6c2356077e660d6fd88a05875 --- libc/tools/zoneinfo/update-tzdata.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libc/tools/zoneinfo/update-tzdata.py b/libc/tools/zoneinfo/update-tzdata.py index e800e8f8b..f5681beb2 100755 --- a/libc/tools/zoneinfo/update-tzdata.py +++ b/libc/tools/zoneinfo/update-tzdata.py @@ -123,18 +123,21 @@ def BuildIcuToolsAndData(data_filename): print 'Making ICU data...' subprocess.check_call(['make']) - # Copy the output files to their ultimate destination. + # Copy the source file to its ultimate destination. icu_txt_data_dir = '%s/data/misc' % icu_dir print 'Copying zoneinfo64.txt to %s ...' % icu_txt_data_dir shutil.copy('zoneinfo64.txt', icu_txt_data_dir) + # Regenerate the .dat file. os.chdir(icu_working_dir) + subprocess.check_call(['make', '-j32']) + + # Copy the .dat file to its ultimate destination. icu_dat_data_dir = '%s/stubdata' % icu_dir datfiles = glob.glob('data/out/tmp/icudt??l.dat') if len(datfiles) != 1: print 'ERROR: Unexpectedly found %d .dat files (%s). Halting.' % (len(datfiles), datfiles) sys.exit(1) - datfile = datfiles[0] print 'Copying %s to %s ...' % (datfile, icu_dat_data_dir) shutil.copy(datfile, icu_dat_data_dir) From d18205049d5eac715ccad996fb6802b72544f50b Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 30 Sep 2014 17:35:38 -0700 Subject: [PATCH 006/194] Update bionic to tzdata 2014h. From the release notes: Changes affecting past time stamps America/Jamaica's 1974 spring-forward transition was Jan. 6, not Apr. 28. Shanks says Asia/Novokuznetsk switched from LMT (not "NMT") on 1924-05-01, not 1920-01-06. The old entry was based on a misinterpretation of Shanks. Some more zones have been turned into links, when they differed from existing zones only for older time stamps. As usual, these changes affect UTC offsets in pre-1970 time stamps only. Their old contents have been moved to the 'backzone' file. The affected zones are: Africa/Blantyre, Africa/Bujumbura, Africa/Gaborone, Africa/Harare, Africa/Kigali, Africa/Lubumbashi, Africa/Lusaka, Africa/Maseru, and Africa/Mbabane. Bug: 17731498 (cherry picked from commit 0c8fb51e6b8cfcd00d453cb5ebfa516f02009854) Change-Id: Icf8a9cbd309951b4ffc20c74eb1e78c1e39c222f --- libc/zoneinfo/tzdata | Bin 566837 -> 565331 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index 8d574f5611ee934b7ec6e0e111f12d831787090b..33bfe6b88d2ea23fc55e4d52a60669dec57dddcd 100644 GIT binary patch delta 4398 zcmX}v0bCSS9tZHG78a+NU~6C^qLO0KNlHeA z{LCf7M2`}c3WF3CjR+MDlN3EPuJ)3OJ5liyC>H7cX10#cXZg;X`M)`@}q!zv!NlY9Ho2FPqn$XEoK5c_m;P0^TN@%b8sH|0sM$y$ zGb52tW>`??Ds>Zv1nHC}5?vIyXwWT{FDBUi{}+?&t~9vKU5RcatlP)qQL}lmJqXi> z{IzMpSV14=z4@zg!Ekh%My?=Ojj zeu4W_>~>$$o1n6mdaH`n)ZQ_|&3 zQK__XFdDqEaDYjdo5$jFO0jT&N#tEs;!kq(tx<3?e(MY+zH)#GW>0V3yM-(+Q{tcZ zG>P|qN4BRVK6o0Ho}n7m{kv#qare704V1*bmtiHmhn#_u$Nn0XN^?(s@Qwpp^xj+R zy~L*n(ZPVvo8W7d#366kjFQLUc*fN$aXD#vFO(X+#W8QxFyi=lbdtIc;Xg>l9%i5wy~%>ibkU0Qz!kmz&u0}1A$~R%o9a~52}fbEHCty#F##W zk#SpKClPHZA)Ah%nS`u?cBmvmEeI!*n~_GI4M!*6)F3n529C0hLN!4(Bj0#}_4f1B!-u>NXuwsdOvleW)AeBiWJYIy2%g+g8U^h{1GG) zzwb~$0!E;LjQJ3~WYW(F9?9pDgd`I65w;PYp^?m;fE zgQz39XV6Vv=W9An5^ruqB1xTy0+RnY8ptQ>(d*h79KtjBAW7y3wvpmFx2kB0PkzYQB-9-uc?^HCC8!Bi+$yW#`w-+Fd-06?f z&`^!$emYuM)NF=cV(JS(1kpZ$bfWJ?8M*omT3r|>@Bw7NLcGr*lMFbEa#yL1n5MuO z#xyb)Q8G7?MSP=BLD-6uOmo0%q9m5+5G~V#Y+}zwB}qMwb}};^rb&`WUjZvwc?vls zqZrlX-JR$l+pX|@R1(Es!$#C*$MfOiZ zz+`d(2`=)|@j8c6*e^paD%5IjW^O_4|<&Fis^ zeET9A$@vTDBQ1krjv$wiOfCx)kt=R!B1?3Iku2;+82Mol?Bqu+N(j5Gnfx>t+NqNG zxgFu;+WSZ&H+G?v+=@U8>B)nBn$k%T(?T`c-@ixtpO(q??LsRL^PUVA7XP>b%b#Xi zlj_B&twc02KZ-VTs{Zi$g zn}OF>2Wi~)e}PsWt{MzO9C-tlILSl*t4bAkT8_f~q=$4=7q}ed45)n-Z7z&Yvebhp za%>f{WO`6Rj<1DN<}SRRlEfEl5iP^_lhmz3rOYj~lP_1mWFyyMCH1MuAv{C1T>1|> z$X9mw&LP)eBMmPhSLPOK$capJ%G`nfTuGc8~bNQ5lL>C1v8f3mhFS%qv@O(}xe;|pZ@%3I9`U`8S`wIzE;42#0+N(7C6KV+ zkWW~zj_|I#T?8#w9%`bCg2j?&?W-KRYvge}D=yxQFQ4*9Wt2{S^1ZI0;ODv2*@&d) zr2$KNm{T^(u`x?hP-pi;v&BQi1)@=o`3-$!#=l@*!behsWHKuNMKV=rBGIE{Tmm37I_>&B>Bsb|V|#p`0ND2Qo%(wdgcjCfx88CE=zKE+0!%Li;n%a_t%? zhr*mT5=M<)<9@0S`lXWmeH1~gDM%;r@1u;&AB0xIg@@qYEHsx zUdtqr{Sl%Gb4oTTorg-Ydo2;=gDGNNqqovWDcO3e6sO)?kJM=qtnoUYt-GWq8RC?c&P zXi|0-u2jZn7~$(^C)eIb3E|w^Oyo&7LwSwE3DZm(;fHJ~;U{4W;X+uyO8F9tAp9gs zCtPfo5%x|id21{TnaX#Sh48Uu5`HX{6JB&1Vd^rjmORg-@G&Z5{+V&}<||{qd4W!T z*RxjhvX7#IoJpy2u702&%&!=#9?nUa;&AR&>#IDE6=*S~KF^W#u-g!*8@OTC8XV)M z>-8J^ojlasimmTR7bS0bj#0vg2hxWv3GjD45nf&VFIdDAd-?4CGJ8pZlRLQ}z2_ F_#YpI8h`)* delta 4978 zcmZ|T4^)(8z6bD`Xa3`Ws7M2X0+OO34o{<@k&b~v2|CJXqmp8wqLHBsg)Mb3IZDR1 z#Md0IQOn+?d#I&txM8qLNkoM!1|}u0WNeoTZ|J2fTkJ-9zwbNkb~W!+W5RqL8A2+l zQX!3&O6IFTi%1Xw5g6i$`ClMHC&fZ1T)Jao$ubNxwKNn_dbN<7EPVsz`t8Q$g)IBu z7}Y0;6`K)jkYdI6@R0PYs32)0X!EB=$;!isGpbc&`>FKPVcf2CCf+2C869e8a!m;$ z(}g1@HFqb;yozz2Uv-%0yWlV<7+0_7&syY}6U6FoQEisO)q*av=GRpgDb`lNL0E5| z<(Ps#;F!qTg4zHn)(xPScq(9?AjRfdB$FNIP(Y4nqK@n_p-%)^G`fOx8aJ z+e9gRn~*^`kkW}Vpz)YSqr1W2XuREJ=FsQbL&WiF3^BvWKOiDliq$f<=WBkf~o zAsv%2Ox{0)s7X?Mup4f|ahH>xX0(#NlNccb6^NZI#g_}=A&f}{`6?7`3OyJlL;Ddo zMT&1d$R_MwC1IR8$ap-)$PYUZA0ow#S;z@VoWKFGzwK(Lql(NS@P&j5=3XA*1-gllX=>Ng$-4t6A!jziN6yd1AmL22MM&}S1Z0rQx1p2_T|*OLqeBt? zNfHq$#s3DvrSK)n$mkxl5SAE@^yi71F2&74xTh!TgxH93Mcqxb@-Ra(LW~;_J3|VS z6CPqcfeLbX7uv|=7L1Z<`w$l;Mf3z@lbLU!lFZejgV+yYj3jp=KAP9%Zsd@A%W;IT zg-+s$#5l?M9`+b1cAr2ldGtD}Noh2?$Wvce&16hwRn3gVnwe9@^IMU}125H}hSU|H zhrApOeXJC(%|{aX!#d=X*K1Hq*i@&dr%B5~pB@Ic`ru#9U71m2i>83s6Ql z(ObyMK@1Z%5Otdr8}`9Xm?|f^O=u3)p)55^}jHI5u|yaq?eiCfS~-uy3&E2(DK=X2R{BbU5= z4b^1e7`n(8bE@o8T-gr?x%zA5`KcizQRpGpKZib%6ZT~!k?}i`uW%K$iHSPBVJ&)@ zwCsdgavd}xnFPe5fCT*+b>xZ4F5qC&Y`x;!tG#O>&-z8f73@eNwDoGuYo4hg+<>a;Bqm{fq10$r-hS){qI6QtT zNK-r7$RD?0l$_XrxW$ZoHL^+T0#uR?6FNxeMU0WN2M~X!6d%n%4*BGM93dAn&`J7^ zW1L+4E9}Wq{J90WAa#tCAWJw_g{n%2} z`I|wOKZDW~8IWb-qqs=DAs>0v9Ey)pLd1O~7)seLJSMnOrSJ}*jAWlg3)%J{hRKdV zL@ig(xyd6JQBI0?qm}G?0VCv>d5B#h#lidGA!QGv!k=m*zdDFf!m8ua)Np-kaCTF9C87*@E5sI^jbdEi#KfO2wnJz5n$#t8Y)jo2)59v;%Y z78QgIwfPxU4xU4tn;WY%Wc#V~)1mMd#z=n*;@9yB^BHo;Uf!SN>pFCj>+>;A&P;`U zJ=a7Ba*3%4)g(9#T_isx@R$1bPUo)O(~z{SHZlseHmktk$3E zCF`%lyn*xV0+LDYH53r`p^mUXA1Qqm){T5FFNTvG-GoBII_pX8LG+WC-$d{xu2;7r zm2fdCCVWIRkW)u6Kv-u;wmP76a{dxZNPh`@hCJ;Tj(z@nV*8ZZ}#9lP+jegE))akk2CT&yK+kC>UWbL-Z30!8m zk5x7u8rbur*%h$VG zbg2ic_Ndd-L3lUj5k6OI2p_#YM0w`!Rqx^?!c``p@XfZC@b$2la8qplh5Cw?O!#_K zK)CU)BaBWT;R}SdP<_X85?;1K!WV~n!cO-Su3W)IGN>nwmr%=b!RM-sr_e z?DUIhAU$bs3=~bac!S$bQ!P)ec-N=ZXrg-Xms26AKP62+rKQ)mz!+lDYcvs28coVF zuk$UF!?N?>sWFzAR?ZR<_9v}x+<4M+r`NYoYmN_kYDIV6htKXV?S67ifmSfvRQ|(5 zEpO0h=GwKEtYuklR>iM3@lkEGx3*tv^#63=f43}ZwSgI#Zp}|sD{b(DkyG=%19SBjj`D+Cb|y07pQHRKt&YKa<9Ax~8=Fs5 z>Md`76Xasv2>XwD?LRxRM6D3l-Y)-_!70v+cCv6-8w>lhvhCC3JQQB`&$fR`|5)2I zr^=N;sxh3+0)J}xSq#HEmC^7TaLA0IULC9wzIkeig%%}3N-4#kM@;F Date: Wed, 23 Jul 2014 11:22:25 -0700 Subject: [PATCH 007/194] Added test for ifunc support in dynamic linker. ifuncs now work in i386 and x86_64 when called in the same library as well as in a different library. Bug:6657325 (cherry picked from commit c5a13efa9bc4264be0a9a9e37c00633af01584ed) Change-Id: I321d780bc2f9bd1baa749e1acacd2683aefe827b --- libc/include/elf.h | 19 ++--- linker/linker.cpp | 114 +++++++++++++++++++++++++++++- linker/linker.h | 6 ++ linker/linker_debug.h | 1 + tests/dlfcn_test.cpp | 33 +++++++++ tests/libs/Android.mk | 14 ++++ tests/libs/dlopen_testlib_ifunc.c | 37 ++++++++++ 7 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 tests/libs/dlopen_testlib_ifunc.c diff --git a/libc/include/elf.h b/libc/include/elf.h index 0975b7a61..faae73e92 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -69,14 +69,17 @@ typedef struct { #define PT_GNU_RELRO 0x6474e552 -#define STB_LOOS 10 -#define STB_HIOS 12 -#define STB_LOPROC 13 -#define STB_HIPROC 15 +#define STB_LOOS 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 -#define STT_LOOS 10 -#define STT_HIOS 12 -#define STT_LOPROC 13 -#define STT_HIPROC 15 +#define STT_GNU_IFUNC 10 +#define STT_LOOS 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define R_386_IRELATIVE 42 #endif /* _ELF_H */ diff --git a/linker/linker.cpp b/linker/linker.cpp index cf657057e..b28a01d49 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -466,6 +466,29 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return NULL; } +static void resolve_ifunc_symbols(soinfo* si) { + + phdr_table_unprotect_segments(si->phdr, si->phnum, si->load_bias); + + TRACE_TYPE(IFUNC, "CHECKING FOR IFUNCS AND PERFORMING SYMBOL UPDATES"); + + for (size_t i = 0; i < si->nchain; ++i) { + ElfW(Sym)* s = &si->symtab[i]; + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { + // The address of the ifunc in the symbol table is the address of the + // function that chooses the function to which the ifunc will refer. + // In order to return the proper value, we run the choosing function + // in the linker and then return its result (minus the base offset). + TRACE_TYPE(IFUNC, "FOUND IFUNC"); + ElfW(Addr) (*ifunc_ptr)(); + ifunc_ptr = reinterpret_cast(s->st_value + si->base); + s->st_value = (ifunc_ptr() - si->base); + TRACE_TYPE(IFUNC, "NEW VALUE IS %p", (void*)s->st_value); + } + } + phdr_table_protect_segments(si->phdr, si->phnum, si->load_bias); +} + static unsigned elfhash(const char* _name) { const unsigned char* name = reinterpret_cast(_name); unsigned h = 0, g; @@ -804,6 +827,10 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin return NULL; } + // if the library has any ifuncs, we will need to resolve them so that dlsym + // can handle them properly + resolve_ifunc_symbols(si); + return si; } @@ -931,6 +958,53 @@ void do_dlclose(soinfo* si) { protect_data(PROT_READ); } +// ifuncs are only defined for x86 +#if defined(__i386__) +static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* needed[]) { + for (size_t idx = 0; idx < count; ++idx, ++rel) { + ElfW(Sym)* s; + soinfo* lsi; + unsigned type = ELFW(R_TYPE)(rel->r_info); + unsigned sym = ELFW(R_SYM)(rel->r_info); + ElfW(Addr) reloc = static_cast(rel->r_offset + si->load_bias); + ElfW(Addr) sym_addr = 0; + const char* sym_name = NULL; + sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); + s = soinfo_do_lookup(si, sym_name, &lsi, needed); + + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_386_JMP_SLOT) { + TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr)); + ElfW(Addr) (*ifunc_ptr)(); + ifunc_ptr = reinterpret_cast(s->st_value + si->base); + *reinterpret_cast(reloc) = ifunc_ptr(); + } + } +} +#endif + +#if defined(__x86_64__) +static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* needed[]) { + for (size_t idx = 0; idx < count; ++idx, ++rela) { + ElfW(Sym)* s; + soinfo* lsi; + unsigned type = ELFW(R_TYPE)(rela->r_info); + unsigned sym = ELFW(R_SYM)(rela->r_info); + ElfW(Addr) reloc = static_cast(rela->r_offset + si->load_bias); + ElfW(Addr) sym_addr = 0; + const char* sym_name = NULL; + sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); + s = soinfo_do_lookup(si, sym_name, &lsi, needed); + + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_X86_64_JUMP_SLOT) { + TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr + rela->r_addend)); + ElfW(Addr) (*ifunc_ptr)(); + ifunc_ptr = reinterpret_cast(s->st_value + si->base); + *reinterpret_cast(reloc) = ifunc_ptr(); + } + } +} +#endif + #if defined(USE_RELA) static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* needed[]) { ElfW(Sym)* s; @@ -1142,7 +1216,11 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %08zx <- %08zx %s", static_cast(reloc), static_cast(sym_addr + rela->r_addend), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { + si->set_has_ifuncs(true); + } else { + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + } break; case R_X86_64_GLOB_DAT: count_relocation(kRelocAbsolute); @@ -1321,7 +1399,11 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n count_relocation(kRelocAbsolute); MARK(rel->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) = sym_addr; + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { + si->set_has_ifuncs(true); + } else { + *reinterpret_cast(reloc) = sym_addr; + } break; case R_386_GLOB_DAT: count_relocation(kRelocAbsolute); @@ -1581,6 +1663,14 @@ void soinfo::set_st_ino(ino_t ino) { st_ino = ino; } +void soinfo::set_has_ifuncs(bool ifuncs) { + if ((this->flags & FLAG_NEW_SOINFO) == 0) { + return; + } + + has_ifuncs = ifuncs; +} + dev_t soinfo::get_st_dev() { if ((this->flags & FLAG_NEW_SOINFO) == 0) { return 0; @@ -1597,6 +1687,14 @@ ino_t soinfo::get_st_ino() { return st_ino; } +bool soinfo::get_has_ifuncs() { + if ((this->flags & FLAG_NEW_SOINFO) == 0) { + return false; + } + + return has_ifuncs; +} + // This is a return on get_children() in case // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1981,6 +2079,18 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { } #endif + // if there are ifuncs, we need to do an additional relocation pass. + // they cannot be resolved until the rest of the relocations are done + // because we need to call the resolution function which may be waiting + // on relocations. + if(si->get_has_ifuncs()) { +#if defined(__i386__) + soinfo_ifunc_relocate(si, si->plt_rel, si->plt_rel_count, needed); +#elif defined(__x86_64__) + soinfo_ifunc_relocate(si, si->plt_rela, si->plt_rela_count, needed); +#endif + } + #if defined(__mips__) if (!mips_relocate_got(si, needed)) { return false; diff --git a/linker/linker.h b/linker/linker.h index 374652eb8..d7cf24bfa 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -204,8 +204,12 @@ struct soinfo { void set_st_dev(dev_t st_dev); void set_st_ino(ino_t st_ino); + void set_has_ifuncs(bool ifunc); ino_t get_st_ino(); dev_t get_st_dev(); + bool get_has_ifuncs(); + + soinfo_list_t& get_children(); @@ -218,6 +222,8 @@ struct soinfo { // when FLAG_NEW_SOINFO is set in this->flags. unsigned int version; + bool has_ifuncs; + dev_t st_dev; ino_t st_ino; diff --git a/linker/linker_debug.h b/linker/linker_debug.h index 3faa38ef4..0c7a78418 100644 --- a/linker/linker_debug.h +++ b/linker/linker_debug.h @@ -42,6 +42,7 @@ #define TRACE_DEBUG 1 #define DO_TRACE_LOOKUP 1 #define DO_TRACE_RELO 1 +#define DO_TRACE_IFUNC 1 #define TIMING 0 #define STATS 0 #define COUNT_PAGES 0 diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 457fcd5c0..260cbd601 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -87,6 +87,39 @@ TEST(dlfcn, dlopen_noload) { ASSERT_EQ(0, dlclose(handle2)); } +// ifuncs are only supported on intel for now +#if defined(__i386__) || defined(__x86_64__) +TEST(dlfcn, ifunc) { + const char* (*foo_ptr)(); + const char* (*foo_library_ptr)(); + + // ifunc's choice depends on whether IFUNC_CHOICE has a value + // first check the set case + setenv("IFUNC_CHOICE", "set", 1); + void* handle = dlopen("libtest_ifunc.so", RTLD_NOW); + ASSERT_TRUE(handle != NULL); + *(void **)(&foo_ptr) = dlsym(handle, "foo"); + *(void **)(&foo_library_ptr) = dlsym(handle, "foo_library"); + ASSERT_TRUE(foo_ptr != NULL); + ASSERT_TRUE(foo_library_ptr != NULL); + ASSERT_EQ(strncmp("set", (*foo_ptr)(), 3), 0); + ASSERT_EQ(strncmp("set", (*foo_library_ptr)(), 3), 0); + dlclose(handle); + + // then check the unset case + unsetenv("IFUNC_CHOICE"); + handle = dlopen("libtest_ifunc.so", RTLD_NOW); + ASSERT_TRUE(handle != NULL); + *(void **)(&foo_ptr) = dlsym(handle, "foo"); + *(void **)(&foo_library_ptr) = dlsym(handle, "foo_library"); + ASSERT_TRUE(foo_ptr != NULL); + ASSERT_TRUE(foo_library_ptr != NULL); + ASSERT_EQ(strncmp("unset", (*foo_ptr)(), 5), 0); + ASSERT_EQ(strncmp("unset", (*foo_library_ptr)(), 3), 0); + dlclose(handle); +} +#endif + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 75df539b9..8f0ec7a56 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -114,6 +114,20 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Library used by ifunc tests +# ----------------------------------------------------------------------------- +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) + libtest_ifunc_src_files := \ + dlopen_testlib_ifunc.c + + LOCAL_SDK_VERSION := current + module := libtest_ifunc + build_type := target + build_target := SHARED_LIBRARY + include $(TEST_PATH)/Android.build.mk +endif + # ----------------------------------------------------------------------------- # Library used by atexit tests # ----------------------------------------------------------------------------- diff --git a/tests/libs/dlopen_testlib_ifunc.c b/tests/libs/dlopen_testlib_ifunc.c new file mode 100644 index 000000000..1c4baface --- /dev/null +++ b/tests/libs/dlopen_testlib_ifunc.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +const char* foo() __attribute__ ((ifunc ("foo_ifunc"))); + +const char* f1() { + return "unset"; +} + +const char* f2() { + return "set"; +} + +void* foo_ifunc() { + char* choice = getenv("IFUNC_CHOICE"); + return choice == NULL ? f1 : f2; +} + +const char* foo_library() { + return foo(); +} \ No newline at end of file From bd321c1106ed30a71d55d5c365335dfe552b0883 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 21 Aug 2014 13:54:03 -0700 Subject: [PATCH 008/194] Run constructors before resolving ifunc functions Bug: 17177284 (cherry picked from commit 9598b8c415e2fa9f240508185fe8c964b83f538d) Change-Id: I2c9631ee1cd77f8cf95ec0216a35b605c8786454 --- libc/include/elf.h | 2 -- linker/linker.cpp | 23 ++++++++++++----------- linker/linker.h | 1 + tests/Android.mk | 16 ++++++++++++++++ tests/dlfcn_test.cpp | 30 ++++++++++++++++++++---------- tests/libs/dlopen_testlib_ifunc.c | 21 ++++++++++++++++++++- 6 files changed, 69 insertions(+), 24 deletions(-) diff --git a/libc/include/elf.h b/libc/include/elf.h index faae73e92..7a9485aea 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -80,6 +80,4 @@ typedef struct { #define STT_LOPROC 13 #define STT_HIPROC 15 -#define R_386_IRELATIVE 42 - #endif /* _ELF_H */ diff --git a/linker/linker.cpp b/linker/linker.cpp index b28a01d49..ec0681fe6 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -466,14 +466,17 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return NULL; } -static void resolve_ifunc_symbols(soinfo* si) { +void soinfo::resolve_ifunc_symbols() { + if (!get_has_ifuncs()) { + return; + } - phdr_table_unprotect_segments(si->phdr, si->phnum, si->load_bias); + phdr_table_unprotect_segments(phdr, phnum, load_bias); TRACE_TYPE(IFUNC, "CHECKING FOR IFUNCS AND PERFORMING SYMBOL UPDATES"); - for (size_t i = 0; i < si->nchain; ++i) { - ElfW(Sym)* s = &si->symtab[i]; + for (size_t i = 0; i < nchain; ++i) { + ElfW(Sym)* s = &symtab[i]; if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { // The address of the ifunc in the symbol table is the address of the // function that chooses the function to which the ifunc will refer. @@ -481,12 +484,12 @@ static void resolve_ifunc_symbols(soinfo* si) { // in the linker and then return its result (minus the base offset). TRACE_TYPE(IFUNC, "FOUND IFUNC"); ElfW(Addr) (*ifunc_ptr)(); - ifunc_ptr = reinterpret_cast(s->st_value + si->base); - s->st_value = (ifunc_ptr() - si->base); + ifunc_ptr = reinterpret_cast(s->st_value + base); + s->st_value = (ifunc_ptr() - base); TRACE_TYPE(IFUNC, "NEW VALUE IS %p", (void*)s->st_value); } } - phdr_table_protect_segments(si->phdr, si->phnum, si->load_bias); + phdr_table_protect_segments(phdr, phnum, load_bias); } static unsigned elfhash(const char* _name) { @@ -827,10 +830,6 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin return NULL; } - // if the library has any ifuncs, we will need to resolve them so that dlsym - // can handle them properly - resolve_ifunc_symbols(si); - return si; } @@ -1599,6 +1598,8 @@ void soinfo::CallConstructors() { // DT_INIT should be called before DT_INIT_ARRAY if both are present. CallFunction("DT_INIT", init_func); CallArray("DT_INIT_ARRAY", init_array, init_array_count, false); + + resolve_ifunc_symbols(); } void soinfo::CallDestructors() { diff --git a/linker/linker.h b/linker/linker.h index d7cf24bfa..684561a88 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -216,6 +216,7 @@ struct soinfo { private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); + void resolve_ifunc_symbols(); private: // This part of the structure is only available diff --git a/tests/Android.mk b/tests/Android.mk index 8184bf74b..9ee33e004 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -356,6 +356,22 @@ bionic-unit-tests-run-on-host: bionic-unit-tests $(TARGET_OUT_EXECUTABLES)/$(LIN $(TARGET_OUT_DATA_NATIVE_TESTS)/bionic-unit-tests/bionic-unit-tests$(NATIVE_TEST_SUFFIX) $(BIONIC_TEST_FLAGS) endif +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86_64)) +# add target to run lp32 tests +bionic-unit-tests-run-on-host32: bionic-unit-tests $(TARGET_OUT_EXECUTABLES)/$(LINKER) $(TARGET_OUT_EXECUTABLES)/sh + if [ ! -d /system -o ! -d /system/bin ]; then \ + echo "Attempting to create /system/bin"; \ + sudo mkdir -p -m 0777 /system/bin; \ + fi + mkdir -p $(TARGET_OUT_DATA)/local/tmp + cp $(TARGET_OUT_EXECUTABLES)/linker /system/bin + cp $(TARGET_OUT_EXECUTABLES)/sh /system/bin + ANDROID_DATA=$(TARGET_OUT_DATA) \ + ANDROID_ROOT=$(TARGET_OUT) \ + LD_LIBRARY_PATH=$(2ND_TARGET_OUT_SHARED_LIBRARIES) \ + $(2ND_TARGET_OUT_DATA_NATIVE_TESTS)/bionic-unit-tests/bionic-unit-tests32 $(BIONIC_TEST_FLAGS) +endif + endif # linux-x86 include $(call first-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 260cbd601..6de38c89e 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -90,32 +90,42 @@ TEST(dlfcn, dlopen_noload) { // ifuncs are only supported on intel for now #if defined(__i386__) || defined(__x86_64__) TEST(dlfcn, ifunc) { - const char* (*foo_ptr)(); - const char* (*foo_library_ptr)(); + typedef const char* (*fn_ptr)(); // ifunc's choice depends on whether IFUNC_CHOICE has a value // first check the set case setenv("IFUNC_CHOICE", "set", 1); void* handle = dlopen("libtest_ifunc.so", RTLD_NOW); ASSERT_TRUE(handle != NULL); - *(void **)(&foo_ptr) = dlsym(handle, "foo"); - *(void **)(&foo_library_ptr) = dlsym(handle, "foo_library"); + fn_ptr foo_ptr = reinterpret_cast(dlsym(handle, "foo")); + fn_ptr foo_library_ptr = reinterpret_cast(dlsym(handle, "foo_library")); ASSERT_TRUE(foo_ptr != NULL); ASSERT_TRUE(foo_library_ptr != NULL); - ASSERT_EQ(strncmp("set", (*foo_ptr)(), 3), 0); - ASSERT_EQ(strncmp("set", (*foo_library_ptr)(), 3), 0); + ASSERT_EQ(strncmp("set", foo_ptr(), 3), 0); + ASSERT_EQ(strncmp("set", foo_library_ptr(), 3), 0); dlclose(handle); // then check the unset case unsetenv("IFUNC_CHOICE"); handle = dlopen("libtest_ifunc.so", RTLD_NOW); ASSERT_TRUE(handle != NULL); - *(void **)(&foo_ptr) = dlsym(handle, "foo"); - *(void **)(&foo_library_ptr) = dlsym(handle, "foo_library"); + foo_ptr = reinterpret_cast(dlsym(handle, "foo")); + foo_library_ptr = reinterpret_cast(dlsym(handle, "foo_library")); ASSERT_TRUE(foo_ptr != NULL); ASSERT_TRUE(foo_library_ptr != NULL); - ASSERT_EQ(strncmp("unset", (*foo_ptr)(), 5), 0); - ASSERT_EQ(strncmp("unset", (*foo_library_ptr)(), 3), 0); + ASSERT_EQ(strncmp("unset", foo_ptr(), 5), 0); + ASSERT_EQ(strncmp("unset", foo_library_ptr(), 3), 0); + dlclose(handle); +} + +TEST(dlfcn, ifunc_ctor_call) { + typedef const char* (*fn_ptr)(); + + void* handle = dlopen("libtest_ifunc.so", RTLD_NOW); + ASSERT_TRUE(handle != NULL) << dlerror(); + fn_ptr is_ctor_called = reinterpret_cast(dlsym(handle, "is_ctor_called")); + ASSERT_TRUE(is_ctor_called != NULL) << dlerror(); + ASSERT_STREQ("true", is_ctor_called()); dlclose(handle); } #endif diff --git a/tests/libs/dlopen_testlib_ifunc.c b/tests/libs/dlopen_testlib_ifunc.c index 1c4baface..48748417d 100644 --- a/tests/libs/dlopen_testlib_ifunc.c +++ b/tests/libs/dlopen_testlib_ifunc.c @@ -17,7 +17,22 @@ #include #include +static int g_flag = 0; + +static void __attribute__((constructor)) init_flag() { + g_flag = 1; +} + const char* foo() __attribute__ ((ifunc ("foo_ifunc"))); +const char* is_ctor_called() __attribute__ ((ifunc("is_ctor_called_ifun"))); + +const char* return_true() { + return "true"; +} + +const char* return_false() { + return "false"; +} const char* f1() { return "unset"; @@ -27,6 +42,10 @@ const char* f2() { return "set"; } +void* is_ctor_called_ifun() { + return g_flag == 0 ? return_false : return_true; +} + void* foo_ifunc() { char* choice = getenv("IFUNC_CHOICE"); return choice == NULL ? f1 : f2; @@ -34,4 +53,4 @@ void* foo_ifunc() { const char* foo_library() { return foo(); -} \ No newline at end of file +} From 3bbd218ef1a70e59662e704c59af6dff1f9d1253 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 22 Aug 2014 12:25:04 -0700 Subject: [PATCH 009/194] Bump soinfo version This includes: 1. Placing has_ifunc after fields with version = 0 2. Switch to has_min_version(v) function. 3. Minor soinfo initialization refactoring (placement new + ctor) (cherry picked from commit 0d15094287fe0f288d9c258953143fc1998b6b5a) Change-Id: Idf135fdd3d4826b5653f32add2adc6db5d4a4f95 --- linker/dlfcn.cpp | 11 ++--- linker/linker.cpp | 110 ++++++++++++++++++++++------------------------ linker/linker.h | 18 +++++--- 3 files changed, 69 insertions(+), 70 deletions(-) diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 5d6db8e29..e15f54d56 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -232,17 +232,12 @@ static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 }; static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; #endif -// Defined as global because we do not yet have access -// to synchronization functions __cxa_guard_* needed -// to define statics inside functions. -static soinfo __libdl_info; +static soinfo __libdl_info("libdl.so", nullptr); // This is used by the dynamic linker. Every process gets these symbols for free. soinfo* get_libdl_info() { - if (__libdl_info.name[0] == '\0') { - // initialize - strncpy(__libdl_info.name, "libdl.so", sizeof(__libdl_info.name)); - __libdl_info.flags = FLAG_LINKED | FLAG_NEW_SOINFO; + if ((__libdl_info.flags & FLAG_LINKED) == 0) { + __libdl_info.flags |= FLAG_LINKED; __libdl_info.strtab = ANDROID_LIBDL_STRTAB; __libdl_info.symtab = g_libdl_symtab; __libdl_info.nbucket = sizeof(g_libdl_buckets)/sizeof(unsigned); diff --git a/linker/linker.cpp b/linker/linker.cpp index ec0681fe6..e4a6523b7 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -35,9 +35,10 @@ #include #include #include -#include #include +#include + // Private C library headers. #include "private/bionic_tls.h" #include "private/KernelArgumentBlock.h" @@ -290,17 +291,7 @@ static soinfo* soinfo_alloc(const char* name, struct stat* file_stat) { return NULL; } - soinfo* si = g_soinfo_allocator.alloc(); - - // Initialize the new element. - memset(si, 0, sizeof(soinfo)); - strlcpy(si->name, name, sizeof(si->name)); - si->flags = FLAG_NEW_SOINFO; - - if (file_stat != NULL) { - si->set_st_dev(file_stat->st_dev); - si->set_st_ino(file_stat->st_ino); - } + soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat); sonext->next = si; sonext = si; @@ -466,6 +457,19 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return NULL; } +soinfo::soinfo(const char* name, const struct stat* file_stat) { + memset(this, 0, sizeof(*this)); + + strlcpy(this->name, name, sizeof(this->name)); + flags = FLAG_NEW_SOINFO; + version = SOINFO_VERSION; + + if (file_stat != NULL) { + set_st_dev(file_stat->st_dev); + set_st_ino(file_stat->st_ino); + } +} + void soinfo::resolve_ifunc_symbols() { if (!get_has_ifuncs()) { return; @@ -878,7 +882,7 @@ static void soinfo_unload(soinfo* si) { TRACE("unloading '%s'", si->name); si->CallDestructors(); - if ((si->flags | FLAG_NEW_SOINFO) != 0) { + if (si->has_min_version(0)) { si->get_children().for_each([&] (soinfo* child) { TRACE("%s needs to unload %s", si->name, child->name); soinfo_unload(child); @@ -1617,16 +1621,14 @@ void soinfo::CallDestructors() { } void soinfo::add_child(soinfo* child) { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return; + if (has_min_version(0)) { + this->children.push_front(child); + child->parents.push_front(this); } - - this->children.push_front(child); - child->parents.push_front(this); } void soinfo::remove_all_links() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { + if (!has_min_version(0)) { return; } @@ -1649,51 +1651,45 @@ void soinfo::remove_all_links() { } void soinfo::set_st_dev(dev_t dev) { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return; + if (has_min_version(0)) { + st_dev = dev; } - - st_dev = dev; } void soinfo::set_st_ino(ino_t ino) { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return; + if (has_min_version(0)) { + st_ino = ino; } - - st_ino = ino; } void soinfo::set_has_ifuncs(bool ifuncs) { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return; + if (has_min_version(1)) { + has_ifuncs = ifuncs; } - - has_ifuncs = ifuncs; } dev_t soinfo::get_st_dev() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return 0; + if (has_min_version(0)) { + return st_dev; } - return st_dev; + return 0; }; ino_t soinfo::get_st_ino() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return 0; + if (has_min_version(0)) { + return st_ino; } - return st_ino; + return 0; } bool soinfo::get_has_ifuncs() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return false; + if (has_min_version(1)) { + return has_ifuncs; } - return has_ifuncs; + return false; } // This is a return on get_children() in case @@ -1701,11 +1697,11 @@ bool soinfo::get_has_ifuncs() { static soinfo::soinfo_list_t g_empty_list; soinfo::soinfo_list_t& soinfo::get_children() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return g_empty_list; + if (has_min_version(0)) { + return this->children; } - return this->children; + return g_empty_list; } /* Force any of the closed stdin, stdout and stderr to be associated with @@ -2167,7 +2163,12 @@ static void add_vdso(KernelArgumentBlock& args __unused) { /* * This is linker soinfo for GDB. See details below. */ -static soinfo linker_soinfo_for_gdb; +#if defined(__LP64__) +#define LINKER_PATH "/system/bin/linker64" +#else +#define LINKER_PATH "/system/bin/linker" +#endif +static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr); /* gdb expects the linker to be in the debug shared object list. * Without this, gdb has trouble locating the linker's ".text" @@ -2177,12 +2178,6 @@ static soinfo linker_soinfo_for_gdb; * be on the soinfo list. */ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { -#if defined(__LP64__) - strlcpy(linker_soinfo_for_gdb.name, "/system/bin/linker64", sizeof(linker_soinfo_for_gdb.name)); -#else - strlcpy(linker_soinfo_for_gdb.name, "/system/bin/linker", sizeof(linker_soinfo_for_gdb.name)); -#endif - linker_soinfo_for_gdb.flags = FLAG_NEW_SOINFO; linker_soinfo_for_gdb.base = linker_base; /* @@ -2401,10 +2396,6 @@ extern "C" void _start(); * function, or other GOT reference will generate a segfault. */ extern "C" ElfW(Addr) __linker_init(void* raw_args) { - // Initialize static variables. - solist = get_libdl_info(); - sonext = get_libdl_info(); - KernelArgumentBlock args(raw_args); ElfW(Addr) linker_addr = args.getauxval(AT_BASE); @@ -2412,8 +2403,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_addr); ElfW(Phdr)* phdr = reinterpret_cast(linker_addr + elf_hdr->e_phoff); - soinfo linker_so; - memset(&linker_so, 0, sizeof(soinfo)); + soinfo linker_so("[dynamic linker]", nullptr); // If the linker is not acting as PT_INTERP entry_point is equal to // _start. Which means that the linker is running as an executable and @@ -2425,7 +2415,6 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { __libc_fatal("This is %s, the helper program for shared library executables.\n", args.argv[0]); } - strcpy(linker_so.name, "[dynamic linker]"); linker_so.base = linker_addr; linker_so.size = phdr_table_get_load_size(phdr, elf_hdr->e_phnum); linker_so.load_bias = get_elf_exec_load_bias(elf_hdr); @@ -2449,6 +2438,13 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { // Initialize the linker's own global variables linker_so.CallConstructors(); + // Initialize static variables. Note that in order to + // get correct libdl_info we need to call constructors + // before get_libdl_info(). + solist = get_libdl_info(); + sonext = get_libdl_info(); + + // We have successfully fixed our own relocations. It's safe to run // the main part of the linker now. args.abort_message_ptr = &g_abort_message; diff --git a/linker/linker.h b/linker/linker.h index 684561a88..5e21f7015 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -30,6 +30,7 @@ #define _LINKER_H_ #include +#include #include #include #include @@ -88,6 +89,8 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format +#define SOINFO_VERSION 1 + #define SOINFO_NAME_LEN 128 typedef void (*linker_function_t)(); @@ -195,6 +198,9 @@ struct soinfo { bool has_text_relocations; #endif bool has_DT_SYMBOLIC; + + soinfo(const char* name, const struct stat* file_stat); + void CallConstructors(); void CallDestructors(); void CallPreInitConstructors(); @@ -209,10 +215,11 @@ struct soinfo { dev_t get_st_dev(); bool get_has_ifuncs(); - - soinfo_list_t& get_children(); + bool inline has_min_version(uint32_t min_version) { + return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; + } private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); @@ -221,10 +228,9 @@ struct soinfo { private: // This part of the structure is only available // when FLAG_NEW_SOINFO is set in this->flags. - unsigned int version; - - bool has_ifuncs; + uint32_t version; + // version >= 0 dev_t st_dev; ino_t st_ino; @@ -232,6 +238,8 @@ struct soinfo { soinfo_list_t children; soinfo_list_t parents; + // version >= 1 + bool has_ifuncs; }; extern soinfo* get_libdl_info(); From 93c3f4203c92ece8b97d770af9b675f5ffb90c67 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 26 Aug 2014 14:16:52 -0700 Subject: [PATCH 010/194] Enable __cxa_atexit && __cxa_finalize for linker This allows adding destructors to classes used for global variables. (cherry picked from commit 14241402de0faa4b244b1bd6b1f0799ce169b880) Change-Id: I1d8776130d1e01a8c53d23a2949f5010f4c96b16 --- linker/Android.mk | 1 + linker/linked_list.h | 3 +++ linker/linker.cpp | 13 ++----------- linker/linker_libc_support.c | 17 +++++++++++++++++ tests/Android.mk | 2 +- 5 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 linker/linker_libc_support.c diff --git a/linker/Android.mk b/linker/Android.mk index 5853c9070..4298032a4 100644 --- a/linker/Android.mk +++ b/linker/Android.mk @@ -8,6 +8,7 @@ LOCAL_SRC_FILES:= \ linker.cpp \ linker_allocator.cpp \ linker_environ.cpp \ + linker_libc_support.c \ linker_phdr.cpp \ rt.cpp \ diff --git a/linker/linked_list.h b/linker/linked_list.h index 8096e623d..e51eb9cb0 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -32,6 +32,9 @@ template class LinkedList { public: LinkedList() : head_(nullptr), tail_(nullptr) {} + ~LinkedList() { + clear(); + } void push_front(T* const element) { LinkedListEntry* new_entry = Allocator::alloc(); diff --git a/linker/linker.cpp b/linker/linker.cpp index e4a6523b7..6aba39471 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2199,16 +2199,6 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { * and other non-local data at this point. */ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW(Addr) linker_base) { - /* NOTE: we store the args pointer on a special location - * of the temporary TLS area in order to pass it to - * the C Library's runtime initializer. - * - * The initializer must clear the slot and reset the TLS - * to point to a different location to ensure that no other - * shared library constructor can access it. - */ - __libc_init_tls(args); - #if TIMING struct timeval t0, t1; gettimeofday(&t0, 0); @@ -2435,6 +2425,8 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { _exit(EXIT_FAILURE); } + __libc_init_tls(args); + // Initialize the linker's own global variables linker_so.CallConstructors(); @@ -2444,7 +2436,6 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { solist = get_libdl_info(); sonext = get_libdl_info(); - // We have successfully fixed our own relocations. It's safe to run // the main part of the linker now. args.abort_message_ptr = &g_abort_message; diff --git a/linker/linker_libc_support.c b/linker/linker_libc_support.c new file mode 100644 index 000000000..17db6d4e7 --- /dev/null +++ b/linker/linker_libc_support.c @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../libc/arch-common/bionic/__dso_handle.h" diff --git a/tests/Android.mk b/tests/Android.mk index 9ee33e004..864052e81 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -358,7 +358,7 @@ endif ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86_64)) # add target to run lp32 tests -bionic-unit-tests-run-on-host32: bionic-unit-tests $(TARGET_OUT_EXECUTABLES)/$(LINKER) $(TARGET_OUT_EXECUTABLES)/sh +bionic-unit-tests-run-on-host32: bionic-unit-tests_32 $(TARGET_OUT_EXECUTABLES)/$(LINKER) $(TARGET_OUT_EXECUTABLES)/sh if [ ! -d /system -o ! -d /system/bin ]; then \ echo "Attempting to create /system/bin"; \ sudo mkdir -p -m 0777 /system/bin; \ From 5dfe802d0dedbfce355a7ece5bc77c7346941bb2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 26 Aug 2014 15:56:31 -0700 Subject: [PATCH 011/194] Remove unnecessary calls to LinkedList::clear() (cherry picked from commit 608217e1674d8fd8b334fe18c753b6c4638ed783) Change-Id: I031359d79b2e77977ace197ef410e41539dc0ce6 --- linker/linker.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 6aba39471..9a58103b0 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -657,8 +657,6 @@ ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { if (result != nullptr) { *found = current_soinfo; - visit_list.clear(); - visited.clear(); return result; } visited.push_back(current_soinfo); @@ -668,8 +666,6 @@ ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { }); } - visit_list.clear(); - visited.clear(); return nullptr; } From cfad7ae9346af5c665a1bc239e1bbe4f679750c6 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 29 Aug 2014 12:02:36 -0700 Subject: [PATCH 012/194] Replace NULL with nullptr (cherry picked from commit 851135bf9941b3813adb9b4f43d76e040c4ba157) Change-Id: Ic4997907680db7472ef38ffb0f0ca66fff37b797 --- linker/debugger.cpp | 26 ++--- linker/dlfcn.cpp | 46 ++++----- linker/linker.cpp | 198 +++++++++++++++++++------------------- linker/linker_environ.cpp | 30 +++--- linker/linker_environ.h | 2 +- linker/linker_phdr.cpp | 32 +++--- linker/linker_phdr.h | 2 +- 7 files changed, 168 insertions(+), 168 deletions(-) diff --git a/linker/debugger.cpp b/linker/debugger.cpp index c31615171..6565985b5 100644 --- a/linker/debugger.cpp +++ b/linker/debugger.cpp @@ -162,12 +162,12 @@ static void log_signal_summary(int signum, const siginfo_t* info) { thread_name[MAX_TASK_NAME_LEN] = 0; } - // "info" will be NULL if the siginfo_t information was not available. + // "info" will be null if the siginfo_t information was not available. // Many signals don't have an address or a code. char code_desc[32]; // ", code -6" char addr_desc[32]; // ", fault addr 0x1234" addr_desc[0] = code_desc[0] = 0; - if (info != NULL) { + if (info != nullptr) { // For a rethrown signal, this si_code will be right and the one debuggerd shows will // always be SI_TKILL. __libc_format_buffer(code_desc, sizeof(code_desc), ", code %d", info->si_code); @@ -198,7 +198,7 @@ static bool have_siginfo(int signum) { } bool result = (old_action.sa_flags & SA_SIGINFO) != 0; - if (sigaction(signum, &old_action, NULL) == -1) { + if (sigaction(signum, &old_action, nullptr) == -1) { __libc_format_log(ANDROID_LOG_WARN, "libc", "Restore failed in test for SA_SIGINFO: %s", strerror(errno)); } @@ -230,7 +230,7 @@ static void send_debuggerd_packet(siginfo_t* info) { msg.action = DEBUGGER_ACTION_CRASH; msg.tid = gettid(); msg.abort_msg_address = reinterpret_cast(g_abort_message); - msg.original_si_code = (info != NULL) ? info->si_code : 0; + msg.original_si_code = (info != nullptr) ? info->si_code : 0; int ret = TEMP_FAILURE_RETRY(write(s, &msg, sizeof(msg))); if (ret == sizeof(msg)) { char debuggerd_ack; @@ -255,7 +255,7 @@ static void debuggerd_signal_handler(int signal_number, siginfo_t* info, void*) // It's possible somebody cleared the SA_SIGINFO flag, which would mean // our "info" arg holds an undefined value. if (!have_siginfo(signal_number)) { - info = NULL; + info = nullptr; } log_signal_summary(signal_number, info); @@ -296,14 +296,14 @@ __LIBC_HIDDEN__ void debuggerd_init() { // Use the alternate signal stack if available so we can catch stack overflows. action.sa_flags |= SA_ONSTACK; - sigaction(SIGABRT, &action, NULL); - sigaction(SIGBUS, &action, NULL); - sigaction(SIGFPE, &action, NULL); - sigaction(SIGILL, &action, NULL); - sigaction(SIGPIPE, &action, NULL); - sigaction(SIGSEGV, &action, NULL); + sigaction(SIGABRT, &action, nullptr); + sigaction(SIGBUS, &action, nullptr); + sigaction(SIGFPE, &action, nullptr); + sigaction(SIGILL, &action, nullptr); + sigaction(SIGPIPE, &action, nullptr); + sigaction(SIGSEGV, &action, nullptr); #if defined(SIGSTKFLT) - sigaction(SIGSTKFLT, &action, NULL); + sigaction(SIGSTKFLT, &action, nullptr); #endif - sigaction(SIGTRAP, &action, NULL); + sigaction(SIGTRAP, &action, nullptr); } diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index e15f54d56..38484d995 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -42,7 +42,7 @@ static const char* __bionic_set_dlerror(char* new_value) { static void __bionic_format_dlerror(const char* msg, const char* detail) { char* buffer = __get_thread()->dlerror_buffer; strlcpy(buffer, msg, __BIONIC_DLERROR_BUFFER_SIZE); - if (detail != NULL) { + if (detail != nullptr) { strlcat(buffer, ": ", __BIONIC_DLERROR_BUFFER_SIZE); strlcat(buffer, detail, __BIONIC_DLERROR_BUFFER_SIZE); } @@ -51,7 +51,7 @@ static void __bionic_format_dlerror(const char* msg, const char* detail) { } const char* dlerror() { - const char* old_value = __bionic_set_dlerror(NULL); + const char* old_value = __bionic_set_dlerror(nullptr); return old_value; } @@ -68,9 +68,9 @@ void android_update_LD_LIBRARY_PATH(const char* ld_library_path) { static void* dlopen_ext(const char* filename, int flags, const android_dlextinfo* extinfo) { ScopedPthreadMutexLocker locker(&g_dl_mutex); soinfo* result = do_dlopen(filename, flags, extinfo); - if (result == NULL) { + if (result == nullptr) { __bionic_format_dlerror("dlopen failed", linker_get_error_buffer()); - return NULL; + return nullptr; } return result; } @@ -80,33 +80,33 @@ void* android_dlopen_ext(const char* filename, int flags, const android_dlextinf } void* dlopen(const char* filename, int flags) { - return dlopen_ext(filename, flags, NULL); + return dlopen_ext(filename, flags, nullptr); } void* dlsym(void* handle, const char* symbol) { ScopedPthreadMutexLocker locker(&g_dl_mutex); #if !defined(__LP64__) - if (handle == NULL) { - __bionic_format_dlerror("dlsym library handle is null", NULL); - return NULL; + if (handle == nullptr) { + __bionic_format_dlerror("dlsym library handle is null", nullptr); + return nullptr; } #endif - if (symbol == NULL) { - __bionic_format_dlerror("dlsym symbol name is null", NULL); - return NULL; + if (symbol == nullptr) { + __bionic_format_dlerror("dlsym symbol name is null", nullptr); + return nullptr; } - soinfo* found = NULL; - ElfW(Sym)* sym = NULL; + soinfo* found = nullptr; + ElfW(Sym)* sym = nullptr; if (handle == RTLD_DEFAULT) { - sym = dlsym_linear_lookup(symbol, &found, NULL); + sym = dlsym_linear_lookup(symbol, &found, nullptr); } else if (handle == RTLD_NEXT) { void* caller_addr = __builtin_return_address(0); soinfo* si = find_containing_library(caller_addr); - sym = NULL; + sym = nullptr; if (si && si->next) { sym = dlsym_linear_lookup(symbol, &found, si->next); } @@ -114,7 +114,7 @@ void* dlsym(void* handle, const char* symbol) { sym = dlsym_handle_lookup(reinterpret_cast(handle), &found, symbol); } - if (sym != NULL) { + if (sym != nullptr) { unsigned bind = ELF_ST_BIND(sym->st_info); if ((bind == STB_GLOBAL || bind == STB_WEAK) && sym->st_shndx != 0) { @@ -122,10 +122,10 @@ void* dlsym(void* handle, const char* symbol) { } __bionic_format_dlerror("symbol found but not global", symbol); - return NULL; + return nullptr; } else { __bionic_format_dlerror("undefined symbol", symbol); - return NULL; + return nullptr; } } @@ -134,7 +134,7 @@ int dladdr(const void* addr, Dl_info* info) { // Determine if this address can be found in any library currently mapped. soinfo* si = find_containing_library(addr); - if (si == NULL) { + if (si == nullptr) { return 0; } @@ -146,7 +146,7 @@ int dladdr(const void* addr, Dl_info* info) { // Determine if any symbol in the library contains the specified address. ElfW(Sym)* sym = dladdr_find_symbol(si, addr); - if (sym != NULL) { + if (sym != nullptr) { info->dli_sname = si->strtab + sym->st_name; info->dli_saddr = reinterpret_cast(si->load_bias + sym->st_value); } @@ -164,7 +164,7 @@ int dlclose(void* handle) { // name_offset: starting index of the name in libdl_info.strtab #define ELF32_SYM_INITIALIZER(name_offset, value, shndx) \ { name_offset, \ - reinterpret_cast(reinterpret_cast(value)), \ + reinterpret_cast(value), \ /* st_size */ 0, \ (shndx == 0) ? 0 : (STB_GLOBAL << 4), \ /* st_other */ 0, \ @@ -176,7 +176,7 @@ int dlclose(void* handle) { (shndx == 0) ? 0 : (STB_GLOBAL << 4), \ /* st_other */ 0, \ shndx, \ - reinterpret_cast(reinterpret_cast(value)), \ + reinterpret_cast(value), \ /* st_size */ 0, \ } @@ -199,7 +199,7 @@ static ElfW(Sym) g_libdl_symtab[] = { // This is actually the STH_UNDEF entry. Technically, it's // supposed to have st_name == 0, but instead, it points to an index // in the strtab with a \0 to make iterating through the symtab easier. - ELFW(SYM_INITIALIZER)(sizeof(ANDROID_LIBDL_STRTAB) - 1, NULL, 0), + ELFW(SYM_INITIALIZER)(sizeof(ANDROID_LIBDL_STRTAB) - 1, nullptr, 0), ELFW(SYM_INITIALIZER)( 0, &dlopen, 1), ELFW(SYM_INITIALIZER)( 7, &dlclose, 1), ELFW(SYM_INITIALIZER)( 15, &dlsym, 1), diff --git a/linker/linker.cpp b/linker/linker.cpp index 9a58103b0..8d8ccb508 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -97,7 +97,7 @@ static const char* const kDefaultLdPaths[] = { "/vendor/lib", "/system/lib", #endif - NULL + nullptr }; #define LDPATH_BUFSIZE (LDPATH_MAX*64) @@ -116,7 +116,7 @@ static soinfo* g_ld_preloads[LDPRELOAD_MAX + 1]; __LIBC_HIDDEN__ int g_ld_debug_verbosity; -__LIBC_HIDDEN__ abort_msg_t* g_abort_message = NULL; // For debuggerd. +__LIBC_HIDDEN__ abort_msg_t* g_abort_message = nullptr; // For debuggerd. enum RelocationKind { kRelocAbsolute = 0, @@ -189,7 +189,7 @@ size_t linker_get_error_buffer_size() { extern "C" void __attribute__((noinline)) __attribute__((visibility("default"))) rtld_db_dlactivity(); static pthread_mutex_t g__r_debug_mutex = PTHREAD_MUTEX_INITIALIZER; -static r_debug _r_debug = {1, NULL, reinterpret_cast(&rtld_db_dlactivity), r_debug::RT_CONSISTENT, 0}; +static r_debug _r_debug = {1, nullptr, reinterpret_cast(&rtld_db_dlactivity), r_debug::RT_CONSISTENT, 0}; static link_map* r_debug_tail = 0; static void insert_soinfo_into_debug_map(soinfo* info) { @@ -288,7 +288,7 @@ static void protect_data(int protection) { static soinfo* soinfo_alloc(const char* name, struct stat* file_stat) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); - return NULL; + return nullptr; } soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat); @@ -301,7 +301,7 @@ static soinfo* soinfo_alloc(const char* name, struct stat* file_stat) { } static void soinfo_free(soinfo* si) { - if (si == NULL) { + if (si == nullptr) { return; } @@ -309,16 +309,16 @@ static void soinfo_free(soinfo* si) { munmap(reinterpret_cast(si->base), si->size); } - soinfo *prev = NULL, *trav; + soinfo *prev = nullptr, *trav; TRACE("name %s: freeing soinfo @ %p", si->name, si); - for (trav = solist; trav != NULL; trav = trav->next) { + for (trav = solist; trav != nullptr; trav = trav->next) { if (trav == si) break; prev = trav; } - if (trav == NULL) { + if (trav == nullptr) { /* si was not in solist */ DL_ERR("name \"%s\" is not in solist!", si->name); return; @@ -327,7 +327,7 @@ static void soinfo_free(soinfo* si) { // clear links to/from si si->remove_all_links(); - /* prev will never be NULL, because the first entry in solist is + /* prev will never be null, because the first entry in solist is always the static libdl_info. */ prev->next = si->next; @@ -341,7 +341,7 @@ static void soinfo_free(soinfo* si) { static void parse_path(const char* path, const char* delimiters, const char** array, char* buf, size_t buf_size, size_t max_count) { - if (path == NULL) { + if (path == nullptr) { return; } @@ -358,9 +358,9 @@ static void parse_path(const char* path, const char* delimiters, // Forget the last path if we had to truncate; this occurs if the 2nd to // last char isn't '\0' (i.e. wasn't originally a delimiter). if (i > 0 && len >= buf_size && buf[buf_size - 2] != '\0') { - array[i - 1] = NULL; + array[i - 1] = nullptr; } else { - array[i] = NULL; + array[i] = nullptr; } } @@ -396,7 +396,7 @@ _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) { } } *pcount = 0; - return NULL; + return nullptr; } #endif @@ -405,7 +405,7 @@ _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) { * loaded libraries. gcc_eh does the rest. */ int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void* data) { int rv = 0; - for (soinfo* si = solist; si != NULL; si = si->next) { + for (soinfo* si = solist; si != nullptr; si = si->next) { dl_phdr_info dl_info; dl_info.dlpi_addr = si->link_map_head.l_addr; dl_info.dlpi_name = si->link_map_head.l_name; @@ -454,7 +454,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) name, si->name, reinterpret_cast(si->base), hash, hash % si->nbucket); - return NULL; + return nullptr; } soinfo::soinfo(const char* name, const struct stat* file_stat) { @@ -464,7 +464,7 @@ soinfo::soinfo(const char* name, const struct stat* file_stat) { flags = FLAG_NEW_SOINFO; version = SOINFO_VERSION; - if (file_stat != NULL) { + if (file_stat != nullptr) { set_st_dev(file_stat->st_dev); set_st_ino(file_stat->st_ino); } @@ -511,9 +511,9 @@ static unsigned elfhash(const char* _name) { static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, soinfo* needed[]) { unsigned elf_hash = elfhash(name); - ElfW(Sym)* s = NULL; + ElfW(Sym)* s = nullptr; - if (si != NULL && somain != NULL) { + if (si != nullptr && somain != nullptr) { /* * Local scope is executable scope. Just start looking into it right away * for the shortcut. @@ -521,7 +521,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s if (si == somain) { s = soinfo_elf_lookup(si, elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *lsi = si; goto done; } @@ -547,7 +547,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s DEBUG("%s: looking up %s in executable %s", si->name, name, somain->name); s = soinfo_elf_lookup(somain, elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *lsi = somain; goto done; } @@ -573,7 +573,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s * Here we return the first definition found for simplicity. */ s = soinfo_elf_lookup(si, elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *lsi = si; goto done; } @@ -587,7 +587,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s DEBUG("%s: looking up %s in executable %s after local scope", si->name, name, somain->name); s = soinfo_elf_lookup(somain, elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *lsi = somain; goto done; } @@ -604,18 +604,18 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s } } - for (int i = 0; needed[i] != NULL; i++) { + for (int i = 0; needed[i] != nullptr; i++) { DEBUG("%s: looking up %s in %s", si->name, name, needed[i]->name); s = soinfo_elf_lookup(needed[i], elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *lsi = needed[i]; goto done; } } done: - if (s != NULL) { + if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", si->name, name, reinterpret_cast(s->st_value), @@ -624,7 +624,7 @@ done: return s; } - return NULL; + return nullptr; } // Another soinfo list allocator to use in dlsym. We don't reuse @@ -677,20 +677,20 @@ ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { ElfW(Sym)* dlsym_linear_lookup(const char* name, soinfo** found, soinfo* start) { unsigned elf_hash = elfhash(name); - if (start == NULL) { + if (start == nullptr) { start = solist; } - ElfW(Sym)* s = NULL; - for (soinfo* si = start; (s == NULL) && (si != NULL); si = si->next) { + ElfW(Sym)* s = nullptr; + for (soinfo* si = start; (s == nullptr) && (si != nullptr); si = si->next) { s = soinfo_elf_lookup(si, elf_hash, name); - if (s != NULL) { + if (s != nullptr) { *found = si; break; } } - if (s != NULL) { + if (s != nullptr) { TRACE_TYPE(LOOKUP, "%s s->st_value = %p, found->base = %p", name, reinterpret_cast(s->st_value), reinterpret_cast((*found)->base)); } @@ -700,12 +700,12 @@ ElfW(Sym)* dlsym_linear_lookup(const char* name, soinfo** found, soinfo* start) soinfo* find_containing_library(const void* p) { ElfW(Addr) address = reinterpret_cast(p); - for (soinfo* si = solist; si != NULL; si = si->next) { + for (soinfo* si = solist; si != nullptr; si = si->next) { if (address >= si->base && address - si->base < si->size) { return si; } } - return NULL; + return nullptr; } ElfW(Sym)* dladdr_find_symbol(soinfo* si, const void* addr) { @@ -722,12 +722,12 @@ ElfW(Sym)* dladdr_find_symbol(soinfo* si, const void* addr) { } } - return NULL; + return nullptr; } static int open_library_on_path(const char* name, const char* const paths[]) { char buf[512]; - for (size_t i = 0; paths[i] != NULL; ++i) { + for (size_t i = 0; paths[i] != nullptr; ++i) { int n = __libc_format_buffer(buf, sizeof(buf), "%s/%s", paths[i], name); if (n < 0 || n >= static_cast(sizeof(buf))) { PRINT("Warning: ignoring very long library path: %s/%s", paths[i], name); @@ -745,7 +745,7 @@ static int open_library(const char* name) { TRACE("[ opening %s ]", name); // If the name contains a slash, we should attempt to open it directly and not search the paths. - if (strchr(name, '/') != NULL) { + if (strchr(name, '/') != nullptr) { int fd = TEMP_FAILURE_RETRY(open(name, O_RDONLY | O_CLOEXEC)); if (fd != -1) { return fd; @@ -768,14 +768,14 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin int fd = -1; ScopedFd file_guard(-1); - if (extinfo != NULL && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { + if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { fd = extinfo->library_fd; } else { // Open the file. fd = open_library(name); if (fd == -1) { DL_ERR("library \"%s\" not found", name); - return NULL; + return nullptr; } file_guard.reset(fd); @@ -786,12 +786,12 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin struct stat file_stat; if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); - return NULL; + return nullptr; } // Check for symlink and other situations where // file can have different names. - for (soinfo* si = solist; si != NULL; si = si->next) { + for (soinfo* si = solist; si != nullptr; si = si->next) { if (si->get_st_dev() != 0 && si->get_st_ino() != 0 && si->get_st_dev() == file_stat.st_dev && @@ -802,17 +802,17 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin } if ((dlflags & RTLD_NOLOAD) != 0) { - return NULL; + return nullptr; } // Read the ELF header and load the segments. if (!elf_reader.Load(extinfo)) { - return NULL; + return nullptr; } soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); - if (si == NULL) { - return NULL; + if (si == nullptr) { + return nullptr; } si->base = elf_reader.load_start(); si->size = elf_reader.load_size(); @@ -827,7 +827,7 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin if (!soinfo_link_image(si, extinfo)) { soinfo_free(si); - return NULL; + return nullptr; } return si; @@ -835,16 +835,16 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin static soinfo *find_loaded_library_by_name(const char* name) { const char* search_name = SEARCH_NAME(name); - for (soinfo* si = solist; si != NULL; si = si->next) { + for (soinfo* si = solist; si != nullptr; si = si->next) { if (!strcmp(search_name, si->name)) { return si; } } - return NULL; + return nullptr; } static soinfo* find_library_internal(const char* name, int dlflags, const android_dlextinfo* extinfo) { - if (name == NULL) { + if (name == nullptr) { return somain; } @@ -852,14 +852,14 @@ static soinfo* find_library_internal(const char* name, int dlflags, const androi // Library might still be loaded, the accurate detection // of this fact is done by load_library - if (si == NULL) { + if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); si = load_library(name, dlflags, extinfo); } - if (si != NULL && (si->flags & FLAG_LINKED) == 0) { + if (si != nullptr && (si->flags & FLAG_LINKED) == 0) { DL_ERR("recursive link to \"%s\"", si->name); - return NULL; + return nullptr; } return si; @@ -867,7 +867,7 @@ static soinfo* find_library_internal(const char* name, int dlflags, const androi static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { soinfo* si = find_library_internal(name, dlflags, extinfo); - if (si != NULL) { + if (si != nullptr) { si->ref_count++; } return si; @@ -888,8 +888,8 @@ static void soinfo_unload(soinfo* si) { if (d->d_tag == DT_NEEDED) { const char* library_name = si->strtab + d->d_un.d_val; TRACE("%s needs to unload %s", si->name, library_name); - soinfo* needed = find_library(library_name, RTLD_NOLOAD, NULL); - if (needed != NULL) { + soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); + if (needed != nullptr) { soinfo_unload(needed); } else { // Not found: for example if symlink was deleted between dlopen and dlclose @@ -936,15 +936,15 @@ void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) { soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NOLOAD)) != 0) { DL_ERR("invalid flags to dlopen: %x", flags); - return NULL; + return nullptr; } - if (extinfo != NULL && ((extinfo->flags & ~(ANDROID_DLEXT_VALID_FLAG_BITS)) != 0)) { + if (extinfo != nullptr && ((extinfo->flags & ~(ANDROID_DLEXT_VALID_FLAG_BITS)) != 0)) { DL_ERR("invalid extended flags to android_dlopen_ext: %" PRIx64, extinfo->flags); - return NULL; + return nullptr; } protect_data(PROT_READ | PROT_WRITE); soinfo* si = find_library(name, flags, extinfo); - if (si != NULL) { + if (si != nullptr) { si->CallConstructors(); } protect_data(PROT_READ); @@ -967,7 +967,7 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, so unsigned sym = ELFW(R_SYM)(rel->r_info); ElfW(Addr) reloc = static_cast(rel->r_offset + si->load_bias); ElfW(Addr) sym_addr = 0; - const char* sym_name = NULL; + const char* sym_name = nullptr; sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); s = soinfo_do_lookup(si, sym_name, &lsi, needed); @@ -990,7 +990,7 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, unsigned sym = ELFW(R_SYM)(rela->r_info); ElfW(Addr) reloc = static_cast(rela->r_offset + si->load_bias); ElfW(Addr) sym_addr = 0; - const char* sym_name = NULL; + const char* sym_name = nullptr; sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); s = soinfo_do_lookup(si, sym_name, &lsi, needed); @@ -1014,7 +1014,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* unsigned sym = ELFW(R_SYM)(rela->r_info); ElfW(Addr) reloc = static_cast(rela->r_offset + si->load_bias); ElfW(Addr) sym_addr = 0; - const char* sym_name = NULL; + const char* sym_name = nullptr; DEBUG("Processing '%s' relocation at index %zd", si->name, idx); if (type == 0) { // R_*_NONE @@ -1023,7 +1023,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* if (sym != 0) { sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); s = soinfo_do_lookup(si, sym_name, &lsi, needed); - if (s == NULL) { + if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &si->symtab[sym]; if (ELF_ST_BIND(s->st_info) != STB_WEAK) { @@ -1079,7 +1079,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* } count_relocation(kRelocSymbol); } else { - s = NULL; + s = nullptr; } switch (type) { @@ -1283,7 +1283,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n unsigned sym = ELFW(R_SYM)(rel->r_info); ElfW(Addr) reloc = static_cast(rel->r_offset + si->load_bias); ElfW(Addr) sym_addr = 0; - const char* sym_name = NULL; + const char* sym_name = nullptr; DEBUG("Processing '%s' relocation at index %zd", si->name, idx); if (type == 0) { // R_*_NONE @@ -1292,7 +1292,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n if (sym != 0) { sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); s = soinfo_do_lookup(si, sym_name, &lsi, needed); - if (s == NULL) { + if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &si->symtab[sym]; if (ELF_ST_BIND(s->st_info) != STB_WEAK) { @@ -1351,7 +1351,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n } count_relocation(kRelocSymbol); } else { - s = NULL; + s = nullptr; } switch (type) { @@ -1476,7 +1476,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n #if defined(__mips__) static bool mips_relocate_got(soinfo* si, soinfo* needed[]) { ElfW(Addr)** got = si->plt_got; - if (got == NULL) { + if (got == nullptr) { return true; } unsigned local_gotno = si->mips_local_gotno; @@ -1508,7 +1508,7 @@ static bool mips_relocate_got(soinfo* si, soinfo* needed[]) { const char* sym_name = si->strtab + sym->st_name; soinfo* lsi; ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, needed); - if (s == NULL) { + if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; if (ELF_ST_BIND(s->st_info) != STB_WEAK) { @@ -1528,7 +1528,7 @@ static bool mips_relocate_got(soinfo* si, soinfo* needed[]) { #endif void soinfo::CallArray(const char* array_name __unused, linker_function_t* functions, size_t count, bool reverse) { - if (functions == NULL) { + if (functions == nullptr) { return; } @@ -1547,7 +1547,7 @@ void soinfo::CallArray(const char* array_name __unused, linker_function_t* funct } void soinfo::CallFunction(const char* function_name __unused, linker_function_t function) { - if (function == NULL || reinterpret_cast(function) == static_cast(-1)) { + if (function == nullptr || reinterpret_cast(function) == static_cast(-1)) { return; } @@ -1583,7 +1583,7 @@ void soinfo::CallConstructors() { // out above, the libc constructor will be called again (recursively!). constructors_called = true; - if ((flags & FLAG_EXE) == 0 && preinit_array != NULL) { + if ((flags & FLAG_EXE) == 0 && preinit_array != nullptr) { // The GNU dynamic linker silently ignores these, but we warn the developer. PRINT("\"%s\": ignoring %zd-entry DT_PREINIT_ARRAY in shared library!", name, preinit_array_count); @@ -1779,7 +1779,7 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { ElfW(Word) dynamic_flags; phdr_table_get_dynamic_section(phdr, phnum, base, &si->dynamic, &dynamic_count, &dynamic_flags); - if (si->dynamic == NULL) { + if (si->dynamic == nullptr) { if (!relocating_linker) { DL_ERR("missing PT_DYNAMIC in \"%s\"", si->name); } @@ -1997,9 +1997,9 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { if (si->flags & FLAG_EXE) { memset(g_ld_preloads, 0, sizeof(g_ld_preloads)); size_t preload_count = 0; - for (size_t i = 0; g_ld_preload_names[i] != NULL; i++) { - soinfo* lsi = find_library(g_ld_preload_names[i], 0, NULL); - if (lsi != NULL) { + for (size_t i = 0; g_ld_preload_names[i] != nullptr; i++) { + soinfo* lsi = find_library(g_ld_preload_names[i], 0, nullptr); + if (lsi != nullptr) { g_ld_preloads[preload_count++] = lsi; } else { // As with glibc, failure to load an LD_PRELOAD library is just a warning. @@ -2016,8 +2016,8 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { if (d->d_tag == DT_NEEDED) { const char* library_name = si->strtab + d->d_un.d_val; DEBUG("%s needs %s", si->name, library_name); - soinfo* lsi = find_library(library_name, 0, NULL); - if (lsi == NULL) { + soinfo* lsi = find_library(library_name, 0, nullptr); + if (lsi == nullptr) { strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", library_name, si->name, tmp_err_buf); @@ -2028,7 +2028,7 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { *pneeded++ = lsi; } } - *pneeded = NULL; + *pneeded = nullptr; #if !defined(__LP64__) if (si->has_text_relocations) { @@ -2045,26 +2045,26 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { #endif #if defined(USE_RELA) - if (si->plt_rela != NULL) { + if (si->plt_rela != nullptr) { DEBUG("[ relocating %s plt ]\n", si->name); if (soinfo_relocate(si, si->plt_rela, si->plt_rela_count, needed)) { return false; } } - if (si->rela != NULL) { + if (si->rela != nullptr) { DEBUG("[ relocating %s ]\n", si->name); if (soinfo_relocate(si, si->rela, si->rela_count, needed)) { return false; } } #else - if (si->plt_rel != NULL) { + if (si->plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", si->name); if (soinfo_relocate(si, si->plt_rel, si->plt_rel_count, needed)) { return false; } } - if (si->rel != NULL) { + if (si->rel != nullptr) { DEBUG("[ relocating %s ]", si->name); if (soinfo_relocate(si, si->rel, si->rel_count, needed)) { return false; @@ -2140,11 +2140,11 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { static void add_vdso(KernelArgumentBlock& args __unused) { #if defined(AT_SYSINFO_EHDR) ElfW(Ehdr)* ehdr_vdso = reinterpret_cast(args.getauxval(AT_SYSINFO_EHDR)); - if (ehdr_vdso == NULL) { + if (ehdr_vdso == nullptr) { return; } - soinfo* si = soinfo_alloc("[vdso]", NULL); + soinfo* si = soinfo_alloc("[vdso]", nullptr); si->phdr = reinterpret_cast(reinterpret_cast(ehdr_vdso) + ehdr_vdso->e_phoff); si->phnum = ehdr_vdso->e_phnum; @@ -2152,7 +2152,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->size = phdr_table_get_load_size(si->phdr, si->phnum); si->load_bias = get_elf_exec_load_bias(ehdr_vdso); - soinfo_link_image(si, NULL); + soinfo_link_image(si, nullptr); #endif } @@ -2185,7 +2185,7 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_base); ElfW(Phdr)* phdr = reinterpret_cast(linker_base + elf_hdr->e_phoff); phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base, - &linker_soinfo_for_gdb.dynamic, NULL, NULL); + &linker_soinfo_for_gdb.dynamic, nullptr, nullptr); insert_soinfo_into_debug_map(&linker_soinfo_for_gdb); } @@ -2213,14 +2213,14 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( // Get a few environment variables. const char* LD_DEBUG = linker_env_get("LD_DEBUG"); - if (LD_DEBUG != NULL) { + if (LD_DEBUG != nullptr) { g_ld_debug_verbosity = atoi(LD_DEBUG); } // Normally, these are cleaned by linker_env_init, but the test // doesn't cost us anything. - const char* ldpath_env = NULL; - const char* ldpreload_env = NULL; + const char* ldpath_env = nullptr; + const char* ldpreload_env = nullptr; if (!get_AT_SECURE()) { ldpath_env = linker_env_get("LD_LIBRARY_PATH"); ldpreload_env = linker_env_get("LD_PRELOAD"); @@ -2228,8 +2228,8 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( INFO("[ android linker & debugger ]"); - soinfo* si = soinfo_alloc(args.argv[0], NULL); - if (si == NULL) { + soinfo* si = soinfo_alloc(args.argv[0], nullptr); + if (si == nullptr) { exit(EXIT_FAILURE); } @@ -2239,8 +2239,8 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( map->l_addr = 0; map->l_name = args.argv[0]; - map->l_prev = NULL; - map->l_next = NULL; + map->l_prev = nullptr; + map->l_next = nullptr; _r_debug.r_map = map; r_debug_tail = map; @@ -2266,7 +2266,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( break; } } - si->dynamic = NULL; + si->dynamic = nullptr; si->ref_count = 1; ElfW(Ehdr)* elf_hdr = reinterpret_cast(si->base); @@ -2281,7 +2281,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; - if (!soinfo_link_image(si, NULL)) { + if (!soinfo_link_image(si, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2290,7 +2290,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->CallPreInitConstructors(); - for (size_t i = 0; g_ld_preloads[i] != NULL; ++i) { + for (size_t i = 0; g_ld_preloads[i] != nullptr; ++i) { g_ld_preloads[i]->CallConstructors(); } @@ -2303,7 +2303,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->CallConstructors(); #if TIMING - gettimeofday(&t1, NULL); + gettimeofday(&t1, nullptr); PRINT("LINKER TIME: %s: %d microseconds", args.argv[0], (int) ( (((long long)t1.tv_sec * 1000000LL) + (long long)t1.tv_usec) - (((long long)t0.tv_sec * 1000000LL) + (long long)t0.tv_usec))); @@ -2404,12 +2404,12 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.base = linker_addr; linker_so.size = phdr_table_get_load_size(phdr, elf_hdr->e_phnum); linker_so.load_bias = get_elf_exec_load_bias(elf_hdr); - linker_so.dynamic = NULL; + linker_so.dynamic = nullptr; linker_so.phdr = phdr; linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!soinfo_link_image(&linker_so, NULL)) { + if (!soinfo_link_image(&linker_so, nullptr)) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker_environ.cpp b/linker/linker_environ.cpp index 846624b9a..daee56f7e 100644 --- a/linker/linker_environ.cpp +++ b/linker/linker_environ.cpp @@ -58,7 +58,7 @@ static void __init_AT_SECURE(KernelArgumentBlock& args) { // Check if the environment variable definition at 'envstr' // starts with '=', and if so return the address of the -// first character after the equal sign. Otherwise return NULL. +// first character after the equal sign. Otherwise return null. static const char* env_match(const char* envstr, const char* name) { size_t i = 0; @@ -70,7 +70,7 @@ static const char* env_match(const char* envstr, const char* name) { return envstr + i + 1; } - return NULL; + return nullptr; } static bool __is_valid_environment_variable(const char* name) { @@ -78,7 +78,7 @@ static bool __is_valid_environment_variable(const char* name) { // as the maximum size for an env. variable definition. const int MAX_ENV_LEN = 32*4096; - if (name == NULL) { + if (name == nullptr) { return false; } @@ -136,10 +136,10 @@ static bool __is_unsafe_environment_variable(const char* name) { "RES_OPTIONS", "TMPDIR", "TZDIR", - NULL + nullptr }; - for (size_t i = 0; UNSAFE_VARIABLE_NAMES[i] != NULL; ++i) { - if (env_match(name, UNSAFE_VARIABLE_NAMES[i]) != NULL) { + for (size_t i = 0; UNSAFE_VARIABLE_NAMES[i] != nullptr; ++i) { + if (env_match(name, UNSAFE_VARIABLE_NAMES[i]) != nullptr) { return true; } } @@ -149,7 +149,7 @@ static bool __is_unsafe_environment_variable(const char* name) { static void __sanitize_environment_variables() { char** src = _envp; char** dst = _envp; - for (; src[0] != NULL; ++src) { + for (; src[0] != nullptr; ++src) { if (!__is_valid_environment_variable(src[0])) { continue; } @@ -160,11 +160,11 @@ static void __sanitize_environment_variables() { dst[0] = src[0]; ++dst; } - dst[0] = NULL; + dst[0] = nullptr; } void linker_env_init(KernelArgumentBlock& args) { - // Store environment pointer - can't be NULL. + // Store environment pointer - can't be null. _envp = args.envp; __init_AT_SECURE(args); @@ -172,18 +172,18 @@ void linker_env_init(KernelArgumentBlock& args) { } const char* linker_env_get(const char* name) { - if (name == NULL || name[0] == '\0') { - return NULL; + if (name == nullptr || name[0] == '\0') { + return nullptr; } - for (char** p = _envp; p[0] != NULL; ++p) { + for (char** p = _envp; p[0] != nullptr; ++p) { const char* val = env_match(p[0], name); - if (val != NULL) { + if (val != nullptr) { if (val[0] == '\0') { - return NULL; // Return NULL for empty strings. + return nullptr; // Return null for empty strings. } return val; } } - return NULL; + return nullptr; } diff --git a/linker/linker_environ.h b/linker/linker_environ.h index d3f54fd08..0f6ac084d 100644 --- a/linker/linker_environ.h +++ b/linker/linker_environ.h @@ -35,7 +35,7 @@ class KernelArgumentBlock; extern void linker_env_init(KernelArgumentBlock& args); // Returns the value of environment variable 'name' if defined and not -// empty, or NULL otherwise. +// empty, or null otherwise. extern const char* linker_env_get(const char* name); // Returns the value of this program's AT_SECURE variable. diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 0b99d2065..1bbd57778 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -121,13 +121,13 @@ ElfReader::ElfReader(const char* name, int fd) : name_(name), fd_(fd), - phdr_num_(0), phdr_mmap_(NULL), phdr_table_(NULL), phdr_size_(0), - load_start_(NULL), load_size_(0), load_bias_(0), - loaded_phdr_(NULL) { + phdr_num_(0), phdr_mmap_(nullptr), phdr_table_(nullptr), phdr_size_(0), + load_start_(nullptr), load_size_(0), load_bias_(0), + loaded_phdr_(nullptr) { } ElfReader::~ElfReader() { - if (phdr_mmap_ != NULL) { + if (phdr_mmap_ != nullptr) { munmap(phdr_mmap_, phdr_size_); } } @@ -225,7 +225,7 @@ bool ElfReader::ReadProgramHeader() { phdr_size_ = page_max - page_min; - void* mmap_result = mmap(NULL, phdr_size_, PROT_READ, MAP_PRIVATE, fd_, page_min); + void* mmap_result = mmap(nullptr, phdr_size_, PROT_READ, MAP_PRIVATE, fd_, page_min); if (mmap_result == MAP_FAILED) { DL_ERR("\"%s\" phdr mmap failed: %s", name_, strerror(errno)); return false; @@ -242,7 +242,7 @@ bool ElfReader::ReadProgramHeader() { * process' address space. If there are no loadable segments, 0 is * returned. * - * If out_min_vaddr or out_max_vaddr are non-NULL, they will be + * If out_min_vaddr or out_max_vaddr are not null, they will be * set to the minimum and maximum addresses of pages to be reserved, * or 0 if there is nothing to load. */ @@ -276,10 +276,10 @@ size_t phdr_table_get_load_size(const ElfW(Phdr)* phdr_table, size_t phdr_count, min_vaddr = PAGE_START(min_vaddr); max_vaddr = PAGE_END(max_vaddr); - if (out_min_vaddr != NULL) { + if (out_min_vaddr != nullptr) { *out_min_vaddr = min_vaddr; } - if (out_max_vaddr != NULL) { + if (out_max_vaddr != nullptr) { *out_max_vaddr = max_vaddr; } return max_vaddr - min_vaddr; @@ -301,7 +301,7 @@ bool ElfReader::ReserveAddressSpace(const android_dlextinfo* extinfo) { size_t reserved_size = 0; bool reserved_hint = true; - if (extinfo != NULL) { + if (extinfo != nullptr) { if (extinfo->flags & ANDROID_DLEXT_RESERVED_ADDRESS) { reserved_size = extinfo->reserved_size; reserved_hint = false; @@ -585,9 +585,9 @@ int phdr_table_map_gnu_relro(const ElfW(Phdr)* phdr_table, size_t phdr_count, El return -1; } off_t file_size = file_stat.st_size; - void* temp_mapping = NULL; + void* temp_mapping = nullptr; if (file_size > 0) { - temp_mapping = mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, fd, 0); + temp_mapping = mmap(nullptr, file_size, PROT_READ, MAP_PRIVATE, fd, 0); if (temp_mapping == MAP_FAILED) { return -1; } @@ -667,7 +667,7 @@ int phdr_table_map_gnu_relro(const ElfW(Phdr)* phdr_table, size_t phdr_count, El * phdr_count -> number of entries in tables * load_bias -> load bias * Output: - * arm_exidx -> address of table in memory (NULL on failure). + * arm_exidx -> address of table in memory (null on failure). * arm_exidx_count -> number of items in table (0 on failure). * Return: * 0 on error, -1 on failure (_no_ error code in errno) @@ -687,21 +687,21 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, *arm_exidx_count = (unsigned)(phdr->p_memsz / 8); return 0; } - *arm_exidx = NULL; + *arm_exidx = nullptr; *arm_exidx_count = 0; return -1; } #endif /* Return the address and size of the ELF file's .dynamic section in memory, - * or NULL if missing. + * or null if missing. * * Input: * phdr_table -> program header table * phdr_count -> number of entries in tables * load_bias -> load bias * Output: - * dynamic -> address of table in memory (NULL on failure). + * dynamic -> address of table in memory (null on failure). * dynamic_count -> number of items in table (0 on failure). * dynamic_flags -> protection flags for section (unset on failure) * Return: @@ -727,7 +727,7 @@ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_co } return; } - *dynamic = NULL; + *dynamic = nullptr; if (dynamic_count) { *dynamic_count = 0; } diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index 611f1a7cb..50708a0e6 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -81,7 +81,7 @@ class ElfReader { }; size_t phdr_table_get_load_size(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr)* min_vaddr = NULL, ElfW(Addr)* max_vaddr = NULL); + ElfW(Addr)* min_vaddr = nullptr, ElfW(Addr)* max_vaddr = nullptr); int phdr_table_protect_segments(const ElfW(Phdr)* phdr_table, size_t phdr_count, ElfW(Addr) load_bias); From 4d01d08c2935980fbd9de2d7699230db11074453 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 29 Aug 2014 14:01:48 -0700 Subject: [PATCH 013/194] Erase elements in LinkedList::remove_if (cherry picked from commit 4bea498544bb1377f610520d7f58856382a6e5fc) Change-Id: I1ffe248bc2b7572f38fbd987e9c6db5ecbd4559d --- linker/linked_list.h | 44 ++++++++++++++---- linker/linker.cpp | 19 ++++++-- linker/tests/linked_list_test.cpp | 77 +++++++++++++++++++++++++++++-- 3 files changed, 121 insertions(+), 19 deletions(-) diff --git a/linker/linked_list.h b/linker/linked_list.h index e51eb9cb0..14fe1e58d 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -88,24 +88,50 @@ class LinkedList { template void for_each(F&& action) { for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { - if (e->element != nullptr) { - action(e->element); - } + action(e->element); } } template - void remove_if(F&& predicate) { - for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { - if (e->element != nullptr && predicate(e->element)) { - e->element = nullptr; + void remove_if(F predicate) { + for (LinkedListEntry* e = head_, *p = nullptr; e != nullptr;) { + if (predicate(e->element)) { + LinkedListEntry* next = e->next; + if (p == nullptr) { + head_ = next; + } else { + p->next = next; + } + Allocator::free(e); + e = next; + } else { + p = e; + e = e->next; } } } - bool contains(const T* el) { + size_t size() const { + size_t sz = 0; for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { - if (e->element != nullptr && e->element == el) { + ++sz; + } + + return sz; + } + + size_t copy_to_array(T* array[], size_t array_length) const { + size_t sz = 0; + for (LinkedListEntry* e = head_; sz < array_length && e != nullptr; e = e->next) { + array[sz++] = e->element; + } + + return sz; + } + + bool contains(const T* el) const { + for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { + if (e->element == el) { return true; } } diff --git a/linker/linker.cpp b/linker/linker.cpp index 8d8ccb508..919f8c04a 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -627,6 +627,8 @@ done: return nullptr; } + + // Another soinfo list allocator to use in dlsym. We don't reuse // SoinfoListAllocator because it is write-protected most of the time. static LinkerAllocator> g_soinfo_list_allocator_rw; @@ -879,10 +881,17 @@ static void soinfo_unload(soinfo* si) { si->CallDestructors(); if (si->has_min_version(0)) { - si->get_children().for_each([&] (soinfo* child) { - TRACE("%s needs to unload %s", si->name, child->name); - soinfo_unload(child); - }); + // It is not safe to do si->get_children().for_each, because + // during soinfo_free the child will concurrently modify the si->children + // list, therefore we create a copy and use it to unload children. + size_t children_count = si->get_children().size(); + soinfo* children[children_count]; + si->get_children().copy_to_array(children, children_count); + + for (size_t i = 0; i < children_count; ++i) { + TRACE("%s needs to unload %s", si->name, children[i]->name); + soinfo_unload(children[i]); + } } else { for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { if (d->d_tag == DT_NEEDED) { @@ -1636,7 +1645,7 @@ void soinfo::remove_all_links() { }); parents.for_each([&] (soinfo* parent) { - parent->children.for_each([&] (const soinfo* child) { + parent->children.remove_if([&] (const soinfo* child) { return child == this; }); }); diff --git a/linker/tests/linked_list_test.cpp b/linker/tests/linked_list_test.cpp index b9816fa10..0483b8412 100644 --- a/linker/tests/linked_list_test.cpp +++ b/linker/tests/linked_list_test.cpp @@ -80,7 +80,7 @@ TEST(linked_list, simple) { }); ASSERT_TRUE(!alloc_called); - ASSERT_TRUE(!free_called); + ASSERT_TRUE(free_called); ASSERT_EQ("dba", test_list_to_string(list)); alloc_called = free_called = false; @@ -103,15 +103,82 @@ TEST(linked_list, push_pop) { ASSERT_EQ("ab", test_list_to_string(list)); list.push_back("c"); ASSERT_EQ("abc", test_list_to_string(list)); - ASSERT_EQ("a", list.pop_front()); + ASSERT_STREQ("a", list.pop_front()); ASSERT_EQ("bc", test_list_to_string(list)); - ASSERT_EQ("b", list.pop_front()); + ASSERT_STREQ("b", list.pop_front()); ASSERT_EQ("c", test_list_to_string(list)); - ASSERT_EQ("c", list.pop_front()); + ASSERT_STREQ("c", list.pop_front()); ASSERT_EQ("", test_list_to_string(list)); ASSERT_TRUE(list.pop_front() == nullptr); list.push_back("r"); ASSERT_EQ("r", test_list_to_string(list)); - ASSERT_EQ("r", list.pop_front()); + ASSERT_STREQ("r", list.pop_front()); ASSERT_TRUE(list.pop_front() == nullptr); } + +TEST(linked_list, remove_if_then_pop) { + test_list_t list; + list.push_back("a"); + list.push_back("b"); + list.push_back("c"); + list.push_back("d"); + list.remove_if([](const char* c) { + return *c == 'b' || *c == 'c'; + }); + + ASSERT_EQ("ad", test_list_to_string(list)); + ASSERT_STREQ("a", list.pop_front()); + ASSERT_EQ("d", test_list_to_string(list)); + ASSERT_STREQ("d", list.pop_front()); + ASSERT_TRUE(list.pop_front() == nullptr); +} + +TEST(linked_list, copy_to_array) { + test_list_t list; + const size_t max_size = 128; + const char* buf[max_size]; + memset(buf, 0, sizeof(buf)); + + ASSERT_EQ(0U, list.size()); + ASSERT_EQ(0U, list.copy_to_array(buf, max_size)); + ASSERT_EQ(nullptr, buf[0]); + + list.push_back("a"); + list.push_back("b"); + list.push_back("c"); + list.push_back("d"); + + memset(buf, 0, sizeof(buf)); + ASSERT_EQ(4U, list.size()); + ASSERT_EQ(2U, list.copy_to_array(buf, 2)); + ASSERT_EQ('a', *buf[0]); + ASSERT_EQ('b', *buf[1]); + ASSERT_EQ(nullptr, buf[2]); + + ASSERT_EQ(4U, list.copy_to_array(buf, max_size)); + ASSERT_EQ('a', *buf[0]); + ASSERT_EQ('b', *buf[1]); + ASSERT_EQ('c', *buf[2]); + ASSERT_EQ('d', *buf[3]); + ASSERT_EQ(nullptr, buf[4]); + + memset(buf, 0, sizeof(buf)); + list.remove_if([](const char* c) { + return *c != 'c'; + }); + ASSERT_EQ(1U, list.size()); + ASSERT_EQ(1U, list.copy_to_array(buf, max_size)); + ASSERT_EQ('c', *buf[0]); + ASSERT_EQ(nullptr, buf[1]); + + memset(buf, 0, sizeof(buf)); + + list.remove_if([](const char* c) { + return *c == 'c'; + }); + + ASSERT_EQ(0U, list.size()); + ASSERT_EQ(0U, list.copy_to_array(buf, max_size)); + ASSERT_EQ(nullptr, buf[0]); +} + From ff01f6fcced83b6446136d6ddc9b3a536fab57f7 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 1 Sep 2014 16:15:52 -0700 Subject: [PATCH 014/194] Introduce size-based r/w allocators (cherry picked from commit 0cd83ebb0e9784827d9ec0a8028a710e73a28b2b) Change-Id: Ib037bd5313c9a78b6051482f14e789aa820b4dd1 --- linker/linker.cpp | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 919f8c04a..16730d663 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -627,10 +627,42 @@ done: return nullptr; } +// Each size has it's own allocator. +template +class SizeBasedAllocator { + public: + static void* alloc() { + return allocator_.alloc(); + } + static void free(void* ptr) { + allocator_.free(ptr); + } + + private: + static LinkerBlockAllocator allocator_; +}; + +template +LinkerBlockAllocator SizeBasedAllocator::allocator_(size); + +template +class TypeBasedAllocator { + public: + static T* alloc() { + return reinterpret_cast(SizeBasedAllocator::alloc()); + } + + static void free(T* ptr) { + SizeBasedAllocator::free(ptr); + } +}; + +template +using linked_list_t = LinkedList>>; + +typedef linked_list_t SoinfoLinkedList; -// Another soinfo list allocator to use in dlsym. We don't reuse -// SoinfoListAllocator because it is write-protected most of the time. static LinkerAllocator> g_soinfo_list_allocator_rw; class SoinfoListAllocatorRW { public: @@ -646,8 +678,9 @@ class SoinfoListAllocatorRW { // This is used by dlsym(3). It performs symbol lookup only within the // specified soinfo object and its dependencies in breadth first order. ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { - LinkedList visit_list; - LinkedList visited; + SoinfoLinkedList visit_list; + SoinfoLinkedList visited; + visit_list.push_back(si); soinfo* current_soinfo; while ((current_soinfo = visit_list.pop_front()) != nullptr) { From 4466bd72fb9daeb0ef8f250e8314b555aab30817 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 2 Sep 2014 09:45:40 -0700 Subject: [PATCH 015/194] Implement LinkedList::visit() (cherry picked from commit a4926058496c1c24c00ac07e42d45048dac7c487) Change-Id: I59554be45c910bfe33494016595a5ade9daad230 --- linker/linked_list.h | 15 ++++++++-- linker/tests/linked_list_test.cpp | 50 ++++++++++++++++++++++++++----- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/linker/linked_list.h b/linker/linked_list.h index 14fe1e58d..5fbdc8ffb 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -86,10 +86,21 @@ class LinkedList { } template - void for_each(F&& action) { + void for_each(F action) { + visit([&] (T* si) { + action(si); + return true; + }); + } + + template + bool visit(F action) { for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { - action(e->element); + if (!action(e->element)) { + return false; + } } + return true; } template diff --git a/linker/tests/linked_list_test.cpp b/linker/tests/linked_list_test.cpp index 0483b8412..a555edb33 100644 --- a/linker/tests/linked_list_test.cpp +++ b/linker/tests/linked_list_test.cpp @@ -151,15 +151,15 @@ TEST(linked_list, copy_to_array) { memset(buf, 0, sizeof(buf)); ASSERT_EQ(4U, list.size()); ASSERT_EQ(2U, list.copy_to_array(buf, 2)); - ASSERT_EQ('a', *buf[0]); - ASSERT_EQ('b', *buf[1]); + ASSERT_STREQ("a", buf[0]); + ASSERT_STREQ("b", buf[1]); ASSERT_EQ(nullptr, buf[2]); ASSERT_EQ(4U, list.copy_to_array(buf, max_size)); - ASSERT_EQ('a', *buf[0]); - ASSERT_EQ('b', *buf[1]); - ASSERT_EQ('c', *buf[2]); - ASSERT_EQ('d', *buf[3]); + ASSERT_STREQ("a", buf[0]); + ASSERT_STREQ("b", buf[1]); + ASSERT_STREQ("c", buf[2]); + ASSERT_STREQ("d", buf[3]); ASSERT_EQ(nullptr, buf[4]); memset(buf, 0, sizeof(buf)); @@ -168,7 +168,7 @@ TEST(linked_list, copy_to_array) { }); ASSERT_EQ(1U, list.size()); ASSERT_EQ(1U, list.copy_to_array(buf, max_size)); - ASSERT_EQ('c', *buf[0]); + ASSERT_STREQ("c", buf[0]); ASSERT_EQ(nullptr, buf[1]); memset(buf, 0, sizeof(buf)); @@ -182,3 +182,39 @@ TEST(linked_list, copy_to_array) { ASSERT_EQ(nullptr, buf[0]); } +TEST(linked_list, test_visit) { + test_list_t list; + list.push_back("a"); + list.push_back("b"); + list.push_back("c"); + list.push_back("d"); + + int visits = 0; + std::stringstream ss; + bool result = list.visit([&](const char* c) { + ++visits; + ss << c; + return true; + }); + + ASSERT_TRUE(result); + ASSERT_EQ(4, visits); + ASSERT_EQ("abcd", ss.str()); + + visits = 0; + ss.str(std::string()); + + result = list.visit([&](const char* c) { + if (++visits == 3) { + return false; + } + + ss << c; + return true; + }); + + ASSERT_TRUE(!result); + ASSERT_EQ(3, visits); + ASSERT_EQ("ab", ss.str()); +} + From 7210c41fdce065a37f29dce7f32880301cce90c2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 2 Sep 2014 11:47:23 -0700 Subject: [PATCH 016/194] Encapsulate soinfo_link_image and soinfo_relocate Also get rid of needed[] array for these functions (cherry picked from commit 29bbc9dd4c606de9187e46d8899a2a744715c967) Change-Id: Id208621f66afa2e02a6b3facacee7d874466d81b --- linker/linker.cpp | 297 ++++++++++++++++++++++------------------------ linker/linker.h | 6 + 2 files changed, 149 insertions(+), 154 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 16730d663..9eb74403c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -79,7 +79,6 @@ static const char* get_base_name(const char* name) { #define SEARCH_NAME(x) get_base_name(x) #endif -static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo); static ElfW(Addr) get_elf_exec_load_bias(const ElfW(Ehdr)* elf); static LinkerAllocator g_soinfo_allocator; @@ -509,7 +508,7 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, soinfo* needed[]) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -604,15 +603,15 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, s } } - for (int i = 0; needed[i] != nullptr; i++) { - DEBUG("%s: looking up %s in %s", - si->name, name, needed[i]->name); - s = soinfo_elf_lookup(needed[i], elf_hash, name); + si->get_children().visit([&](soinfo* child) { + DEBUG("%s: looking up %s in %s", si->name, name, child->name); + s = soinfo_elf_lookup(child, elf_hash, name); if (s != nullptr) { - *lsi = needed[i]; - goto done; + *lsi = child; + return false; } - } + return true; + }); done: if (s != nullptr) { @@ -860,7 +859,7 @@ static soinfo* load_library(const char* name, int dlflags, const android_dlextin TRACE("[ load_library base=%p size=%zu name='%s' ]", reinterpret_cast(si->base), si->size, si->name); - if (!soinfo_link_image(si, extinfo)) { + if (!si->LinkImage(extinfo)) { soinfo_free(si); return nullptr; } @@ -1001,7 +1000,7 @@ void do_dlclose(soinfo* si) { // ifuncs are only defined for x86 #if defined(__i386__) -static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* needed[]) { +static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count) { for (size_t idx = 0; idx < count; ++idx, ++rel) { ElfW(Sym)* s; soinfo* lsi; @@ -1011,7 +1010,7 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, so ElfW(Addr) sym_addr = 0; const char* sym_name = nullptr; sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi, needed); + s = soinfo_do_lookup(si, sym_name, &lsi); if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_386_JMP_SLOT) { TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr)); @@ -1024,7 +1023,7 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, so #endif #if defined(__x86_64__) -static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* needed[]) { +static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count) { for (size_t idx = 0; idx < count; ++idx, ++rela) { ElfW(Sym)* s; soinfo* lsi; @@ -1034,7 +1033,7 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, ElfW(Addr) sym_addr = 0; const char* sym_name = nullptr; sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi, needed); + s = soinfo_do_lookup(si, sym_name, &lsi); if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_X86_64_JUMP_SLOT) { TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr + rela->r_addend)); @@ -1047,29 +1046,29 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, #endif #if defined(USE_RELA) -static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* needed[]) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { ElfW(Sym)* s; soinfo* lsi; for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); - ElfW(Addr) reloc = static_cast(rela->r_offset + si->load_bias); + ElfW(Addr) reloc = static_cast(rela->r_offset + load_bias); ElfW(Addr) sym_addr = 0; const char* sym_name = nullptr; - DEBUG("Processing '%s' relocation at index %zd", si->name, idx); + DEBUG("Processing '%s' relocation at index %zd", name, idx); if (type == 0) { // R_*_NONE continue; } if (sym != 0) { - sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi, needed); + sym_name = reinterpret_cast(strtab + symtab[sym].st_name); + s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... - s = &si->symtab[sym]; + s = &symtab[sym]; if (ELF_ST_BIND(s->st_info) != STB_WEAK) { - DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, si->name); + DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, name); return -1; } @@ -1227,8 +1226,8 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* return -1; } TRACE_TYPE(RELO, "RELO RELATIVE %16llx <- %16llx\n", - reloc, (si->base + rela->r_addend)); - *reinterpret_cast(reloc) = (si->base + rela->r_addend); + reloc, (base + rela->r_addend)); + *reinterpret_cast(reloc) = (base + rela->r_addend); break; case R_AARCH64_COPY: @@ -1241,7 +1240,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* * R_AARCH64_COPY may only appear in executable objects where e_type is * set to ET_EXEC. */ - DL_ERR("%s R_AARCH64_COPY relocations are not supported", si->name); + DL_ERR("%s R_AARCH64_COPY relocations are not supported", name); return -1; case R_AARCH64_TLS_TPREL64: TRACE_TYPE(RELO, "RELO TLS_TPREL64 *** %16llx <- %16llx - %16llx\n", @@ -1258,7 +1257,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* TRACE_TYPE(RELO, "RELO JMP_SLOT %08zx <- %08zx %s", static_cast(reloc), static_cast(sym_addr + rela->r_addend), sym_name); if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { - si->set_has_ifuncs(true); + set_has_ifuncs(true); } else { *reinterpret_cast(reloc) = sym_addr + rela->r_addend; } @@ -1278,8 +1277,8 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* return -1; } TRACE_TYPE(RELO, "RELO RELATIVE %08zx <- +%08zx", static_cast(reloc), - static_cast(si->base)); - *reinterpret_cast(reloc) = si->base + rela->r_addend; + static_cast(base)); + *reinterpret_cast(reloc) = base + rela->r_addend; break; case R_X86_64_32: count_relocation(kRelocRelative); @@ -1314,8 +1313,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count, soinfo* } #else // REL, not RELA. - -static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* needed[]) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { ElfW(Sym)* s; soinfo* lsi; @@ -1323,22 +1321,22 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. unsigned sym = ELFW(R_SYM)(rel->r_info); - ElfW(Addr) reloc = static_cast(rel->r_offset + si->load_bias); + ElfW(Addr) reloc = static_cast(rel->r_offset + load_bias); ElfW(Addr) sym_addr = 0; const char* sym_name = nullptr; - DEBUG("Processing '%s' relocation at index %zd", si->name, idx); + DEBUG("Processing '%s' relocation at index %zd", name, idx); if (type == 0) { // R_*_NONE continue; } if (sym != 0) { - sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi, needed); + sym_name = reinterpret_cast(strtab + symtab[sym].st_name); + s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... - s = &si->symtab[sym]; + s = &symtab[sym]; if (ELF_ST_BIND(s->st_info) != STB_WEAK) { - DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, si->name); + DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, name); return -1; } @@ -1433,7 +1431,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n * R_ARM_COPY may only appear in executable objects where e_type is * set to ET_EXEC. */ - DL_ERR("%s R_ARM_COPY relocations are not supported", si->name); + DL_ERR("%s R_ARM_COPY relocations are not supported", name); return -1; #elif defined(__i386__) case R_386_JMP_SLOT: @@ -1441,7 +1439,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n MARK(rel->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { - si->set_has_ifuncs(true); + set_has_ifuncs(true); } else { *reinterpret_cast(reloc) = sym_addr; } @@ -1485,7 +1483,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n if (s) { *reinterpret_cast(reloc) += sym_addr; } else { - *reinterpret_cast(reloc) += si->base; + *reinterpret_cast(reloc) += base; } break; #endif @@ -1502,8 +1500,8 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n return -1; } TRACE_TYPE(RELO, "RELO RELATIVE %p <- +%p", - reinterpret_cast(reloc), reinterpret_cast(si->base)); - *reinterpret_cast(reloc) += si->base; + reinterpret_cast(reloc), reinterpret_cast(base)); + *reinterpret_cast(reloc) += base; break; default: @@ -1516,7 +1514,7 @@ static int soinfo_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count, soinfo* n #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si, soinfo* needed[]) { +static bool mips_relocate_got(soinfo* si) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1549,7 +1547,7 @@ static bool mips_relocate_got(soinfo* si, soinfo* needed[]) { // This is an undefined reference... try to locate it. const char* sym_name = si->strtab + sym->st_name; soinfo* lsi; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, needed); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -1803,84 +1801,80 @@ static int nullify_closed_stdio() { return return_value; } -static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { - /* "base" might wrap around UINT32_MAX. */ - ElfW(Addr) base = si->load_bias; - const ElfW(Phdr)* phdr = si->phdr; - int phnum = si->phnum; - bool relocating_linker = (si->flags & FLAG_LINKER) != 0; +bool soinfo::LinkImage(const android_dlextinfo* extinfo) { + bool relocating_linker = (flags & FLAG_LINKER) != 0; /* We can't debug anything until the linker is relocated */ if (!relocating_linker) { - INFO("[ linking %s ]", si->name); - DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(si->base), si->flags); + INFO("[ linking %s ]", name); + DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); } /* Extract dynamic section */ size_t dynamic_count; ElfW(Word) dynamic_flags; - phdr_table_get_dynamic_section(phdr, phnum, base, &si->dynamic, + phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, &dynamic_count, &dynamic_flags); - if (si->dynamic == nullptr) { + if (dynamic == nullptr) { if (!relocating_linker) { - DL_ERR("missing PT_DYNAMIC in \"%s\"", si->name); + DL_ERR("missing PT_DYNAMIC in \"%s\"", name); } return false; } else { if (!relocating_linker) { - DEBUG("dynamic = %p", si->dynamic); + DEBUG("dynamic = %p", dynamic); } } #if defined(__arm__) - (void) phdr_table_get_arm_exidx(phdr, phnum, base, - &si->ARM_exidx, &si->ARM_exidx_count); + (void) phdr_table_get_arm_exidx(phdr, phnum, load_bias, + &ARM_exidx, &ARM_exidx_count); #endif // Extract useful information from dynamic section. uint32_t needed_count = 0; - for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { + for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { DEBUG("d = %p, d[0](tag) = %p d[1](val) = %p", d, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); switch (d->d_tag) { case DT_HASH: - si->nbucket = reinterpret_cast(base + d->d_un.d_ptr)[0]; - si->nchain = reinterpret_cast(base + d->d_un.d_ptr)[1]; - si->bucket = reinterpret_cast(base + d->d_un.d_ptr + 8); - si->chain = reinterpret_cast(base + d->d_un.d_ptr + 8 + si->nbucket * 4); + nbucket = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; + nchain = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; + bucket = reinterpret_cast(load_bias + d->d_un.d_ptr + 8); + chain = reinterpret_cast(load_bias + d->d_un.d_ptr + 8 + nbucket * 4); break; case DT_STRTAB: - si->strtab = reinterpret_cast(base + d->d_un.d_ptr); + strtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; case DT_SYMTAB: - si->symtab = reinterpret_cast(base + d->d_un.d_ptr); + symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; #if !defined(__LP64__) case DT_PLTREL: if (d->d_un.d_val != DT_REL) { - DL_ERR("unsupported DT_RELA in \"%s\"", si->name); + DL_ERR("unsupported DT_RELA in \"%s\"", name); return false; } break; #endif case DT_JMPREL: #if defined(USE_RELA) - si->plt_rela = reinterpret_cast(base + d->d_un.d_ptr); + plt_rela = reinterpret_cast(load_bias + d->d_un.d_ptr); #else - si->plt_rel = reinterpret_cast(base + d->d_un.d_ptr); + plt_rel = reinterpret_cast(load_bias + d->d_un.d_ptr); #endif break; case DT_PLTRELSZ: #if defined(USE_RELA) - si->plt_rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); + plt_rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); #else - si->plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); + plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); #endif break; #if defined(__mips__) case DT_PLTGOT: // Used by mips and mips64. - si->plt_got = reinterpret_cast(base + d->d_un.d_ptr); + plt_got = reinterpret_cast(load_bias + d->d_un.d_ptr); break; #endif case DT_DEBUG: @@ -1898,67 +1892,67 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { #endif #if defined(USE_RELA) case DT_RELA: - si->rela = reinterpret_cast(base + d->d_un.d_ptr); + rela = reinterpret_cast(load_bias + d->d_un.d_ptr); break; case DT_RELASZ: - si->rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); + rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); break; case DT_REL: - DL_ERR("unsupported DT_REL in \"%s\"", si->name); + DL_ERR("unsupported DT_REL in \"%s\"", name); return false; case DT_RELSZ: - DL_ERR("unsupported DT_RELSZ in \"%s\"", si->name); + DL_ERR("unsupported DT_RELSZ in \"%s\"", name); return false; #else case DT_REL: - si->rel = reinterpret_cast(base + d->d_un.d_ptr); + rel = reinterpret_cast(load_bias + d->d_un.d_ptr); break; case DT_RELSZ: - si->rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); + rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); break; case DT_RELA: - DL_ERR("unsupported DT_RELA in \"%s\"", si->name); + DL_ERR("unsupported DT_RELA in \"%s\"", name); return false; #endif case DT_INIT: - si->init_func = reinterpret_cast(base + d->d_un.d_ptr); - DEBUG("%s constructors (DT_INIT) found at %p", si->name, si->init_func); + init_func = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_INIT) found at %p", name, init_func); break; case DT_FINI: - si->fini_func = reinterpret_cast(base + d->d_un.d_ptr); - DEBUG("%s destructors (DT_FINI) found at %p", si->name, si->fini_func); + fini_func = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s destructors (DT_FINI) found at %p", name, fini_func); break; case DT_INIT_ARRAY: - si->init_array = reinterpret_cast(base + d->d_un.d_ptr); - DEBUG("%s constructors (DT_INIT_ARRAY) found at %p", si->name, si->init_array); + init_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_INIT_ARRAY) found at %p", name, init_array); break; case DT_INIT_ARRAYSZ: - si->init_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + init_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; case DT_FINI_ARRAY: - si->fini_array = reinterpret_cast(base + d->d_un.d_ptr); - DEBUG("%s destructors (DT_FINI_ARRAY) found at %p", si->name, si->fini_array); + fini_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s destructors (DT_FINI_ARRAY) found at %p", name, fini_array); break; case DT_FINI_ARRAYSZ: - si->fini_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + fini_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; case DT_PREINIT_ARRAY: - si->preinit_array = reinterpret_cast(base + d->d_un.d_ptr); - DEBUG("%s constructors (DT_PREINIT_ARRAY) found at %p", si->name, si->preinit_array); + preinit_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_PREINIT_ARRAY) found at %p", name, preinit_array); break; case DT_PREINIT_ARRAYSZ: - si->preinit_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + preinit_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; case DT_TEXTREL: #if defined(__LP64__) - DL_ERR("text relocations (DT_TEXTREL) found in 64-bit ELF file \"%s\"", si->name); + DL_ERR("text relocations (DT_TEXTREL) found in 64-bit ELF file \"%s\"", name); return false; #else - si->has_text_relocations = true; + has_text_relocations = true; break; #endif case DT_SYMBOLIC: - si->has_DT_SYMBOLIC = true; + has_DT_SYMBOLIC = true; break; case DT_NEEDED: ++needed_count; @@ -1966,14 +1960,14 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { case DT_FLAGS: if (d->d_un.d_val & DF_TEXTREL) { #if defined(__LP64__) - DL_ERR("text relocations (DF_TEXTREL) found in 64-bit ELF file \"%s\"", si->name); + DL_ERR("text relocations (DF_TEXTREL) found in 64-bit ELF file \"%s\"", name); return false; #else - si->has_text_relocations = true; + has_text_relocations = true; #endif } if (d->d_un.d_val & DF_SYMBOLIC) { - si->has_DT_SYMBOLIC = true; + has_DT_SYMBOLIC = true; } break; #if defined(__mips__) @@ -1984,7 +1978,7 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { case DT_MIPS_RLD_MAP: // Set the DT_MIPS_RLD_MAP entry to the address of _r_debug for GDB. { - r_debug** dp = reinterpret_cast(base + d->d_un.d_ptr); + r_debug** dp = reinterpret_cast(load_bias + d->d_un.d_ptr); *dp = &_r_debug; } break; @@ -1995,15 +1989,15 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { break; case DT_MIPS_SYMTABNO: - si->mips_symtabno = d->d_un.d_val; + mips_symtabno = d->d_un.d_val; break; case DT_MIPS_LOCAL_GOTNO: - si->mips_local_gotno = d->d_un.d_val; + mips_local_gotno = d->d_un.d_val; break; case DT_MIPS_GOTSYM: - si->mips_gotsym = d->d_un.d_val; + mips_gotsym = d->d_un.d_val; break; #endif @@ -2015,28 +2009,28 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { } DEBUG("si->base = %p, si->strtab = %p, si->symtab = %p", - reinterpret_cast(si->base), si->strtab, si->symtab); + reinterpret_cast(base), strtab, symtab); // Sanity checks. if (relocating_linker && needed_count != 0) { DL_ERR("linker cannot have DT_NEEDED dependencies on other libraries"); return false; } - if (si->nbucket == 0) { - DL_ERR("empty/missing DT_HASH in \"%s\" (built with --hash-style=gnu?)", si->name); + if (nbucket == 0) { + DL_ERR("empty/missing DT_HASH in \"%s\" (built with --hash-style=gnu?)", name); return false; } - if (si->strtab == 0) { - DL_ERR("empty/missing DT_STRTAB in \"%s\"", si->name); + if (strtab == 0) { + DL_ERR("empty/missing DT_STRTAB in \"%s\"", name); return false; } - if (si->symtab == 0) { - DL_ERR("empty/missing DT_SYMTAB in \"%s\"", si->name); + if (symtab == 0) { + DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); return false; } // If this is the main executable, then load all of the libraries from LD_PRELOAD now. - if (si->flags & FLAG_EXE) { + if (flags & FLAG_EXE) { memset(g_ld_preloads, 0, sizeof(g_ld_preloads)); size_t preload_count = 0; for (size_t i = 0; g_ld_preload_names[i] != nullptr; i++) { @@ -2046,69 +2040,64 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { } else { // As with glibc, failure to load an LD_PRELOAD library is just a warning. DL_WARN("could not load library \"%s\" from LD_PRELOAD for \"%s\"; caused by %s", - g_ld_preload_names[i], si->name, linker_get_error_buffer()); + g_ld_preload_names[i], name, linker_get_error_buffer()); } } } - soinfo** needed = reinterpret_cast(alloca((1 + needed_count) * sizeof(soinfo*))); - soinfo** pneeded = needed; - - for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { + for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { if (d->d_tag == DT_NEEDED) { - const char* library_name = si->strtab + d->d_un.d_val; - DEBUG("%s needs %s", si->name, library_name); + const char* library_name = strtab + d->d_un.d_val; + DEBUG("%s needs %s", name, library_name); soinfo* lsi = find_library(library_name, 0, nullptr); if (lsi == nullptr) { strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", - library_name, si->name, tmp_err_buf); + library_name, name, tmp_err_buf); return false; } - si->add_child(lsi); - *pneeded++ = lsi; + add_child(lsi); } } - *pneeded = nullptr; #if !defined(__LP64__) - if (si->has_text_relocations) { + if (has_text_relocations) { // Make segments writable to allow text relocations to work properly. We will later call // phdr_table_protect_segments() after all of them are applied and all constructors are run. DL_WARN("%s has text relocations. This is wasting memory and prevents " - "security hardening. Please fix.", si->name); - if (phdr_table_unprotect_segments(si->phdr, si->phnum, si->load_bias) < 0) { + "security hardening. Please fix.", name); + if (phdr_table_unprotect_segments(phdr, phnum, load_bias) < 0) { DL_ERR("can't unprotect loadable segments for \"%s\": %s", - si->name, strerror(errno)); + name, strerror(errno)); return false; } } #endif #if defined(USE_RELA) - if (si->plt_rela != nullptr) { - DEBUG("[ relocating %s plt ]\n", si->name); - if (soinfo_relocate(si, si->plt_rela, si->plt_rela_count, needed)) { + if (plt_rela != nullptr) { + DEBUG("[ relocating %s plt ]\n", name); + if (Relocate(plt_rela, plt_rela_count)) { return false; } } - if (si->rela != nullptr) { - DEBUG("[ relocating %s ]\n", si->name); - if (soinfo_relocate(si, si->rela, si->rela_count, needed)) { + if (rela != nullptr) { + DEBUG("[ relocating %s ]\n", name); + if (Relocate(rela, rela_count)) { return false; } } #else - if (si->plt_rel != nullptr) { - DEBUG("[ relocating %s plt ]", si->name); - if (soinfo_relocate(si, si->plt_rel, si->plt_rel_count, needed)) { + if (plt_rel != nullptr) { + DEBUG("[ relocating %s plt ]", name); + if (Relocate(plt_rel, plt_rel_count)) { return false; } } - if (si->rel != nullptr) { - DEBUG("[ relocating %s ]", si->name); - if (soinfo_relocate(si, si->rel, si->rel_count, needed)) { + if (rel != nullptr) { + DEBUG("[ relocating %s ]", name); + if (Relocate(rel, rel_count)) { return false; } } @@ -2118,59 +2107,59 @@ static bool soinfo_link_image(soinfo* si, const android_dlextinfo* extinfo) { // they cannot be resolved until the rest of the relocations are done // because we need to call the resolution function which may be waiting // on relocations. - if(si->get_has_ifuncs()) { + if(get_has_ifuncs()) { #if defined(__i386__) - soinfo_ifunc_relocate(si, si->plt_rel, si->plt_rel_count, needed); + soinfo_ifunc_relocate(this, plt_rel, plt_rel_count); #elif defined(__x86_64__) - soinfo_ifunc_relocate(si, si->plt_rela, si->plt_rela_count, needed); + soinfo_ifunc_relocate(this, plt_rela, plt_rela_count); #endif } #if defined(__mips__) - if (!mips_relocate_got(si, needed)) { + if (!mips_relocate_got(this)) { return false; } #endif - si->flags |= FLAG_LINKED; - DEBUG("[ finished linking %s ]", si->name); + flags |= FLAG_LINKED; + DEBUG("[ finished linking %s ]", name); #if !defined(__LP64__) - if (si->has_text_relocations) { + if (has_text_relocations) { // All relocations are done, we can protect our segments back to read-only. - if (phdr_table_protect_segments(si->phdr, si->phnum, si->load_bias) < 0) { + if (phdr_table_protect_segments(phdr, phnum, load_bias) < 0) { DL_ERR("can't protect segments for \"%s\": %s", - si->name, strerror(errno)); + name, strerror(errno)); return false; } } #endif /* We can also turn on GNU RELRO protection */ - if (phdr_table_protect_gnu_relro(si->phdr, si->phnum, si->load_bias) < 0) { + if (phdr_table_protect_gnu_relro(phdr, phnum, load_bias) < 0) { DL_ERR("can't enable GNU RELRO protection for \"%s\": %s", - si->name, strerror(errno)); + name, strerror(errno)); return false; } /* Handle serializing/sharing the RELRO segment */ if (extinfo && (extinfo->flags & ANDROID_DLEXT_WRITE_RELRO)) { - if (phdr_table_serialize_gnu_relro(si->phdr, si->phnum, si->load_bias, + if (phdr_table_serialize_gnu_relro(phdr, phnum, load_bias, extinfo->relro_fd) < 0) { DL_ERR("failed serializing GNU RELRO section for \"%s\": %s", - si->name, strerror(errno)); + name, strerror(errno)); return false; } } else if (extinfo && (extinfo->flags & ANDROID_DLEXT_USE_RELRO)) { - if (phdr_table_map_gnu_relro(si->phdr, si->phnum, si->load_bias, + if (phdr_table_map_gnu_relro(phdr, phnum, load_bias, extinfo->relro_fd) < 0) { DL_ERR("failed mapping GNU RELRO section for \"%s\": %s", - si->name, strerror(errno)); + name, strerror(errno)); return false; } } - notify_gdb_of_load(si); + notify_gdb_of_load(this); return true; } @@ -2194,7 +2183,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->size = phdr_table_get_load_size(si->phdr, si->phnum); si->load_bias = get_elf_exec_load_bias(ehdr_vdso); - soinfo_link_image(si, nullptr); + si->LinkImage(nullptr); #endif } @@ -2323,7 +2312,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; - if (!soinfo_link_image(si, nullptr)) { + if (!si->LinkImage(nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2336,7 +2325,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( g_ld_preloads[i]->CallConstructors(); } - /* After the link_image, the si->load_bias is initialized. + /* After the LinkImage, the si->load_bias is initialized. * For so lib, the map->l_addr will be updated in notify_gdb_of_load. * We need to update this value for so exe here. So Unwind_Backtrace * for some arch like x86 could work correctly within so exe. @@ -2451,7 +2440,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!soinfo_link_image(&linker_so, nullptr)) { + if (!linker_so.LinkImage(nullptr)) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 5e21f7015..6547d685e 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -204,6 +204,7 @@ struct soinfo { void CallConstructors(); void CallDestructors(); void CallPreInitConstructors(); + bool LinkImage(const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); @@ -224,6 +225,11 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); void resolve_ifunc_symbols(); +#if defined(USE_RELA) + int Relocate(ElfW(Rela)* rela, unsigned count); +#else + int Relocate(ElfW(Rel)* rel, unsigned count); +#endif private: // This part of the structure is only available From 81fe2b16dc3ac8f17719964d3d01e92e2dc3cc4c Mon Sep 17 00:00:00 2001 From: Chih-Hung Hsieh Date: Thu, 4 Sep 2014 15:19:52 -0700 Subject: [PATCH 017/194] Enable clang compilation with libc but not linker. Clang is still disabled for x86 and x86_64 long double code, for x86_64 special assembly instruction, and the linker module. BUG: 17163651 BUG: 17302991 BUG: 17403674 (cherry picked from commit b58db8b083ce41798a5310616e4f20885cec611f) Change-Id: I916c05056d37a9c287b0a5ae3b1a209d98c8f70e --- libc/Android.mk | 26 +++++++++++++++++++++++--- linker/linker_executable.mk | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index 9c5e785ae..fe1f31577 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -503,7 +503,10 @@ ifneq ($(TARGET_USES_LOGD),false) libc_common_cflags += -DTARGET_USES_LOGD endif -use_clang := false +use_clang := $(USE_CLANG_PLATFORM_BUILD) +ifeq ($(use_clang),) + use_clang := false +endif # Try to catch typical 32-bit assumptions that break with 64-bit pointers. libc_common_cflags += \ @@ -733,6 +736,13 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(libc_upstream_openbsd_src_files) +ifneq (,$(filter $(TARGET_ARCH),x86 x86_64)) + # Clang has wrong long double size or LDBL_MANT_DIG, http://b/17163651. + LOCAL_CLANG := false +else + LOCAL_CLANG := $(use_clang) +endif + LOCAL_CFLAGS := \ $(libc_common_cflags) \ -Wno-sign-compare -Wno-uninitialized -Wno-unused-parameter \ @@ -746,7 +756,6 @@ LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_openbsd -LOCAL_CLANG := $(use_clang) LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := @@ -765,6 +774,13 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES_32 := $(libc_upstream_openbsd_gdtoa_src_files_32) LOCAL_SRC_FILES_64 := $(libc_upstream_openbsd_gdtoa_src_files_64) +ifneq (,$(filter $(TARGET_ARCH),x86 x86_64)) + # Clang has wrong long double size or LDBL_MANT_DIG, http://b/17163651. + LOCAL_CLANG := false +else + LOCAL_CLANG := $(use_clang) +endif + LOCAL_CFLAGS := \ $(libc_common_cflags) \ -Wno-sign-compare -Wno-uninitialized \ @@ -778,7 +794,6 @@ LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_gdtoa -LOCAL_CLANG := $(use_clang) LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := @@ -796,6 +811,11 @@ LOCAL_SRC_FILES := $(libc_bionic_src_files) LOCAL_CFLAGS := $(libc_common_cflags) \ -Wframe-larger-than=2048 \ +ifeq ($(TARGET_ARCH),x86_64) + # Clang assembler has problem with ssse3-strcmp-slm.S, http://b/17302991 + LOCAL_CLANG_ASFLAGS += -no-integrated-as +endif + LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_C_INCLUDES := $(libc_common_c_includes) diff --git a/linker/linker_executable.mk b/linker/linker_executable.mk index 4902a0cc5..a596a4805 100644 --- a/linker/linker_executable.mk +++ b/linker/linker_executable.mk @@ -9,6 +9,8 @@ LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX) +# Clang calls /usr/bin/ld: unrecognized option '--icf=safe', http://b/17403674. +LOCAL_CLANG := false include $(BUILD_SYSTEM)/dynamic_binary.mk # See build/core/executable_internal.mk From 59c12a652794273da22907a374222f4fa7d975c6 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 29 Jul 2014 14:21:45 -0700 Subject: [PATCH 018/194] Load libraries in breadth-first order This patch fixes the problem with symbol search order for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries and ld_preloads in correct order. Bug: https://code.google.com/p/android/issues/detail?id=74255 (cherry picked from commit a3ad450a2e3fb6b3fe359683b247eba20896f646) Change-Id: I1125de10272c84e4f075cbc72859c1f6b3e89943 --- libc/private/UniquePtr.h | 140 +++++++++ linker/dlfcn.cpp | 1 + linker/linker.cpp | 433 +++++++++++++++++---------- linker/linker.h | 2 + linker/linker_phdr.cpp | 29 +- linker/linker_phdr.h | 3 +- tests/Android.mk | 1 + tests/dlfcn_test.cpp | 49 +++ tests/libs/Android.mk | 154 ++++++++++ tests/libs/dlopen_testlib_answer.cpp | 25 ++ tests/uniqueptr_test.cpp | 101 +++++++ 11 files changed, 759 insertions(+), 179 deletions(-) create mode 100644 libc/private/UniquePtr.h create mode 100644 tests/libs/dlopen_testlib_answer.cpp create mode 100644 tests/uniqueptr_test.cpp diff --git a/libc/private/UniquePtr.h b/libc/private/UniquePtr.h new file mode 100644 index 000000000..5ac7599a0 --- /dev/null +++ b/libc/private/UniquePtr.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UNIQUE_PTR_H_included +#define UNIQUE_PTR_H_included + +// Default deleter for pointer types. +template +struct DefaultDelete { + enum { type_must_be_complete = sizeof(T) }; + DefaultDelete() {} + void operator()(T* p) const { + delete p; + } +}; + +// Default deleter for array types. +template +struct DefaultDelete { + enum { type_must_be_complete = sizeof(T) }; + void operator()(T* p) const { + delete[] p; + } +}; + +// A smart pointer that deletes the given pointer on destruction. +// Equivalent to C++0x's std::unique_ptr (a combination of boost::scoped_ptr +// and boost::scoped_array). +// Named to be in keeping with Android style but also to avoid +// collision with any other implementation, until we can switch over +// to unique_ptr. +// Use thus: +// UniquePtr c(new C); +template > +class UniquePtr { +public: + // Construct a new UniquePtr, taking ownership of the given raw pointer. + explicit UniquePtr(T* ptr = nullptr) : mPtr(ptr) { } + + UniquePtr(UniquePtr&& that) { + mPtr = that.mPtr; + that.mPtr = nullptr; + } + + ~UniquePtr() { + reset(); + } + + // Accessors. + T& operator*() const { return *mPtr; } + T* operator->() const { return mPtr; } + T* get() const { return mPtr; } + + // Returns the raw pointer and hands over ownership to the caller. + // The pointer will not be deleted by UniquePtr. + T* release() __attribute__((warn_unused_result)) { + T* result = mPtr; + mPtr = nullptr; + return result; + } + + // Takes ownership of the given raw pointer. + // If this smart pointer previously owned a different raw pointer, that + // raw pointer will be freed. + void reset(T* ptr = nullptr) { + if (ptr != mPtr) { + D()(mPtr); + mPtr = ptr; + } + } + +private: + // The raw pointer. + T* mPtr; + + // Comparing unique pointers is probably a mistake, since they're unique. + template bool operator==(const UniquePtr& p) const = delete; + template bool operator!=(const UniquePtr& p) const = delete; + + // Disallow copy and assignment. + UniquePtr(const UniquePtr&) = delete; + void operator=(const UniquePtr&) = delete; +}; + +// Partial specialization for array types. Like std::unique_ptr, this removes +// operator* and operator-> but adds operator[]. +template +class UniquePtr { +public: + explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) { + } + UniquePtr(UniquePtr&& that) { + mPtr = that.mPtr; + that.mPtr = nullptr; + } + + ~UniquePtr() { + reset(); + } + + T& operator[](size_t i) const { + return mPtr[i]; + } + T* get() const { return mPtr; } + + T* release() __attribute__((warn_unused_result)) { + T* result = mPtr; + mPtr = NULL; + return result; + } + + void reset(T* ptr = NULL) { + if (ptr != mPtr) { + D()(mPtr); + mPtr = ptr; + } + } + +private: + T* mPtr; + + // Disallow copy and assignment. + UniquePtr(const UniquePtr&) = delete; + void operator=(const UniquePtr&) = delete; +}; + +#endif // UNIQUE_PTR_H_included diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 38484d995..3024b3c29 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -245,6 +245,7 @@ soinfo* get_libdl_info() { __libdl_info.bucket = g_libdl_buckets; __libdl_info.chain = g_libdl_chains; __libdl_info.has_DT_SYMBOLIC = true; + __libdl_info.ref_count = 1; } return &__libdl_info; diff --git a/linker/linker.cpp b/linker/linker.cpp index 9eb74403c..610489ea5 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -44,6 +44,8 @@ #include "private/KernelArgumentBlock.h" #include "private/ScopedPthreadMutexLocker.h" #include "private/ScopedFd.h" +#include "private/ScopeGuard.h" +#include "private/UniquePtr.h" #include "linker.h" #include "linker_debug.h" @@ -170,7 +172,6 @@ DISALLOW_ALLOCATION(void, free, (void* u __unused)); DISALLOW_ALLOCATION(void*, realloc, (void* u1 __unused, size_t u2 __unused)); DISALLOW_ALLOCATION(void*, calloc, (size_t u1 __unused, size_t u2 __unused)); -static char tmp_err_buf[768]; static char __linker_dl_err_buf[768]; char* linker_get_error_buffer() { @@ -512,7 +513,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; - if (si != nullptr && somain != nullptr) { + if (somain != nullptr) { /* * Local scope is executable scope. Just start looking into it right away * for the shortcut. @@ -657,22 +658,47 @@ class TypeBasedAllocator { } }; +class LoadTask { + public: + struct deleter_t { + void operator()(LoadTask* t) { + TypeBasedAllocator::free(t); + } + }; + + typedef UniquePtr unique_ptr; + + static deleter_t deleter; + + static LoadTask* create(const char* name, soinfo* needed_by) { + LoadTask* ptr = TypeBasedAllocator::alloc(); + return new (ptr) LoadTask(name, needed_by); + } + + const char* get_name() { + return name_; + } + + soinfo* get_needed_by() { + return needed_by_; + } + private: + LoadTask(const char* name, soinfo* needed_by) + : name_(name), needed_by_(needed_by) {} + + const char* name_; + soinfo* needed_by_; + + DISALLOW_IMPLICIT_CONSTRUCTORS(LoadTask); +}; + template using linked_list_t = LinkedList>>; typedef linked_list_t SoinfoLinkedList; +typedef linked_list_t StringLinkedList; +typedef linked_list_t LoadTaskList; -static LinkerAllocator> g_soinfo_list_allocator_rw; -class SoinfoListAllocatorRW { - public: - static LinkedListEntry* alloc() { - return g_soinfo_list_allocator_rw.alloc(); - } - - static void free(LinkedListEntry* ptr) { - g_soinfo_list_allocator_rw.free(ptr); - } -}; // This is used by dlsym(3). It performs symbol lookup only within the // specified soinfo object and its dependencies in breadth first order. @@ -798,73 +824,80 @@ static int open_library(const char* name) { return fd; } -static soinfo* load_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { - int fd = -1; - ScopedFd file_guard(-1); - - if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { - fd = extinfo->library_fd; - } else { - // Open the file. - fd = open_library(name); - if (fd == -1) { - DL_ERR("library \"%s\" not found", name); - return nullptr; - } - - file_guard.reset(fd); +template +static void for_each_dt_needed(const soinfo* si, F action) { + for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { + if (d->d_tag == DT_NEEDED) { + action(si->strtab + d->d_un.d_val); } + } +} - ElfReader elf_reader(name, fd); +static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { + int fd = -1; + ScopedFd file_guard(-1); - struct stat file_stat; - if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { - DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); + if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { + fd = extinfo->library_fd; + } else { + // Open the file. + fd = open_library(name); + if (fd == -1) { + DL_ERR("library \"%s\" not found", name); return nullptr; } - // Check for symlink and other situations where - // file can have different names. - for (soinfo* si = solist; si != nullptr; si = si->next) { - if (si->get_st_dev() != 0 && - si->get_st_ino() != 0 && - si->get_st_dev() == file_stat.st_dev && - si->get_st_ino() == file_stat.st_ino) { - TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); - return si; - } + file_guard.reset(fd); + } + + struct stat file_stat; + if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { + DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); + return nullptr; + } + + // Check for symlink and other situations where + // file can have different names. + for (soinfo* si = solist; si != nullptr; si = si->next) { + if (si->get_st_dev() != 0 && + si->get_st_ino() != 0 && + si->get_st_dev() == file_stat.st_dev && + si->get_st_ino() == file_stat.st_ino) { + TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); + return si; } + } - if ((dlflags & RTLD_NOLOAD) != 0) { - return nullptr; - } + if ((dlflags & RTLD_NOLOAD) != 0) { + return nullptr; + } - // Read the ELF header and load the segments. - if (!elf_reader.Load(extinfo)) { - return nullptr; - } + // Read the ELF header and load the segments. + ElfReader elf_reader(name, fd); + if (!elf_reader.Load(extinfo)) { + return nullptr; + } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); - if (si == nullptr) { - return nullptr; - } - si->base = elf_reader.load_start(); - si->size = elf_reader.load_size(); - si->load_bias = elf_reader.load_bias(); - si->phnum = elf_reader.phdr_count(); - si->phdr = elf_reader.loaded_phdr(); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); + if (si == nullptr) { + return nullptr; + } + si->base = elf_reader.load_start(); + si->size = elf_reader.load_size(); + si->load_bias = elf_reader.load_bias(); + si->phnum = elf_reader.phdr_count(); + si->phdr = elf_reader.loaded_phdr(); - // At this point we know that whatever is loaded @ base is a valid ELF - // shared library whose segments are properly mapped in. - TRACE("[ load_library base=%p size=%zu name='%s' ]", - reinterpret_cast(si->base), si->size, si->name); + if (!si->PrelinkImage()) { + soinfo_free(si); + return nullptr; + } - if (!si->LinkImage(extinfo)) { - soinfo_free(si); - return nullptr; - } + for_each_dt_needed(si, [&] (const char* name) { + load_tasks.push_back(LoadTask::create(name, si)); + }); - return si; + return si; } static soinfo *find_loaded_library_by_name(const char* name) { @@ -877,33 +910,122 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(const char* name, int dlflags, const android_dlextinfo* extinfo) { - if (name == nullptr) { - return somain; - } +static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { soinfo* si = find_loaded_library_by_name(name); // Library might still be loaded, the accurate detection - // of this fact is done by load_library + // of this fact is done by load_library. if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(name, dlflags, extinfo); - } - - if (si != nullptr && (si->flags & FLAG_LINKED) == 0) { - DL_ERR("recursive link to \"%s\"", si->name); - return nullptr; + si = load_library(load_tasks, name, dlflags, extinfo); } return si; } -static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { - soinfo* si = find_library_internal(name, dlflags, extinfo); - if (si != nullptr) { - si->ref_count++; +static void soinfo_unload(soinfo* si); + +static bool is_recursive(soinfo* si, soinfo* parent) { + if (parent == nullptr) { + return false; } + + if (si == parent) { + DL_ERR("recursive link to \"%s\"", si->name); + return true; + } + + return !parent->get_parents().visit([&](soinfo* grandparent) { + return !is_recursive(si, grandparent); + }); +} + +static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], + soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { + // Step 0: prepare. + LoadTaskList load_tasks; + for (size_t i = 0; i < library_names_size; ++i) { + const char* name = library_names[i]; + load_tasks.push_back(LoadTask::create(name, nullptr)); + } + + // Libraries added to this list in reverse order so that we can + // start linking from bottom-up - see step 2. + SoinfoLinkedList found_libs; + size_t soinfos_size = 0; + + auto failure_guard = create_scope_guard([&]() { + // Housekeeping + load_tasks.for_each([] (LoadTask* t) { + LoadTask::deleter(t); + }); + + for (size_t i = 0; iget_name(), dlflags, extinfo); + if (si == nullptr) { + return false; + } + + soinfo* needed_by = task->get_needed_by(); + + if (is_recursive(si, needed_by)) { + soinfo_free(si); + return false; + } + + si->ref_count++; + if (needed_by != nullptr) { + needed_by->add_child(si); + } + found_libs.push_front(si); + + // When ld_preloads is not null first + // ld_preloads_size libs are in fact ld_preloads. + if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { + ld_preloads[soinfos_size] = si; + } + + if (soinfos_sizeflags & FLAG_LINKED) == 0) { + if (!si->LinkImage(extinfo)) { + return false; + } + si->flags |= FLAG_LINKED; + } + } + + // All is well - found_libs and load_tasks are empty at this point + // and all libs are successfully linked. + failure_guard.disable(); + return true; +} + +static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { + if (name == nullptr) { + somain->ref_count++; + return somain; + } + + soinfo* si; + + if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { + return nullptr; + } + return si; } @@ -925,20 +1047,17 @@ static void soinfo_unload(soinfo* si) { soinfo_unload(children[i]); } } else { - for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { - if (d->d_tag == DT_NEEDED) { - const char* library_name = si->strtab + d->d_un.d_val; - TRACE("%s needs to unload %s", si->name, library_name); - soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); - if (needed != nullptr) { - soinfo_unload(needed); - } else { - // Not found: for example if symlink was deleted between dlopen and dlclose - // Since we cannot really handle errors at this point - print and continue. - PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); - } + for_each_dt_needed(si, [&] (const char* library_name) { + TRACE("deprecated (old format of soinfo): %s needs to unload %s", si->name, library_name); + soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); + if (needed != nullptr) { + soinfo_unload(needed); + } else { + // Not found: for example if symlink was deleted between dlopen and dlclose + // Since we cannot really handle errors at this point - print and continue. + PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); } - } + }); } notify_gdb_of_unload(si); @@ -1047,9 +1166,6 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count) #if defined(USE_RELA) int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { - ElfW(Sym)* s; - soinfo* lsi; - for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1061,6 +1177,10 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { if (type == 0) { // R_*_NONE continue; } + + ElfW(Sym)* s = nullptr; + soinfo* lsi = nullptr; + if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1119,8 +1239,6 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); - } else { - s = nullptr; } switch (type) { @@ -1314,9 +1432,6 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { #else // REL, not RELA. int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { - ElfW(Sym)* s; - soinfo* lsi; - for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1329,6 +1444,10 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { if (type == 0) { // R_*_NONE continue; } + + ElfW(Sym)* s = nullptr; + soinfo* lsi = nullptr; + if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1390,8 +1509,6 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); - } else { - s = nullptr; } switch (type) { @@ -1546,7 +1663,7 @@ static bool mips_relocate_got(soinfo* si) { for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { // This is an undefined reference... try to locate it. const char* sym_name = si->strtab + sym->st_name; - soinfo* lsi; + soinfo* lsi = nullptr; ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. @@ -1643,6 +1760,9 @@ void soinfo::CallConstructors() { } void soinfo::CallDestructors() { + if (!constructors_called) { + return; + } TRACE("\"%s\": calling destructors", name); // DT_FINI_ARRAY must be parsed in reverse order. @@ -1728,7 +1848,7 @@ bool soinfo::get_has_ifuncs() { return false; } -// This is a return on get_children() in case +// This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1740,6 +1860,14 @@ soinfo::soinfo_list_t& soinfo::get_children() { return g_empty_list; } +soinfo::soinfo_list_t& soinfo::get_parents() { + if ((this->flags & FLAG_NEW_SOINFO) == 0) { + return g_empty_list; + } + + return this->parents; +} + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -1801,20 +1929,18 @@ static int nullify_closed_stdio() { return return_value; } -bool soinfo::LinkImage(const android_dlextinfo* extinfo) { - bool relocating_linker = (flags & FLAG_LINKER) != 0; +bool soinfo::PrelinkImage() { + phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic); - /* We can't debug anything until the linker is relocated */ + /* We can't log anything until the linker is relocated */ + bool relocating_linker = (flags & FLAG_LINKER) != 0; if (!relocating_linker) { INFO("[ linking %s ]", name); DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); } /* Extract dynamic section */ - size_t dynamic_count; - ElfW(Word) dynamic_flags; - phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, - &dynamic_count, &dynamic_flags); + ElfW(Word) dynamic_flags = phdr->p_flags; if (dynamic == nullptr) { if (!relocating_linker) { DL_ERR("missing PT_DYNAMIC in \"%s\"", name); @@ -1882,7 +2008,7 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { // if the dynamic table is writable // FIXME: not working currently for N64 // The flags for the LOAD and DYNAMIC program headers do not agree. -// The LOAD section containng the dynamic table has been mapped as +// The LOAD section containing the dynamic table has been mapped as // read-only, but the DYNAMIC header claims it is writable. #if !(defined(__mips__) && defined(__LP64__)) if ((dynamic_flags & PF_W) != 0) { @@ -2028,38 +2154,10 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); return false; } + return true; +} - // If this is the main executable, then load all of the libraries from LD_PRELOAD now. - if (flags & FLAG_EXE) { - memset(g_ld_preloads, 0, sizeof(g_ld_preloads)); - size_t preload_count = 0; - for (size_t i = 0; g_ld_preload_names[i] != nullptr; i++) { - soinfo* lsi = find_library(g_ld_preload_names[i], 0, nullptr); - if (lsi != nullptr) { - g_ld_preloads[preload_count++] = lsi; - } else { - // As with glibc, failure to load an LD_PRELOAD library is just a warning. - DL_WARN("could not load library \"%s\" from LD_PRELOAD for \"%s\"; caused by %s", - g_ld_preload_names[i], name, linker_get_error_buffer()); - } - } - } - - for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { - if (d->d_tag == DT_NEEDED) { - const char* library_name = strtab + d->d_un.d_val; - DEBUG("%s needs %s", name, library_name); - soinfo* lsi = find_library(library_name, 0, nullptr); - if (lsi == nullptr) { - strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); - DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", - library_name, name, tmp_err_buf); - return false; - } - - add_child(lsi); - } - } +bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2121,7 +2219,6 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { } #endif - flags |= FLAG_LINKED; DEBUG("[ finished linking %s ]", name); #if !defined(__LP64__) @@ -2183,6 +2280,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->size = phdr_table_get_load_size(si->phdr, si->phnum); si->load_bias = get_elf_exec_load_bias(ehdr_vdso); + si->PrelinkImage(); si->LinkImage(nullptr); #endif } @@ -2216,7 +2314,7 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_base); ElfW(Phdr)* phdr = reinterpret_cast(linker_base + elf_hdr->e_phoff); phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base, - &linker_soinfo_for_gdb.dynamic, nullptr, nullptr); + &linker_soinfo_for_gdb.dynamic); insert_soinfo_into_debug_map(&linker_soinfo_for_gdb); } @@ -2312,6 +2410,37 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; + si->PrelinkImage(); + + // Load ld_preloads and dependencies. + StringLinkedList needed_library_name_list; + size_t needed_libraries_count = 0; + size_t ld_preloads_count = 0; + while (g_ld_preload_names[ld_preloads_count] != nullptr) { + needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]); + ++needed_libraries_count; + } + + for_each_dt_needed(si, [&](const char* name) { + needed_library_name_list.push_back(name); + ++needed_libraries_count; + }); + + const char* needed_library_names[needed_libraries_count]; + soinfo* needed_library_si[needed_libraries_count]; + + memset(needed_library_names, 0, sizeof(needed_library_names)); + needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); + + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } + + for (size_t i = 0; iadd_child(needed_library_si[i]); + } + if (!si->LinkImage(nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); @@ -2321,11 +2450,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->CallPreInitConstructors(); - for (size_t i = 0; g_ld_preloads[i] != nullptr; ++i) { - g_ld_preloads[i]->CallConstructors(); - } - - /* After the LinkImage, the si->load_bias is initialized. + /* After the PrelinkImage, the si->load_bias is initialized. * For so lib, the map->l_addr will be updated in notify_gdb_of_load. * We need to update this value for so exe here. So Unwind_Backtrace * for some arch like x86 could work correctly within so exe. @@ -2440,7 +2565,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!linker_so.LinkImage(nullptr)) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 6547d685e..3024d3ab2 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -204,6 +204,7 @@ struct soinfo { void CallConstructors(); void CallDestructors(); void CallPreInitConstructors(); + bool PrelinkImage(); bool LinkImage(const android_dlextinfo* extinfo); void add_child(soinfo* child); @@ -217,6 +218,7 @@ struct soinfo { bool get_has_ifuncs(); soinfo_list_t& get_children(); + soinfo_list_t& get_parents(); bool inline has_min_version(uint32_t min_version) { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 1bbd57778..436517271 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -702,34 +702,17 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, * load_bias -> load bias * Output: * dynamic -> address of table in memory (null on failure). - * dynamic_count -> number of items in table (0 on failure). - * dynamic_flags -> protection flags for section (unset on failure) * Return: * void */ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, - ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags) { - const ElfW(Phdr)* phdr = phdr_table; - const ElfW(Phdr)* phdr_limit = phdr + phdr_count; - - for (phdr = phdr_table; phdr < phdr_limit; phdr++) { - if (phdr->p_type != PT_DYNAMIC) { - continue; - } - - *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); - if (dynamic_count) { - *dynamic_count = (unsigned)(phdr->p_memsz / 8); - } - if (dynamic_flags) { - *dynamic_flags = phdr->p_flags; - } - return; - } + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic) { *dynamic = nullptr; - if (dynamic_count) { - *dynamic_count = 0; + for (const ElfW(Phdr)* phdr = phdr_table, *phdr_limit = phdr + phdr_count; phdr < phdr_limit; phdr++) { + if (phdr->p_type == PT_DYNAMIC) { + *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); + return; + } } } diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index 50708a0e6..d4c3ce85f 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -101,7 +101,6 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, El #endif void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, - ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags); + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic); #endif /* LINKER_PHDR_H */ diff --git a/tests/Android.mk b/tests/Android.mk index 864052e81..64d3b596e 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -112,6 +112,7 @@ libBionicStandardTests_src_files := \ system_properties_test.cpp \ time_test.cpp \ uchar_test.cpp \ + uniqueptr_test.cpp \ unistd_test.cpp \ wchar_test.cpp \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 6de38c89e..b8c33dd53 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -130,6 +130,55 @@ TEST(dlfcn, ifunc_ctor_call) { } #endif +TEST(dlfcn, dlopen_check_order) { + // Here is how the test library and its dt_needed + // libraries are arranged + // + // libtest_check_order.so + // | + // +-> libtest_check_order_1_left.so + // | | + // | +-> libtest_check_order_a.so + // | | + // | +-> libtest_check_order_b.so + // | + // +-> libtest_check_order_2_right.so + // | | + // | +-> libtest_check_order_d.so + // | | + // | +-> libtest_check_order_b.so + // | + // +-> libtest_check_order_3_c.so + // + // load order should be (1, 2, 3, a, b, d) + // + // get_answer() is defined in (2, 3, a, b, c) + // get_answer2() is defined in (b, d) + void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); + ASSERT_TRUE(sym == nullptr); + void* handle = dlopen("libtest_check_order.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr); + typedef int (*fn_t) (void); + fn_t fn, fn2; + fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); + ASSERT_TRUE(fn != NULL); + fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); + ASSERT_TRUE(fn2 != NULL); + + ASSERT_EQ(42, fn()); + ASSERT_EQ(43, fn2()); + dlclose(handle); +} + +// libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> +// libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> +// libtest_with_dependency_loop_a.so +TEST(dlfcn, dlopen_check_loop) { + void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); + ASSERT_TRUE(handle == NULL); + ASSERT_STREQ("dlopen failed: recursive link to \"libtest_with_dependency_loop_a.so\"", dlerror()); +} + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 8f0ec7a56..e7a2676ec 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -101,6 +101,160 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct load order: +# libtest_check_order_2_right.so +# ----------------------------------------------------------------------------- +libtest_check_order_2_right_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_2_right_cflags := -D__ANSWER=42 +module := libtest_check_order_2_right +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_a.so +# ----------------------------------------------------------------------------- +libtest_check_order_a_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_a_cflags := -D__ANSWER=1 +module := libtest_check_order_a +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_b.so +# ----------------------------------------------------------------------------- +libtest_check_order_b_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 +module := libtest_check_order_b +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_c.so +# ----------------------------------------------------------------------------- +libtest_check_order_3_c_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_3_c_cflags := -D__ANSWER=3 +module := libtest_check_order_3_c +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_d.so +# ----------------------------------------------------------------------------- +libtest_check_order_d_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_d_shared_libraries := libtest_check_order_b +libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 +module := libtest_check_order_d +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_left.so +# ----------------------------------------------------------------------------- +libtest_check_order_1_left_src_files := \ + empty.cpp + +libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b + +module := libtest_check_order_1_left +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order.so +# ----------------------------------------------------------------------------- +libtest_check_order_src_files := \ + empty.cpp + +libtest_check_order_shared_libraries := libtest_check_order_1_left \ + libtest_check_order_2_right libtest_check_order_3_c + +module := libtest_check_order +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# Library with dependency loop used by dlfcn tests +# +# libtest_with_dependency_loop -> a -> b -> c -> a +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_src_files := empty.cpp + +libtest_with_dependency_loop_shared_libraries := \ + libtest_with_dependency_loop_a + +module := libtest_with_dependency_loop +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_a.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_a_src_files := empty.cpp + +libtest_with_dependency_loop_a_shared_libraries := \ + libtest_with_dependency_loop_b_tmp + +module := libtest_with_dependency_loop_a +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_b.so +# +# this is temporary placeholder - will be removed +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_b_tmp_src_files := empty.cpp +libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so + +module := libtest_with_dependency_loop_b_tmp +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_b.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_b_src_files := empty.cpp +libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c + +module := libtest_with_dependency_loop_b +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_c.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_c_src_files := empty.cpp + +libtest_with_dependency_loop_c_shared_libraries := \ + libtest_with_dependency_loop_a + +module := libtest_with_dependency_loop_c +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # Library with dependency used by dlfcn tests # ----------------------------------------------------------------------------- diff --git a/tests/libs/dlopen_testlib_answer.cpp b/tests/libs/dlopen_testlib_answer.cpp new file mode 100644 index 000000000..a4d75046e --- /dev/null +++ b/tests/libs/dlopen_testlib_answer.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int dlopen_test_get_answer() { + return __ANSWER; +} + +#ifdef __ANSWER2 +extern "C" int dlopen_test_get_answer2() { + return __ANSWER2; +} +#endif diff --git a/tests/uniqueptr_test.cpp b/tests/uniqueptr_test.cpp new file mode 100644 index 000000000..4b6608af2 --- /dev/null +++ b/tests/uniqueptr_test.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +static int cCount = 0; +struct C { + C() { ++cCount; } + ~C() { --cCount; } +}; + +static bool freed = false; +struct Freer { + void operator() (int* p) { + ASSERT_EQ(123, *p); + free(p); + freed = true; + } +}; + +TEST(UniquePtr, smoke) { + // + // UniquePtr tests... + // + + // Can we free a single object? + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + } + ASSERT_TRUE(cCount == 0); + // Does release work? + C* rawC; + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + rawC = c.release(); + } + ASSERT_TRUE(cCount == 1); + delete rawC; + // Does reset work? + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + c.reset(new C); + ASSERT_TRUE(cCount == 1); + } + ASSERT_TRUE(cCount == 0); + + // + // UniquePtr tests... + // + + // Can we free an array? + { + UniquePtr cs(new C[4]); + ASSERT_TRUE(cCount == 4); + } + ASSERT_TRUE(cCount == 0); + // Does release work? + { + UniquePtr c(new C[4]); + ASSERT_TRUE(cCount == 4); + rawC = c.release(); + } + ASSERT_TRUE(cCount == 4); + delete[] rawC; + // Does reset work? + { + UniquePtr c(new C[4]); + ASSERT_TRUE(cCount == 4); + c.reset(new C[2]); + ASSERT_TRUE(cCount == 2); + } + ASSERT_TRUE(cCount == 0); + + // + // Custom deleter tests... + // + ASSERT_TRUE(!freed); + { + UniquePtr i(reinterpret_cast(malloc(sizeof(int)))); + *i = 123; + } + ASSERT_TRUE(freed); +} From 8de1ddece0d0b85eafeb86c06cf3a734dadf2b55 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 4 Sep 2014 18:23:00 -0700 Subject: [PATCH 019/194] Fix order of soinfo links (repairs libcxx tests). (cherry picked from commit b2a30ee8d209154efc367db11b4167a5d6db605f) Change-Id: I59c5333bc050cbbea14051cea9220be2f64ee383 --- linker/linker.cpp | 4 +-- tests/Android.mk | 1 + tests/dlfcn_test.cpp | 28 +++++++++++++++++++ tests/libs/Android.mk | 23 +++++++++++++++ ...pen_testlib_relo_check_dt_needed_order.cpp | 21 ++++++++++++++ ...n_testlib_relo_check_dt_needed_order_1.cpp | 19 +++++++++++++ ...n_testlib_relo_check_dt_needed_order_2.cpp | 19 +++++++++++++ 7 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 tests/libs/dlopen_testlib_relo_check_dt_needed_order.cpp create mode 100644 tests/libs/dlopen_testlib_relo_check_dt_needed_order_1.cpp create mode 100644 tests/libs/dlopen_testlib_relo_check_dt_needed_order_2.cpp diff --git a/linker/linker.cpp b/linker/linker.cpp index 610489ea5..ac470a54b 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1778,8 +1778,8 @@ void soinfo::CallDestructors() { void soinfo::add_child(soinfo* child) { if (has_min_version(0)) { - this->children.push_front(child); - child->parents.push_front(this); + child->parents.push_back(this); + this->children.push_back(child); } } diff --git a/tests/Android.mk b/tests/Android.mk index 64d3b596e..69ff8110a 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -257,6 +257,7 @@ bionic-unit-tests_ldflags := \ -Wl,-u,DlSymTestFunction \ bionic-unit-tests_c_includes := \ + bionic/libc \ $(call include-path-for, libpagemap) \ bionic-unit-tests_shared_libraries_target := \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index b8c33dd53..fb3bfc511 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -22,6 +22,8 @@ #include #include +#include "private/ScopeGuard.h" + #include #define ASSERT_SUBSTR(needle, haystack) \ @@ -130,6 +132,32 @@ TEST(dlfcn, ifunc_ctor_call) { } #endif +TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { + // This is the structure of the test library and + // its dt_needed libraries + // libtest_relo_check_dt_needed_order.so + // | + // +-> libtest_relo_check_dt_needed_order_1.so + // | + // +-> libtest_relo_check_dt_needed_order_2.so + // + // The root library references relo_test_get_answer_lib - which is defined + // in both dt_needed libraries, the correct relocation should + // use the function defined in libtest_relo_check_dt_needed_order_1.so + void* handle = nullptr; + auto guard = create_scope_guard([&]() { + dlclose(handle); + }); + + handle = dlopen("libtest_relo_check_dt_needed_order.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "relo_test_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(1, fn()); +} + TEST(dlfcn, dlopen_check_order) { // Here is how the test library and its dt_needed // libraries are arranged diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index e7a2676ec..21681eec9 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -255,6 +255,29 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# libtest_relo_check_dt_needed_order.so +# | +# +-> libtest_relo_check_dt_needed_order_1.so +# | +# +-> libtest_relo_check_dt_needed_order_2.so +# ----------------------------------------------------------------------------- +libtest_relo_check_dt_needed_order_shared_libraries := \ + libtest_relo_check_dt_needed_order_1 libtest_relo_check_dt_needed_order_2 + +libtest_relo_check_dt_needed_order_src_files := dlopen_testlib_relo_check_dt_needed_order.cpp +libtest_relo_check_dt_needed_order_1_src_files := dlopen_testlib_relo_check_dt_needed_order_1.cpp +libtest_relo_check_dt_needed_order_2_src_files := dlopen_testlib_relo_check_dt_needed_order_2.cpp +build_type := target +build_target := SHARED_LIBRARY + +module := libtest_relo_check_dt_needed_order +include $(TEST_PATH)/Android.build.mk +module := libtest_relo_check_dt_needed_order_1 +include $(TEST_PATH)/Android.build.mk +module := libtest_relo_check_dt_needed_order_2 +include $(TEST_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # Library with dependency used by dlfcn tests # ----------------------------------------------------------------------------- diff --git a/tests/libs/dlopen_testlib_relo_check_dt_needed_order.cpp b/tests/libs/dlopen_testlib_relo_check_dt_needed_order.cpp new file mode 100644 index 000000000..d8fb543ad --- /dev/null +++ b/tests/libs/dlopen_testlib_relo_check_dt_needed_order.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int relo_test_get_answer_lib(); + +extern "C" int relo_test_get_answer() { + return relo_test_get_answer_lib(); +} diff --git a/tests/libs/dlopen_testlib_relo_check_dt_needed_order_1.cpp b/tests/libs/dlopen_testlib_relo_check_dt_needed_order_1.cpp new file mode 100644 index 000000000..4c877d0a1 --- /dev/null +++ b/tests/libs/dlopen_testlib_relo_check_dt_needed_order_1.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int relo_test_get_answer_lib() { + return 1; +} diff --git a/tests/libs/dlopen_testlib_relo_check_dt_needed_order_2.cpp b/tests/libs/dlopen_testlib_relo_check_dt_needed_order_2.cpp new file mode 100644 index 000000000..10288a086 --- /dev/null +++ b/tests/libs/dlopen_testlib_relo_check_dt_needed_order_2.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int relo_test_get_answer_lib() { + return 2; +} From c0133a73b6f37b88afc8dafb6f63af03cbb708f6 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 5 Sep 2014 14:57:59 -0700 Subject: [PATCH 020/194] Revert "Load libraries in breadth-first order" This reverts commit a3ad450a2e3fb6b3fe359683b247eba20896f646. (cherry picked from commit 498eb18b82a425f9f30132e4832f327b2ee0e545) Change-Id: Iec7eab83d0c0ed1604e1e8ea3f9e9d0ce1d29680 --- libc/private/UniquePtr.h | 140 --------- linker/dlfcn.cpp | 1 - linker/linker.cpp | 431 ++++++++++----------------- linker/linker.h | 2 - linker/linker_phdr.cpp | 29 +- linker/linker_phdr.h | 3 +- tests/Android.mk | 1 - tests/dlfcn_test.cpp | 49 --- tests/libs/Android.mk | 154 ---------- tests/libs/dlopen_testlib_answer.cpp | 25 -- tests/uniqueptr_test.cpp | 101 ------- 11 files changed, 178 insertions(+), 758 deletions(-) delete mode 100644 libc/private/UniquePtr.h delete mode 100644 tests/libs/dlopen_testlib_answer.cpp delete mode 100644 tests/uniqueptr_test.cpp diff --git a/libc/private/UniquePtr.h b/libc/private/UniquePtr.h deleted file mode 100644 index 5ac7599a0..000000000 --- a/libc/private/UniquePtr.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UNIQUE_PTR_H_included -#define UNIQUE_PTR_H_included - -// Default deleter for pointer types. -template -struct DefaultDelete { - enum { type_must_be_complete = sizeof(T) }; - DefaultDelete() {} - void operator()(T* p) const { - delete p; - } -}; - -// Default deleter for array types. -template -struct DefaultDelete { - enum { type_must_be_complete = sizeof(T) }; - void operator()(T* p) const { - delete[] p; - } -}; - -// A smart pointer that deletes the given pointer on destruction. -// Equivalent to C++0x's std::unique_ptr (a combination of boost::scoped_ptr -// and boost::scoped_array). -// Named to be in keeping with Android style but also to avoid -// collision with any other implementation, until we can switch over -// to unique_ptr. -// Use thus: -// UniquePtr c(new C); -template > -class UniquePtr { -public: - // Construct a new UniquePtr, taking ownership of the given raw pointer. - explicit UniquePtr(T* ptr = nullptr) : mPtr(ptr) { } - - UniquePtr(UniquePtr&& that) { - mPtr = that.mPtr; - that.mPtr = nullptr; - } - - ~UniquePtr() { - reset(); - } - - // Accessors. - T& operator*() const { return *mPtr; } - T* operator->() const { return mPtr; } - T* get() const { return mPtr; } - - // Returns the raw pointer and hands over ownership to the caller. - // The pointer will not be deleted by UniquePtr. - T* release() __attribute__((warn_unused_result)) { - T* result = mPtr; - mPtr = nullptr; - return result; - } - - // Takes ownership of the given raw pointer. - // If this smart pointer previously owned a different raw pointer, that - // raw pointer will be freed. - void reset(T* ptr = nullptr) { - if (ptr != mPtr) { - D()(mPtr); - mPtr = ptr; - } - } - -private: - // The raw pointer. - T* mPtr; - - // Comparing unique pointers is probably a mistake, since they're unique. - template bool operator==(const UniquePtr& p) const = delete; - template bool operator!=(const UniquePtr& p) const = delete; - - // Disallow copy and assignment. - UniquePtr(const UniquePtr&) = delete; - void operator=(const UniquePtr&) = delete; -}; - -// Partial specialization for array types. Like std::unique_ptr, this removes -// operator* and operator-> but adds operator[]. -template -class UniquePtr { -public: - explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) { - } - UniquePtr(UniquePtr&& that) { - mPtr = that.mPtr; - that.mPtr = nullptr; - } - - ~UniquePtr() { - reset(); - } - - T& operator[](size_t i) const { - return mPtr[i]; - } - T* get() const { return mPtr; } - - T* release() __attribute__((warn_unused_result)) { - T* result = mPtr; - mPtr = NULL; - return result; - } - - void reset(T* ptr = NULL) { - if (ptr != mPtr) { - D()(mPtr); - mPtr = ptr; - } - } - -private: - T* mPtr; - - // Disallow copy and assignment. - UniquePtr(const UniquePtr&) = delete; - void operator=(const UniquePtr&) = delete; -}; - -#endif // UNIQUE_PTR_H_included diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 3024b3c29..38484d995 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -245,7 +245,6 @@ soinfo* get_libdl_info() { __libdl_info.bucket = g_libdl_buckets; __libdl_info.chain = g_libdl_chains; __libdl_info.has_DT_SYMBOLIC = true; - __libdl_info.ref_count = 1; } return &__libdl_info; diff --git a/linker/linker.cpp b/linker/linker.cpp index ac470a54b..2186b3d30 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -44,8 +44,6 @@ #include "private/KernelArgumentBlock.h" #include "private/ScopedPthreadMutexLocker.h" #include "private/ScopedFd.h" -#include "private/ScopeGuard.h" -#include "private/UniquePtr.h" #include "linker.h" #include "linker_debug.h" @@ -172,6 +170,7 @@ DISALLOW_ALLOCATION(void, free, (void* u __unused)); DISALLOW_ALLOCATION(void*, realloc, (void* u1 __unused, size_t u2 __unused)); DISALLOW_ALLOCATION(void*, calloc, (size_t u1 __unused, size_t u2 __unused)); +static char tmp_err_buf[768]; static char __linker_dl_err_buf[768]; char* linker_get_error_buffer() { @@ -513,7 +512,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; - if (somain != nullptr) { + if (si != nullptr && somain != nullptr) { /* * Local scope is executable scope. Just start looking into it right away * for the shortcut. @@ -658,47 +657,22 @@ class TypeBasedAllocator { } }; -class LoadTask { - public: - struct deleter_t { - void operator()(LoadTask* t) { - TypeBasedAllocator::free(t); - } - }; - - typedef UniquePtr unique_ptr; - - static deleter_t deleter; - - static LoadTask* create(const char* name, soinfo* needed_by) { - LoadTask* ptr = TypeBasedAllocator::alloc(); - return new (ptr) LoadTask(name, needed_by); - } - - const char* get_name() { - return name_; - } - - soinfo* get_needed_by() { - return needed_by_; - } - private: - LoadTask(const char* name, soinfo* needed_by) - : name_(name), needed_by_(needed_by) {} - - const char* name_; - soinfo* needed_by_; - - DISALLOW_IMPLICIT_CONSTRUCTORS(LoadTask); -}; - template using linked_list_t = LinkedList>>; typedef linked_list_t SoinfoLinkedList; -typedef linked_list_t StringLinkedList; -typedef linked_list_t LoadTaskList; +static LinkerAllocator> g_soinfo_list_allocator_rw; +class SoinfoListAllocatorRW { + public: + static LinkedListEntry* alloc() { + return g_soinfo_list_allocator_rw.alloc(); + } + + static void free(LinkedListEntry* ptr) { + g_soinfo_list_allocator_rw.free(ptr); + } +}; // This is used by dlsym(3). It performs symbol lookup only within the // specified soinfo object and its dependencies in breadth first order. @@ -824,80 +798,73 @@ static int open_library(const char* name) { return fd; } -template -static void for_each_dt_needed(const soinfo* si, F action) { - for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { - if (d->d_tag == DT_NEEDED) { - action(si->strtab + d->d_un.d_val); +static soinfo* load_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { + int fd = -1; + ScopedFd file_guard(-1); + + if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { + fd = extinfo->library_fd; + } else { + // Open the file. + fd = open_library(name); + if (fd == -1) { + DL_ERR("library \"%s\" not found", name); + return nullptr; + } + + file_guard.reset(fd); } - } -} -static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { - int fd = -1; - ScopedFd file_guard(-1); + ElfReader elf_reader(name, fd); - if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { - fd = extinfo->library_fd; - } else { - // Open the file. - fd = open_library(name); - if (fd == -1) { - DL_ERR("library \"%s\" not found", name); + struct stat file_stat; + if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { + DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); return nullptr; } - file_guard.reset(fd); - } - - struct stat file_stat; - if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { - DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); - return nullptr; - } - - // Check for symlink and other situations where - // file can have different names. - for (soinfo* si = solist; si != nullptr; si = si->next) { - if (si->get_st_dev() != 0 && - si->get_st_ino() != 0 && - si->get_st_dev() == file_stat.st_dev && - si->get_st_ino() == file_stat.st_ino) { - TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); - return si; + // Check for symlink and other situations where + // file can have different names. + for (soinfo* si = solist; si != nullptr; si = si->next) { + if (si->get_st_dev() != 0 && + si->get_st_ino() != 0 && + si->get_st_dev() == file_stat.st_dev && + si->get_st_ino() == file_stat.st_ino) { + TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); + return si; + } } - } - if ((dlflags & RTLD_NOLOAD) != 0) { - return nullptr; - } + if ((dlflags & RTLD_NOLOAD) != 0) { + return nullptr; + } - // Read the ELF header and load the segments. - ElfReader elf_reader(name, fd); - if (!elf_reader.Load(extinfo)) { - return nullptr; - } + // Read the ELF header and load the segments. + if (!elf_reader.Load(extinfo)) { + return nullptr; + } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); - if (si == nullptr) { - return nullptr; - } - si->base = elf_reader.load_start(); - si->size = elf_reader.load_size(); - si->load_bias = elf_reader.load_bias(); - si->phnum = elf_reader.phdr_count(); - si->phdr = elf_reader.loaded_phdr(); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); + if (si == nullptr) { + return nullptr; + } + si->base = elf_reader.load_start(); + si->size = elf_reader.load_size(); + si->load_bias = elf_reader.load_bias(); + si->phnum = elf_reader.phdr_count(); + si->phdr = elf_reader.loaded_phdr(); - if (!si->PrelinkImage()) { - soinfo_free(si); - return nullptr; - } + // At this point we know that whatever is loaded @ base is a valid ELF + // shared library whose segments are properly mapped in. + TRACE("[ load_library base=%p size=%zu name='%s' ]", + reinterpret_cast(si->base), si->size, si->name); - for_each_dt_needed(si, [&] (const char* name) { - load_tasks.push_back(LoadTask::create(name, si)); - }); + if (!si->LinkImage(extinfo)) { + soinfo_free(si); + return nullptr; + } - return si; + return si; } static soinfo *find_loaded_library_by_name(const char* name) { @@ -910,122 +877,33 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* find_library_internal(const char* name, int dlflags, const android_dlextinfo* extinfo) { + if (name == nullptr) { + return somain; + } soinfo* si = find_loaded_library_by_name(name); // Library might still be loaded, the accurate detection - // of this fact is done by load_library. + // of this fact is done by load_library if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(load_tasks, name, dlflags, extinfo); + si = load_library(name, dlflags, extinfo); + } + + if (si != nullptr && (si->flags & FLAG_LINKED) == 0) { + DL_ERR("recursive link to \"%s\"", si->name); + return nullptr; } return si; } -static void soinfo_unload(soinfo* si); - -static bool is_recursive(soinfo* si, soinfo* parent) { - if (parent == nullptr) { - return false; - } - - if (si == parent) { - DL_ERR("recursive link to \"%s\"", si->name); - return true; - } - - return !parent->get_parents().visit([&](soinfo* grandparent) { - return !is_recursive(si, grandparent); - }); -} - -static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { - // Step 0: prepare. - LoadTaskList load_tasks; - for (size_t i = 0; i < library_names_size; ++i) { - const char* name = library_names[i]; - load_tasks.push_back(LoadTask::create(name, nullptr)); - } - - // Libraries added to this list in reverse order so that we can - // start linking from bottom-up - see step 2. - SoinfoLinkedList found_libs; - size_t soinfos_size = 0; - - auto failure_guard = create_scope_guard([&]() { - // Housekeeping - load_tasks.for_each([] (LoadTask* t) { - LoadTask::deleter(t); - }); - - for (size_t i = 0; iget_name(), dlflags, extinfo); - if (si == nullptr) { - return false; - } - - soinfo* needed_by = task->get_needed_by(); - - if (is_recursive(si, needed_by)) { - soinfo_free(si); - return false; - } - - si->ref_count++; - if (needed_by != nullptr) { - needed_by->add_child(si); - } - found_libs.push_front(si); - - // When ld_preloads is not null first - // ld_preloads_size libs are in fact ld_preloads. - if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { - ld_preloads[soinfos_size] = si; - } - - if (soinfos_sizeflags & FLAG_LINKED) == 0) { - if (!si->LinkImage(extinfo)) { - return false; - } - si->flags |= FLAG_LINKED; - } - } - - // All is well - found_libs and load_tasks are empty at this point - // and all libs are successfully linked. - failure_guard.disable(); - return true; -} - static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { - if (name == nullptr) { - somain->ref_count++; - return somain; + soinfo* si = find_library_internal(name, dlflags, extinfo); + if (si != nullptr) { + si->ref_count++; } - - soinfo* si; - - if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { - return nullptr; - } - return si; } @@ -1047,17 +925,20 @@ static void soinfo_unload(soinfo* si) { soinfo_unload(children[i]); } } else { - for_each_dt_needed(si, [&] (const char* library_name) { - TRACE("deprecated (old format of soinfo): %s needs to unload %s", si->name, library_name); - soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); - if (needed != nullptr) { - soinfo_unload(needed); - } else { - // Not found: for example if symlink was deleted between dlopen and dlclose - // Since we cannot really handle errors at this point - print and continue. - PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); + for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { + if (d->d_tag == DT_NEEDED) { + const char* library_name = si->strtab + d->d_un.d_val; + TRACE("%s needs to unload %s", si->name, library_name); + soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); + if (needed != nullptr) { + soinfo_unload(needed); + } else { + // Not found: for example if symlink was deleted between dlopen and dlclose + // Since we cannot really handle errors at this point - print and continue. + PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); + } } - }); + } } notify_gdb_of_unload(si); @@ -1166,6 +1047,9 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count) #if defined(USE_RELA) int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { + ElfW(Sym)* s; + soinfo* lsi; + for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1177,10 +1061,6 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { if (type == 0) { // R_*_NONE continue; } - - ElfW(Sym)* s = nullptr; - soinfo* lsi = nullptr; - if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1239,6 +1119,8 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); + } else { + s = nullptr; } switch (type) { @@ -1432,6 +1314,9 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { #else // REL, not RELA. int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { + ElfW(Sym)* s; + soinfo* lsi; + for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1444,10 +1329,6 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { if (type == 0) { // R_*_NONE continue; } - - ElfW(Sym)* s = nullptr; - soinfo* lsi = nullptr; - if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1509,6 +1390,8 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); + } else { + s = nullptr; } switch (type) { @@ -1663,7 +1546,7 @@ static bool mips_relocate_got(soinfo* si) { for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { // This is an undefined reference... try to locate it. const char* sym_name = si->strtab + sym->st_name; - soinfo* lsi = nullptr; + soinfo* lsi; ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. @@ -1760,9 +1643,6 @@ void soinfo::CallConstructors() { } void soinfo::CallDestructors() { - if (!constructors_called) { - return; - } TRACE("\"%s\": calling destructors", name); // DT_FINI_ARRAY must be parsed in reverse order. @@ -1848,7 +1728,7 @@ bool soinfo::get_has_ifuncs() { return false; } -// This is a return on get_children()/get_parents() if +// This is a return on get_children() in case // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1860,14 +1740,6 @@ soinfo::soinfo_list_t& soinfo::get_children() { return g_empty_list; } -soinfo::soinfo_list_t& soinfo::get_parents() { - if ((this->flags & FLAG_NEW_SOINFO) == 0) { - return g_empty_list; - } - - return this->parents; -} - /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -1929,18 +1801,20 @@ static int nullify_closed_stdio() { return return_value; } -bool soinfo::PrelinkImage() { - phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic); - - /* We can't log anything until the linker is relocated */ +bool soinfo::LinkImage(const android_dlextinfo* extinfo) { bool relocating_linker = (flags & FLAG_LINKER) != 0; + + /* We can't debug anything until the linker is relocated */ if (!relocating_linker) { INFO("[ linking %s ]", name); DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); } /* Extract dynamic section */ - ElfW(Word) dynamic_flags = phdr->p_flags; + size_t dynamic_count; + ElfW(Word) dynamic_flags; + phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, + &dynamic_count, &dynamic_flags); if (dynamic == nullptr) { if (!relocating_linker) { DL_ERR("missing PT_DYNAMIC in \"%s\"", name); @@ -2008,7 +1882,7 @@ bool soinfo::PrelinkImage() { // if the dynamic table is writable // FIXME: not working currently for N64 // The flags for the LOAD and DYNAMIC program headers do not agree. -// The LOAD section containing the dynamic table has been mapped as +// The LOAD section containng the dynamic table has been mapped as // read-only, but the DYNAMIC header claims it is writable. #if !(defined(__mips__) && defined(__LP64__)) if ((dynamic_flags & PF_W) != 0) { @@ -2154,10 +2028,38 @@ bool soinfo::PrelinkImage() { DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); return false; } - return true; -} -bool soinfo::LinkImage(const android_dlextinfo* extinfo) { + // If this is the main executable, then load all of the libraries from LD_PRELOAD now. + if (flags & FLAG_EXE) { + memset(g_ld_preloads, 0, sizeof(g_ld_preloads)); + size_t preload_count = 0; + for (size_t i = 0; g_ld_preload_names[i] != nullptr; i++) { + soinfo* lsi = find_library(g_ld_preload_names[i], 0, nullptr); + if (lsi != nullptr) { + g_ld_preloads[preload_count++] = lsi; + } else { + // As with glibc, failure to load an LD_PRELOAD library is just a warning. + DL_WARN("could not load library \"%s\" from LD_PRELOAD for \"%s\"; caused by %s", + g_ld_preload_names[i], name, linker_get_error_buffer()); + } + } + } + + for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { + if (d->d_tag == DT_NEEDED) { + const char* library_name = strtab + d->d_un.d_val; + DEBUG("%s needs %s", name, library_name); + soinfo* lsi = find_library(library_name, 0, nullptr); + if (lsi == nullptr) { + strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); + DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", + library_name, name, tmp_err_buf); + return false; + } + + add_child(lsi); + } + } #if !defined(__LP64__) if (has_text_relocations) { @@ -2219,6 +2121,7 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { } #endif + flags |= FLAG_LINKED; DEBUG("[ finished linking %s ]", name); #if !defined(__LP64__) @@ -2280,7 +2183,6 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->size = phdr_table_get_load_size(si->phdr, si->phnum); si->load_bias = get_elf_exec_load_bias(ehdr_vdso); - si->PrelinkImage(); si->LinkImage(nullptr); #endif } @@ -2314,7 +2216,7 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_base); ElfW(Phdr)* phdr = reinterpret_cast(linker_base + elf_hdr->e_phoff); phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base, - &linker_soinfo_for_gdb.dynamic); + &linker_soinfo_for_gdb.dynamic, nullptr, nullptr); insert_soinfo_into_debug_map(&linker_soinfo_for_gdb); } @@ -2410,37 +2312,6 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; - si->PrelinkImage(); - - // Load ld_preloads and dependencies. - StringLinkedList needed_library_name_list; - size_t needed_libraries_count = 0; - size_t ld_preloads_count = 0; - while (g_ld_preload_names[ld_preloads_count] != nullptr) { - needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]); - ++needed_libraries_count; - } - - for_each_dt_needed(si, [&](const char* name) { - needed_library_name_list.push_back(name); - ++needed_libraries_count; - }); - - const char* needed_library_names[needed_libraries_count]; - soinfo* needed_library_si[needed_libraries_count]; - - memset(needed_library_names, 0, sizeof(needed_library_names)); - needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { - __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); - exit(EXIT_FAILURE); - } - - for (size_t i = 0; iadd_child(needed_library_si[i]); - } - if (!si->LinkImage(nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); @@ -2450,7 +2321,11 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->CallPreInitConstructors(); - /* After the PrelinkImage, the si->load_bias is initialized. + for (size_t i = 0; g_ld_preloads[i] != nullptr; ++i) { + g_ld_preloads[i]->CallConstructors(); + } + + /* After the LinkImage, the si->load_bias is initialized. * For so lib, the map->l_addr will be updated in notify_gdb_of_load. * We need to update this value for so exe here. So Unwind_Backtrace * for some arch like x86 could work correctly within so exe. @@ -2565,7 +2440,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { + if (!linker_so.LinkImage(nullptr)) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 3024d3ab2..6547d685e 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -204,7 +204,6 @@ struct soinfo { void CallConstructors(); void CallDestructors(); void CallPreInitConstructors(); - bool PrelinkImage(); bool LinkImage(const android_dlextinfo* extinfo); void add_child(soinfo* child); @@ -218,7 +217,6 @@ struct soinfo { bool get_has_ifuncs(); soinfo_list_t& get_children(); - soinfo_list_t& get_parents(); bool inline has_min_version(uint32_t min_version) { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 436517271..1bbd57778 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -702,17 +702,34 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, * load_bias -> load bias * Output: * dynamic -> address of table in memory (null on failure). + * dynamic_count -> number of items in table (0 on failure). + * dynamic_flags -> protection flags for section (unset on failure) * Return: * void */ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, ElfW(Dyn)** dynamic) { - *dynamic = nullptr; - for (const ElfW(Phdr)* phdr = phdr_table, *phdr_limit = phdr + phdr_count; phdr < phdr_limit; phdr++) { - if (phdr->p_type == PT_DYNAMIC) { - *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); - return; + ElfW(Addr) load_bias, + ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags) { + const ElfW(Phdr)* phdr = phdr_table; + const ElfW(Phdr)* phdr_limit = phdr + phdr_count; + + for (phdr = phdr_table; phdr < phdr_limit; phdr++) { + if (phdr->p_type != PT_DYNAMIC) { + continue; } + + *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); + if (dynamic_count) { + *dynamic_count = (unsigned)(phdr->p_memsz / 8); + } + if (dynamic_flags) { + *dynamic_flags = phdr->p_flags; + } + return; + } + *dynamic = nullptr; + if (dynamic_count) { + *dynamic_count = 0; } } diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index d4c3ce85f..50708a0e6 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -101,6 +101,7 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, El #endif void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, ElfW(Dyn)** dynamic); + ElfW(Addr) load_bias, + ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags); #endif /* LINKER_PHDR_H */ diff --git a/tests/Android.mk b/tests/Android.mk index 69ff8110a..38509654c 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -112,7 +112,6 @@ libBionicStandardTests_src_files := \ system_properties_test.cpp \ time_test.cpp \ uchar_test.cpp \ - uniqueptr_test.cpp \ unistd_test.cpp \ wchar_test.cpp \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index fb3bfc511..15ba3414c 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -158,55 +158,6 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { ASSERT_EQ(1, fn()); } -TEST(dlfcn, dlopen_check_order) { - // Here is how the test library and its dt_needed - // libraries are arranged - // - // libtest_check_order.so - // | - // +-> libtest_check_order_1_left.so - // | | - // | +-> libtest_check_order_a.so - // | | - // | +-> libtest_check_order_b.so - // | - // +-> libtest_check_order_2_right.so - // | | - // | +-> libtest_check_order_d.so - // | | - // | +-> libtest_check_order_b.so - // | - // +-> libtest_check_order_3_c.so - // - // load order should be (1, 2, 3, a, b, d) - // - // get_answer() is defined in (2, 3, a, b, c) - // get_answer2() is defined in (b, d) - void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); - ASSERT_TRUE(sym == nullptr); - void* handle = dlopen("libtest_check_order.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr); - typedef int (*fn_t) (void); - fn_t fn, fn2; - fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); - ASSERT_TRUE(fn != NULL); - fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); - ASSERT_TRUE(fn2 != NULL); - - ASSERT_EQ(42, fn()); - ASSERT_EQ(43, fn2()); - dlclose(handle); -} - -// libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> -// libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> -// libtest_with_dependency_loop_a.so -TEST(dlfcn, dlopen_check_loop) { - void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); - ASSERT_TRUE(handle == NULL); - ASSERT_STREQ("dlopen failed: recursive link to \"libtest_with_dependency_loop_a.so\"", dlerror()); -} - TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 21681eec9..20bc263b0 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -101,160 +101,6 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk -# ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct load order: -# libtest_check_order_2_right.so -# ----------------------------------------------------------------------------- -libtest_check_order_2_right_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_2_right_cflags := -D__ANSWER=42 -module := libtest_check_order_2_right -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_a.so -# ----------------------------------------------------------------------------- -libtest_check_order_a_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_a_cflags := -D__ANSWER=1 -module := libtest_check_order_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_b.so -# ----------------------------------------------------------------------------- -libtest_check_order_b_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 -module := libtest_check_order_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_c.so -# ----------------------------------------------------------------------------- -libtest_check_order_3_c_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_3_c_cflags := -D__ANSWER=3 -module := libtest_check_order_3_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_d.so -# ----------------------------------------------------------------------------- -libtest_check_order_d_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_d_shared_libraries := libtest_check_order_b -libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 -module := libtest_check_order_d -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_left.so -# ----------------------------------------------------------------------------- -libtest_check_order_1_left_src_files := \ - empty.cpp - -libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b - -module := libtest_check_order_1_left -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order.so -# ----------------------------------------------------------------------------- -libtest_check_order_src_files := \ - empty.cpp - -libtest_check_order_shared_libraries := libtest_check_order_1_left \ - libtest_check_order_2_right libtest_check_order_3_c - -module := libtest_check_order -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# Library with dependency loop used by dlfcn tests -# -# libtest_with_dependency_loop -> a -> b -> c -> a -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_src_files := empty.cpp - -libtest_with_dependency_loop_shared_libraries := \ - libtest_with_dependency_loop_a - -module := libtest_with_dependency_loop -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_a.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_a_src_files := empty.cpp - -libtest_with_dependency_loop_a_shared_libraries := \ - libtest_with_dependency_loop_b_tmp - -module := libtest_with_dependency_loop_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_b.so -# -# this is temporary placeholder - will be removed -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_tmp_src_files := empty.cpp -libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so - -module := libtest_with_dependency_loop_b_tmp -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_b.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_src_files := empty.cpp -libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c - -module := libtest_with_dependency_loop_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_c.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_c_src_files := empty.cpp - -libtest_with_dependency_loop_c_shared_libraries := \ - libtest_with_dependency_loop_a - -module := libtest_with_dependency_loop_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - # ----------------------------------------------------------------------------- # libtest_relo_check_dt_needed_order.so # | diff --git a/tests/libs/dlopen_testlib_answer.cpp b/tests/libs/dlopen_testlib_answer.cpp deleted file mode 100644 index a4d75046e..000000000 --- a/tests/libs/dlopen_testlib_answer.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int dlopen_test_get_answer() { - return __ANSWER; -} - -#ifdef __ANSWER2 -extern "C" int dlopen_test_get_answer2() { - return __ANSWER2; -} -#endif diff --git a/tests/uniqueptr_test.cpp b/tests/uniqueptr_test.cpp deleted file mode 100644 index 4b6608af2..000000000 --- a/tests/uniqueptr_test.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include - -static int cCount = 0; -struct C { - C() { ++cCount; } - ~C() { --cCount; } -}; - -static bool freed = false; -struct Freer { - void operator() (int* p) { - ASSERT_EQ(123, *p); - free(p); - freed = true; - } -}; - -TEST(UniquePtr, smoke) { - // - // UniquePtr tests... - // - - // Can we free a single object? - { - UniquePtr c(new C); - ASSERT_TRUE(cCount == 1); - } - ASSERT_TRUE(cCount == 0); - // Does release work? - C* rawC; - { - UniquePtr c(new C); - ASSERT_TRUE(cCount == 1); - rawC = c.release(); - } - ASSERT_TRUE(cCount == 1); - delete rawC; - // Does reset work? - { - UniquePtr c(new C); - ASSERT_TRUE(cCount == 1); - c.reset(new C); - ASSERT_TRUE(cCount == 1); - } - ASSERT_TRUE(cCount == 0); - - // - // UniquePtr tests... - // - - // Can we free an array? - { - UniquePtr cs(new C[4]); - ASSERT_TRUE(cCount == 4); - } - ASSERT_TRUE(cCount == 0); - // Does release work? - { - UniquePtr c(new C[4]); - ASSERT_TRUE(cCount == 4); - rawC = c.release(); - } - ASSERT_TRUE(cCount == 4); - delete[] rawC; - // Does reset work? - { - UniquePtr c(new C[4]); - ASSERT_TRUE(cCount == 4); - c.reset(new C[2]); - ASSERT_TRUE(cCount == 2); - } - ASSERT_TRUE(cCount == 0); - - // - // Custom deleter tests... - // - ASSERT_TRUE(!freed); - { - UniquePtr i(reinterpret_cast(malloc(sizeof(int)))); - *i = 123; - } - ASSERT_TRUE(freed); -} From ae69a9584baf8dd6a28065538ca09d1924ebd9e4 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 5 Sep 2014 16:42:53 -0700 Subject: [PATCH 021/194] Load libraries in breadth-first order This patch fixes the problem with symbol search order for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries and ld_preloads in correct order. Bug: https://code.google.com/p/android/issues/detail?id=74255 Attempt: 2 (cherry picked from commit 14669a939d113214a4a20b9318fca0992d5453f0) Change-Id: Id87540c96a2242220967b6fa5d84ddcd829e2b97 --- libc/private/UniquePtr.h | 140 +++++++++ linker/dlfcn.cpp | 1 + linker/linked_list.h | 9 - linker/linker.cpp | 447 +++++++++++++++++---------- linker/linker.h | 2 + linker/linker_phdr.cpp | 29 +- linker/linker_phdr.h | 3 +- linker/tests/linked_list_test.cpp | 4 - tests/Android.mk | 1 + tests/dlfcn_test.cpp | 49 +++ tests/libs/Android.mk | 154 +++++++++ tests/libs/dlopen_testlib_answer.cpp | 25 ++ tests/uniqueptr_test.cpp | 101 ++++++ 13 files changed, 763 insertions(+), 202 deletions(-) create mode 100644 libc/private/UniquePtr.h create mode 100644 tests/libs/dlopen_testlib_answer.cpp create mode 100644 tests/uniqueptr_test.cpp diff --git a/libc/private/UniquePtr.h b/libc/private/UniquePtr.h new file mode 100644 index 000000000..5ac7599a0 --- /dev/null +++ b/libc/private/UniquePtr.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UNIQUE_PTR_H_included +#define UNIQUE_PTR_H_included + +// Default deleter for pointer types. +template +struct DefaultDelete { + enum { type_must_be_complete = sizeof(T) }; + DefaultDelete() {} + void operator()(T* p) const { + delete p; + } +}; + +// Default deleter for array types. +template +struct DefaultDelete { + enum { type_must_be_complete = sizeof(T) }; + void operator()(T* p) const { + delete[] p; + } +}; + +// A smart pointer that deletes the given pointer on destruction. +// Equivalent to C++0x's std::unique_ptr (a combination of boost::scoped_ptr +// and boost::scoped_array). +// Named to be in keeping with Android style but also to avoid +// collision with any other implementation, until we can switch over +// to unique_ptr. +// Use thus: +// UniquePtr c(new C); +template > +class UniquePtr { +public: + // Construct a new UniquePtr, taking ownership of the given raw pointer. + explicit UniquePtr(T* ptr = nullptr) : mPtr(ptr) { } + + UniquePtr(UniquePtr&& that) { + mPtr = that.mPtr; + that.mPtr = nullptr; + } + + ~UniquePtr() { + reset(); + } + + // Accessors. + T& operator*() const { return *mPtr; } + T* operator->() const { return mPtr; } + T* get() const { return mPtr; } + + // Returns the raw pointer and hands over ownership to the caller. + // The pointer will not be deleted by UniquePtr. + T* release() __attribute__((warn_unused_result)) { + T* result = mPtr; + mPtr = nullptr; + return result; + } + + // Takes ownership of the given raw pointer. + // If this smart pointer previously owned a different raw pointer, that + // raw pointer will be freed. + void reset(T* ptr = nullptr) { + if (ptr != mPtr) { + D()(mPtr); + mPtr = ptr; + } + } + +private: + // The raw pointer. + T* mPtr; + + // Comparing unique pointers is probably a mistake, since they're unique. + template bool operator==(const UniquePtr& p) const = delete; + template bool operator!=(const UniquePtr& p) const = delete; + + // Disallow copy and assignment. + UniquePtr(const UniquePtr&) = delete; + void operator=(const UniquePtr&) = delete; +}; + +// Partial specialization for array types. Like std::unique_ptr, this removes +// operator* and operator-> but adds operator[]. +template +class UniquePtr { +public: + explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) { + } + UniquePtr(UniquePtr&& that) { + mPtr = that.mPtr; + that.mPtr = nullptr; + } + + ~UniquePtr() { + reset(); + } + + T& operator[](size_t i) const { + return mPtr[i]; + } + T* get() const { return mPtr; } + + T* release() __attribute__((warn_unused_result)) { + T* result = mPtr; + mPtr = NULL; + return result; + } + + void reset(T* ptr = NULL) { + if (ptr != mPtr) { + D()(mPtr); + mPtr = ptr; + } + } + +private: + T* mPtr; + + // Disallow copy and assignment. + UniquePtr(const UniquePtr&) = delete; + void operator=(const UniquePtr&) = delete; +}; + +#endif // UNIQUE_PTR_H_included diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 38484d995..3024b3c29 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -245,6 +245,7 @@ soinfo* get_libdl_info() { __libdl_info.bucket = g_libdl_buckets; __libdl_info.chain = g_libdl_chains; __libdl_info.has_DT_SYMBOLIC = true; + __libdl_info.ref_count = 1; } return &__libdl_info; diff --git a/linker/linked_list.h b/linker/linked_list.h index 5fbdc8ffb..4e62e208f 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -122,15 +122,6 @@ class LinkedList { } } - size_t size() const { - size_t sz = 0; - for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { - ++sz; - } - - return sz; - } - size_t copy_to_array(T* array[], size_t array_length) const { size_t sz = 0; for (LinkedListEntry* e = head_; sz < array_length && e != nullptr; e = e->next) { diff --git a/linker/linker.cpp b/linker/linker.cpp index 2186b3d30..793ffd51e 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -44,6 +44,8 @@ #include "private/KernelArgumentBlock.h" #include "private/ScopedPthreadMutexLocker.h" #include "private/ScopedFd.h" +#include "private/ScopeGuard.h" +#include "private/UniquePtr.h" #include "linker.h" #include "linker_debug.h" @@ -170,7 +172,6 @@ DISALLOW_ALLOCATION(void, free, (void* u __unused)); DISALLOW_ALLOCATION(void*, realloc, (void* u1 __unused, size_t u2 __unused)); DISALLOW_ALLOCATION(void*, calloc, (size_t u1 __unused, size_t u2 __unused)); -static char tmp_err_buf[768]; static char __linker_dl_err_buf[768]; char* linker_get_error_buffer() { @@ -512,7 +513,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; - if (si != nullptr && somain != nullptr) { + if (somain != nullptr) { /* * Local scope is executable scope. Just start looking into it right away * for the shortcut. @@ -657,22 +658,47 @@ class TypeBasedAllocator { } }; +class LoadTask { + public: + struct deleter_t { + void operator()(LoadTask* t) { + TypeBasedAllocator::free(t); + } + }; + + typedef UniquePtr unique_ptr; + + static deleter_t deleter; + + static LoadTask* create(const char* name, soinfo* needed_by) { + LoadTask* ptr = TypeBasedAllocator::alloc(); + return new (ptr) LoadTask(name, needed_by); + } + + const char* get_name() const { + return name_; + } + + soinfo* get_needed_by() const { + return needed_by_; + } + private: + LoadTask(const char* name, soinfo* needed_by) + : name_(name), needed_by_(needed_by) {} + + const char* name_; + soinfo* needed_by_; + + DISALLOW_IMPLICIT_CONSTRUCTORS(LoadTask); +}; + template using linked_list_t = LinkedList>>; typedef linked_list_t SoinfoLinkedList; +typedef linked_list_t StringLinkedList; +typedef linked_list_t LoadTaskList; -static LinkerAllocator> g_soinfo_list_allocator_rw; -class SoinfoListAllocatorRW { - public: - static LinkedListEntry* alloc() { - return g_soinfo_list_allocator_rw.alloc(); - } - - static void free(LinkedListEntry* ptr) { - g_soinfo_list_allocator_rw.free(ptr); - } -}; // This is used by dlsym(3). It performs symbol lookup only within the // specified soinfo object and its dependencies in breadth first order. @@ -798,73 +824,80 @@ static int open_library(const char* name) { return fd; } -static soinfo* load_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { - int fd = -1; - ScopedFd file_guard(-1); - - if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { - fd = extinfo->library_fd; - } else { - // Open the file. - fd = open_library(name); - if (fd == -1) { - DL_ERR("library \"%s\" not found", name); - return nullptr; - } - - file_guard.reset(fd); +template +static void for_each_dt_needed(const soinfo* si, F action) { + for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { + if (d->d_tag == DT_NEEDED) { + action(si->strtab + d->d_un.d_val); } + } +} - ElfReader elf_reader(name, fd); +static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { + int fd = -1; + ScopedFd file_guard(-1); - struct stat file_stat; - if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { - DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); + if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { + fd = extinfo->library_fd; + } else { + // Open the file. + fd = open_library(name); + if (fd == -1) { + DL_ERR("library \"%s\" not found", name); return nullptr; } - // Check for symlink and other situations where - // file can have different names. - for (soinfo* si = solist; si != nullptr; si = si->next) { - if (si->get_st_dev() != 0 && - si->get_st_ino() != 0 && - si->get_st_dev() == file_stat.st_dev && - si->get_st_ino() == file_stat.st_ino) { - TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); - return si; - } + file_guard.reset(fd); + } + + struct stat file_stat; + if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { + DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); + return nullptr; + } + + // Check for symlink and other situations where + // file can have different names. + for (soinfo* si = solist; si != nullptr; si = si->next) { + if (si->get_st_dev() != 0 && + si->get_st_ino() != 0 && + si->get_st_dev() == file_stat.st_dev && + si->get_st_ino() == file_stat.st_ino) { + TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); + return si; } + } - if ((dlflags & RTLD_NOLOAD) != 0) { - return nullptr; - } + if ((dlflags & RTLD_NOLOAD) != 0) { + return nullptr; + } - // Read the ELF header and load the segments. - if (!elf_reader.Load(extinfo)) { - return nullptr; - } + // Read the ELF header and load the segments. + ElfReader elf_reader(name, fd); + if (!elf_reader.Load(extinfo)) { + return nullptr; + } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); - if (si == nullptr) { - return nullptr; - } - si->base = elf_reader.load_start(); - si->size = elf_reader.load_size(); - si->load_bias = elf_reader.load_bias(); - si->phnum = elf_reader.phdr_count(); - si->phdr = elf_reader.loaded_phdr(); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); + if (si == nullptr) { + return nullptr; + } + si->base = elf_reader.load_start(); + si->size = elf_reader.load_size(); + si->load_bias = elf_reader.load_bias(); + si->phnum = elf_reader.phdr_count(); + si->phdr = elf_reader.loaded_phdr(); - // At this point we know that whatever is loaded @ base is a valid ELF - // shared library whose segments are properly mapped in. - TRACE("[ load_library base=%p size=%zu name='%s' ]", - reinterpret_cast(si->base), si->size, si->name); + if (!si->PrelinkImage()) { + soinfo_free(si); + return nullptr; + } - if (!si->LinkImage(extinfo)) { - soinfo_free(si); - return nullptr; - } + for_each_dt_needed(si, [&] (const char* name) { + load_tasks.push_back(LoadTask::create(name, si)); + }); - return si; + return si; } static soinfo *find_loaded_library_by_name(const char* name) { @@ -877,33 +910,122 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(const char* name, int dlflags, const android_dlextinfo* extinfo) { - if (name == nullptr) { - return somain; - } +static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { soinfo* si = find_loaded_library_by_name(name); // Library might still be loaded, the accurate detection - // of this fact is done by load_library + // of this fact is done by load_library. if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(name, dlflags, extinfo); - } - - if (si != nullptr && (si->flags & FLAG_LINKED) == 0) { - DL_ERR("recursive link to \"%s\"", si->name); - return nullptr; + si = load_library(load_tasks, name, dlflags, extinfo); } return si; } -static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { - soinfo* si = find_library_internal(name, dlflags, extinfo); - if (si != nullptr) { - si->ref_count++; +static void soinfo_unload(soinfo* si); + +static bool is_recursive(soinfo* si, soinfo* parent) { + if (parent == nullptr) { + return false; } + + if (si == parent) { + DL_ERR("recursive link to \"%s\"", si->name); + return true; + } + + return !parent->get_parents().visit([&](soinfo* grandparent) { + return !is_recursive(si, grandparent); + }); +} + +static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], + soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { + // Step 0: prepare. + LoadTaskList load_tasks; + for (size_t i = 0; i < library_names_size; ++i) { + const char* name = library_names[i]; + load_tasks.push_back(LoadTask::create(name, nullptr)); + } + + // Libraries added to this list in reverse order so that we can + // start linking from bottom-up - see step 2. + SoinfoLinkedList found_libs; + size_t soinfos_size = 0; + + auto failure_guard = create_scope_guard([&]() { + // Housekeeping + load_tasks.for_each([] (LoadTask* t) { + LoadTask::deleter(t); + }); + + for (size_t i = 0; iget_name(), dlflags, extinfo); + if (si == nullptr) { + return false; + } + + soinfo* needed_by = task->get_needed_by(); + + if (is_recursive(si, needed_by)) { + soinfo_free(si); + return false; + } + + si->ref_count++; + if (needed_by != nullptr) { + needed_by->add_child(si); + } + found_libs.push_front(si); + + // When ld_preloads is not null first + // ld_preloads_size libs are in fact ld_preloads. + if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { + ld_preloads[soinfos_size] = si; + } + + if (soinfos_sizeflags & FLAG_LINKED) == 0) { + if (!si->LinkImage(extinfo)) { + return false; + } + si->flags |= FLAG_LINKED; + } + } + + // All is well - found_libs and load_tasks are empty at this point + // and all libs are successfully linked. + failure_guard.disable(); + return true; +} + +static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { + if (name == nullptr) { + somain->ref_count++; + return somain; + } + + soinfo* si; + + if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { + return nullptr; + } + return si; } @@ -913,32 +1035,23 @@ static void soinfo_unload(soinfo* si) { si->CallDestructors(); if (si->has_min_version(0)) { - // It is not safe to do si->get_children().for_each, because - // during soinfo_free the child will concurrently modify the si->children - // list, therefore we create a copy and use it to unload children. - size_t children_count = si->get_children().size(); - soinfo* children[children_count]; - si->get_children().copy_to_array(children, children_count); - - for (size_t i = 0; i < children_count; ++i) { - TRACE("%s needs to unload %s", si->name, children[i]->name); - soinfo_unload(children[i]); + soinfo* child = nullptr; + while ((child = si->get_children().pop_front()) != nullptr) { + TRACE("%s needs to unload %s", si->name, child->name); + soinfo_unload(child); } } else { - for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { - if (d->d_tag == DT_NEEDED) { - const char* library_name = si->strtab + d->d_un.d_val; - TRACE("%s needs to unload %s", si->name, library_name); - soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); - if (needed != nullptr) { - soinfo_unload(needed); - } else { - // Not found: for example if symlink was deleted between dlopen and dlclose - // Since we cannot really handle errors at this point - print and continue. - PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); - } + for_each_dt_needed(si, [&] (const char* library_name) { + TRACE("deprecated (old format of soinfo): %s needs to unload %s", si->name, library_name); + soinfo* needed = find_library(library_name, RTLD_NOLOAD, nullptr); + if (needed != nullptr) { + soinfo_unload(needed); + } else { + // Not found: for example if symlink was deleted between dlopen and dlclose + // Since we cannot really handle errors at this point - print and continue. + PRINT("warning: couldn't find %s needed by %s on unload.", library_name, si->name); } - } + }); } notify_gdb_of_unload(si); @@ -1047,9 +1160,6 @@ static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count) #if defined(USE_RELA) int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { - ElfW(Sym)* s; - soinfo* lsi; - for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1061,6 +1171,10 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { if (type == 0) { // R_*_NONE continue; } + + ElfW(Sym)* s = nullptr; + soinfo* lsi = nullptr; + if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1119,8 +1233,6 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); - } else { - s = nullptr; } switch (type) { @@ -1314,9 +1426,6 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { #else // REL, not RELA. int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { - ElfW(Sym)* s; - soinfo* lsi; - for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1329,6 +1438,10 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { if (type == 0) { // R_*_NONE continue; } + + ElfW(Sym)* s = nullptr; + soinfo* lsi = nullptr; + if (sym != 0) { sym_name = reinterpret_cast(strtab + symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); @@ -1390,8 +1503,6 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { sym_addr = static_cast(s->st_value + lsi->load_bias); } count_relocation(kRelocSymbol); - } else { - s = nullptr; } switch (type) { @@ -1546,7 +1657,7 @@ static bool mips_relocate_got(soinfo* si) { for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { // This is an undefined reference... try to locate it. const char* sym_name = si->strtab + sym->st_name; - soinfo* lsi; + soinfo* lsi = nullptr; ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. @@ -1643,6 +1754,9 @@ void soinfo::CallConstructors() { } void soinfo::CallDestructors() { + if (!constructors_called) { + return; + } TRACE("\"%s\": calling destructors", name); // DT_FINI_ARRAY must be parsed in reverse order. @@ -1728,7 +1842,7 @@ bool soinfo::get_has_ifuncs() { return false; } -// This is a return on get_children() in case +// This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1740,6 +1854,14 @@ soinfo::soinfo_list_t& soinfo::get_children() { return g_empty_list; } +soinfo::soinfo_list_t& soinfo::get_parents() { + if ((this->flags & FLAG_NEW_SOINFO) == 0) { + return g_empty_list; + } + + return this->parents; +} + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -1801,20 +1923,18 @@ static int nullify_closed_stdio() { return return_value; } -bool soinfo::LinkImage(const android_dlextinfo* extinfo) { - bool relocating_linker = (flags & FLAG_LINKER) != 0; +bool soinfo::PrelinkImage() { + phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic); - /* We can't debug anything until the linker is relocated */ + /* We can't log anything until the linker is relocated */ + bool relocating_linker = (flags & FLAG_LINKER) != 0; if (!relocating_linker) { INFO("[ linking %s ]", name); DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); } /* Extract dynamic section */ - size_t dynamic_count; - ElfW(Word) dynamic_flags; - phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, - &dynamic_count, &dynamic_flags); + ElfW(Word) dynamic_flags = phdr->p_flags; if (dynamic == nullptr) { if (!relocating_linker) { DL_ERR("missing PT_DYNAMIC in \"%s\"", name); @@ -1882,7 +2002,7 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { // if the dynamic table is writable // FIXME: not working currently for N64 // The flags for the LOAD and DYNAMIC program headers do not agree. -// The LOAD section containng the dynamic table has been mapped as +// The LOAD section containing the dynamic table has been mapped as // read-only, but the DYNAMIC header claims it is writable. #if !(defined(__mips__) && defined(__LP64__)) if ((dynamic_flags & PF_W) != 0) { @@ -2028,38 +2148,10 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); return false; } + return true; +} - // If this is the main executable, then load all of the libraries from LD_PRELOAD now. - if (flags & FLAG_EXE) { - memset(g_ld_preloads, 0, sizeof(g_ld_preloads)); - size_t preload_count = 0; - for (size_t i = 0; g_ld_preload_names[i] != nullptr; i++) { - soinfo* lsi = find_library(g_ld_preload_names[i], 0, nullptr); - if (lsi != nullptr) { - g_ld_preloads[preload_count++] = lsi; - } else { - // As with glibc, failure to load an LD_PRELOAD library is just a warning. - DL_WARN("could not load library \"%s\" from LD_PRELOAD for \"%s\"; caused by %s", - g_ld_preload_names[i], name, linker_get_error_buffer()); - } - } - } - - for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { - if (d->d_tag == DT_NEEDED) { - const char* library_name = strtab + d->d_un.d_val; - DEBUG("%s needs %s", name, library_name); - soinfo* lsi = find_library(library_name, 0, nullptr); - if (lsi == nullptr) { - strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); - DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", - library_name, name, tmp_err_buf); - return false; - } - - add_child(lsi); - } - } +bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2121,7 +2213,6 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { } #endif - flags |= FLAG_LINKED; DEBUG("[ finished linking %s ]", name); #if !defined(__LP64__) @@ -2183,6 +2274,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->size = phdr_table_get_load_size(si->phdr, si->phnum); si->load_bias = get_elf_exec_load_bias(ehdr_vdso); + si->PrelinkImage(); si->LinkImage(nullptr); #endif } @@ -2216,7 +2308,7 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_base); ElfW(Phdr)* phdr = reinterpret_cast(linker_base + elf_hdr->e_phoff); phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base, - &linker_soinfo_for_gdb.dynamic, nullptr, nullptr); + &linker_soinfo_for_gdb.dynamic); insert_soinfo_into_debug_map(&linker_soinfo_for_gdb); } @@ -2312,6 +2404,37 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; + si->PrelinkImage(); + + // Load ld_preloads and dependencies. + StringLinkedList needed_library_name_list; + size_t needed_libraries_count = 0; + size_t ld_preloads_count = 0; + while (g_ld_preload_names[ld_preloads_count] != nullptr) { + needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]); + ++needed_libraries_count; + } + + for_each_dt_needed(si, [&](const char* name) { + needed_library_name_list.push_back(name); + ++needed_libraries_count; + }); + + const char* needed_library_names[needed_libraries_count]; + soinfo* needed_library_si[needed_libraries_count]; + + memset(needed_library_names, 0, sizeof(needed_library_names)); + needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); + + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } + + for (size_t i = 0; iadd_child(needed_library_si[i]); + } + if (!si->LinkImage(nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); @@ -2321,11 +2444,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->CallPreInitConstructors(); - for (size_t i = 0; g_ld_preloads[i] != nullptr; ++i) { - g_ld_preloads[i]->CallConstructors(); - } - - /* After the LinkImage, the si->load_bias is initialized. + /* After the PrelinkImage, the si->load_bias is initialized. * For so lib, the map->l_addr will be updated in notify_gdb_of_load. * We need to update this value for so exe here. So Unwind_Backtrace * for some arch like x86 could work correctly within so exe. @@ -2440,7 +2559,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!linker_so.LinkImage(nullptr)) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 6547d685e..3024d3ab2 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -204,6 +204,7 @@ struct soinfo { void CallConstructors(); void CallDestructors(); void CallPreInitConstructors(); + bool PrelinkImage(); bool LinkImage(const android_dlextinfo* extinfo); void add_child(soinfo* child); @@ -217,6 +218,7 @@ struct soinfo { bool get_has_ifuncs(); soinfo_list_t& get_children(); + soinfo_list_t& get_parents(); bool inline has_min_version(uint32_t min_version) { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 1bbd57778..436517271 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -702,34 +702,17 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, * load_bias -> load bias * Output: * dynamic -> address of table in memory (null on failure). - * dynamic_count -> number of items in table (0 on failure). - * dynamic_flags -> protection flags for section (unset on failure) * Return: * void */ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, - ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags) { - const ElfW(Phdr)* phdr = phdr_table; - const ElfW(Phdr)* phdr_limit = phdr + phdr_count; - - for (phdr = phdr_table; phdr < phdr_limit; phdr++) { - if (phdr->p_type != PT_DYNAMIC) { - continue; - } - - *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); - if (dynamic_count) { - *dynamic_count = (unsigned)(phdr->p_memsz / 8); - } - if (dynamic_flags) { - *dynamic_flags = phdr->p_flags; - } - return; - } + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic) { *dynamic = nullptr; - if (dynamic_count) { - *dynamic_count = 0; + for (const ElfW(Phdr)* phdr = phdr_table, *phdr_limit = phdr + phdr_count; phdr < phdr_limit; phdr++) { + if (phdr->p_type == PT_DYNAMIC) { + *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); + return; + } } } diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index 50708a0e6..d4c3ce85f 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -101,7 +101,6 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, El #endif void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, - ElfW(Dyn)** dynamic, size_t* dynamic_count, ElfW(Word)* dynamic_flags); + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic); #endif /* LINKER_PHDR_H */ diff --git a/linker/tests/linked_list_test.cpp b/linker/tests/linked_list_test.cpp index a555edb33..09ad68766 100644 --- a/linker/tests/linked_list_test.cpp +++ b/linker/tests/linked_list_test.cpp @@ -139,7 +139,6 @@ TEST(linked_list, copy_to_array) { const char* buf[max_size]; memset(buf, 0, sizeof(buf)); - ASSERT_EQ(0U, list.size()); ASSERT_EQ(0U, list.copy_to_array(buf, max_size)); ASSERT_EQ(nullptr, buf[0]); @@ -149,7 +148,6 @@ TEST(linked_list, copy_to_array) { list.push_back("d"); memset(buf, 0, sizeof(buf)); - ASSERT_EQ(4U, list.size()); ASSERT_EQ(2U, list.copy_to_array(buf, 2)); ASSERT_STREQ("a", buf[0]); ASSERT_STREQ("b", buf[1]); @@ -166,7 +164,6 @@ TEST(linked_list, copy_to_array) { list.remove_if([](const char* c) { return *c != 'c'; }); - ASSERT_EQ(1U, list.size()); ASSERT_EQ(1U, list.copy_to_array(buf, max_size)); ASSERT_STREQ("c", buf[0]); ASSERT_EQ(nullptr, buf[1]); @@ -177,7 +174,6 @@ TEST(linked_list, copy_to_array) { return *c == 'c'; }); - ASSERT_EQ(0U, list.size()); ASSERT_EQ(0U, list.copy_to_array(buf, max_size)); ASSERT_EQ(nullptr, buf[0]); } diff --git a/tests/Android.mk b/tests/Android.mk index 38509654c..69ff8110a 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -112,6 +112,7 @@ libBionicStandardTests_src_files := \ system_properties_test.cpp \ time_test.cpp \ uchar_test.cpp \ + uniqueptr_test.cpp \ unistd_test.cpp \ wchar_test.cpp \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 15ba3414c..fb3bfc511 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -158,6 +158,55 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { ASSERT_EQ(1, fn()); } +TEST(dlfcn, dlopen_check_order) { + // Here is how the test library and its dt_needed + // libraries are arranged + // + // libtest_check_order.so + // | + // +-> libtest_check_order_1_left.so + // | | + // | +-> libtest_check_order_a.so + // | | + // | +-> libtest_check_order_b.so + // | + // +-> libtest_check_order_2_right.so + // | | + // | +-> libtest_check_order_d.so + // | | + // | +-> libtest_check_order_b.so + // | + // +-> libtest_check_order_3_c.so + // + // load order should be (1, 2, 3, a, b, d) + // + // get_answer() is defined in (2, 3, a, b, c) + // get_answer2() is defined in (b, d) + void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); + ASSERT_TRUE(sym == nullptr); + void* handle = dlopen("libtest_check_order.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr); + typedef int (*fn_t) (void); + fn_t fn, fn2; + fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); + ASSERT_TRUE(fn != NULL); + fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); + ASSERT_TRUE(fn2 != NULL); + + ASSERT_EQ(42, fn()); + ASSERT_EQ(43, fn2()); + dlclose(handle); +} + +// libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> +// libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> +// libtest_with_dependency_loop_a.so +TEST(dlfcn, dlopen_check_loop) { + void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); + ASSERT_TRUE(handle == NULL); + ASSERT_STREQ("dlopen failed: recursive link to \"libtest_with_dependency_loop_a.so\"", dlerror()); +} + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 20bc263b0..21681eec9 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -101,6 +101,160 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct load order: +# libtest_check_order_2_right.so +# ----------------------------------------------------------------------------- +libtest_check_order_2_right_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_2_right_cflags := -D__ANSWER=42 +module := libtest_check_order_2_right +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_a.so +# ----------------------------------------------------------------------------- +libtest_check_order_a_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_a_cflags := -D__ANSWER=1 +module := libtest_check_order_a +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_b.so +# ----------------------------------------------------------------------------- +libtest_check_order_b_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 +module := libtest_check_order_b +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_c.so +# ----------------------------------------------------------------------------- +libtest_check_order_3_c_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_3_c_cflags := -D__ANSWER=3 +module := libtest_check_order_3_c +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_d.so +# ----------------------------------------------------------------------------- +libtest_check_order_d_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_d_shared_libraries := libtest_check_order_b +libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 +module := libtest_check_order_d +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_left.so +# ----------------------------------------------------------------------------- +libtest_check_order_1_left_src_files := \ + empty.cpp + +libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b + +module := libtest_check_order_1_left +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order.so +# ----------------------------------------------------------------------------- +libtest_check_order_src_files := \ + empty.cpp + +libtest_check_order_shared_libraries := libtest_check_order_1_left \ + libtest_check_order_2_right libtest_check_order_3_c + +module := libtest_check_order +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# Library with dependency loop used by dlfcn tests +# +# libtest_with_dependency_loop -> a -> b -> c -> a +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_src_files := empty.cpp + +libtest_with_dependency_loop_shared_libraries := \ + libtest_with_dependency_loop_a + +module := libtest_with_dependency_loop +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_a.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_a_src_files := empty.cpp + +libtest_with_dependency_loop_a_shared_libraries := \ + libtest_with_dependency_loop_b_tmp + +module := libtest_with_dependency_loop_a +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_b.so +# +# this is temporary placeholder - will be removed +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_b_tmp_src_files := empty.cpp +libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so + +module := libtest_with_dependency_loop_b_tmp +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_b.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_b_src_files := empty.cpp +libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c + +module := libtest_with_dependency_loop_b +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- +# libtest_with_dependency_loop_c.so +# ----------------------------------------------------------------------------- +libtest_with_dependency_loop_c_src_files := empty.cpp + +libtest_with_dependency_loop_c_shared_libraries := \ + libtest_with_dependency_loop_a + +module := libtest_with_dependency_loop_c +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # libtest_relo_check_dt_needed_order.so # | diff --git a/tests/libs/dlopen_testlib_answer.cpp b/tests/libs/dlopen_testlib_answer.cpp new file mode 100644 index 000000000..a4d75046e --- /dev/null +++ b/tests/libs/dlopen_testlib_answer.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int dlopen_test_get_answer() { + return __ANSWER; +} + +#ifdef __ANSWER2 +extern "C" int dlopen_test_get_answer2() { + return __ANSWER2; +} +#endif diff --git a/tests/uniqueptr_test.cpp b/tests/uniqueptr_test.cpp new file mode 100644 index 000000000..4b6608af2 --- /dev/null +++ b/tests/uniqueptr_test.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +static int cCount = 0; +struct C { + C() { ++cCount; } + ~C() { --cCount; } +}; + +static bool freed = false; +struct Freer { + void operator() (int* p) { + ASSERT_EQ(123, *p); + free(p); + freed = true; + } +}; + +TEST(UniquePtr, smoke) { + // + // UniquePtr tests... + // + + // Can we free a single object? + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + } + ASSERT_TRUE(cCount == 0); + // Does release work? + C* rawC; + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + rawC = c.release(); + } + ASSERT_TRUE(cCount == 1); + delete rawC; + // Does reset work? + { + UniquePtr c(new C); + ASSERT_TRUE(cCount == 1); + c.reset(new C); + ASSERT_TRUE(cCount == 1); + } + ASSERT_TRUE(cCount == 0); + + // + // UniquePtr tests... + // + + // Can we free an array? + { + UniquePtr cs(new C[4]); + ASSERT_TRUE(cCount == 4); + } + ASSERT_TRUE(cCount == 0); + // Does release work? + { + UniquePtr c(new C[4]); + ASSERT_TRUE(cCount == 4); + rawC = c.release(); + } + ASSERT_TRUE(cCount == 4); + delete[] rawC; + // Does reset work? + { + UniquePtr c(new C[4]); + ASSERT_TRUE(cCount == 4); + c.reset(new C[2]); + ASSERT_TRUE(cCount == 2); + } + ASSERT_TRUE(cCount == 0); + + // + // Custom deleter tests... + // + ASSERT_TRUE(!freed); + { + UniquePtr i(reinterpret_cast(malloc(sizeof(int)))); + *i = 123; + } + ASSERT_TRUE(freed); +} From 61c4147fa8c8abb33ae6fecb85dd1ae1b60e1ed6 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 4 Sep 2014 12:47:07 -0700 Subject: [PATCH 022/194] Reset enviroment for math_tests Bug: 17390824 (cherry picked from commit 7b956ede3f0f40bd8a085a8ad3729bb3e0e030f2) Change-Id: I5d804ceb5e69533584161bfed6787529cd8296fb --- tests/math_test.cpp | 37 +++++++++++++++++++++++++++++++++++++ tests/string_test.cpp | 18 +++++++++--------- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/tests/math_test.cpp b/tests/math_test.cpp index b4f5b1427..ad4654e53 100644 --- a/tests/math_test.cpp +++ b/tests/math_test.cpp @@ -53,6 +53,8 @@ template inline int test_capture_isinf(const T in) { #include #include +#include + float float_subnormal() { union { float f; @@ -760,6 +762,10 @@ TEST(math, erfcl) { } TEST(math, lrint) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); + fesetround(FE_UPWARD); // lrint/lrintf/lrintl obey the rounding mode. ASSERT_EQ(1235, lrint(1234.01)); ASSERT_EQ(1235, lrintf(1234.01f)); @@ -780,6 +786,10 @@ TEST(math, lrint) { } TEST(math, rint) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); + fesetround(FE_UPWARD); // rint/rintf/rintl obey the rounding mode. feclearexcept(FE_ALL_EXCEPT); // rint/rintf/rintl do set the FE_INEXACT flag. ASSERT_EQ(1234.0, rint(1234.0)); @@ -806,6 +816,9 @@ TEST(math, rint) { } TEST(math, nearbyint) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode. feclearexcept(FE_ALL_EXCEPT); // nearbyint/nearbyintf/nearbyintl don't set the FE_INEXACT flag. ASSERT_EQ(1234.0, nearbyint(1234.0)); @@ -832,6 +845,9 @@ TEST(math, nearbyint) { } TEST(math, lround) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // lround ignores the rounding mode. ASSERT_EQ(1234, lround(1234.01)); ASSERT_EQ(1234, lroundf(1234.01f)); @@ -839,6 +855,9 @@ TEST(math, lround) { } TEST(math, llround) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // llround ignores the rounding mode. ASSERT_EQ(1234L, llround(1234.01)); ASSERT_EQ(1234L, llroundf(1234.01f)); @@ -933,6 +952,9 @@ TEST(math, fdiml) { } TEST(math, round) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero. ASSERT_DOUBLE_EQ(1.0, round(0.5)); ASSERT_DOUBLE_EQ(-1.0, round(-0.5)); @@ -943,6 +965,9 @@ TEST(math, round) { } TEST(math, roundf) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero. ASSERT_FLOAT_EQ(1.0f, roundf(0.5f)); ASSERT_FLOAT_EQ(-1.0f, roundf(-0.5f)); @@ -953,6 +978,9 @@ TEST(math, roundf) { } TEST(math, roundl) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero. ASSERT_DOUBLE_EQ(1.0L, roundl(0.5L)); ASSERT_DOUBLE_EQ(-1.0L, roundl(-0.5L)); @@ -963,6 +991,9 @@ TEST(math, roundl) { } TEST(math, trunc) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero. ASSERT_DOUBLE_EQ(1.0, trunc(1.5)); ASSERT_DOUBLE_EQ(-1.0, trunc(-1.5)); @@ -973,6 +1004,9 @@ TEST(math, trunc) { } TEST(math, truncf) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero. ASSERT_FLOAT_EQ(1.0f, truncf(1.5f)); ASSERT_FLOAT_EQ(-1.0f, truncf(-1.5f)); @@ -983,6 +1017,9 @@ TEST(math, truncf) { } TEST(math, truncl) { + auto guard = create_scope_guard([]() { + fesetenv(FE_DFL_ENV); + }); fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero. ASSERT_DOUBLE_EQ(1.0L, truncl(1.5L)); ASSERT_DOUBLE_EQ(-1.0L, truncl(-1.5L)); diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 73c94c602..f1ac9ddb4 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -173,7 +173,7 @@ struct StringTestState { const size_t MAX_LEN; Character *ptr, *ptr1, *ptr2; size_t n; - int len[ITER + 1]; + size_t len[ITER + 1]; private: Character *glob_ptr, *glob_ptr1, *glob_ptr2; @@ -186,7 +186,7 @@ struct StringTestState { n = 0; len[n++] = 0; for (size_t i = 1; i < ITER; ++i) { - int l = (int) exp(log((double) MAX_LEN) * i / ITER); + size_t l = static_cast(exp(log(static_cast(MAX_LEN)) * i / ITER)); if (l != len[n - 1]) { len[n++] = l; } @@ -392,7 +392,7 @@ TEST(string, strchr) { } state.ptr1[state.len[i] - 1] = '\0'; - int pos = random() % state.MAX_LEN; + size_t pos = random() % state.MAX_LEN; char* expected; if (pos >= state.len[i] - 1) { if (seek_char == 0) { @@ -421,7 +421,7 @@ TEST(string, strcmp) { state.ptr1[state.len[i] - 1] = '\0'; state.ptr2[state.len[i] - 1] = '\0'; - int pos = 1 + (random() % (state.MAX_LEN - 1)); + size_t pos = 1 + (random() % (state.MAX_LEN - 1)); int actual; int expected; if (pos >= state.len[i] - 1) { @@ -510,7 +510,7 @@ TEST(string, strlcat) { state.ptr2[state.MAX_LEN - 1] = '\0'; memcpy(state.ptr, state.ptr2, state.MAX_LEN + state.len[i]); - int pos = random() % state.MAX_LEN; + size_t pos = random() % state.MAX_LEN; memset(state.ptr1, '\3', pos); state.ptr1[pos] = '\0'; if (pos < state.len[i]) { @@ -604,7 +604,7 @@ TEST(string, strncmp) { state.ptr1[state.len[i] - 1] = '\0'; state.ptr2[state.len[i] - 1] = '\0'; - int pos = 1 + (random() % (state.MAX_LEN - 1)); + size_t pos = 1 + (random() % (state.MAX_LEN - 1)); int actual; int expected; if (pos >= state.len[i] - 1) { @@ -722,7 +722,7 @@ TEST(string, strrchr) { } state.ptr1[state.len[i] - 1] = '\0'; - int pos = random() % state.MAX_LEN; + size_t pos = random() % state.MAX_LEN; char* expected; if (pos >= state.len[i] - 1) { if (seek_char == 0) { @@ -749,7 +749,7 @@ TEST(string, memchr) { memset(state.ptr1, ~seek_char, state.len[i]); - int pos = random() % state.MAX_LEN; + size_t pos = random() % state.MAX_LEN; char* expected; if (pos >= state.len[i]) { expected = NULL; @@ -780,7 +780,7 @@ TEST(string, memrchr) { memset(state.ptr1, ~seek_char, state.len[i]); - int pos = random() % state.MAX_LEN; + size_t pos = random() % state.MAX_LEN; char* expected; if (pos >= state.len[i]) { expected = NULL; From ef1306d77718cc74a8df5673a15649dea317571d Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 8 Sep 2014 16:22:22 -0700 Subject: [PATCH 023/194] Refactoring: C++11 style DISABLE_ bionic marcos Enable the -std=gnu++11 flag for libstdc++ static and dynamic libs. ScopeGuard uses DISABLE_ macros instead of '= delete'; (cherry picked from commit d9ff7226613014056c9edd79a68dc5af939107a0) Change-Id: If2573d080770e18b36b56106f2369f7bb682cd3c --- libc/Android.mk | 2 ++ libc/private/ScopeGuard.h | 14 +++++++------- libc/private/bionic_macros.h | 6 +++--- linker/linker.cpp | 2 +- tests/dlfcn_test.cpp | 2 +- tests/math_test.cpp | 22 +++++++++++----------- tests/pthread_test.cpp | 2 +- 7 files changed, 26 insertions(+), 24 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index fe1f31577..92ead2637 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1164,6 +1164,7 @@ libstdcxx_common_src_files := \ include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_SRC_FILES := $(libstdcxx_common_src_files) LOCAL_MODULE:= libstdc++ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk @@ -1176,6 +1177,7 @@ include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) LOCAL_SRC_FILES := $(libstdcxx_common_src_files) LOCAL_MODULE:= libstdc++ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk diff --git a/libc/private/ScopeGuard.h b/libc/private/ScopeGuard.h index 183e322f7..d5a9235d1 100644 --- a/libc/private/ScopeGuard.h +++ b/libc/private/ScopeGuard.h @@ -14,8 +14,10 @@ * limitations under the License. */ -#ifndef SCOPE_GUARD_H -#define SCOPE_GUARD_H +#ifndef _SCOPE_GUARD_H +#define _SCOPE_GUARD_H + +#include "private/bionic_macros.h" // TODO: include explicit std::move when it becomes available template @@ -40,14 +42,12 @@ class ScopeGuard { F f_; bool active_; - ScopeGuard() = delete; - ScopeGuard(const ScopeGuard&) = delete; - ScopeGuard& operator=(const ScopeGuard&) = delete; + DISALLOW_IMPLICIT_CONSTRUCTORS(ScopeGuard); }; template -ScopeGuard create_scope_guard(T f) { +ScopeGuard make_scope_guard(T f) { return ScopeGuard(f); } -#endif // SCOPE_GUARD_H +#endif // _SCOPE_GUARD_H diff --git a/libc/private/bionic_macros.h b/libc/private/bionic_macros.h index 61794bd54..491b3ace0 100644 --- a/libc/private/bionic_macros.h +++ b/libc/private/bionic_macros.h @@ -20,8 +20,8 @@ // DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions. // It goes in the private: declarations in a class. #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) + TypeName(const TypeName&) = delete; \ + void operator=(const TypeName&) = delete // A macro to disallow all the implicit constructors, namely the // default constructor, copy constructor and operator= functions. @@ -30,7 +30,7 @@ // that wants to prevent anyone from instantiating it. This is // especially useful for classes containing only static methods. #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ - TypeName(); \ + TypeName() = delete; \ DISALLOW_COPY_AND_ASSIGN(TypeName) #define BIONIC_ALIGN(value, alignment) \ diff --git a/linker/linker.cpp b/linker/linker.cpp index 793ffd51e..f436e85bd 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -955,7 +955,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam SoinfoLinkedList found_libs; size_t soinfos_size = 0; - auto failure_guard = create_scope_guard([&]() { + auto failure_guard = make_scope_guard([&]() { // Housekeeping load_tasks.for_each([] (LoadTask* t) { LoadTask::deleter(t); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index fb3bfc511..bb9d8c0b8 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -145,7 +145,7 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { // in both dt_needed libraries, the correct relocation should // use the function defined in libtest_relo_check_dt_needed_order_1.so void* handle = nullptr; - auto guard = create_scope_guard([&]() { + auto guard = make_scope_guard([&]() { dlclose(handle); }); diff --git a/tests/math_test.cpp b/tests/math_test.cpp index ad4654e53..2203db9f4 100644 --- a/tests/math_test.cpp +++ b/tests/math_test.cpp @@ -762,7 +762,7 @@ TEST(math, erfcl) { } TEST(math, lrint) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); @@ -786,7 +786,7 @@ TEST(math, lrint) { } TEST(math, rint) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); @@ -816,7 +816,7 @@ TEST(math, rint) { } TEST(math, nearbyint) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // nearbyint/nearbyintf/nearbyintl obey the rounding mode. @@ -845,7 +845,7 @@ TEST(math, nearbyint) { } TEST(math, lround) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // lround ignores the rounding mode. @@ -855,7 +855,7 @@ TEST(math, lround) { } TEST(math, llround) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // llround ignores the rounding mode. @@ -952,7 +952,7 @@ TEST(math, fdiml) { } TEST(math, round) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_TOWARDZERO); // round ignores the rounding mode and always rounds away from zero. @@ -965,7 +965,7 @@ TEST(math, round) { } TEST(math, roundf) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_TOWARDZERO); // roundf ignores the rounding mode and always rounds away from zero. @@ -978,7 +978,7 @@ TEST(math, roundf) { } TEST(math, roundl) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_TOWARDZERO); // roundl ignores the rounding mode and always rounds away from zero. @@ -991,7 +991,7 @@ TEST(math, roundl) { } TEST(math, trunc) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // trunc ignores the rounding mode and always rounds toward zero. @@ -1004,7 +1004,7 @@ TEST(math, trunc) { } TEST(math, truncf) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // truncf ignores the rounding mode and always rounds toward zero. @@ -1017,7 +1017,7 @@ TEST(math, truncf) { } TEST(math, truncl) { - auto guard = create_scope_guard([]() { + auto guard = make_scope_guard([]() { fesetenv(FE_DFL_ENV); }); fesetround(FE_UPWARD); // truncl ignores the rounding mode and always rounds toward zero. diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index 4a7c6bd88..32bb54c5d 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -869,7 +869,7 @@ TEST(pthread, pthread_attr_getstack__main_thread) { #endif EXPECT_EQ(rl.rlim_cur, stack_size); - auto guard = create_scope_guard([&rl, original_rlim_cur]() { + auto guard = make_scope_guard([&rl, original_rlim_cur]() { rl.rlim_cur = original_rlim_cur; ASSERT_EQ(0, setrlimit(RLIMIT_STACK, &rl)); }); From f4cb6313645ef65cc0eea0a439e51b6788cd3439 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 11 Sep 2014 15:16:03 -0700 Subject: [PATCH 024/194] Add IFUNC support for arm64 and IRELATIVE reloc There are number of changes in the way IFUNC related relocations are done: 1. IRELATIVE relocations are now supported for x86/x86_64 and arm64. 2. IFUNC relocations are now relying on static linker to generate them in correct order - this removes necessety of additional relocation pass for ifuncs. 3. Related to 2: rela?.dyn relocations are preformed before .plt ones. 4. Ifunc are resolved on symbol lookup this approach allowed to avoid mprotect(PROT_WRITE) call on r-x program segments. Bug: 17399706 Bug: 17177284 (cherry picked from commit 9aea164457c269c475592da36b4655d45f55c7bc) Change-Id: Ie19d900fc203beb93faf8943b0d06d534a6de4ad --- libc/arch-arm64/include/machine/elf_machdep.h | 1 + libc/arch-x86/include/machine/elf_machdep.h | 1 + .../arch-x86_64/include/machine/elf_machdep.h | 2 + linker/dlfcn.cpp | 4 +- linker/linker.cpp | 174 ++++++------------ linker/linker.h | 8 +- tests/Android.build.mk | 4 + tests/dlfcn_test.cpp | 14 +- tests/libs/Android.mk | 10 +- tests/libs/dlopen_testlib_ifunc.c | 11 +- 10 files changed, 95 insertions(+), 134 deletions(-) diff --git a/libc/arch-arm64/include/machine/elf_machdep.h b/libc/arch-arm64/include/machine/elf_machdep.h index 2bf818920..6eab31327 100644 --- a/libc/arch-arm64/include/machine/elf_machdep.h +++ b/libc/arch-arm64/include/machine/elf_machdep.h @@ -99,6 +99,7 @@ #define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ #define R_AARCH64_TLS_TPREL64 1030 #define R_AARCH64_TLS_DTPREL32 1031 +#define R_AARCH64_IRELATIVE 1032 #define R_TYPE(name) __CONCAT(R_AARCH64_,name) diff --git a/libc/arch-x86/include/machine/elf_machdep.h b/libc/arch-x86/include/machine/elf_machdep.h index 442c561a9..4bce933b8 100644 --- a/libc/arch-x86/include/machine/elf_machdep.h +++ b/libc/arch-x86/include/machine/elf_machdep.h @@ -59,5 +59,6 @@ #define R_386_TLS_GOTDESC 39 #define R_386_TLS_DESC_CALL 40 #define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 #define R_TYPE(name) __CONCAT(R_386_,name) diff --git a/libc/arch-x86_64/include/machine/elf_machdep.h b/libc/arch-x86_64/include/machine/elf_machdep.h index 20f8c6d96..bf1f2739e 100644 --- a/libc/arch-x86_64/include/machine/elf_machdep.h +++ b/libc/arch-x86_64/include/machine/elf_machdep.h @@ -46,6 +46,8 @@ #define R_X86_64_GOTTPOFF 22 #define R_X86_64_TPOFF32 23 +#define R_X86_64_IRELATIVE 37 + #define R_TYPE(name) __CONCAT(R_X86_64_,name) #else /* !__i386__ */ diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 3024b3c29..9801fa172 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -118,7 +118,7 @@ void* dlsym(void* handle, const char* symbol) { unsigned bind = ELF_ST_BIND(sym->st_info); if ((bind == STB_GLOBAL || bind == STB_WEAK) && sym->st_shndx != 0) { - return reinterpret_cast(sym->st_value + found->load_bias); + return reinterpret_cast(found->resolve_symbol_address(sym)); } __bionic_format_dlerror("symbol found but not global", symbol); @@ -148,7 +148,7 @@ int dladdr(const void* addr, Dl_info* info) { ElfW(Sym)* sym = dladdr_find_symbol(si, addr); if (sym != nullptr) { info->dli_sname = si->strtab + sym->st_name; - info->dli_saddr = reinterpret_cast(si->load_bias + sym->st_value); + info->dli_saddr = reinterpret_cast(si->resolve_symbol_address(sym)); } return 1; diff --git a/linker/linker.cpp b/linker/linker.cpp index f436e85bd..1b4fb6201 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -470,32 +470,6 @@ soinfo::soinfo(const char* name, const struct stat* file_stat) { } } -void soinfo::resolve_ifunc_symbols() { - if (!get_has_ifuncs()) { - return; - } - - phdr_table_unprotect_segments(phdr, phnum, load_bias); - - TRACE_TYPE(IFUNC, "CHECKING FOR IFUNCS AND PERFORMING SYMBOL UPDATES"); - - for (size_t i = 0; i < nchain; ++i) { - ElfW(Sym)* s = &symtab[i]; - if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { - // The address of the ifunc in the symbol table is the address of the - // function that chooses the function to which the ifunc will refer. - // In order to return the proper value, we run the choosing function - // in the linker and then return its result (minus the base offset). - TRACE_TYPE(IFUNC, "FOUND IFUNC"); - ElfW(Addr) (*ifunc_ptr)(); - ifunc_ptr = reinterpret_cast(s->st_value + base); - s->st_value = (ifunc_ptr() - base); - TRACE_TYPE(IFUNC, "NEW VALUE IS %p", (void*)s->st_value); - } - } - phdr_table_protect_segments(phdr, phnum, load_bias); -} - static unsigned elfhash(const char* _name) { const unsigned char* name = reinterpret_cast(_name); unsigned h = 0, g; @@ -1111,52 +1085,14 @@ void do_dlclose(soinfo* si) { protect_data(PROT_READ); } -// ifuncs are only defined for x86 -#if defined(__i386__) -static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rel)* rel, unsigned count) { - for (size_t idx = 0; idx < count; ++idx, ++rel) { - ElfW(Sym)* s; - soinfo* lsi; - unsigned type = ELFW(R_TYPE)(rel->r_info); - unsigned sym = ELFW(R_SYM)(rel->r_info); - ElfW(Addr) reloc = static_cast(rel->r_offset + si->load_bias); - ElfW(Addr) sym_addr = 0; - const char* sym_name = nullptr; - sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi); +static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { + typedef ElfW(Addr) (*ifunc_resolver_t)(void); + ifunc_resolver_t ifunc_resolver = reinterpret_cast(resolver_addr); + ElfW(Addr) ifunc_addr = ifunc_resolver(); + TRACE_TYPE(RELO, "Called ifunc_resolver@%p. The result is %p", ifunc_resolver, reinterpret_cast(ifunc_addr)); - if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_386_JMP_SLOT) { - TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr)); - ElfW(Addr) (*ifunc_ptr)(); - ifunc_ptr = reinterpret_cast(s->st_value + si->base); - *reinterpret_cast(reloc) = ifunc_ptr(); - } - } + return ifunc_addr; } -#endif - -#if defined(__x86_64__) -static void soinfo_ifunc_relocate(soinfo* si, ElfW(Rela)* rela, unsigned count) { - for (size_t idx = 0; idx < count; ++idx, ++rela) { - ElfW(Sym)* s; - soinfo* lsi; - unsigned type = ELFW(R_TYPE)(rela->r_info); - unsigned sym = ELFW(R_SYM)(rela->r_info); - ElfW(Addr) reloc = static_cast(rela->r_offset + si->load_bias); - ElfW(Addr) sym_addr = 0; - const char* sym_name = nullptr; - sym_name = reinterpret_cast(si->strtab + si->symtab[sym].st_name); - s = soinfo_do_lookup(si, sym_name, &lsi); - - if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC && type == R_X86_64_JUMP_SLOT) { - TRACE("IFUNC RELOCATION, PASS 2: %p", (void*)(sym_addr + rela->r_addend)); - ElfW(Addr) (*ifunc_ptr)(); - ifunc_ptr = reinterpret_cast(s->st_value + si->base); - *reinterpret_cast(reloc) = ifunc_ptr(); - } - } -} -#endif #if defined(USE_RELA) int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { @@ -1206,6 +1142,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { case R_AARCH64_ABS32: case R_AARCH64_ABS16: case R_AARCH64_RELATIVE: + case R_AARCH64_IRELATIVE: /* * The sym_addr was initialized to be zero above, or the relocation * code below does not care about value of sym_addr. @@ -1218,6 +1155,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { case R_X86_64_32: case R_X86_64_64: case R_X86_64_RELATIVE: + case R_X86_64_IRELATIVE: // No need to do anything. break; case R_X86_64_PC32: @@ -1230,7 +1168,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { } } else { // We got a definition. - sym_addr = static_cast(s->st_value + lsi->load_bias); + sym_addr = lsi->resolve_symbol_address(s); } count_relocation(kRelocSymbol); } @@ -1342,6 +1280,13 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { *reinterpret_cast(reloc) = (base + rela->r_addend); break; + case R_AARCH64_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); + break; + case R_AARCH64_COPY: /* * ET_EXEC is not supported so this should not happen. @@ -1368,11 +1313,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %08zx <- %08zx %s", static_cast(reloc), static_cast(sym_addr + rela->r_addend), sym_name); - if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { - set_has_ifuncs(true); - } else { - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; - } + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; break; case R_X86_64_GLOB_DAT: count_relocation(kRelocAbsolute); @@ -1392,6 +1333,12 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { static_cast(base)); *reinterpret_cast(reloc) = base + rela->r_addend; break; + case R_X86_64_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); + break; case R_X86_64_32: count_relocation(kRelocRelative); MARK(rela->r_offset); @@ -1481,6 +1428,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { case R_386_GLOB_DAT: case R_386_32: case R_386_RELATIVE: /* Don't care. */ + case R_386_IRELATIVE: // sym_addr was initialized to be zero above or relocation // code below does not care about value of sym_addr. // No need to do anything. @@ -1500,7 +1448,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { } } else { // We got a definition. - sym_addr = static_cast(s->st_value + lsi->load_bias); + sym_addr = lsi->resolve_symbol_address(s); } count_relocation(kRelocSymbol); } @@ -1549,11 +1497,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { count_relocation(kRelocAbsolute); MARK(rel->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); - if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { - set_has_ifuncs(true); - } else { - *reinterpret_cast(reloc) = sym_addr; - } + *reinterpret_cast(reloc) = sym_addr; break; case R_386_GLOB_DAT: count_relocation(kRelocAbsolute); @@ -1614,6 +1558,14 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { reinterpret_cast(reloc), reinterpret_cast(base)); *reinterpret_cast(reloc) += base; break; +#if defined(__i386__) + case R_386_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %p <- %p", reinterpret_cast(reloc), reinterpret_cast(base)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + *reinterpret_cast(reloc)); + break; +#endif default: DL_ERR("unknown reloc type %d @ %p (%zu)", type, rel, idx); @@ -1671,7 +1623,7 @@ static bool mips_relocate_got(soinfo* si) { // FIXME: is this sufficient? // For reference see NetBSD link loader // http://cvsweb.netbsd.org/bsdweb.cgi/src/libexec/ld.elf_so/arch/mips/mips_reloc.c?rev=1.53&content-type=text/x-cvsweb-markup - *got = reinterpret_cast(lsi->load_bias + s->st_value); + *got = reinterpret_cast(lsi->resolve_symbol_address(s)); } } return true; @@ -1749,8 +1701,6 @@ void soinfo::CallConstructors() { // DT_INIT should be called before DT_INIT_ARRAY if both are present. CallFunction("DT_INIT", init_func); CallArray("DT_INIT_ARRAY", init_array, init_array_count, false); - - resolve_ifunc_symbols(); } void soinfo::CallDestructors() { @@ -1812,12 +1762,6 @@ void soinfo::set_st_ino(ino_t ino) { } } -void soinfo::set_has_ifuncs(bool ifuncs) { - if (has_min_version(1)) { - has_ifuncs = ifuncs; - } -} - dev_t soinfo::get_st_dev() { if (has_min_version(0)) { return st_dev; @@ -1834,14 +1778,6 @@ ino_t soinfo::get_st_ino() { return 0; } -bool soinfo::get_has_ifuncs() { - if (has_min_version(1)) { - return has_ifuncs; - } - - return false; -} - // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1862,6 +1798,14 @@ soinfo::soinfo_list_t& soinfo::get_parents() { return this->parents; } +ElfW(Addr) soinfo::resolve_symbol_address(ElfW(Sym)* s) { + if (ELF_ST_TYPE(s->st_info) == STT_GNU_IFUNC) { + return call_ifunc_resolver(s->st_value + load_bias); + } + + return static_cast(s->st_value + load_bias); +} + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2168,44 +2112,32 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #endif #if defined(USE_RELA) - if (plt_rela != nullptr) { - DEBUG("[ relocating %s plt ]\n", name); - if (Relocate(plt_rela, plt_rela_count)) { - return false; - } - } if (rela != nullptr) { - DEBUG("[ relocating %s ]\n", name); + DEBUG("[ relocating %s ]", name); if (Relocate(rela, rela_count)) { return false; } } -#else - if (plt_rel != nullptr) { + if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count)) { + if (Relocate(plt_rela, plt_rela_count)) { return false; } } +#else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); if (Relocate(rel, rel_count)) { return false; } } -#endif - - // if there are ifuncs, we need to do an additional relocation pass. - // they cannot be resolved until the rest of the relocations are done - // because we need to call the resolution function which may be waiting - // on relocations. - if(get_has_ifuncs()) { -#if defined(__i386__) - soinfo_ifunc_relocate(this, plt_rel, plt_rel_count); -#elif defined(__x86_64__) - soinfo_ifunc_relocate(this, plt_rela, plt_rela_count); -#endif + if (plt_rel != nullptr) { + DEBUG("[ relocating %s plt ]", name); + if (Relocate(plt_rel, plt_rel_count)) { + return false; + } } +#endif #if defined(__mips__) if (!mips_relocate_got(this)) { diff --git a/linker/linker.h b/linker/linker.h index 3024d3ab2..37d513ea7 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -197,6 +197,8 @@ struct soinfo { #if !defined(__LP64__) bool has_text_relocations; #endif + // TODO: remove this flag, dynamic linker + // should not use it in any way. bool has_DT_SYMBOLIC; soinfo(const char* name, const struct stat* file_stat); @@ -212,21 +214,20 @@ struct soinfo { void set_st_dev(dev_t st_dev); void set_st_ino(ino_t st_ino); - void set_has_ifuncs(bool ifunc); ino_t get_st_ino(); dev_t get_st_dev(); - bool get_has_ifuncs(); soinfo_list_t& get_children(); soinfo_list_t& get_parents(); + ElfW(Addr) resolve_symbol_address(ElfW(Sym)* s); + bool inline has_min_version(uint32_t min_version) { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; } private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); - void resolve_ifunc_symbols(); #if defined(USE_RELA) int Relocate(ElfW(Rela)* rela, unsigned count); #else @@ -247,7 +248,6 @@ struct soinfo { soinfo_list_t parents; // version >= 1 - bool has_ifuncs; }; extern soinfo* get_libdl_info(); diff --git a/tests/Android.build.mk b/tests/Android.build.mk index d4b03960d..d54c851b2 100644 --- a/tests/Android.build.mk +++ b/tests/Android.build.mk @@ -37,6 +37,10 @@ LOCAL_CLANG := $($(module)_clang_$(build_type)) LOCAL_FORCE_STATIC_EXECUTABLE := $($(module)_force_static_executable) +ifneq ($($(module)_multilib),) + LOCAL_MULTILIB := $($(module)_multilib) +endif + LOCAL_CFLAGS := \ $(common_cflags) \ $($(module)_cflags) \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index bb9d8c0b8..ea02c1a83 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -89,8 +89,8 @@ TEST(dlfcn, dlopen_noload) { ASSERT_EQ(0, dlclose(handle2)); } -// ifuncs are only supported on intel for now -#if defined(__i386__) || defined(__x86_64__) +// ifuncs are only supported on intel and arm64 for now +#if defined (__aarch64__) || defined(__i386__) || defined(__x86_64__) TEST(dlfcn, ifunc) { typedef const char* (*fn_ptr)(); @@ -124,9 +124,13 @@ TEST(dlfcn, ifunc_ctor_call) { typedef const char* (*fn_ptr)(); void* handle = dlopen("libtest_ifunc.so", RTLD_NOW); - ASSERT_TRUE(handle != NULL) << dlerror(); - fn_ptr is_ctor_called = reinterpret_cast(dlsym(handle, "is_ctor_called")); - ASSERT_TRUE(is_ctor_called != NULL) << dlerror(); + ASSERT_TRUE(handle != nullptr) << dlerror(); + fn_ptr is_ctor_called = reinterpret_cast(dlsym(handle, "is_ctor_called_irelative")); + ASSERT_TRUE(is_ctor_called != nullptr) << dlerror(); + ASSERT_STREQ("false", is_ctor_called()); + + is_ctor_called = reinterpret_cast(dlsym(handle, "is_ctor_called_jump_slot")); + ASSERT_TRUE(is_ctor_called != nullptr) << dlerror(); ASSERT_STREQ("true", is_ctor_called()); dlclose(handle); } diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 21681eec9..1004b74e9 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -294,7 +294,7 @@ include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- # Library used by ifunc tests # ----------------------------------------------------------------------------- -ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) libtest_ifunc_src_files := \ dlopen_testlib_ifunc.c @@ -302,6 +302,14 @@ ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) module := libtest_ifunc build_type := target build_target := SHARED_LIBRARY + + ifeq ($(TARGET_ARCH),arm64) + libtest_ifunc_multilib := 64 + # TODO: This is a workaround - remove it once gcc + # removes its Android ifunc checks + libtest_ifunc_cflags := -mglibc + endif + include $(TEST_PATH)/Android.build.mk endif diff --git a/tests/libs/dlopen_testlib_ifunc.c b/tests/libs/dlopen_testlib_ifunc.c index 48748417d..b68a3dd0f 100644 --- a/tests/libs/dlopen_testlib_ifunc.c +++ b/tests/libs/dlopen_testlib_ifunc.c @@ -23,8 +23,17 @@ static void __attribute__((constructor)) init_flag() { g_flag = 1; } +static const char* is_ctor_called() __attribute__ ((ifunc("is_ctor_called_ifun"))); + const char* foo() __attribute__ ((ifunc ("foo_ifunc"))); -const char* is_ctor_called() __attribute__ ((ifunc("is_ctor_called_ifun"))); + +// Static linker creates GLOBAL/IFUNC symbol and JUMP_SLOT relocation type for plt segment +const char* is_ctor_called_jump_slot() __attribute__ ((ifunc("is_ctor_called_ifun"))); + +const char* is_ctor_called_irelative() { + // Call internal ifunc-resolved function with IRELATIVE reloc + return is_ctor_called(); +} const char* return_true() { return "true"; From 7d971ec14b80cac442aeea8d88e9eb2e3ab6f214 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 9 Sep 2014 10:21:42 -0700 Subject: [PATCH 025/194] Fix unload of recursively linked library Expanded test for recursive libs. Fixed bug with unnecessary soinfo_free of already loaded library. (cherry picked from commit a6ac54a215d6b64f5cc5a59b66c1dbfbb41ea9f5) Change-Id: I6907c723d9fbdf6b2777f3f236b1e29b0843edd6 --- linker/linker.cpp | 2 +- tests/dlfcn_test.cpp | 13 ++++++++++++- tests/libs/Android.mk | 10 +++++----- tests/libs/dlopen_testlib_invalid.cpp | 24 ++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 tests/libs/dlopen_testlib_invalid.cpp diff --git a/linker/linker.cpp b/linker/linker.cpp index 1b4fb6201..acbb1b091 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -843,6 +843,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl } if ((dlflags & RTLD_NOLOAD) != 0) { + DL_ERR("library \"%s\" wasn't loaded and RTLD_NOLOAD prevented it", name); return nullptr; } @@ -950,7 +951,6 @@ static bool find_libraries(const char* const library_names[], size_t library_nam soinfo* needed_by = task->get_needed_by(); if (is_recursive(si, needed_by)) { - soinfo_free(si); return false; } diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index ea02c1a83..756f2ff9d 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -207,8 +207,19 @@ TEST(dlfcn, dlopen_check_order) { // libtest_with_dependency_loop_a.so TEST(dlfcn, dlopen_check_loop) { void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); - ASSERT_TRUE(handle == NULL); + ASSERT_TRUE(handle == nullptr); ASSERT_STREQ("dlopen failed: recursive link to \"libtest_with_dependency_loop_a.so\"", dlerror()); + // This symbol should never be exposed + void* f = dlsym(RTLD_DEFAULT, "dlopen_test_invalid_function"); + ASSERT_TRUE(f == nullptr); + ASSERT_SUBSTR("undefined symbol: dlopen_test_invalid_function", dlerror()); + + // dlopen second time to make sure that the library wasn't loaded even though dlopen returned null. + // This may happen if during cleanup the root library or one of the depended libs were not removed + // from soinfo list. + handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); + ASSERT_STREQ("dlopen failed: library \"libtest_with_dependency_loop.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); } TEST(dlfcn, dlopen_failure) { diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 1004b74e9..548dce3ed 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -195,7 +195,7 @@ include $(TEST_PATH)/Android.build.mk # # libtest_with_dependency_loop -> a -> b -> c -> a # ----------------------------------------------------------------------------- -libtest_with_dependency_loop_src_files := empty.cpp +libtest_with_dependency_loop_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_shared_libraries := \ libtest_with_dependency_loop_a @@ -208,7 +208,7 @@ include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_a.so # ----------------------------------------------------------------------------- -libtest_with_dependency_loop_a_src_files := empty.cpp +libtest_with_dependency_loop_a_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_a_shared_libraries := \ libtest_with_dependency_loop_b_tmp @@ -223,7 +223,7 @@ include $(TEST_PATH)/Android.build.mk # # this is temporary placeholder - will be removed # ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_tmp_src_files := empty.cpp +libtest_with_dependency_loop_b_tmp_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so module := libtest_with_dependency_loop_b_tmp @@ -234,7 +234,7 @@ include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_b.so # ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_src_files := empty.cpp +libtest_with_dependency_loop_b_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c module := libtest_with_dependency_loop_b @@ -245,7 +245,7 @@ include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_c.so # ----------------------------------------------------------------------------- -libtest_with_dependency_loop_c_src_files := empty.cpp +libtest_with_dependency_loop_c_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_c_shared_libraries := \ libtest_with_dependency_loop_a diff --git a/tests/libs/dlopen_testlib_invalid.cpp b/tests/libs/dlopen_testlib_invalid.cpp new file mode 100644 index 000000000..f2039c646 --- /dev/null +++ b/tests/libs/dlopen_testlib_invalid.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +// This file is used for libraries that are not supposed to +// be successfully loaded/linked - therefore, this function should +// not be visible via dlsym - (we are going to use this fact in tests) +extern "C" int dlopen_test_invalid_function() { + abort(); +} From 1cd0c6777f35b531c9ce78397d0915aa521b3e87 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Wed, 1 Oct 2014 16:26:49 -0700 Subject: [PATCH 026/194] L-MR1 specific fixes Reset soinfo version to 0. Disable ifunc test for arm64 because of old toolchain in lmp-mr1-dev branch Note: this commit should be reverted in -plus-aosp branch. Change-Id: I2d6d996d43bc35d5d4975c745779f43a988b31e6 --- linker/linker.h | 2 +- tests/dlfcn_test.cpp | 2 +- tests/libs/Android.mk | 9 +-------- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/linker/linker.h b/linker/linker.h index 37d513ea7..3abab294f 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -89,7 +89,7 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format -#define SOINFO_VERSION 1 +#define SOINFO_VERSION 0 #define SOINFO_NAME_LEN 128 diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 756f2ff9d..9c9fbdd12 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -90,7 +90,7 @@ TEST(dlfcn, dlopen_noload) { } // ifuncs are only supported on intel and arm64 for now -#if defined (__aarch64__) || defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(__x86_64__) TEST(dlfcn, ifunc) { typedef const char* (*fn_ptr)(); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 548dce3ed..b3554881e 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -294,7 +294,7 @@ include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- # Library used by ifunc tests # ----------------------------------------------------------------------------- -ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) libtest_ifunc_src_files := \ dlopen_testlib_ifunc.c @@ -303,13 +303,6 @@ ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) build_type := target build_target := SHARED_LIBRARY - ifeq ($(TARGET_ARCH),arm64) - libtest_ifunc_multilib := 64 - # TODO: This is a workaround - remove it once gcc - # removes its Android ifunc checks - libtest_ifunc_cflags := -mglibc - endif - include $(TEST_PATH)/Android.build.mk endif From 145372b1bced73595d51405bcbda73cd092e2425 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 2 Oct 2014 12:49:42 -0700 Subject: [PATCH 027/194] Revert "L-MR1 specific fixes" This reverts commit 1cd0c6777f35b531c9ce78397d0915aa521b3e87. --- linker/linker.h | 2 +- tests/dlfcn_test.cpp | 2 +- tests/libs/Android.mk | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/linker/linker.h b/linker/linker.h index b985a9991..8afeb144d 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -89,7 +89,7 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format -#define SOINFO_VERSION 0 +#define SOINFO_VERSION 1 #define SOINFO_NAME_LEN 128 diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index b54d13ae2..1bf186b4b 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -90,7 +90,7 @@ TEST(dlfcn, dlopen_noload) { } // ifuncs are only supported on intel and arm64 for now -#if defined(__i386__) || defined(__x86_64__) +#if defined (__aarch64__) || defined(__i386__) || defined(__x86_64__) TEST(dlfcn, ifunc) { typedef const char* (*fn_ptr)(); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index cac314021..53cd0c693 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -470,7 +470,7 @@ endif # ----------------------------------------------------------------------------- # Library used by ifunc tests # ----------------------------------------------------------------------------- -ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) libtest_ifunc_src_files := \ dlopen_testlib_ifunc.c @@ -479,6 +479,13 @@ ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) build_type := target build_target := SHARED_LIBRARY + ifeq ($(TARGET_ARCH),arm64) + libtest_ifunc_multilib := 64 + # TODO: This is a workaround - remove it once gcc + # removes its Android ifunc checks + libtest_ifunc_cflags := -mglibc + endif + include $(TEST_PATH)/Android.build.mk endif From 2cd77d301ff6860836428cda2ccd626b3bb6912e Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 2 Oct 2014 13:08:39 -0700 Subject: [PATCH 028/194] Undo the bad work of Automerger Change-Id: I585388aebc556a094db4c22e647edacea7cde129 --- tests/libs/Android.mk | 199 ------------------------------------------ 1 file changed, 199 deletions(-) diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 53cd0c693..bc5f1086d 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -254,183 +254,6 @@ include $(LOCAL_PATH)/Android.build.testlib.mk module := libtest_relo_check_dt_needed_order_2 include $(LOCAL_PATH)/Android.build.testlib.mk -# ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct load order: -# libtest_check_order_2_right.so -# ----------------------------------------------------------------------------- -libtest_check_order_2_right_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_2_right_cflags := -D__ANSWER=42 -module := libtest_check_order_2_right -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_a.so -# ----------------------------------------------------------------------------- -libtest_check_order_a_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_a_cflags := -D__ANSWER=1 -module := libtest_check_order_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_b.so -# ----------------------------------------------------------------------------- -libtest_check_order_b_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 -module := libtest_check_order_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_c.so -# ----------------------------------------------------------------------------- -libtest_check_order_3_c_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_3_c_cflags := -D__ANSWER=3 -module := libtest_check_order_3_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_d.so -# ----------------------------------------------------------------------------- -libtest_check_order_d_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_d_shared_libraries := libtest_check_order_b -libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 -module := libtest_check_order_d -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_left.so -# ----------------------------------------------------------------------------- -libtest_check_order_1_left_src_files := \ - empty.cpp - -libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b - -module := libtest_check_order_1_left -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order.so -# ----------------------------------------------------------------------------- -libtest_check_order_src_files := \ - empty.cpp - -libtest_check_order_shared_libraries := libtest_check_order_1_left \ - libtest_check_order_2_right libtest_check_order_3_c - -module := libtest_check_order -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# Library with dependency loop used by dlfcn tests -# -# libtest_with_dependency_loop -> a -> b -> c -> a -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_src_files := dlopen_testlib_invalid.cpp - -libtest_with_dependency_loop_shared_libraries := \ - libtest_with_dependency_loop_a - -module := libtest_with_dependency_loop -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_a.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_a_src_files := dlopen_testlib_invalid.cpp - -libtest_with_dependency_loop_a_shared_libraries := \ - libtest_with_dependency_loop_b_tmp - -module := libtest_with_dependency_loop_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_b.so -# -# this is temporary placeholder - will be removed -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_tmp_src_files := dlopen_testlib_invalid.cpp -libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so - -module := libtest_with_dependency_loop_b_tmp -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_b.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_b_src_files := dlopen_testlib_invalid.cpp -libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c - -module := libtest_with_dependency_loop_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_with_dependency_loop_c.so -# ----------------------------------------------------------------------------- -libtest_with_dependency_loop_c_src_files := dlopen_testlib_invalid.cpp - -libtest_with_dependency_loop_c_shared_libraries := \ - libtest_with_dependency_loop_a - -module := libtest_with_dependency_loop_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk - -# ----------------------------------------------------------------------------- -# libtest_relo_check_dt_needed_order.so -# | -# +-> libtest_relo_check_dt_needed_order_1.so -# | -# +-> libtest_relo_check_dt_needed_order_2.so -# ----------------------------------------------------------------------------- -libtest_relo_check_dt_needed_order_shared_libraries := \ - libtest_relo_check_dt_needed_order_1 libtest_relo_check_dt_needed_order_2 - -libtest_relo_check_dt_needed_order_src_files := dlopen_testlib_relo_check_dt_needed_order.cpp -libtest_relo_check_dt_needed_order_1_src_files := dlopen_testlib_relo_check_dt_needed_order_1.cpp -libtest_relo_check_dt_needed_order_2_src_files := dlopen_testlib_relo_check_dt_needed_order_2.cpp -build_type := target -build_target := SHARED_LIBRARY - -module := libtest_relo_check_dt_needed_order -include $(TEST_PATH)/Android.build.mk -module := libtest_relo_check_dt_needed_order_1 -include $(TEST_PATH)/Android.build.mk -module := libtest_relo_check_dt_needed_order_2 -include $(TEST_PATH)/Android.build.mk - # ----------------------------------------------------------------------------- # Library with dependency used by dlfcn tests # ----------------------------------------------------------------------------- @@ -467,28 +290,6 @@ ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) include $(TEST_PATH)/Android.build.mk endif -# ----------------------------------------------------------------------------- -# Library used by ifunc tests -# ----------------------------------------------------------------------------- -ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm64 x86 x86_64)) - libtest_ifunc_src_files := \ - dlopen_testlib_ifunc.c - - LOCAL_SDK_VERSION := current - module := libtest_ifunc - build_type := target - build_target := SHARED_LIBRARY - - ifeq ($(TARGET_ARCH),arm64) - libtest_ifunc_multilib := 64 - # TODO: This is a workaround - remove it once gcc - # removes its Android ifunc checks - libtest_ifunc_cflags := -mglibc - endif - - include $(TEST_PATH)/Android.build.mk -endif - # ----------------------------------------------------------------------------- # Library used by atexit tests # ----------------------------------------------------------------------------- From bbf86e6157ab98af7468ce5eb3292b6509a3cabd Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 2 Oct 2014 13:44:20 -0700 Subject: [PATCH 029/194] Fixes to linker code after the conflict resolution Change-Id: Icd0728604a865b73e7af0e0aee38971a612935f2 --- linker/linker.cpp | 16 ---------------- linker/linker.h | 2 -- linker/linker_phdr.cpp | 16 ---------------- 3 files changed, 34 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index fda168c52..6c30e1c32 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -779,22 +779,6 @@ static void for_each_dt_needed(const soinfo* si, F action) { } } -static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { - int fd = -1; - ScopedFd file_guard(-1); - - if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { - fd = extinfo->library_fd; - } else { - // Open the file. - fd = open_library(name); - if (fd == -1) { - DL_ERR("library \"%s\" not found", name); - return nullptr; - } - } -} - static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { int fd = -1; ScopedFd file_guard(-1); diff --git a/linker/linker.h b/linker/linker.h index 8afeb144d..f6e3a48ba 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -217,8 +217,6 @@ struct soinfo { ino_t get_st_ino(); dev_t get_st_dev(); - - int get_rtld_flags(); soinfo_list_t& get_children(); diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 2d03ac354..44c8e9e70 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -718,22 +718,6 @@ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_co } return; } - - *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); - if (dynamic_count) { - *dynamic_count = (unsigned)(phdr->p_memsz / 8); - } - if (dynamic_flags) { - *dynamic_flags = phdr->p_flags; - } - return; - } - *dynamic = nullptr; - for (const ElfW(Phdr)* phdr = phdr_table, *phdr_limit = phdr + phdr_count; phdr < phdr_limit; phdr++) { - if (phdr->p_type == PT_DYNAMIC) { - *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); - return; - } } } From 04f5f4100cbabc8cf5b57ece0fd490217e1549bd Mon Sep 17 00:00:00 2001 From: Ningsheng Jian Date: Tue, 16 Sep 2014 15:22:10 +0800 Subject: [PATCH 030/194] Fix gdb could not get shared library list issue Get dynamic flags from phdr table's correct entry rather the first entry, so that the following DT_DEBUG entry can be set. Also fix the undefined reference to LoadTask::deleter issue under gcc -O0 option. Bug: 17524778 (cherry picked from commit e93be99da0614ff38cbf8b2bb0624ff1dc79b8d0) Change-Id: I347792dab25c7b19c3fc690e03d20899ce1e26e0 --- linker/linker.cpp | 10 ++++++---- linker/linker_phdr.cpp | 7 ++++++- linker/linker_phdr.h | 3 ++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index acbb1b091..1befaa6a9 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -666,6 +666,8 @@ class LoadTask { DISALLOW_IMPLICIT_CONSTRUCTORS(LoadTask); }; +LoadTask::deleter_t LoadTask::deleter; + template using linked_list_t = LinkedList>>; @@ -1868,7 +1870,9 @@ static int nullify_closed_stdio() { } bool soinfo::PrelinkImage() { - phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic); + /* Extract dynamic section */ + ElfW(Word) dynamic_flags = 0; + phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, &dynamic_flags); /* We can't log anything until the linker is relocated */ bool relocating_linker = (flags & FLAG_LINKER) != 0; @@ -1877,8 +1881,6 @@ bool soinfo::PrelinkImage() { DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); } - /* Extract dynamic section */ - ElfW(Word) dynamic_flags = phdr->p_flags; if (dynamic == nullptr) { if (!relocating_linker) { DL_ERR("missing PT_DYNAMIC in \"%s\"", name); @@ -2240,7 +2242,7 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_base); ElfW(Phdr)* phdr = reinterpret_cast(linker_base + elf_hdr->e_phoff); phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base, - &linker_soinfo_for_gdb.dynamic); + &linker_soinfo_for_gdb.dynamic, nullptr); insert_soinfo_into_debug_map(&linker_soinfo_for_gdb); } diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 436517271..44c8e9e70 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -702,15 +702,20 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, * load_bias -> load bias * Output: * dynamic -> address of table in memory (null on failure). + * dynamic_flags -> protection flags for section (unset on failure) * Return: * void */ void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, ElfW(Dyn)** dynamic) { + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic, + ElfW(Word)* dynamic_flags) { *dynamic = nullptr; for (const ElfW(Phdr)* phdr = phdr_table, *phdr_limit = phdr + phdr_count; phdr < phdr_limit; phdr++) { if (phdr->p_type == PT_DYNAMIC) { *dynamic = reinterpret_cast(load_bias + phdr->p_vaddr); + if (dynamic_flags) { + *dynamic_flags = phdr->p_flags; + } return; } } diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index d4c3ce85f..593fb5a20 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -101,6 +101,7 @@ int phdr_table_get_arm_exidx(const ElfW(Phdr)* phdr_table, size_t phdr_count, El #endif void phdr_table_get_dynamic_section(const ElfW(Phdr)* phdr_table, size_t phdr_count, - ElfW(Addr) load_bias, ElfW(Dyn)** dynamic); + ElfW(Addr) load_bias, ElfW(Dyn)** dynamic, + ElfW(Word)* dynamic_flags); #endif /* LINKER_PHDR_H */ From 7ad2147a08b000e4bb6101bd24f055552f7a41aa Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Sat, 4 Oct 2014 15:20:00 -0700 Subject: [PATCH 031/194] string.h: remove unused variable (cherry picked from commit 48be71d02b6cc4e6493d38cdd6b7779032c38901) Bug: 17784968 Change-Id: Iac7732fb4f7fe42977cb9f62472bb636e17e5232 --- libc/include/string.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libc/include/string.h b/libc/include/string.h index 8df68e38d..6384d57cd 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -98,7 +98,6 @@ __BIONIC_FORTIFY_INLINE void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) { char *d = (char *) dest; const char *s = (const char *) src; - size_t s_len = __bos0(s); size_t d_len = __bos0(d); return __builtin___memcpy_chk(dest, src, copy_amount, d_len); From db408bf421faffe6c0623ca652844edfffa3726c Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Sun, 5 Oct 2014 06:52:24 -0700 Subject: [PATCH 032/194] further cleanup memcpy fortify implementation Bug: 17784968 (cherry picked from commit b84f667e9312611536a564700daea11c12b6fcfa) Change-Id: I68fc2cc0a1ee7f0887edf3681eb83ef678de1383 --- libc/include/string.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libc/include/string.h b/libc/include/string.h index 6384d57cd..3d083710f 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -96,11 +96,7 @@ extern size_t strxfrm_l(char* __restrict, const char* __restrict, size_t, locale __BIONIC_FORTIFY_INLINE void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) { - char *d = (char *) dest; - const char *s = (const char *) src; - size_t d_len = __bos0(d); - - return __builtin___memcpy_chk(dest, src, copy_amount, d_len); + return __builtin___memcpy_chk(dest, src, copy_amount, __bos0(dest)); } __BIONIC_FORTIFY_INLINE From d87d401ab134996d1f25f5b63cefb48b5b5877c8 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 18 Aug 2014 14:45:42 -0700 Subject: [PATCH 033/194] Improve . Fix and use __RENAME (and lose ___RENAME --- two underscores should be enough for anybody). This was the point of this change, because I want to use __RENAME to support the two basename variants and the two strerror_r variants. Lose a bunch of macros that weren't being used. Lose three dead files from the DNS code. Bug: 17784968 (cherry picked from commit 2cfb4e8e2e217ef0e4140dcbf9b3da809781158c) Change-Id: I5e96146f92c0521248c78c0933bec5e9a9818222 --- libc/dns/resolv/__dn_comp.c | 38 -------------- libc/dns/resolv/__res_close.c | 33 ------------ libc/dns/resolv/__res_send.c | 37 -------------- libc/include/fcntl.h | 4 +- libc/include/stdio.h | 2 +- libc/include/string.h | 6 +-- libc/include/sys/cdefs.h | 96 +++++++++-------------------------- libc/include/sys/cdefs_elf.h | 96 +++-------------------------------- libc/include/sys/socket.h | 3 +- libc/include/sys/stat.h | 2 +- libc/include/unistd.h | 3 +- 11 files changed, 39 insertions(+), 281 deletions(-) delete mode 100644 libc/dns/resolv/__dn_comp.c delete mode 100644 libc/dns/resolv/__res_close.c delete mode 100644 libc/dns/resolv/__res_send.c diff --git a/libc/dns/resolv/__dn_comp.c b/libc/dns/resolv/__dn_comp.c deleted file mode 100644 index 93d3f1988..000000000 --- a/libc/dns/resolv/__dn_comp.c +++ /dev/null @@ -1,38 +0,0 @@ -/* $NetBSD: __dn_comp.c,v 1.4 2005/09/13 01:44:10 christos Exp $ */ - -/* - * written by matthew green, 22/04/97. - * public domain. - */ - -#include -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: __dn_comp.c,v 1.4 2005/09/13 01:44:10 christos Exp $"); -#endif /* LIBC_SCCS and not lint */ - -#if defined(__indr_reference) -__indr_reference(__dn_comp,dn_comp) -#else - -#include -#include -#ifdef ANDROID_CHANGES -#include "resolv_private.h" -#else -#include -#endif - -/* XXX THIS IS A MESS! SEE XXX */ - -#undef dn_comp -int dn_comp(const char *, u_char *, int, u_char **, u_char **); - -int -dn_comp(const char *exp_dn, u_char *comp_dn, u_char **dnptrs, - u_char **lastdnptr, int length) -{ - - return __dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr); -} - -#endif diff --git a/libc/dns/resolv/__res_close.c b/libc/dns/resolv/__res_close.c deleted file mode 100644 index 3af50b06b..000000000 --- a/libc/dns/resolv/__res_close.c +++ /dev/null @@ -1,33 +0,0 @@ -/* $NetBSD: __res_close.c,v 1.4 2005/09/13 01:44:10 christos Exp $ */ - -/* - * written by matthew green, 22/04/97. - * public domain. - */ - -#include -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: __res_close.c,v 1.4 2005/09/13 01:44:10 christos Exp $"); -#endif /* LIBC_SCCS and not lint */ - -#if defined(__indr_reference) -__indr_reference(__res_close, res_close) -#else - -#include -#include -#include "resolv_private.h" - -/* XXX THIS IS A MESS! SEE XXX */ - -#undef res_close -void res_close(void); - -void -res_close(void) -{ - - __res_close(); -} - -#endif diff --git a/libc/dns/resolv/__res_send.c b/libc/dns/resolv/__res_send.c deleted file mode 100644 index 198b05c12..000000000 --- a/libc/dns/resolv/__res_send.c +++ /dev/null @@ -1,37 +0,0 @@ -/* $NetBSD: __res_send.c,v 1.4 2005/09/13 01:44:10 christos Exp $ */ - -/* - * written by matthew green, 22/04/97. - * public domain. - */ - -#include -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: __res_send.c,v 1.4 2005/09/13 01:44:10 christos Exp $"); -#endif - -#if defined(__indr_reference) -__indr_reference(__res_send, res_send) -#else - -#include -#include -#ifdef ANDROID_CHANGES -#include "resolv_private.h" -#else -#include -#endif - -/* XXX THIS IS A MESS! SEE XXX */ - -#undef res_send -int res_send(const u_char *, int, u_char *, int); - -int -res_send(const u_char *buf, int buflen, u_char *ans, int anssiz) -{ - - return __res_send(buf, buflen, ans, anssiz); -} - -#endif diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h index 8f89afbb4..87c848163 100644 --- a/libc/include/fcntl.h +++ b/libc/include/fcntl.h @@ -84,9 +84,9 @@ extern ssize_t vmsplice(int, const struct iovec*, size_t, unsigned int); #if defined(__BIONIC_FORTIFY) extern int __open_2(const char*, int); -extern int __open_real(const char*, int, ...) __asm__(__USER_LABEL_PREFIX__ "open"); +extern int __open_real(const char*, int, ...) __RENAME(open); extern int __openat_2(int, const char*, int); -extern int __openat_real(int, const char*, int, ...) __asm__(__USER_LABEL_PREFIX__ "openat"); +extern int __openat_real(int, const char*, int, ...) __RENAME(openat); __errordecl(__creat_missing_mode, "called with O_CREAT, but missing mode"); __errordecl(__creat_too_many_args, "too many arguments"); diff --git a/libc/include/stdio.h b/libc/include/stdio.h index 43b0fbfe4..38a267771 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -412,7 +412,7 @@ int sprintf(char *dest, const char *format, ...) #endif extern char* __fgets_chk(char*, int, FILE*, size_t); -extern char* __fgets_real(char*, int, FILE*) __asm__(__USER_LABEL_PREFIX__ "fgets"); +extern char* __fgets_real(char*, int, FILE*) __RENAME(fgets); __errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer"); __errordecl(__fgets_too_small_error, "fgets called with size less than zero"); diff --git a/libc/include/string.h b/libc/include/string.h index 3d083710f..29717605a 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -175,8 +175,7 @@ void* memset(void *s, int c, size_t n) { return __builtin___memset_chk(s, c, n, __bos0(s)); } -extern size_t __strlcpy_real(char* __restrict, const char* __restrict, size_t) - __asm__(__USER_LABEL_PREFIX__ "strlcpy"); +extern size_t __strlcpy_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcpy); extern size_t __strlcpy_chk(char *, const char *, size_t, size_t); __BIONIC_FORTIFY_INLINE @@ -199,8 +198,7 @@ size_t strlcpy(char* __restrict dest, const char* __restrict src, size_t size) { return __strlcpy_chk(dest, src, size, bos); } -extern size_t __strlcat_real(char* __restrict, const char* __restrict, size_t) - __asm__(__USER_LABEL_PREFIX__ "strlcat"); +extern size_t __strlcat_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcat); extern size_t __strlcat_chk(char* __restrict, const char* __restrict, size_t, size_t); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 9a8dfdd20..c764e9bf5 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -267,20 +267,6 @@ #endif /* NO_KERNEL_RCSIDS */ #endif /* _KERNEL */ -#if !defined(_STANDALONE) && !defined(_KERNEL) -#ifdef __GNUC__ -#define __RENAME(x) ___RENAME(x) -#else -#ifdef __lint__ -#define __RENAME(x) __symbolrename(x) -#else -#error "No function renaming possible" -#endif /* __lint__ */ -#endif /* __GNUC__ */ -#else /* _STANDALONE || _KERNEL */ -#define __RENAME(x) no renaming in kernel or standalone environment -#endif - /* * A barrier to stop the optimizer from moving code or assume live * register values. This is gcc specific, the version is more or less @@ -359,60 +345,15 @@ #endif /* - * Macros for manipulating "link sets". Link sets are arrays of pointers - * to objects, which are gathered up by the linker. - * - * Object format-specific code has provided us with the following macros: - * - * __link_set_add_text(set, sym) - * Add a reference to the .text symbol `sym' to `set'. - * - * __link_set_add_rodata(set, sym) - * Add a reference to the .rodata symbol `sym' to `set'. - * - * __link_set_add_data(set, sym) - * Add a reference to the .data symbol `sym' to `set'. - * - * __link_set_add_bss(set, sym) - * Add a reference to the .bss symbol `sym' to `set'. - * - * __link_set_decl(set, ptype) - * Provide an extern declaration of the set `set', which - * contains an array of the pointer type `ptype'. This - * macro must be used by any code which wishes to reference - * the elements of a link set. - * - * __link_set_start(set) - * This points to the first slot in the link set. - * - * __link_set_end(set) - * This points to the (non-existent) slot after the last - * entry in the link set. - * - * __link_set_count(set) - * Count the number of entries in link set `set'. - * - * In addition, we provide the following macros for accessing link sets: - * - * __link_set_foreach(pvar, set) - * Iterate over the link set `set'. Because a link set is - * an array of pointers, pvar must be declared as "type **pvar", - * and the actual entry accessed as "*pvar". - * - * __link_set_entry(set, idx) - * Access the link set entry at index `idx' from set `set'. + * Some BSD source needs these macros. + * Originally they embedded the rcs versions of each source file + * in the generated binary. We strip strings during build anyway,. */ -#define __link_set_foreach(pvar, set) \ - for (pvar = __link_set_start(set); pvar < __link_set_end(set); pvar++) - -#define __link_set_entry(set, idx) (__link_set_begin(set)[idx]) - -/* - * Some of the FreeBSD sources used in Bionic need this. - * Originally, this is used to embed the rcs versions of each source file - * in the generated binary. We certainly don't want this in Bionic. - */ -#define __FBSDID(s) /* nothing */ +#define __IDSTRING(_prefix,_s) /* nothing */ +#define __COPYRIGHT(_s) /* nothing */ +#define __FBSDID(_s) /* nothing */ +#define __RCSID(_s) /* nothing */ +#define __SCCSID(_s) /* nothing */ /*- * The following definitions are an extension of the behavior originally @@ -570,11 +511,24 @@ #endif #define __bos0(s) __builtin_object_size((s), 0) -#define __BIONIC_FORTIFY_INLINE \ - extern __inline__ \ - __attribute__ ((always_inline)) \ - __attribute__ ((gnu_inline)) +#define __BIONIC_FORTIFY_INLINE extern __inline__ __always_inline __attribute__((gnu_inline)) #endif #define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1) +/* Used to tag non-static symbols that are private and never exposed by the shared library. */ +#define __LIBC_HIDDEN__ __attribute__((visibility("hidden"))) + +/* Like __LIBC_HIDDEN__, but preserves binary compatibility for LP32. */ +#ifdef __LP64__ +#define __LIBC64_HIDDEN__ __LIBC_HIDDEN__ +#else +#define __LIBC64_HIDDEN__ __LIBC_ABI_PUBLIC__ +#endif + +/* Used to tag non-static symbols that are public and exposed by the shared library. */ +#define __LIBC_ABI_PUBLIC__ __attribute__((visibility ("default"))) + +/* Used to rename functions so that the compiler emits a call to 'x' rather than the function this was applied to. */ +#define __RENAME(x) __asm__(#x) + #endif /* !_SYS_CDEFS_H_ */ diff --git a/libc/include/sys/cdefs_elf.h b/libc/include/sys/cdefs_elf.h index 4dd7dc347..6bb0a5720 100644 --- a/libc/include/sys/cdefs_elf.h +++ b/libc/include/sys/cdefs_elf.h @@ -30,27 +30,13 @@ #ifndef _SYS_CDEFS_ELF_H_ #define _SYS_CDEFS_ELF_H_ -#ifdef __LEADING_UNDERSCORE -#define _C_LABEL(x) __CONCAT(_,x) -#define _C_LABEL_STRING(x) "_"x -#else -#define _C_LABEL(x) x -#define _C_LABEL_STRING(x) x -#endif +#define __strong_alias(alias, sym) \ + __asm__(".global " #alias "\n" \ + #alias " = " #sym); -#define ___RENAME(x) __asm__(___STRING(_C_LABEL(x))) - -#define __indr_reference(sym,alias) /* nada, since we do weak refs */ - -#define __strong_alias(alias,sym) \ - __asm__(".global " _C_LABEL_STRING(#alias) "\n" \ - _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); - -#define __weak_alias(alias,sym) \ - __asm__(".weak " _C_LABEL_STRING(#alias) "\n" \ - _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); -#define __weak_extern(sym) \ - __asm__(".weak " _C_LABEL_STRING(#sym)); +#define __weak_alias(alias,sym) \ + __asm__(".weak " #alias "\n" \ + #alias " = " #sym); /* We use __warnattr instead of __warn_references. * TODO: remove this and put an empty definition in one of the upstream-* compatibility headers. @@ -58,74 +44,4 @@ #define __warn_references(sym,msg) \ /*__asm__(".section .gnu.warning." #sym "\n\t.ascii \"" msg "\"\n\t.text");*/ -#define __SECTIONSTRING(_sec, _str) \ - __asm__(".section " #_sec "\n\t.asciz \"" _str "\"\n\t.previous") - -/* Used to tag non-static symbols that are private and never exposed by the shared library. */ -#define __LIBC_HIDDEN__ __attribute__((visibility ("hidden"))) - -/* Like __LIBC_HIDDEN__, but preserves binary compatibility for LP32. */ -#ifdef __LP64__ -#define __LIBC64_HIDDEN__ __LIBC_HIDDEN__ -#else -#define __LIBC64_HIDDEN__ __LIBC_ABI_PUBLIC__ -#endif - -/* Used to tag non-static symbols that are public and exposed by the shared library. */ -#define __LIBC_ABI_PUBLIC__ __attribute__((visibility ("default"))) - -#define __IDSTRING(_n,_s) __SECTIONSTRING(.ident,_s) - -#define __RCSID(_s) __IDSTRING(rcsid,_s) -#define __SCCSID(_s) -#define __SCCSID2(_s) -#if 0 /* XXX userland __COPYRIGHTs have \ns in them */ -#define __COPYRIGHT(_s) __SECTIONSTRING(.copyright,_s) -#else -#define __COPYRIGHT(_s) \ - static const char copyright[] \ - __attribute__((__unused__,__section__(".copyright"))) = _s -#endif - -#define __KERNEL_RCSID(_n, _s) __RCSID(_s) -#define __KERNEL_SCCSID(_n, _s) -#if 0 /* XXX see above */ -#define __KERNEL_COPYRIGHT(_n, _s) __COPYRIGHT(_s) -#else -#define __KERNEL_COPYRIGHT(_n, _s) __SECTIONSTRING(.copyright, _s) -#endif - -#ifndef __lint__ -#define __link_set_make_entry(set, sym) \ - static void const * const __link_set_##set##_sym_##sym \ - __section("link_set_" #set) __used = &sym -#define __link_set_make_entry2(set, sym, n) \ - static void const * const __link_set_##set##_sym_##sym##_##n \ - __section("link_set_" #set) __used = &sym[n] -#else -#define __link_set_make_entry(set, sym) \ - extern void const * const __link_set_##set##_sym_##sym -#define __link_set_make_entry2(set, sym, n) \ - extern void const * const __link_set_##set##_sym_##sym##_##n -#endif /* __lint__ */ - -#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_bss(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_text2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_rodata2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_data2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_bss2(set, sym, n) __link_set_make_entry2(set, sym, n) - -#define __link_set_decl(set, ptype) \ - extern ptype * const __start_link_set_##set[]; \ - extern ptype * const __stop_link_set_##set[] \ - -#define __link_set_start(set) (__start_link_set_##set) -#define __link_set_end(set) (__stop_link_set_##set) - -#define __link_set_count(set) \ - (__link_set_end(set) - __link_set_start(set)) - #endif /* !_SYS_CDEFS_ELF_H_ */ diff --git a/libc/include/sys/socket.h b/libc/include/sys/socket.h index ae2f2381e..a8840ff46 100644 --- a/libc/include/sys/socket.h +++ b/libc/include/sys/socket.h @@ -294,8 +294,7 @@ __socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, s #if defined(__BIONIC_FORTIFY) __errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer"); extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*); -extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) - __asm__(__USER_LABEL_PREFIX__ "recvfrom"); +extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) __RENAME(recvfrom); __BIONIC_FORTIFY_INLINE ssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) { diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h index c0c168b2e..a6cc368cf 100644 --- a/libc/include/sys/stat.h +++ b/libc/include/sys/stat.h @@ -162,7 +162,7 @@ extern mode_t umask(mode_t); #if defined(__BIONIC_FORTIFY) extern mode_t __umask_chk(mode_t); -extern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask"); +extern mode_t __umask_real(mode_t) __RENAME(umask); __errordecl(__umask_invalid_mode, "umask called with invalid mode"); __BIONIC_FORTIFY_INLINE diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 7fbafdf27..781fc4435 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -201,8 +201,7 @@ extern int tcsetpgrp(int fd, pid_t _pid); extern ssize_t __read_chk(int, void*, size_t, size_t); __errordecl(__read_dest_size_error, "read called with size bigger than destination"); __errordecl(__read_count_toobig_error, "read called with count > SSIZE_MAX"); -extern ssize_t __read_real(int, void*, size_t) - __asm__(__USER_LABEL_PREFIX__ "read"); +extern ssize_t __read_real(int, void*, size_t) __RENAME(read); __BIONIC_FORTIFY_INLINE ssize_t read(int fd, void* buf, size_t count) { From b5e7eba6d1b97e471996fcfe7dbde7cbba7512ef Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 7 Oct 2014 16:02:11 -0700 Subject: [PATCH 034/194] Work around a bug in Immersion's libImmEmulatorJ.so. This library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL pthread_mutex_t*. This gives them (and their users) one release to fix things. Bug: 17443936 (cherry picked from commit 7d3f553f989f830976efa92ddc3c84661d4d42aa) Change-Id: Ie26bbecd3a74d61113b51c18832872499b97ee86 --- libc/bionic/pthread_mutex.cpp | 12 ++++++++++++ libc/include/pthread.h | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp index 546166166..ae2557f08 100644 --- a/libc/bionic/pthread_mutex.cpp +++ b/libc/bionic/pthread_mutex.cpp @@ -440,6 +440,12 @@ static inline __always_inline int _recursive_increment(pthread_mutex_t* mutex, i } int pthread_mutex_lock(pthread_mutex_t* mutex) { +#if !defined(__LP64__) + if (mutex == NULL) { + return EINVAL; + } +#endif + int mvalue, mtype, tid, shared; mvalue = mutex->value; @@ -516,6 +522,12 @@ int pthread_mutex_lock(pthread_mutex_t* mutex) { } int pthread_mutex_unlock(pthread_mutex_t* mutex) { +#if !defined(__LP64__) + if (mutex == NULL) { + return EINVAL; + } +#endif + int mvalue, mtype, tid, shared; mvalue = mutex->value; diff --git a/libc/include/pthread.h b/libc/include/pthread.h index 86a10051e..c32890b03 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -206,10 +206,10 @@ int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1)); int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1)); -int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1)); +int pthread_mutex_lock(pthread_mutex_t*) /* __nonnull((1)) */; int pthread_mutex_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2)); int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1)); -int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1)); +int pthread_mutex_unlock(pthread_mutex_t*) /* __nonnull((1)) */; int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2)); From ce92b41a00fb86656055eceab9648a858721c3b1 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Mon, 6 Oct 2014 14:49:00 -0700 Subject: [PATCH 035/194] cdefs.h: add artificial attribute to FORTIFY_SOURCE functions Otherwise the gcc compiler warning doesn't show up. Add -Wno-error to fortify related tests. Fortify related tests are expected to be examples of bad programs, and in many cases shouldn't compile cleanly. Rewriting them to compile cleanly isn't feasible nor desirable. Bug: 17784968 (cherry picked from commit 1aaa17802c92d99ae170245c2b2f15a6c27b133e) Change-Id: Ib6df1a3f44b55b1fff222e78395c10c51cd39817 --- libc/include/sys/cdefs.h | 7 +++++++ tests/Android.mk | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index c764e9bf5..504e4396c 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -53,6 +53,9 @@ #ifndef __has_builtin #define __has_builtin(x) 0 #endif +#ifndef __has_attribute +#define __has_attribute(x) 0 +#endif /* @@ -511,8 +514,12 @@ #endif #define __bos0(s) __builtin_object_size((s), 0) +#if __GNUC_PREREQ(4,3) || __has_attribute(__artificial__) +#define __BIONIC_FORTIFY_INLINE extern __inline__ __always_inline __attribute__((gnu_inline)) __attribute__((__artificial__)) +#else #define __BIONIC_FORTIFY_INLINE extern __inline__ __always_inline __attribute__((gnu_inline)) #endif +#endif #define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1) /* Used to tag non-static symbols that are private and never exposed by the shared library. */ diff --git a/tests/Android.mk b/tests/Android.mk index 69ff8110a..dd430490b 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -171,11 +171,10 @@ $(foreach compiler,gcc clang, \ $(foreach test,1 2, \ $(eval fortify$(test)-tests-$(compiler)_cflags := \ $(test_cflags) \ + -Wno-error \ -U_FORTIFY_SOURCE \ -D_FORTIFY_SOURCE=$(test) \ -DTEST_NAME=Fortify$(test)_$(compiler)); \ - $(eval fortify$(test)-tests-$(compiler)_cflags_host := \ - -Wno-error); \ $(eval fortify$(test)-tests-$(compiler)_src_files := \ fortify_test.cpp); \ $(eval fortify_libs += fortify$(test)-tests-$(compiler)); \ From 55ee845b8ec0861d09197b32fbb5f2d34320155d Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 7 Oct 2014 11:10:36 -0700 Subject: [PATCH 036/194] Inline helpers need to be exported unmangled. __open_2() is used by the fortify implementation of open(2) in fcntl.h, and as such needs an unmangled C name. For some reason (inlining?), this doesn't cause problems at the default optimization level, but does for -O0. The rest of these didn't cause build failures, but they look suspect and probably will, we just haven't caught them yet. (cherry-pick of 658727e111ed6dee7be5239494f0764f7b1b02f8 with conflicts in stdio.h and string.h.) Bug: 17784968 Change-Id: I7391a7a8999ee204eaf6abd14a3d5373ea419d5b --- libc/bionic/__fgets_chk.cpp | 4 ++-- libc/bionic/__recvfrom_chk.cpp | 6 +++--- libc/include/fcntl.h | 4 ++-- libc/include/stdio.h | 32 ++++++++++---------------------- libc/include/string.h | 17 +++++++---------- libc/include/sys/select.h | 3 ++- libc/include/sys/socket.h | 3 ++- libc/include/sys/stat.h | 4 ++-- libc/include/unistd.h | 3 ++- 9 files changed, 32 insertions(+), 44 deletions(-) diff --git a/libc/bionic/__fgets_chk.cpp b/libc/bionic/__fgets_chk.cpp index c09f6c531..75e4ca0f0 100644 --- a/libc/bionic/__fgets_chk.cpp +++ b/libc/bionic/__fgets_chk.cpp @@ -43,8 +43,8 @@ * This fgets check is called if _FORTIFY_SOURCE is defined and * greater than 0. */ -extern "C" char* __fgets_chk(char* dest, int supplied_size, - FILE* stream, size_t dest_len_from_compiler) { +char* __fgets_chk(char* dest, int supplied_size, FILE* stream, + size_t dest_len_from_compiler) { if (supplied_size < 0) { __fortify_chk_fail("fgets: buffer size < 0", 0); } diff --git a/libc/bionic/__recvfrom_chk.cpp b/libc/bionic/__recvfrom_chk.cpp index 48baa8e2d..9c894b078 100644 --- a/libc/bionic/__recvfrom_chk.cpp +++ b/libc/bionic/__recvfrom_chk.cpp @@ -32,9 +32,9 @@ #include #include "private/libc_logging.h" -extern "C" -ssize_t __recvfrom_chk(int socket, void* buf, size_t len, size_t buflen, unsigned int flags, - const struct sockaddr* src_addr, socklen_t* addrlen) { +ssize_t __recvfrom_chk(int socket, void* buf, size_t len, size_t buflen, + int flags, const struct sockaddr* src_addr, + socklen_t* addrlen) { if (__predict_false(len > buflen)) { __fortify_chk_fail("recvfrom: prevented write past end of buffer", 0); } diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h index 87c848163..794e62c03 100644 --- a/libc/include/fcntl.h +++ b/libc/include/fcntl.h @@ -81,8 +81,6 @@ extern ssize_t tee(int, int, size_t, unsigned int); extern int unlinkat(int, const char*, int); extern ssize_t vmsplice(int, const struct iovec*, size_t, unsigned int); -#if defined(__BIONIC_FORTIFY) - extern int __open_2(const char*, int); extern int __open_real(const char*, int, ...) __RENAME(open); extern int __openat_2(int, const char*, int); @@ -90,6 +88,8 @@ extern int __openat_real(int, const char*, int, ...) __RENAME(openat); __errordecl(__creat_missing_mode, "called with O_CREAT, but missing mode"); __errordecl(__creat_too_many_args, "too many arguments"); +#if defined(__BIONIC_FORTIFY) + #if !defined(__clang__) __BIONIC_FORTIFY_INLINE diff --git a/libc/include/stdio.h b/libc/include/stdio.h index 38a267771..a0161dec4 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -47,6 +47,8 @@ #define __need_NULL #include +__BEGIN_DECLS + #define _FSTDIO /* Define for new stdio with functions. */ typedef off_t fpos_t; /* stdio file position type */ @@ -136,9 +138,7 @@ typedef struct __sFILE { fpos_t _offset; /* current lseek offset */ } FILE; -__BEGIN_DECLS extern FILE __sF[]; -__END_DECLS #define __SLBF 0x0001 /* line buffered */ #define __SNBF 0x0002 /* unbuffered */ @@ -208,7 +208,6 @@ __END_DECLS /* * Functions defined in ANSI C standard. */ -__BEGIN_DECLS void clearerr(FILE *); int fclose(FILE *); int feof(FILE *); @@ -296,16 +295,12 @@ int vsscanf(const char * __restrict, const char * __restrict, __va_list) __scanflike(2, 0); #endif /* __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE */ -__END_DECLS - - /* * Functions defined in POSIX 1003.1. */ #if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */ -__BEGIN_DECLS FILE *fdopen(int, const char *); int fileno(FILE *); @@ -329,15 +324,12 @@ int putc_unlocked(int, FILE *); int putchar_unlocked(int); #endif /* __POSIX_VISIBLE >= 199506 */ -__END_DECLS - #endif /* __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE */ /* * Routines that are purely local. */ #if __BSD_VISIBLE -__BEGIN_DECLS int asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3); char *fgetln(FILE * __restrict, size_t * __restrict); @@ -347,25 +339,26 @@ int setlinebuf(FILE *); int vasprintf(char ** __restrict, const char * __restrict, __va_list) __printflike(2, 0); -__END_DECLS /* * Stdio function-access interface. */ -__BEGIN_DECLS FILE *funopen(const void *, int (*)(void *, char *, int), int (*)(void *, const char *, int), fpos_t (*)(void *, fpos_t, int), int (*)(void *)); -__END_DECLS + #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0) #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) #endif /* __BSD_VISIBLE */ -#if defined(__BIONIC_FORTIFY) +extern char* __fgets_chk(char*, int, FILE*, size_t); +extern char* __fgets_real(char*, int, FILE*) __RENAME(fgets); +__errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer"); +__errordecl(__fgets_too_small_error, "fgets called with size less than zero"); -__BEGIN_DECLS +#if defined(__BIONIC_FORTIFY) __BIONIC_FORTIFY_INLINE __printflike(3, 0) @@ -411,11 +404,6 @@ int sprintf(char *dest, const char *format, ...) } #endif -extern char* __fgets_chk(char*, int, FILE*, size_t); -extern char* __fgets_real(char*, int, FILE*) __RENAME(fgets); -__errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer"); -__errordecl(__fgets_too_small_error, "fgets called with size less than zero"); - #if !defined(__clang__) __BIONIC_FORTIFY_INLINE @@ -450,8 +438,8 @@ char *fgets(char* dest, int size, FILE* stream) { #endif /* !defined(__clang__) */ -__END_DECLS - #endif /* defined(__BIONIC_FORTIFY) */ +__END_DECLS + #endif /* _STDIO_H_ */ diff --git a/libc/include/string.h b/libc/include/string.h index 29717605a..f2f6dd2e6 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -92,6 +92,13 @@ extern size_t strxfrm(char* __restrict, const char* __restrict, size_t); extern int strcoll_l(const char *, const char *, locale_t) __purefunc; extern size_t strxfrm_l(char* __restrict, const char* __restrict, size_t, locale_t); +extern char* __stpncpy_chk2(char* __restrict, const char* __restrict, size_t, size_t, size_t); +extern char* __strncpy_chk2(char* __restrict, const char* __restrict, size_t, size_t, size_t); +extern size_t __strlcpy_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcpy); +extern size_t __strlcpy_chk(char *, const char *, size_t, size_t); +extern size_t __strlcat_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcat); +extern size_t __strlcat_chk(char* __restrict, const char* __restrict, size_t, size_t); + #if defined(__BIONIC_FORTIFY) __BIONIC_FORTIFY_INLINE @@ -114,8 +121,6 @@ char* strcpy(char* __restrict dest, const char* __restrict src) { return __builtin___strcpy_chk(dest, src, __bos(dest)); } -extern char* __stpncpy_chk2(char* __restrict, const char* __restrict, size_t, size_t, size_t); - __BIONIC_FORTIFY_INLINE char* stpncpy(char* __restrict dest, const char* __restrict src, size_t n) { size_t bos_dest = __bos(dest); @@ -137,8 +142,6 @@ char* stpncpy(char* __restrict dest, const char* __restrict src, size_t n) { return __stpncpy_chk2(dest, src, n, bos_dest, bos_src); } -extern char* __strncpy_chk2(char* __restrict, const char* __restrict, size_t, size_t, size_t); - __BIONIC_FORTIFY_INLINE char* strncpy(char* __restrict dest, const char* __restrict src, size_t n) { size_t bos_dest = __bos(dest); @@ -175,9 +178,6 @@ void* memset(void *s, int c, size_t n) { return __builtin___memset_chk(s, c, n, __bos0(s)); } -extern size_t __strlcpy_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcpy); -extern size_t __strlcpy_chk(char *, const char *, size_t, size_t); - __BIONIC_FORTIFY_INLINE size_t strlcpy(char* __restrict dest, const char* __restrict src, size_t size) { size_t bos = __bos(dest); @@ -198,9 +198,6 @@ size_t strlcpy(char* __restrict dest, const char* __restrict src, size_t size) { return __strlcpy_chk(dest, src, size, bos); } -extern size_t __strlcat_real(char* __restrict, const char* __restrict, size_t) __RENAME(strlcat); -extern size_t __strlcat_chk(char* __restrict, const char* __restrict, size_t, size_t); - __BIONIC_FORTIFY_INLINE size_t strlcat(char* __restrict dest, const char* __restrict src, size_t size) { diff --git a/libc/include/sys/select.h b/libc/include/sys/select.h index 4ddcb6a31..32c1206f1 100644 --- a/libc/include/sys/select.h +++ b/libc/include/sys/select.h @@ -51,10 +51,11 @@ typedef struct { #define FD_ZERO(set) (memset(set, 0, sizeof(*(fd_set*)(set)))) -#if defined(__BIONIC_FORTIFY) extern void __FD_CLR_chk(int, fd_set*, size_t); extern void __FD_SET_chk(int, fd_set*, size_t); extern int __FD_ISSET_chk(int, fd_set*, size_t); + +#if defined(__BIONIC_FORTIFY) #define FD_CLR(fd, set) __FD_CLR_chk(fd, set, __bos(set)) #define FD_SET(fd, set) __FD_SET_chk(fd, set, __bos(set)) #define FD_ISSET(fd, set) __FD_ISSET_chk(fd, set, __bos(set)) diff --git a/libc/include/sys/socket.h b/libc/include/sys/socket.h index a8840ff46..43d15865f 100644 --- a/libc/include/sys/socket.h +++ b/libc/include/sys/socket.h @@ -291,11 +291,12 @@ extern ssize_t recv(int, void*, size_t, int); __socketcall ssize_t sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t); __socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, socklen_t*); -#if defined(__BIONIC_FORTIFY) __errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer"); extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*); extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) __RENAME(recvfrom); +#if defined(__BIONIC_FORTIFY) + __BIONIC_FORTIFY_INLINE ssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) { size_t bos = __bos0(buf); diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h index a6cc368cf..9c7373ac6 100644 --- a/libc/include/sys/stat.h +++ b/libc/include/sys/stat.h @@ -159,12 +159,12 @@ extern int stat64(const char*, struct stat64*); extern int mknod(const char*, mode_t, dev_t); extern mode_t umask(mode_t); -#if defined(__BIONIC_FORTIFY) - extern mode_t __umask_chk(mode_t); extern mode_t __umask_real(mode_t) __RENAME(umask); __errordecl(__umask_invalid_mode, "umask called with invalid mode"); +#if defined(__BIONIC_FORTIFY) + __BIONIC_FORTIFY_INLINE mode_t umask(mode_t mode) { #if !defined(__clang__) diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 781fc4435..9b9adcead 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -197,12 +197,13 @@ extern int tcsetpgrp(int fd, pid_t _pid); } while (_rc == -1 && errno == EINTR); \ _rc; }) -#if defined(__BIONIC_FORTIFY) extern ssize_t __read_chk(int, void*, size_t, size_t); __errordecl(__read_dest_size_error, "read called with size bigger than destination"); __errordecl(__read_count_toobig_error, "read called with count > SSIZE_MAX"); extern ssize_t __read_real(int, void*, size_t) __RENAME(read); +#if defined(__BIONIC_FORTIFY) + __BIONIC_FORTIFY_INLINE ssize_t read(int fd, void* buf, size_t count) { size_t bos = __bos0(buf); From 2f25cf373ca7c875956a7c06483b30d381296817 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 9 Oct 2014 14:01:47 -0700 Subject: [PATCH 037/194] Fix pthread_attr_getstack under valgrind. valgrind seems to mess with the stack enough that the kernel will report "[stack:pid]" rather than "[stack]" in /proc/self/maps, so switch to the task-specific file instead to force "[stack]". (There are two conditions in the kernel code that decides which form to output.) Bug: 17897476 (cherry picked from commit 9afb2f2106a5d659854c175c574c1c31e0e205a2) Change-Id: I92c331ef6fb5868af49e75bc595710d290a95f5b --- libc/bionic/pthread_attr.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libc/bionic/pthread_attr.cpp b/libc/bionic/pthread_attr.cpp index c93970a19..c65ccc132 100644 --- a/libc/bionic/pthread_attr.cpp +++ b/libc/bionic/pthread_attr.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "private/bionic_string_utils.h" #include "private/ErrnoRestorer.h" @@ -126,8 +127,12 @@ static int __pthread_attr_getstack_main_thread(void** stack_base, size_t* stack_ stack_limit.rlim_cur = 8 * 1024 * 1024; } - // It doesn't matter which thread we are; we're just looking for "[stack]". - FILE* fp = fopen("/proc/self/maps", "re"); + // It shouldn't matter which thread we are because we're just looking for "[stack]", but + // valgrind seems to mess with the stack enough that the kernel will report "[stack:pid]" + // instead if you look in /proc/self/maps, so we need to look in /proc/pid/task/pid/maps. + char path[64]; + snprintf(path, sizeof(path), "/proc/self/task/%d/maps", getpid()); + FILE* fp = fopen(path, "re"); if (fp == NULL) { return errno; } @@ -143,7 +148,7 @@ static int __pthread_attr_getstack_main_thread(void** stack_base, size_t* stack_ } } } - __libc_fatal("No [stack] line found in /proc/self/maps!"); + __libc_fatal("No [stack] line found in \"%s\"!", path); } int pthread_attr_getstack(const pthread_attr_t* attr, void** stack_base, size_t* stack_size) { From f4ada9c9ce31c7e56146a4cb703747385bc043a5 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 10 Oct 2014 08:40:21 -0700 Subject: [PATCH 038/194] Return total footprint, not high water mark. The mallinfo usmblks value returned by dlmalloc is a little misleading. It's not the current max, it's the historical high water mark. This leads to dumpsys meminfo producing native memory numbers that don't add up. Change this to the real total footprint, not this high water mark. Bug: 17265653 Change-Id: Id0293a1b50c9b0be8795405049f537a51ab0e8b7 --- libc/upstream-dlmalloc/malloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libc/upstream-dlmalloc/malloc.c b/libc/upstream-dlmalloc/malloc.c index 4362f49ff..3c9d36bf4 100644 --- a/libc/upstream-dlmalloc/malloc.c +++ b/libc/upstream-dlmalloc/malloc.c @@ -3526,7 +3526,9 @@ static struct mallinfo internal_mallinfo(mstate m) { nm.arena = sum; nm.ordblks = nfree; nm.hblkhd = m->footprint - sum; - nm.usmblks = m->max_footprint; + /* BEGIN android-changed: usmblks set to footprint from max_footprint */ + nm.usmblks = m->footprint; + /* END android-changed */ nm.uordblks = m->footprint - mfree; nm.fordblks = mfree; nm.keepcost = m->topsize; From c712ceeec4c15da8488c5ce143fcc6b0a02d74f3 Mon Sep 17 00:00:00 2001 From: Hans Boehm Date: Tue, 30 Sep 2014 18:31:04 -0700 Subject: [PATCH 039/194] Make memory_order_acquire visible in global namespace We were missing that using directive when including . Bug:17736764 Change-Id: Ie8ca92a952749415567bcd5fa21d56629a364660 (cherry picked from commit 76ac4d0853c3bba0c65edc98a9cdf932c452e252) --- libc/include/stdatomic.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libc/include/stdatomic.h b/libc/include/stdatomic.h index 3db25a78e..bcea85924 100644 --- a/libc/include/stdatomic.h +++ b/libc/include/stdatomic.h @@ -89,6 +89,7 @@ using std::atomic_signal_fence; using std::memory_order; using std::memory_order_relaxed; using std::memory_order_consume; +using std::memory_order_acquire; using std::memory_order_release; using std::memory_order_acq_rel; using std::memory_order_seq_cst; From de01780f46e4e4540c7a1ea7d0302f460c880e9d Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 3 Oct 2014 17:52:44 -0700 Subject: [PATCH 040/194] Add file_offset parameter to android_extinfo Bug: 17762003 (cherry picked from commit 07e5bc152d8a3ad4c50808bb86f3c0f2c5e2f514) Change-Id: I72d527831384ff5dde013a4c8dfe639fbec165f5 --- libc/include/android/dlext.h | 10 ++- linker/dlfcn.cpp | 2 +- linker/linker.cpp | 68 ++++++++++------- linker/linker.h | 8 +- linker/linker_phdr.cpp | 17 +++-- linker/linker_phdr.h | 3 +- tests/dlext_test.cpp | 91 ++++++++++++++++++----- tests/libs/Android.build.dlext_testzip.mk | 48 ++++++++++++ tests/libs/Android.mk | 17 +++++ 9 files changed, 206 insertions(+), 58 deletions(-) create mode 100644 tests/libs/Android.build.dlext_testzip.mk diff --git a/libc/include/android/dlext.h b/libc/include/android/dlext.h index 5c3a206a4..f81ec70d5 100644 --- a/libc/include/android/dlext.h +++ b/libc/include/android/dlext.h @@ -54,12 +54,19 @@ enum { */ ANDROID_DLEXT_USE_LIBRARY_FD = 0x10, + /* When opening library using library_fd read it starting with library_offset + * This flag is only valid when ANDROID_DLEXT_USE_LIBRARY_FD is set. + */ + + ANDROID_DLEXT_USE_LIBRARY_OFFSET = 0x20, + /* Mask of valid bits */ ANDROID_DLEXT_VALID_FLAG_BITS = ANDROID_DLEXT_RESERVED_ADDRESS | ANDROID_DLEXT_RESERVED_ADDRESS_HINT | ANDROID_DLEXT_WRITE_RELRO | ANDROID_DLEXT_USE_RELRO | - ANDROID_DLEXT_USE_LIBRARY_FD, + ANDROID_DLEXT_USE_LIBRARY_FD | + ANDROID_DLEXT_USE_LIBRARY_OFFSET, }; typedef struct { @@ -68,6 +75,7 @@ typedef struct { size_t reserved_size; int relro_fd; int library_fd; + off64_t library_offset; } android_dlextinfo; extern void* android_dlopen_ext(const char* filename, int flag, const android_dlextinfo* extinfo); diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 9801fa172..3631d2fe1 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -232,7 +232,7 @@ static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 }; static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; #endif -static soinfo __libdl_info("libdl.so", nullptr); +static soinfo __libdl_info("libdl.so", nullptr, 0); // This is used by the dynamic linker. Every process gets these symbols for free. soinfo* get_libdl_info() { diff --git a/linker/linker.cpp b/linker/linker.cpp index 1befaa6a9..d6d5f35f6 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -285,13 +285,13 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; } - soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat); + soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset); sonext->next = si; sonext = si; @@ -457,7 +457,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return nullptr; } -soinfo::soinfo(const char* name, const struct stat* file_stat) { +soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset) { memset(this, 0, sizeof(*this)); strlcpy(this->name, name, sizeof(this->name)); @@ -465,8 +465,9 @@ soinfo::soinfo(const char* name, const struct stat* file_stat) { version = SOINFO_VERSION; if (file_stat != nullptr) { - set_st_dev(file_stat->st_dev); - set_st_ino(file_stat->st_ino); + this->st_dev = file_stat->st_dev; + this->st_ino = file_stat->st_ino; + this->file_offset = file_offset; } } @@ -811,10 +812,14 @@ static void for_each_dt_needed(const soinfo* si, F action) { static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { int fd = -1; + off64_t file_offset = 0; ScopedFd file_guard(-1); if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { fd = extinfo->library_fd; + if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_OFFSET) != 0) { + file_offset = extinfo->library_offset; + } } else { // Open the file. fd = open_library(name); @@ -826,6 +831,11 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl file_guard.reset(fd); } + if ((file_offset % PAGE_SIZE) != 0) { + DL_ERR("file offset for the library %s is not page-aligned: %" PRId64, name, file_offset); + return nullptr; + } + struct stat file_stat; if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); @@ -838,7 +848,8 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl if (si->get_st_dev() != 0 && si->get_st_ino() != 0 && si->get_st_dev() == file_stat.st_dev && - si->get_st_ino() == file_stat.st_ino) { + si->get_st_ino() == file_stat.st_ino && + si->get_file_offset() == file_offset) { TRACE("library \"%s\" is already loaded under different name/path \"%s\" - will return existing soinfo", name, si->name); return si; } @@ -850,12 +861,12 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl } // Read the ELF header and load the segments. - ElfReader elf_reader(name, fd); + ElfReader elf_reader(name, fd, file_offset); if (!elf_reader.Load(extinfo)) { return nullptr; } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset); if (si == nullptr) { return nullptr; } @@ -1068,9 +1079,16 @@ soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) DL_ERR("invalid flags to dlopen: %x", flags); return nullptr; } - if (extinfo != nullptr && ((extinfo->flags & ~(ANDROID_DLEXT_VALID_FLAG_BITS)) != 0)) { - DL_ERR("invalid extended flags to android_dlopen_ext: %" PRIx64, extinfo->flags); - return nullptr; + if (extinfo != nullptr) { + if ((extinfo->flags & ~(ANDROID_DLEXT_VALID_FLAG_BITS)) != 0) { + DL_ERR("invalid extended flags to android_dlopen_ext: 0x%" PRIx64, extinfo->flags); + return nullptr; + } + if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) == 0 && + (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_OFFSET) != 0) { + DL_ERR("invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x%" PRIx64, extinfo->flags); + return nullptr; + } } protect_data(PROT_READ | PROT_WRITE); soinfo* si = find_library(name, flags, extinfo); @@ -1752,18 +1770,6 @@ void soinfo::remove_all_links() { children.clear(); } -void soinfo::set_st_dev(dev_t dev) { - if (has_min_version(0)) { - st_dev = dev; - } -} - -void soinfo::set_st_ino(ino_t ino) { - if (has_min_version(0)) { - st_ino = ino; - } -} - dev_t soinfo::get_st_dev() { if (has_min_version(0)) { return st_dev; @@ -1780,6 +1786,14 @@ ino_t soinfo::get_st_ino() { return 0; } +off64_t soinfo::get_file_offset() { + if (has_min_version(1)) { + return file_offset; + } + + return 0; +} + // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -2200,7 +2214,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { return; } - soinfo* si = soinfo_alloc("[vdso]", nullptr); + soinfo* si = soinfo_alloc("[vdso]", nullptr, 0); si->phdr = reinterpret_cast(reinterpret_cast(ehdr_vdso) + ehdr_vdso->e_phoff); si->phnum = ehdr_vdso->e_phnum; @@ -2221,7 +2235,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { #else #define LINKER_PATH "/system/bin/linker" #endif -static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr); +static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0); /* gdb expects the linker to be in the debug shared object list. * Without this, gdb has trouble locating the linker's ".text" @@ -2285,7 +2299,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( INFO("[ android linker & debugger ]"); - soinfo* si = soinfo_alloc(args.argv[0], nullptr); + soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); if (si == nullptr) { exit(EXIT_FAILURE); } @@ -2473,7 +2487,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_addr); ElfW(Phdr)* phdr = reinterpret_cast(linker_addr + elf_hdr->e_phoff); - soinfo linker_so("[dynamic linker]", nullptr); + soinfo linker_so("[dynamic linker]", nullptr, 0); // If the linker is not acting as PT_INTERP entry_point is equal to // _start. Which means that the linker is running as an executable and diff --git a/linker/linker.h b/linker/linker.h index 3abab294f..3b140ac24 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -197,11 +197,9 @@ struct soinfo { #if !defined(__LP64__) bool has_text_relocations; #endif - // TODO: remove this flag, dynamic linker - // should not use it in any way. bool has_DT_SYMBOLIC; - soinfo(const char* name, const struct stat* file_stat); + soinfo(const char* name, const struct stat* file_stat, off64_t file_offset); void CallConstructors(); void CallDestructors(); @@ -212,10 +210,9 @@ struct soinfo { void add_child(soinfo* child); void remove_all_links(); - void set_st_dev(dev_t st_dev); - void set_st_ino(ino_t st_ino); ino_t get_st_ino(); dev_t get_st_dev(); + off64_t get_file_offset(); soinfo_list_t& get_children(); soinfo_list_t& get_parents(); @@ -248,6 +245,7 @@ struct soinfo { soinfo_list_t parents; // version >= 1 + off64_t file_offset; }; extern soinfo* get_libdl_info(); diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 44c8e9e70..e0d6d0e78 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -119,8 +119,8 @@ MAYBE_MAP_FLAG((x), PF_R, PROT_READ) | \ MAYBE_MAP_FLAG((x), PF_W, PROT_WRITE)) -ElfReader::ElfReader(const char* name, int fd) - : name_(name), fd_(fd), +ElfReader::ElfReader(const char* name, int fd, off64_t file_offset) + : name_(name), fd_(fd), file_offset_(file_offset), phdr_num_(0), phdr_mmap_(nullptr), phdr_table_(nullptr), phdr_size_(0), load_start_(nullptr), load_size_(0), load_bias_(0), loaded_phdr_(nullptr) { @@ -142,6 +142,13 @@ bool ElfReader::Load(const android_dlextinfo* extinfo) { } bool ElfReader::ReadElfHeader() { + off64_t actual_offset = lseek64(fd_, file_offset_, SEEK_SET); + + if (actual_offset != file_offset_) { + DL_ERR("seek to %" PRId64 " failed: %s", file_offset_, strerror(errno)); + return false; + } + ssize_t rc = TEMP_FAILURE_RETRY(read(fd_, &header_, sizeof(header_))); if (rc < 0) { DL_ERR("can't read file \"%s\": %s", name_, strerror(errno)); @@ -225,7 +232,7 @@ bool ElfReader::ReadProgramHeader() { phdr_size_ = page_max - page_min; - void* mmap_result = mmap(nullptr, phdr_size_, PROT_READ, MAP_PRIVATE, fd_, page_min); + void* mmap_result = mmap64(nullptr, phdr_size_, PROT_READ, MAP_PRIVATE, fd_, file_offset_ + page_min); if (mmap_result == MAP_FAILED) { DL_ERR("\"%s\" phdr mmap failed: %s", name_, strerror(errno)); return false; @@ -356,12 +363,12 @@ bool ElfReader::LoadSegments() { ElfW(Addr) file_length = file_end - file_page_start; if (file_length != 0) { - void* seg_addr = mmap(reinterpret_cast(seg_page_start), + void* seg_addr = mmap64(reinterpret_cast(seg_page_start), file_length, PFLAGS_TO_PROT(phdr->p_flags), MAP_FIXED|MAP_PRIVATE, fd_, - file_page_start); + file_offset_ + file_page_start); if (seg_addr == MAP_FAILED) { DL_ERR("couldn't map \"%s\" segment %zd: %s", name_, i, strerror(errno)); return false; diff --git a/linker/linker_phdr.h b/linker/linker_phdr.h index 593fb5a20..65d302cdb 100644 --- a/linker/linker_phdr.h +++ b/linker/linker_phdr.h @@ -39,7 +39,7 @@ class ElfReader { public: - ElfReader(const char* name, int fd); + ElfReader(const char* name, int fd, off64_t file_offset); ~ElfReader(); bool Load(const android_dlextinfo* extinfo); @@ -61,6 +61,7 @@ class ElfReader { const char* name_; int fd_; + off64_t file_offset_; ElfW(Ehdr) header_; size_t phdr_num_; diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp index da630463d..5206965e4 100644 --- a/tests/dlext_test.cpp +++ b/tests/dlext_test.cpp @@ -31,7 +31,7 @@ #define ASSERT_DL_NOTNULL(ptr) \ - ASSERT_TRUE(ptr != NULL) << "dlerror: " << dlerror() + ASSERT_TRUE(ptr != nullptr) << "dlerror: " << dlerror() #define ASSERT_DL_ZERO(i) \ ASSERT_EQ(0, i) << "dlerror: " << dlerror() @@ -46,23 +46,31 @@ typedef int (*fn)(void); #define LIBSIZE 1024*1024 // how much address space to reserve for it #if defined(__LP64__) -#define LIBPATH "%s/nativetest64/libdlext_test_fd/libdlext_test_fd.so" +#define LIBPATH_PREFIX "%s/nativetest64/libdlext_test_fd/" #else -#define LIBPATH "%s/nativetest/libdlext_test_fd/libdlext_test_fd.so" +#define LIBPATH_PREFIX "%s/nativetest/libdlext_test_fd/" #endif +#define LIBPATH LIBPATH_PREFIX "libdlext_test_fd.so" +#define LIBZIPPATH LIBPATH_PREFIX "dlext_test.zip" + +#define LIBZIP_OFFSET 2*PAGE_SIZE + class DlExtTest : public ::testing::Test { protected: virtual void SetUp() { - handle_ = NULL; + handle_ = nullptr; // verify that we don't have the library loaded already - ASSERT_EQ(NULL, dlsym(RTLD_DEFAULT, "getRandomNumber")); + void* h = dlopen(LIBNAME, RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(h == nullptr); + h = dlopen(LIBNAME_NORELRO, RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(h == nullptr); // call dlerror() to swallow the error, and check it was the one we wanted - ASSERT_STREQ("undefined symbol: getRandomNumber", dlerror()); + ASSERT_STREQ("dlopen failed: library \"" LIBNAME_NORELRO "\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); } virtual void TearDown() { - if (handle_ != NULL) { + if (handle_ != nullptr) { ASSERT_DL_ZERO(dlclose(handle_)); } } @@ -71,7 +79,7 @@ protected: }; TEST_F(DlExtTest, ExtInfoNull) { - handle_ = android_dlopen_ext(LIBNAME, RTLD_NOW, NULL); + handle_ = android_dlopen_ext(LIBNAME, RTLD_NOW, nullptr); ASSERT_DL_NOTNULL(handle_); fn f = reinterpret_cast(dlsym(handle_, "getRandomNumber")); ASSERT_DL_NOTNULL(f); @@ -90,7 +98,7 @@ TEST_F(DlExtTest, ExtInfoNoFlags) { TEST_F(DlExtTest, ExtInfoUseFd) { const char* android_data = getenv("ANDROID_DATA"); - ASSERT_TRUE(android_data != NULL); + ASSERT_TRUE(android_data != nullptr); char lib_path[PATH_MAX]; snprintf(lib_path, sizeof(lib_path), LIBPATH, android_data); @@ -105,8 +113,55 @@ TEST_F(DlExtTest, ExtInfoUseFd) { EXPECT_EQ(4, f()); } +TEST_F(DlExtTest, ExtInfoUseFdWithOffset) { + const char* android_data = getenv("ANDROID_DATA"); + ASSERT_TRUE(android_data != nullptr); + + char lib_path[PATH_MAX]; + snprintf(lib_path, sizeof(lib_path), LIBZIPPATH, android_data); + + android_dlextinfo extinfo; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_OFFSET; + extinfo.library_fd = TEMP_FAILURE_RETRY(open(lib_path, O_RDONLY | O_CLOEXEC)); + extinfo.library_offset = LIBZIP_OFFSET; + + handle_ = android_dlopen_ext(lib_path, RTLD_NOW, &extinfo); + ASSERT_DL_NOTNULL(handle_); + + fn f = reinterpret_cast(dlsym(handle_, "getRandomNumber")); + ASSERT_DL_NOTNULL(f); + EXPECT_EQ(4, f()); +} + +TEST_F(DlExtTest, ExtInfoUseFdWithInvalidOffset) { + const char* android_data = getenv("ANDROID_DATA"); + ASSERT_TRUE(android_data != nullptr); + + char lib_path[PATH_MAX]; + snprintf(lib_path, sizeof(lib_path), LIBZIPPATH, android_data); + + android_dlextinfo extinfo; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_OFFSET; + extinfo.library_fd = TEMP_FAILURE_RETRY(open(lib_path, O_RDONLY | O_CLOEXEC)); + extinfo.library_offset = 17; + + handle_ = android_dlopen_ext("libname_placeholder", RTLD_NOW, &extinfo); + ASSERT_TRUE(handle_ == nullptr); + ASSERT_STREQ("dlopen failed: file offset for the library libname_placeholder is not page-aligned: 17", dlerror()); +} + +TEST_F(DlExtTest, ExtInfoUseOffsetWihtoutFd) { + android_dlextinfo extinfo; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_OFFSET; + extinfo.library_offset = LIBZIP_OFFSET; + + handle_ = android_dlopen_ext("/some/lib/that/does_not_exist", RTLD_NOW, &extinfo); + ASSERT_TRUE(handle_ == nullptr); + ASSERT_STREQ("dlopen failed: invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x20", dlerror()); +} + TEST_F(DlExtTest, Reserved) { - void* start = mmap(NULL, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, + void* start = mmap(nullptr, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_TRUE(start != MAP_FAILED); android_dlextinfo extinfo; @@ -124,7 +179,7 @@ TEST_F(DlExtTest, Reserved) { } TEST_F(DlExtTest, ReservedTooSmall) { - void* start = mmap(NULL, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, + void* start = mmap(nullptr, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_TRUE(start != MAP_FAILED); android_dlextinfo extinfo; @@ -132,11 +187,11 @@ TEST_F(DlExtTest, ReservedTooSmall) { extinfo.reserved_addr = start; extinfo.reserved_size = PAGE_SIZE; handle_ = android_dlopen_ext(LIBNAME, RTLD_NOW, &extinfo); - EXPECT_EQ(NULL, handle_); + EXPECT_EQ(nullptr, handle_); } TEST_F(DlExtTest, ReservedHint) { - void* start = mmap(NULL, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, + void* start = mmap(nullptr, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_TRUE(start != MAP_FAILED); android_dlextinfo extinfo; @@ -154,7 +209,7 @@ TEST_F(DlExtTest, ReservedHint) { } TEST_F(DlExtTest, ReservedHintTooSmall) { - void* start = mmap(NULL, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, + void* start = mmap(nullptr, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_TRUE(start != MAP_FAILED); android_dlextinfo extinfo; @@ -174,7 +229,7 @@ class DlExtRelroSharingTest : public DlExtTest { protected: virtual void SetUp() { DlExtTest::SetUp(); - void* start = mmap(NULL, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, + void* start = mmap(nullptr, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_TRUE(start != MAP_FAILED); extinfo_.flags = ANDROID_DLEXT_RESERVED_ADDRESS; @@ -183,7 +238,7 @@ protected: extinfo_.relro_fd = -1; const char* android_data = getenv("ANDROID_DATA"); - ASSERT_TRUE(android_data != NULL); + ASSERT_TRUE(android_data != nullptr); snprintf(relro_file_, sizeof(relro_file_), "%s/local/tmp/libdlext_test.relro", android_data); } @@ -204,7 +259,7 @@ protected: extinfo_.flags |= ANDROID_DLEXT_WRITE_RELRO; extinfo_.relro_fd = relro_fd; void* handle = android_dlopen_ext(lib, RTLD_NOW, &extinfo_); - if (handle == NULL) { + if (handle == nullptr) { fprintf(stderr, "in child: %s\n", dlerror()); exit(1); } @@ -327,7 +382,7 @@ void DlExtRelroSharingTest::SpawnChildrenAndMeasurePss(const char* lib, bool sha } else { handle = dlopen(lib, RTLD_NOW); } - if (handle == NULL) { + if (handle == nullptr) { fprintf(stderr, "in child: %s\n", dlerror()); exit(1); } diff --git a/tests/libs/Android.build.dlext_testzip.mk b/tests/libs/Android.build.dlext_testzip.mk new file mode 100644 index 000000000..e672091a1 --- /dev/null +++ b/tests/libs/Android.build.dlext_testzip.mk @@ -0,0 +1,48 @@ +# +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Library used by dlext tests - zipped and aligned +# ----------------------------------------------------------------------------- + +# TODO: It there simple way to do this? +$(bionic_2nd_arch_prefix)bionic_dlext_test_zip := \ + $($(bionic_2nd_arch_prefix)TARGET_OUT_INTERMEDIATES)/libdlext_test_fd/dlext_test_origin.zip +$(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned := \ + $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/libdlext_test_fd/dlext_test.zip +ALL_MODULES += $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned) + +$(bionic_2nd_arch_prefix)bionic_dlext_built_shared_libraries := \ + $($(bionic_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libdlext_test_fd.so + +bionic_dlext_test_zip_alignment := 4096 # PAGE_SIZE + +$(bionic_2nd_arch_prefix)bionic_dlext_test_zip_tmpdir := $(dir $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)) + +$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)_prepare: $($(bionic_2nd_arch_prefix)bionic_dlext_built_shared_libraries) + $(hide) mkdir -p $(dir $@) + $(hide) cp -p $< $(dir $@) + +$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip): $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)_prepare + @echo "Zip: $@" + $(hide) (cd $(dir $@) && touch empty_file.txt && zip -rD0 $(notdir $@) empty_file.txt libdlext_test_fd.so) + +$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned): $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip) | $(ZIPALIGN) + $(hide) rm -rf $@ + $(hide) mkdir -p $(dir $@) + @echo "Zipalign $(bionic_dlext_test_zip_alignment): $@" + $(hide) zipalign $(bionic_dlext_test_zip_alignment) $< $@ + diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index b3554881e..ee97c618a 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -90,6 +90,17 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Library used by dlext tests - zipped and aligned +# ----------------------------------------------------------------------------- +include $(CLEAR_VARS) +bionic_2nd_arch_prefix := +include $(LOCAL_PATH)/Android.build.dlext_testzip.mk +ifneq ($(TARGET_2ND_ARCH),) + bionic_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) + include $(LOCAL_PATH)/Android.build.dlext_testzip.mk +endif + # ----------------------------------------------------------------------------- # Library used by dlfcn tests # ----------------------------------------------------------------------------- @@ -332,3 +343,9 @@ build_type := target include $(TEST_PATH)/Android.build.mk build_type := host include $(TEST_PATH)/Android.build.mk + +LOCAL_ADDITIONAL_DEPENDENCIES := \ + $(LOCAL_PATH)/Android.mk \ + $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ + $(LOCAL_PATH)/Android.build.testlib.mk \ + $(TEST_PATH)/Android.build.mk From 0724132c3263145f2a667f453a199d313a5b3d9f Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Mon, 20 Oct 2014 19:09:19 -0700 Subject: [PATCH 041/194] Fix race condition in timer disarm/delete. When setting a repeat timer using the SIGEV_THREAD mechanism, it's possible that the callback can be called after the timer is disarmed or deleted. This happens because the kernel can generate signals that the timer thread will continue to handle even after the timer is supposed to be off. Add two new tests to verify that disarming/deleting doesn't continue to call the callback. Modify the repeat test to finish more quickly than before. Refactor the Counter implementation a bit. Bug: 18039727 Change-Id: I73192c915cdacf608521b1792c54e5af14a34907 --- libc/bionic/posix_timers.cpp | 20 +++++++- tests/time_test.cpp | 95 ++++++++++++++++++++++++++++++------ 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/libc/bionic/posix_timers.cpp b/libc/bionic/posix_timers.cpp index 7ad0ef1fb..3c664d9c8 100644 --- a/libc/bionic/posix_timers.cpp +++ b/libc/bionic/posix_timers.cpp @@ -62,6 +62,7 @@ struct PosixTimer { pthread_t callback_thread; void (*callback)(sigval_t); sigval_t callback_argument; + volatile bool armed; }; static __kernel_timer_t to_kernel_timer_id(timer_t timer) { @@ -83,7 +84,7 @@ static void* __timer_thread_start(void* arg) { continue; } - if (si.si_code == SI_TIMER) { + if (si.si_code == SI_TIMER && timer->armed) { // This signal was sent because a timer fired, so call the callback. timer->callback(timer->callback_argument); } else if (si.si_code == SI_TKILL) { @@ -95,6 +96,9 @@ static void* __timer_thread_start(void* arg) { } static void __timer_thread_stop(PosixTimer* timer) { + // Immediately mark the timer as disarmed so even if some events + // continue to happen, the callback won't be called. + timer->armed = false; pthread_kill(timer->callback_thread, TIMER_SIGNAL); } @@ -121,6 +125,7 @@ int timer_create(clockid_t clock_id, sigevent* evp, timer_t* timer_id) { // Otherwise, this must be SIGEV_THREAD timer... timer->callback = evp->sigev_notify_function; timer->callback_argument = evp->sigev_value; + timer->armed = false; // Check arguments that the kernel doesn't care about but we do. if (timer->callback == NULL) { @@ -200,7 +205,18 @@ int timer_gettime(timer_t id, itimerspec* ts) { // http://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_getoverrun.html int timer_settime(timer_t id, int flags, const itimerspec* ts, itimerspec* ots) { - return __timer_settime(to_kernel_timer_id(id), flags, ts, ots); + PosixTimer* timer= reinterpret_cast(id); + int rc = __timer_settime(timer->kernel_timer_id, flags, ts, ots); + if (rc == 0) { + // Mark the timer as either being armed or disarmed. This avoids the + // callback being called after the disarm for SIGEV_THREAD timers only. + if (ts->it_value.tv_sec != 0 || ts->it_value.tv_nsec != 0) { + timer->armed = true; + } else { + timer->armed = false; + } + } + return rc; } // http://pubs.opengroup.org/onlinepubs/9699919799/functions/timer_getoverrun.html diff --git a/tests/time_test.cpp b/tests/time_test.cpp index 241c4a0c4..d637df226 100644 --- a/tests/time_test.cpp +++ b/tests/time_test.cpp @@ -205,24 +205,46 @@ struct Counter { volatile int value; timer_t timer_id; sigevent_t se; + bool timer_valid; - Counter(void (*fn)(sigval_t)) : value(0) { + Counter(void (*fn)(sigval_t)) : value(0), timer_valid(false) { memset(&se, 0, sizeof(se)); se.sigev_notify = SIGEV_THREAD; se.sigev_notify_function = fn; se.sigev_value.sival_ptr = this; + Create(); } void Create() { + ASSERT_FALSE(timer_valid); ASSERT_EQ(0, timer_create(CLOCK_REALTIME, &se, &timer_id)); + timer_valid = true; + } + + void DeleteTimer() { + ASSERT_TRUE(timer_valid); + ASSERT_EQ(0, timer_delete(timer_id)); + timer_valid = false; } ~Counter() { - if (timer_delete(timer_id) != 0) { - abort(); + if (timer_valid) { + DeleteTimer(); } } + void SetTime(time_t value_s, time_t value_ns, time_t interval_s, time_t interval_ns) { + ::SetTime(timer_id, value_s, value_ns, interval_s, interval_ns); + } + + bool ValueUpdated() { + volatile int current_value = value; + time_t start = time(NULL); + while (current_value == value && (time(NULL) - start) < 5) { + } + return current_value != value; + } + static void CountNotifyFunction(sigval_t value) { Counter* cd = reinterpret_cast(value.sival_ptr); ++cd->value; @@ -233,17 +255,17 @@ struct Counter { ++cd->value; // Setting the initial expiration time to 0 disarms the timer. - SetTime(cd->timer_id, 0, 0, 1, 0); + cd->SetTime(0, 0, 1, 0); } }; TEST(time, timer_settime_0) { Counter counter(Counter::CountAndDisarmNotifyFunction); - counter.Create(); + ASSERT_TRUE(counter.timer_valid); ASSERT_EQ(0, counter.value); - SetTime(counter.timer_id, 0, 1, 1, 0); + counter.SetTime(0, 1, 1, 0); usleep(500000); // The count should just be 1 because we disarmed the timer the first time it fired. @@ -252,15 +274,14 @@ TEST(time, timer_settime_0) { TEST(time, timer_settime_repeats) { Counter counter(Counter::CountNotifyFunction); - counter.Create(); + ASSERT_TRUE(counter.timer_valid); ASSERT_EQ(0, counter.value); - SetTime(counter.timer_id, 0, 1, 0, 10); - usleep(500000); - - // The count should just be > 1 because we let the timer repeat. - ASSERT_GT(counter.value, 1); + counter.SetTime(0, 1, 0, 10); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); } static int timer_create_NULL_signal_handler_invocation_count = 0; @@ -320,17 +341,17 @@ TEST(time, timer_delete_multiple) { TEST(time, timer_create_multiple) { Counter counter1(Counter::CountNotifyFunction); - counter1.Create(); + ASSERT_TRUE(counter1.timer_valid); Counter counter2(Counter::CountNotifyFunction); - counter2.Create(); + ASSERT_TRUE(counter2.timer_valid); Counter counter3(Counter::CountNotifyFunction); - counter3.Create(); + ASSERT_TRUE(counter3.timer_valid); ASSERT_EQ(0, counter1.value); ASSERT_EQ(0, counter2.value); ASSERT_EQ(0, counter3.value); - SetTime(counter2.timer_id, 0, 1, 0, 0); + counter2.SetTime(0, 1, 0, 0); usleep(500000); EXPECT_EQ(0, counter1.value); @@ -403,3 +424,45 @@ TEST(time, clock_gettime) { ASSERT_EQ(0, ts2.tv_sec); ASSERT_LT(ts2.tv_nsec, 1000000); } + +// Test to verify that disarming a repeatable timer disables the +// callbacks. +TEST(time, timer_disarm_terminates) { + Counter counter(Counter::CountNotifyFunction); + ASSERT_TRUE(counter.timer_valid); + + ASSERT_EQ(0, counter.value); + + counter.SetTime(0, 1, 0, 1); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); + + counter.SetTime(0, 0, 1, 0); + volatile int value = counter.value; + usleep(500000); + + // Verify the counter has not been incremented. + ASSERT_EQ(value, counter.value); +} + +// Test to verify that deleting a repeatable timer disables the +// callbacks. +TEST(time, timer_delete_terminates) { + Counter counter(Counter::CountNotifyFunction); + ASSERT_TRUE(counter.timer_valid); + + ASSERT_EQ(0, counter.value); + + counter.SetTime(0, 1, 0, 1); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); + ASSERT_TRUE(counter.ValueUpdated()); + + counter.DeleteTimer(); + volatile int value = counter.value; + usleep(500000); + + // Verify the counter has not been incremented. + ASSERT_EQ(value, counter.value); +} From 3c5c720b0b46ecd801329c09d23bb6e7098d76d3 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Wed, 8 Oct 2014 16:22:03 -0700 Subject: [PATCH 042/194] Build dlext_testzip as custom module. Use $(BUILD_SYSTEM)/base_rules to build it as custom module, so that it's exposed to utilities like mm/mmma etc. Bug: 17887283 Bug: 17762003 (cherry picked from commit 667853d47770fbdb54aaf0b3261b0d4882725770) Change-Id: I405797d16f20dc09e5d84b93b6727b634db2fc2c --- tests/dlext_test.cpp | 2 +- tests/libs/Android.build.dlext_testzip.mk | 41 ++++++++++------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp index 5206965e4..55b064297 100644 --- a/tests/dlext_test.cpp +++ b/tests/dlext_test.cpp @@ -52,7 +52,7 @@ typedef int (*fn)(void); #endif #define LIBPATH LIBPATH_PREFIX "libdlext_test_fd.so" -#define LIBZIPPATH LIBPATH_PREFIX "dlext_test.zip" +#define LIBZIPPATH LIBPATH_PREFIX "libdlext_test_fd_zipaligned.zip" #define LIBZIP_OFFSET 2*PAGE_SIZE diff --git a/tests/libs/Android.build.dlext_testzip.mk b/tests/libs/Android.build.dlext_testzip.mk index e672091a1..d05927ec2 100644 --- a/tests/libs/Android.build.dlext_testzip.mk +++ b/tests/libs/Android.build.dlext_testzip.mk @@ -18,31 +18,24 @@ # Library used by dlext tests - zipped and aligned # ----------------------------------------------------------------------------- -# TODO: It there simple way to do this? -$(bionic_2nd_arch_prefix)bionic_dlext_test_zip := \ - $($(bionic_2nd_arch_prefix)TARGET_OUT_INTERMEDIATES)/libdlext_test_fd/dlext_test_origin.zip -$(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned := \ - $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/libdlext_test_fd/dlext_test.zip -ALL_MODULES += $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned) +include $(CLEAR_VARS) -$(bionic_2nd_arch_prefix)bionic_dlext_built_shared_libraries := \ - $($(bionic_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libdlext_test_fd.so +LOCAL_MODULE_CLASS := SHARED_LIBRARIES +LOCAL_MODULE := libdlext_test_fd_zipaligned +LOCAL_MODULE_SUFFIX := .zip +LOCAL_MODULE_TAGS := tests +LOCAL_MODULE_PATH := $($(bionic_2nd_arch_prefix)TARGET_OUT_DATA_NATIVE_TESTS)/libdlext_test_fd +LOCAL_2ND_ARCH_VAR_PREFIX := $(bionic_2nd_arch_prefix) -bionic_dlext_test_zip_alignment := 4096 # PAGE_SIZE +include $(BUILD_SYSTEM)/base_rules.mk -$(bionic_2nd_arch_prefix)bionic_dlext_test_zip_tmpdir := $(dir $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)) - -$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)_prepare: $($(bionic_2nd_arch_prefix)bionic_dlext_built_shared_libraries) - $(hide) mkdir -p $(dir $@) - $(hide) cp -p $< $(dir $@) - -$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip): $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip)_prepare - @echo "Zip: $@" - $(hide) (cd $(dir $@) && touch empty_file.txt && zip -rD0 $(notdir $@) empty_file.txt libdlext_test_fd.so) - -$($(bionic_2nd_arch_prefix)bionic_dlext_test_zip_aligned): $($(bionic_2nd_arch_prefix)bionic_dlext_test_zip) | $(ZIPALIGN) - $(hide) rm -rf $@ - $(hide) mkdir -p $(dir $@) - @echo "Zipalign $(bionic_dlext_test_zip_alignment): $@" - $(hide) zipalign $(bionic_dlext_test_zip_alignment) $< $@ +my_shared_libs := \ + $($(bionic_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/libdlext_test_fd.so +$(LOCAL_BUILT_MODULE): PRIVATE_ALIGNMENT := 4096 # PAGE_SIZE +$(LOCAL_BUILT_MODULE) : $(my_shared_libs) | $(ZIPALIGN) + @echo "Zipalign $(PRIVATE_ALIGNMENT): $@" + $(hide) rm -rf $(dir $@) && mkdir -p $(dir $@) + $(hide) cp $^ $(dir $@) + $(hide) (cd $(dir $@) && touch empty_file.txt && zip -rD0 $(notdir $@).unaligned empty_file.txt *.so) + $(hide) $(ZIPALIGN) $(PRIVATE_ALIGNMENT) $@.unaligned $@ From 702ab5b37e77684ee352300d32b078606ee388d0 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 21 Oct 2014 12:09:18 -0700 Subject: [PATCH 043/194] Rename library_offset to library_fd_offset replace lseek() and use pread() instead add test for library_fd_offset > file_size case Bug: 17762003 (cherry picked from commit a6c1279098f24a675d0df74ce1946f5d534b425e) Change-Id: Ie117c745081ee33d07db5341115ff6c8e98b0dec --- libc/include/android/dlext.h | 8 ++++---- linker/linker.cpp | 12 ++++++------ linker/linker_phdr.cpp | 10 ++-------- tests/dlext_test.cpp | 25 +++++++++++++++++-------- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/libc/include/android/dlext.h b/libc/include/android/dlext.h index f81ec70d5..f27e4e5ab 100644 --- a/libc/include/android/dlext.h +++ b/libc/include/android/dlext.h @@ -54,11 +54,11 @@ enum { */ ANDROID_DLEXT_USE_LIBRARY_FD = 0x10, - /* When opening library using library_fd read it starting with library_offset + /* If opening a library using library_fd read it starting at library_fd_offset. * This flag is only valid when ANDROID_DLEXT_USE_LIBRARY_FD is set. */ - ANDROID_DLEXT_USE_LIBRARY_OFFSET = 0x20, + ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET = 0x20, /* Mask of valid bits */ ANDROID_DLEXT_VALID_FLAG_BITS = ANDROID_DLEXT_RESERVED_ADDRESS | @@ -66,7 +66,7 @@ enum { ANDROID_DLEXT_WRITE_RELRO | ANDROID_DLEXT_USE_RELRO | ANDROID_DLEXT_USE_LIBRARY_FD | - ANDROID_DLEXT_USE_LIBRARY_OFFSET, + ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET, }; typedef struct { @@ -75,7 +75,7 @@ typedef struct { size_t reserved_size; int relro_fd; int library_fd; - off64_t library_offset; + off64_t library_fd_offset; } android_dlextinfo; extern void* android_dlopen_ext(const char* filename, int flag, const android_dlextinfo* extinfo); diff --git a/linker/linker.cpp b/linker/linker.cpp index d6d5f35f6..9425c9d3b 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -817,8 +817,8 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl if (extinfo != nullptr && (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) != 0) { fd = extinfo->library_fd; - if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_OFFSET) != 0) { - file_offset = extinfo->library_offset; + if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET) != 0) { + file_offset = extinfo->library_fd_offset; } } else { // Open the file. @@ -832,13 +832,13 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl } if ((file_offset % PAGE_SIZE) != 0) { - DL_ERR("file offset for the library %s is not page-aligned: %" PRId64, name, file_offset); + DL_ERR("file offset for the library \"%s\" is not page-aligned: %" PRId64, name, file_offset); return nullptr; } struct stat file_stat; if (TEMP_FAILURE_RETRY(fstat(fd, &file_stat)) != 0) { - DL_ERR("unable to stat file for the library %s: %s", name, strerror(errno)); + DL_ERR("unable to stat file for the library \"%s\": %s", name, strerror(errno)); return nullptr; } @@ -1085,8 +1085,8 @@ soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) return nullptr; } if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) == 0 && - (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_OFFSET) != 0) { - DL_ERR("invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x%" PRIx64, extinfo->flags); + (extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET) != 0) { + DL_ERR("invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x%" PRIx64, extinfo->flags); return nullptr; } } diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index e0d6d0e78..4b1c0cad1 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -142,18 +142,12 @@ bool ElfReader::Load(const android_dlextinfo* extinfo) { } bool ElfReader::ReadElfHeader() { - off64_t actual_offset = lseek64(fd_, file_offset_, SEEK_SET); - - if (actual_offset != file_offset_) { - DL_ERR("seek to %" PRId64 " failed: %s", file_offset_, strerror(errno)); - return false; - } - - ssize_t rc = TEMP_FAILURE_RETRY(read(fd_, &header_, sizeof(header_))); + ssize_t rc = TEMP_FAILURE_RETRY(pread64(fd_, &header_, sizeof(header_), file_offset_)); if (rc < 0) { DL_ERR("can't read file \"%s\": %s", name_, strerror(errno)); return false; } + if (rc != sizeof(header_)) { DL_ERR("\"%s\" is too small to be an ELF executable: only found %zd bytes", name_, static_cast(rc)); diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp index 55b064297..7f706c186 100644 --- a/tests/dlext_test.cpp +++ b/tests/dlext_test.cpp @@ -121,9 +121,9 @@ TEST_F(DlExtTest, ExtInfoUseFdWithOffset) { snprintf(lib_path, sizeof(lib_path), LIBZIPPATH, android_data); android_dlextinfo extinfo; - extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_OFFSET; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET; extinfo.library_fd = TEMP_FAILURE_RETRY(open(lib_path, O_RDONLY | O_CLOEXEC)); - extinfo.library_offset = LIBZIP_OFFSET; + extinfo.library_fd_offset = LIBZIP_OFFSET; handle_ = android_dlopen_ext(lib_path, RTLD_NOW, &extinfo); ASSERT_DL_NOTNULL(handle_); @@ -141,23 +141,32 @@ TEST_F(DlExtTest, ExtInfoUseFdWithInvalidOffset) { snprintf(lib_path, sizeof(lib_path), LIBZIPPATH, android_data); android_dlextinfo extinfo; - extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_OFFSET; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET; extinfo.library_fd = TEMP_FAILURE_RETRY(open(lib_path, O_RDONLY | O_CLOEXEC)); - extinfo.library_offset = 17; + extinfo.library_fd_offset = 17; handle_ = android_dlopen_ext("libname_placeholder", RTLD_NOW, &extinfo); ASSERT_TRUE(handle_ == nullptr); - ASSERT_STREQ("dlopen failed: file offset for the library libname_placeholder is not page-aligned: 17", dlerror()); + ASSERT_STREQ("dlopen failed: file offset for the library \"libname_placeholder\" is not page-aligned: 17", dlerror()); + + extinfo.library_fd_offset = (5LL<<58) + PAGE_SIZE; + handle_ = android_dlopen_ext("libname_placeholder", RTLD_NOW, &extinfo); + + ASSERT_TRUE(handle_ == nullptr); + // TODO: Better error message when reading with offset > file_size + ASSERT_STREQ("dlopen failed: \"libname_placeholder\" has bad ELF magic", dlerror()); + + close(extinfo.library_fd); } TEST_F(DlExtTest, ExtInfoUseOffsetWihtoutFd) { android_dlextinfo extinfo; - extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_OFFSET; - extinfo.library_offset = LIBZIP_OFFSET; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET; + extinfo.library_fd_offset = LIBZIP_OFFSET; handle_ = android_dlopen_ext("/some/lib/that/does_not_exist", RTLD_NOW, &extinfo); ASSERT_TRUE(handle_ == nullptr); - ASSERT_STREQ("dlopen failed: invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x20", dlerror()); + ASSERT_STREQ("dlopen failed: invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET without ANDROID_DLEXT_USE_LIBRARY_FD): 0x20", dlerror()); } TEST_F(DlExtTest, Reserved) { From f13e1eb92ff54db8dc4bf4e988066b3c37eff29d Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 17 Oct 2014 14:08:54 -0700 Subject: [PATCH 044/194] Fix generic __memcpy_chk implementation. - Clean up the labels (add .L to make them local). - Change to using cfi directives. - Fix unwinding of the __memcpy_chk fail path. Bug: 18033671 (cherry pick from commit 7123d4371a5e04337b1de5f8cdf6cdc1e08e9cad) Change-Id: Ife93bcbfc1949ef29fc8e2dc515b7120632b82b1 --- libc/arch-arm/generic/bionic/memcpy.S | 74 +++++++++++++++------------ 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/libc/arch-arm/generic/bionic/memcpy.S b/libc/arch-arm/generic/bionic/memcpy.S index cd4a13d12..b0c79abf7 100644 --- a/libc/arch-arm/generic/bionic/memcpy.S +++ b/libc/arch-arm/generic/bionic/memcpy.S @@ -39,7 +39,7 @@ ENTRY(__memcpy_chk) cmp r2, r3 - bgt fortify_check_failed + bhi __memcpy_chk_fail // Fall through to memcpy... END(__memcpy_chk) @@ -49,11 +49,14 @@ ENTRY(memcpy) * ARM ABI. Since we have to save R0, we might as well save R4 * which we can use for better pipelining of the reads below */ - .save {r0, r4, lr} stmfd sp!, {r0, r4, lr} + .cfi_def_cfa_offset 12 + .cfi_rel_offset r0, 0 + .cfi_rel_offset r4, 4 + .cfi_rel_offset lr, 8 /* Making room for r5-r11 which will be spilled later */ - .pad #28 sub sp, sp, #28 + .cfi_adjust_cfa_offset 28 // preload the destination because we'll align it to a cache line // with small writes. Also start the source "pump". @@ -63,14 +66,14 @@ ENTRY(memcpy) /* it simplifies things to take care of len<4 early */ cmp r2, #4 - blo copy_last_3_and_return + blo .Lcopy_last_3_and_return /* compute the offset to align the source * offset = (4-(src&3))&3 = -src & 3 */ rsb r3, r1, #0 ands r3, r3, #3 - beq src_aligned + beq .Lsrc_aligned /* align source to 32 bits. We need to insert 2 instructions between * a ldr[b|h] and str[b|h] because byte and half-word instructions @@ -85,12 +88,12 @@ ENTRY(memcpy) strcsb r4, [r0], #1 strcsb r12,[r0], #1 -src_aligned: +.Lsrc_aligned: /* see if src and dst are aligned together (congruent) */ eor r12, r0, r1 tst r12, #3 - bne non_congruent + bne .Lnon_congruent /* Use post-incriment mode for stm to spill r5-r11 to reserved stack * frame. Don't update sp. @@ -100,7 +103,7 @@ src_aligned: /* align the destination to a cache-line */ rsb r3, r0, #0 ands r3, r3, #0x1C - beq congruent_aligned32 + beq .Lcongruent_aligned32 cmp r3, r2 andhi r3, r2, #0x1C @@ -115,14 +118,14 @@ src_aligned: strne r10,[r0], #4 sub r2, r2, r3 -congruent_aligned32: +.Lcongruent_aligned32: /* * here source is aligned to 32 bytes. */ -cached_aligned32: +.Lcached_aligned32: subs r2, r2, #32 - blo less_than_32_left + blo .Lless_than_32_left /* * We preload a cache-line up to 64 bytes ahead. On the 926, this will @@ -160,10 +163,7 @@ cached_aligned32: add r2, r2, #32 - - - -less_than_32_left: +.Lless_than_32_left: /* * less than 32 bytes left at this point (length in r2) */ @@ -197,7 +197,7 @@ less_than_32_left: /********************************************************************/ -non_congruent: +.Lnon_congruent: /* * here source is aligned to 4 bytes * but destination is not. @@ -207,9 +207,9 @@ non_congruent: * partial words in the shift queue) */ cmp r2, #4 - blo copy_last_3_and_return + blo .Lcopy_last_3_and_return - /* Use post-incriment mode for stm to spill r5-r11 to reserved stack + /* Use post-increment mode for stm to spill r5-r11 to reserved stack * frame. Don't update sp. */ stmea sp, {r5-r11} @@ -236,7 +236,7 @@ non_congruent: movcs r3, r3, lsr #8 cmp r2, #4 - blo partial_word_tail + blo .Lpartial_word_tail /* Align destination to 32 bytes (cache line boundary) */ 1: tst r0, #0x1c @@ -248,11 +248,11 @@ non_congruent: str r4, [r0], #4 cmp r2, #4 bhs 1b - blo partial_word_tail + blo .Lpartial_word_tail /* copy 32 bytes at a time */ 2: subs r2, r2, #32 - blo less_than_thirtytwo + blo .Lless_than_thirtytwo /* Use immediate mode for the shifts, because there is an extra cycle * for register shifts, which could account for up to 50% of @@ -260,11 +260,11 @@ non_congruent: */ cmp r12, #24 - beq loop24 + beq .Lloop24 cmp r12, #8 - beq loop8 + beq .Lloop8 -loop16: +.Lloop16: ldr r12, [r1], #4 1: mov r4, r12 ldmia r1!, { r5,r6,r7, r8,r9,r10,r11} @@ -289,9 +289,9 @@ loop16: stmia r0!, {r3,r4,r5,r6, r7,r8,r9,r10} mov r3, r11, lsr #16 bhs 1b - b less_than_thirtytwo + b .Lless_than_thirtytwo -loop8: +.Lloop8: ldr r12, [r1], #4 1: mov r4, r12 ldmia r1!, { r5,r6,r7, r8,r9,r10,r11} @@ -316,9 +316,9 @@ loop8: stmia r0!, {r3,r4,r5,r6, r7,r8,r9,r10} mov r3, r11, lsr #8 bhs 1b - b less_than_thirtytwo + b .Lless_than_thirtytwo -loop24: +.Lloop24: ldr r12, [r1], #4 1: mov r4, r12 ldmia r1!, { r5,r6,r7, r8,r9,r10,r11} @@ -345,12 +345,12 @@ loop24: bhs 1b -less_than_thirtytwo: +.Lless_than_thirtytwo: /* copy the last 0 to 31 bytes of the source */ rsb r12, lr, #32 /* we corrupted r12, recompute it */ add r2, r2, #32 cmp r2, #4 - blo partial_word_tail + blo .Lpartial_word_tail 1: ldr r5, [r1], #4 sub r2, r2, #4 @@ -360,7 +360,7 @@ less_than_thirtytwo: cmp r2, #4 bhs 1b -partial_word_tail: +.Lpartial_word_tail: /* we have a partial word in the input buffer */ movs r5, lr, lsl #(31-3) strmib r3, [r0], #1 @@ -372,7 +372,7 @@ partial_word_tail: /* Refill spilled registers from the stack. Don't update sp. */ ldmfd sp, {r5-r11} -copy_last_3_and_return: +.Lcopy_last_3_and_return: movs r2, r2, lsl #31 /* copy remaining 0, 1, 2 or 3 bytes */ ldrmib r2, [r1], #1 ldrcsb r3, [r1], #1 @@ -385,9 +385,15 @@ copy_last_3_and_return: add sp, sp, #28 ldmfd sp!, {r0, r4, lr} bx lr +END(memcpy) // Only reached when the __memcpy_chk check fails. -fortify_check_failed: +ENTRY_PRIVATE(__memcpy_chk_fail) + // Preserve lr for backtrace. + push {lr} + .cfi_def_cfa_offset 4 + .cfi_rel_offset lr, 0 + ldr r0, error_message ldr r1, error_code 1: @@ -397,7 +403,7 @@ error_code: .word BIONIC_EVENT_MEMCPY_BUFFER_OVERFLOW error_message: .word error_string-(1b+8) -END(memcpy) +END(__memcpy_chk_fail) .data error_string: From 8fab8119dd176a280b62e9e8f2b4f08c0d76f36d Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 22 Oct 2014 12:31:02 -0700 Subject: [PATCH 045/194] Update bionic to tzdata2014i. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From the release notes: Changes affecting future time stamps Pacific/Fiji will observe DST from 2014-11-02 02:00 to 2015-01-18 03:00. (Thanks to Ken Rylander for the heads-up.) Guess that future years will use a similar pattern. A new Zone Pacific/Bougainville, for the part of Papua New Guinea that plans to switch from UTC+10 to UTC+11 on 2014-12-28 at 02:00. (Thanks to Kiley Walbom for the heads-up.) Changes affecting time zone abbreviations Since Belarus is not changing its clocks even though Moscow is, the time zone abbreviation in Europe/Minsk is changing from FET to its more-traditional value MSK on 2014-10-26 at 01:00. (Thanks to Alexander Bokovoy for the heads-up about Belarus.) The new abbreviation IDT stands for the pre-1976 use of UT+8 in Indochina, to distinguish it better from ICT (UT+7). Changes affecting past time stamps Many time stamps have been corrected for Asia/Ho_Chi_Minh before 1976 (thanks to Trần Ngọc Quân for an indirect pointer to Trần Tiến Bình's authoritative book). Asia/Ho_Chi_Minh has been added to zone1970.tab, to give tzselect users in Vietnam two choices, since north and south Vietnam disagreed after our 1970 cutoff. Asia/Phnom_Penh and Asia/Vientiane have been turned into links, as they differed from existing zones only for older time stamps. As usual, these changes affect pre-1970 time stamps only. Their old contents have been moved to the 'backzone' file. Bug: 18085936 (cherry picked from commit a05c2a2a705c8298154db6665cbbb4dbe3cdbbd5) Change-Id: If0253cc1515e1bc98e99c6e24eec797836ca7c27 --- libc/zoneinfo/tzdata | Bin 565331 -> 565358 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index 33bfe6b88d2ea23fc55e4d52a60669dec57dddcd..e9cf16428fd3a6bd6e022ff8f460ee134f9c9a41 100644 GIT binary patch delta 9519 zcmb8!dsGek|Htu}sdSOVDWW>05R%O9Mx|0I37v#oVyAneq@qK12qB~ocCN|g2pys* zit6MNiX?=vQG^gDNp3iRTtktdZes9bB8N~k?5)>aK zS`D|3NJcu zB-T!%@Th@A&^$>dyPW6>ky?tTYeaRFgbyV4bgM_A>9#l7J4zJVPLX;Fo@h8@MI49X=a}yeLb+xpC)2CNuycN zgOt+5xsf)ScwJ&PMigXfB!DJapQI~QPP5vQwA0X2n|tExX3}h|BpEdH3KwYT^*U(i zAr@XZnUscp-4+^pWEIWqQw86>1YX!~oarqJIg<*ky+;bd(rYBvCrmgpmNfW?!in8P zd%P%|{EfJb4--s3lU%A2P12~0?gT0sacB8K7SoiROJ=KeJA z$V_E2l(|52C6si~)L$hQlSSdd8X~2ct46laH2IJ!n%8&9cbdv;#A=Etv^SCv8g3@Z zqS1Iqs%adGGN+0{_mRY!#xRFO(9l)gMKk;YsimQ(R1FXXr)*+RLlsR!e?aV2s-9-z zPNFf5zQr=)NE5h?#M02$aDaw>K?6;aAJLvJ3aL+t3(Y1K5>G?VnLAzVwB3^9)J74- zbW34RG|`p%r?#YX$dNWx{b6X_&G>0A%47tIIwhL)`AlRFspoiq zE3$mNnJTA7-}w&ZAr^B)!Of6J=ZIZG0_o$th8;OJIFyt}7!wy2O%=6q$4M1CD3g4r zaZeyt!J^<{MM79gNfynRaip51B{M`6JXaBG8n1pNf~B79q8VFBYC}YAZz(Ln=;l}WA9Z&kTsqAZgC;8j^k`rP5g_+r8afB#@ZY6mUVz0;=j?-L$ zBZ7h>!ymf`s1c>I)~*T|Y=u#4vh7y+{e~K)fPF_ETXgO?C^(r^zWM zO>|c(F^H0=4db}qcM;zxOQGT#Nr{s10i=*_jY&%s{k|zBMsp?nbmB|5CL|TxV!AaX zt#j!!`GWL~mhk(DKiwvhG`ck*rP1_ht0ZkSS8ourd7^Nwj0DV+@M}mq-8zwSx{W05 zbQ?^}=ZnG(`n=AU@Ow!HwioEuigeH&H*XP(82YQ}Gm*xyFWEv--$<$`mXhyut4*w8 z*)4|9tp~}96@|OENi`c~F2MJjH4S~hA{MaUOS>rO@2y%I_8Th>&!s(0RZ>B8++3bF zDQH-z!qW>i#^a}mZi1*&^^PtmzWJsOoithb&DV)OaElWp{2Y>(zz$rgNLZst;ORes z{!=MZB&hZemg~v{?O^t;t49Cnr=`24Y~DXatH$Pe%FSulW9uA7wcQp=bem2$rMwxI z#c4TR=6FFxRZyY-aa;)f8jcJ8#Hn)JoLG*YCN_oZ!g0$oxNbh<{W)K@8S6&>xyy%* zRU3$_$^Lt_U-W}rk(FJQm0g*YU7eM^0#^1aSlKIKWv_;P{QqB3*Z+M<{+#zDe~v4v zxu^Pfw0!R`L0jHsrK)DpGEX%p8~I)*HT^YZ$!bMq$(`CVd5@xeU3CLqzA;d}kNjCT z^+CM4T)VsaL4Hip$?ob_g8YkA-Aw*dkM7Wr57bxRBoE!IKB(xizWUvIVzo?L?rW~1 zIi%XnR$4bCy3K#j-4vdqE115Q-2`1Px`I3MISpS=<*OP!N&du5=p)ZCP}7s?vm2gr z+RvOd?#+P=R(2{@b~<(roRYpP^hBE**kElNJ1M;YU2l2;`nJ#uDBqUx?7jK#mFOD$ z_d{#+B>$nqhimyyj|>z4GnKbFX>^wFZREA(dkuJvqN}geO@_(*Ur7DWMk%IPUy)AP zzeXBh+^hWZCi4=+T>s@BvoR@bv|X$WGm*k#n~yqMF;KbNx?Bqi^Uc=2>r%&Oi1+ z5u=wVjonzUh;0v$I>gOCt%$21DUF|yrHC&yk|x@nk|yr9S1j%+mo853tw{QuB>i*d zcg2#sGo(u$A1RWHoTST)$`vwsAGvFl3jP1zMY{54JB|KwO+yV+UX%|t)L6ytirqE4 zGgfwYD7`~gc9$r6RvB9s_6b`W zR<=AST_RStOekF{R<>LyT{2d-Y^-eQSlRNivL$3?%gD->l9eqdN|%&Y#<68(1GcoR zYS@Rm+;^hr*Dbhf<4G+V7 z+qPG5RyQv=E3q2h{(dmLW6Cjj=S^*Rmu&{TJO3@br$?NWU7yR&sKp@r*G4oa>5Y_* zxtzzb@cwBx;QeKO@WBx$;Dg!L@S$D=J|yb_=YC0m56|j=k38Ls9`(}4Jnx@{@ZSSJ z%P=^$Z!!kQ)$hUiE9~I>7bWn?IlbVMmv_U3uHWFo{4?n3AqJSA&e#bTYkh@_W0T=C zuNvXAzO&(ytLNcTE14?>=Z@^f;JmIWT()inT=vBUtys7R^NM@@;L1rUaOD|Q_@ZPE zd@<`eeEBzb`10Z^xa!{l@Rgt@^lGCU=GSDdmoTUCcyO$f5Y`h=Aw7Zu3&y=-FUb`^(fpBH4MJjv;mgg_wI(lg9|YjG!FU~ zet6&y_>tyq`0wc32Fzp1K3SF`N#+-C7L4{pJX_CG3FP9{dh}n7kDJP{P6OHnZUN z14ihl-0@E_PKWUP^Xkzu3)H3kAJ@j_;A2 zk3r849R;&NU?$w_ZX4X&DIPW~s)LP;r@+SYLfH6+J=|x}Hn`7of7C=;fVs&fTiDcP zD{T6g0o=duB0T?m|5aZx7|2b-0RuxDVRMB8JjmlbJow5~bcp2x%q?RvI1_QV3s~C9nHitcAdGMI8 zTCnHrjj-3fR(Pz}5!Aa<6Z3KA>9Ehf*YJ3a`S64lHSmNMU)XofaoD#?gk^rCH)G(J ztA~MqzlE^>=Hcj+&YLiwvfwv(>gxq?fbU0m+Obynll`6YY!YbdL|lG zdKUA!{YJsjyLQ3zgud|nrOV*?PX%fj$H&f;Vh~%=gahInN5gSBm*99KGdOv-1=wWyz849oJvL0Twuq(X!%{+LG-+MT%W+J@Su?xEHbTsDc4d21(+a|#2 z-)<_O|BZ=O7;Jn{fCDn7bcZuaw!)b#{ppY3 zgX&K3!RT`MuNQsbLq7Z9+{-+C*rp6Ul5dRpQGHns26>x)VUYK6C44OA34H8!D4ajB z63##637;Hx5I(te5M0=G4P3a)13lGo0Q1wc2Es)RtKs5Nn(&$82>7hb_%#M4S>70w z{HTG?Ew+HqJvjq7Q>o(qp>orHf z^@~2Ew?9nA{La*S@ZCB)W*OgLSAxO4lfBr0zu$8={9yAp_<{2O5&4G;9>Ndr24Vl> z>0gyCPsaSo$VT|d-r4Z8-sjeY3@Ry_4;IG{#z~9#Y4S#!Y1^<}43I1_^Jo?N3DCWP;4r3O0>kZ5T zzoQ$hq89_JB>fAkw*P_WUr?KN8-q^u5*(mDq6pR~)Q2_u-9oi?iyV`3E-Dk(pp%y6^x7W^YyC z{*zY218SP#fszQ={O`-~Afr|2;BC(^AN)NWwn)4PTQrV^EvFoUElY>MR<>(lt6g1S zQPyKF2I8tgsN`1~c36jYhHV~4!M5&iV7oFO*xu|0JR;i?9;tc)c97}94ow7hn)Ly8 zs>w&4y>u{l{yP(vxejc@z;#1B25#zgu-m*Tu=|Tb*kimsJm&H?*mG!a*ekyP9oxee zbMK6;u=ghe*e7-o>~s4oJi&JwJmFL$vrO={a=^fM>v=X1{B(_Bzhw{5Nnb`_?mz1s zJo%m>JY`fiJhk`-9Ps;ccv{wDc-qfkc*f!ic*Y|SI51#89C$g1R>ldlUCXg!_8~Xy z2r}6R2d(K32lJ_LaJV`g@+1rn9rF?ntMG!utvaC*M?x@gsuJ{d=IV`||vb`VS<%W~sVux}Dwmz`>a$gxNwVK<}bt^kCU-xo}41@IG`xvBO34}MgmBJejJHr{K zd*F<Ux5#f^nw2>JPIG`Z3*XY z*#IAwsf@!XN0JX?$B}14;k>~0a9(9s_?Xi?_}ISpaK7&yv>3u{f*!Y*Z+hsN`AtZj?HA2373CUU{EDbQuh0IwnMnOXa;<> z@ey1-)d{XHEr+k$^?|SN+6UM6tb}iuJ)x%0|DFD! z7~IXSqytW9Q1gWE$qvHzng_uTX0L%CT|+4vf`smen6{5KChj=}R>9USnYM>X2Ac`)WJpN_$=7HGq-?qtBNzHi~y({b=y zt6KQ&Hh;KH_axkwXbZn@+X8=>?T7w*?}Svw(K~K;w#MM&86su=)Tamhd3yr<`DX|G zC21=B<X;kntb_X)zJ&WMkB0lozFot>BxnK#{T}=co4Q)TW+j{8{wCew0XrAK1GR>s=BXPn zH-FU)9vl(_55Dp*Y~lU~Y;pKDY-uKeE!P&oGAmVm46GuzV=(-Uh>CuvFqhQm!PcT2 zw#oYh+jdWa?a~`yyALzq5z%Mi5p_G5p=3JhWK)c}(@sZb4;5$q9T+$-`JD|^ zTs|&^U1xCc=-abkw~W-9a#EILK>4=nz^E}HXV7RL9D zjtLHmkBphWP|Md-bEuW=aLJJ2HZ~G#P2d0fH{!&|=;%<*|NOxiC>oKb(c9pE0A7a^ Am;e9( delta 9407 zcmb7}2~C`sdrC7V8PcRMCDVbNYZrAe9)H}{Kdx19CW-Pa(y@HWO(@YHsQ(MMz-ZFKTP1mOKEJ* zU0NF1jw?L4Oy-m9(s^D>lRSmLrExrWZDnM8_wkTcCb>6Hp|Ku6NulE(_(zg6>D;Zg zm`!cn%-TYmOo#E3uW0Sg{u;saDRG5=ZEa+QmAFS6lYEUwv@x<9jISWMX~_%PG#7Vo z;nP%J&pmyN>|Q93BKg~bulAu+;u^uDUfiOsNq)$^XxSz6LOvrST9*iq8`Aiti^m70*kAeBjQ# zjO=s*4-)c@CzG6s=ZA&7;iV+`aonXh$txaAayFLFC!vM%%H*vGzT~b!Ms_Zehm=W5 znVb}Ii+?1!=EvRo7}@P_TqTK_%$JfpI?nS+o_FV8Nlux#M_(g*--}0($d~yFl5&x} zfW)WPl72>3DU*AW)U3**Na$2olbBj@jfAGO2&RuzW$sNv6hlIP8`hOkAxX~)+@?Q0 z;&;3aNvJK4C80fRB%y{Pl1cg8c7T!n9?bnnQYP|v5}I@C0HamfMoF^t;Q9b}wziPl z52U{d9k~BM@ybsipwDy$$$>pwC!uK_LU2z3Bo{vMM3QT1Jd;F!&mWeN;~-Q9l05Fp zrsu_ z6+D8ZvkPA#B#Rf21Sm@)Xnf8+NxIDCQ6yd4@YN*U8gnheXxlBHCSQXU;&{(^=f!^3 z28(ye+&dC~*J2`v(ciMdNR#}P+YBAb0wa0sP$LUk#W#}lslbbdUKC$8TZftC9DaM) zFuRMAB+nA_DZPWd6~23DJvP{yPlz(Iq2G8$l+h~MOOk$?!5xP;rH+8%CV4YY9Bvfv zc_zua-uxlS`nue4gh{4vrx7O0G)ek(E}u2RogH`K*%aQ*i)l>YHKOUgtIU;Xlbpq8 z(Kw0k$5=vRJa>+vm(7m{#faS}(|Cy=rg0K4rNp@!+-0PZop|QgBS8@m&23F_!z= zf)4bYsN{EiT)1Ym65mSRad-)1NY1{@S{D~B%agKf;|((H!G0Y6WcZiK1QL3mGRB$Y zLtGzcv^p0_b0zSw1do{k2}uD7GW{_6G2{d!SiBm-^>ecbrk^eyQk#uswZ#Mhwm;|+lL!?P2^EtG z{l8Bblr#LM#m<<2?aANe-}f{my#BSh zPRhS;PWAYIZmyH^zi;k8O<1>7Vzq_+Qdf|>ZFht+T@du)xN8;=Y86dxO&b2^IGUrTY{r?p3I`U!mfjg^K$Y zD(+pVxPPJI41|hv5Gu|BO6MWeEDlBdA`V8VI2&|6W=R~X2#A9fDh?M)2P{+^GL#Nls5opW9k@_&=t9N8 z3l)biR6GEo;vonX4??JT7(%C6UQ)#R()5w15t#mHHw7eVX7{b&nWs2-c9Xf_*_+0J zld5b{sZ2_m-4C4nehzp}WJ~beYti6&J^E;(ZvMXR;05k2zzdf*1uwFzrit~Xl!OWh zq&)wEf+e9%bP7vLF5Cex_5B6Bbl+!1#Fzj23cP&zZE))ME8rCgN5L!a?ggjyT?bxu z=CUf$wYvEX@R}{z;6JKFC}MqSZPIcC*8Z5L2~Hn20i1qs2zW#10pJa}{@_gw+JHB$ ztq zXa2JjyeIgcD$%v)%p!2M_c3sG<_=B7_c?9=?@L(#&iObSygzm{_(0Jx@Ij>~_|UPL zxn@Bk7R{9JQ|u&Yj*FocqbBP@QxvtReW=4F~XvcICk*_P+<8a()gzwW0`o zrd&ByqU+3rgW&upCE&AR*EA77clILqyt&gPY4EWxpPvCp6A84ZP{(xKH`;73d5fd4TZ z(j~h7iHimoKUgE!EIk>Rtcb+Z6J`;Rp0yqUF4+(Ue(n?qelfEH_{A4@aA}OHQn^%m z%O3nXus!(o!PnroZZ6=r8|^ev_ukeD{C;LB_`|beV*31l48M%Pr}O7f@VP@a_{)wA z@YlM_!QYnV>k?hx4HLjW;zJAd*xdO|6%+i_?FYErk!IlXUQU{b+pehu{@LLh*e>xM*zWB;uzkpNuzle% zaK(;qbcy;ZW^VvH)Vm6HSd*uScooYWoz|ycrmRPx>Z6q?a2zxXTyiTaGY`hY!anUfIkOdX?%gx8PZ;O66dgInC|2KMgf1#X$!1l+1cRdDOAU37{1 z+En=j_DOCG_IZB`>>Kqn*!SK?Mbx$H{1V(Q_a?Z5xxrrubXa>BfsWQ$;Ev`$z@17p zRiehuq0_(t+8%J1fYq9acg-?rx)kd&CBVdla_^EB)hjiTad$7qGck z%f1No+G>SBP&IFG(Bis^DD3m8I=Jr`OK`uUui#+iA8`NucfkWZ&VmP~e^Djs3$fn; z9yI+9cu?sAaA;UAIP}Igjq1#DSi5ut!Vb(60Xe+(OmO(hk>E%<5*#`4H}KG>({+jJ zhV^d-jye|(9^Sr(BH|;qcLYb*@c_rnZ2%t0DuPFi_z67f{##$4UZ?!-S7cC&j}V!o<9>7PoDqfgogKjVfY~wEW8DeC#M8n*CkpY zstU4vp!us;!{f>O23ONWU(V?Y$nW?00zRh$enHmpTA}^S}6m3&ytr7rd+wzS!?q z@Wo5;c(Uf#N|&fl+w~Or%g!~xmlqa*ul)E9E*$?v5p`GZ!Q#o+`oZGK*K?1Hyjd=4 zu@eP1)^0?@&8myQx02!U7EBk^!SAfTpzs!i!MdO!Obx{9pND%njOBi4d#|DFT3>pC55cN`v%*_+_;nEm?h$XBdn)W+oSV=fQ#bumG`-tc&={>km&2BraMaNRf`+^_~b9&0oU z9*;Hp+8-Nmi-5;tZns;5-TjTIcRvh^$2^+A;xUg^Kae+?e{QBqw4iae6BaN%uLSmt z_y+bWfX8Fa{qKQWWL!ty+vOOz<+3-r=x=2KkH=b%y9#doa5nNjeR9A)7uGAH&ev-t z*mox^9y7PAJQ;y@3x=Yg{kuWn4kH7={&y#-5;b=04v)t=9Ss3@Zeojkz#nbFU8=Zh zqOR*yXK>f|<-mc1894B23Al&PLvWA1uy|&sG>~+O8kJ?4DClMNH@Mf-3yO&MetZ%f zH26<&pVRPotZ&=J;C`Evkq`cLEV%!oO{(bY|Gf`*;AmJpHt=o>@Sxv@BR}X&Z%w@a zEVOAi1VXoXQ9xp0zcc}dB~=9vdHD-Cd?-8~izsTWi@L~8w~!yY|7Y;9rXLj%k4k+B z9{vkF9vd+p7LSd135&;K`eh*>bLkI!|FcmomLV|e&uN$-))^j;#V#5Gj+5Z=SlnoT z@K`-Tm1v>(U{w=3E)O1$C3v?7k6+gc`3a6L;EB^}fG2*m0#6?9t&6_N*NgG}&!%*# zj=+>-mWoK2UE%SVc^y0+n{IO#`RUWnB0r-z4?I)d0iN~O9aZ$r_FDk{eK$NFOL86! zPF|dj{G6ZWX`*iKn3>?YPez&%nBOxJf%#{D121gW8N6^CJRVD_960cQzy9wy@P+{);Em_u@z|zTZNZy&z~Zqj z)t$jx=k?Mhns=Mo0FTGEM|&c${Xs27Br>{H0cV_$!MhrL1n*i8kH<0{;PF`Ij8n+( ze)B;UeS4zsV}YzIH^AB5PJs7j9Rlxbya}Ac*MQCY%fsWb1BnN8i6%JkY&Z%Ig}~#n zL+87JkF=SB{E_S^Mbzci2nFXZg~wxgU*YlCv3NJ+kKe9~{D~kt@X1qts^~jqDg~e3 z1dC^8XDVGrAb++63i7|gc6Ox9XzrawNz6S1!y27j}fjV^?S51`2I*(Jofk1tKbLSbCG{|^p!5Y z|JkD^=?Faj{DzF zUDSQLTY&tR-@b#t9Nh)})>H?7+j3qJbw7TA$74T|b_zB~FE@(3K_0dU%r5F{ysdX*ux(~#uwCuW zxX4PyGRj@mDgPYS8+TDt~zZuxavoE zJVUkN@OXx5MN^S?>XNC7KBr@8SfFOZCE%LriQrm4!QvTeO&<()Hb3c$g4$tz2-LY8 zr;7>dwu8qrxa#b|Jg zN#Uq(@fse_&@#O2k+!_t6#3R2!gPriY<(yY^ZV580QOl0i|1wVHNfK;d?(wZ!0&-I z3fc{L4Q^lHqDnMDhgOAP{|qZN_5KyZfz;9~hVB1tNQsmu=Foqz1SvT|$u`v;{|jk( B`q}^h From aa6cd5819c8ebd254d995388798a4b51af7ca933 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 23 Oct 2014 20:29:42 -0700 Subject: [PATCH 046/194] Use mxcr_mask instead of mxcsr_mask to match glibc. Bug: 18097559 (cherry picked from commit f485547b9267263e1de220a3cc368deaec367191) Change-Id: I242105faa8210abc9635a951b25b127cd64ed23c --- libc/include/sys/user.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/include/sys/user.h b/libc/include/sys/user.h index 18684f183..66b371d50 100644 --- a/libc/include/sys/user.h +++ b/libc/include/sys/user.h @@ -108,7 +108,7 @@ struct user_fpregs_struct { __u64 rip; __u64 rdp; __u32 mxcsr; - __u32 mxcsr_mask; + __u32 mxcr_mask; __u32 st_space[32]; __u32 xmm_space[64]; __u32 padding[24]; From 4c30130a2155c37e80af4c3b53bf4f6ce832e760 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 27 Oct 2014 13:38:21 -0700 Subject: [PATCH 047/194] Disable tzdata in $ANDROID_DATA. Bug: 18139284 Change-Id: I2670dc1791d635139a5d39a438dc08777439476b --- libc/tzcode/localtime.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libc/tzcode/localtime.c b/libc/tzcode/localtime.c index 3bbed9086..28d13f417 100644 --- a/libc/tzcode/localtime.c +++ b/libc/tzcode/localtime.c @@ -2252,14 +2252,11 @@ static int __bionic_open_tzdata_path(const char* path_prefix_variable, const cha } static int __bionic_open_tzdata(const char* olson_id, int* data_size) { - int fd = __bionic_open_tzdata_path("ANDROID_DATA", "/misc/zoneinfo/tzdata", olson_id, data_size); - if (fd < 0) { - fd = __bionic_open_tzdata_path("ANDROID_ROOT", "/usr/share/zoneinfo/tzdata", olson_id, data_size); - if (fd == -2) { - // The first thing that 'recovery' does is try to format the current time. It doesn't have - // any tzdata available, so we must not abort here --- doing so breaks the recovery image! - fprintf(stderr, "%s: couldn't find any tzdata when looking for %s!\n", __FUNCTION__, olson_id); - } + int fd = __bionic_open_tzdata_path("ANDROID_ROOT", "/usr/share/zoneinfo/tzdata", olson_id, data_size); + if (fd == -2) { + // The first thing that 'recovery' does is try to format the current time. It doesn't have + // any tzdata available, so we must not abort here --- doing so breaks the recovery image! + fprintf(stderr, "%s: couldn't find any tzdata when looking for %s!\n", __FUNCTION__, olson_id); } return fd; } From 7dc2b7b30ddc158a5e7aa6945526eb65d354b96c Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 10 Sep 2014 15:20:40 -0700 Subject: [PATCH 048/194] Fix signal trampolines. * LP32 should use sa_restorer too. gdb expects this, and future (>= 3.15) x86 kernels will apparently stop supporting the case where SA_RESTORER isn't set. * gdb and libunwind care about the exact instruction sequences, so we need to modify the code slightly in a few cases to match what they're looking for. * gdb also cares about the exact function names (for some architectures), so we need to use __restore and __restore_rt rather than __sigreturn and __rt_sigreturn. * It's possible that we don't have a VDSO; dl_iterate_phdr shouldn't assume that getauxval(AT_SYSINFO_EHDR) will return a non-null pointer. This fixes unwinding through a signal handler in gdb for all architectures. It doesn't fix libunwind for arm and arm64. I'll keep investigating that... (cherry picked from commit 36f451a6d93b6807944d99fa23396e039c47e845) Bug: 17436734 Change-Id: Ic1ea1184db6655c5d96180dc07bcc09628e647cb --- libc/arch-arm/arm.mk | 2 + libc/arch-arm/bionic/__restore.S | 35 ++++++++++++++++++ libc/arch-arm/bionic/__restore_rt.S | 35 ++++++++++++++++++ libc/arch-arm64/arm64.mk | 2 +- .../{__rt_sigreturn.S => __restore_rt.S} | 9 +++-- libc/arch-x86/bionic/__restore.S | 37 +++++++++++++++++++ libc/arch-x86/bionic/__restore_rt.S | 36 ++++++++++++++++++ libc/arch-x86/x86.mk | 2 + .../{__rt_sigreturn.S => __restore_rt.S} | 8 ++-- libc/arch-x86_64/x86_64.mk | 2 +- libc/bionic/dl_iterate_phdr_static.cpp | 5 +++ libc/bionic/sigaction.cpp | 22 +++++++++-- 12 files changed, 183 insertions(+), 12 deletions(-) create mode 100644 libc/arch-arm/bionic/__restore.S create mode 100644 libc/arch-arm/bionic/__restore_rt.S rename libc/arch-arm64/bionic/{__rt_sigreturn.S => __restore_rt.S} (89%) create mode 100644 libc/arch-x86/bionic/__restore.S create mode 100644 libc/arch-x86/bionic/__restore_rt.S rename libc/arch-x86_64/bionic/{__rt_sigreturn.S => __restore_rt.S} (87%) diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index 70cc8eba6..fbde87cef 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -55,6 +55,8 @@ libc_bionic_src_files_arm += \ arch-arm/bionic/_exit_with_stack_teardown.S \ arch-arm/bionic/libgcc_compat.c \ arch-arm/bionic/memcmp.S \ + arch-arm/bionic/__restore_rt.S \ + arch-arm/bionic/__restore.S \ arch-arm/bionic/_setjmp.S \ arch-arm/bionic/setjmp.S \ arch-arm/bionic/sigsetjmp.S \ diff --git a/libc/arch-arm/bionic/__restore.S b/libc/arch-arm/bionic/__restore.S new file mode 100644 index 000000000..e76628e16 --- /dev/null +++ b/libc/arch-arm/bionic/__restore.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +// This function must have exactly this instruction sequence for gdb and libunwind. +ENTRY_PRIVATE(__restore) + mov r7, #__NR_sigreturn + swi #0 +END(__restore) diff --git a/libc/arch-arm/bionic/__restore_rt.S b/libc/arch-arm/bionic/__restore_rt.S new file mode 100644 index 000000000..5a1fca182 --- /dev/null +++ b/libc/arch-arm/bionic/__restore_rt.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +// This function must have exactly this instruction sequence for gdb and libunwind. +ENTRY_PRIVATE(__restore_rt) + mov r7, #__NR_rt_sigreturn + swi #0 +END(__restore_rt) diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index 6c4f6a6e8..91cd9fb1c 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -29,7 +29,7 @@ libc_common_src_files_arm64 += \ libc_bionic_src_files_arm64 := \ arch-arm64/bionic/__bionic_clone.S \ arch-arm64/bionic/_exit_with_stack_teardown.S \ - arch-arm64/bionic/__rt_sigreturn.S \ + arch-arm64/bionic/__restore_rt.S \ arch-arm64/bionic/_setjmp.S \ arch-arm64/bionic/setjmp.S \ arch-arm64/bionic/__set_tls.c \ diff --git a/libc/arch-arm64/bionic/__rt_sigreturn.S b/libc/arch-arm64/bionic/__restore_rt.S similarity index 89% rename from libc/arch-arm64/bionic/__rt_sigreturn.S rename to libc/arch-arm64/bionic/__restore_rt.S index 8fb6f0c28..95064903e 100644 --- a/libc/arch-arm64/bionic/__rt_sigreturn.S +++ b/libc/arch-arm64/bionic/__restore_rt.S @@ -28,7 +28,8 @@ #include -ENTRY_PRIVATE(__rt_sigreturn) - mov x8, __NR_rt_sigreturn - svc #0 -END(__rt_sigreturn) +// This function must have exactly this instruction sequence for gdb and libunwind. +ENTRY_PRIVATE(__restore_rt) + mov x8, __NR_rt_sigreturn + svc #0 +END(__restore_rt) diff --git a/libc/arch-x86/bionic/__restore.S b/libc/arch-x86/bionic/__restore.S new file mode 100644 index 000000000..755c3f8e5 --- /dev/null +++ b/libc/arch-x86/bionic/__restore.S @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +// This function must have exactly this instruction sequence for gdb and libunwind. +// This function must have exactly this name for gdb. +ENTRY(__restore) + popl %eax + movl $__NR_sigreturn, %eax + int $0x80 +END(__restore) diff --git a/libc/arch-x86/bionic/__restore_rt.S b/libc/arch-x86/bionic/__restore_rt.S new file mode 100644 index 000000000..0cd808125 --- /dev/null +++ b/libc/arch-x86/bionic/__restore_rt.S @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +// This function must have exactly this instruction sequence for gdb and libunwind. +// This function must have exactly this name for gdb. +ENTRY(__restore_rt) + movl $__NR_rt_sigreturn, %eax + int $0x80 +END(__restore_rt) diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index 2a0609dde..905519745 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -26,6 +26,8 @@ libc_bionic_src_files_x86 += \ arch-x86/bionic/__bionic_clone.S \ arch-x86/bionic/_exit_with_stack_teardown.S \ arch-x86/bionic/libgcc_compat.c \ + arch-x86/bionic/__restore_rt.S \ + arch-x86/bionic/__restore.S \ arch-x86/bionic/_setjmp.S \ arch-x86/bionic/setjmp.S \ arch-x86/bionic/__set_tls.c \ diff --git a/libc/arch-x86_64/bionic/__rt_sigreturn.S b/libc/arch-x86_64/bionic/__restore_rt.S similarity index 87% rename from libc/arch-x86_64/bionic/__rt_sigreturn.S rename to libc/arch-x86_64/bionic/__restore_rt.S index eddceb15b..d84be219a 100644 --- a/libc/arch-x86_64/bionic/__rt_sigreturn.S +++ b/libc/arch-x86_64/bionic/__restore_rt.S @@ -28,7 +28,9 @@ #include -ENTRY_PRIVATE(__rt_sigreturn) - movl $__NR_rt_sigreturn, %eax +// This function must have exactly this instruction sequence for gdb and libunwind. +// This function must have exactly this name for gdb. +ENTRY(__restore_rt) + mov $__NR_rt_sigreturn, %rax syscall -END(__rt_sigreturn) +END(__restore_rt) diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk index b001b5e98..5f12a49d7 100644 --- a/libc/arch-x86_64/x86_64.mk +++ b/libc/arch-x86_64/x86_64.mk @@ -30,7 +30,7 @@ libc_common_src_files_x86_64 += \ libc_bionic_src_files_x86_64 := \ arch-x86_64/bionic/__bionic_clone.S \ arch-x86_64/bionic/_exit_with_stack_teardown.S \ - arch-x86_64/bionic/__rt_sigreturn.S \ + arch-x86_64/bionic/__restore_rt.S \ arch-x86_64/bionic/_setjmp.S \ arch-x86_64/bionic/setjmp.S \ arch-x86_64/bionic/__set_tls.c \ diff --git a/libc/bionic/dl_iterate_phdr_static.cpp b/libc/bionic/dl_iterate_phdr_static.cpp index 155a7a00a..2196ac8b2 100644 --- a/libc/bionic/dl_iterate_phdr_static.cpp +++ b/libc/bionic/dl_iterate_phdr_static.cpp @@ -62,6 +62,11 @@ int dl_iterate_phdr(int (*cb)(struct dl_phdr_info* info, size_t size, void* data // Try the VDSO if that didn't work. ElfW(Ehdr)* ehdr_vdso = reinterpret_cast(getauxval(AT_SYSINFO_EHDR)); + if (ehdr_vdso == nullptr) { + // There is no VDSO, so there's nowhere left to look. + return rc; + } + struct dl_phdr_info vdso_info; vdso_info.dlpi_addr = 0; vdso_info.dlpi_name = NULL; diff --git a/libc/bionic/sigaction.cpp b/libc/bionic/sigaction.cpp index 225a8233e..8ba4e2a2d 100644 --- a/libc/bionic/sigaction.cpp +++ b/libc/bionic/sigaction.cpp @@ -28,8 +28,10 @@ #include +extern "C" void __restore_rt(void); +extern "C" void __restore(void); + #if __LP64__ -extern "C" void __rt_sigreturn(void); extern "C" int __rt_sigaction(int, const struct __kernel_sigaction*, struct __kernel_sigaction*, size_t); #else extern "C" int __sigaction(int, const struct sigaction*, struct sigaction*); @@ -47,7 +49,7 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga if (!(kernel_new_action.sa_flags & SA_RESTORER)) { kernel_new_action.sa_flags |= SA_RESTORER; - kernel_new_action.sa_restorer = &__rt_sigreturn; + kernel_new_action.sa_restorer = &__restore_rt; } #endif } @@ -75,6 +77,20 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga #else // The 32-bit ABI is broken. struct sigaction includes a too-small sigset_t. // TODO: if we also had correct struct sigaction definitions available, we could copy in and out. - return __sigaction(signal, bionic_new_action, bionic_old_action); + struct sigaction kernel_new_action; + if (bionic_new_action != NULL) { + kernel_new_action.sa_flags = bionic_new_action->sa_flags; + kernel_new_action.sa_handler = bionic_new_action->sa_handler; + kernel_new_action.sa_mask = bionic_new_action->sa_mask; +#ifdef SA_RESTORER + kernel_new_action.sa_restorer = bionic_new_action->sa_restorer; + + if (!(kernel_new_action.sa_flags & SA_RESTORER)) { + kernel_new_action.sa_flags |= SA_RESTORER; + kernel_new_action.sa_restorer = (kernel_new_action.sa_flags & SA_SIGINFO) ? &__restore_rt : &__restore; + } +#endif + } + return __sigaction(signal, (bionic_new_action != NULL) ? &kernel_new_action : NULL, bionic_old_action); #endif } From 5054e1a121fc5aca814815625fe230c4a8abd5a5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 16 Sep 2014 13:57:39 -0700 Subject: [PATCH 049/194] Fix 32-bit arm unwinding through signal frames. gdb was already okay; libgcc and libunwind need a little extra help. Bug: 17436734 (cherry picked from commit 148dff3ec6114a03acc722ae43990f1b342abad9) Change-Id: I2cc997017acc57c930284af5264f353656b98c7b --- libc/arch-arm/arm.mk | 1 - libc/arch-arm/bionic/__restore.S | 28 ++++++++++++++++++++++- libc/arch-arm/bionic/__restore_rt.S | 35 ----------------------------- 3 files changed, 27 insertions(+), 37 deletions(-) delete mode 100644 libc/arch-arm/bionic/__restore_rt.S diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index fbde87cef..b1edfccf3 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -55,7 +55,6 @@ libc_bionic_src_files_arm += \ arch-arm/bionic/_exit_with_stack_teardown.S \ arch-arm/bionic/libgcc_compat.c \ arch-arm/bionic/memcmp.S \ - arch-arm/bionic/__restore_rt.S \ arch-arm/bionic/__restore.S \ arch-arm/bionic/_setjmp.S \ arch-arm/bionic/setjmp.S \ diff --git a/libc/arch-arm/bionic/__restore.S b/libc/arch-arm/bionic/__restore.S index e76628e16..98981256b 100644 --- a/libc/arch-arm/bionic/__restore.S +++ b/libc/arch-arm/bionic/__restore.S @@ -28,8 +28,34 @@ #include -// This function must have exactly this instruction sequence for gdb and libunwind. +// gdb is smart enough to unwind through signal frames with just the regular +// CFI information but libgcc and libunwind both need extra help. We do this +// by using .fnstart/.fnend and inserting a nop before both __restore and +// __restore_rt (but covered by the .fnstart/.fnend) so that although they're +// not inside the functions from objdump's point of view, an unwinder that +// blindly looks at the previous instruction (but is then smart enough to check +// the DWARF information to find out where it landed) gets the right answer. + +// We need to place .fnstart ourselves (but we may as well keep the free .fnend). +#undef __bionic_asm_custom_entry +#define __bionic_asm_custom_entry(f) + + .fnstart + .save {r0-r15} + .pad #32 + nop ENTRY_PRIVATE(__restore) + // This function must have exactly this instruction sequence. mov r7, #__NR_sigreturn swi #0 END(__restore) + + .fnstart + .save {r0-r15} + .pad #160 + nop +ENTRY_PRIVATE(__restore_rt) + // This function must have exactly this instruction sequence. + mov r7, #__NR_rt_sigreturn + swi #0 +END(__restore_rt) diff --git a/libc/arch-arm/bionic/__restore_rt.S b/libc/arch-arm/bionic/__restore_rt.S deleted file mode 100644 index 5a1fca182..000000000 --- a/libc/arch-arm/bionic/__restore_rt.S +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -// This function must have exactly this instruction sequence for gdb and libunwind. -ENTRY_PRIVATE(__restore_rt) - mov r7, #__NR_rt_sigreturn - swi #0 -END(__restore_rt) From e5e61a0a920a8e6560735b2e565c3bd7a1e35ba5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 16 Sep 2014 15:49:50 -0700 Subject: [PATCH 050/194] Use the kernel's sa_restorer for aarch64. gdb was happy with what we had, but libgcc and libunwind weren't. libgcc is happy with the kernel's restorer (because of the extra nop), though libunwind looks like it's going to need code changes regardless. We could make our restorer more like the kernel's one, but why bother when we can just let the kernel supply the canonical one? Bug: 17436734 (cherry picked from commit 1cff9a89645a8f362a9ce19c7f9544e98c1fd9e7) Change-Id: Ie13d73fd97395e1979a67c2294e036a97c50000d --- libc/arch-arm64/arm64.mk | 1 - libc/arch-arm64/bionic/__restore_rt.S | 35 --------------------------- libc/bionic/sigaction.cpp | 34 +++++++++++++++++--------- 3 files changed, 22 insertions(+), 48 deletions(-) delete mode 100644 libc/arch-arm64/bionic/__restore_rt.S diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index 91cd9fb1c..eb65cfd1f 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -29,7 +29,6 @@ libc_common_src_files_arm64 += \ libc_bionic_src_files_arm64 := \ arch-arm64/bionic/__bionic_clone.S \ arch-arm64/bionic/_exit_with_stack_teardown.S \ - arch-arm64/bionic/__restore_rt.S \ arch-arm64/bionic/_setjmp.S \ arch-arm64/bionic/setjmp.S \ arch-arm64/bionic/__set_tls.c \ diff --git a/libc/arch-arm64/bionic/__restore_rt.S b/libc/arch-arm64/bionic/__restore_rt.S deleted file mode 100644 index 95064903e..000000000 --- a/libc/arch-arm64/bionic/__restore_rt.S +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -// This function must have exactly this instruction sequence for gdb and libunwind. -ENTRY_PRIVATE(__restore_rt) - mov x8, __NR_rt_sigreturn - svc #0 -END(__restore_rt) diff --git a/libc/bionic/sigaction.cpp b/libc/bionic/sigaction.cpp index 8ba4e2a2d..9038bd544 100644 --- a/libc/bionic/sigaction.cpp +++ b/libc/bionic/sigaction.cpp @@ -31,26 +31,29 @@ extern "C" void __restore_rt(void); extern "C" void __restore(void); -#if __LP64__ +#if defined(__LP64__) + extern "C" int __rt_sigaction(int, const struct __kernel_sigaction*, struct __kernel_sigaction*, size_t); -#else -extern "C" int __sigaction(int, const struct sigaction*, struct sigaction*); -#endif int sigaction(int signal, const struct sigaction* bionic_new_action, struct sigaction* bionic_old_action) { -#if __LP64__ __kernel_sigaction kernel_new_action; if (bionic_new_action != NULL) { kernel_new_action.sa_flags = bionic_new_action->sa_flags; kernel_new_action.sa_handler = bionic_new_action->sa_handler; kernel_new_action.sa_mask = bionic_new_action->sa_mask; -#ifdef SA_RESTORER +#if defined(SA_RESTORER) kernel_new_action.sa_restorer = bionic_new_action->sa_restorer; - +#if defined(__aarch64__) + // arm64 has sa_restorer, but unwinding works best if you just let the + // kernel supply the default restorer from [vdso]. gdb doesn't care, but + // libgcc needs the nop that the kernel includes before the actual code. + // (We could add that ourselves, but why bother?) +#else if (!(kernel_new_action.sa_flags & SA_RESTORER)) { kernel_new_action.sa_flags |= SA_RESTORER; kernel_new_action.sa_restorer = &__restore_rt; } +#endif #endif } @@ -64,7 +67,7 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga bionic_old_action->sa_flags = kernel_old_action.sa_flags; bionic_old_action->sa_handler = kernel_old_action.sa_handler; bionic_old_action->sa_mask = kernel_old_action.sa_mask; -#ifdef SA_RESTORER +#if defined(SA_RESTORER) bionic_old_action->sa_restorer = kernel_old_action.sa_restorer; if (bionic_old_action->sa_restorer == &__rt_sigreturn) { @@ -74,15 +77,21 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga } return result; +} + #else - // The 32-bit ABI is broken. struct sigaction includes a too-small sigset_t. - // TODO: if we also had correct struct sigaction definitions available, we could copy in and out. + +extern "C" int __sigaction(int, const struct sigaction*, struct sigaction*); + +int sigaction(int signal, const struct sigaction* bionic_new_action, struct sigaction* bionic_old_action) { + // The 32-bit ABI is broken. struct sigaction includes a too-small sigset_t, + // so we have to use sigaction(2) rather than rt_sigaction(2). struct sigaction kernel_new_action; if (bionic_new_action != NULL) { kernel_new_action.sa_flags = bionic_new_action->sa_flags; kernel_new_action.sa_handler = bionic_new_action->sa_handler; kernel_new_action.sa_mask = bionic_new_action->sa_mask; -#ifdef SA_RESTORER +#if defined(SA_RESTORER) kernel_new_action.sa_restorer = bionic_new_action->sa_restorer; if (!(kernel_new_action.sa_flags & SA_RESTORER)) { @@ -92,5 +101,6 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga #endif } return __sigaction(signal, (bionic_new_action != NULL) ? &kernel_new_action : NULL, bionic_old_action); -#endif } + +#endif From 190dce9e56c750be6b8d113ffdd32a9c20c19e3d Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 17 Sep 2014 17:21:20 -0700 Subject: [PATCH 051/194] Stack unwinding unit tests. Bug: 17436734 (cherry picked from commit bee1993a14b47bc7acda544242f405ae45e42566) Change-Id: I7205a862ba2c3b474e287f5e9c8982cef4610af9 --- tests/Android.mk | 30 +++-------- tests/stack_unwinding_test.cpp | 83 +++++++++++++++++++++++++++---- tests/stack_unwinding_test_impl.c | 51 +++++++++---------- 3 files changed, 104 insertions(+), 60 deletions(-) diff --git a/tests/Android.mk b/tests/Android.mk index dd430490b..23a2cb3ed 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -88,7 +88,6 @@ libBionicStandardTests_src_files := \ search_test.cpp \ signal_test.cpp \ stack_protector_test.cpp \ - stack_unwinding_test.cpp \ stdatomic_test.cpp \ stdint_test.cpp \ stdio_test.cpp \ @@ -134,9 +133,6 @@ libBionicStandardTests_c_includes := \ libBionicStandardTests_ldlibs_host := \ -lrt \ -libBionicStandardTests_whole_static_libraries := \ - libBionicUnwindTest \ - module := libBionicStandardTests module_tag := optional build_type := target @@ -145,25 +141,6 @@ include $(LOCAL_PATH)/Android.build.mk build_type := host include $(LOCAL_PATH)/Android.build.mk -# ----------------------------------------------------------------------------- -# Special stack unwinding test library compiled with special flags. -# ----------------------------------------------------------------------------- -libBionicUnwindTest_cflags := \ - $(test_cflags) \ - -fexceptions \ - -fnon-call-exceptions \ - -libBionicUnwindTest_src_files := \ - stack_unwinding_test_impl.c \ - -module := libBionicUnwindTest -module_tag := optional -build_type := target -build_target := STATIC_TEST_LIBRARY -include $(LOCAL_PATH)/Android.build.mk -build_type := host -include $(LOCAL_PATH)/Android.build.mk - # ----------------------------------------------------------------------------- # Fortify tests. # ----------------------------------------------------------------------------- @@ -247,8 +224,15 @@ bionic-unit-tests_src_files := \ atexit_test.cpp \ dlext_test.cpp \ dlfcn_test.cpp \ + stack_unwinding_test.cpp \ + stack_unwinding_test_impl.c \ bionic-unit-tests_cflags := $(test_cflags) + +bionic-unit-tests_conlyflags := \ + -fexceptions \ + -fnon-call-exceptions \ + bionic-unit-tests_cppflags := $(test_cppflags) bionic-unit-tests_ldflags := \ diff --git a/tests/stack_unwinding_test.cpp b/tests/stack_unwinding_test.cpp index 1024f28f1..017a5f2e8 100644 --- a/tests/stack_unwinding_test.cpp +++ b/tests/stack_unwinding_test.cpp @@ -20,18 +20,83 @@ #include -extern "C" { - void do_test(); +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ScopedSignalHandler.h" + +#define noinline __attribute__((noinline)) + +static _Unwind_Reason_Code FrameCounter(_Unwind_Context* ctx __unused, void* arg) { + int* count_ptr = reinterpret_cast(arg); + +#if SHOW_FRAME_LOCATIONS + void* ip = reinterpret_cast(_Unwind_GetIP(ctx)); + + const char* symbol = ""; + int offset = 0; + + Dl_info info; + memset(&info, 0, sizeof(info)); + if (dladdr(ip, &info) != 0) { + symbol = info.dli_sname; + if (info.dli_saddr != nullptr) { + offset = static_cast(reinterpret_cast(ip) - reinterpret_cast(info.dli_saddr)); + } + } + + fprintf(stderr, " #%02d %p %s%+d (%s)\n", *count_ptr, ip, symbol, offset, info.dli_fname ? info.dli_fname : "??"); + fflush(stderr); +#endif + + ++*count_ptr; + return _URC_NO_REASON; } +static int noinline unwind_one_frame_deeper() { + int count = 0; + _Unwind_Backtrace(FrameCounter, &count); + return count; +} + +TEST(stack_unwinding, easy) { + int count = 0; + _Unwind_Backtrace(FrameCounter, &count); + int deeper_count = unwind_one_frame_deeper(); + ASSERT_EQ(count + 1, deeper_count); +} + +static int killer_count = 0; +static int handler_count = 0; +static int handler_one_deeper_count = 0; + +static void noinline UnwindSignalHandler(int) { + _Unwind_Backtrace(FrameCounter, &handler_count); + ASSERT_GT(handler_count, killer_count); + + handler_one_deeper_count = unwind_one_frame_deeper(); + ASSERT_EQ(handler_count + 1, handler_one_deeper_count); +} + +TEST(stack_unwinding, unwind_through_signal_frame) { + ScopedSignalHandler ssh(SIGUSR1, UnwindSignalHandler); + + _Unwind_Backtrace(FrameCounter, &killer_count); + + ASSERT_EQ(0, kill(getpid(), SIGUSR1)); +} + +extern "C" void unwind_through_frame_with_cleanup_function(); + // We have to say "DeathTest" here so gtest knows to run this test (which exits) // in its own process. -TEST(stack_unwinding_DeathTest, unwinding_through_signal_frame) { -// Only our x86 unwinding is good enough. Switch to libunwind? -#if defined(__BIONIC__) && defined(__i386__) +TEST(stack_unwinding_DeathTest, unwind_through_frame_with_cleanup_function) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; - ASSERT_EXIT(do_test(), ::testing::ExitedWithCode(42), ""); -#else // __i386__ - GTEST_LOG_(INFO) << "This test does nothing.\n"; -#endif // __i386__ + ASSERT_EXIT(unwind_through_frame_with_cleanup_function(), ::testing::ExitedWithCode(42), ""); } diff --git a/tests/stack_unwinding_test_impl.c b/tests/stack_unwinding_test_impl.c index 7518a2cdd..2e0393847 100644 --- a/tests/stack_unwinding_test_impl.c +++ b/tests/stack_unwinding_test_impl.c @@ -18,52 +18,47 @@ * Contributed by: Intel Corporation */ -#include +#include #include +#include #include #include +#include #include #define noinline __attribute__((__noinline__)) -#define unused __attribute__((__unused__)) -static noinline _Unwind_Reason_Code stop_fn(int a unused, +#ifndef __unused +#define __unused __attribute__((__unused__)) +#endif + +static noinline _Unwind_Reason_Code cleanup_unwind_fn(int a __unused, _Unwind_Action action, - _Unwind_Exception_Class b unused, struct _Unwind_Exception* c unused, - struct _Unwind_Context* d unused, void* e unused) { + _Unwind_Exception_Class b __unused, + struct _Unwind_Exception* c __unused, + struct _Unwind_Context* ctx __unused, + void* e __unused) { if ((action & _UA_END_OF_STACK) != 0) { - // We reached the end of the stack without executing foo_cleanup. Test failed. - abort(); + abort(); // We reached the end of the stack without executing foo_cleanup (which would have exited). Test failed. } return _URC_NO_REASON; } -static void noinline foo_cleanup(char* param unused) { +static void noinline foo_cleanup(char* param __unused) { exit(42); } -static void noinline do_crash() { - char* ptr = NULL; - *ptr = 0; // Deliberately cause a SIGSEGV. +static void noinline function_with_cleanup_function() { + char c __attribute__((cleanup(foo_cleanup))) __unused; + *((int*) 1) = 0; } -static void noinline foo() { - char c1 __attribute__((cleanup(foo_cleanup))) unused; - do_crash(); +static void noinline cleanup_sigsegv_handler(int param __unused) { + struct _Unwind_Exception* exception = (struct _Unwind_Exception*) calloc(1, sizeof(*exception)); + _Unwind_ForcedUnwind(exception, cleanup_unwind_fn, 0); } -// It's SEGSEGV handler. We start forced stack unwinding here. -// If libgcc don't find dso for signal frame stack unwinding will be finished. -// libgcc pass to stop_fn _UA_END_OF_STACK flag. -// Test pass condition: stack unwinding through signal frame and foo1_handler execution. -static void noinline sigsegv_handler(int param unused) { - struct _Unwind_Exception* exception = (struct _Unwind_Exception*) malloc(sizeof(*exception)); - memset(&exception->exception_class, 0, sizeof(exception->exception_class)); - exception->exception_cleanup = 0; - _Unwind_ForcedUnwind(exception, stop_fn, 0); -} - -void do_test() { - signal(SIGSEGV, &sigsegv_handler); - foo(); +void unwind_through_frame_with_cleanup_function() { + signal(SIGSEGV, &cleanup_sigsegv_handler); + function_with_cleanup_function(); } From 8eb8c3929974060e0d8b5063886d6ed250198d41 Mon Sep 17 00:00:00 2001 From: Pavel Chupin Date: Fri, 26 Sep 2014 16:02:09 +0400 Subject: [PATCH 052/194] [x86,x86_64] Fix libgcc unwinding through signal This change provides __restore/__restore_rt on x86 and __restore_rt on x86_64 with unwinding information to be able to unwind through signal frame via libgcc provided unwinding interface. See comments inlined for more details. Also remove the test that had a dependency on __attribute__((cleanup(foo_cleanup))). It doesn't provide us with any better test coverage than we have from the newer tests, and it doesn't work well across a variety architectures (presumably because no one uses this attribute in the real world). Tested this on host via bionic-unit-tests-run-on-host on both x86 and x86-64. Bug: 17436734 Signed-off-by: Pavel Chupin (cherry picked from commit 50321e2e66f19998970e59d666bc9af387345b3a) Change-Id: Iba90e36958b00c7cc7db5eeebf888dc89ce4d619 --- libc/arch-x86/bionic/__restore.S | 104 ++++++++++++++++++++++- libc/arch-x86/bionic/__restore_rt.S | 36 -------- libc/arch-x86/x86.mk | 1 - libc/arch-x86_64/bionic/__restore_rt.S | 113 ++++++++++++++++++++++++- tests/Android.mk | 3 +- tests/ScopedSignalHandler.h | 5 +- tests/stack_unwinding_test.cpp | 17 ++-- tests/stack_unwinding_test_impl.c | 64 -------------- 8 files changed, 225 insertions(+), 118 deletions(-) delete mode 100644 libc/arch-x86/bionic/__restore_rt.S delete mode 100644 tests/stack_unwinding_test_impl.c diff --git a/libc/arch-x86/bionic/__restore.S b/libc/arch-x86/bionic/__restore.S index 755c3f8e5..cb18fd027 100644 --- a/libc/arch-x86/bionic/__restore.S +++ b/libc/arch-x86/bionic/__restore.S @@ -28,10 +28,108 @@ #include -// This function must have exactly this instruction sequence for gdb and libunwind. -// This function must have exactly this name for gdb. -ENTRY(__restore) +// DWARF constants. +#define DW_CFA_def_cfa_expression 0x0f +#define DW_CFA_expression 0x10 +#define DW_EH_PE_pcrel 0x10 +#define DW_EH_PE_sdata4 0x0b +#define DW_OP_breg4 0x74 +#define DW_OP_deref 0x06 + +// Offsets into struct sigcontext. +#define OFFSET_EDI 16 +#define OFFSET_ESI 20 +#define OFFSET_EBP 24 +#define OFFSET_ESP 28 +#define OFFSET_EBX 32 +#define OFFSET_EDX 36 +#define OFFSET_ECX 40 +#define OFFSET_EAX 44 +#define OFFSET_EIP 56 + +// Non-standard DWARF constants for the x86 registers. +#define DW_x86_REG_EAX 0 +#define DW_x86_REG_ECX 1 +#define DW_x86_REG_EDX 2 +#define DW_x86_REG_EBX 3 +#define DW_x86_REG_EBP 5 +#define DW_x86_REG_ESI 6 +#define DW_x86_REG_EDI 7 +#define DW_x86_REG_EIP 8 + +#define cfi_signal_frame_start(f) \ +.section .eh_frame,"a",@progbits; \ +.L ## f ## _START_EH_FRAME: \ + .long 2f - 1f; /* CIE length. */ \ +1:.long 0; /* CIE ID. */ \ + .byte 1; /* Version. */ \ + .string "zRS"; /* Augmentation string. */ \ + .uleb128 1; /* Code alignment factor. */ \ + .sleb128 -4; /* Data alignment factor. */ \ + .uleb128 DW_x86_REG_EIP; /* Return address register. */ \ + .uleb128 1; /* 1 byte of augmentation data. */ \ + .byte (DW_EH_PE_pcrel|DW_EH_PE_sdata4); /* FDE encoding. */ \ + .align 8; \ +2: \ + .long .L ## f ## _END_FDE - .L ## f ## _START_FDE; /* FDE length. */ \ +.L ## f ## _START_FDE: \ + .long .L ## f ## _START_FDE - .L ## f ## _START_EH_FRAME; /* CIE location. */ \ + .long (.L ## f ## _START - 1) - .; /* pcrel start address (see FDE encoding above). */ \ + .long .L ## f ## _END - (.L ## f ## _START - 1); /* Function this FDE applies to. */ \ + .uleb128 0; /* FDE augmentation length. */ \ + +#define cfi_signal_frame_end(f) \ +.L ## f ## _END_FDE: \ + +#define cfi_def_cfa(offset) \ + .byte DW_CFA_def_cfa_expression; \ + .uleb128 2f-1f; \ +1:.byte DW_OP_breg4; \ + .sleb128 offset; \ + .byte DW_OP_deref; \ +2: \ + +#define cfi_offset(reg_number,offset) \ + .byte DW_CFA_expression; \ + .uleb128 reg_number; \ + .uleb128 2f-1f; \ +1:.byte DW_OP_breg4; \ + .sleb128 offset; \ +2: \ + +ENTRY_PRIVATE(__restore) +.L__restore_START: popl %eax movl $__NR_sigreturn, %eax int $0x80 +.L__restore_END: END(__restore) +cfi_signal_frame_start(__restore) + cfi_def_cfa(OFFSET_ESP + 4) + cfi_offset(DW_x86_REG_EDI, OFFSET_EDI + 4) + cfi_offset(DW_x86_REG_ESI, OFFSET_ESI + 4) + cfi_offset(DW_x86_REG_EBP, OFFSET_EBP + 4) + cfi_offset(DW_x86_REG_EBX, OFFSET_EBX + 4) + cfi_offset(DW_x86_REG_EDX, OFFSET_EDX + 4) + cfi_offset(DW_x86_REG_ECX, OFFSET_ECX + 4) + cfi_offset(DW_x86_REG_EAX, OFFSET_EAX + 4) + cfi_offset(DW_x86_REG_EIP, OFFSET_EIP + 4) +cfi_signal_frame_end(__restore) + +ENTRY_PRIVATE(__restore_rt) +.L__restore_rt_START: + movl $__NR_rt_sigreturn, %eax + int $0x80 +.L__restore_rt_END: +END(__restore_rt) +cfi_signal_frame_start(__restore_rt) + cfi_def_cfa(OFFSET_ESP + 160) + cfi_offset(DW_x86_REG_EDI, OFFSET_EDI + 160) + cfi_offset(DW_x86_REG_ESI, OFFSET_ESI + 160) + cfi_offset(DW_x86_REG_EBP, OFFSET_EBP + 160) + cfi_offset(DW_x86_REG_EBX, OFFSET_EBX + 160) + cfi_offset(DW_x86_REG_EDX, OFFSET_EDX + 160) + cfi_offset(DW_x86_REG_ECX, OFFSET_ECX + 160) + cfi_offset(DW_x86_REG_EAX, OFFSET_EAX + 160) + cfi_offset(DW_x86_REG_EIP, OFFSET_EIP + 160) +cfi_signal_frame_end(__restore_rt) diff --git a/libc/arch-x86/bionic/__restore_rt.S b/libc/arch-x86/bionic/__restore_rt.S deleted file mode 100644 index 0cd808125..000000000 --- a/libc/arch-x86/bionic/__restore_rt.S +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -// This function must have exactly this instruction sequence for gdb and libunwind. -// This function must have exactly this name for gdb. -ENTRY(__restore_rt) - movl $__NR_rt_sigreturn, %eax - int $0x80 -END(__restore_rt) diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index 905519745..d90b1ceec 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -26,7 +26,6 @@ libc_bionic_src_files_x86 += \ arch-x86/bionic/__bionic_clone.S \ arch-x86/bionic/_exit_with_stack_teardown.S \ arch-x86/bionic/libgcc_compat.c \ - arch-x86/bionic/__restore_rt.S \ arch-x86/bionic/__restore.S \ arch-x86/bionic/_setjmp.S \ arch-x86/bionic/setjmp.S \ diff --git a/libc/arch-x86_64/bionic/__restore_rt.S b/libc/arch-x86_64/bionic/__restore_rt.S index d84be219a..785b3b378 100644 --- a/libc/arch-x86_64/bionic/__restore_rt.S +++ b/libc/arch-x86_64/bionic/__restore_rt.S @@ -28,9 +28,116 @@ #include -// This function must have exactly this instruction sequence for gdb and libunwind. -// This function must have exactly this name for gdb. -ENTRY(__restore_rt) +// DWARF constants. +#define DW_CFA_def_cfa_expression 0x0f +#define DW_CFA_expression 0x10 +#define DW_EH_PE_pcrel 0x10 +#define DW_EH_PE_sdata4 0x0b +#define DW_OP_breg4 0x74 +#define DW_OP_breg7 0x77 +#define DW_OP_deref 0x06 + +// Offsets into struct ucontext_t of uc_mcontext.gregs[x]. +#define OFFSET_R8 40 +#define OFFSET_R9 48 +#define OFFSET_R10 56 +#define OFFSET_R11 64 +#define OFFSET_R12 72 +#define OFFSET_R13 80 +#define OFFSET_R14 88 +#define OFFSET_R15 96 +#define OFFSET_RDI 104 +#define OFFSET_RSI 112 +#define OFFSET_RBP 120 +#define OFFSET_RSP 160 +#define OFFSET_RBX 128 +#define OFFSET_RDX 136 +#define OFFSET_RAX 144 +#define OFFSET_RCX 152 +#define OFFSET_RIP 168 + +// Non-standard DWARF constants for the x86-64 registers. +#define DW_x86_64_RAX 0 +#define DW_x86_64_RDX 1 +#define DW_x86_64_RCX 2 +#define DW_x86_64_RBX 3 +#define DW_x86_64_RSI 4 +#define DW_x86_64_RDI 5 +#define DW_x86_64_RBP 6 +#define DW_x86_64_RSP 7 +#define DW_x86_64_R8 8 +#define DW_x86_64_R9 9 +#define DW_x86_64_R10 10 +#define DW_x86_64_R11 11 +#define DW_x86_64_R12 12 +#define DW_x86_64_R13 13 +#define DW_x86_64_R14 14 +#define DW_x86_64_R15 15 +#define DW_x86_64_RIP 16 + +#define cfi_signal_frame_start(f) \ +.section .eh_frame,"a",@progbits; \ +.L ## f ## _START_EH_FRAME: \ + .long 2f - 1f; /* CIE length. */ \ +1:.long 0; /* CIE ID. */ \ + .byte 1; /* Version. */ \ + .string "zRS"; /* Augmentation string. */ \ + .uleb128 1; /* Code alignment factor. */ \ + .sleb128 -8; /* Data alignment factor. */ \ + .uleb128 DW_x86_64_RIP; /* Return address register. */ \ + .uleb128 1; /* 1 byte of augmentation data. */ \ + .byte (DW_EH_PE_pcrel | DW_EH_PE_sdata4); /* FDE encoding. */ \ + .align 8; \ +2: \ + .long .L ## f ## _END_FDE - .L ## f ## _START_FDE; /* FDE length. */ \ +.L ## f ## _START_FDE: \ + .long .L ## f ## _START_FDE - .L ## f ## _START_EH_FRAME; /* CIE location. */ \ + .long (.L ## f ## _START - 1) - .; /* pcrel start address (see FDE encoding above). */ \ + .long .L ## f ## _END - (.L ## f ## _START - 1); /* Function this FDE applies to. */ \ + .uleb128 0; /* FDE augmentation length. */ \ + +#define cfi_signal_frame_end(f) \ +.L ## f ## _END_FDE: \ + +#define cfi_def_cfa(offset) \ + .byte DW_CFA_def_cfa_expression; \ + .uleb128 2f-1f; \ +1:.byte DW_OP_breg7; \ + .sleb128 offset; \ + .byte DW_OP_deref; \ +2: \ + +#define cfi_offset(reg_number,offset) \ + .byte DW_CFA_expression; \ + .uleb128 reg_number; \ + .uleb128 2f-1f; \ +1:.byte DW_OP_breg7; \ + .sleb128 offset; \ +2: \ + +ENTRY_PRIVATE(__restore_rt) +.L__restore_rt_START: mov $__NR_rt_sigreturn, %rax syscall +.L__restore_rt_END: END(__restore_rt) +cfi_signal_frame_start(__restore_rt) + cfi_def_cfa(OFFSET_RSP) + cfi_offset(DW_x86_64_R8, OFFSET_R8) + cfi_offset(DW_x86_64_R9, OFFSET_R9) + cfi_offset(DW_x86_64_R10, OFFSET_R10) + cfi_offset(DW_x86_64_R11, OFFSET_R11) + cfi_offset(DW_x86_64_R12, OFFSET_R12) + cfi_offset(DW_x86_64_R13, OFFSET_R13) + cfi_offset(DW_x86_64_R14, OFFSET_R14) + cfi_offset(DW_x86_64_R15, OFFSET_R15) + cfi_offset(DW_x86_64_RDI, OFFSET_RDI) + cfi_offset(DW_x86_64_RSI, OFFSET_RSI) + cfi_offset(DW_x86_64_RBP, OFFSET_RBP) + cfi_offset(DW_x86_64_RSP, OFFSET_RSP) + cfi_offset(DW_x86_64_RBX, OFFSET_RBX) + cfi_offset(DW_x86_64_RDX, OFFSET_RDX) + cfi_offset(DW_x86_64_RAX, OFFSET_RAX) + cfi_offset(DW_x86_64_RCX, OFFSET_RCX) + cfi_offset(DW_x86_64_RIP, OFFSET_RIP) +cfi_signal_frame_end(__restore_rt) diff --git a/tests/Android.mk b/tests/Android.mk index 23a2cb3ed..407f21bc5 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -88,6 +88,7 @@ libBionicStandardTests_src_files := \ search_test.cpp \ signal_test.cpp \ stack_protector_test.cpp \ + stack_unwinding_test.cpp \ stdatomic_test.cpp \ stdint_test.cpp \ stdio_test.cpp \ @@ -224,8 +225,6 @@ bionic-unit-tests_src_files := \ atexit_test.cpp \ dlext_test.cpp \ dlfcn_test.cpp \ - stack_unwinding_test.cpp \ - stack_unwinding_test_impl.c \ bionic-unit-tests_cflags := $(test_cflags) diff --git a/tests/ScopedSignalHandler.h b/tests/ScopedSignalHandler.h index 89a14a6b2..3ec23b0d8 100644 --- a/tests/ScopedSignalHandler.h +++ b/tests/ScopedSignalHandler.h @@ -21,9 +21,10 @@ class ScopedSignalHandler { public: - ScopedSignalHandler(int signal_number, void (*handler)(int)) : signal_number_(signal_number) { + ScopedSignalHandler(int signal_number, void (*handler)(int), int sa_flags = 0) + : signal_number_(signal_number) { sigemptyset(&action_.sa_mask); - action_.sa_flags = 0; + action_.sa_flags = sa_flags; action_.sa_handler = handler; sigaction(signal_number_, &action_, &old_action_); } diff --git a/tests/stack_unwinding_test.cpp b/tests/stack_unwinding_test.cpp index 017a5f2e8..3fc45c537 100644 --- a/tests/stack_unwinding_test.cpp +++ b/tests/stack_unwinding_test.cpp @@ -31,7 +31,8 @@ #include "ScopedSignalHandler.h" -#define noinline __attribute__((noinline)) +#define noinline __attribute__((__noinline__)) +#define __unused __attribute__((__unused__)) static _Unwind_Reason_Code FrameCounter(_Unwind_Context* ctx __unused, void* arg) { int* count_ptr = reinterpret_cast(arg); @@ -85,6 +86,7 @@ static void noinline UnwindSignalHandler(int) { } TEST(stack_unwinding, unwind_through_signal_frame) { + killer_count = handler_count = handler_one_deeper_count = 0; ScopedSignalHandler ssh(SIGUSR1, UnwindSignalHandler); _Unwind_Backtrace(FrameCounter, &killer_count); @@ -92,11 +94,12 @@ TEST(stack_unwinding, unwind_through_signal_frame) { ASSERT_EQ(0, kill(getpid(), SIGUSR1)); } -extern "C" void unwind_through_frame_with_cleanup_function(); +// On LP32, the SA_SIGINFO flag gets you __restore_rt instead of __restore. +TEST(stack_unwinding, unwind_through_signal_frame_SA_SIGINFO) { + killer_count = handler_count = handler_one_deeper_count = 0; + ScopedSignalHandler ssh(SIGUSR1, UnwindSignalHandler, SA_SIGINFO); -// We have to say "DeathTest" here so gtest knows to run this test (which exits) -// in its own process. -TEST(stack_unwinding_DeathTest, unwind_through_frame_with_cleanup_function) { - ::testing::FLAGS_gtest_death_test_style = "threadsafe"; - ASSERT_EXIT(unwind_through_frame_with_cleanup_function(), ::testing::ExitedWithCode(42), ""); + _Unwind_Backtrace(FrameCounter, &killer_count); + + ASSERT_EQ(0, kill(getpid(), SIGUSR1)); } diff --git a/tests/stack_unwinding_test_impl.c b/tests/stack_unwinding_test_impl.c deleted file mode 100644 index 2e0393847..000000000 --- a/tests/stack_unwinding_test_impl.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Contributed by: Intel Corporation - */ - -#include -#include -#include -#include -#include -#include -#include - -#define noinline __attribute__((__noinline__)) - -#ifndef __unused -#define __unused __attribute__((__unused__)) -#endif - -static noinline _Unwind_Reason_Code cleanup_unwind_fn(int a __unused, - _Unwind_Action action, - _Unwind_Exception_Class b __unused, - struct _Unwind_Exception* c __unused, - struct _Unwind_Context* ctx __unused, - void* e __unused) { - if ((action & _UA_END_OF_STACK) != 0) { - abort(); // We reached the end of the stack without executing foo_cleanup (which would have exited). Test failed. - } - return _URC_NO_REASON; -} - -static void noinline foo_cleanup(char* param __unused) { - exit(42); -} - -static void noinline function_with_cleanup_function() { - char c __attribute__((cleanup(foo_cleanup))) __unused; - *((int*) 1) = 0; -} - -static void noinline cleanup_sigsegv_handler(int param __unused) { - struct _Unwind_Exception* exception = (struct _Unwind_Exception*) calloc(1, sizeof(*exception)); - _Unwind_ForcedUnwind(exception, cleanup_unwind_fn, 0); -} - -void unwind_through_frame_with_cleanup_function() { - signal(SIGSEGV, &cleanup_sigsegv_handler); - function_with_cleanup_function(); -} From 28ea229bb29f3ee82991ca8b5ac5f7a9b7b89fdc Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 4 Sep 2014 13:54:42 -0700 Subject: [PATCH 053/194] Don't mask out SA_RESTORER from sa_flags. glibc doesn't do this, and we probably shouldn't either. Bug: 16703540 Bug: 17436734 (cherry picked from commit afe58ad9892de27a7acb0aaded6312ee0f958314) Change-Id: Iada5d0ae814f438cb276f056b2b5e3675f0e3666 --- libc/bionic/sigaction.cpp | 4 ---- tests/signal_test.cpp | 16 +++++++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/libc/bionic/sigaction.cpp b/libc/bionic/sigaction.cpp index 9038bd544..0633748bf 100644 --- a/libc/bionic/sigaction.cpp +++ b/libc/bionic/sigaction.cpp @@ -69,10 +69,6 @@ int sigaction(int signal, const struct sigaction* bionic_new_action, struct siga bionic_old_action->sa_mask = kernel_old_action.sa_mask; #if defined(SA_RESTORER) bionic_old_action->sa_restorer = kernel_old_action.sa_restorer; - - if (bionic_old_action->sa_restorer == &__rt_sigreturn) { - bionic_old_action->sa_flags &= ~SA_RESTORER; - } #endif } diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp index 89b808838..e53fd3af6 100644 --- a/tests/signal_test.cpp +++ b/tests/signal_test.cpp @@ -14,10 +14,10 @@ * limitations under the License. */ -#include +#include #include -#include +#include #include "ScopedSignalHandler.h" @@ -198,13 +198,19 @@ static void EmptySignalHandler(int) {} static void EmptySignalAction(int, siginfo_t*, void*) {} TEST(signal, sigaction) { + // Both bionic and glibc set SA_RESTORER when talking to the kernel on arm, + // arm64, x86, and x86-64. The version of glibc we're using also doesn't + // define SA_RESTORER, but luckily it's the same value everywhere, and mips + // doesn't use the bit for anything. + static const int sa_restorer = 0x4000000; + // See what's currently set for SIGALRM. struct sigaction original_sa; memset(&original_sa, 0, sizeof(original_sa)); ASSERT_EQ(0, sigaction(SIGALRM, NULL, &original_sa)); ASSERT_TRUE(original_sa.sa_handler == NULL); ASSERT_TRUE(original_sa.sa_sigaction == NULL); - ASSERT_TRUE(original_sa.sa_flags == 0); + ASSERT_EQ(0, original_sa.sa_flags & ~sa_restorer); // Set a traditional sa_handler signal handler. struct sigaction sa; @@ -219,7 +225,7 @@ TEST(signal, sigaction) { ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa)); ASSERT_TRUE(sa.sa_handler == EmptySignalHandler); ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler); - ASSERT_TRUE(sa.sa_flags == SA_ONSTACK); + ASSERT_EQ(SA_ONSTACK, sa.sa_flags & ~sa_restorer); // Set a new-style sa_sigaction signal handler. memset(&sa, 0, sizeof(sa)); @@ -233,7 +239,7 @@ TEST(signal, sigaction) { ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa)); ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction); ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler); - ASSERT_TRUE(sa.sa_flags == (SA_ONSTACK | SA_SIGINFO)); + ASSERT_EQ((SA_ONSTACK | SA_SIGINFO), sa.sa_flags & ~sa_restorer); // Put everything back how it was. ASSERT_EQ(0, sigaction(SIGALRM, &original_sa, NULL)); From 43dc3a9aae7ad1f16a251e3c1e22dced82b811e3 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 23 Sep 2014 18:31:45 -0700 Subject: [PATCH 054/194] Remove the unnecessary generic-neon code. Bug: 18156619 (cherry picked from commit 2169e17482da91865e412e55b52b88d7c8db47f6) Change-Id: I4a7f5bb9ad4c27b274f3a3c86c1617ca0578b98f --- libc/arch-arm64/arm64.mk | 2 +- libc/arch-arm64/generic-neon/bionic/memcpy.S | 179 ------------------- libc/arch-arm64/generic-neon/generic-neon.mk | 13 -- 3 files changed, 1 insertion(+), 193 deletions(-) delete mode 100644 libc/arch-arm64/generic-neon/bionic/memcpy.S delete mode 100644 libc/arch-arm64/generic-neon/generic-neon.mk diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index eb65cfd1f..692aaf606 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -52,7 +52,7 @@ ifeq ($(strip $(TARGET_CPU_VARIANT)),) endif cpu_variant_mk := $(LOCAL_PATH)/arch-arm64/$(TARGET_CPU_VARIANT)/$(TARGET_CPU_VARIANT).mk ifeq ($(wildcard $(cpu_variant_mk)),) -$(error "TARGET_CPU_VARIANT not set or set to an unknown value. Possible values are generic, generic-neon, denver64. Use generic for devices that do not have a CPU similar to any of the supported cpu variants.") +$(error "TARGET_CPU_VARIANT not set or set to an unknown value. Possible values are generic, denver64. Use generic for devices that do not have a CPU similar to any of the supported cpu variants.") endif include $(cpu_variant_mk) libc_common_additional_dependencies += $(cpu_variank_mk) diff --git a/libc/arch-arm64/generic-neon/bionic/memcpy.S b/libc/arch-arm64/generic-neon/bionic/memcpy.S deleted file mode 100644 index 320f74896..000000000 --- a/libc/arch-arm64/generic-neon/bionic/memcpy.S +++ /dev/null @@ -1,179 +0,0 @@ -/* Copyright (c) 2012, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* Assumptions: - * - * ARMv8-a, AArch64 - * Unaligned accesses - * - */ - -#include - -#define dstin x0 -#define src x1 -#define count x2 -#define tmp1 x3 -#define tmp1w w3 -#define tmp2 x4 -#define tmp2w w4 -#define tmp3 x5 -#define tmp3w w5 -#define dst x6 - -#define A_l x7 -#define A_h x8 -#define B_l x9 -#define B_h x10 -#define C_l x11 -#define C_h x12 -#define D_l x13 -#define D_h x14 - -#define QA_l q0 -#define QA_h q1 -#define QB_l q2 -#define QB_h q3 - -ENTRY(memcpy) - - mov dst, dstin - cmp count, #64 - b.ge .Lcpy_not_short - cmp count, #15 - b.le .Ltail15tiny - - /* Deal with small copies quickly by dropping straight into the - * exit block. */ -.Ltail63: - /* Copy up to 48 bytes of data. At this point we only need the - * bottom 6 bits of count to be accurate. */ - ands tmp1, count, #0x30 - b.eq .Ltail15 - add dst, dst, tmp1 - add src, src, tmp1 - cmp tmp1w, #0x20 - b.eq 1f - b.lt 2f - ldp A_l, A_h, [src, #-48] - stp A_l, A_h, [dst, #-48] -1: - ldp A_l, A_h, [src, #-32] - stp A_l, A_h, [dst, #-32] -2: - ldp A_l, A_h, [src, #-16] - stp A_l, A_h, [dst, #-16] - -.Ltail15: - ands count, count, #15 - beq 1f - add src, src, count - ldp A_l, A_h, [src, #-16] - add dst, dst, count - stp A_l, A_h, [dst, #-16] -1: - ret - -.Ltail15tiny: - /* Copy up to 15 bytes of data. Does not assume additional data - being copied. */ - tbz count, #3, 1f - ldr tmp1, [src], #8 - str tmp1, [dst], #8 -1: - tbz count, #2, 1f - ldr tmp1w, [src], #4 - str tmp1w, [dst], #4 -1: - tbz count, #1, 1f - ldrh tmp1w, [src], #2 - strh tmp1w, [dst], #2 -1: - tbz count, #0, 1f - ldrb tmp1w, [src] - strb tmp1w, [dst] -1: - ret - -.Lcpy_not_short: - /* We don't much care about the alignment of DST, but we want SRC - * to be 128-bit (16 byte) aligned so that we don't cross cache line - * boundaries on both loads and stores. */ - neg tmp2, src - ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ - b.eq 2f - sub count, count, tmp2 - /* Copy more data than needed; it's faster than jumping - * around copying sub-Quadword quantities. We know that - * it can't overrun. */ - ldp A_l, A_h, [src] - add src, src, tmp2 - stp A_l, A_h, [dst] - add dst, dst, tmp2 - /* There may be less than 63 bytes to go now. */ - cmp count, #63 - b.le .Ltail63 -2: - subs count, count, #128 - b.ge .Lcpy_body_large - /* Less than 128 bytes to copy, so handle 64 here and then jump - * to the tail. */ - ldp QA_l, QA_h, [src] - ldp QB_l, QB_h, [src, #32] - stp QA_l, QA_h, [dst] - stp QB_l, QB_h, [dst, #32] - tst count, #0x3f - add src, src, #64 - add dst, dst, #64 - b.ne .Ltail63 - ret - - /* Critical loop. Start at a new cache line boundary. Assuming - * 64 bytes per line this ensures the entire loop is in one line. */ - .p2align 6 -.Lcpy_body_large: - /* There are at least 128 bytes to copy. */ - ldp QA_l, QA_h, [src, #0] - sub dst, dst, #32 /* Pre-bias. */ - ldp QB_l, QB_h, [src, #32]! /* src += 64 - Pre-bias. */ -1: - stp QA_l, QA_h, [dst, #32] - ldp QA_l, QA_h, [src, #32] - stp QB_l, QB_h, [dst, #64]! - ldp QB_l, QB_h, [src, #64]! - - subs count, count, #64 - b.ge 1b - - stp QA_l, QA_h, [dst, #32] - stp QB_l, QB_h, [dst, #64] - add src, src, #32 - add dst, dst, #64 + 32 - tst count, #0x3f - b.ne .Ltail63 - ret -END(memcpy) diff --git a/libc/arch-arm64/generic-neon/generic-neon.mk b/libc/arch-arm64/generic-neon/generic-neon.mk deleted file mode 100644 index 77e3861ea..000000000 --- a/libc/arch-arm64/generic-neon/generic-neon.mk +++ /dev/null @@ -1,13 +0,0 @@ -libc_bionic_src_files_arm64 += \ - arch-arm64/generic/bionic/memchr.S \ - arch-arm64/generic/bionic/memcmp.S \ - arch-arm64/generic/bionic/memmove.S \ - arch-arm64/generic/bionic/memset.S \ - arch-arm64/generic/bionic/stpcpy.S \ - arch-arm64/generic/bionic/strchr.S \ - arch-arm64/generic/bionic/strcmp.S \ - arch-arm64/generic/bionic/strcpy.S \ - arch-arm64/generic/bionic/strlen.S \ - arch-arm64/generic/bionic/strncmp.S \ - arch-arm64/generic/bionic/strnlen.S \ - arch-arm64/generic-neon/bionic/memcpy.S \ From 22e2c9d963e0dde19e5876ab8dfc3576efc42ccc Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 4 Sep 2014 15:43:10 -0700 Subject: [PATCH 055/194] Fix mips signed/unsigned signal_test.cpp build breakage. (cherry picked from commit aa13e839f06231b9299bb683a71abd954294b49b) Bug: 17436734 Change-Id: I167fc5d74c49cca7031c5739bc53fdf3bde71887 --- tests/signal_test.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp index e53fd3af6..8fd8b72f7 100644 --- a/tests/signal_test.cpp +++ b/tests/signal_test.cpp @@ -202,7 +202,7 @@ TEST(signal, sigaction) { // arm64, x86, and x86-64. The version of glibc we're using also doesn't // define SA_RESTORER, but luckily it's the same value everywhere, and mips // doesn't use the bit for anything. - static const int sa_restorer = 0x4000000; + static const unsigned sa_restorer = 0x4000000; // See what's currently set for SIGALRM. struct sigaction original_sa; @@ -210,7 +210,7 @@ TEST(signal, sigaction) { ASSERT_EQ(0, sigaction(SIGALRM, NULL, &original_sa)); ASSERT_TRUE(original_sa.sa_handler == NULL); ASSERT_TRUE(original_sa.sa_sigaction == NULL); - ASSERT_EQ(0, original_sa.sa_flags & ~sa_restorer); + ASSERT_EQ(0U, original_sa.sa_flags & ~sa_restorer); // Set a traditional sa_handler signal handler. struct sigaction sa; @@ -225,7 +225,7 @@ TEST(signal, sigaction) { ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa)); ASSERT_TRUE(sa.sa_handler == EmptySignalHandler); ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler); - ASSERT_EQ(SA_ONSTACK, sa.sa_flags & ~sa_restorer); + ASSERT_EQ(static_cast(SA_ONSTACK), sa.sa_flags & ~sa_restorer); // Set a new-style sa_sigaction signal handler. memset(&sa, 0, sizeof(sa)); @@ -239,7 +239,7 @@ TEST(signal, sigaction) { ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa)); ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction); ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler); - ASSERT_EQ((SA_ONSTACK | SA_SIGINFO), sa.sa_flags & ~sa_restorer); + ASSERT_EQ(static_cast(SA_ONSTACK | SA_SIGINFO), sa.sa_flags & ~sa_restorer); // Put everything back how it was. ASSERT_EQ(0, sigaction(SIGALRM, &original_sa, NULL)); From b378c27226cc264c9273c5011235ec78a8b256da Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 16 Sep 2014 16:27:35 -0700 Subject: [PATCH 056/194] No arm source refers to SOFTFLOAT. So why bother #defining it? Bug: 18160821 (cherry picked from commit b1a6c319c40674d71e30313040d3b33b8bddf24b) Change-Id: I9cd9c144ba7071fddda12fa16d1232ad861b66be --- libc/arch-arm/arm.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index b1edfccf3..8c5e68174 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -44,8 +44,6 @@ libc_common_src_files_arm += \ # bionic/__strcpy_chk.cpp \ # bionic/__strcat_chk.cpp \ -libc_common_cflags_arm := -DSOFTFLOAT - ########################################## ### CPU specific source files libc_bionic_src_files_arm += \ From 86d16a053eeff3bd432695471d8942e99b2db598 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 16 Sep 2014 19:06:31 -0700 Subject: [PATCH 057/194] Clean up the architecture-specific makefiles. Group things appropriately and name each group. Bug: 18160821 (cherry picked from commit 7c02d9428ca18ac600f7ba7d51bb24ca71e733f6) Change-Id: I863242515af44058154d03e2d8c34678e682d66a --- libc/Android.mk | 2 ++ libc/arch-arm/arm.mk | 44 ++++++++++++++++-------------- libc/arch-arm64/arm64.mk | 29 ++++++++++++-------- libc/arch-mips/mips.mk | 56 +++++++++++++++++++++++--------------- libc/arch-mips64/mips64.mk | 49 +++++++++++++++++---------------- libc/arch-x86/x86.mk | 36 +++++++++++++++--------- libc/arch-x86_64/x86_64.mk | 44 ++++++++++++++++++------------ 7 files changed, 153 insertions(+), 107 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index 92ead2637..61bdf7e23 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -692,6 +692,7 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) +$(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_freebsd_src_files)) include $(BUILD_STATIC_LIBRARY) @@ -760,6 +761,7 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_SYSTEM_SHARED_LIBRARIES := $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) +$(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_openbsd_src_files)) include $(BUILD_STATIC_LIBRARY) diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index 8c5e68174..b5ed7f0e0 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -1,22 +1,35 @@ -# arm specific configs +# 32-bit arm. -# These are used by the 32-bit targets, but not the 64-bit ones. -libc_common_src_files_arm := \ +# +# Various kinds of LP32 cruft. +# + +libc_bionic_src_files_arm += \ + bionic/mmap.cpp \ + +libc_common_src_files_arm += \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ bionic/time64.c \ + +libc_netbsd_src_files_arm += \ + upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ + +libc_openbsd_src_files_arm += \ upstream-openbsd/lib/libc/stdio/putw.c \ -# These are shared by all the 32-bit targets, but not the 64-bit ones. -libc_bionic_src_files_arm := \ - bionic/mmap.cpp +# +# Default implementations of functions that are commonly optimized. +# -libc_common_src_files_arm += \ +libc_bionic_src_files_arm += \ bionic/memchr.c \ bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ + +libc_freebsd_src_files_arm += \ upstream-freebsd/lib/libc/string/wcscat.c \ upstream-freebsd/lib/libc/string/wcschr.c \ upstream-freebsd/lib/libc/string/wcscmp.c \ @@ -25,6 +38,8 @@ libc_common_src_files_arm += \ upstream-freebsd/lib/libc/string/wcsrchr.c \ upstream-freebsd/lib/libc/string/wmemcmp.c \ upstream-freebsd/lib/libc/string/wmemmove.c \ + +libc_openbsd_src_files_arm += \ upstream-openbsd/lib/libc/string/bcopy.c \ upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ @@ -34,18 +49,10 @@ libc_common_src_files_arm += \ upstream-openbsd/lib/libc/string/strncmp.c \ upstream-openbsd/lib/libc/string/strncpy.c \ -# The C++ fortify function implementations for which there is an -# arm assembler version. # -# Fortify implementations of libc functions. -# libc_common_src_files_arm += -# bionic/__memcpy_chk.cpp \ -# bionic/__memset_chk.cpp \ -# bionic/__strcpy_chk.cpp \ -# bionic/__strcat_chk.cpp \ +# Inherently architecture-specific code. +# -########################################## -### CPU specific source files libc_bionic_src_files_arm += \ arch-arm/bionic/abort_arm.S \ arch-arm/bionic/atomics_arm.c \ @@ -62,9 +69,6 @@ libc_bionic_src_files_arm += \ libc_arch_static_src_files_arm := arch-arm/bionic/exidx_static.c libc_arch_dynamic_src_files_arm := arch-arm/bionic/exidx_dynamic.c -libc_netbsd_src_files_arm := \ - upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ - ## CPU variant specific source files ifeq ($(strip $(TARGET_$(my_2nd_arch_prefix)CPU_VARIANT)),) $(warning TARGET_$(my_2nd_arch_prefix)ARCH is arm, but TARGET_$(my_2nd_arch_prefix)CPU_VARIANT is not defined) diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index 692aaf606..cdb2777b1 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -1,8 +1,18 @@ -# arm64 specific configs +# 64-bit arm. -libc_common_src_files_arm64 := \ +# +# Default implementations of functions that are commonly optimized. +# + +libc_bionic_src_files_arm64 += \ + bionic/__memcpy_chk.cpp \ + bionic/__memset_chk.cpp \ + bionic/__strcpy_chk.cpp \ + bionic/__strcat_chk.cpp \ bionic/memrchr.c \ bionic/strrchr.cpp \ + +libc_freebsd_src_files_arm64 += \ upstream-freebsd/lib/libc/string/wcscat.c \ upstream-freebsd/lib/libc/string/wcschr.c \ upstream-freebsd/lib/libc/string/wcscmp.c \ @@ -10,6 +20,8 @@ libc_common_src_files_arm64 := \ upstream-freebsd/lib/libc/string/wcslen.c \ upstream-freebsd/lib/libc/string/wcsrchr.c \ upstream-freebsd/lib/libc/string/wmemcmp.c \ + +libc_openbsd_src_files_arm64 += \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ upstream-openbsd/lib/libc/string/strlcat.c \ @@ -17,16 +29,11 @@ libc_common_src_files_arm64 := \ upstream-openbsd/lib/libc/string/strncat.c \ upstream-openbsd/lib/libc/string/strncpy.c \ -# Fortify implementations of libc functions. -libc_common_src_files_arm64 += \ - bionic/__memcpy_chk.cpp \ - bionic/__memset_chk.cpp \ - bionic/__strcpy_chk.cpp \ - bionic/__strcat_chk.cpp \ +# +# Inherently architecture-specific code. +# -########################################## -### CPU specific source files -libc_bionic_src_files_arm64 := \ +libc_bionic_src_files_arm64 += \ arch-arm64/bionic/__bionic_clone.S \ arch-arm64/bionic/_exit_with_stack_teardown.S \ arch-arm64/bionic/_setjmp.S \ diff --git a/libc/arch-mips/mips.mk b/libc/arch-mips/mips.mk index 31a1f32fd..ac75a4bbb 100644 --- a/libc/arch-mips/mips.mk +++ b/libc/arch-mips/mips.mk @@ -1,17 +1,32 @@ -# mips specific configs +# 32-bit mips. -# These are shared by all the 32-bit targets, but not the 64-bit ones. -libc_common_src_files_mips := \ +# +# Various kinds of LP32 cruft. +# + +libc_bionic_src_files_mips += \ + bionic/mmap.cpp \ + +libc_common_src_files_mips += \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ bionic/time64.c \ + +libc_netbsd_src_files_mips += \ + upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ + +libc_openbsd_src_files_mips += \ upstream-openbsd/lib/libc/stdio/putw.c \ -# These are shared by all the 32-bit targets, but not the 64-bit ones. -libc_bionic_src_files_mips += \ - bionic/mmap.cpp +# +# Default implementations of functions that are commonly optimized. +# -libc_common_src_files_mips += \ +libc_bionic_src_files_mips += \ + bionic/__memcpy_chk.cpp \ + bionic/__memset_chk.cpp \ + bionic/__strcpy_chk.cpp \ + bionic/__strcat_chk.cpp \ bionic/memchr.c \ bionic/memcmp.c \ bionic/memmove.c \ @@ -19,6 +34,8 @@ libc_common_src_files_mips += \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ + +libc_freebsd_src_files_mips += \ upstream-freebsd/lib/libc/string/wcscat.c \ upstream-freebsd/lib/libc/string/wcschr.c \ upstream-freebsd/lib/libc/string/wcscmp.c \ @@ -27,6 +44,8 @@ libc_common_src_files_mips += \ upstream-freebsd/lib/libc/string/wcsrchr.c \ upstream-freebsd/lib/libc/string/wmemcmp.c \ upstream-freebsd/lib/libc/string/wmemmove.c \ + +libc_openbsd_src_files_mips += \ upstream-openbsd/lib/libc/string/bcopy.c \ upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ @@ -39,16 +58,10 @@ libc_common_src_files_mips += \ upstream-openbsd/lib/libc/string/strncmp.c \ upstream-openbsd/lib/libc/string/strncpy.c \ -# Fortify implementations of libc functions. -libc_common_src_files_mips += \ - bionic/__memcpy_chk.cpp \ - bionic/__memset_chk.cpp \ - bionic/__strcpy_chk.cpp \ - bionic/__strcat_chk.cpp \ +# +# Inherently architecture-specific code. +# - -########################################## -### CPU specific source files libc_bionic_src_files_mips += \ arch-mips/bionic/__bionic_clone.S \ arch-mips/bionic/bzero.S \ @@ -69,13 +82,12 @@ libc_bionic_src_files_mips += \ else libc_bionic_src_files_mips += \ bionic/memcpy.cpp \ - bionic/memset.c -libc_common_src_files_mips += \ - upstream-openbsd/lib/libc/string/strlen.c -endif + bionic/memset.c \ -libc_netbsd_src_files_mips := \ - upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ +libc_openbsd_src_files_mips += \ + upstream-openbsd/lib/libc/string/strlen.c \ + +endif libc_crt_target_cflags_mips := \ $($(my_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) \ diff --git a/libc/arch-mips64/mips64.mk b/libc/arch-mips64/mips64.mk index 230cb26c5..0d4b72742 100644 --- a/libc/arch-mips64/mips64.mk +++ b/libc/arch-mips64/mips64.mk @@ -1,13 +1,25 @@ -# mips64 specific configs +# 64-bit mips. -libc_common_src_files_mips64 := \ +# +# Default implementations of functions that are commonly optimized. +# + +libc_bionic_src_files_mips64 += \ + bionic/__memcpy_chk.cpp \ + bionic/__memset_chk.cpp \ + bionic/__strcpy_chk.cpp \ + bionic/__strcat_chk.cpp \ bionic/memchr.c \ bionic/memcmp.c \ + bionic/memcpy.cpp \ bionic/memmove.c \ bionic/memrchr.c \ + bionic/memset.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ + +libc_freebsd_src_files_mips64 += \ upstream-freebsd/lib/libc/string/wcscat.c \ upstream-freebsd/lib/libc/string/wcschr.c \ upstream-freebsd/lib/libc/string/wcscmp.c \ @@ -16,6 +28,8 @@ libc_common_src_files_mips64 := \ upstream-freebsd/lib/libc/string/wcsrchr.c \ upstream-freebsd/lib/libc/string/wmemcmp.c \ upstream-freebsd/lib/libc/string/wmemmove.c \ + +libc_openbsd_src_files_mips64 += \ upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ @@ -28,17 +42,11 @@ libc_common_src_files_mips64 := \ upstream-openbsd/lib/libc/string/strncmp.c \ upstream-openbsd/lib/libc/string/strncpy.c \ -# Fortify implementations of libc functions. -libc_common_src_files_mips64 += \ - bionic/__memcpy_chk.cpp \ - bionic/__memset_chk.cpp \ - bionic/__strcpy_chk.cpp \ - bionic/__strcat_chk.cpp \ +# +# Inherently architecture-specific code. +# - -########################################## -### CPU specific source files -libc_bionic_src_files_mips64 := \ +libc_bionic_src_files_mips64 += \ arch-mips64/bionic/__bionic_clone.S \ arch-mips64/bionic/_exit_with_stack_teardown.S \ arch-mips64/bionic/__get_sp.S \ @@ -48,25 +56,18 @@ libc_bionic_src_files_mips64 := \ arch-mips64/bionic/syscall.S \ arch-mips64/bionic/vfork.S \ -# FIXME TODO -## libc_bionic_src_files_mips64 += arch-mips64/string/memcpy.S -## libc_bionic_src_files_mips64 += arch-mips64/string/memset.S -libc_bionic_src_files_mips64 += bionic/memcpy.cpp -libc_bionic_src_files_mips64 += bionic/memset.c - - libc_crt_target_cflags_mips64 := \ $($(my_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) \ - -I$(LOCAL_PATH)/arch-mips64/include + -I$(LOCAL_PATH)/arch-mips64/include \ libc_crt_target_crtbegin_file_mips64 := \ - $(LOCAL_PATH)/arch-mips64/bionic/crtbegin.c + $(LOCAL_PATH)/arch-mips64/bionic/crtbegin.c \ libc_crt_target_crtbegin_so_file_mips64 := \ - $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c + $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c \ libc_crt_target_so_cflags_mips64 := \ - -fPIC + -fPIC \ libc_crt_target_ldflags_mips64 := \ - -melf64ltsmip + -melf64ltsmip \ diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index d90b1ceec..2c90317db 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -1,27 +1,40 @@ -# x86 specific configs +# 32-bit x86. -# These are shared by all the 32-bit targets, but not the 64-bit ones. -libc_common_src_files_x86 := \ +# +# Various kinds of LP32 cruft. +# + +libc_bionic_src_files_x86 += \ + bionic/mmap.cpp \ + +libc_common_src_files_x86 += \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ bionic/time64.c \ + +libc_netbsd_src_files_x86 += \ + upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ + +libc_openbsd_src_files_x86 += \ upstream-openbsd/lib/libc/stdio/putw.c \ -# Fortify implementations of libc functions. +# +# Default implementations of functions that are commonly optimized. +# + libc_common_src_files_x86 += \ bionic/__memcpy_chk.cpp \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ + +libc_freebsd_src_files_x86 += \ upstream-freebsd/lib/libc/string/wmemmove.c \ +# +# Inherently architecture-specific functions. +# -# These are shared by all the 32-bit targets, but not the 64-bit ones. -libc_bionic_src_files_x86 := \ - bionic/mmap.cpp - -########################################## -### CPU specific source files libc_bionic_src_files_x86 += \ arch-x86/bionic/__bionic_clone.S \ arch-x86/bionic/_exit_with_stack_teardown.S \ @@ -42,9 +55,6 @@ endif include $(arch_variant_mk) libc_common_additional_dependencies += $(arch_variant_mk) -libc_netbsd_src_files_x86 := \ - upstream-netbsd/common/lib/libc/hash/sha1/sha1.c \ - arch_variant_mk := libc_crt_target_cflags_x86 := \ diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk index 5f12a49d7..8675ef45a 100644 --- a/libc/arch-x86_64/x86_64.mk +++ b/libc/arch-x86_64/x86_64.mk @@ -1,11 +1,21 @@ -# x86_64 specific configs +# 64-bit x86. -libc_common_src_files_x86_64 := \ +# +# Default implementations of functions that are commonly optimized. +# + +libc_bionic_src_files_x86_64 += \ + bionic/__memcpy_chk.cpp \ + bionic/__memset_chk.cpp \ + bionic/__strcpy_chk.cpp \ + bionic/__strcat_chk.cpp \ bionic/memchr.c \ bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ + +libc_freebsd_src_files_x86_64 += \ upstream-freebsd/lib/libc/string/wcscat.c \ upstream-freebsd/lib/libc/string/wcschr.c \ upstream-freebsd/lib/libc/string/wcscmp.c \ @@ -14,20 +24,16 @@ libc_common_src_files_x86_64 := \ upstream-freebsd/lib/libc/string/wcsrchr.c \ upstream-freebsd/lib/libc/string/wmemcmp.c \ upstream-freebsd/lib/libc/string/wmemmove.c \ + +libc_openbsd_src_files_x86_64 += \ upstream-openbsd/lib/libc/string/strlcat.c \ upstream-openbsd/lib/libc/string/strlcpy.c \ -# Fortify implementations of libc functions. -libc_common_src_files_x86_64 += \ - bionic/__memcpy_chk.cpp \ - bionic/__memset_chk.cpp \ - bionic/__strcpy_chk.cpp \ - bionic/__strcat_chk.cpp \ +# +# Inherently architecture-specific code. +# - -########################################## -### CPU specific source files -libc_bionic_src_files_x86_64 := \ +libc_bionic_src_files_x86_64 += \ arch-x86_64/bionic/__bionic_clone.S \ arch-x86_64/bionic/_exit_with_stack_teardown.S \ arch-x86_64/bionic/__restore_rt.S \ @@ -38,6 +44,10 @@ libc_bionic_src_files_x86_64 := \ arch-x86_64/bionic/syscall.S \ arch-x86_64/bionic/vfork.S \ +# +# Optimized memory/string functions. +# + libc_bionic_src_files_x86_64 += \ arch-x86_64/string/sse2-memcpy-slm.S \ arch-x86_64/string/sse2-memmove-slm.S \ @@ -55,15 +65,15 @@ libc_bionic_src_files_x86_64 += \ libc_crt_target_cflags_x86_64 += \ -m64 \ - -I$(LOCAL_PATH)/arch-x86_64/include + -I$(LOCAL_PATH)/arch-x86_64/include \ -libc_crt_target_ldflags_x86_64 := -melf_x86_64 +libc_crt_target_ldflags_x86_64 := -melf_x86_64 \ libc_crt_target_crtbegin_file_x86_64 := \ - $(LOCAL_PATH)/arch-common/bionic/crtbegin.c + $(LOCAL_PATH)/arch-common/bionic/crtbegin.c \ libc_crt_target_crtbegin_so_file_x86_64 := \ - $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c + $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c \ libc_crt_target_so_cflags_x86_64 := \ - -fPIC + -fPIC \ From 0cc59dd303205de7110e298e9b90b1c3b98f4711 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Wed, 24 Sep 2014 17:05:20 -0700 Subject: [PATCH 058/194] Add __memcpy_chk assembly for 64 bit. Bug: 17623887 (cherry picked from commit 8cf61dab5f11ed5654a5760ab47cec0239caafe0) Change-Id: I91e66ca0c26f04b50308059f9c89d388d55f6e3a --- libc/arch-arm64/arm64.mk | 1 - libc/arch-arm64/denver64/bionic/memcpy.S | 248 ++++-------------- libc/arch-arm64/denver64/bionic/memcpy_base.S | 199 ++++++++++++++ libc/arch-arm64/generic/bionic/memcpy.S | 227 ++++------------ libc/arch-arm64/generic/bionic/memcpy_base.S | 179 +++++++++++++ 5 files changed, 484 insertions(+), 370 deletions(-) create mode 100644 libc/arch-arm64/denver64/bionic/memcpy_base.S create mode 100644 libc/arch-arm64/generic/bionic/memcpy_base.S diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index cdb2777b1..bb6ca6303 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -5,7 +5,6 @@ # libc_bionic_src_files_arm64 += \ - bionic/__memcpy_chk.cpp \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ diff --git a/libc/arch-arm64/denver64/bionic/memcpy.S b/libc/arch-arm64/denver64/bionic/memcpy.S index 700f0d011..85129fee9 100644 --- a/libc/arch-arm64/denver64/bionic/memcpy.S +++ b/libc/arch-arm64/denver64/bionic/memcpy.S @@ -1,205 +1,63 @@ -/* Copyright (c) 2012, Linaro Limited - All rights reserved. - Copyright (c) 2014, NVIDIA Corporation. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* Assumptions: +/* + * Copyright (C) 2008 The Android Open Source Project + * All rights reserved. * - * denver, ARMv8-a, AArch64 - * Unaligned accesses + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +// Prototype: void *memcpy (void *dst, const void *src, size_t count). + #include +#include -#define dstin x0 -#define src x1 -#define count x2 -#define tmp1 x3 -#define tmp1w w3 -#define tmp2 x4 -#define tmp2w w4 -#define tmp3 x5 -#define tmp3w w5 -#define dst x6 +ENTRY(__memcpy_chk) + cmp x2, x3 + b.hi __memcpy_chk_fail -#define A_l x7 -#define A_h x8 -#define B_l x9 -#define B_h x10 -#define C_l x11 -#define C_h x12 -#define D_l x13 -#define D_h x14 - -#define QA_l q0 -#define QA_h q1 -#define QB_l q2 -#define QB_h q3 + // Fall through to memcpy... +END(__memcpy_chk) ENTRY(memcpy) - - mov dst, dstin - cmp count, #64 - b.ge .Lcpy_not_short - cmp count, #15 - b.le .Ltail15tiny - - /* Deal with small copies quickly by dropping straight into the - * exit block. */ -.Ltail63: - /* Copy up to 48 bytes of data. At this point we only need the - * bottom 6 bits of count to be accurate. */ - ands tmp1, count, #0x30 - b.eq .Ltail15 - add dst, dst, tmp1 - add src, src, tmp1 - cmp tmp1w, #0x20 - b.eq 1f - b.lt 2f - ldp A_l, A_h, [src, #-48] - stp A_l, A_h, [dst, #-48] -1: - ldp A_l, A_h, [src, #-32] - stp A_l, A_h, [dst, #-32] -2: - ldp A_l, A_h, [src, #-16] - stp A_l, A_h, [dst, #-16] - -.Ltail15: - ands count, count, #15 - beq 1f - add src, src, count - ldp A_l, A_h, [src, #-16] - add dst, dst, count - stp A_l, A_h, [dst, #-16] -1: - ret - -.Ltail15tiny: - /* Copy up to 15 bytes of data. Does not assume additional data - being copied. */ - tbz count, #3, 1f - ldr tmp1, [src], #8 - str tmp1, [dst], #8 -1: - tbz count, #2, 1f - ldr tmp1w, [src], #4 - str tmp1w, [dst], #4 -1: - tbz count, #1, 1f - ldrh tmp1w, [src], #2 - strh tmp1w, [dst], #2 -1: - tbz count, #0, 1f - ldrb tmp1w, [src] - strb tmp1w, [dst] -1: - ret - -.Lcpy_not_short: - /* We don't much care about the alignment of DST, but we want SRC - * to be 128-bit (16 byte) aligned so that we don't cross cache line - * boundaries on both loads and stores. */ - neg tmp2, src - ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ - b.eq 2f - sub count, count, tmp2 - /* Copy more data than needed; it's faster than jumping - * around copying sub-Quadword quantities. We know that - * it can't overrun. */ - ldp A_l, A_h, [src] - add src, src, tmp2 - stp A_l, A_h, [dst] - add dst, dst, tmp2 - /* There may be less than 63 bytes to go now. */ - cmp count, #63 - b.le .Ltail63 -2: - subs count, count, #128 - b.ge .Lcpy_body_large - /* Less than 128 bytes to copy, so handle 64 here and then jump - * to the tail. */ - ldp QA_l, QA_h, [src] - ldp QB_l, QB_h, [src, #32] - stp QA_l, QA_h, [dst] - stp QB_l, QB_h, [dst, #32] - tst count, #0x3f - add src, src, #64 - add dst, dst, #64 - b.ne .Ltail63 - ret - - /* Critical loop. Start at a new cache line boundary. Assuming - * 64 bytes per line this ensures the entire loop is in one line. */ - .p2align 6 -.Lcpy_body_large: - cmp count, 65536 - bhi .Lcpy_body_huge - /* There are at least 128 bytes to copy. */ - ldp QA_l, QA_h, [src, #0] - sub dst, dst, #32 /* Pre-bias. */ - ldp QB_l, QB_h, [src, #32]! /* src += 64 - Pre-bias. */ -1: - stp QA_l, QA_h, [dst, #32] - ldp QA_l, QA_h, [src, #32] - stp QB_l, QB_h, [dst, #64]! - ldp QB_l, QB_h, [src, #64]! - - subs count, count, #64 - b.ge 1b - - stp QA_l, QA_h, [dst, #32] - stp QB_l, QB_h, [dst, #64] - add src, src, #32 - add dst, dst, #64 + 32 - tst count, #0x3f - b.ne .Ltail63 - ret -.Lcpy_body_huge: - /* There are at least 128 bytes to copy. */ - ldp QA_l, QA_h, [src, #0] - sub dst, dst, #32 /* Pre-bias. */ - ldp QB_l, QB_h, [src, #32]! -1: - stnp QA_l, QA_h, [dst, #32] - stnp QB_l, QB_h, [dst, #64] - ldp QA_l, QA_h, [src, #32] - ldp QB_l, QB_h, [src, #64]! - add dst, dst, #64 - - subs count, count, #64 - b.ge 1b - - stnp QA_l, QA_h, [dst, #32] - stnp QB_l, QB_h, [dst, #64] - add src, src, #32 - add dst, dst, #64 + 32 - tst count, #0x3f - b.ne .Ltail63 - ret - + #include "memcpy_base.S" END(memcpy) + +ENTRY_PRIVATE(__memcpy_chk_fail) + // Preserve for accurate backtrace. + stp x29, x30, [sp, -16]! + .cfi_def_cfa_offset 16 + .cfi_rel_offset x29, 0 + .cfi_rel_offset x30, 8 + + adrp x0, error_string + add x0, x0, :lo12:error_string + ldr x1, error_code + bl __fortify_chk_fail +error_code: + .word BIONIC_EVENT_MEMCPY_BUFFER_OVERFLOW +END(__memcpy_chk_fail) + + .data + .align 2 +error_string: + .string "memcpy: prevented write past end of buffer" diff --git a/libc/arch-arm64/denver64/bionic/memcpy_base.S b/libc/arch-arm64/denver64/bionic/memcpy_base.S new file mode 100644 index 000000000..3d7e9dd79 --- /dev/null +++ b/libc/arch-arm64/denver64/bionic/memcpy_base.S @@ -0,0 +1,199 @@ +/* Copyright (c) 2012, Linaro Limited + All rights reserved. + Copyright (c) 2014, NVIDIA Corporation. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Linaro nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* Assumptions: + * + * denver, ARMv8-a, AArch64 + * Unaligned accesses + * + */ + +#define dstin x0 +#define src x1 +#define count x2 +#define tmp1 x3 +#define tmp1w w3 +#define tmp2 x4 +#define tmp2w w4 +#define tmp3 x5 +#define tmp3w w5 +#define dst x6 + +#define A_l x7 +#define A_h x8 +#define B_l x9 +#define B_h x10 +#define C_l x11 +#define C_h x12 +#define D_l x13 +#define D_h x14 + +#define QA_l q0 +#define QA_h q1 +#define QB_l q2 +#define QB_h q3 + + mov dst, dstin + cmp count, #64 + b.ge .Lcpy_not_short + cmp count, #15 + b.le .Ltail15tiny + + /* Deal with small copies quickly by dropping straight into the + * exit block. */ +.Ltail63: + /* Copy up to 48 bytes of data. At this point we only need the + * bottom 6 bits of count to be accurate. */ + ands tmp1, count, #0x30 + b.eq .Ltail15 + add dst, dst, tmp1 + add src, src, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + ldp A_l, A_h, [src, #-48] + stp A_l, A_h, [dst, #-48] +1: + ldp A_l, A_h, [src, #-32] + stp A_l, A_h, [dst, #-32] +2: + ldp A_l, A_h, [src, #-16] + stp A_l, A_h, [dst, #-16] + +.Ltail15: + ands count, count, #15 + beq 1f + add src, src, count + ldp A_l, A_h, [src, #-16] + add dst, dst, count + stp A_l, A_h, [dst, #-16] +1: + ret + +.Ltail15tiny: + /* Copy up to 15 bytes of data. Does not assume additional data + being copied. */ + tbz count, #3, 1f + ldr tmp1, [src], #8 + str tmp1, [dst], #8 +1: + tbz count, #2, 1f + ldr tmp1w, [src], #4 + str tmp1w, [dst], #4 +1: + tbz count, #1, 1f + ldrh tmp1w, [src], #2 + strh tmp1w, [dst], #2 +1: + tbz count, #0, 1f + ldrb tmp1w, [src] + strb tmp1w, [dst] +1: + ret + +.Lcpy_not_short: + /* We don't much care about the alignment of DST, but we want SRC + * to be 128-bit (16 byte) aligned so that we don't cross cache line + * boundaries on both loads and stores. */ + neg tmp2, src + ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ + b.eq 2f + sub count, count, tmp2 + /* Copy more data than needed; it's faster than jumping + * around copying sub-Quadword quantities. We know that + * it can't overrun. */ + ldp A_l, A_h, [src] + add src, src, tmp2 + stp A_l, A_h, [dst] + add dst, dst, tmp2 + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le .Ltail63 +2: + subs count, count, #128 + b.ge .Lcpy_body_large + /* Less than 128 bytes to copy, so handle 64 here and then jump + * to the tail. */ + ldp QA_l, QA_h, [src] + ldp QB_l, QB_h, [src, #32] + stp QA_l, QA_h, [dst] + stp QB_l, QB_h, [dst, #32] + tst count, #0x3f + add src, src, #64 + add dst, dst, #64 + b.ne .Ltail63 + ret + + /* Critical loop. Start at a new cache line boundary. Assuming + * 64 bytes per line this ensures the entire loop is in one line. */ + .p2align 6 +.Lcpy_body_large: + cmp count, 65536 + bhi .Lcpy_body_huge + /* There are at least 128 bytes to copy. */ + ldp QA_l, QA_h, [src, #0] + sub dst, dst, #32 /* Pre-bias. */ + ldp QB_l, QB_h, [src, #32]! /* src += 64 - Pre-bias. */ +1: + stp QA_l, QA_h, [dst, #32] + ldp QA_l, QA_h, [src, #32] + stp QB_l, QB_h, [dst, #64]! + ldp QB_l, QB_h, [src, #64]! + + subs count, count, #64 + b.ge 1b + + stp QA_l, QA_h, [dst, #32] + stp QB_l, QB_h, [dst, #64] + add src, src, #32 + add dst, dst, #64 + 32 + tst count, #0x3f + b.ne .Ltail63 + ret +.Lcpy_body_huge: + /* There are at least 128 bytes to copy. */ + ldp QA_l, QA_h, [src, #0] + sub dst, dst, #32 /* Pre-bias. */ + ldp QB_l, QB_h, [src, #32]! +1: + stnp QA_l, QA_h, [dst, #32] + stnp QB_l, QB_h, [dst, #64] + ldp QA_l, QA_h, [src, #32] + ldp QB_l, QB_h, [src, #64]! + add dst, dst, #64 + + subs count, count, #64 + b.ge 1b + + stnp QA_l, QA_h, [dst, #32] + stnp QB_l, QB_h, [dst, #64] + add src, src, #32 + add dst, dst, #64 + 32 + tst count, #0x3f + b.ne .Ltail63 + ret diff --git a/libc/arch-arm64/generic/bionic/memcpy.S b/libc/arch-arm64/generic/bionic/memcpy.S index e1b1a727c..85129fee9 100644 --- a/libc/arch-arm64/generic/bionic/memcpy.S +++ b/libc/arch-arm64/generic/bionic/memcpy.S @@ -1,184 +1,63 @@ -/* Copyright (c) 2012, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* Assumptions: +/* + * Copyright (C) 2008 The Android Open Source Project + * All rights reserved. * - * ARMv8-a, AArch64 - * Unaligned accesses + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +// Prototype: void *memcpy (void *dst, const void *src, size_t count). + #include +#include -#define dstin x0 -#define src x1 -#define count x2 -#define tmp1 x3 -#define tmp1w w3 -#define tmp2 x4 -#define tmp2w w4 -#define tmp3 x5 -#define tmp3w w5 -#define dst x6 +ENTRY(__memcpy_chk) + cmp x2, x3 + b.hi __memcpy_chk_fail -#define A_l x7 -#define A_h x8 -#define B_l x9 -#define B_h x10 -#define C_l x11 -#define C_h x12 -#define D_l x13 -#define D_h x14 + // Fall through to memcpy... +END(__memcpy_chk) ENTRY(memcpy) - - mov dst, dstin - cmp count, #64 - b.ge .Lcpy_not_short - cmp count, #15 - b.le .Ltail15tiny - - /* Deal with small copies quickly by dropping straight into the - * exit block. */ -.Ltail63: - /* Copy up to 48 bytes of data. At this point we only need the - * bottom 6 bits of count to be accurate. */ - ands tmp1, count, #0x30 - b.eq .Ltail15 - add dst, dst, tmp1 - add src, src, tmp1 - cmp tmp1w, #0x20 - b.eq 1f - b.lt 2f - ldp A_l, A_h, [src, #-48] - stp A_l, A_h, [dst, #-48] -1: - ldp A_l, A_h, [src, #-32] - stp A_l, A_h, [dst, #-32] -2: - ldp A_l, A_h, [src, #-16] - stp A_l, A_h, [dst, #-16] - -.Ltail15: - ands count, count, #15 - beq 1f - add src, src, count - ldp A_l, A_h, [src, #-16] - add dst, dst, count - stp A_l, A_h, [dst, #-16] -1: - ret - -.Ltail15tiny: - /* Copy up to 15 bytes of data. Does not assume additional data - being copied. */ - tbz count, #3, 1f - ldr tmp1, [src], #8 - str tmp1, [dst], #8 -1: - tbz count, #2, 1f - ldr tmp1w, [src], #4 - str tmp1w, [dst], #4 -1: - tbz count, #1, 1f - ldrh tmp1w, [src], #2 - strh tmp1w, [dst], #2 -1: - tbz count, #0, 1f - ldrb tmp1w, [src] - strb tmp1w, [dst] -1: - ret - -.Lcpy_not_short: - /* We don't much care about the alignment of DST, but we want SRC - * to be 128-bit (16 byte) aligned so that we don't cross cache line - * boundaries on both loads and stores. */ - neg tmp2, src - ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ - b.eq 2f - sub count, count, tmp2 - /* Copy more data than needed; it's faster than jumping - * around copying sub-Quadword quantities. We know that - * it can't overrun. */ - ldp A_l, A_h, [src] - add src, src, tmp2 - stp A_l, A_h, [dst] - add dst, dst, tmp2 - /* There may be less than 63 bytes to go now. */ - cmp count, #63 - b.le .Ltail63 -2: - subs count, count, #128 - b.ge .Lcpy_body_large - /* Less than 128 bytes to copy, so handle 64 here and then jump - * to the tail. */ - ldp A_l, A_h, [src] - ldp B_l, B_h, [src, #16] - ldp C_l, C_h, [src, #32] - ldp D_l, D_h, [src, #48] - stp A_l, A_h, [dst] - stp B_l, B_h, [dst, #16] - stp C_l, C_h, [dst, #32] - stp D_l, D_h, [dst, #48] - tst count, #0x3f - add src, src, #64 - add dst, dst, #64 - b.ne .Ltail63 - ret - - /* Critical loop. Start at a new cache line boundary. Assuming - * 64 bytes per line this ensures the entire loop is in one line. */ - .p2align 6 -.Lcpy_body_large: - /* There are at least 128 bytes to copy. */ - ldp A_l, A_h, [src, #0] - sub dst, dst, #16 /* Pre-bias. */ - ldp B_l, B_h, [src, #16] - ldp C_l, C_h, [src, #32] - ldp D_l, D_h, [src, #48]! /* src += 64 - Pre-bias. */ -1: - stp A_l, A_h, [dst, #16] - ldp A_l, A_h, [src, #16] - stp B_l, B_h, [dst, #32] - ldp B_l, B_h, [src, #32] - stp C_l, C_h, [dst, #48] - ldp C_l, C_h, [src, #48] - stp D_l, D_h, [dst, #64]! - ldp D_l, D_h, [src, #64]! - subs count, count, #64 - b.ge 1b - stp A_l, A_h, [dst, #16] - stp B_l, B_h, [dst, #32] - stp C_l, C_h, [dst, #48] - stp D_l, D_h, [dst, #64] - add src, src, #16 - add dst, dst, #64 + 16 - tst count, #0x3f - b.ne .Ltail63 - ret + #include "memcpy_base.S" END(memcpy) + +ENTRY_PRIVATE(__memcpy_chk_fail) + // Preserve for accurate backtrace. + stp x29, x30, [sp, -16]! + .cfi_def_cfa_offset 16 + .cfi_rel_offset x29, 0 + .cfi_rel_offset x30, 8 + + adrp x0, error_string + add x0, x0, :lo12:error_string + ldr x1, error_code + bl __fortify_chk_fail +error_code: + .word BIONIC_EVENT_MEMCPY_BUFFER_OVERFLOW +END(__memcpy_chk_fail) + + .data + .align 2 +error_string: + .string "memcpy: prevented write past end of buffer" diff --git a/libc/arch-arm64/generic/bionic/memcpy_base.S b/libc/arch-arm64/generic/bionic/memcpy_base.S new file mode 100644 index 000000000..c5d42ce1d --- /dev/null +++ b/libc/arch-arm64/generic/bionic/memcpy_base.S @@ -0,0 +1,179 @@ +/* Copyright (c) 2012, Linaro Limited + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Linaro nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* Assumptions: + * + * ARMv8-a, AArch64 + * Unaligned accesses + * + */ + +#define dstin x0 +#define src x1 +#define count x2 +#define tmp1 x3 +#define tmp1w w3 +#define tmp2 x4 +#define tmp2w w4 +#define tmp3 x5 +#define tmp3w w5 +#define dst x6 + +#define A_l x7 +#define A_h x8 +#define B_l x9 +#define B_h x10 +#define C_l x11 +#define C_h x12 +#define D_l x13 +#define D_h x14 + + mov dst, dstin + cmp count, #64 + b.ge .Lcpy_not_short + cmp count, #15 + b.le .Ltail15tiny + + /* Deal with small copies quickly by dropping straight into the + * exit block. */ +.Ltail63: + /* Copy up to 48 bytes of data. At this point we only need the + * bottom 6 bits of count to be accurate. */ + ands tmp1, count, #0x30 + b.eq .Ltail15 + add dst, dst, tmp1 + add src, src, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + ldp A_l, A_h, [src, #-48] + stp A_l, A_h, [dst, #-48] +1: + ldp A_l, A_h, [src, #-32] + stp A_l, A_h, [dst, #-32] +2: + ldp A_l, A_h, [src, #-16] + stp A_l, A_h, [dst, #-16] + +.Ltail15: + ands count, count, #15 + beq 1f + add src, src, count + ldp A_l, A_h, [src, #-16] + add dst, dst, count + stp A_l, A_h, [dst, #-16] +1: + ret + +.Ltail15tiny: + /* Copy up to 15 bytes of data. Does not assume additional data + being copied. */ + tbz count, #3, 1f + ldr tmp1, [src], #8 + str tmp1, [dst], #8 +1: + tbz count, #2, 1f + ldr tmp1w, [src], #4 + str tmp1w, [dst], #4 +1: + tbz count, #1, 1f + ldrh tmp1w, [src], #2 + strh tmp1w, [dst], #2 +1: + tbz count, #0, 1f + ldrb tmp1w, [src] + strb tmp1w, [dst] +1: + ret + +.Lcpy_not_short: + /* We don't much care about the alignment of DST, but we want SRC + * to be 128-bit (16 byte) aligned so that we don't cross cache line + * boundaries on both loads and stores. */ + neg tmp2, src + ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ + b.eq 2f + sub count, count, tmp2 + /* Copy more data than needed; it's faster than jumping + * around copying sub-Quadword quantities. We know that + * it can't overrun. */ + ldp A_l, A_h, [src] + add src, src, tmp2 + stp A_l, A_h, [dst] + add dst, dst, tmp2 + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le .Ltail63 +2: + subs count, count, #128 + b.ge .Lcpy_body_large + /* Less than 128 bytes to copy, so handle 64 here and then jump + * to the tail. */ + ldp A_l, A_h, [src] + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48] + stp A_l, A_h, [dst] + stp B_l, B_h, [dst, #16] + stp C_l, C_h, [dst, #32] + stp D_l, D_h, [dst, #48] + tst count, #0x3f + add src, src, #64 + add dst, dst, #64 + b.ne .Ltail63 + ret + + /* Critical loop. Start at a new cache line boundary. Assuming + * 64 bytes per line this ensures the entire loop is in one line. */ + .p2align 6 +.Lcpy_body_large: + /* There are at least 128 bytes to copy. */ + ldp A_l, A_h, [src, #0] + sub dst, dst, #16 /* Pre-bias. */ + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48]! /* src += 64 - Pre-bias. */ +1: + stp A_l, A_h, [dst, #16] + ldp A_l, A_h, [src, #16] + stp B_l, B_h, [dst, #32] + ldp B_l, B_h, [src, #32] + stp C_l, C_h, [dst, #48] + ldp C_l, C_h, [src, #48] + stp D_l, D_h, [dst, #64]! + ldp D_l, D_h, [src, #64]! + subs count, count, #64 + b.ge 1b + stp A_l, A_h, [dst, #16] + stp B_l, B_h, [dst, #32] + stp C_l, C_h, [dst, #48] + stp D_l, D_h, [dst, #64] + add src, src, #16 + add dst, dst, #64 + 16 + tst count, #0x3f + b.ne .Ltail63 + ret From 69377b890966af4a679857caea983e4702e3b764 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 28 Oct 2014 16:58:11 -0700 Subject: [PATCH 059/194] Fix merge-induced makefile error. Change-Id: I6ac7e5e3b9d55108681916044cf2de0e01bca0b2 --- tests/Android.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Android.mk b/tests/Android.mk index f65d82b9f..9026762c1 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -235,7 +235,6 @@ bionic-unit-tests_src_files := \ dlext_test.cpp \ dlfcn_test.cpp \ stack_unwinding_test.cpp \ - stack_unwinding_test_impl.c \ bionic-unit-tests_cflags := $(test_cflags) From 1c8ea807ebb54c1533040b60c0a6394abc77e339 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Mon, 29 Sep 2014 15:34:20 -0700 Subject: [PATCH 060/194] Cleanup arm assembly. Remove the old arm directives. Change the non-local labels to .L labels. Add cfi directives to strcpy.S. Bug: 18157900 (cherry picked from commit c8bd2abab24afe563240297018c4fa79944f193b) Change-Id: Ifa1c3d16553d142eaa0d744af040f0352538106c --- .../arch-arm/cortex-a15/bionic/__strcat_chk.S | 5 - .../arch-arm/cortex-a15/bionic/__strcpy_chk.S | 2 - libc/arch-arm/cortex-a15/bionic/memcpy.S | 2 - libc/arch-arm/cortex-a15/bionic/memcpy_base.S | 5 - libc/arch-arm/cortex-a15/bionic/memset.S | 2 - libc/arch-arm/cortex-a15/bionic/strcmp.S | 1 - libc/arch-arm/cortex-a15/bionic/strcpy.S | 213 +++++++++--------- libc/arch-arm/cortex-a9/bionic/__strcat_chk.S | 4 - libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S | 2 - libc/arch-arm/cortex-a9/bionic/memcpy.S | 2 - libc/arch-arm/cortex-a9/bionic/memcpy_base.S | 3 - libc/arch-arm/cortex-a9/bionic/memset.S | 3 - libc/arch-arm/cortex-a9/bionic/strcmp.S | 1 - libc/arch-arm/cortex-a9/bionic/strcpy.S | 193 ++++++++-------- libc/arch-arm/denver/bionic/__strcat_chk.S | 5 - libc/arch-arm/denver/bionic/__strcpy_chk.S | 2 - libc/arch-arm/denver/bionic/memcpy.S | 2 - libc/arch-arm/krait/bionic/__strcat_chk.S | 4 - libc/arch-arm/krait/bionic/__strcpy_chk.S | 2 - libc/arch-arm/krait/bionic/memcpy.S | 2 - libc/arch-arm/krait/bionic/memcpy_base.S | 1 - libc/arch-arm/krait/bionic/memset.S | 2 - libc/arch-arm/krait/bionic/strcmp.S | 1 - 23 files changed, 208 insertions(+), 251 deletions(-) diff --git a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S index 36da2d9d8..a2e9c229e 100644 --- a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S +++ b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S @@ -40,12 +40,10 @@ ENTRY(__strcat_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 push {r4, r5} - .save {r4, r5} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 @@ -195,9 +193,6 @@ END(__strcat_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcat_chk_failed) - .save {r0, lr} - .save {r4, r5} - .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S index c3e3e14fa..db766863a 100644 --- a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S +++ b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S @@ -39,7 +39,6 @@ ENTRY(__strcpy_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -161,7 +160,6 @@ END(__strcpy_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcpy_chk_failed) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/cortex-a15/bionic/memcpy.S b/libc/arch-arm/cortex-a15/bionic/memcpy.S index da4f3dd79..410b663e2 100644 --- a/libc/arch-arm/cortex-a15/bionic/memcpy.S +++ b/libc/arch-arm/cortex-a15/bionic/memcpy.S @@ -72,7 +72,6 @@ END(__memcpy_chk) ENTRY(memcpy) pld [r1, #64] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -85,7 +84,6 @@ END(memcpy) ENTRY_PRIVATE(__memcpy_chk_fail) // Preserve lr for backtrace. push {lr} - .save {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 diff --git a/libc/arch-arm/cortex-a15/bionic/memcpy_base.S b/libc/arch-arm/cortex-a15/bionic/memcpy_base.S index 6ba4931f9..2a7385247 100644 --- a/libc/arch-arm/cortex-a15/bionic/memcpy_base.S +++ b/libc/arch-arm/cortex-a15/bionic/memcpy_base.S @@ -54,7 +54,6 @@ */ ENTRY_PRIVATE(MEMCPY_BASE) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -172,7 +171,6 @@ ENTRY_PRIVATE(MEMCPY_BASE) END(MEMCPY_BASE) ENTRY_PRIVATE(MEMCPY_BASE_ALIGNED) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -181,17 +179,14 @@ ENTRY_PRIVATE(MEMCPY_BASE_ALIGNED) // i.e., not keeping the stack looking like users expect // (highest numbered register at highest address). strd r4, r5, [sp, #-8]! - .save {r4, r5} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 strd r6, r7, [sp, #-8]! - .save {r6, r7} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r6, 0 .cfi_rel_offset r7, 0 strd r8, r9, [sp, #-8]! - .save {r8, r9} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r8, 0 .cfi_rel_offset r9, 4 diff --git a/libc/arch-arm/cortex-a15/bionic/memset.S b/libc/arch-arm/cortex-a15/bionic/memset.S index 12c68d6a9..e4a1ec869 100644 --- a/libc/arch-arm/cortex-a15/bionic/memset.S +++ b/libc/arch-arm/cortex-a15/bionic/memset.S @@ -44,7 +44,6 @@ ENTRY(__memset_chk) bls .L_done // Preserve lr for backtrace. - .save {lr} push {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 @@ -68,7 +67,6 @@ ENTRY(bzero) END(bzero) ENTRY(memset) - .save {r0} stmfd sp!, {r0} .cfi_def_cfa_offset 4 .cfi_rel_offset r0, 0 diff --git a/libc/arch-arm/cortex-a15/bionic/strcmp.S b/libc/arch-arm/cortex-a15/bionic/strcmp.S index 12da1158d..acedf0ec6 100644 --- a/libc/arch-arm/cortex-a15/bionic/strcmp.S +++ b/libc/arch-arm/cortex-a15/bionic/strcmp.S @@ -168,7 +168,6 @@ ENTRY(strcmp) bne .L_do_align /* Fast path. */ - .save {r4-r7} init .L_doubleword_aligned: diff --git a/libc/arch-arm/cortex-a15/bionic/strcpy.S b/libc/arch-arm/cortex-a15/bionic/strcpy.S index cb878c44f..2cfdb1931 100644 --- a/libc/arch-arm/cortex-a15/bionic/strcpy.S +++ b/libc/arch-arm/cortex-a15/bionic/strcpy.S @@ -62,6 +62,11 @@ .macro m_push push {r0, r4, r5, lr} + .cfi_def_cfa_offset 16 + .cfi_rel_offset r0, 0 + .cfi_rel_offset r4, 4 + .cfi_rel_offset r5, 8 + .cfi_rel_offset lr, 12 .endm // m_push .macro m_pop @@ -78,61 +83,61 @@ ENTRY(strcpy) // For short copies, hard-code checking the first 8 bytes since this // new code doesn't win until after about 8 bytes. m_push - m_copy_byte reg=r2, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r5, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r2, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r5, cmd=cbnz, label=strcpy_continue + m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r5, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r5, cmd=cbnz, label=.Lstrcpy_continue -strcpy_finish: +.Lstrcpy_finish: m_pop -strcpy_continue: +.Lstrcpy_continue: pld [r1, #0] ands r3, r0, #7 - beq strcpy_check_src_align + beq .Lstrcpy_check_src_align // Align to a double word (64 bits). rsb r3, r3, #8 lsls ip, r3, #31 - beq strcpy_align_to_32 + beq .Lstrcpy_align_to_32 ldrb r2, [r1], #1 strb r2, [r0], #1 - cbz r2, strcpy_complete + cbz r2, .Lstrcpy_complete -strcpy_align_to_32: - bcc strcpy_align_to_64 +.Lstrcpy_align_to_32: + bcc .Lstrcpy_align_to_64 ldrb r2, [r1], #1 strb r2, [r0], #1 - cbz r2, strcpy_complete + cbz r2, .Lstrcpy_complete ldrb r2, [r1], #1 strb r2, [r0], #1 - cbz r2, strcpy_complete + cbz r2, .Lstrcpy_complete -strcpy_align_to_64: +.Lstrcpy_align_to_64: tst r3, #4 - beq strcpy_check_src_align + beq .Lstrcpy_check_src_align ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register str r2, [r0], #4 -strcpy_check_src_align: +.Lstrcpy_check_src_align: // At this point dst is aligned to a double word, check if src // is also aligned to a double word. ands r3, r1, #7 - bne strcpy_unaligned_copy + bne .Lstrcpy_unaligned_copy .p2align 2 -strcpy_mainloop: +.Lstrcpy_mainloop: ldrd r2, r3, [r1], #8 pld [r1, #64] @@ -140,128 +145,128 @@ strcpy_mainloop: sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_mainloop + b .Lstrcpy_mainloop -strcpy_complete: +.Lstrcpy_complete: m_pop -strcpy_zero_in_first_register: +.Lstrcpy_zero_in_first_register: lsls lr, ip, #17 - bne strcpy_copy1byte - bcs strcpy_copy2bytes + bne .Lstrcpy_copy1byte + bcs .Lstrcpy_copy2bytes lsls ip, ip, #1 - bne strcpy_copy3bytes + bne .Lstrcpy_copy3bytes -strcpy_copy4bytes: +.Lstrcpy_copy4bytes: // Copy 4 bytes to the destiniation. str r2, [r0] m_pop -strcpy_copy1byte: +.Lstrcpy_copy1byte: strb r2, [r0] m_pop -strcpy_copy2bytes: +.Lstrcpy_copy2bytes: strh r2, [r0] m_pop -strcpy_copy3bytes: +.Lstrcpy_copy3bytes: strh r2, [r0], #2 lsr r2, #16 strb r2, [r0] m_pop -strcpy_zero_in_second_register: +.Lstrcpy_zero_in_second_register: lsls lr, ip, #17 - bne strcpy_copy5bytes - bcs strcpy_copy6bytes + bne .Lstrcpy_copy5bytes + bcs .Lstrcpy_copy6bytes lsls ip, ip, #1 - bne strcpy_copy7bytes + bne .Lstrcpy_copy7bytes // Copy 8 bytes to the destination. strd r2, r3, [r0] m_pop -strcpy_copy5bytes: +.Lstrcpy_copy5bytes: str r2, [r0], #4 strb r3, [r0] m_pop -strcpy_copy6bytes: +.Lstrcpy_copy6bytes: str r2, [r0], #4 strh r3, [r0] m_pop -strcpy_copy7bytes: +.Lstrcpy_copy7bytes: str r2, [r0], #4 strh r3, [r0], #2 lsr r3, #16 strb r3, [r0] m_pop -strcpy_unaligned_copy: +.Lstrcpy_unaligned_copy: // Dst is aligned to a double word, while src is at an unknown alignment. // There are 7 different versions of the unaligned copy code // to prevent overreading the src. The mainloop of every single version // will store 64 bits per loop. The difference is how much of src can // be read without potentially crossing a page boundary. tbb [pc, r3] -strcpy_unaligned_branchtable: +.Lstrcpy_unaligned_branchtable: .byte 0 - .byte ((strcpy_unalign7 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign6 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign5 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign4 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign3 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign2 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign1 - strcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign7 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign6 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign5 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign4 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign3 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign2 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign1 - .Lstrcpy_unaligned_branchtable)/2) .p2align 2 // Can read 7 bytes before possibly crossing a page. -strcpy_unalign7: +.Lstrcpy_unalign7: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r3, [r1] - cbz r3, strcpy_unalign7_copy5bytes + cbz r3, .Lstrcpy_unalign7_copy5bytes ldrb r4, [r1, #1] - cbz r4, strcpy_unalign7_copy6bytes + cbz r4, .Lstrcpy_unalign7_copy6bytes ldrb r5, [r1, #2] - cbz r5, strcpy_unalign7_copy7bytes + cbz r5, .Lstrcpy_unalign7_copy7bytes ldr r3, [r1], #4 pld [r1, #64] lsrs ip, r3, #24 strd r2, r3, [r0], #8 - beq strcpy_unalign_return - b strcpy_unalign7 + beq .Lstrcpy_unalign_return + b .Lstrcpy_unalign7 -strcpy_unalign7_copy5bytes: +.Lstrcpy_unalign7_copy5bytes: str r2, [r0], #4 strb r3, [r0] -strcpy_unalign_return: +.Lstrcpy_unalign_return: m_pop -strcpy_unalign7_copy6bytes: +.Lstrcpy_unalign7_copy6bytes: str r2, [r0], #4 strb r3, [r0], #1 strb r4, [r0], #1 m_pop -strcpy_unalign7_copy7bytes: +.Lstrcpy_unalign7_copy7bytes: str r2, [r0], #4 strb r3, [r0], #1 strb r4, [r0], #1 @@ -270,41 +275,41 @@ strcpy_unalign7_copy7bytes: .p2align 2 // Can read 6 bytes before possibly crossing a page. -strcpy_unalign6: +.Lstrcpy_unalign6: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r4, [r1] - cbz r4, strcpy_unalign_copy5bytes + cbz r4, .Lstrcpy_unalign_copy5bytes ldrb r5, [r1, #1] - cbz r5, strcpy_unalign_copy6bytes + cbz r5, .Lstrcpy_unalign_copy6bytes ldr r3, [r1], #4 pld [r1, #64] tst r3, #0xff0000 - beq strcpy_copy7bytes + beq .Lstrcpy_copy7bytes lsrs ip, r3, #24 strd r2, r3, [r0], #8 - beq strcpy_unalign_return - b strcpy_unalign6 + beq .Lstrcpy_unalign_return + b .Lstrcpy_unalign6 .p2align 2 // Can read 5 bytes before possibly crossing a page. -strcpy_unalign5: +.Lstrcpy_unalign5: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r4, [r1] - cbz r4, strcpy_unalign_copy5bytes + cbz r4, .Lstrcpy_unalign_copy5bytes ldr r3, [r1], #4 @@ -313,17 +318,17 @@ strcpy_unalign5: sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_unalign5 + b .Lstrcpy_unalign5 -strcpy_unalign_copy5bytes: +.Lstrcpy_unalign_copy5bytes: str r2, [r0], #4 strb r4, [r0] m_pop -strcpy_unalign_copy6bytes: +.Lstrcpy_unalign_copy6bytes: str r2, [r0], #4 strb r4, [r0], #1 strb r5, [r0] @@ -331,13 +336,13 @@ strcpy_unalign_copy6bytes: .p2align 2 // Can read 4 bytes before possibly crossing a page. -strcpy_unalign4: +.Lstrcpy_unalign4: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldr r3, [r1], #4 pld [r1, #64] @@ -345,20 +350,20 @@ strcpy_unalign4: sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_unalign4 + b .Lstrcpy_unalign4 .p2align 2 // Can read 3 bytes before possibly crossing a page. -strcpy_unalign3: +.Lstrcpy_unalign3: ldrb r2, [r1] - cbz r2, strcpy_unalign3_copy1byte + cbz r2, .Lstrcpy_unalign3_copy1byte ldrb r3, [r1, #1] - cbz r3, strcpy_unalign3_copy2bytes + cbz r3, .Lstrcpy_unalign3_copy2bytes ldrb r4, [r1, #2] - cbz r4, strcpy_unalign3_copy3bytes + cbz r4, .Lstrcpy_unalign3_copy3bytes ldr r2, [r1], #4 ldr r3, [r1], #4 @@ -366,26 +371,26 @@ strcpy_unalign3: pld [r1, #64] lsrs lr, r2, #24 - beq strcpy_copy4bytes + beq .Lstrcpy_copy4bytes sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_unalign3 + b .Lstrcpy_unalign3 -strcpy_unalign3_copy1byte: +.Lstrcpy_unalign3_copy1byte: strb r2, [r0] m_pop -strcpy_unalign3_copy2bytes: +.Lstrcpy_unalign3_copy2bytes: strb r2, [r0], #1 strb r3, [r0] m_pop -strcpy_unalign3_copy3bytes: +.Lstrcpy_unalign3_copy3bytes: strb r2, [r0], #1 strb r3, [r0], #1 strb r4, [r0] @@ -393,34 +398,34 @@ strcpy_unalign3_copy3bytes: .p2align 2 // Can read 2 bytes before possibly crossing a page. -strcpy_unalign2: +.Lstrcpy_unalign2: ldrb r2, [r1] - cbz r2, strcpy_unalign_copy1byte + cbz r2, .Lstrcpy_unalign_copy1byte ldrb r4, [r1, #1] - cbz r4, strcpy_unalign_copy2bytes + cbz r4, .Lstrcpy_unalign_copy2bytes ldr r2, [r1], #4 ldr r3, [r1], #4 pld [r1, #64] tst r2, #0xff0000 - beq strcpy_copy3bytes + beq .Lstrcpy_copy3bytes lsrs ip, r2, #24 - beq strcpy_copy4bytes + beq .Lstrcpy_copy4bytes sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_unalign2 + b .Lstrcpy_unalign2 .p2align 2 // Can read 1 byte before possibly crossing a page. -strcpy_unalign1: +.Lstrcpy_unalign1: ldrb r2, [r1] - cbz r2, strcpy_unalign_copy1byte + cbz r2, .Lstrcpy_unalign_copy1byte ldr r2, [r1], #4 ldr r3, [r1], #4 @@ -430,21 +435,21 @@ strcpy_unalign1: sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register strd r2, r3, [r0], #8 - b strcpy_unalign1 + b .Lstrcpy_unalign1 -strcpy_unalign_copy1byte: +.Lstrcpy_unalign_copy1byte: strb r2, [r0] m_pop -strcpy_unalign_copy2bytes: +.Lstrcpy_unalign_copy2bytes: strb r2, [r0], #1 strb r4, [r0] m_pop diff --git a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S index 651aefc7d..45517f146 100644 --- a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S +++ b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S @@ -40,12 +40,10 @@ ENTRY(__strcat_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 push {r4, r5} - .save {r4, r5} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 @@ -199,8 +197,6 @@ END(__strcat_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcat_chk_fail) - .save {r0, lr} - .save {r4, r5} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S index 244778024..67eca086e 100644 --- a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S +++ b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S @@ -39,7 +39,6 @@ ENTRY(__strcpy_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -165,7 +164,6 @@ END(__strcpy_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcpy_chk_fail) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy.S b/libc/arch-arm/cortex-a9/bionic/memcpy.S index 8dcd937fc..db3e26fea 100644 --- a/libc/arch-arm/cortex-a9/bionic/memcpy.S +++ b/libc/arch-arm/cortex-a9/bionic/memcpy.S @@ -50,7 +50,6 @@ END(__memcpy_chk) ENTRY(memcpy) pld [r1, #0] stmfd sp!, {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -64,7 +63,6 @@ END(memcpy) ENTRY_PRIVATE(__memcpy_chk_fail) // Preserve lr for backtrace. push {lr} - .save {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy_base.S b/libc/arch-arm/cortex-a9/bionic/memcpy_base.S index c385657ca..5e813050a 100644 --- a/libc/arch-arm/cortex-a9/bionic/memcpy_base.S +++ b/libc/arch-arm/cortex-a9/bionic/memcpy_base.S @@ -33,7 +33,6 @@ */ ENTRY_PRIVATE(MEMCPY_BASE) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -139,14 +138,12 @@ ENTRY_PRIVATE(MEMCPY_BASE) END(MEMCPY_BASE) ENTRY_PRIVATE(MEMCPY_BASE_ALIGNED) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 /* Simple arm-only copy loop to handle aligned copy operations */ stmfd sp!, {r4-r8} - .save {r4-r8} .cfi_adjust_cfa_offset 20 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 diff --git a/libc/arch-arm/cortex-a9/bionic/memset.S b/libc/arch-arm/cortex-a9/bionic/memset.S index a5057eb04..299f5a2d2 100644 --- a/libc/arch-arm/cortex-a9/bionic/memset.S +++ b/libc/arch-arm/cortex-a9/bionic/memset.S @@ -42,7 +42,6 @@ ENTRY(__memset_chk) // Preserve lr for backtrace. push {lr} - .save {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 @@ -72,7 +71,6 @@ ENTRY(memset) bhi __memset_large_copy stmfd sp!, {r0} - .save {r0} .cfi_def_cfa_offset 4 .cfi_rel_offset r0, 0 @@ -114,7 +112,6 @@ ENTRY_PRIVATE(__memset_large_copy) * offset = (4-(src&3))&3 = -src & 3 */ stmfd sp!, {r0, r4-r7, lr} - .save {r0, r4-r7, lr} .cfi_def_cfa_offset 24 .cfi_rel_offset r0, 0 .cfi_rel_offset r4, 4 diff --git a/libc/arch-arm/cortex-a9/bionic/strcmp.S b/libc/arch-arm/cortex-a9/bionic/strcmp.S index 2411c654c..4ff26c005 100644 --- a/libc/arch-arm/cortex-a9/bionic/strcmp.S +++ b/libc/arch-arm/cortex-a9/bionic/strcmp.S @@ -168,7 +168,6 @@ ENTRY(strcmp) bne .L_do_align /* Fast path. */ - .save {r4-r7} init .L_doubleword_aligned: diff --git a/libc/arch-arm/cortex-a9/bionic/strcpy.S b/libc/arch-arm/cortex-a9/bionic/strcpy.S index 9e9610bf3..d705aa354 100644 --- a/libc/arch-arm/cortex-a9/bionic/strcpy.S +++ b/libc/arch-arm/cortex-a9/bionic/strcpy.S @@ -62,6 +62,11 @@ .macro m_push push {r0, r4, r5, lr} + .cfi_def_cfa_offset 16 + .cfi_rel_offset r0, 0 + .cfi_rel_offset r4, 4 + .cfi_rel_offset r5, 8 + .cfi_rel_offset lr, 12 .endm // m_push .macro m_ret inst @@ -77,31 +82,31 @@ ENTRY(strcpy) // Unroll the first 8 bytes that will be copied. m_push - m_copy_byte reg=r2, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r5, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r2, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=strcpy_finish - m_copy_byte reg=r5, cmd=cbnz, label=strcpy_continue + m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r5, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish + m_copy_byte reg=r5, cmd=cbnz, label=.Lstrcpy_continue -strcpy_finish: +.Lstrcpy_finish: m_ret inst=pop -strcpy_continue: +.Lstrcpy_continue: pld [r1, #0] ands r3, r0, #7 - bne strcpy_align_dst + bne .Lstrcpy_align_dst -strcpy_check_src_align: +.Lstrcpy_check_src_align: // At this point dst is aligned to a double word, check if src // is also aligned to a double word. ands r3, r1, #7 - bne strcpy_unaligned_copy + bne .Lstrcpy_unaligned_copy .p2align 2 -strcpy_mainloop: +.Lstrcpy_mainloop: ldmia r1!, {r2, r3} pld [r1, #64] @@ -109,17 +114,17 @@ strcpy_mainloop: sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_mainloop + b .Lstrcpy_mainloop -strcpy_zero_in_first_register: +.Lstrcpy_zero_in_first_register: lsls lr, ip, #17 itt ne strbne r2, [r0] @@ -136,7 +141,7 @@ strcpy_zero_in_first_register: strb r3, [r0] m_ret inst=pop -strcpy_zero_in_second_register: +.Lstrcpy_zero_in_second_register: lsls lr, ip, #17 ittt ne stmiane r0!, {r2} @@ -156,18 +161,18 @@ strcpy_zero_in_second_register: strb r4, [r0] m_ret inst=pop -strcpy_align_dst: +.Lstrcpy_align_dst: // Align to a double word (64 bits). rsb r3, r3, #8 lsls ip, r3, #31 - beq strcpy_align_to_32 + beq .Lstrcpy_align_to_32 ldrb r2, [r1], #1 strb r2, [r0], #1 - cbz r2, strcpy_complete + cbz r2, .Lstrcpy_complete -strcpy_align_to_32: - bcc strcpy_align_to_64 +.Lstrcpy_align_to_32: + bcc .Lstrcpy_align_to_64 ldrb r4, [r1], #1 strb r4, [r0], #1 @@ -180,76 +185,76 @@ strcpy_align_to_32: it eq m_ret inst=popeq -strcpy_align_to_64: +.Lstrcpy_align_to_64: tst r3, #4 - beq strcpy_check_src_align + beq .Lstrcpy_check_src_align ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register stmia r0!, {r2} - b strcpy_check_src_align + b .Lstrcpy_check_src_align -strcpy_complete: +.Lstrcpy_complete: m_ret inst=pop -strcpy_unaligned_copy: +.Lstrcpy_unaligned_copy: // Dst is aligned to a double word, while src is at an unknown alignment. // There are 7 different versions of the unaligned copy code // to prevent overreading the src. The mainloop of every single version // will store 64 bits per loop. The difference is how much of src can // be read without potentially crossing a page boundary. tbb [pc, r3] -strcpy_unaligned_branchtable: +.Lstrcpy_unaligned_branchtable: .byte 0 - .byte ((strcpy_unalign7 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign6 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign5 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign4 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign3 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign2 - strcpy_unaligned_branchtable)/2) - .byte ((strcpy_unalign1 - strcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign7 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign6 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign5 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign4 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign3 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign2 - .Lstrcpy_unaligned_branchtable)/2) + .byte ((.Lstrcpy_unalign1 - .Lstrcpy_unaligned_branchtable)/2) .p2align 2 // Can read 7 bytes before possibly crossing a page. -strcpy_unalign7: +.Lstrcpy_unalign7: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r3, [r1] - cbz r3, strcpy_unalign7_copy5bytes + cbz r3, .Lstrcpy_unalign7_copy5bytes ldrb r4, [r1, #1] - cbz r4, strcpy_unalign7_copy6bytes + cbz r4, .Lstrcpy_unalign7_copy6bytes ldrb r5, [r1, #2] - cbz r5, strcpy_unalign7_copy7bytes + cbz r5, .Lstrcpy_unalign7_copy7bytes ldr r3, [r1], #4 pld [r1, #64] lsrs ip, r3, #24 stmia r0!, {r2, r3} - beq strcpy_unalign_return - b strcpy_unalign7 + beq .Lstrcpy_unalign_return + b .Lstrcpy_unalign7 -strcpy_unalign7_copy5bytes: +.Lstrcpy_unalign7_copy5bytes: stmia r0!, {r2} strb r3, [r0] -strcpy_unalign_return: +.Lstrcpy_unalign_return: m_ret inst=pop -strcpy_unalign7_copy6bytes: +.Lstrcpy_unalign7_copy6bytes: stmia r0!, {r2} strb r3, [r0], #1 strb r4, [r0], #1 m_ret inst=pop -strcpy_unalign7_copy7bytes: +.Lstrcpy_unalign7_copy7bytes: stmia r0!, {r2} strb r3, [r0], #1 strb r4, [r0], #1 @@ -258,30 +263,30 @@ strcpy_unalign7_copy7bytes: .p2align 2 // Can read 6 bytes before possibly crossing a page. -strcpy_unalign6: +.Lstrcpy_unalign6: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r4, [r1] - cbz r4, strcpy_unalign_copy5bytes + cbz r4, .Lstrcpy_unalign_copy5bytes ldrb r5, [r1, #1] - cbz r5, strcpy_unalign_copy6bytes + cbz r5, .Lstrcpy_unalign_copy6bytes ldr r3, [r1], #4 pld [r1, #64] tst r3, #0xff0000 - beq strcpy_unalign6_copy7bytes + beq .Lstrcpy_unalign6_copy7bytes lsrs ip, r3, #24 stmia r0!, {r2, r3} - beq strcpy_unalign_return - b strcpy_unalign6 + beq .Lstrcpy_unalign_return + b .Lstrcpy_unalign6 -strcpy_unalign6_copy7bytes: +.Lstrcpy_unalign6_copy7bytes: stmia r0!, {r2} strh r3, [r0], #2 lsr r3, #16 @@ -290,16 +295,16 @@ strcpy_unalign6_copy7bytes: .p2align 2 // Can read 5 bytes before possibly crossing a page. -strcpy_unalign5: +.Lstrcpy_unalign5: ldr r2, [r1], #4 sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldrb r4, [r1] - cbz r4, strcpy_unalign_copy5bytes + cbz r4, .Lstrcpy_unalign_copy5bytes ldr r3, [r1], #4 @@ -308,17 +313,17 @@ strcpy_unalign5: sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_unalign5 + b .Lstrcpy_unalign5 -strcpy_unalign_copy5bytes: +.Lstrcpy_unalign_copy5bytes: stmia r0!, {r2} strb r4, [r0] m_ret inst=pop -strcpy_unalign_copy6bytes: +.Lstrcpy_unalign_copy6bytes: stmia r0!, {r2} strb r4, [r0], #1 strb r5, [r0] @@ -326,13 +331,13 @@ strcpy_unalign_copy6bytes: .p2align 2 // Can read 4 bytes before possibly crossing a page. -strcpy_unalign4: +.Lstrcpy_unalign4: ldmia r1!, {r2} sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register ldmia r1!, {r3} pld [r1, #64] @@ -340,20 +345,20 @@ strcpy_unalign4: sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_unalign4 + b .Lstrcpy_unalign4 .p2align 2 // Can read 3 bytes before possibly crossing a page. -strcpy_unalign3: +.Lstrcpy_unalign3: ldrb r2, [r1] - cbz r2, strcpy_unalign3_copy1byte + cbz r2, .Lstrcpy_unalign3_copy1byte ldrb r3, [r1, #1] - cbz r3, strcpy_unalign3_copy2bytes + cbz r3, .Lstrcpy_unalign3_copy2bytes ldrb r4, [r1, #2] - cbz r4, strcpy_unalign3_copy3bytes + cbz r4, .Lstrcpy_unalign3_copy3bytes ldr r2, [r1], #4 ldr r3, [r1], #4 @@ -361,26 +366,26 @@ strcpy_unalign3: pld [r1, #64] lsrs lr, r2, #24 - beq strcpy_unalign_copy4bytes + beq .Lstrcpy_unalign_copy4bytes sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_unalign3 + b .Lstrcpy_unalign3 -strcpy_unalign3_copy1byte: +.Lstrcpy_unalign3_copy1byte: strb r2, [r0] m_ret inst=pop -strcpy_unalign3_copy2bytes: +.Lstrcpy_unalign3_copy2bytes: strb r2, [r0], #1 strb r3, [r0] m_ret inst=pop -strcpy_unalign3_copy3bytes: +.Lstrcpy_unalign3_copy3bytes: strb r2, [r0], #1 strb r3, [r0], #1 strb r4, [r0] @@ -388,34 +393,34 @@ strcpy_unalign3_copy3bytes: .p2align 2 // Can read 2 bytes before possibly crossing a page. -strcpy_unalign2: +.Lstrcpy_unalign2: ldrb r2, [r1] - cbz r2, strcpy_unalign_copy1byte + cbz r2, .Lstrcpy_unalign_copy1byte ldrb r3, [r1, #1] - cbz r3, strcpy_unalign_copy2bytes + cbz r3, .Lstrcpy_unalign_copy2bytes ldr r2, [r1], #4 ldr r3, [r1], #4 pld [r1, #64] tst r2, #0xff0000 - beq strcpy_unalign_copy3bytes + beq .Lstrcpy_unalign_copy3bytes lsrs ip, r2, #24 - beq strcpy_unalign_copy4bytes + beq .Lstrcpy_unalign_copy4bytes sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_unalign2 + b .Lstrcpy_unalign2 .p2align 2 // Can read 1 byte before possibly crossing a page. -strcpy_unalign1: +.Lstrcpy_unalign1: ldrb r2, [r1] - cbz r2, strcpy_unalign_copy1byte + cbz r2, .Lstrcpy_unalign_copy1byte ldr r2, [r1], #4 ldr r3, [r1], #4 @@ -425,32 +430,32 @@ strcpy_unalign1: sub ip, r2, #0x01010101 bic ip, ip, r2 ands ip, ip, #0x80808080 - bne strcpy_zero_in_first_register + bne .Lstrcpy_zero_in_first_register sub ip, r3, #0x01010101 bic ip, ip, r3 ands ip, ip, #0x80808080 - bne strcpy_zero_in_second_register + bne .Lstrcpy_zero_in_second_register stmia r0!, {r2, r3} - b strcpy_unalign1 + b .Lstrcpy_unalign1 -strcpy_unalign_copy1byte: +.Lstrcpy_unalign_copy1byte: strb r2, [r0] m_ret inst=pop -strcpy_unalign_copy2bytes: +.Lstrcpy_unalign_copy2bytes: strb r2, [r0], #1 strb r3, [r0] m_ret inst=pop -strcpy_unalign_copy3bytes: +.Lstrcpy_unalign_copy3bytes: strh r2, [r0], #2 lsr r2, #16 strb r2, [r0] m_ret inst=pop -strcpy_unalign_copy4bytes: +.Lstrcpy_unalign_copy4bytes: stmia r0, {r2} m_ret inst=pop END(strcpy) diff --git a/libc/arch-arm/denver/bionic/__strcat_chk.S b/libc/arch-arm/denver/bionic/__strcat_chk.S index 36da2d9d8..a2e9c229e 100644 --- a/libc/arch-arm/denver/bionic/__strcat_chk.S +++ b/libc/arch-arm/denver/bionic/__strcat_chk.S @@ -40,12 +40,10 @@ ENTRY(__strcat_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 push {r4, r5} - .save {r4, r5} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 @@ -195,9 +193,6 @@ END(__strcat_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcat_chk_failed) - .save {r0, lr} - .save {r4, r5} - .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/denver/bionic/__strcpy_chk.S b/libc/arch-arm/denver/bionic/__strcpy_chk.S index c3e3e14fa..db766863a 100644 --- a/libc/arch-arm/denver/bionic/__strcpy_chk.S +++ b/libc/arch-arm/denver/bionic/__strcpy_chk.S @@ -39,7 +39,6 @@ ENTRY(__strcpy_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -161,7 +160,6 @@ END(__strcpy_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcpy_chk_failed) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/denver/bionic/memcpy.S b/libc/arch-arm/denver/bionic/memcpy.S index da4f3dd79..410b663e2 100644 --- a/libc/arch-arm/denver/bionic/memcpy.S +++ b/libc/arch-arm/denver/bionic/memcpy.S @@ -72,7 +72,6 @@ END(__memcpy_chk) ENTRY(memcpy) pld [r1, #64] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -85,7 +84,6 @@ END(memcpy) ENTRY_PRIVATE(__memcpy_chk_fail) // Preserve lr for backtrace. push {lr} - .save {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 diff --git a/libc/arch-arm/krait/bionic/__strcat_chk.S b/libc/arch-arm/krait/bionic/__strcat_chk.S index 34becdbbf..246f159c0 100644 --- a/libc/arch-arm/krait/bionic/__strcat_chk.S +++ b/libc/arch-arm/krait/bionic/__strcat_chk.S @@ -40,12 +40,10 @@ ENTRY(__strcat_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 push {r4, r5} - .save {r4, r5} .cfi_adjust_cfa_offset 8 .cfi_rel_offset r4, 0 .cfi_rel_offset r5, 4 @@ -194,8 +192,6 @@ END(__strcat_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcat_chk_failed) - .save {r0, lr} - .save {r4, r5} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/krait/bionic/__strcpy_chk.S b/libc/arch-arm/krait/bionic/__strcpy_chk.S index c3e3e14fa..db766863a 100644 --- a/libc/arch-arm/krait/bionic/__strcpy_chk.S +++ b/libc/arch-arm/krait/bionic/__strcpy_chk.S @@ -39,7 +39,6 @@ ENTRY(__strcpy_chk) pld [r0, #0] push {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -161,7 +160,6 @@ END(__strcpy_chk) #include "memcpy_base.S" ENTRY_PRIVATE(__strcpy_chk_failed) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/krait/bionic/memcpy.S b/libc/arch-arm/krait/bionic/memcpy.S index 0b7b27659..9ff46a8ac 100644 --- a/libc/arch-arm/krait/bionic/memcpy.S +++ b/libc/arch-arm/krait/bionic/memcpy.S @@ -53,7 +53,6 @@ END(__memcpy_chk) ENTRY(memcpy) pld [r1, #64] stmfd sp!, {r0, lr} - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 @@ -66,7 +65,6 @@ END(memcpy) ENTRY_PRIVATE(__memcpy_chk_fail) // Preserve lr for backtrace. push {lr} - .save {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 diff --git a/libc/arch-arm/krait/bionic/memcpy_base.S b/libc/arch-arm/krait/bionic/memcpy_base.S index 99fc255f3..035dcf126 100644 --- a/libc/arch-arm/krait/bionic/memcpy_base.S +++ b/libc/arch-arm/krait/bionic/memcpy_base.S @@ -36,7 +36,6 @@ // Assumes neon instructions and a cache line size of 32 bytes. ENTRY_PRIVATE(MEMCPY_BASE) - .save {r0, lr} .cfi_def_cfa_offset 8 .cfi_rel_offset r0, 0 .cfi_rel_offset lr, 4 diff --git a/libc/arch-arm/krait/bionic/memset.S b/libc/arch-arm/krait/bionic/memset.S index 5d1943b72..e9f643133 100644 --- a/libc/arch-arm/krait/bionic/memset.S +++ b/libc/arch-arm/krait/bionic/memset.S @@ -43,7 +43,6 @@ ENTRY(__memset_chk) bls .L_done // Preserve lr for backtrace. - .save {lr} push {lr} .cfi_def_cfa_offset 4 .cfi_rel_offset lr, 0 @@ -69,7 +68,6 @@ END(bzero) /* memset() returns its first argument. */ ENTRY(memset) - .save {r0} stmfd sp!, {r0} .cfi_def_cfa_offset 4 .cfi_rel_offset r0, 0 diff --git a/libc/arch-arm/krait/bionic/strcmp.S b/libc/arch-arm/krait/bionic/strcmp.S index eacb82a6e..9121c01de 100644 --- a/libc/arch-arm/krait/bionic/strcmp.S +++ b/libc/arch-arm/krait/bionic/strcmp.S @@ -168,7 +168,6 @@ ENTRY(strcmp) bne .L_do_align /* Fast path. */ - .save {r4-r7} init .L_doubleword_aligned: From 98d57c95bc7b0042d60b0f7f426ee40b60a67198 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 30 Sep 2014 11:53:13 -0700 Subject: [PATCH 061/194] Add stpcpy assembler version. For generic, continue to use the C version of the code. Bug: 13746695 (cherry picked from commit 7d849ac378515efa1522e538e6e1d3b546cae97d) Change-Id: Iae44785f37f9bb59103ab78fb9f74c92f8a95c7f --- libc/arch-arm/arm.mk | 1 - libc/arch-arm/cortex-a15/bionic/stpcpy.S | 30 + libc/arch-arm/cortex-a15/bionic/strcpy.S | 432 +------------- libc/arch-arm/cortex-a15/bionic/string_copy.S | 513 +++++++++++++++++ libc/arch-arm/cortex-a15/cortex-a15.mk | 5 +- libc/arch-arm/cortex-a9/bionic/stpcpy.S | 30 + libc/arch-arm/cortex-a9/bionic/strcpy.S | 437 +------------- libc/arch-arm/cortex-a9/bionic/string_copy.S | 535 ++++++++++++++++++ libc/arch-arm/cortex-a9/cortex-a9.mk | 5 +- libc/arch-arm/denver/denver.mk | 3 +- libc/arch-arm/generic/generic.mk | 1 + libc/arch-arm/krait/krait.mk | 1 + 12 files changed, 1124 insertions(+), 869 deletions(-) create mode 100644 libc/arch-arm/cortex-a15/bionic/stpcpy.S create mode 100644 libc/arch-arm/cortex-a15/bionic/string_copy.S create mode 100644 libc/arch-arm/cortex-a9/bionic/stpcpy.S create mode 100644 libc/arch-arm/cortex-a9/bionic/string_copy.S diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index b5ed7f0e0..cca4ed020 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -41,7 +41,6 @@ libc_freebsd_src_files_arm += \ libc_openbsd_src_files_arm += \ upstream-openbsd/lib/libc/string/bcopy.c \ - upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strlcat.c \ upstream-openbsd/lib/libc/string/strlcpy.c \ diff --git a/libc/arch-arm/cortex-a15/bionic/stpcpy.S b/libc/arch-arm/cortex-a15/bionic/stpcpy.S new file mode 100644 index 000000000..740523b5d --- /dev/null +++ b/libc/arch-arm/cortex-a15/bionic/stpcpy.S @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#define STPCPY +#include "string_copy.S" diff --git a/libc/arch-arm/cortex-a15/bionic/strcpy.S b/libc/arch-arm/cortex-a15/bionic/strcpy.S index 2cfdb1931..951face01 100644 --- a/libc/arch-arm/cortex-a15/bionic/strcpy.S +++ b/libc/arch-arm/cortex-a15/bionic/strcpy.S @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Android Open Source Project + * Copyright (C) 2014 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,432 +25,6 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -/* - * Copyright (c) 2013 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include - - .syntax unified - - .thumb - .thumb_func - - .macro m_push - push {r0, r4, r5, lr} - .cfi_def_cfa_offset 16 - .cfi_rel_offset r0, 0 - .cfi_rel_offset r4, 4 - .cfi_rel_offset r5, 8 - .cfi_rel_offset lr, 12 - .endm // m_push - - .macro m_pop - pop {r0, r4, r5, pc} - .endm // m_pop - - .macro m_copy_byte reg, cmd, label - ldrb \reg, [r1], #1 - strb \reg, [r0], #1 - \cmd \reg, \label - .endm // m_copy_byte - -ENTRY(strcpy) - // For short copies, hard-code checking the first 8 bytes since this - // new code doesn't win until after about 8 bytes. - m_push - m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r5, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r5, cmd=cbnz, label=.Lstrcpy_continue - -.Lstrcpy_finish: - m_pop - -.Lstrcpy_continue: - pld [r1, #0] - ands r3, r0, #7 - beq .Lstrcpy_check_src_align - - // Align to a double word (64 bits). - rsb r3, r3, #8 - lsls ip, r3, #31 - beq .Lstrcpy_align_to_32 - - ldrb r2, [r1], #1 - strb r2, [r0], #1 - cbz r2, .Lstrcpy_complete - -.Lstrcpy_align_to_32: - bcc .Lstrcpy_align_to_64 - - ldrb r2, [r1], #1 - strb r2, [r0], #1 - cbz r2, .Lstrcpy_complete - ldrb r2, [r1], #1 - strb r2, [r0], #1 - cbz r2, .Lstrcpy_complete - -.Lstrcpy_align_to_64: - tst r3, #4 - beq .Lstrcpy_check_src_align - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - str r2, [r0], #4 - -.Lstrcpy_check_src_align: - // At this point dst is aligned to a double word, check if src - // is also aligned to a double word. - ands r3, r1, #7 - bne .Lstrcpy_unaligned_copy - - .p2align 2 -.Lstrcpy_mainloop: - ldrd r2, r3, [r1], #8 - - pld [r1, #64] - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_mainloop - -.Lstrcpy_complete: - m_pop - -.Lstrcpy_zero_in_first_register: - lsls lr, ip, #17 - bne .Lstrcpy_copy1byte - bcs .Lstrcpy_copy2bytes - lsls ip, ip, #1 - bne .Lstrcpy_copy3bytes - -.Lstrcpy_copy4bytes: - // Copy 4 bytes to the destiniation. - str r2, [r0] - m_pop - -.Lstrcpy_copy1byte: - strb r2, [r0] - m_pop - -.Lstrcpy_copy2bytes: - strh r2, [r0] - m_pop - -.Lstrcpy_copy3bytes: - strh r2, [r0], #2 - lsr r2, #16 - strb r2, [r0] - m_pop - -.Lstrcpy_zero_in_second_register: - lsls lr, ip, #17 - bne .Lstrcpy_copy5bytes - bcs .Lstrcpy_copy6bytes - lsls ip, ip, #1 - bne .Lstrcpy_copy7bytes - - // Copy 8 bytes to the destination. - strd r2, r3, [r0] - m_pop - -.Lstrcpy_copy5bytes: - str r2, [r0], #4 - strb r3, [r0] - m_pop - -.Lstrcpy_copy6bytes: - str r2, [r0], #4 - strh r3, [r0] - m_pop - -.Lstrcpy_copy7bytes: - str r2, [r0], #4 - strh r3, [r0], #2 - lsr r3, #16 - strb r3, [r0] - m_pop - -.Lstrcpy_unaligned_copy: - // Dst is aligned to a double word, while src is at an unknown alignment. - // There are 7 different versions of the unaligned copy code - // to prevent overreading the src. The mainloop of every single version - // will store 64 bits per loop. The difference is how much of src can - // be read without potentially crossing a page boundary. - tbb [pc, r3] -.Lstrcpy_unaligned_branchtable: - .byte 0 - .byte ((.Lstrcpy_unalign7 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign6 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign5 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign4 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign3 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign2 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign1 - .Lstrcpy_unaligned_branchtable)/2) - - .p2align 2 - // Can read 7 bytes before possibly crossing a page. -.Lstrcpy_unalign7: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r3, [r1] - cbz r3, .Lstrcpy_unalign7_copy5bytes - ldrb r4, [r1, #1] - cbz r4, .Lstrcpy_unalign7_copy6bytes - ldrb r5, [r1, #2] - cbz r5, .Lstrcpy_unalign7_copy7bytes - - ldr r3, [r1], #4 - pld [r1, #64] - - lsrs ip, r3, #24 - strd r2, r3, [r0], #8 - beq .Lstrcpy_unalign_return - b .Lstrcpy_unalign7 - -.Lstrcpy_unalign7_copy5bytes: - str r2, [r0], #4 - strb r3, [r0] -.Lstrcpy_unalign_return: - m_pop - -.Lstrcpy_unalign7_copy6bytes: - str r2, [r0], #4 - strb r3, [r0], #1 - strb r4, [r0], #1 - m_pop - -.Lstrcpy_unalign7_copy7bytes: - str r2, [r0], #4 - strb r3, [r0], #1 - strb r4, [r0], #1 - strb r5, [r0], #1 - m_pop - - .p2align 2 - // Can read 6 bytes before possibly crossing a page. -.Lstrcpy_unalign6: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r4, [r1] - cbz r4, .Lstrcpy_unalign_copy5bytes - ldrb r5, [r1, #1] - cbz r5, .Lstrcpy_unalign_copy6bytes - - ldr r3, [r1], #4 - pld [r1, #64] - - tst r3, #0xff0000 - beq .Lstrcpy_copy7bytes - lsrs ip, r3, #24 - strd r2, r3, [r0], #8 - beq .Lstrcpy_unalign_return - b .Lstrcpy_unalign6 - - .p2align 2 - // Can read 5 bytes before possibly crossing a page. -.Lstrcpy_unalign5: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r4, [r1] - cbz r4, .Lstrcpy_unalign_copy5bytes - - ldr r3, [r1], #4 - - pld [r1, #64] - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_unalign5 - -.Lstrcpy_unalign_copy5bytes: - str r2, [r0], #4 - strb r4, [r0] - m_pop - -.Lstrcpy_unalign_copy6bytes: - str r2, [r0], #4 - strb r4, [r0], #1 - strb r5, [r0] - m_pop - - .p2align 2 - // Can read 4 bytes before possibly crossing a page. -.Lstrcpy_unalign4: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldr r3, [r1], #4 - pld [r1, #64] - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_unalign4 - - .p2align 2 - // Can read 3 bytes before possibly crossing a page. -.Lstrcpy_unalign3: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign3_copy1byte - ldrb r3, [r1, #1] - cbz r3, .Lstrcpy_unalign3_copy2bytes - ldrb r4, [r1, #2] - cbz r4, .Lstrcpy_unalign3_copy3bytes - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - - pld [r1, #64] - - lsrs lr, r2, #24 - beq .Lstrcpy_copy4bytes - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_unalign3 - -.Lstrcpy_unalign3_copy1byte: - strb r2, [r0] - m_pop - -.Lstrcpy_unalign3_copy2bytes: - strb r2, [r0], #1 - strb r3, [r0] - m_pop - -.Lstrcpy_unalign3_copy3bytes: - strb r2, [r0], #1 - strb r3, [r0], #1 - strb r4, [r0] - m_pop - - .p2align 2 - // Can read 2 bytes before possibly crossing a page. -.Lstrcpy_unalign2: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign_copy1byte - ldrb r4, [r1, #1] - cbz r4, .Lstrcpy_unalign_copy2bytes - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - pld [r1, #64] - - tst r2, #0xff0000 - beq .Lstrcpy_copy3bytes - lsrs ip, r2, #24 - beq .Lstrcpy_copy4bytes - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_unalign2 - - .p2align 2 - // Can read 1 byte before possibly crossing a page. -.Lstrcpy_unalign1: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign_copy1byte - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - - pld [r1, #64] - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - strd r2, r3, [r0], #8 - b .Lstrcpy_unalign1 - -.Lstrcpy_unalign_copy1byte: - strb r2, [r0] - m_pop - -.Lstrcpy_unalign_copy2bytes: - strb r2, [r0], #1 - strb r4, [r0] - m_pop -END(strcpy) +#define STRCPY +#include "string_copy.S" diff --git a/libc/arch-arm/cortex-a15/bionic/string_copy.S b/libc/arch-arm/cortex-a15/bionic/string_copy.S new file mode 100644 index 000000000..20f0e91b0 --- /dev/null +++ b/libc/arch-arm/cortex-a15/bionic/string_copy.S @@ -0,0 +1,513 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 2013 ARM Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the company may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !defined(STPCPY) && !defined(STRCPY) +#error "Either STPCPY or STRCPY must be defined." +#endif + +#include + + .syntax unified + + .thumb + .thumb_func + +#if defined(STPCPY) + .macro m_push + push {r4, r5, lr} + .cfi_def_cfa_offset 12 + .cfi_rel_offset r4, 0 + .cfi_rel_offset r5, 4 + .cfi_rel_offset lr, 8 + .endm // m_push +#else + .macro m_push + push {r0, r4, r5, lr} + .cfi_def_cfa_offset 16 + .cfi_rel_offset r0, 0 + .cfi_rel_offset r4, 4 + .cfi_rel_offset r5, 8 + .cfi_rel_offset lr, 12 + .endm // m_push +#endif + +#if defined(STPCPY) + .macro m_pop + pop {r4, r5, pc} + .endm // m_pop +#else + .macro m_pop + pop {r0, r4, r5, pc} + .endm // m_pop +#endif + + .macro m_copy_byte reg, cmd, label + ldrb \reg, [r1], #1 + strb \reg, [r0], #1 + \cmd \reg, \label + .endm // m_copy_byte + +#if defined(STPCPY) +ENTRY(stpcpy) +#else +ENTRY(strcpy) +#endif + // For short copies, hard-code checking the first 8 bytes since this + // new code doesn't win until after about 8 bytes. + m_push + m_copy_byte reg=r2, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r5, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r2, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r5, cmd=cbnz, label=.Lstringcopy_continue + +.Lstringcopy_finish: +#if defined(STPCPY) + sub r0, r0, #1 +#endif + m_pop + +.Lstringcopy_continue: + pld [r1, #0] + ands r3, r0, #7 + beq .Lstringcopy_check_src_align + + // Align to a double word (64 bits). + rsb r3, r3, #8 + lsls ip, r3, #31 + beq .Lstringcopy_align_to_32 + + ldrb r2, [r1], #1 + strb r2, [r0], #1 + cbz r2, .Lstringcopy_complete + +.Lstringcopy_align_to_32: + bcc .Lstringcopy_align_to_64 + + ldrb r2, [r1], #1 + strb r2, [r0], #1 + cbz r2, .Lstringcopy_complete + ldrb r2, [r1], #1 + strb r2, [r0], #1 + cbz r2, .Lstringcopy_complete + +.Lstringcopy_align_to_64: + tst r3, #4 + beq .Lstringcopy_check_src_align + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + str r2, [r0], #4 + +.Lstringcopy_check_src_align: + // At this point dst is aligned to a double word, check if src + // is also aligned to a double word. + ands r3, r1, #7 + bne .Lstringcopy_unaligned_copy + + .p2align 2 +.Lstringcopy_mainloop: + ldrd r2, r3, [r1], #8 + + pld [r1, #64] + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_mainloop + +.Lstringcopy_complete: +#if defined(STPCPY) + sub r0, r0, #1 +#endif + m_pop + +.Lstringcopy_zero_in_first_register: + lsls lr, ip, #17 + bne .Lstringcopy_copy1byte + bcs .Lstringcopy_copy2bytes + lsls ip, ip, #1 + bne .Lstringcopy_copy3bytes + +.Lstringcopy_copy4bytes: + // Copy 4 bytes to the destiniation. +#if defined(STPCPY) + str r2, [r0], #3 +#else + str r2, [r0] +#endif + m_pop + +.Lstringcopy_copy1byte: + strb r2, [r0] + m_pop + +.Lstringcopy_copy2bytes: +#if defined(STPCPY) + strh r2, [r0], #1 +#else + strh r2, [r0] +#endif + m_pop + +.Lstringcopy_copy3bytes: + strh r2, [r0], #2 + lsr r2, #16 + strb r2, [r0] + m_pop + +.Lstringcopy_zero_in_second_register: + lsls lr, ip, #17 + bne .Lstringcopy_copy5bytes + bcs .Lstringcopy_copy6bytes + lsls ip, ip, #1 + bne .Lstringcopy_copy7bytes + + // Copy 8 bytes to the destination. + strd r2, r3, [r0] +#if defined(STPCPY) + add r0, r0, #7 +#endif + m_pop + +.Lstringcopy_copy5bytes: + str r2, [r0], #4 + strb r3, [r0] + m_pop + +.Lstringcopy_copy6bytes: + str r2, [r0], #4 +#if defined(STPCPY) + strh r3, [r0], #1 +#else + strh r3, [r0] +#endif + m_pop + +.Lstringcopy_copy7bytes: + str r2, [r0], #4 + strh r3, [r0], #2 + lsr r3, #16 + strb r3, [r0] + m_pop + +.Lstringcopy_unaligned_copy: + // Dst is aligned to a double word, while src is at an unknown alignment. + // There are 7 different versions of the unaligned copy code + // to prevent overreading the src. The mainloop of every single version + // will store 64 bits per loop. The difference is how much of src can + // be read without potentially crossing a page boundary. + tbb [pc, r3] +.Lstringcopy_unaligned_branchtable: + .byte 0 + .byte ((.Lstringcopy_unalign7 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign6 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign5 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign4 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign3 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign2 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign1 - .Lstringcopy_unaligned_branchtable)/2) + + .p2align 2 + // Can read 7 bytes before possibly crossing a page. +.Lstringcopy_unalign7: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r3, [r1] + cbz r3, .Lstringcopy_unalign7_copy5bytes + ldrb r4, [r1, #1] + cbz r4, .Lstringcopy_unalign7_copy6bytes + ldrb r5, [r1, #2] + cbz r5, .Lstringcopy_unalign7_copy7bytes + + ldr r3, [r1], #4 + pld [r1, #64] + + lsrs ip, r3, #24 + strd r2, r3, [r0], #8 +#if defined(STPCPY) + beq .Lstringcopy_finish +#else + beq .Lstringcopy_unalign_return +#endif + b .Lstringcopy_unalign7 + +.Lstringcopy_unalign7_copy5bytes: + str r2, [r0], #4 + strb r3, [r0] +.Lstringcopy_unalign_return: + m_pop + +.Lstringcopy_unalign7_copy6bytes: + str r2, [r0], #4 + strb r3, [r0], #1 + strb r4, [r0] + m_pop + +.Lstringcopy_unalign7_copy7bytes: + str r2, [r0], #4 + strb r3, [r0], #1 + strb r4, [r0], #1 + strb r5, [r0] + m_pop + + .p2align 2 + // Can read 6 bytes before possibly crossing a page. +.Lstringcopy_unalign6: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r4, [r1] + cbz r4, .Lstringcopy_unalign_copy5bytes + ldrb r5, [r1, #1] + cbz r5, .Lstringcopy_unalign_copy6bytes + + ldr r3, [r1], #4 + pld [r1, #64] + + tst r3, #0xff0000 + beq .Lstringcopy_copy7bytes + lsrs ip, r3, #24 + strd r2, r3, [r0], #8 +#if defined(STPCPY) + beq .Lstringcopy_finish +#else + beq .Lstringcopy_unalign_return +#endif + b .Lstringcopy_unalign6 + + .p2align 2 + // Can read 5 bytes before possibly crossing a page. +.Lstringcopy_unalign5: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r4, [r1] + cbz r4, .Lstringcopy_unalign_copy5bytes + + ldr r3, [r1], #4 + + pld [r1, #64] + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_unalign5 + +.Lstringcopy_unalign_copy5bytes: + str r2, [r0], #4 + strb r4, [r0] + m_pop + +.Lstringcopy_unalign_copy6bytes: + str r2, [r0], #4 + strb r4, [r0], #1 + strb r5, [r0] + m_pop + + .p2align 2 + // Can read 4 bytes before possibly crossing a page. +.Lstringcopy_unalign4: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldr r3, [r1], #4 + pld [r1, #64] + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_unalign4 + + .p2align 2 + // Can read 3 bytes before possibly crossing a page. +.Lstringcopy_unalign3: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign3_copy1byte + ldrb r3, [r1, #1] + cbz r3, .Lstringcopy_unalign3_copy2bytes + ldrb r4, [r1, #2] + cbz r4, .Lstringcopy_unalign3_copy3bytes + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + + pld [r1, #64] + + lsrs lr, r2, #24 + beq .Lstringcopy_copy4bytes + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_unalign3 + +.Lstringcopy_unalign3_copy1byte: + strb r2, [r0] + m_pop + +.Lstringcopy_unalign3_copy2bytes: + strb r2, [r0], #1 + strb r3, [r0] + m_pop + +.Lstringcopy_unalign3_copy3bytes: + strb r2, [r0], #1 + strb r3, [r0], #1 + strb r4, [r0] + m_pop + + .p2align 2 + // Can read 2 bytes before possibly crossing a page. +.Lstringcopy_unalign2: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign_copy1byte + ldrb r4, [r1, #1] + cbz r4, .Lstringcopy_unalign_copy2bytes + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + pld [r1, #64] + + tst r2, #0xff0000 + beq .Lstringcopy_copy3bytes + lsrs ip, r2, #24 + beq .Lstringcopy_copy4bytes + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_unalign2 + + .p2align 2 + // Can read 1 byte before possibly crossing a page. +.Lstringcopy_unalign1: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign_copy1byte + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + + pld [r1, #64] + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + strd r2, r3, [r0], #8 + b .Lstringcopy_unalign1 + +.Lstringcopy_unalign_copy1byte: + strb r2, [r0] + m_pop + +.Lstringcopy_unalign_copy2bytes: + strb r2, [r0], #1 + strb r4, [r0] + m_pop +#if defined(STPCPY) +END(stpcpy) +#else +END(strcpy) +#endif diff --git a/libc/arch-arm/cortex-a15/cortex-a15.mk b/libc/arch-arm/cortex-a15/cortex-a15.mk index 552811ebc..f1abe3231 100644 --- a/libc/arch-arm/cortex-a15/cortex-a15.mk +++ b/libc/arch-arm/cortex-a15/cortex-a15.mk @@ -1,10 +1,11 @@ libc_bionic_src_files_arm += \ arch-arm/cortex-a15/bionic/memcpy.S \ arch-arm/cortex-a15/bionic/memset.S \ + arch-arm/cortex-a15/bionic/stpcpy.S \ arch-arm/cortex-a15/bionic/strcat.S \ + arch-arm/cortex-a15/bionic/__strcat_chk.S \ arch-arm/cortex-a15/bionic/strcmp.S \ arch-arm/cortex-a15/bionic/strcpy.S \ - arch-arm/cortex-a15/bionic/strlen.S \ - arch-arm/cortex-a15/bionic/__strcat_chk.S \ arch-arm/cortex-a15/bionic/__strcpy_chk.S \ + arch-arm/cortex-a15/bionic/strlen.S \ bionic/memmove.c \ diff --git a/libc/arch-arm/cortex-a9/bionic/stpcpy.S b/libc/arch-arm/cortex-a9/bionic/stpcpy.S new file mode 100644 index 000000000..740523b5d --- /dev/null +++ b/libc/arch-arm/cortex-a9/bionic/stpcpy.S @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#define STPCPY +#include "string_copy.S" diff --git a/libc/arch-arm/cortex-a9/bionic/strcpy.S b/libc/arch-arm/cortex-a9/bionic/strcpy.S index d705aa354..951face01 100644 --- a/libc/arch-arm/cortex-a9/bionic/strcpy.S +++ b/libc/arch-arm/cortex-a9/bionic/strcpy.S @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Android Open Source Project + * Copyright (C) 2014 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,437 +25,6 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -/* - * Copyright (c) 2013 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include - - .syntax unified - - .thumb - .thumb_func - - .macro m_push - push {r0, r4, r5, lr} - .cfi_def_cfa_offset 16 - .cfi_rel_offset r0, 0 - .cfi_rel_offset r4, 4 - .cfi_rel_offset r5, 8 - .cfi_rel_offset lr, 12 - .endm // m_push - - .macro m_ret inst - \inst {r0, r4, r5, pc} - .endm // m_ret - - .macro m_copy_byte reg, cmd, label - ldrb \reg, [r1], #1 - strb \reg, [r0], #1 - \cmd \reg, \label - .endm // m_copy_byte - -ENTRY(strcpy) - // Unroll the first 8 bytes that will be copied. - m_push - m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r5, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r2, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r3, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r4, cmd=cbz, label=.Lstrcpy_finish - m_copy_byte reg=r5, cmd=cbnz, label=.Lstrcpy_continue - -.Lstrcpy_finish: - m_ret inst=pop - -.Lstrcpy_continue: - pld [r1, #0] - ands r3, r0, #7 - bne .Lstrcpy_align_dst - -.Lstrcpy_check_src_align: - // At this point dst is aligned to a double word, check if src - // is also aligned to a double word. - ands r3, r1, #7 - bne .Lstrcpy_unaligned_copy - - .p2align 2 -.Lstrcpy_mainloop: - ldmia r1!, {r2, r3} - - pld [r1, #64] - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_mainloop - -.Lstrcpy_zero_in_first_register: - lsls lr, ip, #17 - itt ne - strbne r2, [r0] - m_ret inst=popne - itt cs - strhcs r2, [r0] - m_ret inst=popcs - lsls ip, ip, #1 - itt eq - streq r2, [r0] - m_ret inst=popeq - strh r2, [r0], #2 - lsr r3, r2, #16 - strb r3, [r0] - m_ret inst=pop - -.Lstrcpy_zero_in_second_register: - lsls lr, ip, #17 - ittt ne - stmiane r0!, {r2} - strbne r3, [r0] - m_ret inst=popne - ittt cs - strcs r2, [r0], #4 - strhcs r3, [r0] - m_ret inst=popcs - lsls ip, ip, #1 - itt eq - stmiaeq r0, {r2, r3} - m_ret inst=popeq - stmia r0!, {r2} - strh r3, [r0], #2 - lsr r4, r3, #16 - strb r4, [r0] - m_ret inst=pop - -.Lstrcpy_align_dst: - // Align to a double word (64 bits). - rsb r3, r3, #8 - lsls ip, r3, #31 - beq .Lstrcpy_align_to_32 - - ldrb r2, [r1], #1 - strb r2, [r0], #1 - cbz r2, .Lstrcpy_complete - -.Lstrcpy_align_to_32: - bcc .Lstrcpy_align_to_64 - - ldrb r4, [r1], #1 - strb r4, [r0], #1 - cmp r4, #0 - it eq - m_ret inst=popeq - ldrb r5, [r1], #1 - strb r5, [r0], #1 - cmp r5, #0 - it eq - m_ret inst=popeq - -.Lstrcpy_align_to_64: - tst r3, #4 - beq .Lstrcpy_check_src_align - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - stmia r0!, {r2} - b .Lstrcpy_check_src_align - -.Lstrcpy_complete: - m_ret inst=pop - -.Lstrcpy_unaligned_copy: - // Dst is aligned to a double word, while src is at an unknown alignment. - // There are 7 different versions of the unaligned copy code - // to prevent overreading the src. The mainloop of every single version - // will store 64 bits per loop. The difference is how much of src can - // be read without potentially crossing a page boundary. - tbb [pc, r3] -.Lstrcpy_unaligned_branchtable: - .byte 0 - .byte ((.Lstrcpy_unalign7 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign6 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign5 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign4 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign3 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign2 - .Lstrcpy_unaligned_branchtable)/2) - .byte ((.Lstrcpy_unalign1 - .Lstrcpy_unaligned_branchtable)/2) - - .p2align 2 - // Can read 7 bytes before possibly crossing a page. -.Lstrcpy_unalign7: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r3, [r1] - cbz r3, .Lstrcpy_unalign7_copy5bytes - ldrb r4, [r1, #1] - cbz r4, .Lstrcpy_unalign7_copy6bytes - ldrb r5, [r1, #2] - cbz r5, .Lstrcpy_unalign7_copy7bytes - - ldr r3, [r1], #4 - pld [r1, #64] - - lsrs ip, r3, #24 - stmia r0!, {r2, r3} - beq .Lstrcpy_unalign_return - b .Lstrcpy_unalign7 - -.Lstrcpy_unalign7_copy5bytes: - stmia r0!, {r2} - strb r3, [r0] -.Lstrcpy_unalign_return: - m_ret inst=pop - -.Lstrcpy_unalign7_copy6bytes: - stmia r0!, {r2} - strb r3, [r0], #1 - strb r4, [r0], #1 - m_ret inst=pop - -.Lstrcpy_unalign7_copy7bytes: - stmia r0!, {r2} - strb r3, [r0], #1 - strb r4, [r0], #1 - strb r5, [r0], #1 - m_ret inst=pop - - .p2align 2 - // Can read 6 bytes before possibly crossing a page. -.Lstrcpy_unalign6: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r4, [r1] - cbz r4, .Lstrcpy_unalign_copy5bytes - ldrb r5, [r1, #1] - cbz r5, .Lstrcpy_unalign_copy6bytes - - ldr r3, [r1], #4 - pld [r1, #64] - - tst r3, #0xff0000 - beq .Lstrcpy_unalign6_copy7bytes - lsrs ip, r3, #24 - stmia r0!, {r2, r3} - beq .Lstrcpy_unalign_return - b .Lstrcpy_unalign6 - -.Lstrcpy_unalign6_copy7bytes: - stmia r0!, {r2} - strh r3, [r0], #2 - lsr r3, #16 - strb r3, [r0] - m_ret inst=pop - - .p2align 2 - // Can read 5 bytes before possibly crossing a page. -.Lstrcpy_unalign5: - ldr r2, [r1], #4 - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldrb r4, [r1] - cbz r4, .Lstrcpy_unalign_copy5bytes - - ldr r3, [r1], #4 - - pld [r1, #64] - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_unalign5 - -.Lstrcpy_unalign_copy5bytes: - stmia r0!, {r2} - strb r4, [r0] - m_ret inst=pop - -.Lstrcpy_unalign_copy6bytes: - stmia r0!, {r2} - strb r4, [r0], #1 - strb r5, [r0] - m_ret inst=pop - - .p2align 2 - // Can read 4 bytes before possibly crossing a page. -.Lstrcpy_unalign4: - ldmia r1!, {r2} - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - ldmia r1!, {r3} - pld [r1, #64] - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_unalign4 - - .p2align 2 - // Can read 3 bytes before possibly crossing a page. -.Lstrcpy_unalign3: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign3_copy1byte - ldrb r3, [r1, #1] - cbz r3, .Lstrcpy_unalign3_copy2bytes - ldrb r4, [r1, #2] - cbz r4, .Lstrcpy_unalign3_copy3bytes - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - - pld [r1, #64] - - lsrs lr, r2, #24 - beq .Lstrcpy_unalign_copy4bytes - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_unalign3 - -.Lstrcpy_unalign3_copy1byte: - strb r2, [r0] - m_ret inst=pop - -.Lstrcpy_unalign3_copy2bytes: - strb r2, [r0], #1 - strb r3, [r0] - m_ret inst=pop - -.Lstrcpy_unalign3_copy3bytes: - strb r2, [r0], #1 - strb r3, [r0], #1 - strb r4, [r0] - m_ret inst=pop - - .p2align 2 - // Can read 2 bytes before possibly crossing a page. -.Lstrcpy_unalign2: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign_copy1byte - ldrb r3, [r1, #1] - cbz r3, .Lstrcpy_unalign_copy2bytes - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - pld [r1, #64] - - tst r2, #0xff0000 - beq .Lstrcpy_unalign_copy3bytes - lsrs ip, r2, #24 - beq .Lstrcpy_unalign_copy4bytes - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_unalign2 - - .p2align 2 - // Can read 1 byte before possibly crossing a page. -.Lstrcpy_unalign1: - ldrb r2, [r1] - cbz r2, .Lstrcpy_unalign_copy1byte - - ldr r2, [r1], #4 - ldr r3, [r1], #4 - - pld [r1, #64] - - sub ip, r2, #0x01010101 - bic ip, ip, r2 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_first_register - - sub ip, r3, #0x01010101 - bic ip, ip, r3 - ands ip, ip, #0x80808080 - bne .Lstrcpy_zero_in_second_register - - stmia r0!, {r2, r3} - b .Lstrcpy_unalign1 - -.Lstrcpy_unalign_copy1byte: - strb r2, [r0] - m_ret inst=pop - -.Lstrcpy_unalign_copy2bytes: - strb r2, [r0], #1 - strb r3, [r0] - m_ret inst=pop - -.Lstrcpy_unalign_copy3bytes: - strh r2, [r0], #2 - lsr r2, #16 - strb r2, [r0] - m_ret inst=pop - -.Lstrcpy_unalign_copy4bytes: - stmia r0, {r2} - m_ret inst=pop -END(strcpy) +#define STRCPY +#include "string_copy.S" diff --git a/libc/arch-arm/cortex-a9/bionic/string_copy.S b/libc/arch-arm/cortex-a9/bionic/string_copy.S new file mode 100644 index 000000000..caf5a11fe --- /dev/null +++ b/libc/arch-arm/cortex-a9/bionic/string_copy.S @@ -0,0 +1,535 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 2013 ARM Ltd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the company may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !defined(STPCPY) && !defined(STRCPY) +#error "Either STPCPY or STRCPY must be defined." +#endif + +#include + + .syntax unified + + .thumb + .thumb_func + +#if defined(STPCPY) + .macro m_push + push {r4, r5, lr} + .cfi_def_cfa_offset 12 + .cfi_rel_offset r4, 0 + .cfi_rel_offset r5, 4 + .cfi_rel_offset lr, 8 + .endm // m_push +#else + .macro m_push + push {r0, r4, r5, lr} + .cfi_def_cfa_offset 16 + .cfi_rel_offset r0, 0 + .cfi_rel_offset r4, 4 + .cfi_rel_offset r5, 8 + .cfi_rel_offset lr, 12 + .endm // m_push +#endif + +#if defined(STPCPY) + .macro m_ret inst + \inst {r4, r5, pc} + .endm // m_ret +#else + .macro m_ret inst + \inst {r0, r4, r5, pc} + .endm // m_ret +#endif + + .macro m_copy_byte reg, cmd, label + ldrb \reg, [r1], #1 + strb \reg, [r0], #1 + \cmd \reg, \label + .endm // m_copy_byte + +#if defined(STPCPY) +ENTRY(stpcpy) +#else +ENTRY(strcpy) +#endif + // Unroll the first 8 bytes that will be copied. + m_push + m_copy_byte reg=r2, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r5, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r2, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r3, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r4, cmd=cbz, label=.Lstringcopy_finish + m_copy_byte reg=r5, cmd=cbnz, label=.Lstringcopy_continue + +.Lstringcopy_finish: +#if defined(STPCPY) + sub r0, r0, #1 +#endif + m_ret inst=pop + +.Lstringcopy_continue: + pld [r1, #0] + ands r3, r0, #7 + bne .Lstringcopy_align_dst + +.Lstringcopy_check_src_align: + // At this point dst is aligned to a double word, check if src + // is also aligned to a double word. + ands r3, r1, #7 + bne .Lstringcopy_unaligned_copy + + .p2align 2 +.Lstringcopy_mainloop: + ldmia r1!, {r2, r3} + + pld [r1, #64] + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_mainloop + +.Lstringcopy_zero_in_first_register: + lsls lr, ip, #17 + itt ne + strbne r2, [r0] + m_ret inst=popne + itt cs +#if defined(STPCPY) + strhcs r2, [r0], #1 +#else + strhcs r2, [r0] +#endif + m_ret inst=popcs + lsls ip, ip, #1 + itt eq +#if defined(STPCPY) + streq r2, [r0], #3 +#else + streq r2, [r0] +#endif + m_ret inst=popeq + strh r2, [r0], #2 + lsr r3, r2, #16 + strb r3, [r0] + m_ret inst=pop + +.Lstringcopy_zero_in_second_register: + lsls lr, ip, #17 + ittt ne + stmiane r0!, {r2} + strbne r3, [r0] + m_ret inst=popne + ittt cs + strcs r2, [r0], #4 +#if defined(STPCPY) + strhcs r3, [r0], #1 +#else + strhcs r3, [r0] +#endif + m_ret inst=popcs + lsls ip, ip, #1 +#if defined(STPCPY) + ittt eq +#else + itt eq +#endif + stmiaeq r0, {r2, r3} +#if defined(STPCPY) + addeq r0, r0, #7 +#endif + m_ret inst=popeq + stmia r0!, {r2} + strh r3, [r0], #2 + lsr r4, r3, #16 + strb r4, [r0] + m_ret inst=pop + +.Lstringcopy_align_dst: + // Align to a double word (64 bits). + rsb r3, r3, #8 + lsls ip, r3, #31 + beq .Lstringcopy_align_to_32 + + ldrb r2, [r1], #1 + strb r2, [r0], #1 + cbz r2, .Lstringcopy_complete + +.Lstringcopy_align_to_32: + bcc .Lstringcopy_align_to_64 + + ldrb r4, [r1], #1 + strb r4, [r0], #1 + cmp r4, #0 +#if defined(STPCPY) + itt eq + subeq r0, r0, #1 +#else + it eq +#endif + m_ret inst=popeq + ldrb r5, [r1], #1 + strb r5, [r0], #1 + cmp r5, #0 +#if defined(STPCPY) + itt eq + subeq r0, r0, #1 +#else + it eq +#endif + m_ret inst=popeq + +.Lstringcopy_align_to_64: + tst r3, #4 + beq .Lstringcopy_check_src_align + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + stmia r0!, {r2} + b .Lstringcopy_check_src_align + +.Lstringcopy_complete: +#if defined(STPCPY) + sub r0, r0, #1 +#endif + m_ret inst=pop + +.Lstringcopy_unaligned_copy: + // Dst is aligned to a double word, while src is at an unknown alignment. + // There are 7 different versions of the unaligned copy code + // to prevent overreading the src. The mainloop of every single version + // will store 64 bits per loop. The difference is how much of src can + // be read without potentially crossing a page boundary. + tbb [pc, r3] +.Lstringcopy_unaligned_branchtable: + .byte 0 + .byte ((.Lstringcopy_unalign7 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign6 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign5 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign4 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign3 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign2 - .Lstringcopy_unaligned_branchtable)/2) + .byte ((.Lstringcopy_unalign1 - .Lstringcopy_unaligned_branchtable)/2) + + .p2align 2 + // Can read 7 bytes before possibly crossing a page. +.Lstringcopy_unalign7: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r3, [r1] + cbz r3, .Lstringcopy_unalign7_copy5bytes + ldrb r4, [r1, #1] + cbz r4, .Lstringcopy_unalign7_copy6bytes + ldrb r5, [r1, #2] + cbz r5, .Lstringcopy_unalign7_copy7bytes + + ldr r3, [r1], #4 + pld [r1, #64] + + lsrs ip, r3, #24 + stmia r0!, {r2, r3} +#if defined(STPCPY) + beq .Lstringcopy_finish +#else + beq .Lstringcopy_unalign_return +#endif + b .Lstringcopy_unalign7 + +.Lstringcopy_unalign7_copy5bytes: + stmia r0!, {r2} + strb r3, [r0] +.Lstringcopy_unalign_return: + m_ret inst=pop + +.Lstringcopy_unalign7_copy6bytes: + stmia r0!, {r2} + strb r3, [r0], #1 + strb r4, [r0] + m_ret inst=pop + +.Lstringcopy_unalign7_copy7bytes: + stmia r0!, {r2} + strb r3, [r0], #1 + strb r4, [r0], #1 + strb r5, [r0] + m_ret inst=pop + + .p2align 2 + // Can read 6 bytes before possibly crossing a page. +.Lstringcopy_unalign6: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r4, [r1] + cbz r4, .Lstringcopy_unalign_copy5bytes + ldrb r5, [r1, #1] + cbz r5, .Lstringcopy_unalign_copy6bytes + + ldr r3, [r1], #4 + pld [r1, #64] + + tst r3, #0xff0000 + beq .Lstringcopy_unalign6_copy7bytes + lsrs ip, r3, #24 + stmia r0!, {r2, r3} +#if defined(STPCPY) + beq .Lstringcopy_finish +#else + beq .Lstringcopy_unalign_return +#endif + b .Lstringcopy_unalign6 + +.Lstringcopy_unalign6_copy7bytes: + stmia r0!, {r2} + strh r3, [r0], #2 + lsr r3, #16 + strb r3, [r0] + m_ret inst=pop + + .p2align 2 + // Can read 5 bytes before possibly crossing a page. +.Lstringcopy_unalign5: + ldr r2, [r1], #4 + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldrb r4, [r1] + cbz r4, .Lstringcopy_unalign_copy5bytes + + ldr r3, [r1], #4 + + pld [r1, #64] + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_unalign5 + +.Lstringcopy_unalign_copy5bytes: + stmia r0!, {r2} + strb r4, [r0] + m_ret inst=pop + +.Lstringcopy_unalign_copy6bytes: + stmia r0!, {r2} + strb r4, [r0], #1 + strb r5, [r0] + m_ret inst=pop + + .p2align 2 + // Can read 4 bytes before possibly crossing a page. +.Lstringcopy_unalign4: + ldmia r1!, {r2} + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + ldmia r1!, {r3} + pld [r1, #64] + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_unalign4 + + .p2align 2 + // Can read 3 bytes before possibly crossing a page. +.Lstringcopy_unalign3: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign3_copy1byte + ldrb r3, [r1, #1] + cbz r3, .Lstringcopy_unalign3_copy2bytes + ldrb r4, [r1, #2] + cbz r4, .Lstringcopy_unalign3_copy3bytes + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + + pld [r1, #64] + + lsrs lr, r2, #24 + beq .Lstringcopy_unalign_copy4bytes + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_unalign3 + +.Lstringcopy_unalign3_copy1byte: + strb r2, [r0] + m_ret inst=pop + +.Lstringcopy_unalign3_copy2bytes: + strb r2, [r0], #1 + strb r3, [r0] + m_ret inst=pop + +.Lstringcopy_unalign3_copy3bytes: + strb r2, [r0], #1 + strb r3, [r0], #1 + strb r4, [r0] + m_ret inst=pop + + .p2align 2 + // Can read 2 bytes before possibly crossing a page. +.Lstringcopy_unalign2: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign_copy1byte + ldrb r3, [r1, #1] + cbz r3, .Lstringcopy_unalign_copy2bytes + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + pld [r1, #64] + + tst r2, #0xff0000 + beq .Lstringcopy_unalign_copy3bytes + lsrs ip, r2, #24 + beq .Lstringcopy_unalign_copy4bytes + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_unalign2 + + .p2align 2 + // Can read 1 byte before possibly crossing a page. +.Lstringcopy_unalign1: + ldrb r2, [r1] + cbz r2, .Lstringcopy_unalign_copy1byte + + ldr r2, [r1], #4 + ldr r3, [r1], #4 + + pld [r1, #64] + + sub ip, r2, #0x01010101 + bic ip, ip, r2 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_first_register + + sub ip, r3, #0x01010101 + bic ip, ip, r3 + ands ip, ip, #0x80808080 + bne .Lstringcopy_zero_in_second_register + + stmia r0!, {r2, r3} + b .Lstringcopy_unalign1 + +.Lstringcopy_unalign_copy1byte: + strb r2, [r0] + m_ret inst=pop + +.Lstringcopy_unalign_copy2bytes: + strb r2, [r0], #1 + strb r3, [r0] + m_ret inst=pop + +.Lstringcopy_unalign_copy3bytes: + strh r2, [r0], #2 + lsr r2, #16 + strb r2, [r0] + m_ret inst=pop + +.Lstringcopy_unalign_copy4bytes: + stmia r0, {r2} +#if defined(STPCPY) + add r0, r0, #3 +#endif + m_ret inst=pop +#if defined(STPCPY) +END(stpcpy) +#else +END(strcpy) +#endif diff --git a/libc/arch-arm/cortex-a9/cortex-a9.mk b/libc/arch-arm/cortex-a9/cortex-a9.mk index 9b99387b1..c82db3b4d 100644 --- a/libc/arch-arm/cortex-a9/cortex-a9.mk +++ b/libc/arch-arm/cortex-a9/cortex-a9.mk @@ -1,10 +1,11 @@ libc_bionic_src_files_arm += \ arch-arm/cortex-a9/bionic/memcpy.S \ arch-arm/cortex-a9/bionic/memset.S \ + arch-arm/cortex-a9/bionic/stpcpy.S \ arch-arm/cortex-a9/bionic/strcat.S \ + arch-arm/cortex-a9/bionic/__strcat_chk.S \ arch-arm/cortex-a9/bionic/strcmp.S \ arch-arm/cortex-a9/bionic/strcpy.S \ - arch-arm/cortex-a9/bionic/strlen.S \ - arch-arm/cortex-a9/bionic/__strcat_chk.S \ arch-arm/cortex-a9/bionic/__strcpy_chk.S \ + arch-arm/cortex-a9/bionic/strlen.S \ bionic/memmove.c \ diff --git a/libc/arch-arm/denver/denver.mk b/libc/arch-arm/denver/denver.mk index 6989187bf..0bc52a27b 100644 --- a/libc/arch-arm/denver/denver.mk +++ b/libc/arch-arm/denver/denver.mk @@ -7,7 +7,8 @@ libc_bionic_src_files_arm += \ # Use cortex-a15 versions of strcat/strcpy/strlen. libc_bionic_src_files_arm += \ + arch-arm/cortex-a15/bionic/stpcpy.S \ arch-arm/cortex-a15/bionic/strcat.S \ + arch-arm/cortex-a15/bionic/strcmp.S \ arch-arm/cortex-a15/bionic/strcpy.S \ arch-arm/cortex-a15/bionic/strlen.S \ - arch-arm/cortex-a15/bionic/strcmp.S \ diff --git a/libc/arch-arm/generic/generic.mk b/libc/arch-arm/generic/generic.mk index 2456e6e4c..95be867cd 100644 --- a/libc/arch-arm/generic/generic.mk +++ b/libc/arch-arm/generic/generic.mk @@ -7,4 +7,5 @@ libc_bionic_src_files_arm += \ bionic/memmove.c \ bionic/__strcat_chk.cpp \ bionic/__strcpy_chk.cpp \ + upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ diff --git a/libc/arch-arm/krait/krait.mk b/libc/arch-arm/krait/krait.mk index 631ab6879..1bb7b0a07 100644 --- a/libc/arch-arm/krait/krait.mk +++ b/libc/arch-arm/krait/krait.mk @@ -7,6 +7,7 @@ libc_bionic_src_files_arm += \ # Use cortex-a15 versions of strcat/strcpy/strlen and standard memmove libc_bionic_src_files_arm += \ + arch-arm/cortex-a15/bionic/stpcpy.S \ arch-arm/cortex-a15/bionic/strcat.S \ arch-arm/cortex-a15/bionic/strcpy.S \ arch-arm/cortex-a15/bionic/strlen.S \ From eedbf70e8eae18ab28a36017632b80e23c398e53 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 19 Aug 2014 12:43:50 -0700 Subject: [PATCH 062/194] Add in_port_t and move it and in_addr_t to the correct header file. No one's reported this, but I saw it in an Android port of fuser(1). We still have lots of problems in our network headers because we get most of the structs direct from the kernel, and it doesn't use types like this (which is why we've got away without this one for so long). One day we should probably look at cleaning that up, but doing so can wait. (cherry picked from commit 35d226e05d92824c6eb992e7a64ea22efc8bae03) Bug: 18172268 Change-Id: Ice490bfe84afb04722d738128053d4c533b8a664 --- libc/include/arpa/inet.h | 3 +-- libc/include/netinet/in.h | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libc/include/arpa/inet.h b/libc/include/arpa/inet.h index 067be1fe9..86265bf24 100644 --- a/libc/include/arpa/inet.h +++ b/libc/include/arpa/inet.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _ARPA_INET_H_ #define _ARPA_INET_H_ @@ -34,8 +35,6 @@ __BEGIN_DECLS -typedef uint32_t in_addr_t; - in_addr_t inet_addr(const char*); int inet_aton(const char*, struct in_addr*); in_addr_t inet_lnaof(struct in_addr); diff --git a/libc/include/netinet/in.h b/libc/include/netinet/in.h index bf3b498c4..44c7fc1a6 100644 --- a/libc/include/netinet/in.h +++ b/libc/include/netinet/in.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _NETINET_IN_H_ #define _NETINET_IN_H_ @@ -43,6 +44,9 @@ __BEGIN_DECLS #define INET_ADDRSTRLEN 16 +typedef uint16_t in_port_t; +typedef uint32_t in_addr_t; + extern int bindresvport (int sd, struct sockaddr_in *sin); static const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; From ab4d5cf24220f3b5d8f53b2b3bd635f23dcc9bc5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 12 Sep 2014 20:04:40 -0700 Subject: [PATCH 063/194] POSIX says gets you ucontext_t. POSIX also says that ucontext_t's uc_sigmask has type sigset_t. MIPS64 strace needs this. The #define is to keep chromium off our lawn; otherwise it tries to redefine all this stuff itself. We should probably clean that up and remove the #define. (cherry picked from commit 26a8eb50a84e131d34d10d5d167d67e9995399bd) Bug: 18172268 Change-Id: I49d7d09dabfc6c6926a8e1f4b235d041e2f2fc4d --- libc/include/signal.h | 3 +++ libc/include/sys/ucontext.h | 12 ++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libc/include/signal.h b/libc/include/signal.h index f1849c5d4..e23e65b80 100644 --- a/libc/include/signal.h +++ b/libc/include/signal.h @@ -48,6 +48,9 @@ # include #endif +#include +#define __BIONIC_HAVE_UCONTEXT_T + __BEGIN_DECLS typedef int sig_atomic_t; diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h index f62380d8a..b8d4d5812 100644 --- a/libc/include/sys/ucontext.h +++ b/libc/include/sys/ucontext.h @@ -68,11 +68,9 @@ typedef struct ucontext { struct ucontext* uc_link; stack_t uc_stack; mcontext_t uc_mcontext; + sigset_t uc_sigmask; // Android has a wrong (smaller) sigset_t on ARM. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. char __padding[120]; unsigned long uc_regspace[128] __attribute__((__aligned__(8))); @@ -152,11 +150,9 @@ typedef struct ucontext { struct ucontext* uc_link; stack_t uc_stack; mcontext_t uc_mcontext; + sigset_t uc_sigmask; // Android has a wrong (smaller) sigset_t on x86. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; struct _libc_fpstate __fpregs_mem; } ucontext_t; From d0fb6a2940a43122f193be156ddff28c377e5163 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 19 Sep 2014 10:31:49 -0700 Subject: [PATCH 064/194] Add greg_t for arm64. This was already present for the other architectures. I think we skipped this because glibc seems to have an incorrect definition (int rather than long), but the kernel has the sane definition (just not in a uapi header). (cherry picked from commit 8e4d371091e5738346f5c6ad395b8487c2a5ec67) Bug: 18172268 Change-Id: I22d13fdeb6431ea122dd028a229782dcaf2286b2 --- libc/include/sys/ucontext.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h index b8d4d5812..dd2a0bba6 100644 --- a/libc/include/sys/ucontext.h +++ b/libc/include/sys/ucontext.h @@ -78,6 +78,10 @@ typedef struct ucontext { #elif defined(__aarch64__) +#define NGREG 34 /* x0..x30 + sp + pc + pstate */ +typedef unsigned long greg_t; +typedef greg_t gregset_t[NGREG]; + #include typedef struct sigcontext mcontext_t; From 0c4e98adbe57fc616651831c4d78c2b627ea5f5d Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 24 Oct 2014 20:57:09 -0700 Subject: [PATCH 065/194] Fix the type of u_ar0 in . (cherry picked from commit e03950fa0c5567edf70d011b856a027e03b1c0f7) Bug: 18172268 Change-Id: I0feda6b253882f68f47bcf30fad998286cc7f620 --- libc/include/sys/user.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/include/sys/user.h b/libc/include/sys/user.h index 66b371d50..0e368250f 100644 --- a/libc/include/sys/user.h +++ b/libc/include/sys/user.h @@ -91,7 +91,7 @@ struct user { unsigned long start_stack; long int signal; int reserved; - unsigned long u_ar0; + struct user_regs_struct* u_ar0; struct user_fpregs_struct* u_fpstate; unsigned long magic; char u_comm[32]; @@ -155,7 +155,7 @@ struct user { long int signal; int reserved; int pad1; - unsigned long u_ar0; + struct user_regs_struct* u_ar0; struct user_fpregs_struct* u_fpstate; unsigned long magic; char u_comm[32]; @@ -175,7 +175,7 @@ struct user { unsigned long start_data; unsigned long start_stack; long int signal; - unsigned long u_ar0; + void* u_ar0; unsigned long magic; char u_comm[32]; }; From 653263a96459c5c1811623bd84201c324a870280 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 16 Oct 2014 07:52:51 -0700 Subject: [PATCH 066/194] Only use for C++11 and newer. Any pre-C++11 clients of stdatomic.h that use libc++ are being forced over to , which they don't have the language support to use. Bug:17736764 Change-Id: I62445c1f2541410a1569498c09433c7196635537 (cherry picked from commit 3ce0769aa5f9a991af1d167f730d987dd002253c) --- libc/include/stdatomic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/include/stdatomic.h b/libc/include/stdatomic.h index bcea85924..58cb1bc0e 100644 --- a/libc/include/stdatomic.h +++ b/libc/include/stdatomic.h @@ -33,7 +33,7 @@ #include -#if defined(__cplusplus) && defined(_USING_LIBCXX) +#if defined(__cplusplus) && __cplusplus >= 201103L && defined(_USING_LIBCXX) # ifdef __clang__ # if __has_feature(cxx_atomic) # define _STDATOMIC_HAVE_ATOMIC From 926797a8a92a009184556ed45e02f3292066a296 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 12 Sep 2014 09:43:13 -0700 Subject: [PATCH 067/194] Reformatting No functional changes. Bug: 18186310 (cherry picked from commit 6abf624d122bec8c80cc9fe1b692265bf1b28b1b)] Change-Id: I0acf52d8ee7fe2d4f44bc832cbe9fabe1782f03f --- linker/linker.cpp | 2078 ++++++++++++++++++++++----------------------- 1 file changed, 1037 insertions(+), 1041 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 9425c9d3b..37e01893f 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -88,7 +88,7 @@ static LinkerAllocator> g_soinfo_links_allocator; static soinfo* solist; static soinfo* sonext; -static soinfo* somain; /* main process, always the one after libdl_info */ +static soinfo* somain; // main process, always the one after libdl_info static const char* const kDefaultLdPaths[] = { #if defined(__LP64__) @@ -120,22 +120,22 @@ __LIBC_HIDDEN__ int g_ld_debug_verbosity; __LIBC_HIDDEN__ abort_msg_t* g_abort_message = nullptr; // For debuggerd. enum RelocationKind { - kRelocAbsolute = 0, - kRelocRelative, - kRelocCopy, - kRelocSymbol, - kRelocMax + kRelocAbsolute = 0, + kRelocRelative, + kRelocCopy, + kRelocSymbol, + kRelocMax }; #if STATS struct linker_stats_t { - int count[kRelocMax]; + int count[kRelocMax]; }; static linker_stats_t linker_stats; static void count_relocation(RelocationKind kind) { - ++linker_stats.count[kind]; + ++linker_stats.count[kind]; } #else static void count_relocation(RelocationKind) { @@ -147,13 +147,13 @@ static unsigned bitmask[4096]; #if defined(__LP64__) #define MARK(offset) \ do { \ - if ((((offset) >> 12) >> 5) < 4096) \ - bitmask[((offset) >> 12) >> 5] |= (1 << (((offset) >> 12) & 31)); \ + if ((((offset) >> 12) >> 5) < 4096) \ + bitmask[((offset) >> 12) >> 5] |= (1 << (((offset) >> 12) & 31)); \ } while (0) #else #define MARK(offset) \ do { \ - bitmask[((offset) >> 12) >> 3] |= (1 << (((offset) >> 12) & 7)); \ + bitmask[((offset) >> 12) >> 3] |= (1 << (((offset) >> 12) & 7)); \ } while (0) #endif #else @@ -165,7 +165,7 @@ static unsigned bitmask[4096]; #define DISALLOW_ALLOCATION(return_type, name, ...) \ return_type name __VA_ARGS__ \ { \ - __libc_fatal("ERROR: " #name " called from the dynamic linker!\n"); \ + __libc_fatal("ERROR: " #name " called from the dynamic linker!\n"); \ } DISALLOW_ALLOCATION(void*, malloc, (size_t u __unused)); DISALLOW_ALLOCATION(void, free, (void* u __unused)); @@ -182,10 +182,8 @@ size_t linker_get_error_buffer_size() { return sizeof(__linker_dl_err_buf); } -/* - * This function is an empty stub where GDB locates a breakpoint to get notified - * about linker activity. - */ +// This function is an empty stub where GDB locates a breakpoint to get notified +// about linker activity. extern "C" void __attribute__((noinline)) __attribute__((visibility("default"))) rtld_db_dlactivity(); static pthread_mutex_t g__r_debug_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -193,76 +191,75 @@ static r_debug _r_debug = {1, nullptr, reinterpret_cast(&rtld_db_dlac static link_map* r_debug_tail = 0; static void insert_soinfo_into_debug_map(soinfo* info) { - // Copy the necessary fields into the debug structure. - link_map* map = &(info->link_map_head); - map->l_addr = info->load_bias; - map->l_name = reinterpret_cast(info->name); - map->l_ld = info->dynamic; + // Copy the necessary fields into the debug structure. + link_map* map = &(info->link_map_head); + map->l_addr = info->load_bias; + map->l_name = reinterpret_cast(info->name); + map->l_ld = info->dynamic; - /* Stick the new library at the end of the list. - * gdb tends to care more about libc than it does - * about leaf libraries, and ordering it this way - * reduces the back-and-forth over the wire. - */ - if (r_debug_tail) { - r_debug_tail->l_next = map; - map->l_prev = r_debug_tail; - map->l_next = 0; - } else { - _r_debug.r_map = map; - map->l_prev = 0; - map->l_next = 0; - } - r_debug_tail = map; + // Stick the new library at the end of the list. + // gdb tends to care more about libc than it does + // about leaf libraries, and ordering it this way + // reduces the back-and-forth over the wire. + if (r_debug_tail) { + r_debug_tail->l_next = map; + map->l_prev = r_debug_tail; + map->l_next = 0; + } else { + _r_debug.r_map = map; + map->l_prev = 0; + map->l_next = 0; + } + r_debug_tail = map; } static void remove_soinfo_from_debug_map(soinfo* info) { - link_map* map = &(info->link_map_head); + link_map* map = &(info->link_map_head); - if (r_debug_tail == map) { - r_debug_tail = map->l_prev; - } + if (r_debug_tail == map) { + r_debug_tail = map->l_prev; + } - if (map->l_prev) { - map->l_prev->l_next = map->l_next; - } - if (map->l_next) { - map->l_next->l_prev = map->l_prev; - } + if (map->l_prev) { + map->l_prev->l_next = map->l_next; + } + if (map->l_next) { + map->l_next->l_prev = map->l_prev; + } } static void notify_gdb_of_load(soinfo* info) { - if (info->flags & FLAG_EXE) { - // GDB already knows about the main executable - return; - } + if (info->flags & FLAG_EXE) { + // GDB already knows about the main executable + return; + } - ScopedPthreadMutexLocker locker(&g__r_debug_mutex); + ScopedPthreadMutexLocker locker(&g__r_debug_mutex); - _r_debug.r_state = r_debug::RT_ADD; - rtld_db_dlactivity(); + _r_debug.r_state = r_debug::RT_ADD; + rtld_db_dlactivity(); - insert_soinfo_into_debug_map(info); + insert_soinfo_into_debug_map(info); - _r_debug.r_state = r_debug::RT_CONSISTENT; - rtld_db_dlactivity(); + _r_debug.r_state = r_debug::RT_CONSISTENT; + rtld_db_dlactivity(); } static void notify_gdb_of_unload(soinfo* info) { - if (info->flags & FLAG_EXE) { - // GDB already knows about the main executable - return; - } + if (info->flags & FLAG_EXE) { + // GDB already knows about the main executable + return; + } - ScopedPthreadMutexLocker locker(&g__r_debug_mutex); + ScopedPthreadMutexLocker locker(&g__r_debug_mutex); - _r_debug.r_state = r_debug::RT_DELETE; - rtld_db_dlactivity(); + _r_debug.r_state = r_debug::RT_DELETE; + rtld_db_dlactivity(); - remove_soinfo_from_debug_map(info); + remove_soinfo_from_debug_map(info); - _r_debug.r_state = r_debug::RT_CONSISTENT; - rtld_db_dlactivity(); + _r_debug.r_state = r_debug::RT_CONSISTENT; + rtld_db_dlactivity(); } void notify_gdb_of_libraries() { @@ -301,41 +298,41 @@ static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t fi } static void soinfo_free(soinfo* si) { - if (si == nullptr) { - return; + if (si == nullptr) { + return; + } + + if (si->base != 0 && si->size != 0) { + munmap(reinterpret_cast(si->base), si->size); + } + + soinfo *prev = nullptr, *trav; + + TRACE("name %s: freeing soinfo @ %p", si->name, si); + + for (trav = solist; trav != nullptr; trav = trav->next) { + if (trav == si) { + break; } + prev = trav; + } + if (trav == nullptr) { + // si was not in solist + DL_ERR("name \"%s\" is not in solist!", si->name); + return; + } - if (si->base != 0 && si->size != 0) { - munmap(reinterpret_cast(si->base), si->size); - } + // clear links to/from si + si->remove_all_links(); - soinfo *prev = nullptr, *trav; + // prev will never be null, because the first entry in solist is + // always the static libdl_info. + prev->next = si->next; + if (si == sonext) { + sonext = prev; + } - TRACE("name %s: freeing soinfo @ %p", si->name, si); - - for (trav = solist; trav != nullptr; trav = trav->next) { - if (trav == si) - break; - prev = trav; - } - if (trav == nullptr) { - /* si was not in solist */ - DL_ERR("name \"%s\" is not in solist!", si->name); - return; - } - - // clear links to/from si - si->remove_all_links(); - - /* prev will never be null, because the first entry in solist is - always the static libdl_info. - */ - prev->next = si->next; - if (si == sonext) { - sonext = prev; - } - - g_soinfo_allocator.free(si); + g_soinfo_allocator.free(si); } @@ -377,46 +374,45 @@ static void parse_LD_PRELOAD(const char* path) { #if defined(__arm__) -/* For a given PC, find the .so that it belongs to. - * Returns the base address of the .ARM.exidx section - * for that .so, and the number of 8-byte entries - * in that section (via *pcount). - * - * Intended to be called by libc's __gnu_Unwind_Find_exidx(). - * - * This function is exposed via dlfcn.cpp and libdl.so. - */ +// For a given PC, find the .so that it belongs to. +// Returns the base address of the .ARM.exidx section +// for that .so, and the number of 8-byte entries +// in that section (via *pcount). +// +// Intended to be called by libc's __gnu_Unwind_Find_exidx(). +// +// This function is exposed via dlfcn.cpp and libdl.so. _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) { - unsigned addr = (unsigned)pc; + unsigned addr = (unsigned)pc; - for (soinfo* si = solist; si != 0; si = si->next) { - if ((addr >= si->base) && (addr < (si->base + si->size))) { - *pcount = si->ARM_exidx_count; - return (_Unwind_Ptr)si->ARM_exidx; - } + for (soinfo* si = solist; si != 0; si = si->next) { + if ((addr >= si->base) && (addr < (si->base + si->size))) { + *pcount = si->ARM_exidx_count; + return (_Unwind_Ptr)si->ARM_exidx; } - *pcount = 0; - return nullptr; + } + *pcount = 0; + return nullptr; } #endif -/* Here, we only have to provide a callback to iterate across all the - * loaded libraries. gcc_eh does the rest. */ +// Here, we only have to provide a callback to iterate across all the +// loaded libraries. gcc_eh does the rest. int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void* data) { - int rv = 0; - for (soinfo* si = solist; si != nullptr; si = si->next) { - dl_phdr_info dl_info; - dl_info.dlpi_addr = si->link_map_head.l_addr; - dl_info.dlpi_name = si->link_map_head.l_name; - dl_info.dlpi_phdr = si->phdr; - dl_info.dlpi_phnum = si->phnum; - rv = cb(&dl_info, sizeof(dl_phdr_info), data); - if (rv != 0) { - break; - } + int rv = 0; + for (soinfo* si = solist; si != nullptr; si = si->next) { + dl_phdr_info dl_info; + dl_info.dlpi_addr = si->link_map_head.l_addr; + dl_info.dlpi_name = si->link_map_head.l_name; + dl_info.dlpi_phdr = si->phdr; + dl_info.dlpi_phnum = si->phnum; + rv = cb(&dl_info, sizeof(dl_phdr_info), data); + if (rv != 0) { + break; } - return rv; + } + return rv; } static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) { @@ -430,7 +426,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) ElfW(Sym)* s = symtab + n; if (strcmp(strtab + s->st_name, name)) continue; - /* only concern ourselves with global and weak symbol definitions */ + // only concern ourselves with global and weak symbol definitions switch (ELF_ST_BIND(s->st_info)) { case STB_GLOBAL: case STB_WEAK: @@ -472,134 +468,134 @@ soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offs } static unsigned elfhash(const char* _name) { - const unsigned char* name = reinterpret_cast(_name); - unsigned h = 0, g; + const unsigned char* name = reinterpret_cast(_name); + unsigned h = 0, g; - while (*name) { - h = (h << 4) + *name++; - g = h & 0xf0000000; - h ^= g; - h ^= g >> 24; - } - return h; + while (*name) { + h = (h << 4) + *name++; + g = h & 0xf0000000; + h ^= g; + h ^= g >> 24; + } + return h; } static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { - unsigned elf_hash = elfhash(name); - ElfW(Sym)* s = nullptr; + unsigned elf_hash = elfhash(name); + ElfW(Sym)* s = nullptr; - if (somain != nullptr) { - /* - * Local scope is executable scope. Just start looking into it right away - * for the shortcut. - */ + if (somain != nullptr) { + /* + * Local scope is executable scope. Just start looking into it right away + * for the shortcut. + */ - if (si == somain) { - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - goto done; - } + if (si == somain) { + s = soinfo_elf_lookup(si, elf_hash, name); + if (s != nullptr) { + *lsi = si; + goto done; + } - /* Next, look for it in the preloads list */ - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } - } - } else { - /* Order of symbol lookup is controlled by DT_SYMBOLIC flag */ - - /* - * If this object was built with symbolic relocations disabled, the - * first place to look to resolve external references is the main - * executable. - */ - - if (!si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); - if (s != nullptr) { - *lsi = somain; - goto done; - } - - /* Next, look for it in the preloads list */ - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } - } - } - - /* Look for symbols in the local scope (the object who is - * searching). This happens with C++ templates on x86 for some - * reason. - * - * Notes on weak symbols: - * The ELF specs are ambiguous about treatment of weak definitions in - * dynamic linking. Some systems return the first definition found - * and some the first non-weak definition. This is system dependent. - * Here we return the first definition found for simplicity. */ - - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - goto done; - } - - /* - * If this object was built with -Bsymbolic and symbol is not found - * in the local scope, try to find the symbol in the main executable. - */ - - if (si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s after local scope", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); - if (s != nullptr) { - *lsi = somain; - goto done; - } - - /* Next, look for it in the preloads list */ - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } - } - } + /* Next, look for it in the preloads list */ + for (int i = 0; g_ld_preloads[i] != NULL; i++) { + s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); + if (s != NULL) { + *lsi = g_ld_preloads[i]; + goto done; } - } + } + } else { + /* Order of symbol lookup is controlled by DT_SYMBOLIC flag */ - si->get_children().visit([&](soinfo* child) { - DEBUG("%s: looking up %s in %s", si->name, name, child->name); - s = soinfo_elf_lookup(child, elf_hash, name); + /* + * If this object was built with symbolic relocations disabled, the + * first place to look to resolve external references is the main + * executable. + */ + + if (!si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in executable %s", + si->name, name, somain->name); + s = soinfo_elf_lookup(somain, elf_hash, name); if (s != nullptr) { - *lsi = child; - return false; + *lsi = somain; + goto done; } - return true; - }); + + /* Next, look for it in the preloads list */ + for (int i = 0; g_ld_preloads[i] != NULL; i++) { + s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); + if (s != NULL) { + *lsi = g_ld_preloads[i]; + goto done; + } + } + } + + /* Look for symbols in the local scope (the object who is + * searching). This happens with C++ templates on x86 for some + * reason. + * + * Notes on weak symbols: + * The ELF specs are ambiguous about treatment of weak definitions in + * dynamic linking. Some systems return the first definition found + * and some the first non-weak definition. This is system dependent. + * Here we return the first definition found for simplicity. */ + + s = soinfo_elf_lookup(si, elf_hash, name); + if (s != nullptr) { + *lsi = si; + goto done; + } + + /* + * If this object was built with -Bsymbolic and symbol is not found + * in the local scope, try to find the symbol in the main executable. + */ + + if (si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in executable %s after local scope", + si->name, name, somain->name); + s = soinfo_elf_lookup(somain, elf_hash, name); + if (s != nullptr) { + *lsi = somain; + goto done; + } + + /* Next, look for it in the preloads list */ + for (int i = 0; g_ld_preloads[i] != NULL; i++) { + s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); + if (s != NULL) { + *lsi = g_ld_preloads[i]; + goto done; + } + } + } + } + } + + si->get_children().visit([&](soinfo* child) { + DEBUG("%s: looking up %s in %s", si->name, name, child->name); + s = soinfo_elf_lookup(child, elf_hash, name); + if (s != nullptr) { + *lsi = child; + return false; + } + return true; + }); done: - if (s != nullptr) { - TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " - "found in %s, base = %p, load bias = %p", - si->name, name, reinterpret_cast(s->st_value), - (*lsi)->name, reinterpret_cast((*lsi)->base), - reinterpret_cast((*lsi)->load_bias)); - return s; - } + if (s != nullptr) { + TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " + "found in %s, base = %p, load bias = %p", + si->name, name, reinterpret_cast(s->st_value), + (*lsi)->name, reinterpret_cast((*lsi)->base), + reinterpret_cast((*lsi)->load_bias)); + return s; + } - return nullptr; + return nullptr; } // Each size has it's own allocator. @@ -1156,35 +1152,35 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { switch (type) { #if defined(__aarch64__) - case R_AARCH64_JUMP_SLOT: - case R_AARCH64_GLOB_DAT: - case R_AARCH64_ABS64: - case R_AARCH64_ABS32: - case R_AARCH64_ABS16: - case R_AARCH64_RELATIVE: - case R_AARCH64_IRELATIVE: - /* - * The sym_addr was initialized to be zero above, or the relocation - * code below does not care about value of sym_addr. - * No need to do anything. - */ - break; + case R_AARCH64_JUMP_SLOT: + case R_AARCH64_GLOB_DAT: + case R_AARCH64_ABS64: + case R_AARCH64_ABS32: + case R_AARCH64_ABS16: + case R_AARCH64_RELATIVE: + case R_AARCH64_IRELATIVE: + /* + * The sym_addr was initialized to be zero above, or the relocation + * code below does not care about value of sym_addr. + * No need to do anything. + */ + break; #elif defined(__x86_64__) - case R_X86_64_JUMP_SLOT: - case R_X86_64_GLOB_DAT: - case R_X86_64_32: - case R_X86_64_64: - case R_X86_64_RELATIVE: - case R_X86_64_IRELATIVE: - // No need to do anything. - break; - case R_X86_64_PC32: - sym_addr = reloc; - break; + case R_X86_64_JUMP_SLOT: + case R_X86_64_GLOB_DAT: + case R_X86_64_32: + case R_X86_64_64: + case R_X86_64_RELATIVE: + case R_X86_64_IRELATIVE: + // No need to do anything. + break; + case R_X86_64_PC32: + sym_addr = reloc; + break; #endif - default: - DL_ERR("unknown weak reloc type %d @ %p (%zu)", type, rela, idx); - return -1; + default: + DL_ERR("unknown weak reloc type %d @ %p (%zu)", type, rela, idx); + return -1; } } else { // We got a definition. @@ -1195,119 +1191,119 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { switch (type) { #if defined(__aarch64__) - case R_AARCH64_JUMP_SLOT: + case R_AARCH64_JUMP_SLOT: count_relocation(kRelocAbsolute); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO JMP_SLOT %16llx <- %16llx %s\n", reloc, (sym_addr + rela->r_addend), sym_name); *reinterpret_cast(reloc) = (sym_addr + rela->r_addend); break; - case R_AARCH64_GLOB_DAT: + case R_AARCH64_GLOB_DAT: count_relocation(kRelocAbsolute); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO GLOB_DAT %16llx <- %16llx %s\n", reloc, (sym_addr + rela->r_addend), sym_name); *reinterpret_cast(reloc) = (sym_addr + rela->r_addend); break; - case R_AARCH64_ABS64: + case R_AARCH64_ABS64: count_relocation(kRelocAbsolute); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO ABS64 %16llx <- %16llx %s\n", reloc, (sym_addr + rela->r_addend), sym_name); *reinterpret_cast(reloc) += (sym_addr + rela->r_addend); break; - case R_AARCH64_ABS32: + case R_AARCH64_ABS32: count_relocation(kRelocAbsolute); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO ABS32 %16llx <- %16llx %s\n", reloc, (sym_addr + rela->r_addend), sym_name); if ((static_cast(INT32_MIN) <= (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend))) && ((*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)) <= static_cast(UINT32_MAX))) { - *reinterpret_cast(reloc) += (sym_addr + rela->r_addend); + *reinterpret_cast(reloc) += (sym_addr + rela->r_addend); } else { - DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", - (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)), - static_cast(INT32_MIN), - static_cast(UINT32_MAX)); - return -1; + DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", + (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)), + static_cast(INT32_MIN), + static_cast(UINT32_MAX)); + return -1; } break; - case R_AARCH64_ABS16: + case R_AARCH64_ABS16: count_relocation(kRelocAbsolute); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO ABS16 %16llx <- %16llx %s\n", reloc, (sym_addr + rela->r_addend), sym_name); if ((static_cast(INT16_MIN) <= (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend))) && ((*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)) <= static_cast(UINT16_MAX))) { - *reinterpret_cast(reloc) += (sym_addr + rela->r_addend); + *reinterpret_cast(reloc) += (sym_addr + rela->r_addend); } else { - DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", - (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)), - static_cast(INT16_MIN), - static_cast(UINT16_MAX)); - return -1; + DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", + (*reinterpret_cast(reloc) + (sym_addr + rela->r_addend)), + static_cast(INT16_MIN), + static_cast(UINT16_MAX)); + return -1; } break; - case R_AARCH64_PREL64: + case R_AARCH64_PREL64: count_relocation(kRelocRelative); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO REL64 %16llx <- %16llx - %16llx %s\n", reloc, (sym_addr + rela->r_addend), rela->r_offset, sym_name); *reinterpret_cast(reloc) += (sym_addr + rela->r_addend) - rela->r_offset; break; - case R_AARCH64_PREL32: + case R_AARCH64_PREL32: count_relocation(kRelocRelative); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO REL32 %16llx <- %16llx - %16llx %s\n", reloc, (sym_addr + rela->r_addend), rela->r_offset, sym_name); if ((static_cast(INT32_MIN) <= (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset))) && ((*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)) <= static_cast(UINT32_MAX))) { - *reinterpret_cast(reloc) += ((sym_addr + rela->r_addend) - rela->r_offset); + *reinterpret_cast(reloc) += ((sym_addr + rela->r_addend) - rela->r_offset); } else { - DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", - (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)), - static_cast(INT32_MIN), - static_cast(UINT32_MAX)); - return -1; + DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", + (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)), + static_cast(INT32_MIN), + static_cast(UINT32_MAX)); + return -1; } break; - case R_AARCH64_PREL16: + case R_AARCH64_PREL16: count_relocation(kRelocRelative); MARK(rela->r_offset); TRACE_TYPE(RELO, "RELO REL16 %16llx <- %16llx - %16llx %s\n", reloc, (sym_addr + rela->r_addend), rela->r_offset, sym_name); if ((static_cast(INT16_MIN) <= (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset))) && ((*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)) <= static_cast(UINT16_MAX))) { - *reinterpret_cast(reloc) += ((sym_addr + rela->r_addend) - rela->r_offset); + *reinterpret_cast(reloc) += ((sym_addr + rela->r_addend) - rela->r_offset); } else { - DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", - (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)), - static_cast(INT16_MIN), - static_cast(UINT16_MAX)); - return -1; + DL_ERR("0x%016llx out of range 0x%016llx to 0x%016llx", + (*reinterpret_cast(reloc) + ((sym_addr + rela->r_addend) - rela->r_offset)), + static_cast(INT16_MIN), + static_cast(UINT16_MAX)); + return -1; } break; - case R_AARCH64_RELATIVE: + case R_AARCH64_RELATIVE: count_relocation(kRelocRelative); MARK(rela->r_offset); if (sym) { - DL_ERR("odd RELATIVE form..."); - return -1; + DL_ERR("odd RELATIVE form..."); + return -1; } TRACE_TYPE(RELO, "RELO RELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); *reinterpret_cast(reloc) = (base + rela->r_addend); break; - case R_AARCH64_IRELATIVE: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); - *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); - break; + case R_AARCH64_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); + break; - case R_AARCH64_COPY: + case R_AARCH64_COPY: /* * ET_EXEC is not supported so this should not happen. * @@ -1319,73 +1315,73 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { */ DL_ERR("%s R_AARCH64_COPY relocations are not supported", name); return -1; - case R_AARCH64_TLS_TPREL64: + case R_AARCH64_TLS_TPREL64: TRACE_TYPE(RELO, "RELO TLS_TPREL64 *** %16llx <- %16llx - %16llx\n", reloc, (sym_addr + rela->r_addend), rela->r_offset); break; - case R_AARCH64_TLS_DTPREL32: + case R_AARCH64_TLS_DTPREL32: TRACE_TYPE(RELO, "RELO TLS_DTPREL32 *** %16llx <- %16llx - %16llx\n", reloc, (sym_addr + rela->r_addend), rela->r_offset); break; #elif defined(__x86_64__) - case R_X86_64_JUMP_SLOT: - count_relocation(kRelocAbsolute); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO JMP_SLOT %08zx <- %08zx %s", static_cast(reloc), - static_cast(sym_addr + rela->r_addend), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; - break; - case R_X86_64_GLOB_DAT: - count_relocation(kRelocAbsolute); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO GLOB_DAT %08zx <- %08zx %s", static_cast(reloc), - static_cast(sym_addr + rela->r_addend), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; - break; - case R_X86_64_RELATIVE: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - if (sym) { - DL_ERR("odd RELATIVE form..."); - return -1; - } - TRACE_TYPE(RELO, "RELO RELATIVE %08zx <- +%08zx", static_cast(reloc), - static_cast(base)); - *reinterpret_cast(reloc) = base + rela->r_addend; - break; - case R_X86_64_IRELATIVE: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); - *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); - break; - case R_X86_64_32: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO R_X86_64_32 %08zx <- +%08zx %s", static_cast(reloc), - static_cast(sym_addr), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; - break; - case R_X86_64_64: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO R_X86_64_64 %08zx <- +%08zx %s", static_cast(reloc), - static_cast(sym_addr), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend; - break; - case R_X86_64_PC32: - count_relocation(kRelocRelative); - MARK(rela->r_offset); - TRACE_TYPE(RELO, "RELO R_X86_64_PC32 %08zx <- +%08zx (%08zx - %08zx) %s", - static_cast(reloc), static_cast(sym_addr - reloc), - static_cast(sym_addr), static_cast(reloc), sym_name); - *reinterpret_cast(reloc) = sym_addr + rela->r_addend - reloc; - break; + case R_X86_64_JUMP_SLOT: + count_relocation(kRelocAbsolute); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO JMP_SLOT %08zx <- %08zx %s", static_cast(reloc), + static_cast(sym_addr + rela->r_addend), sym_name); + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + break; + case R_X86_64_GLOB_DAT: + count_relocation(kRelocAbsolute); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO GLOB_DAT %08zx <- %08zx %s", static_cast(reloc), + static_cast(sym_addr + rela->r_addend), sym_name); + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + break; + case R_X86_64_RELATIVE: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + if (sym) { + DL_ERR("odd RELATIVE form..."); + return -1; + } + TRACE_TYPE(RELO, "RELO RELATIVE %08zx <- +%08zx", static_cast(reloc), + static_cast(base)); + *reinterpret_cast(reloc) = base + rela->r_addend; + break; + case R_X86_64_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %16llx <- %16llx\n", reloc, (base + rela->r_addend)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + rela->r_addend); + break; + case R_X86_64_32: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO R_X86_64_32 %08zx <- +%08zx %s", static_cast(reloc), + static_cast(sym_addr), sym_name); + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + break; + case R_X86_64_64: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO R_X86_64_64 %08zx <- +%08zx %s", static_cast(reloc), + static_cast(sym_addr), sym_name); + *reinterpret_cast(reloc) = sym_addr + rela->r_addend; + break; + case R_X86_64_PC32: + count_relocation(kRelocRelative); + MARK(rela->r_offset); + TRACE_TYPE(RELO, "RELO R_X86_64_PC32 %08zx <- +%08zx (%08zx - %08zx) %s", + static_cast(reloc), static_cast(sym_addr - reloc), + static_cast(sym_addr), static_cast(reloc), sym_name); + *reinterpret_cast(reloc) = sym_addr + rela->r_addend - reloc; + break; #endif - default: - DL_ERR("unknown reloc type %d @ %p (%zu)", type, rela, idx); - return -1; + default: + DL_ERR("unknown reloc type %d @ %p (%zu)", type, rela, idx); + return -1; } } return 0; @@ -1393,260 +1389,260 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { #else // REL, not RELA. int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { - for (size_t idx = 0; idx < count; ++idx, ++rel) { - unsigned type = ELFW(R_TYPE)(rel->r_info); - // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. - unsigned sym = ELFW(R_SYM)(rel->r_info); - ElfW(Addr) reloc = static_cast(rel->r_offset + load_bias); - ElfW(Addr) sym_addr = 0; - const char* sym_name = nullptr; + for (size_t idx = 0; idx < count; ++idx, ++rel) { + unsigned type = ELFW(R_TYPE)(rel->r_info); + // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. + unsigned sym = ELFW(R_SYM)(rel->r_info); + ElfW(Addr) reloc = static_cast(rel->r_offset + load_bias); + ElfW(Addr) sym_addr = 0; + const char* sym_name = nullptr; - DEBUG("Processing '%s' relocation at index %zd", name, idx); - if (type == 0) { // R_*_NONE - continue; + DEBUG("Processing '%s' relocation at index %zd", name, idx); + if (type == 0) { // R_*_NONE + continue; + } + + ElfW(Sym)* s = nullptr; + soinfo* lsi = nullptr; + + if (sym != 0) { + sym_name = reinterpret_cast(strtab + symtab[sym].st_name); + s = soinfo_do_lookup(this, sym_name, &lsi); + if (s == nullptr) { + // We only allow an undefined symbol if this is a weak reference... + s = &symtab[sym]; + if (ELF_ST_BIND(s->st_info) != STB_WEAK) { + DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, name); + return -1; } - ElfW(Sym)* s = nullptr; - soinfo* lsi = nullptr; + /* IHI0044C AAELF 4.5.1.1: - if (sym != 0) { - sym_name = reinterpret_cast(strtab + symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi); - if (s == nullptr) { - // We only allow an undefined symbol if this is a weak reference... - s = &symtab[sym]; - if (ELF_ST_BIND(s->st_info) != STB_WEAK) { - DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, name); - return -1; - } + Libraries are not searched to resolve weak references. + It is not an error for a weak reference to remain + unsatisfied. - /* IHI0044C AAELF 4.5.1.1: - - Libraries are not searched to resolve weak references. - It is not an error for a weak reference to remain - unsatisfied. - - During linking, the value of an undefined weak reference is: - - Zero if the relocation type is absolute - - The address of the place if the relocation is pc-relative - - The address of nominal base address if the relocation - type is base-relative. - */ - - switch (type) { -#if defined(__arm__) - case R_ARM_JUMP_SLOT: - case R_ARM_GLOB_DAT: - case R_ARM_ABS32: - case R_ARM_RELATIVE: /* Don't care. */ - // sym_addr was initialized to be zero above or relocation - // code below does not care about value of sym_addr. - // No need to do anything. - break; -#elif defined(__i386__) - case R_386_JMP_SLOT: - case R_386_GLOB_DAT: - case R_386_32: - case R_386_RELATIVE: /* Don't care. */ - case R_386_IRELATIVE: - // sym_addr was initialized to be zero above or relocation - // code below does not care about value of sym_addr. - // No need to do anything. - break; - case R_386_PC32: - sym_addr = reloc; - break; -#endif - -#if defined(__arm__) - case R_ARM_COPY: - // Fall through. Can't really copy if weak symbol is not found at run-time. -#endif - default: - DL_ERR("unknown weak reloc type %d @ %p (%zu)", type, rel, idx); - return -1; - } - } else { - // We got a definition. - sym_addr = lsi->resolve_symbol_address(s); - } - count_relocation(kRelocSymbol); - } + During linking, the value of an undefined weak reference is: + - Zero if the relocation type is absolute + - The address of the place if the relocation is pc-relative + - The address of nominal base address if the relocation + type is base-relative. + */ switch (type) { #if defined(__arm__) - case R_ARM_JUMP_SLOT: - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) = sym_addr; + case R_ARM_JUMP_SLOT: + case R_ARM_GLOB_DAT: + case R_ARM_ABS32: + case R_ARM_RELATIVE: /* Don't care. */ + // sym_addr was initialized to be zero above or relocation + // code below does not care about value of sym_addr. + // No need to do anything. break; - case R_ARM_GLOB_DAT: - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO GLOB_DAT %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) = sym_addr; - break; - case R_ARM_ABS32: - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO ABS %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) += sym_addr; - break; - case R_ARM_REL32: - count_relocation(kRelocRelative); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO REL32 %08x <- %08x - %08x %s", - reloc, sym_addr, rel->r_offset, sym_name); - *reinterpret_cast(reloc) += sym_addr - rel->r_offset; - break; - case R_ARM_COPY: - /* - * ET_EXEC is not supported so this should not happen. - * - * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf - * - * Section 4.7.1.10 "Dynamic relocations" - * R_ARM_COPY may only appear in executable objects where e_type is - * set to ET_EXEC. - */ - DL_ERR("%s R_ARM_COPY relocations are not supported", name); - return -1; #elif defined(__i386__) - case R_386_JMP_SLOT: - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) = sym_addr; + case R_386_JMP_SLOT: + case R_386_GLOB_DAT: + case R_386_32: + case R_386_RELATIVE: /* Don't care. */ + case R_386_IRELATIVE: + // sym_addr was initialized to be zero above or relocation + // code below does not care about value of sym_addr. + // No need to do anything. break; - case R_386_GLOB_DAT: - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO GLOB_DAT %08x <- %08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) = sym_addr; - break; - case R_386_32: - count_relocation(kRelocRelative); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO R_386_32 %08x <- +%08x %s", reloc, sym_addr, sym_name); - *reinterpret_cast(reloc) += sym_addr; - break; - case R_386_PC32: - count_relocation(kRelocRelative); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO R_386_PC32 %08x <- +%08x (%08x - %08x) %s", - reloc, (sym_addr - reloc), sym_addr, reloc, sym_name); - *reinterpret_cast(reloc) += (sym_addr - reloc); - break; -#elif defined(__mips__) - case R_MIPS_REL32: -#if defined(__LP64__) - // MIPS Elf64_Rel entries contain compound relocations - // We only handle the R_MIPS_NONE|R_MIPS_64|R_MIPS_REL32 case - if (ELF64_R_TYPE2(rel->r_info) != R_MIPS_64 || - ELF64_R_TYPE3(rel->r_info) != R_MIPS_NONE) { - DL_ERR("Unexpected compound relocation type:%d type2:%d type3:%d @ %p (%zu)", - type, (unsigned)ELF64_R_TYPE2(rel->r_info), - (unsigned)ELF64_R_TYPE3(rel->r_info), rel, idx); - return -1; - } -#endif - count_relocation(kRelocAbsolute); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO REL32 %08zx <- %08zx %s", static_cast(reloc), - static_cast(sym_addr), sym_name ? sym_name : "*SECTIONHDR*"); - if (s) { - *reinterpret_cast(reloc) += sym_addr; - } else { - *reinterpret_cast(reloc) += base; - } + case R_386_PC32: + sym_addr = reloc; break; #endif #if defined(__arm__) - case R_ARM_RELATIVE: -#elif defined(__i386__) - case R_386_RELATIVE: + case R_ARM_COPY: + // Fall through. Can't really copy if weak symbol is not found at run-time. #endif - count_relocation(kRelocRelative); - MARK(rel->r_offset); - if (sym) { - DL_ERR("odd RELATIVE form..."); - return -1; - } - TRACE_TYPE(RELO, "RELO RELATIVE %p <- +%p", - reinterpret_cast(reloc), reinterpret_cast(base)); - *reinterpret_cast(reloc) += base; - break; -#if defined(__i386__) - case R_386_IRELATIVE: - count_relocation(kRelocRelative); - MARK(rel->r_offset); - TRACE_TYPE(RELO, "RELO IRELATIVE %p <- %p", reinterpret_cast(reloc), reinterpret_cast(base)); - *reinterpret_cast(reloc) = call_ifunc_resolver(base + *reinterpret_cast(reloc)); - break; -#endif - - default: - DL_ERR("unknown reloc type %d @ %p (%zu)", type, rel, idx); + default: + DL_ERR("unknown weak reloc type %d @ %p (%zu)", type, rel, idx); return -1; } + } else { + // We got a definition. + sym_addr = lsi->resolve_symbol_address(s); + } + count_relocation(kRelocSymbol); } - return 0; + + switch (type) { +#if defined(__arm__) + case R_ARM_JUMP_SLOT: + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) = sym_addr; + break; + case R_ARM_GLOB_DAT: + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO GLOB_DAT %08x <- %08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) = sym_addr; + break; + case R_ARM_ABS32: + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO ABS %08x <- %08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) += sym_addr; + break; + case R_ARM_REL32: + count_relocation(kRelocRelative); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO REL32 %08x <- %08x - %08x %s", + reloc, sym_addr, rel->r_offset, sym_name); + *reinterpret_cast(reloc) += sym_addr - rel->r_offset; + break; + case R_ARM_COPY: + /* + * ET_EXEC is not supported so this should not happen. + * + * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf + * + * Section 4.7.1.10 "Dynamic relocations" + * R_ARM_COPY may only appear in executable objects where e_type is + * set to ET_EXEC. + */ + DL_ERR("%s R_ARM_COPY relocations are not supported", name); + return -1; +#elif defined(__i386__) + case R_386_JMP_SLOT: + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO JMP_SLOT %08x <- %08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) = sym_addr; + break; + case R_386_GLOB_DAT: + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO GLOB_DAT %08x <- %08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) = sym_addr; + break; + case R_386_32: + count_relocation(kRelocRelative); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO R_386_32 %08x <- +%08x %s", reloc, sym_addr, sym_name); + *reinterpret_cast(reloc) += sym_addr; + break; + case R_386_PC32: + count_relocation(kRelocRelative); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO R_386_PC32 %08x <- +%08x (%08x - %08x) %s", + reloc, (sym_addr - reloc), sym_addr, reloc, sym_name); + *reinterpret_cast(reloc) += (sym_addr - reloc); + break; +#elif defined(__mips__) + case R_MIPS_REL32: +#if defined(__LP64__) + // MIPS Elf64_Rel entries contain compound relocations + // We only handle the R_MIPS_NONE|R_MIPS_64|R_MIPS_REL32 case + if (ELF64_R_TYPE2(rel->r_info) != R_MIPS_64 || + ELF64_R_TYPE3(rel->r_info) != R_MIPS_NONE) { + DL_ERR("Unexpected compound relocation type:%d type2:%d type3:%d @ %p (%zu)", + type, (unsigned)ELF64_R_TYPE2(rel->r_info), + (unsigned)ELF64_R_TYPE3(rel->r_info), rel, idx); + return -1; + } +#endif + count_relocation(kRelocAbsolute); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO REL32 %08zx <- %08zx %s", static_cast(reloc), + static_cast(sym_addr), sym_name ? sym_name : "*SECTIONHDR*"); + if (s) { + *reinterpret_cast(reloc) += sym_addr; + } else { + *reinterpret_cast(reloc) += base; + } + break; +#endif + +#if defined(__arm__) + case R_ARM_RELATIVE: +#elif defined(__i386__) + case R_386_RELATIVE: +#endif + count_relocation(kRelocRelative); + MARK(rel->r_offset); + if (sym) { + DL_ERR("odd RELATIVE form..."); + return -1; + } + TRACE_TYPE(RELO, "RELO RELATIVE %p <- +%p", + reinterpret_cast(reloc), reinterpret_cast(base)); + *reinterpret_cast(reloc) += base; + break; +#if defined(__i386__) + case R_386_IRELATIVE: + count_relocation(kRelocRelative); + MARK(rel->r_offset); + TRACE_TYPE(RELO, "RELO IRELATIVE %p <- %p", reinterpret_cast(reloc), reinterpret_cast(base)); + *reinterpret_cast(reloc) = call_ifunc_resolver(base + *reinterpret_cast(reloc)); + break; +#endif + + default: + DL_ERR("unknown reloc type %d @ %p (%zu)", type, rel, idx); + return -1; + } + } + return 0; } #endif #if defined(__mips__) static bool mips_relocate_got(soinfo* si) { - ElfW(Addr)** got = si->plt_got; - if (got == nullptr) { - return true; - } - unsigned local_gotno = si->mips_local_gotno; - unsigned gotsym = si->mips_gotsym; - unsigned symtabno = si->mips_symtabno; - ElfW(Sym)* symtab = si->symtab; - - // got[0] is the address of the lazy resolver function. - // got[1] may be used for a GNU extension. - // Set it to a recognizable address in case someone calls it (should be _rtld_bind_start). - // FIXME: maybe this should be in a separate routine? - if ((si->flags & FLAG_LINKER) == 0) { - size_t g = 0; - got[g++] = reinterpret_cast(0xdeadbeef); - if (reinterpret_cast(got[g]) < 0) { - got[g++] = reinterpret_cast(0xdeadfeed); - } - // Relocate the local GOT entries. - for (; g < local_gotno; g++) { - got[g] = reinterpret_cast(reinterpret_cast(got[g]) + si->load_bias); - } - } - - // Now for the global GOT entries... - ElfW(Sym)* sym = symtab + gotsym; - got = si->plt_got + local_gotno; - for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { - // This is an undefined reference... try to locate it. - const char* sym_name = si->strtab + sym->st_name; - soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); - if (s == nullptr) { - // We only allow an undefined symbol if this is a weak reference. - s = &symtab[g]; - if (ELF_ST_BIND(s->st_info) != STB_WEAK) { - DL_ERR("cannot locate \"%s\"...", sym_name); - return false; - } - *got = 0; - } else { - // FIXME: is this sufficient? - // For reference see NetBSD link loader - // http://cvsweb.netbsd.org/bsdweb.cgi/src/libexec/ld.elf_so/arch/mips/mips_reloc.c?rev=1.53&content-type=text/x-cvsweb-markup - *got = reinterpret_cast(lsi->resolve_symbol_address(s)); - } - } + ElfW(Addr)** got = si->plt_got; + if (got == nullptr) { return true; + } + unsigned local_gotno = si->mips_local_gotno; + unsigned gotsym = si->mips_gotsym; + unsigned symtabno = si->mips_symtabno; + ElfW(Sym)* symtab = si->symtab; + + // got[0] is the address of the lazy resolver function. + // got[1] may be used for a GNU extension. + // Set it to a recognizable address in case someone calls it (should be _rtld_bind_start). + // FIXME: maybe this should be in a separate routine? + if ((si->flags & FLAG_LINKER) == 0) { + size_t g = 0; + got[g++] = reinterpret_cast(0xdeadbeef); + if (reinterpret_cast(got[g]) < 0) { + got[g++] = reinterpret_cast(0xdeadfeed); + } + // Relocate the local GOT entries. + for (; g < local_gotno; g++) { + got[g] = reinterpret_cast(reinterpret_cast(got[g]) + si->load_bias); + } + } + + // Now for the global GOT entries... + ElfW(Sym)* sym = symtab + gotsym; + got = si->plt_got + local_gotno; + for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { + // This is an undefined reference... try to locate it. + const char* sym_name = si->strtab + sym->st_name; + soinfo* lsi = nullptr; + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); + if (s == nullptr) { + // We only allow an undefined symbol if this is a weak reference. + s = &symtab[g]; + if (ELF_ST_BIND(s->st_info) != STB_WEAK) { + DL_ERR("cannot locate \"%s\"...", sym_name); + return false; + } + *got = 0; + } else { + // FIXME: is this sufficient? + // For reference see NetBSD link loader + // http://cvsweb.netbsd.org/bsdweb.cgi/src/libexec/ld.elf_so/arch/mips/mips_reloc.c?rev=1.53&content-type=text/x-cvsweb-markup + *got = reinterpret_cast(lsi->resolve_symbol_address(s)); + } + } + return true; } #endif @@ -1825,62 +1821,62 @@ ElfW(Addr) soinfo::resolve_symbol_address(ElfW(Sym)* s) { /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { - int dev_null, i, status; - int return_value = 0; + int dev_null, i, status; + int return_value = 0; - dev_null = TEMP_FAILURE_RETRY(open("/dev/null", O_RDWR)); - if (dev_null < 0) { - DL_ERR("cannot open /dev/null: %s", strerror(errno)); - return -1; - } - TRACE("[ Opened /dev/null file-descriptor=%d]", dev_null); + dev_null = TEMP_FAILURE_RETRY(open("/dev/null", O_RDWR)); + if (dev_null < 0) { + DL_ERR("cannot open /dev/null: %s", strerror(errno)); + return -1; + } + TRACE("[ Opened /dev/null file-descriptor=%d]", dev_null); - /* If any of the stdio file descriptors is valid and not associated - with /dev/null, dup /dev/null to it. */ - for (i = 0; i < 3; i++) { - /* If it is /dev/null already, we are done. */ - if (i == dev_null) { - continue; - } - - TRACE("[ Nullifying stdio file descriptor %d]", i); - status = TEMP_FAILURE_RETRY(fcntl(i, F_GETFL)); - - /* If file is opened, we are good. */ - if (status != -1) { - continue; - } - - /* The only error we allow is that the file descriptor does not - exist, in which case we dup /dev/null to it. */ - if (errno != EBADF) { - DL_ERR("fcntl failed: %s", strerror(errno)); - return_value = -1; - continue; - } - - /* Try dupping /dev/null to this stdio file descriptor and - repeat if there is a signal. Note that any errors in closing - the stdio descriptor are lost. */ - status = TEMP_FAILURE_RETRY(dup2(dev_null, i)); - if (status < 0) { - DL_ERR("dup2 failed: %s", strerror(errno)); - return_value = -1; - continue; - } + /* If any of the stdio file descriptors is valid and not associated + with /dev/null, dup /dev/null to it. */ + for (i = 0; i < 3; i++) { + /* If it is /dev/null already, we are done. */ + if (i == dev_null) { + continue; } - /* If /dev/null is not one of the stdio file descriptors, close it. */ - if (dev_null > 2) { - TRACE("[ Closing /dev/null file-descriptor=%d]", dev_null); - status = TEMP_FAILURE_RETRY(close(dev_null)); - if (status == -1) { - DL_ERR("close failed: %s", strerror(errno)); - return_value = -1; - } + TRACE("[ Nullifying stdio file descriptor %d]", i); + status = TEMP_FAILURE_RETRY(fcntl(i, F_GETFL)); + + /* If file is opened, we are good. */ + if (status != -1) { + continue; } - return return_value; + /* The only error we allow is that the file descriptor does not + exist, in which case we dup /dev/null to it. */ + if (errno != EBADF) { + DL_ERR("fcntl failed: %s", strerror(errno)); + return_value = -1; + continue; + } + + /* Try dupping /dev/null to this stdio file descriptor and + repeat if there is a signal. Note that any errors in closing + the stdio descriptor are lost. */ + status = TEMP_FAILURE_RETRY(dup2(dev_null, i)); + if (status < 0) { + DL_ERR("dup2 failed: %s", strerror(errno)); + return_value = -1; + continue; + } + } + + /* If /dev/null is not one of the stdio file descriptors, close it. */ + if (dev_null > 2) { + TRACE("[ Closing /dev/null file-descriptor=%d]", dev_null); + status = TEMP_FAILURE_RETRY(close(dev_null)); + if (status == -1) { + DL_ERR("close failed: %s", strerror(errno)); + return_value = -1; + } + } + + return return_value; } bool soinfo::PrelinkImage() { @@ -1888,318 +1884,318 @@ bool soinfo::PrelinkImage() { ElfW(Word) dynamic_flags = 0; phdr_table_get_dynamic_section(phdr, phnum, load_bias, &dynamic, &dynamic_flags); - /* We can't log anything until the linker is relocated */ - bool relocating_linker = (flags & FLAG_LINKER) != 0; - if (!relocating_linker) { - INFO("[ linking %s ]", name); - DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); - } + /* We can't log anything until the linker is relocated */ + bool relocating_linker = (flags & FLAG_LINKER) != 0; + if (!relocating_linker) { + INFO("[ linking %s ]", name); + DEBUG("si->base = %p si->flags = 0x%08x", reinterpret_cast(base), flags); + } - if (dynamic == nullptr) { - if (!relocating_linker) { - DL_ERR("missing PT_DYNAMIC in \"%s\"", name); - } - return false; - } else { - if (!relocating_linker) { - DEBUG("dynamic = %p", dynamic); - } + if (dynamic == nullptr) { + if (!relocating_linker) { + DL_ERR("missing PT_DYNAMIC in \"%s\"", name); } + return false; + } else { + if (!relocating_linker) { + DEBUG("dynamic = %p", dynamic); + } + } #if defined(__arm__) - (void) phdr_table_get_arm_exidx(phdr, phnum, load_bias, - &ARM_exidx, &ARM_exidx_count); + (void) phdr_table_get_arm_exidx(phdr, phnum, load_bias, + &ARM_exidx, &ARM_exidx_count); #endif - // Extract useful information from dynamic section. - uint32_t needed_count = 0; - for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { - DEBUG("d = %p, d[0](tag) = %p d[1](val) = %p", - d, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); - switch (d->d_tag) { - case DT_HASH: - nbucket = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; - nchain = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; - bucket = reinterpret_cast(load_bias + d->d_un.d_ptr + 8); - chain = reinterpret_cast(load_bias + d->d_un.d_ptr + 8 + nbucket * 4); - break; - case DT_STRTAB: - strtab = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; - case DT_SYMTAB: - symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; + // Extract useful information from dynamic section. + uint32_t needed_count = 0; + for (ElfW(Dyn)* d = dynamic; d->d_tag != DT_NULL; ++d) { + DEBUG("d = %p, d[0](tag) = %p d[1](val) = %p", + d, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); + switch (d->d_tag) { + case DT_HASH: + nbucket = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; + nchain = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; + bucket = reinterpret_cast(load_bias + d->d_un.d_ptr + 8); + chain = reinterpret_cast(load_bias + d->d_un.d_ptr + 8 + nbucket * 4); + break; + case DT_STRTAB: + strtab = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; + case DT_SYMTAB: + symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; #if !defined(__LP64__) - case DT_PLTREL: - if (d->d_un.d_val != DT_REL) { - DL_ERR("unsupported DT_RELA in \"%s\"", name); - return false; - } - break; + case DT_PLTREL: + if (d->d_un.d_val != DT_REL) { + DL_ERR("unsupported DT_RELA in \"%s\"", name); + return false; + } + break; #endif - case DT_JMPREL: + case DT_JMPREL: #if defined(USE_RELA) - plt_rela = reinterpret_cast(load_bias + d->d_un.d_ptr); + plt_rela = reinterpret_cast(load_bias + d->d_un.d_ptr); #else - plt_rel = reinterpret_cast(load_bias + d->d_un.d_ptr); + plt_rel = reinterpret_cast(load_bias + d->d_un.d_ptr); #endif - break; - case DT_PLTRELSZ: + break; + case DT_PLTRELSZ: #if defined(USE_RELA) - plt_rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); + plt_rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); #else - plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); + plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); #endif - break; + break; #if defined(__mips__) - case DT_PLTGOT: - // Used by mips and mips64. - plt_got = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; + case DT_PLTGOT: + // Used by mips and mips64. + plt_got = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; #endif - case DT_DEBUG: - // Set the DT_DEBUG entry to the address of _r_debug for GDB - // if the dynamic table is writable + case DT_DEBUG: + // Set the DT_DEBUG entry to the address of _r_debug for GDB + // if the dynamic table is writable // FIXME: not working currently for N64 // The flags for the LOAD and DYNAMIC program headers do not agree. // The LOAD section containing the dynamic table has been mapped as // read-only, but the DYNAMIC header claims it is writable. #if !(defined(__mips__) && defined(__LP64__)) - if ((dynamic_flags & PF_W) != 0) { - d->d_un.d_val = reinterpret_cast(&_r_debug); - } - break; + if ((dynamic_flags & PF_W) != 0) { + d->d_un.d_val = reinterpret_cast(&_r_debug); + } + break; #endif #if defined(USE_RELA) - case DT_RELA: - rela = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; - case DT_RELASZ: - rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); - break; - case DT_REL: - DL_ERR("unsupported DT_REL in \"%s\"", name); - return false; - case DT_RELSZ: - DL_ERR("unsupported DT_RELSZ in \"%s\"", name); - return false; + case DT_RELA: + rela = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; + case DT_RELASZ: + rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); + break; + case DT_REL: + DL_ERR("unsupported DT_REL in \"%s\"", name); + return false; + case DT_RELSZ: + DL_ERR("unsupported DT_RELSZ in \"%s\"", name); + return false; #else - case DT_REL: - rel = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; - case DT_RELSZ: - rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); - break; - case DT_RELA: - DL_ERR("unsupported DT_RELA in \"%s\"", name); - return false; + case DT_REL: + rel = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; + case DT_RELSZ: + rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); + break; + case DT_RELA: + DL_ERR("unsupported DT_RELA in \"%s\"", name); + return false; #endif - case DT_INIT: - init_func = reinterpret_cast(load_bias + d->d_un.d_ptr); - DEBUG("%s constructors (DT_INIT) found at %p", name, init_func); - break; - case DT_FINI: - fini_func = reinterpret_cast(load_bias + d->d_un.d_ptr); - DEBUG("%s destructors (DT_FINI) found at %p", name, fini_func); - break; - case DT_INIT_ARRAY: - init_array = reinterpret_cast(load_bias + d->d_un.d_ptr); - DEBUG("%s constructors (DT_INIT_ARRAY) found at %p", name, init_array); - break; - case DT_INIT_ARRAYSZ: - init_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); - break; - case DT_FINI_ARRAY: - fini_array = reinterpret_cast(load_bias + d->d_un.d_ptr); - DEBUG("%s destructors (DT_FINI_ARRAY) found at %p", name, fini_array); - break; - case DT_FINI_ARRAYSZ: - fini_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); - break; - case DT_PREINIT_ARRAY: - preinit_array = reinterpret_cast(load_bias + d->d_un.d_ptr); - DEBUG("%s constructors (DT_PREINIT_ARRAY) found at %p", name, preinit_array); - break; - case DT_PREINIT_ARRAYSZ: - preinit_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); - break; - case DT_TEXTREL: + case DT_INIT: + init_func = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_INIT) found at %p", name, init_func); + break; + case DT_FINI: + fini_func = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s destructors (DT_FINI) found at %p", name, fini_func); + break; + case DT_INIT_ARRAY: + init_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_INIT_ARRAY) found at %p", name, init_array); + break; + case DT_INIT_ARRAYSZ: + init_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + break; + case DT_FINI_ARRAY: + fini_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s destructors (DT_FINI_ARRAY) found at %p", name, fini_array); + break; + case DT_FINI_ARRAYSZ: + fini_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + break; + case DT_PREINIT_ARRAY: + preinit_array = reinterpret_cast(load_bias + d->d_un.d_ptr); + DEBUG("%s constructors (DT_PREINIT_ARRAY) found at %p", name, preinit_array); + break; + case DT_PREINIT_ARRAYSZ: + preinit_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); + break; + case DT_TEXTREL: #if defined(__LP64__) - DL_ERR("text relocations (DT_TEXTREL) found in 64-bit ELF file \"%s\"", name); - return false; + DL_ERR("text relocations (DT_TEXTREL) found in 64-bit ELF file \"%s\"", name); + return false; #else - has_text_relocations = true; - break; + has_text_relocations = true; + break; #endif - case DT_SYMBOLIC: - has_DT_SYMBOLIC = true; - break; - case DT_NEEDED: - ++needed_count; - break; - case DT_FLAGS: - if (d->d_un.d_val & DF_TEXTREL) { + case DT_SYMBOLIC: + has_DT_SYMBOLIC = true; + break; + case DT_NEEDED: + ++needed_count; + break; + case DT_FLAGS: + if (d->d_un.d_val & DF_TEXTREL) { #if defined(__LP64__) - DL_ERR("text relocations (DF_TEXTREL) found in 64-bit ELF file \"%s\"", name); - return false; + DL_ERR("text relocations (DF_TEXTREL) found in 64-bit ELF file \"%s\"", name); + return false; #else - has_text_relocations = true; + has_text_relocations = true; #endif - } - if (d->d_un.d_val & DF_SYMBOLIC) { - has_DT_SYMBOLIC = true; - } - break; -#if defined(__mips__) - case DT_STRSZ: - case DT_SYMENT: - case DT_RELENT: - break; - case DT_MIPS_RLD_MAP: - // Set the DT_MIPS_RLD_MAP entry to the address of _r_debug for GDB. - { - r_debug** dp = reinterpret_cast(load_bias + d->d_un.d_ptr); - *dp = &_r_debug; - } - break; - case DT_MIPS_RLD_VERSION: - case DT_MIPS_FLAGS: - case DT_MIPS_BASE_ADDRESS: - case DT_MIPS_UNREFEXTNO: - break; - - case DT_MIPS_SYMTABNO: - mips_symtabno = d->d_un.d_val; - break; - - case DT_MIPS_LOCAL_GOTNO: - mips_local_gotno = d->d_un.d_val; - break; - - case DT_MIPS_GOTSYM: - mips_gotsym = d->d_un.d_val; - break; -#endif - - default: - DEBUG("Unused DT entry: type %p arg %p", - reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); - break; } - } + if (d->d_un.d_val & DF_SYMBOLIC) { + has_DT_SYMBOLIC = true; + } + break; +#if defined(__mips__) + case DT_STRSZ: + case DT_SYMENT: + case DT_RELENT: + break; + case DT_MIPS_RLD_MAP: + // Set the DT_MIPS_RLD_MAP entry to the address of _r_debug for GDB. + { + r_debug** dp = reinterpret_cast(load_bias + d->d_un.d_ptr); + *dp = &_r_debug; + } + break; + case DT_MIPS_RLD_VERSION: + case DT_MIPS_FLAGS: + case DT_MIPS_BASE_ADDRESS: + case DT_MIPS_UNREFEXTNO: + break; - DEBUG("si->base = %p, si->strtab = %p, si->symtab = %p", - reinterpret_cast(base), strtab, symtab); + case DT_MIPS_SYMTABNO: + mips_symtabno = d->d_un.d_val; + break; - // Sanity checks. - if (relocating_linker && needed_count != 0) { - DL_ERR("linker cannot have DT_NEEDED dependencies on other libraries"); - return false; + case DT_MIPS_LOCAL_GOTNO: + mips_local_gotno = d->d_un.d_val; + break; + + case DT_MIPS_GOTSYM: + mips_gotsym = d->d_un.d_val; + break; +#endif + + default: + DEBUG("Unused DT entry: type %p arg %p", + reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); + break; } - if (nbucket == 0) { - DL_ERR("empty/missing DT_HASH in \"%s\" (built with --hash-style=gnu?)", name); - return false; - } - if (strtab == 0) { - DL_ERR("empty/missing DT_STRTAB in \"%s\"", name); - return false; - } - if (symtab == 0) { - DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); - return false; - } - return true; + } + + DEBUG("si->base = %p, si->strtab = %p, si->symtab = %p", + reinterpret_cast(base), strtab, symtab); + + // Sanity checks. + if (relocating_linker && needed_count != 0) { + DL_ERR("linker cannot have DT_NEEDED dependencies on other libraries"); + return false; + } + if (nbucket == 0) { + DL_ERR("empty/missing DT_HASH in \"%s\" (built with --hash-style=gnu?)", name); + return false; + } + if (strtab == 0) { + DL_ERR("empty/missing DT_STRTAB in \"%s\"", name); + return false; + } + if (symtab == 0) { + DL_ERR("empty/missing DT_SYMTAB in \"%s\"", name); + return false; + } + return true; } bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if !defined(__LP64__) - if (has_text_relocations) { - // Make segments writable to allow text relocations to work properly. We will later call - // phdr_table_protect_segments() after all of them are applied and all constructors are run. - DL_WARN("%s has text relocations. This is wasting memory and prevents " - "security hardening. Please fix.", name); - if (phdr_table_unprotect_segments(phdr, phnum, load_bias) < 0) { - DL_ERR("can't unprotect loadable segments for \"%s\": %s", - name, strerror(errno)); - return false; - } + if (has_text_relocations) { + // Make segments writable to allow text relocations to work properly. We will later call + // phdr_table_protect_segments() after all of them are applied and all constructors are run. + DL_WARN("%s has text relocations. This is wasting memory and prevents " + "security hardening. Please fix.", name); + if (phdr_table_unprotect_segments(phdr, phnum, load_bias) < 0) { + DL_ERR("can't unprotect loadable segments for \"%s\": %s", + name, strerror(errno)); + return false; } + } #endif #if defined(USE_RELA) - if (rela != nullptr) { - DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count)) { - return false; - } + if (rela != nullptr) { + DEBUG("[ relocating %s ]", name); + if (Relocate(rela, rela_count)) { + return false; } - if (plt_rela != nullptr) { - DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count)) { - return false; - } + } + if (plt_rela != nullptr) { + DEBUG("[ relocating %s plt ]", name); + if (Relocate(plt_rela, plt_rela_count)) { + return false; } + } #else - if (rel != nullptr) { - DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count)) { - return false; - } + if (rel != nullptr) { + DEBUG("[ relocating %s ]", name); + if (Relocate(rel, rel_count)) { + return false; } - if (plt_rel != nullptr) { - DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count)) { - return false; - } + } + if (plt_rel != nullptr) { + DEBUG("[ relocating %s plt ]", name); + if (Relocate(plt_rel, plt_rel_count)) { + return false; } + } #endif #if defined(__mips__) - if (!mips_relocate_got(this)) { - return false; - } + if (!mips_relocate_got(this)) { + return false; + } #endif - DEBUG("[ finished linking %s ]", name); + DEBUG("[ finished linking %s ]", name); #if !defined(__LP64__) - if (has_text_relocations) { - // All relocations are done, we can protect our segments back to read-only. - if (phdr_table_protect_segments(phdr, phnum, load_bias) < 0) { - DL_ERR("can't protect segments for \"%s\": %s", - name, strerror(errno)); - return false; - } + if (has_text_relocations) { + // All relocations are done, we can protect our segments back to read-only. + if (phdr_table_protect_segments(phdr, phnum, load_bias) < 0) { + DL_ERR("can't protect segments for \"%s\": %s", + name, strerror(errno)); + return false; } + } #endif - /* We can also turn on GNU RELRO protection */ - if (phdr_table_protect_gnu_relro(phdr, phnum, load_bias) < 0) { - DL_ERR("can't enable GNU RELRO protection for \"%s\": %s", - name, strerror(errno)); - return false; - } + /* We can also turn on GNU RELRO protection */ + if (phdr_table_protect_gnu_relro(phdr, phnum, load_bias) < 0) { + DL_ERR("can't enable GNU RELRO protection for \"%s\": %s", + name, strerror(errno)); + return false; + } - /* Handle serializing/sharing the RELRO segment */ - if (extinfo && (extinfo->flags & ANDROID_DLEXT_WRITE_RELRO)) { - if (phdr_table_serialize_gnu_relro(phdr, phnum, load_bias, - extinfo->relro_fd) < 0) { - DL_ERR("failed serializing GNU RELRO section for \"%s\": %s", - name, strerror(errno)); - return false; - } - } else if (extinfo && (extinfo->flags & ANDROID_DLEXT_USE_RELRO)) { - if (phdr_table_map_gnu_relro(phdr, phnum, load_bias, - extinfo->relro_fd) < 0) { - DL_ERR("failed mapping GNU RELRO section for \"%s\": %s", - name, strerror(errno)); - return false; - } + /* Handle serializing/sharing the RELRO segment */ + if (extinfo && (extinfo->flags & ANDROID_DLEXT_WRITE_RELRO)) { + if (phdr_table_serialize_gnu_relro(phdr, phnum, load_bias, + extinfo->relro_fd) < 0) { + DL_ERR("failed serializing GNU RELRO section for \"%s\": %s", + name, strerror(errno)); + return false; } + } else if (extinfo && (extinfo->flags & ANDROID_DLEXT_USE_RELRO)) { + if (phdr_table_map_gnu_relro(phdr, phnum, load_bias, + extinfo->relro_fd) < 0) { + DL_ERR("failed mapping GNU RELRO section for \"%s\": %s", + name, strerror(errno)); + return false; + } + } - notify_gdb_of_load(this); - return true; + notify_gdb_of_load(this); + return true; } /* @@ -2267,182 +2263,182 @@ static void init_linker_info_for_gdb(ElfW(Addr) linker_base) { */ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW(Addr) linker_base) { #if TIMING - struct timeval t0, t1; - gettimeofday(&t0, 0); + struct timeval t0, t1; + gettimeofday(&t0, 0); #endif - // Initialize environment functions, and get to the ELF aux vectors table. - linker_env_init(args); + // Initialize environment functions, and get to the ELF aux vectors table. + linker_env_init(args); - // If this is a setuid/setgid program, close the security hole described in - // ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-02:23.stdio.asc - if (get_AT_SECURE()) { - nullify_closed_stdio(); + // If this is a setuid/setgid program, close the security hole described in + // ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-02:23.stdio.asc + if (get_AT_SECURE()) { + nullify_closed_stdio(); + } + + debuggerd_init(); + + // Get a few environment variables. + const char* LD_DEBUG = linker_env_get("LD_DEBUG"); + if (LD_DEBUG != nullptr) { + g_ld_debug_verbosity = atoi(LD_DEBUG); + } + + // Normally, these are cleaned by linker_env_init, but the test + // doesn't cost us anything. + const char* ldpath_env = nullptr; + const char* ldpreload_env = nullptr; + if (!get_AT_SECURE()) { + ldpath_env = linker_env_get("LD_LIBRARY_PATH"); + ldpreload_env = linker_env_get("LD_PRELOAD"); + } + + INFO("[ android linker & debugger ]"); + + soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); + if (si == nullptr) { + exit(EXIT_FAILURE); + } + + /* bootstrap the link map, the main exe always needs to be first */ + si->flags |= FLAG_EXE; + link_map* map = &(si->link_map_head); + + map->l_addr = 0; + map->l_name = args.argv[0]; + map->l_prev = nullptr; + map->l_next = nullptr; + + _r_debug.r_map = map; + r_debug_tail = map; + + init_linker_info_for_gdb(linker_base); + + // Extract information passed from the kernel. + si->phdr = reinterpret_cast(args.getauxval(AT_PHDR)); + si->phnum = args.getauxval(AT_PHNUM); + si->entry = args.getauxval(AT_ENTRY); + + /* Compute the value of si->base. We can't rely on the fact that + * the first entry is the PHDR because this will not be true + * for certain executables (e.g. some in the NDK unit test suite) + */ + si->base = 0; + si->size = phdr_table_get_load_size(si->phdr, si->phnum); + si->load_bias = 0; + for (size_t i = 0; i < si->phnum; ++i) { + if (si->phdr[i].p_type == PT_PHDR) { + si->load_bias = reinterpret_cast(si->phdr) - si->phdr[i].p_vaddr; + si->base = reinterpret_cast(si->phdr) - si->phdr[i].p_offset; + break; } + } + si->dynamic = nullptr; + si->ref_count = 1; - debuggerd_init(); + ElfW(Ehdr)* elf_hdr = reinterpret_cast(si->base); + if (elf_hdr->e_type != ET_DYN) { + __libc_format_fd(2, "error: only position independent executables (PIE) are supported.\n"); + exit(EXIT_FAILURE); + } - // Get a few environment variables. - const char* LD_DEBUG = linker_env_get("LD_DEBUG"); - if (LD_DEBUG != nullptr) { - g_ld_debug_verbosity = atoi(LD_DEBUG); - } + // Use LD_LIBRARY_PATH and LD_PRELOAD (but only if we aren't setuid/setgid). + parse_LD_LIBRARY_PATH(ldpath_env); + parse_LD_PRELOAD(ldpreload_env); - // Normally, these are cleaned by linker_env_init, but the test - // doesn't cost us anything. - const char* ldpath_env = nullptr; - const char* ldpreload_env = nullptr; - if (!get_AT_SECURE()) { - ldpath_env = linker_env_get("LD_LIBRARY_PATH"); - ldpreload_env = linker_env_get("LD_PRELOAD"); - } + somain = si; - INFO("[ android linker & debugger ]"); + si->PrelinkImage(); - soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); - if (si == nullptr) { - exit(EXIT_FAILURE); - } + // Load ld_preloads and dependencies. + StringLinkedList needed_library_name_list; + size_t needed_libraries_count = 0; + size_t ld_preloads_count = 0; + while (g_ld_preload_names[ld_preloads_count] != nullptr) { + needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]); + ++needed_libraries_count; + } - /* bootstrap the link map, the main exe always needs to be first */ - si->flags |= FLAG_EXE; - link_map* map = &(si->link_map_head); + for_each_dt_needed(si, [&](const char* name) { + needed_library_name_list.push_back(name); + ++needed_libraries_count; + }); - map->l_addr = 0; - map->l_name = args.argv[0]; - map->l_prev = nullptr; - map->l_next = nullptr; + const char* needed_library_names[needed_libraries_count]; + soinfo* needed_library_si[needed_libraries_count]; - _r_debug.r_map = map; - r_debug_tail = map; + memset(needed_library_names, 0, sizeof(needed_library_names)); + needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - init_linker_info_for_gdb(linker_base); + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } - // Extract information passed from the kernel. - si->phdr = reinterpret_cast(args.getauxval(AT_PHDR)); - si->phnum = args.getauxval(AT_PHNUM); - si->entry = args.getauxval(AT_ENTRY); + for (size_t i = 0; iadd_child(needed_library_si[i]); + } - /* Compute the value of si->base. We can't rely on the fact that - * the first entry is the PHDR because this will not be true - * for certain executables (e.g. some in the NDK unit test suite) - */ - si->base = 0; - si->size = phdr_table_get_load_size(si->phdr, si->phnum); - si->load_bias = 0; - for (size_t i = 0; i < si->phnum; ++i) { - if (si->phdr[i].p_type == PT_PHDR) { - si->load_bias = reinterpret_cast(si->phdr) - si->phdr[i].p_vaddr; - si->base = reinterpret_cast(si->phdr) - si->phdr[i].p_offset; - break; - } - } - si->dynamic = nullptr; - si->ref_count = 1; + if (!si->LinkImage(nullptr)) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } - ElfW(Ehdr)* elf_hdr = reinterpret_cast(si->base); - if (elf_hdr->e_type != ET_DYN) { - __libc_format_fd(2, "error: only position independent executables (PIE) are supported.\n"); - exit(EXIT_FAILURE); - } + add_vdso(args); - // Use LD_LIBRARY_PATH and LD_PRELOAD (but only if we aren't setuid/setgid). - parse_LD_LIBRARY_PATH(ldpath_env); - parse_LD_PRELOAD(ldpreload_env); + si->CallPreInitConstructors(); - somain = si; - - si->PrelinkImage(); - - // Load ld_preloads and dependencies. - StringLinkedList needed_library_name_list; - size_t needed_libraries_count = 0; - size_t ld_preloads_count = 0; - while (g_ld_preload_names[ld_preloads_count] != nullptr) { - needed_library_name_list.push_back(g_ld_preload_names[ld_preloads_count++]); - ++needed_libraries_count; - } - - for_each_dt_needed(si, [&](const char* name) { - needed_library_name_list.push_back(name); - ++needed_libraries_count; - }); - - const char* needed_library_names[needed_libraries_count]; - soinfo* needed_library_si[needed_libraries_count]; - - memset(needed_library_names, 0, sizeof(needed_library_names)); - needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { - __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); - exit(EXIT_FAILURE); - } - - for (size_t i = 0; iadd_child(needed_library_si[i]); - } - - if (!si->LinkImage(nullptr)) { - __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); - exit(EXIT_FAILURE); - } - - add_vdso(args); - - si->CallPreInitConstructors(); - - /* After the PrelinkImage, the si->load_bias is initialized. - * For so lib, the map->l_addr will be updated in notify_gdb_of_load. - * We need to update this value for so exe here. So Unwind_Backtrace - * for some arch like x86 could work correctly within so exe. - */ - map->l_addr = si->load_bias; - si->CallConstructors(); + /* After the PrelinkImage, the si->load_bias is initialized. + * For so lib, the map->l_addr will be updated in notify_gdb_of_load. + * We need to update this value for so exe here. So Unwind_Backtrace + * for some arch like x86 could work correctly within so exe. + */ + map->l_addr = si->load_bias; + si->CallConstructors(); #if TIMING - gettimeofday(&t1, nullptr); - PRINT("LINKER TIME: %s: %d microseconds", args.argv[0], (int) ( - (((long long)t1.tv_sec * 1000000LL) + (long long)t1.tv_usec) - - (((long long)t0.tv_sec * 1000000LL) + (long long)t0.tv_usec))); + gettimeofday(&t1, nullptr); + PRINT("LINKER TIME: %s: %d microseconds", args.argv[0], (int) ( + (((long long)t1.tv_sec * 1000000LL) + (long long)t1.tv_usec) - + (((long long)t0.tv_sec * 1000000LL) + (long long)t0.tv_usec))); #endif #if STATS - PRINT("RELO STATS: %s: %d abs, %d rel, %d copy, %d symbol", args.argv[0], - linker_stats.count[kRelocAbsolute], - linker_stats.count[kRelocRelative], - linker_stats.count[kRelocCopy], - linker_stats.count[kRelocSymbol]); + PRINT("RELO STATS: %s: %d abs, %d rel, %d copy, %d symbol", args.argv[0], + linker_stats.count[kRelocAbsolute], + linker_stats.count[kRelocRelative], + linker_stats.count[kRelocCopy], + linker_stats.count[kRelocSymbol]); #endif #if COUNT_PAGES - { - unsigned n; - unsigned i; - unsigned count = 0; - for (n = 0; n < 4096; n++) { - if (bitmask[n]) { - unsigned x = bitmask[n]; + { + unsigned n; + unsigned i; + unsigned count = 0; + for (n = 0; n < 4096; n++) { + if (bitmask[n]) { + unsigned x = bitmask[n]; #if defined(__LP64__) - for (i = 0; i < 32; i++) { + for (i = 0; i < 32; i++) { #else - for (i = 0; i < 8; i++) { + for (i = 0; i < 8; i++) { #endif - if (x & 1) { - count++; - } - x >>= 1; - } - } + if (x & 1) { + count++; + } + x >>= 1; } - PRINT("PAGES MODIFIED: %s: %d (%dKB)", args.argv[0], count, count * 4); + } } + PRINT("PAGES MODIFIED: %s: %d (%dKB)", args.argv[0], count, count * 4); + } #endif #if TIMING || STATS || COUNT_PAGES - fflush(stdout); + fflush(stdout); #endif - TRACE("[ Ready to execute '%s' @ %p ]", si->name, reinterpret_cast(si->entry)); - return si->entry; + TRACE("[ Ready to execute '%s' @ %p ]", si->name, reinterpret_cast(si->entry)); + return si->entry; } /* Compute the load-bias of an existing executable. This shall only From c85e82dde5c4b2accc50a9e17740b9005dfbae6a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 15 Sep 2014 17:00:10 -0700 Subject: [PATCH 068/194] Fix dlsym() to take into account RTLD_GLOBAL/LOCAL Symbols from libraries opened with RTLD_LOCAL (default) should not be visible via dlsym(RLTD_DEFAULT/RTLD_NEXT, .) Bug: 17512583 Bug: 18186310 (cherry picked from commit e8ba50fe0d51fbefee1a8f5bb62bf51d841512c8) Change-Id: Idf6bbe2233fb2bfc0c88677e7d1fc518fb3f7a8b --- linker/dlfcn.cpp | 2 +- linker/linker.cpp | 48 ++++++++++++++++++---------- linker/linker.h | 5 ++- tests/dlfcn_test.cpp | 36 +++++++++++++++++++++ tests/libs/dlopen_testlib_simple.cpp | 2 +- 5 files changed, 73 insertions(+), 20 deletions(-) diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 3631d2fe1..59f673ad5 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -232,7 +232,7 @@ static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 }; static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; #endif -static soinfo __libdl_info("libdl.so", nullptr, 0); +static soinfo __libdl_info("libdl.so", nullptr, 0, RTLD_GLOBAL); // This is used by the dynamic linker. Every process gets these symbols for free. soinfo* get_libdl_info() { diff --git a/linker/linker.cpp b/linker/linker.cpp index 37e01893f..bd05498b0 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,13 +282,13 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; } - soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset); + soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset, rtld_flags); sonext->next = si; sonext = si; @@ -453,7 +453,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return nullptr; } -soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset) { +soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags) { memset(this, 0, sizeof(*this)); strlcpy(this->name, name, sizeof(this->name)); @@ -465,6 +465,8 @@ soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offs this->st_ino = file_stat->st_ino; this->file_offset = file_offset; } + + this->rtld_flags = rtld_flags; } static unsigned elfhash(const char* _name) { @@ -716,6 +718,10 @@ ElfW(Sym)* dlsym_linear_lookup(const char* name, soinfo** found, soinfo* start) ElfW(Sym)* s = nullptr; for (soinfo* si = start; (s == nullptr) && (si != nullptr); si = si->next) { + if ((si->get_rtld_flags() & RTLD_GLOBAL) == 0) { + continue; + } + s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { *found = si; @@ -806,7 +812,7 @@ static void for_each_dt_needed(const soinfo* si, F action) { } } -static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { int fd = -1; off64_t file_offset = 0; ScopedFd file_guard(-1); @@ -851,7 +857,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl } } - if ((dlflags & RTLD_NOLOAD) != 0) { + if ((rtld_flags & RTLD_NOLOAD) != 0) { DL_ERR("library \"%s\" wasn't loaded and RTLD_NOLOAD prevented it", name); return nullptr; } @@ -862,7 +868,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl return nullptr; } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset, rtld_flags); if (si == nullptr) { return nullptr; } @@ -894,7 +900,7 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { soinfo* si = find_loaded_library_by_name(name); @@ -902,7 +908,7 @@ static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, // of this fact is done by load_library. if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(load_tasks, name, dlflags, extinfo); + si = load_library(load_tasks, name, rtld_flags, extinfo); } return si; @@ -926,7 +932,7 @@ static bool is_recursive(soinfo* si, soinfo* parent) { } static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { + soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; for (size_t i = 0; i < library_names_size; ++i) { @@ -952,7 +958,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam // Step 1: load and pre-link all DT_NEEDED libraries in breadth first order. for (LoadTask::unique_ptr task(load_tasks.pop_front()); task.get() != nullptr; task.reset(load_tasks.pop_front())) { - soinfo* si = find_library_internal(load_tasks, task->get_name(), dlflags, extinfo); + soinfo* si = find_library_internal(load_tasks, task->get_name(), rtld_flags, extinfo); if (si == nullptr) { return false; } @@ -997,7 +1003,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam return true; } -static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { if (name == nullptr) { somain->ref_count++; return somain; @@ -1005,7 +1011,7 @@ static soinfo* find_library(const char* name, int dlflags, const android_dlextin soinfo* si; - if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { + if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { return nullptr; } @@ -1790,6 +1796,14 @@ off64_t soinfo::get_file_offset() { return 0; } +int soinfo::get_rtld_flags() { + if (has_min_version(1)) { + return rtld_flags; + } + + return 0; +} + // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -2210,7 +2224,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { return; } - soinfo* si = soinfo_alloc("[vdso]", nullptr, 0); + soinfo* si = soinfo_alloc("[vdso]", nullptr, 0, 0); si->phdr = reinterpret_cast(reinterpret_cast(ehdr_vdso) + ehdr_vdso->e_phoff); si->phnum = ehdr_vdso->e_phnum; @@ -2231,7 +2245,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { #else #define LINKER_PATH "/system/bin/linker" #endif -static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0); +static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0, 0); /* gdb expects the linker to be in the debug shared object list. * Without this, gdb has trouble locating the linker's ".text" @@ -2295,7 +2309,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( INFO("[ android linker & debugger ]"); - soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); + soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0, RTLD_GLOBAL); if (si == nullptr) { exit(EXIT_FAILURE); } @@ -2370,7 +2384,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2483,7 +2497,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_addr); ElfW(Phdr)* phdr = reinterpret_cast(linker_addr + elf_hdr->e_phoff); - soinfo linker_so("[dynamic linker]", nullptr, 0); + soinfo linker_so("[dynamic linker]", nullptr, 0, 0); // If the linker is not acting as PT_INTERP entry_point is equal to // _start. Which means that the linker is running as an executable and diff --git a/linker/linker.h b/linker/linker.h index 3b140ac24..ef2fbcd6c 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -199,7 +199,7 @@ struct soinfo { #endif bool has_DT_SYMBOLIC; - soinfo(const char* name, const struct stat* file_stat, off64_t file_offset); + soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags); void CallConstructors(); void CallDestructors(); @@ -214,6 +214,8 @@ struct soinfo { dev_t get_st_dev(); off64_t get_file_offset(); + int get_rtld_flags(); + soinfo_list_t& get_children(); soinfo_list_t& get_parents(); @@ -246,6 +248,7 @@ struct soinfo { // version >= 1 off64_t file_offset; + int rtld_flags; }; extern soinfo* get_libdl_info(); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 9c9fbdd12..a55b36420 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -202,6 +202,42 @@ TEST(dlfcn, dlopen_check_order) { dlclose(handle); } +TEST(dlfcn, dlopen_check_rtld_local) { + void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + + // implicit RTLD_LOCAL + void* handle = dlopen("libtest_simple.so", RTLD_NOW); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); + sym = dlsym(handle, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); + + // explicit RTLD_LOCAL + handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_LOCAL); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); + sym = dlsym(handle, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); +} + +TEST(dlfcn, dlopen_check_rtld_global) { + void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + + void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr) << dlerror(); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); +} + // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> // libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> // libtest_with_dependency_loop_a.so diff --git a/tests/libs/dlopen_testlib_simple.cpp b/tests/libs/dlopen_testlib_simple.cpp index afe54b4c0..06253e1f4 100644 --- a/tests/libs/dlopen_testlib_simple.cpp +++ b/tests/libs/dlopen_testlib_simple.cpp @@ -18,6 +18,6 @@ uint32_t dlopen_testlib_taxicab_number = 1729; -bool dlopen_testlib_simple_func() { +extern "C" bool dlopen_testlib_simple_func() { return true; } From b364d9538073716a256b37a790ff7bf3ddbb4f1b Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 16 Sep 2014 14:31:06 -0700 Subject: [PATCH 069/194] Remove has_DT_SYMBOLIC flag From the elf-spec: "Symbolically bound shared objects are identified by the .dynamic entry DT_SYMBOLIC. This tag is informational only; the runtime linker processes symbol lookups from these objects in the same manner as any other object." Bug: 18186310 (cherry picked from commit 8f61d991831f0ea515fa50a5c38dbbcfbab0dd28) Change-Id: I37024799ac8d1837993c8ae78780a448bedd6539 --- linker/dlfcn.cpp | 1 - linker/linker.cpp | 131 ++++++++++++++-------------------------------- linker/linker.h | 2 +- 3 files changed, 40 insertions(+), 94 deletions(-) diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 59f673ad5..c02bfb89a 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -244,7 +244,6 @@ soinfo* get_libdl_info() { __libdl_info.nchain = sizeof(g_libdl_chains)/sizeof(unsigned); __libdl_info.bucket = g_libdl_buckets; __libdl_info.chain = g_libdl_chains; - __libdl_info.has_DT_SYMBOLIC = true; __libdl_info.ref_count = 1; } diff --git a/linker/linker.cpp b/linker/linker.cpp index bd05498b0..246475b4e 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -487,117 +487,65 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { ElfW(Sym)* s = nullptr; if (somain != nullptr) { - /* - * Local scope is executable scope. Just start looking into it right away - * for the shortcut. - */ + DEBUG("%s: looking up %s in executable %s", + si->name, name, somain->name); - if (si == somain) { - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - goto done; - } + // 1. Look for it in the main executable + s = soinfo_elf_lookup(somain, elf_hash, name); + if (s != nullptr) { + *lsi = somain; + } - /* Next, look for it in the preloads list */ + // 2. Look for it in the ld_preloads + if (s == nullptr) { for (int i = 0; g_ld_preloads[i] != NULL; i++) { s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } - } - } else { - /* Order of symbol lookup is controlled by DT_SYMBOLIC flag */ - - /* - * If this object was built with symbolic relocations disabled, the - * first place to look to resolve external references is the main - * executable. - */ - - if (!si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); if (s != nullptr) { - *lsi = somain; - goto done; - } - - /* Next, look for it in the preloads list */ - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } + *lsi = g_ld_preloads[i]; + break; } } + } - /* Look for symbols in the local scope (the object who is - * searching). This happens with C++ templates on x86 for some - * reason. - * - * Notes on weak symbols: - * The ELF specs are ambiguous about treatment of weak definitions in - * dynamic linking. Some systems return the first definition found - * and some the first non-weak definition. This is system dependent. - * Here we return the first definition found for simplicity. */ + /* Look for symbols in the local scope (the object who is + * searching). This happens with C++ templates on x86 for some + * reason. + * + * Notes on weak symbols: + * The ELF specs are ambiguous about treatment of weak definitions in + * dynamic linking. Some systems return the first definition found + * and some the first non-weak definition. This is system dependent. + * Here we return the first definition found for simplicity. */ + if (s == nullptr) { s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { *lsi = si; - goto done; - } - - /* - * If this object was built with -Bsymbolic and symbol is not found - * in the local scope, try to find the symbol in the main executable. - */ - - if (si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s after local scope", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); - if (s != nullptr) { - *lsi = somain; - goto done; - } - - /* Next, look for it in the preloads list */ - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != NULL) { - *lsi = g_ld_preloads[i]; - goto done; - } - } } } } - si->get_children().visit([&](soinfo* child) { - DEBUG("%s: looking up %s in %s", si->name, name, child->name); - s = soinfo_elf_lookup(child, elf_hash, name); - if (s != nullptr) { - *lsi = child; - return false; - } - return true; - }); + if (s == nullptr) { + si->get_children().visit([&](soinfo* child) { + DEBUG("%s: looking up %s in %s", si->name, name, child->name); + s = soinfo_elf_lookup(child, elf_hash, name); + if (s != nullptr) { + *lsi = child; + return false; + } + return true; + }); + } -done: if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", si->name, name, reinterpret_cast(s->st_value), (*lsi)->name, reinterpret_cast((*lsi)->base), reinterpret_cast((*lsi)->load_bias)); - return s; } - return nullptr; + return s; } // Each size has it's own allocator. @@ -2042,7 +1990,7 @@ bool soinfo::PrelinkImage() { break; #endif case DT_SYMBOLIC: - has_DT_SYMBOLIC = true; + // ignored break; case DT_NEEDED: ++needed_count; @@ -2056,9 +2004,6 @@ bool soinfo::PrelinkImage() { has_text_relocations = true; #endif } - if (d->d_un.d_val & DF_SYMBOLIC) { - has_DT_SYMBOLIC = true; - } break; #if defined(__mips__) case DT_STRSZ: @@ -2092,8 +2037,10 @@ bool soinfo::PrelinkImage() { #endif default: - DEBUG("Unused DT entry: type %p arg %p", - reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); + if (!relocating_linker) { + DL_WARN("%s: unused DT entry: type %p arg %p", name, + reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); + } break; } } diff --git a/linker/linker.h b/linker/linker.h index ef2fbcd6c..e39585006 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -197,7 +197,7 @@ struct soinfo { #if !defined(__LP64__) bool has_text_relocations; #endif - bool has_DT_SYMBOLIC; + bool unused4; // DO NOT USE, maintained for compatibility soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags); From 634a045c5c2ca1df35f582ed24bb3af0dc1d7151 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 16 Sep 2014 15:51:25 -0700 Subject: [PATCH 070/194] Fix some unused DT_ warnings * DT_PLTGOT - ignored for non-mips * DT_RELCOUNT/RELACOUNT - ignored * DT_RELENT/RELAENT - sanity checks * DT_SYMENT - sanity check * DT_SONAME - ignore for now. Bug: 18186310 (cherry picked from commit 4a6e9a835a84aca965f0170f604381dae7f130be) Change-Id: Ib40095f0770d65628fc7abac5a471378de35ebe7 --- linker/linker.cpp | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 246475b4e..875335f6c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1875,6 +1875,10 @@ bool soinfo::PrelinkImage() { DEBUG("d = %p, d[0](tag) = %p d[1](val) = %p", d, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); switch (d->d_tag) { + case DT_SONAME: + // TODO: glibc dynamic linker uses this name for + // initial library lookup; consider doing the same here. + break; case DT_HASH: nbucket = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; nchain = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; @@ -1887,6 +1891,12 @@ bool soinfo::PrelinkImage() { case DT_SYMTAB: symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_SYMENT: + if (d->d_un.d_val != sizeof(ElfW(Sym))) { + DL_ERR("invalid DT_SYMENT: %d", d->d_un.d_val); + return false; + } + break; #if !defined(__LP64__) case DT_PLTREL: if (d->d_un.d_val != DT_REL) { @@ -1909,12 +1919,13 @@ bool soinfo::PrelinkImage() { plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); #endif break; -#if defined(__mips__) case DT_PLTGOT: +#if defined(__mips__) // Used by mips and mips64. plt_got = reinterpret_cast(load_bias + d->d_un.d_ptr); - break; #endif + // Ignore for other platforms... (because RTLD_LAZY is not supported) + break; case DT_DEBUG: // Set the DT_DEBUG entry to the address of _r_debug for GDB // if the dynamic table is writable @@ -1935,6 +1946,15 @@ bool soinfo::PrelinkImage() { case DT_RELASZ: rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); break; + case DT_RELAENT: + if (d->d_un.d_val != sizeof(ElfW(Rela))) { + DL_ERR("invalid DT_RELAENT: %d", d->d_un.d_val); + return false; + } + break; + case DT_RELACOUNT: + // ignored (see DT_RELCOUNT comments for details) + break; case DT_REL: DL_ERR("unsupported DT_REL in \"%s\"", name); return false; @@ -1948,6 +1968,19 @@ bool soinfo::PrelinkImage() { case DT_RELSZ: rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); break; + case DT_RELENT: + if (d->d_un.d_val != sizeof(ElfW(Rel))) { + DL_ERR("invalid DT_RELENT: %d", d->d_un.d_val); + return false; + } + break; + case DT_RELCOUNT: + // "Indicates that all RELATIVE relocations have been concatenated together, + // and specifies the RELATIVE relocation count." + // + // TODO: Spec also mentions that this can be used to optimize relocation process; + // Not currently used by bionic linker - ignored. + break; case DT_RELA: DL_ERR("unsupported DT_RELA in \"%s\"", name); return false; @@ -2007,8 +2040,6 @@ bool soinfo::PrelinkImage() { break; #if defined(__mips__) case DT_STRSZ: - case DT_SYMENT: - case DT_RELENT: break; case DT_MIPS_RLD_MAP: // Set the DT_MIPS_RLD_MAP entry to the address of _r_debug for GDB. From 09608848edf42fb999d08e59c8c81a62a79a6941 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 16 Sep 2014 23:34:20 -0700 Subject: [PATCH 071/194] Fix 64bit build Bug: 18186310 (cherry picked from commit f240aa8089ea1574a7d799720efb66528f6ceb99) Change-Id: Id46f1f9be90a17a58fb44d3540095c8c685c9726 --- linker/linker.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 875335f6c..f8974eb6c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1893,7 +1893,7 @@ bool soinfo::PrelinkImage() { break; case DT_SYMENT: if (d->d_un.d_val != sizeof(ElfW(Sym))) { - DL_ERR("invalid DT_SYMENT: %d", d->d_un.d_val); + DL_ERR("invalid DT_SYMENT: %zd", static_cast(d->d_un.d_val)); return false; } break; @@ -1948,7 +1948,7 @@ bool soinfo::PrelinkImage() { break; case DT_RELAENT: if (d->d_un.d_val != sizeof(ElfW(Rela))) { - DL_ERR("invalid DT_RELAENT: %d", d->d_un.d_val); + DL_ERR("invalid DT_RELAENT: %zd", static_cast(d->d_un.d_val)); return false; } break; @@ -1970,7 +1970,7 @@ bool soinfo::PrelinkImage() { break; case DT_RELENT: if (d->d_un.d_val != sizeof(ElfW(Rel))) { - DL_ERR("invalid DT_RELENT: %d", d->d_un.d_val); + DL_ERR("invalid DT_RELENT: %zd", static_cast(d->d_un.d_val)); return false; } break; From d5eb10875affb316c4dfc3b6ceb91df244518956 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Wed, 17 Sep 2014 16:46:40 -0700 Subject: [PATCH 072/194] Temporary disable DL_WARNs for unused DT_* Bug: 17552334 Bug: 18186310 (cherry picked from commit 1b77423eff21e916186fcb208f138e436e9f3052) Change-Id: I8a9d05195a862bc287fff7156913606f0311b8bb --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index f8974eb6c..c3178cba4 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2069,7 +2069,7 @@ bool soinfo::PrelinkImage() { default: if (!relocating_linker) { - DL_WARN("%s: unused DT entry: type %p arg %p", name, + DEBUG("%s: unused DT entry: type %p arg %p", name, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); } break; From 748fbe5c41d97433dc756a50812e1caf6a6ef727 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 22 Sep 2014 17:43:09 -0700 Subject: [PATCH 073/194] Fix a couple more cases of missing CLOEXEC. The debuggerd case can probably never happen, because you're crashing at this point anyway. The system property one seems possible though. Bug: 18186310 (cherry picked from commit 0dc39f9952c5e3a3121ea77357bb264ef0f8ded7) Change-Id: I3e84488fc246f6c28cbd82e96d0cd4343a12c28a --- libc/bionic/system_properties.cpp | 4 ++-- linker/debugger.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/bionic/system_properties.cpp b/libc/bionic/system_properties.cpp index a564c3939..0e16bf314 100644 --- a/libc/bionic/system_properties.cpp +++ b/libc/bionic/system_properties.cpp @@ -475,8 +475,8 @@ static const prop_info *find_property(prop_bt *const trie, const char *name, static int send_prop_msg(const prop_msg *msg) { - const int fd = socket(AF_LOCAL, SOCK_STREAM, 0); - if (fd < 0) { + const int fd = socket(AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (fd == -1) { return -1; } diff --git a/linker/debugger.cpp b/linker/debugger.cpp index 6565985b5..ac466a5b4 100644 --- a/linker/debugger.cpp +++ b/linker/debugger.cpp @@ -215,7 +215,7 @@ static void send_debuggerd_packet(siginfo_t* info) { return; } - int s = socket_abstract_client(DEBUGGER_SOCKET_NAME, SOCK_STREAM); + int s = socket_abstract_client(DEBUGGER_SOCKET_NAME, SOCK_STREAM | SOCK_CLOEXEC); if (s == -1) { __libc_format_log(ANDROID_LOG_FATAL, "libc", "Unable to open connection to debuggerd: %s", strerror(errno)); From f90e21004e57e46b49c3338781eb3d58cc4bb517 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 29 Sep 2014 12:10:36 -0700 Subject: [PATCH 074/194] Return has_DT_SYMBOLIC flag. This reverts commit 8f61d991831f0ea515fa50a5c38dbbcfbab0dd28 Despite the fact that static linker does all the work while linking -Bsymbolic executables, according to the SCO doc following DT_SYMBOLIC and DF_SYMBOLIC flags is still a requirement for the dynamic linker as well. (see http://www.sco.com/developers/gabi/2012-12-31/ch5.dynamic.html) Bug: 18186310 (cherry picked from commit 96bc37f2e1093416a432135265fd7a4db6c3df17) Change-Id: Ie217be4f3305d877066e4cfe91975ae1c7768330 --- linker/linker.cpp | 68 ++++++++++++++++++++++++++++++++--------------- linker/linker.h | 2 +- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index c3178cba4..30731090c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -486,14 +486,34 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; - if (somain != nullptr) { - DEBUG("%s: looking up %s in executable %s", - si->name, name, somain->name); - - // 1. Look for it in the main executable - s = soinfo_elf_lookup(somain, elf_hash, name); + /* "This element's presence in a shared object library alters the dynamic linker's + * symbol resolution algorithm for references within the library. Instead of starting + * a symbol search with the executable file, the dynamic linker starts from the shared + * object itself. If the shared object fails to supply the referenced symbol, the + * dynamic linker then searches the executable file and other shared objects as usual." + * + * http://www.sco.com/developers/gabi/2012-12-31/ch5.dynamic.html + * + * Note that this is unlikely since static linker avoids generating + * relocations for -Bsymbolic linked dynamic executables. + */ + if (si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si->name, name); + s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { - *lsi = somain; + *lsi = si; + } + } + + if (s == nullptr && somain != nullptr) { + // 1. Look for it in the main executable unless we already did. + if (si != somain || !si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in executable %s", + si->name, name, somain->name); + s = soinfo_elf_lookup(somain, elf_hash, name); + if (s != nullptr) { + *lsi = somain; + } } // 2. Look for it in the ld_preloads @@ -506,22 +526,23 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { } } } + } - /* Look for symbols in the local scope (the object who is - * searching). This happens with C++ templates on x86 for some - * reason. - * - * Notes on weak symbols: - * The ELF specs are ambiguous about treatment of weak definitions in - * dynamic linking. Some systems return the first definition found - * and some the first non-weak definition. This is system dependent. - * Here we return the first definition found for simplicity. */ + /* Look for symbols in the local scope (the object who is + * searching). This happens with C++ templates on x86 for some + * reason. + * + * Notes on weak symbols: + * The ELF specs are ambiguous about treatment of weak definitions in + * dynamic linking. Some systems return the first definition found + * and some the first non-weak definition. This is system dependent. + * Here we return the first definition found for simplicity. */ - if (s == nullptr) { - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - } + if (s == nullptr && !si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope", si->name, name); + s = soinfo_elf_lookup(si, elf_hash, name); + if (s != nullptr) { + *lsi = si; } } @@ -2023,7 +2044,7 @@ bool soinfo::PrelinkImage() { break; #endif case DT_SYMBOLIC: - // ignored + has_DT_SYMBOLIC = true; break; case DT_NEEDED: ++needed_count; @@ -2037,6 +2058,9 @@ bool soinfo::PrelinkImage() { has_text_relocations = true; #endif } + if (d->d_un.d_val & DF_SYMBOLIC) { + has_DT_SYMBOLIC = true; + } break; #if defined(__mips__) case DT_STRSZ: diff --git a/linker/linker.h b/linker/linker.h index e39585006..ef2fbcd6c 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -197,7 +197,7 @@ struct soinfo { #if !defined(__LP64__) bool has_text_relocations; #endif - bool unused4; // DO NOT USE, maintained for compatibility + bool has_DT_SYMBOLIC; soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags); From 0f47d9c1ce3e75709f9d6ecb6b540bb518ee323a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 29 Sep 2014 19:14:45 -0700 Subject: [PATCH 075/194] Fix unused DT entry warnings. DT_STRSZ Implement strtab boundary checks DT_FLAGS_1 Warn if flags other than DF_1_NOW|DF_1_GLOBAL are set Bug: 17552334 Bug: 18186310 (cherry picked from commit 6cdeb5234d7f4523fe9d83974f265d80f10512a6) Change-Id: I7ffc7bc600798308a77ad949a644949b64250ae2 --- libc/include/elf.h | 29 +++++++++++++++++++++++++++++ linker/dlfcn.cpp | 3 ++- linker/linker.cpp | 34 +++++++++++++++++++++++++++------- linker/linker.h | 9 ++++++++- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/libc/include/elf.h b/libc/include/elf.h index 7a9485aea..7de464e0f 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -54,6 +54,35 @@ typedef struct { #define DF_BIND_NOW 0x00000008 #define DF_STATIC_TLS 0x00000010 +#define DF_1_NOW 0x00000001 // Perform complete relocation processing. +#define DF_1_GLOBAL 0x00000002 // implies RTLD_GLOBAL +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 // implies RTLD_NODELETE +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 // Object can not be used with dlopen(3) +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 // Object cannot be dumped with dldump(3) +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 // Internal use +#define DF_1_NOKSYMS 0x00080000 // Internal use +#define DF_1_NOHDR 0x00100000 // Internal use +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 // Internal use +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 +#define DF_1_STUB 0x04000000 +#define DF_1_PIE 0x08000000 + #define DT_BIND_NOW 24 #define DT_INIT_ARRAY 25 #define DT_FINI_ARRAY 26 diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index c02bfb89a..367179d8d 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -147,7 +147,7 @@ int dladdr(const void* addr, Dl_info* info) { // Determine if any symbol in the library contains the specified address. ElfW(Sym)* sym = dladdr_find_symbol(si, addr); if (sym != nullptr) { - info->dli_sname = si->strtab + sym->st_name; + info->dli_sname = si->get_string(sym->st_name); info->dli_saddr = reinterpret_cast(si->resolve_symbol_address(sym)); } @@ -245,6 +245,7 @@ soinfo* get_libdl_info() { __libdl_info.bucket = g_libdl_buckets; __libdl_info.chain = g_libdl_chains; __libdl_info.ref_count = 1; + __libdl_info.strtab_size = sizeof(ANDROID_LIBDL_STRTAB); } return &__libdl_info; diff --git a/linker/linker.cpp b/linker/linker.cpp index 30731090c..9e26cf840 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -417,14 +417,13 @@ int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) { ElfW(Sym)* symtab = si->symtab; - const char* strtab = si->strtab; TRACE_TYPE(LOOKUP, "SEARCH %s in %s@%p %x %zd", name, si->name, reinterpret_cast(si->base), hash, hash % si->nbucket); for (unsigned n = si->bucket[hash % si->nbucket]; n != 0; n = si->chain[n]) { ElfW(Sym)* s = symtab + n; - if (strcmp(strtab + s->st_name, name)) continue; + if (strcmp(si->get_string(s->st_name), name)) continue; // only concern ourselves with global and weak symbol definitions switch (ELF_ST_BIND(s->st_info)) { @@ -776,7 +775,7 @@ template static void for_each_dt_needed(const soinfo* si, F action) { for (ElfW(Dyn)* d = si->dynamic; d->d_tag != DT_NULL; ++d) { if (d->d_tag == DT_NEEDED) { - action(si->strtab + d->d_un.d_val); + action(si->get_string(d->d_un.d_val)); } } } @@ -1103,7 +1102,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { soinfo* lsi = nullptr; if (sym != 0) { - sym_name = reinterpret_cast(strtab + symtab[sym].st_name); + sym_name = get_string(symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... @@ -1381,7 +1380,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { soinfo* lsi = nullptr; if (sym != 0) { - sym_name = reinterpret_cast(strtab + symtab[sym].st_name); + sym_name = get_string(symtab[sym].st_name); s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... @@ -1599,7 +1598,7 @@ static bool mips_relocate_got(soinfo* si) { got = si->plt_got + local_gotno; for (size_t g = gotsym; g < symtabno; g++, sym++, got++) { // This is an undefined reference... try to locate it. - const char* sym_name = si->strtab + sym->st_name; + const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { @@ -1801,6 +1800,14 @@ ElfW(Addr) soinfo::resolve_symbol_address(ElfW(Sym)* s) { return static_cast(s->st_value + load_bias); } +const char* soinfo::get_string(ElfW(Word) index) const { + if (has_min_version(1) && (index >= strtab_size)) { + __libc_fatal("%s: strtab out of bounds error; STRSZ=%zd, name=%d", name, strtab_size, index); + } + + return strtab + index; +} + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -1909,6 +1916,9 @@ bool soinfo::PrelinkImage() { case DT_STRTAB: strtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_STRSZ: + strtab_size = d->d_un.d_val; + break; case DT_SYMTAB: symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; @@ -2062,6 +2072,16 @@ bool soinfo::PrelinkImage() { has_DT_SYMBOLIC = true; } break; + case DT_FLAGS_1: + if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { + rtld_flags |= RTLD_GLOBAL; + } + // TODO: Implement other flags + + if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL)) != 0) { + DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); + } + break; #if defined(__mips__) case DT_STRSZ: break; @@ -2093,7 +2113,7 @@ bool soinfo::PrelinkImage() { default: if (!relocating_linker) { - DEBUG("%s: unused DT entry: type %p arg %p", name, + DL_WARN("%s: unused DT entry: type %p arg %p", name, reinterpret_cast(d->d_tag), reinterpret_cast(d->d_un.d_val)); } break; diff --git a/linker/linker.h b/linker/linker.h index ef2fbcd6c..6329efda6 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -136,7 +136,9 @@ struct soinfo { soinfo* next; unsigned flags; + private: const char* strtab; + public: ElfW(Sym)* symtab; size_t nbucket; @@ -221,7 +223,9 @@ struct soinfo { ElfW(Addr) resolve_symbol_address(ElfW(Sym)* s); - bool inline has_min_version(uint32_t min_version) { + const char* get_string(ElfW(Word) index) const; + + bool inline has_min_version(uint32_t min_version) const { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; } private: @@ -249,6 +253,9 @@ struct soinfo { // version >= 1 off64_t file_offset; int rtld_flags; + size_t strtab_size; + + friend soinfo* get_libdl_info(); }; extern soinfo* get_libdl_info(); From 210ff1b27b67bd2aa29b35a46f48430b7714a802 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 30 Sep 2014 16:30:22 -0700 Subject: [PATCH 076/194] Fix mips build Bug: 18186310 (cherry picked from commit ecf532fa1cfe91ca946243c11ef154c602870ba6) Change-Id: Ia12f2fa28c8cd3204eb7d6b4c7d872f4e81fb8ef --- linker/linker.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 9e26cf840..d918bb56e 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2083,8 +2083,6 @@ bool soinfo::PrelinkImage() { } break; #if defined(__mips__) - case DT_STRSZ: - break; case DT_MIPS_RLD_MAP: // Set the DT_MIPS_RLD_MAP entry to the address of _r_debug for GDB. { From c87f65d2cd0690d81665f8b241c1d763f72b6f80 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 19 May 2014 15:06:58 -0700 Subject: [PATCH 077/194] Add RTLD_NODELETE flag support Bug: 18186310 Bug: https://code.google.com/p/android/issues/detail?id=64069 (cherry picked from commit 1b20dafdbe65e43b9f4c95057e8482380833ea91) Change-Id: Ic02eec22a7c322ece65eb40730a3404f611526b1 --- libc/include/dlfcn.h | 1 + linker/linker.cpp | 16 ++++- linker/linker.h | 18 ++--- tests/dlfcn_test.cpp | 80 +++++++++++++++++++++++ tests/libs/Android.mk | 29 ++++++++ tests/libs/dlopen_nodelete_1.cpp | 31 +++++++++ tests/libs/dlopen_nodelete_2.cpp | 31 +++++++++ tests/libs/dlopen_nodelete_dt_flags_1.cpp | 30 +++++++++ 8 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 tests/libs/dlopen_nodelete_1.cpp create mode 100644 tests/libs/dlopen_nodelete_2.cpp create mode 100644 tests/libs/dlopen_nodelete_dt_flags_1.cpp diff --git a/libc/include/dlfcn.h b/libc/include/dlfcn.h index 8dde08cf5..afa76878f 100644 --- a/libc/include/dlfcn.h +++ b/libc/include/dlfcn.h @@ -64,6 +64,7 @@ enum { RTLD_GLOBAL = 2, #endif RTLD_NOLOAD = 4, + RTLD_NODELETE = 0x01000, }; #if defined (__LP64__) diff --git a/linker/linker.cpp b/linker/linker.cpp index d918bb56e..7b27cd79e 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -987,6 +987,11 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex } static void soinfo_unload(soinfo* si) { + if (!si->can_unload()) { + TRACE("not unloading '%s' - the binary is flagged with NODELETE", si->name); + return; + } + if (si->ref_count == 1) { TRACE("unloading '%s'", si->name); si->CallDestructors(); @@ -1045,7 +1050,7 @@ void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) { } soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { - if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NOLOAD)) != 0) { + if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NODELETE|RTLD_NOLOAD)) != 0) { DL_ERR("invalid flags to dlopen: %x", flags); return nullptr; } @@ -1808,6 +1813,9 @@ const char* soinfo::get_string(ElfW(Word) index) const { return strtab + index; } +bool soinfo::can_unload() const { + return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; +} /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2076,9 +2084,13 @@ bool soinfo::PrelinkImage() { if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { rtld_flags |= RTLD_GLOBAL; } + + if ((d->d_un.d_val & DF_1_NODELETE) != 0) { + rtld_flags |= RTLD_NODELETE; + } // TODO: Implement other flags - if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL)) != 0) { + if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; diff --git a/linker/linker.h b/linker/linker.h index 6329efda6..ebb4793af 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -134,7 +134,7 @@ struct soinfo { #endif soinfo* next; - unsigned flags; + uint32_t flags; private: const char* strtab; @@ -143,8 +143,8 @@ struct soinfo { size_t nbucket; size_t nchain; - unsigned* bucket; - unsigned* chain; + uint32_t* bucket; + uint32_t* chain; #if defined(__mips__) || !defined(__LP64__) // This is only used by mips and mips64, but needs to be here for @@ -179,12 +179,12 @@ struct soinfo { #if defined(__arm__) // ARM EABI section used for stack unwinding. - unsigned* ARM_exidx; + uint32_t* ARM_exidx; size_t ARM_exidx_count; #elif defined(__mips__) - unsigned mips_symtabno; - unsigned mips_local_gotno; - unsigned mips_gotsym; + uint32_t mips_symtabno; + uint32_t mips_local_gotno; + uint32_t mips_gotsym; #endif size_t ref_count; @@ -224,10 +224,12 @@ struct soinfo { ElfW(Addr) resolve_symbol_address(ElfW(Sym)* s); const char* get_string(ElfW(Word) index) const; + bool can_unload() const; bool inline has_min_version(uint32_t min_version) const { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; } + private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); @@ -258,7 +260,7 @@ struct soinfo { friend soinfo* get_libdl_info(); }; -extern soinfo* get_libdl_info(); +soinfo* get_libdl_info(); void do_android_get_LD_LIBRARY_PATH(char*, size_t); void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index a55b36420..e7787b4a4 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -232,10 +232,15 @@ TEST(dlfcn, dlopen_check_rtld_global) { ASSERT_TRUE(sym == nullptr); void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym != nullptr) << dlerror(); ASSERT_TRUE(reinterpret_cast(sym)()); dlclose(handle); + + // RTLD_GLOBAL implies RTLD_NODELETE, let's check that + void* sym_after_dlclose = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_EQ(sym, sym_after_dlclose); } // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> @@ -258,6 +263,81 @@ TEST(dlfcn, dlopen_check_loop) { ASSERT_STREQ("dlopen failed: library \"libtest_with_dependency_loop.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); } +TEST(dlfcn, dlopen_nodelete) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_1.so", RTLD_NOW | RTLD_NODELETE); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); + ASSERT_EQ(1729U, *taxicab_number); + *taxicab_number = 2; + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); + + uint32_t* taxicab_number_after_dlclose = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_EQ(taxicab_number_after_dlclose, taxicab_number); + ASSERT_EQ(2U, *taxicab_number_after_dlclose); + + + handle = dlopen("libtest_nodelete_1.so", RTLD_NOW); + uint32_t* taxicab_number2 = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_EQ(taxicab_number2, taxicab_number); + + ASSERT_EQ(2U, *taxicab_number2); + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); +} + +TEST(dlfcn, dlopen_nodelete_on_second_dlopen) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_2.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_taxicab_number")); + ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); + + ASSERT_EQ(1729U, *taxicab_number); + *taxicab_number = 2; + + // This RTLD_NODELETE should be ignored + void* handle1 = dlopen("libtest_nodelete_2.so", RTLD_NOW | RTLD_NODELETE); + ASSERT_TRUE(handle1 != nullptr) << dlerror(); + ASSERT_EQ(handle, handle1); + + dlclose(handle1); + dlclose(handle); + + ASSERT_TRUE(is_unloaded); +} + +TEST(dlfcn, dlopen_nodelete_dt_flags_1) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_dt_flags_1.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_dt_flags_1_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); +} + + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index ee97c618a..b7335d59e 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -112,6 +112,35 @@ build_type := target build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_1_src_files := \ + dlopen_nodelete_1.cpp + +module := libtest_nodelete_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_2_src_files := \ + dlopen_nodelete_2.cpp + +module := libtest_nodelete_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_dt_flags_1_src_files := \ + dlopen_nodelete_dt_flags_1.cpp + +libtest_nodelete_dt_flags_1_ldflags := -Wl,-z,nodelete + +module := libtest_nodelete_dt_flags_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + # ----------------------------------------------------------------------------- # Libraries used by dlfcn tests to verify correct load order: # libtest_check_order_2_right.so diff --git a/tests/libs/dlopen_nodelete_1.cpp b/tests/libs/dlopen_nodelete_1.cpp new file mode 100644 index 000000000..943897815 --- /dev/null +++ b/tests/libs/dlopen_nodelete_1.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +uint32_t dlopen_nodelete_1_taxicab_number = 1729; +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_1_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} diff --git a/tests/libs/dlopen_nodelete_2.cpp b/tests/libs/dlopen_nodelete_2.cpp new file mode 100644 index 000000000..b5ab5c1ae --- /dev/null +++ b/tests/libs/dlopen_nodelete_2.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +uint32_t dlopen_nodelete_2_taxicab_number = 1729; +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_2_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} diff --git a/tests/libs/dlopen_nodelete_dt_flags_1.cpp b/tests/libs/dlopen_nodelete_dt_flags_1.cpp new file mode 100644 index 000000000..39c0a7ea6 --- /dev/null +++ b/tests/libs/dlopen_nodelete_dt_flags_1.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_dt_flags_1_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} From 1d3e81a9e7795a320406cd903ef1767072ae122e Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 6 Oct 2014 11:30:43 -0700 Subject: [PATCH 078/194] Resolve "unused DT entry" warnings for x86_64 Bug: 18186310 (cherry picked from commit 513e29e16f16a6ffa1636ba282d599fd6b437aeb) Change-Id: I1e4c5af2cdc09dc978c7a78fcdcf8796c919751e --- linker/linker.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 7b27cd79e..d2bf4e570 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1936,14 +1936,19 @@ bool soinfo::PrelinkImage() { return false; } break; -#if !defined(__LP64__) case DT_PLTREL: - if (d->d_un.d_val != DT_REL) { - DL_ERR("unsupported DT_RELA in \"%s\"", name); +#if defined(USE_RELA) + if (d->d_un.d_val != DT_RELA) { + DL_ERR("unsupported DT_PLTREL in \"%s\"; expected DT_RELA", name); + return false; + } +#else + if (d->d_un.d_val != DT_REL) { + DL_ERR("unsupported DT_PLTREL in \"%s\"; expected DT_REL", name); return false; } - break; #endif + break; case DT_JMPREL: #if defined(USE_RELA) plt_rela = reinterpret_cast(load_bias + d->d_un.d_ptr); @@ -2120,6 +2125,11 @@ bool soinfo::PrelinkImage() { mips_gotsym = d->d_un.d_val; break; #endif + case DT_VERSYM: + case DT_VERDEF: + case DT_VERDEFNUM: + // Ignore: bionic does not support symbol versioning... + break; default: if (!relocating_linker) { From e4bc6f026a10648756da031b5d765c78c9e70864 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Wed, 15 Oct 2014 14:59:01 -0700 Subject: [PATCH 079/194] Ignore DT_BIND_NOW (0x18) Bug: 18186310 Bug: 17552334 (cherry picked from commit ea6eae182ad64312f80b9adddac511d8938e23e7) Change-Id: I07d6f6fbb462fea329581d0da02f6d88be1c262f --- linker/linker.cpp | 49 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index d2bf4e570..41557e231 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1915,27 +1915,33 @@ bool soinfo::PrelinkImage() { // TODO: glibc dynamic linker uses this name for // initial library lookup; consider doing the same here. break; + case DT_HASH: nbucket = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; nchain = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; bucket = reinterpret_cast(load_bias + d->d_un.d_ptr + 8); chain = reinterpret_cast(load_bias + d->d_un.d_ptr + 8 + nbucket * 4); break; + case DT_STRTAB: strtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_STRSZ: strtab_size = d->d_un.d_val; break; + case DT_SYMTAB: symtab = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_SYMENT: if (d->d_un.d_val != sizeof(ElfW(Sym))) { DL_ERR("invalid DT_SYMENT: %zd", static_cast(d->d_un.d_val)); return false; } break; + case DT_PLTREL: #if defined(USE_RELA) if (d->d_un.d_val != DT_RELA) { @@ -1949,6 +1955,7 @@ bool soinfo::PrelinkImage() { } #endif break; + case DT_JMPREL: #if defined(USE_RELA) plt_rela = reinterpret_cast(load_bias + d->d_un.d_ptr); @@ -1956,6 +1963,7 @@ bool soinfo::PrelinkImage() { plt_rel = reinterpret_cast(load_bias + d->d_un.d_ptr); #endif break; + case DT_PLTRELSZ: #if defined(USE_RELA) plt_rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); @@ -1963,6 +1971,7 @@ bool soinfo::PrelinkImage() { plt_rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); #endif break; + case DT_PLTGOT: #if defined(__mips__) // Used by mips and mips64. @@ -1970,6 +1979,7 @@ bool soinfo::PrelinkImage() { #endif // Ignore for other platforms... (because RTLD_LAZY is not supported) break; + case DT_DEBUG: // Set the DT_DEBUG entry to the address of _r_debug for GDB // if the dynamic table is writable @@ -1987,21 +1997,26 @@ bool soinfo::PrelinkImage() { case DT_RELA: rela = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_RELASZ: rela_count = d->d_un.d_val / sizeof(ElfW(Rela)); break; + case DT_RELAENT: if (d->d_un.d_val != sizeof(ElfW(Rela))) { DL_ERR("invalid DT_RELAENT: %zd", static_cast(d->d_un.d_val)); return false; } break; + + // ignored (see DT_RELCOUNT comments for details) case DT_RELACOUNT: - // ignored (see DT_RELCOUNT comments for details) break; + case DT_REL: DL_ERR("unsupported DT_REL in \"%s\"", name); return false; + case DT_RELSZ: DL_ERR("unsupported DT_RELSZ in \"%s\"", name); return false; @@ -2009,21 +2024,24 @@ bool soinfo::PrelinkImage() { case DT_REL: rel = reinterpret_cast(load_bias + d->d_un.d_ptr); break; + case DT_RELSZ: rel_count = d->d_un.d_val / sizeof(ElfW(Rel)); break; + case DT_RELENT: if (d->d_un.d_val != sizeof(ElfW(Rel))) { DL_ERR("invalid DT_RELENT: %zd", static_cast(d->d_un.d_val)); return false; } break; + + // "Indicates that all RELATIVE relocations have been concatenated together, + // and specifies the RELATIVE relocation count." + // + // TODO: Spec also mentions that this can be used to optimize relocation process; + // Not currently used by bionic linker - ignored. case DT_RELCOUNT: - // "Indicates that all RELATIVE relocations have been concatenated together, - // and specifies the RELATIVE relocation count." - // - // TODO: Spec also mentions that this can be used to optimize relocation process; - // Not currently used by bionic linker - ignored. break; case DT_RELA: DL_ERR("unsupported DT_RELA in \"%s\"", name); @@ -2033,31 +2051,39 @@ bool soinfo::PrelinkImage() { init_func = reinterpret_cast(load_bias + d->d_un.d_ptr); DEBUG("%s constructors (DT_INIT) found at %p", name, init_func); break; + case DT_FINI: fini_func = reinterpret_cast(load_bias + d->d_un.d_ptr); DEBUG("%s destructors (DT_FINI) found at %p", name, fini_func); break; + case DT_INIT_ARRAY: init_array = reinterpret_cast(load_bias + d->d_un.d_ptr); DEBUG("%s constructors (DT_INIT_ARRAY) found at %p", name, init_array); break; + case DT_INIT_ARRAYSZ: init_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; + case DT_FINI_ARRAY: fini_array = reinterpret_cast(load_bias + d->d_un.d_ptr); DEBUG("%s destructors (DT_FINI_ARRAY) found at %p", name, fini_array); break; + case DT_FINI_ARRAYSZ: fini_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; + case DT_PREINIT_ARRAY: preinit_array = reinterpret_cast(load_bias + d->d_un.d_ptr); DEBUG("%s constructors (DT_PREINIT_ARRAY) found at %p", name, preinit_array); break; + case DT_PREINIT_ARRAYSZ: preinit_array_count = ((unsigned)d->d_un.d_val) / sizeof(ElfW(Addr)); break; + case DT_TEXTREL: #if defined(__LP64__) DL_ERR("text relocations (DT_TEXTREL) found in 64-bit ELF file \"%s\"", name); @@ -2066,12 +2092,15 @@ bool soinfo::PrelinkImage() { has_text_relocations = true; break; #endif + case DT_SYMBOLIC: has_DT_SYMBOLIC = true; break; + case DT_NEEDED: ++needed_count; break; + case DT_FLAGS: if (d->d_un.d_val & DF_TEXTREL) { #if defined(__LP64__) @@ -2085,6 +2114,7 @@ bool soinfo::PrelinkImage() { has_DT_SYMBOLIC = true; } break; + case DT_FLAGS_1: if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { rtld_flags |= RTLD_GLOBAL; @@ -2107,6 +2137,7 @@ bool soinfo::PrelinkImage() { *dp = &_r_debug; } break; + case DT_MIPS_RLD_VERSION: case DT_MIPS_FLAGS: case DT_MIPS_BASE_ADDRESS: @@ -2125,10 +2156,14 @@ bool soinfo::PrelinkImage() { mips_gotsym = d->d_un.d_val; break; #endif + // Ignored: "Its use has been superseded by the DF_BIND_NOW flag" + case DT_BIND_NOW: + break; + + // Ignore: bionic does not support symbol versioning... case DT_VERSYM: case DT_VERDEF: case DT_VERDEFNUM: - // Ignore: bionic does not support symbol versioning... break; default: From 382e06ce8eab506276aaad39da3fbd533ef898d2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 30 Oct 2014 23:42:45 -0700 Subject: [PATCH 080/194] Add dlfcn_test to glibc test suite. Bug: 18186310 (cherry picked from commit eb27bbae8f0edc6b62ca2db73256c7fb53b9e9bf) Change-Id: I1d608dfa12dbafbdcdb8bc6d818c5872404c19e0 --- tests/Android.mk | 5 ++ tests/dlfcn_test.cpp | 11 ++- tests/libs/Android.build.testlib.mk | 22 +++++ tests/libs/Android.mk | 121 ++++++++++----------------- tests/libs/dlopen_testlib_simple.cpp | 1 + 5 files changed, 81 insertions(+), 79 deletions(-) create mode 100644 tests/libs/Android.build.testlib.mk diff --git a/tests/Android.mk b/tests/Android.mk index 407f21bc5..f20eb7d82 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -283,6 +283,7 @@ ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x bionic-unit-tests-glibc_src_files := \ atexit_test.cpp \ + dlfcn_test.cpp \ bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ @@ -290,8 +291,12 @@ bionic-unit-tests-glibc_whole_static_libraries := \ bionic-unit-tests-glibc_ldlibs := \ -lrt -ldl \ +bionic-unit-tests-glibc_c_includes := \ + bionic/libc \ + bionic-unit-tests-glibc_cflags := $(test_cflags) bionic-unit-tests-glibc_cppflags := $(test_cppflags) +bionic-unit-tests-glibc_ldflags := -Wl,--export-dynamic module := bionic-unit-tests-glibc module_tag := optional diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index e7787b4a4..f1ec0f131 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -188,14 +188,14 @@ TEST(dlfcn, dlopen_check_order) { // get_answer2() is defined in (b, d) void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); ASSERT_TRUE(sym == nullptr); - void* handle = dlopen("libtest_check_order.so", RTLD_NOW); + void* handle = dlopen("libtest_check_order.so", RTLD_NOW | RTLD_GLOBAL); ASSERT_TRUE(handle != nullptr); typedef int (*fn_t) (void); fn_t fn, fn2; fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); - ASSERT_TRUE(fn != NULL); + ASSERT_TRUE(fn != NULL) << dlerror(); fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); - ASSERT_TRUE(fn2 != NULL); + ASSERT_TRUE(fn2 != NULL) << dlerror(); ASSERT_EQ(42, fn()); ASSERT_EQ(43, fn2()); @@ -248,6 +248,7 @@ TEST(dlfcn, dlopen_check_rtld_global) { // libtest_with_dependency_loop_a.so TEST(dlfcn, dlopen_check_loop) { void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); +#if defined(__BIONIC__) ASSERT_TRUE(handle == nullptr); ASSERT_STREQ("dlopen failed: recursive link to \"libtest_with_dependency_loop_a.so\"", dlerror()); // This symbol should never be exposed @@ -261,6 +262,10 @@ TEST(dlfcn, dlopen_check_loop) { handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW | RTLD_NOLOAD); ASSERT_TRUE(handle == nullptr); ASSERT_STREQ("dlopen failed: library \"libtest_with_dependency_loop.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#else // glibc allows recursive links + ASSERT_TRUE(handle != nullptr); + dlclose(handle); +#endif } TEST(dlfcn, dlopen_nodelete) { diff --git a/tests/libs/Android.build.testlib.mk b/tests/libs/Android.build.testlib.mk new file mode 100644 index 000000000..5b688e4d9 --- /dev/null +++ b/tests/libs/Android.build.testlib.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +build_target := SHARED_LIBRARY +build_type := host +include $(TEST_PATH)/Android.build.mk +build_type := target +include $(TEST_PATH)/Android.build.mk + diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index b7335d59e..8746ff298 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -29,9 +29,7 @@ no-elf-hash-table-library_ldflags := \ module := no-elf-hash-table-library module_tag := optional -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk endif # ----------------------------------------------------------------------------- @@ -45,15 +43,13 @@ libdlext_test_ldflags := \ module := libdlext_test module_tag := optional -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # create symlink to libdlext_test.so for symlink test # ----------------------------------------------------------------------------- # Use = instead of := to defer the evaluation of $@ -$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD = \ +$(TARGET_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so ifneq ($(TARGET_2ND_ARCH),) @@ -62,6 +58,13 @@ $(TARGET_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so endif +# host symlinks +$(HOST_OUT)/lib64/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ + $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so + +$(HOST_OUT)/lib/libdlext_test.so: PRIVATE_POST_INSTALL_CMD = \ + $(hide) cd $(dir $@) && ln -sf $(notdir $@) libdlext_test_v2.so + # ----------------------------------------------------------------------------- # Library used by dlext tests - without GNU RELRO program header # ----------------------------------------------------------------------------- @@ -108,9 +111,7 @@ libtest_simple_src_files := \ dlopen_testlib_simple.cpp module := libtest_simple -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library used by dlfcn nodelete tests @@ -150,9 +151,7 @@ libtest_check_order_2_right_src_files := \ libtest_check_order_2_right_cflags := -D__ANSWER=42 module := libtest_check_order_2_right -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order_a.so @@ -162,9 +161,7 @@ libtest_check_order_a_src_files := \ libtest_check_order_a_cflags := -D__ANSWER=1 module := libtest_check_order_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order_b.so @@ -174,9 +171,7 @@ libtest_check_order_b_src_files := \ libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 module := libtest_check_order_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order_c.so @@ -186,9 +181,7 @@ libtest_check_order_3_c_src_files := \ libtest_check_order_3_c_cflags := -D__ANSWER=3 module := libtest_check_order_3_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order_d.so @@ -199,9 +192,7 @@ libtest_check_order_d_src_files := \ libtest_check_order_d_shared_libraries := libtest_check_order_b libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 module := libtest_check_order_d -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order_left.so @@ -212,9 +203,7 @@ libtest_check_order_1_left_src_files := \ libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b module := libtest_check_order_1_left -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_check_order.so @@ -226,9 +215,7 @@ libtest_check_order_shared_libraries := libtest_check_order_1_left \ libtest_check_order_2_right libtest_check_order_3_c module := libtest_check_order -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library with dependency loop used by dlfcn tests @@ -241,9 +228,7 @@ libtest_with_dependency_loop_shared_libraries := \ libtest_with_dependency_loop_a module := libtest_with_dependency_loop -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_a.so @@ -254,9 +239,7 @@ libtest_with_dependency_loop_a_shared_libraries := \ libtest_with_dependency_loop_b_tmp module := libtest_with_dependency_loop_a -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_b.so @@ -267,9 +250,7 @@ libtest_with_dependency_loop_b_tmp_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_b_tmp_ldflags := -Wl,-soname=libtest_with_dependency_loop_b.so module := libtest_with_dependency_loop_b_tmp -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_b.so @@ -278,9 +259,7 @@ libtest_with_dependency_loop_b_src_files := dlopen_testlib_invalid.cpp libtest_with_dependency_loop_b_shared_libraries := libtest_with_dependency_loop_c module := libtest_with_dependency_loop_b -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_with_dependency_loop_c.so @@ -291,9 +270,7 @@ libtest_with_dependency_loop_c_shared_libraries := \ libtest_with_dependency_loop_a module := libtest_with_dependency_loop_c -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # libtest_relo_check_dt_needed_order.so @@ -308,15 +285,13 @@ libtest_relo_check_dt_needed_order_shared_libraries := \ libtest_relo_check_dt_needed_order_src_files := dlopen_testlib_relo_check_dt_needed_order.cpp libtest_relo_check_dt_needed_order_1_src_files := dlopen_testlib_relo_check_dt_needed_order_1.cpp libtest_relo_check_dt_needed_order_2_src_files := dlopen_testlib_relo_check_dt_needed_order_2.cpp -build_type := target -build_target := SHARED_LIBRARY module := libtest_relo_check_dt_needed_order -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk module := libtest_relo_check_dt_needed_order_1 -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk module := libtest_relo_check_dt_needed_order_2 -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library with dependency used by dlfcn tests @@ -327,22 +302,30 @@ libtest_with_dependency_src_files := \ libtest_with_dependency_shared_libraries := libdlext_test module := libtest_with_dependency -build_type := target -build_target := SHARED_LIBRARY -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library used by ifunc tests # ----------------------------------------------------------------------------- +libtest_ifunc_src_files := \ + dlopen_testlib_ifunc.c + +libtest_ifunc_clang_host := false +module := libtest_ifunc +build_target := SHARED_LIBRARY + +build_type := host +include $(TEST_PATH)/Android.build.mk + ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64)) - libtest_ifunc_src_files := \ - dlopen_testlib_ifunc.c + ifeq ($(TARGET_ARCH),arm64) + libtest_ifunc_multilib := 64 + # TODO: This is a workaround - remove it once gcc + # removes its Android ifunc checks + libtest_ifunc_cflags := -mglibc + endif - LOCAL_SDK_VERSION := current - module := libtest_ifunc build_type := target - build_target := SHARED_LIBRARY - include $(TEST_PATH)/Android.build.mk endif @@ -354,11 +337,7 @@ libtest_atexit_src_files := \ atexit_testlib.cpp module := libtest_atexit -build_target := SHARED_LIBRARY -build_type := target -include $(TEST_PATH)/Android.build.mk -build_type := host -include $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library with weak function @@ -367,14 +346,4 @@ libtest_dlsym_weak_func_src_files := \ dlsym_weak_function.cpp module := libtest_dlsym_weak_func -build_target := SHARED_LIBRARY -build_type := target -include $(TEST_PATH)/Android.build.mk -build_type := host -include $(TEST_PATH)/Android.build.mk - -LOCAL_ADDITIONAL_DEPENDENCIES := \ - $(LOCAL_PATH)/Android.mk \ - $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ - $(LOCAL_PATH)/Android.build.testlib.mk \ - $(TEST_PATH)/Android.build.mk +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/dlopen_testlib_simple.cpp b/tests/libs/dlopen_testlib_simple.cpp index 06253e1f4..32269557a 100644 --- a/tests/libs/dlopen_testlib_simple.cpp +++ b/tests/libs/dlopen_testlib_simple.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include uint32_t dlopen_testlib_taxicab_number = 1729; From 4d0c1f673f8a22f5415b9a879e4544f6bcfe419c Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 17 Oct 2014 11:47:18 -0700 Subject: [PATCH 081/194] Correct way to specify additional dependencies Previous one was not covering all the targets Bug: 17548097 Bug: 18186310 (cherry picked from commit 4a9e1937c56511aef579312bf39ab345f9179230) Change-Id: I2cd9e58893555d16cbfe291b2d1279621489d5ad --- tests/Android.build.mk | 1 + tests/Android.mk | 2 ++ tests/libs/Android.mk | 7 +++++++ 3 files changed, 10 insertions(+) diff --git a/tests/Android.build.mk b/tests/Android.build.mk index d54c851b2..63729dace 100644 --- a/tests/Android.build.mk +++ b/tests/Android.build.mk @@ -15,6 +15,7 @@ # include $(CLEAR_VARS) +LOCAL_ADDITIONAL_DEPENDENCIES := $(common_additional_dependencies) LOCAL_MODULE := $(module) LOCAL_MODULE_TAGS := $(module_tag) diff --git a/tests/Android.mk b/tests/Android.mk index f20eb7d82..8b0b0a0e0 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -28,6 +28,8 @@ else build_host := false endif +common_additional_dependencies := $(LOCAL_PATH)/Android.mk $(LOCAL_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # All standard tests. # ----------------------------------------------------------------------------- diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 8746ff298..175a63539 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -17,6 +17,13 @@ LOCAL_PATH := $(call my-dir) TEST_PATH := $(LOCAL_PATH)/.. +common_cppflags += -std=gnu++11 +common_additional_dependencies := \ + $(LOCAL_PATH)/Android.mk \ + $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ + $(LOCAL_PATH)/Android.build.testlib.mk \ + $(TEST_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # Library used by dlfcn tests. # ----------------------------------------------------------------------------- From fd2747bb585fc51b5ad56db09c0e9b66c7091a92 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 21 Oct 2014 09:23:18 -0700 Subject: [PATCH 082/194] Fix relocation to look for symbols in local group The local group is a sequence of libraries in default (breadth-first) order. It allows RTLD_LOCALLY loaded library to correctly relocate symbols within its group (see test-cases). Local group lookup is performed after main executable and ld_preloads. Bug: 2643900 Bug: 15432753 Bug: 18186310 (cherry picked from commit cfa97f172dc1b10d650fefbb6ccffd88ce72a5fb) Change-Id: I5fa8c673f929e4652c738912c7ae078d7ec286d2 --- linker/linked_list.h | 4 +- linker/linker.cpp | 193 +++++++++++------- linker/linker.h | 6 +- tests/dlfcn_test.cpp | 186 +++++++++++++++-- .../Android.build.dlopen_check_order_dlsym.mk | 90 ++++++++ ...lopen_check_order_reloc_main_executable.mk | 56 +++++ ...build.dlopen_check_order_reloc_siblings.mk | 133 ++++++++++++ tests/libs/Android.mk | 75 +------ ...pp => dlopen_check_order_dlsym_answer.cpp} | 4 +- .../libs/dlopen_check_order_reloc_answer.cpp | 23 +++ .../dlopen_check_order_reloc_answer_impl.cpp | 19 ++ ...dlopen_check_order_reloc_nephew_answer.cpp | 21 ++ .../dlopen_check_order_reloc_root_answer.cpp | 21 ++ ...pen_check_order_reloc_root_answer_impl.cpp | 19 ++ 14 files changed, 688 insertions(+), 162 deletions(-) create mode 100644 tests/libs/Android.build.dlopen_check_order_dlsym.mk create mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk create mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk rename tests/libs/{dlopen_testlib_answer.cpp => dlopen_check_order_dlsym_answer.cpp} (87%) create mode 100644 tests/libs/dlopen_check_order_reloc_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_answer_impl.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_nephew_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_root_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp diff --git a/linker/linked_list.h b/linker/linked_list.h index 4e62e208f..72a32b4ba 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -86,7 +86,7 @@ class LinkedList { } template - void for_each(F action) { + void for_each(F action) const { visit([&] (T* si) { action(si); return true; @@ -94,7 +94,7 @@ class LinkedList { } template - bool visit(F action) { + bool visit(F action) const { for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { if (!action(e->element)) { return false; diff --git a/linker/linker.cpp b/linker/linker.cpp index 41557e231..eb1a483ae 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -415,7 +415,7 @@ int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void return rv; } -static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) { +static ElfW(Sym)* soinfo_elf_lookup(const soinfo* si, unsigned hash, const char* name) { ElfW(Sym)* symtab = si->symtab; TRACE_TYPE(LOOKUP, "SEARCH %s in %s@%p %x %zd", @@ -481,7 +481,7 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -527,16 +527,21 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { } } - /* Look for symbols in the local scope (the object who is - * searching). This happens with C++ templates on x86 for some - * reason. - * - * Notes on weak symbols: - * The ELF specs are ambiguous about treatment of weak definitions in - * dynamic linking. Some systems return the first definition found - * and some the first non-weak definition. This is system dependent. - * Here we return the first definition found for simplicity. */ + // 3. Look for it in the local group + if (s == nullptr) { + local_group.visit([&](soinfo* local_si) { + DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); + s = soinfo_elf_lookup(local_si, elf_hash, name); + if (s != nullptr) { + *lsi = local_si; + return false; + } + return true; + }); + } + + // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) if (s == nullptr && !si->has_DT_SYMBOLIC) { DEBUG("%s: looking up %s in local scope", si->name, name); s = soinfo_elf_lookup(si, elf_hash, name); @@ -545,6 +550,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { } } + // 5. Dependencies if (s == nullptr) { si->get_children().visit([&](soinfo* child) { DEBUG("%s: looking up %s in %s", si->name, name, child->name); @@ -643,33 +649,61 @@ typedef linked_list_t StringLinkedList; typedef linked_list_t LoadTaskList; -// This is used by dlsym(3). It performs symbol lookup only within the -// specified soinfo object and its dependencies in breadth first order. -ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { +// This function walks down the tree of soinfo dependencies +// in breadth-first order and +// * calls action(soinfo* si) for each node, and +// * terminates walk if action returns false. +// +// walk_dependencies_tree returns false if walk was terminated +// by the action and true otherwise. +template +static bool walk_dependencies_tree(soinfo* root_soinfos[], size_t root_soinfos_size, F action) { SoinfoLinkedList visit_list; SoinfoLinkedList visited; - visit_list.push_back(si); - soinfo* current_soinfo; - while ((current_soinfo = visit_list.pop_front()) != nullptr) { - if (visited.contains(current_soinfo)) { + for (size_t i = 0; i < root_soinfos_size; ++i) { + visit_list.push_back(root_soinfos[i]); + } + + soinfo* si; + while ((si = visit_list.pop_front()) != nullptr) { + if (visited.contains(si)) { continue; } - ElfW(Sym)* result = soinfo_elf_lookup(current_soinfo, elfhash(name), name); - - if (result != nullptr) { - *found = current_soinfo; - return result; + if (!action(si)) { + return false; } - visited.push_back(current_soinfo); - current_soinfo->get_children().for_each([&](soinfo* child) { + visited.push_back(si); + + si->get_children().for_each([&](soinfo* child) { visit_list.push_back(child); }); } - return nullptr; + return true; +} + + +// This is used by dlsym(3). It performs symbol lookup only within the +// specified soinfo object and its dependencies in breadth first order. +ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { + ElfW(Sym)* result = nullptr; + uint32_t elf_hash = elfhash(name); + + + walk_dependencies_tree(&si, 1, [&](soinfo* current_soinfo) { + result = soinfo_elf_lookup(current_soinfo, elf_hash, name); + if (result != nullptr) { + *found = current_soinfo; + return false; + } + + return true; + }); + + return result; } /* This is used by dlsym(3) to performs a global symbol lookup. If the @@ -899,19 +933,30 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } -static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { +static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], + soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; - for (size_t i = 0; i < library_names_size; ++i) { + for (size_t i = 0; i < library_names_count; ++i) { const char* name = library_names[i]; - load_tasks.push_back(LoadTask::create(name, nullptr)); + load_tasks.push_back(LoadTask::create(name, start_with)); } - // Libraries added to this list in reverse order so that we can - // start linking from bottom-up - see step 2. - SoinfoLinkedList found_libs; - size_t soinfos_size = 0; + // If soinfos array is null allocate one on stack. + // The array is needed in case of failure; for example + // when library_names[] = {libone.so, libtwo.so} and libone.so + // is loaded correctly but libtwo.so failed for some reason. + // In this case libone.so should be unloaded on return. + // See also implementation of failure_guard below. + + if (soinfos == nullptr) { + size_t soinfos_size = sizeof(soinfo*)*library_names_count; + soinfos = reinterpret_cast(alloca(soinfos_size)); + memset(soinfos, 0, soinfos_size); + } + + // list of libraries to link - see step 2. + size_t soinfos_count = 0; auto failure_guard = make_scope_guard([&]() { // Housekeeping @@ -919,7 +964,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam LoadTask::deleter(t); }); - for (size_t i = 0; iadd_child(si); } - found_libs.push_front(si); - // When ld_preloads is not null first - // ld_preloads_size libs are in fact ld_preloads. - if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { - ld_preloads[soinfos_size] = si; + // When ld_preloads is not null, the first + // ld_preloads_count libs are in fact ld_preloads. + if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { + ld_preloads[soinfos_count] = si; } - if (soinfos_sizeflags & FLAG_LINKED) == 0) { - if (!si->LinkImage(extinfo)) { + if (!si->LinkImage(local_group, extinfo)) { return false; } si->flags |= FLAG_LINKED; } + + return true; + }); + + if (linked) { + failure_guard.disable(); } - // All is well - found_libs and load_tasks are empty at this point - // and all libs are successfully linked. - failure_guard.disable(); - return true; + return linked; } static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { @@ -979,7 +1034,7 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex soinfo* si; - if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { + if (!find_libraries(nullptr, &name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { return nullptr; } @@ -1090,7 +1145,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1108,7 +1163,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1367,7 +1422,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1386,7 +1441,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1572,7 +1627,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si) { +static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1605,7 +1660,7 @@ static bool mips_relocate_got(soinfo* si) { // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -2198,7 +2253,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2217,26 +2272,26 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count)) { + if (Relocate(rela, rela_count, local_group)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count)) { + if (Relocate(plt_rela, plt_rela_count, local_group)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count)) { + if (Relocate(rel, rel_count, local_group)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count)) { + if (Relocate(plt_rel, plt_rel_count, local_group)) { return false; } } @@ -2310,7 +2365,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(nullptr); + si->LinkImage(g_empty_list, nullptr); #endif } @@ -2456,21 +2511,11 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( }); const char* needed_library_names[needed_libraries_count]; - soinfo* needed_library_si[needed_libraries_count]; memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { - __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); - exit(EXIT_FAILURE); - } - - for (size_t i = 0; iadd_child(needed_library_si[i]); - } - - if (!si->LinkImage(nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(si, needed_library_names, needed_libraries_count, nullptr, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2594,7 +2639,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index ebb4793af..222aca11e 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -207,7 +207,7 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const android_dlextinfo* extinfo); + bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); @@ -234,9 +234,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count); + int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); #else - int Relocate(ElfW(Rel)* rel, unsigned count); + int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); #endif private: diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index f1ec0f131..e604f5abe 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -162,39 +162,39 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { ASSERT_EQ(1, fn()); } -TEST(dlfcn, dlopen_check_order) { +TEST(dlfcn, dlopen_check_order_dlsym) { // Here is how the test library and its dt_needed // libraries are arranged // - // libtest_check_order.so + // libtest_check_order_children.so // | - // +-> libtest_check_order_1_left.so + // +-> ..._1_left.so // | | - // | +-> libtest_check_order_a.so + // | +-> ..._a.so // | | - // | +-> libtest_check_order_b.so + // | +-> ...r_b.so // | - // +-> libtest_check_order_2_right.so + // +-> ..._2_right.so // | | - // | +-> libtest_check_order_d.so + // | +-> ..._d.so // | | - // | +-> libtest_check_order_b.so + // | +-> ..._b.so // | - // +-> libtest_check_order_3_c.so + // +-> ..._3_c.so // // load order should be (1, 2, 3, a, b, d) // // get_answer() is defined in (2, 3, a, b, c) // get_answer2() is defined in (b, d) - void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); + void* sym = dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer"); ASSERT_TRUE(sym == nullptr); - void* handle = dlopen("libtest_check_order.so", RTLD_NOW | RTLD_GLOBAL); - ASSERT_TRUE(handle != nullptr); + void* handle = dlopen("libtest_check_order_dlsym.so", RTLD_NOW | RTLD_GLOBAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); typedef int (*fn_t) (void); fn_t fn, fn2; - fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); + fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer")); ASSERT_TRUE(fn != NULL) << dlerror(); - fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); + fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer2")); ASSERT_TRUE(fn2 != NULL) << dlerror(); ASSERT_EQ(42, fn()); @@ -202,6 +202,163 @@ TEST(dlfcn, dlopen_check_order) { dlclose(handle); } +TEST(dlfcn, dlopen_check_order_reloc_siblings) { + // This is how this one works: + // we lookup and call get_answer which is defined in '_2.so' + // and in turn calls external get_answer_impl() defined in _1.so and in '_[a-f].so' + // the correct _impl() is implemented by '_a.so'; + // + // Note that this is test for RTLD_LOCAL (TODO: test for GLOBAL?) + // + // Here is the picture: + // + // libtest_check_order_reloc_siblings.so + // | + // +-> ..._1.so <- empty + // | | + // | +-> ..._a.so <- exports correct answer_impl() + // | | + // | +-> ..._b.so <- every other letter exporting incorrect one. + // | + // +-> ..._2.so <- empty + // | | + // | +-> ..._c.so + // | | + // | +-> ..._d.so + // | + // +-> ..._3.so <- empty + // | + // +-> ..._e.so + // | + // +-> ..._f.so <- exports get_answer() that calls get_anser_impl(); + // implements incorrect get_answer_impl() + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +TEST(dlfcn, dlopen_check_order_reloc_siblings_with_preload) { + // This test uses the same library as dlopen_check_order_reloc_siblings. + // Unlike dlopen_check_order_reloc_siblings it preloads + // libtest_check_order_reloc_siblings_1.so (first dependency) prior to + // dlopen(libtest_check_order_reloc_siblings.so) + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); + handle = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); + + void* handle_for_1 = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle_for_1 != nullptr) << dlerror(); + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + ASSERT_EQ(0, dlclose(handle_for_1)); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +TEST(dlfcn, dlopen_check_order_reloc_nephew) { + // This is how this one works: + // we lookup and call nephew_get_answer which is defined in '_2.so' + // and in turn calls external get_answer_impl() defined in '_[a-f].so' + // the correct _impl() is implemented by '_a.so'; + // + // Here is the picture: + // + // libtest_check_order_reloc_siblings.so + // | + // +-> ..._1.so <- empty + // | | + // | +-> ..._a.so <- exports correct answer_impl() + // | | + // | +-> ..._b.so <- every other letter exporting incorrect one. + // | + // +-> ..._2.so <- empty + // | | + // | +-> ..._c.so + // | | + // | +-> ..._d.so + // | + // +-> ..._3.so <- nephew_get_answer() that calls get_answer_impl(); + // | + // +-> ..._e.so + // | + // +-> ..._f.so + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_nephew_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +extern "C" int check_order_reloc_root_get_answer_impl() { + return 42; +} + +TEST(dlfcn, dlopen_check_order_reloc_main_executable) { + // This is how this one works: + // we lookup and call get_answer3 which is defined in 'root.so' + // and in turn calls external root_get_answer_impl() defined in _2.so and + // above the correct _impl() is one in the executable. + // + // libtest_check_order_reloc_root.so + // | + // +-> ..._1.so <- empty + // | + // +-> ..._2.so <- gives incorrect answer for answer_main_impl() + // + + void* handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_root.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_root_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + TEST(dlfcn, dlopen_check_rtld_local) { void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym == nullptr); @@ -342,7 +499,6 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } - TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.build.dlopen_check_order_dlsym.mk b/tests/libs/Android.build.dlopen_check_order_dlsym.mk new file mode 100644 index 000000000..73d8c1a83 --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_dlsym.mk @@ -0,0 +1,90 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct load order: +# libtest_check_order_2_right.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_2_right_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_2_right_cflags := -D__ANSWER=42 +module := libtest_check_order_dlsym_2_right +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_a.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_a_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_a_cflags := -D__ANSWER=1 +module := libtest_check_order_dlsym_a +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_b.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_b_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 +module := libtest_check_order_dlsym_b +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_c.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_3_c_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_3_c_cflags := -D__ANSWER=3 +module := libtest_check_order_dlsym_3_c +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_d.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_d_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_d_shared_libraries := libtest_check_order_dlsym_b +libtest_check_order_dlsym_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 +module := libtest_check_order_dlsym_d +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_left.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_1_left_src_files := \ + empty.cpp + +libtest_check_order_dlsym_1_left_shared_libraries := libtest_check_order_dlsym_a libtest_check_order_dlsym_b + +module := libtest_check_order_dlsym_1_left +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_src_files := \ + empty.cpp + +libtest_check_order_dlsym_shared_libraries := libtest_check_order_dlsym_1_left \ + libtest_check_order_dlsym_2_right libtest_check_order_dlsym_3_c + +module := libtest_check_order_dlsym +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk b/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk new file mode 100644 index 000000000..639696b25 --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk @@ -0,0 +1,56 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct relocation order: +# libtest_check_order_reloc_root*.so +# ----------------------------------------------------------------------------- + + +# ----------------------------------------------------------------------------- +# ..._1.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_1_src_files := \ + empty.cpp + + +module := libtest_check_order_reloc_root_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + + +# ----------------------------------------------------------------------------- +# ..._2.so - this one has the incorrect answer +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_2_src_files := \ + dlopen_check_order_reloc_root_answer_impl.cpp + +libtest_check_order_reloc_root_2_cflags := -D__ANSWER=2 + +module := libtest_check_order_reloc_root_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_reloc_root.so <- implements get_answer3() +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_src_files := \ + dlopen_check_order_reloc_root_answer.cpp + +libtest_check_order_reloc_root_shared_libraries := \ + libtest_check_order_reloc_root_1 \ + libtest_check_order_reloc_root_2 + +module := libtest_check_order_reloc_root +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk b/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk new file mode 100644 index 000000000..0f1a2b4da --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk @@ -0,0 +1,133 @@ +# +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct relocation order: +# libtest_check_order_reloc_siblings*.so +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# ..._1.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_1_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_1_shared_libraries := \ + libtest_check_order_reloc_siblings_a \ + libtest_check_order_reloc_siblings_b + +module := libtest_check_order_reloc_siblings_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + + +# ----------------------------------------------------------------------------- +# ..._2.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_2_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_2_shared_libraries := \ + libtest_check_order_reloc_siblings_c \ + libtest_check_order_reloc_siblings_d + +module := libtest_check_order_reloc_siblings_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._3.so - get_answer2(); +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_3_src_files := \ + dlopen_check_order_reloc_nephew_answer.cpp + +libtest_check_order_reloc_siblings_3_shared_libraries := \ + libtest_check_order_reloc_siblings_e \ + libtest_check_order_reloc_siblings_f + +module := libtest_check_order_reloc_siblings_3 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._a.so <- correct impl +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_a_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_a_cflags := -D__ANSWER=42 +module := libtest_check_order_reloc_siblings_a +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._b.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_b_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_b_cflags := -D__ANSWER=1 +module := libtest_check_order_reloc_siblings_b +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._c.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_c_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_c_cflags := -D__ANSWER=2 +module := libtest_check_order_reloc_siblings_c +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._d.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_d_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_d_cflags := -D__ANSWER=3 +module := libtest_check_order_reloc_siblings_d +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._e.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_e_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_e_cflags := -D__ANSWER=4 +module := libtest_check_order_reloc_siblings_e +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._f.so <- get_answer() +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_f_src_files := \ + dlopen_check_order_reloc_answer.cpp + +module := libtest_check_order_reloc_siblings_f +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_reloc_siblings.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_shared_libraries := \ + libtest_check_order_reloc_siblings_1 \ + libtest_check_order_reloc_siblings_2 \ + libtest_check_order_reloc_siblings_3 + +module := libtest_check_order_reloc_siblings +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 175a63539..05e7113ba 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -21,6 +21,9 @@ common_cppflags += -std=gnu++11 common_additional_dependencies := \ $(LOCAL_PATH)/Android.mk \ $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk \ $(LOCAL_PATH)/Android.build.testlib.mk \ $(TEST_PATH)/Android.build.mk @@ -150,79 +153,19 @@ module := libtest_nodelete_dt_flags_1 include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct load order: -# libtest_check_order_2_right.so +# Build libtest_check_order_dlsym.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_2_right_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_2_right_cflags := -D__ANSWER=42 -module := libtest_check_order_2_right -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk # ----------------------------------------------------------------------------- -# libtest_check_order_a.so +# Build libtest_check_order_siblings.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_a_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_a_cflags := -D__ANSWER=1 -module := libtest_check_order_a -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk # ----------------------------------------------------------------------------- -# libtest_check_order_b.so +# Build libtest_check_order_root.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_b_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 -module := libtest_check_order_b -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_c.so -# ----------------------------------------------------------------------------- -libtest_check_order_3_c_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_3_c_cflags := -D__ANSWER=3 -module := libtest_check_order_3_c -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_d.so -# ----------------------------------------------------------------------------- -libtest_check_order_d_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_d_shared_libraries := libtest_check_order_b -libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 -module := libtest_check_order_d -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_left.so -# ----------------------------------------------------------------------------- -libtest_check_order_1_left_src_files := \ - empty.cpp - -libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b - -module := libtest_check_order_1_left -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order.so -# ----------------------------------------------------------------------------- -libtest_check_order_src_files := \ - empty.cpp - -libtest_check_order_shared_libraries := libtest_check_order_1_left \ - libtest_check_order_2_right libtest_check_order_3_c - -module := libtest_check_order -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk # ----------------------------------------------------------------------------- # Library with dependency loop used by dlfcn tests diff --git a/tests/libs/dlopen_testlib_answer.cpp b/tests/libs/dlopen_check_order_dlsym_answer.cpp similarity index 87% rename from tests/libs/dlopen_testlib_answer.cpp rename to tests/libs/dlopen_check_order_dlsym_answer.cpp index a4d75046e..2ae6cf79e 100644 --- a/tests/libs/dlopen_testlib_answer.cpp +++ b/tests/libs/dlopen_check_order_dlsym_answer.cpp @@ -14,12 +14,12 @@ * limitations under the License. */ -extern "C" int dlopen_test_get_answer() { +extern "C" int check_order_dlsym_get_answer() { return __ANSWER; } #ifdef __ANSWER2 -extern "C" int dlopen_test_get_answer2() { +extern "C" int check_order_dlsym_get_answer2() { return __ANSWER2; } #endif diff --git a/tests/libs/dlopen_check_order_reloc_answer.cpp b/tests/libs/dlopen_check_order_reloc_answer.cpp new file mode 100644 index 000000000..036670bee --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_answer.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int __attribute__((weak)) check_order_reloc_get_answer_impl() { + return 0; +} + +extern "C" int check_order_reloc_get_answer() { + return check_order_reloc_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_answer_impl.cpp new file mode 100644 index 000000000..324b905da --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_answer_impl.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_get_answer_impl() { + return __ANSWER; +} diff --git a/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp b/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp new file mode 100644 index 000000000..065d1bef7 --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_get_answer_impl(); + +extern "C" int check_order_reloc_nephew_get_answer() { + return check_order_reloc_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer.cpp b/tests/libs/dlopen_check_order_reloc_root_answer.cpp new file mode 100644 index 000000000..b21abd77a --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_root_answer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_root_get_answer_impl(); + +extern "C" int check_order_reloc_root_get_answer() { + return check_order_reloc_root_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp new file mode 100644 index 000000000..25fb9aca9 --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_root_get_answer_impl() { + return __ANSWER; +} From 6442dbd3bcadbd5e522465743a8d8cf56338ae1c Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 23 Oct 2014 14:19:07 -0700 Subject: [PATCH 083/194] Remove unnecessary lookups during relocations local_group includes this library and its dependencies. Bug: 18186310 (cherry picked from commit e47b3f8456fc34ac136e9fddef59a9ae37febcbe) Change-Id: I93c2d873e924df7319569307444bf603d7d27bf0 --- linker/linker.cpp | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index eb1a483ae..c63ac35bb 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -530,6 +530,11 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c // 3. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { + if (local_si == si && si->has_DT_SYMBOLIC) { + // we already did this - skip + return true; + } + DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { @@ -541,28 +546,6 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c }); } - // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) - if (s == nullptr && !si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in local scope", si->name, name); - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - } - } - - // 5. Dependencies - if (s == nullptr) { - si->get_children().visit([&](soinfo* child) { - DEBUG("%s: looking up %s in %s", si->name, name, child->name); - s = soinfo_elf_lookup(child, elf_hash, name); - if (s != nullptr) { - *lsi = child; - return false; - } - return true; - }); - } - if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", From bf3d5ef5fd240d4c5fbde1b32f9084dbc720840b Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 23 Oct 2014 14:34:12 -0700 Subject: [PATCH 084/194] Fix mips build Bug: 18186310 (cherry picked from commit 90b74fb8671db6f5512821a033e12a6248e5c804) Change-Id: I8d4ed254e5c421b65b62c401abdb1ee07e5dc3b2 --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index c63ac35bb..f8963b59c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2281,7 +2281,7 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #endif #if defined(__mips__) - if (!mips_relocate_got(this)) { + if (!mips_relocate_got(this, local_group)) { return false; } #endif From 976402cca13a1f4f3aa988fd301575e134ef5f2c Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 28 Aug 2014 14:12:12 -0700 Subject: [PATCH 085/194] Fix symbol lookup order during relocation Relocate symbol against DF_1_GLOBAL shared libraries loaded before this shared library. This includes main executable, ld_preloads and other libraries that have DF_1_GLOBAL flag set. Bug: 2643900 Bug: 15432753 Bug: 18186310 (cherry picked from commit d225a5e65223b375a63548c4b780f04d8f3d7b60) Change-Id: I4e889cdf2dfbf8230b0790053d311ee6b0d0ee2d --- linker/linked_list.h | 12 +++ linker/linker.cpp | 162 +++++++++++++++++----------- linker/linker.h | 23 ++-- tests/Android.mk | 13 ++- tests/dl_test.cpp | 72 +++++++++++++ tests/dlfcn_test.cpp | 14 +++ tests/libs/Android.mk | 36 +++++++ tests/libs/dl_df_1_global.cpp | 19 ++++ tests/libs/dl_df_1_use_global.cpp | 23 ++++ tests/libs/dl_preempt_library_1.cpp | 45 ++++++++ tests/libs/dl_preempt_library_2.cpp | 37 +++++++ 11 files changed, 385 insertions(+), 71 deletions(-) create mode 100644 tests/dl_test.cpp create mode 100644 tests/libs/dl_df_1_global.cpp create mode 100644 tests/libs/dl_df_1_use_global.cpp create mode 100644 tests/libs/dl_preempt_library_1.cpp create mode 100644 tests/libs/dl_preempt_library_2.cpp diff --git a/linker/linked_list.h b/linker/linked_list.h index 72a32b4ba..b08806161 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -36,6 +36,12 @@ class LinkedList { clear(); } + LinkedList(LinkedList&& that) { + this->head_ = that.head_; + this->tail_ = that.tail_; + that.head_ = that.tail_ = nullptr; + } + void push_front(T* const element) { LinkedListEntry* new_entry = Allocator::alloc(); new_entry->next = head_; @@ -140,6 +146,12 @@ class LinkedList { return false; } + static LinkedList make_list(T* const element) { + LinkedList one_element_list; + one_element_list.push_back(element); + return one_element_list; + } + private: LinkedListEntry* head_; LinkedListEntry* tail_; diff --git a/linker/linker.cpp b/linker/linker.cpp index f8963b59c..ef6e3e127 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,7 +282,7 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, uint32_t rtld_flags) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; @@ -481,7 +481,8 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si_from, const char* name, soinfo** si_found_in, + const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -496,49 +497,40 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c * Note that this is unlikely since static linker avoids generating * relocations for -Bsymbolic linked dynamic executables. */ - if (si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si->name, name); - s = soinfo_elf_lookup(si, elf_hash, name); + if (si_from->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si_from->name, name); + s = soinfo_elf_lookup(si_from, elf_hash, name); if (s != nullptr) { - *lsi = si; + *si_found_in = si_from; } } - if (s == nullptr && somain != nullptr) { - // 1. Look for it in the main executable unless we already did. - if (si != somain || !si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); + // 1. Look for it in global_group + if (s == nullptr) { + global_group.visit([&](soinfo* global_si) { + DEBUG("%s: looking up %s in %s (from global group)", si_from->name, name, global_si->name); + s = soinfo_elf_lookup(global_si, elf_hash, name); if (s != nullptr) { - *lsi = somain; + *si_found_in = global_si; + return false; } - } - // 2. Look for it in the ld_preloads - if (s == nullptr) { - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != nullptr) { - *lsi = g_ld_preloads[i]; - break; - } - } - } + return true; + }); } - // 3. Look for it in the local group + // 2. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { - if (local_si == si && si->has_DT_SYMBOLIC) { + if (local_si == si_from && si_from->has_DT_SYMBOLIC) { // we already did this - skip return true; } - DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); + DEBUG("%s: looking up %s in %s (from local group)", si_from->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { - *lsi = local_si; + *si_found_in = local_si; return false; } @@ -549,9 +541,9 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", - si->name, name, reinterpret_cast(s->st_value), - (*lsi)->name, reinterpret_cast((*lsi)->base), - reinterpret_cast((*lsi)->load_bias)); + si_from->name, name, reinterpret_cast(s->st_value), + (*si_found_in)->name, reinterpret_cast((*si_found_in)->base), + reinterpret_cast((*si_found_in)->load_bias)); } return s; @@ -916,6 +908,24 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } +// TODO: this is slightly unusual way to construct +// the global group for relocation. Not every RTLD_GLOBAL +// library is included in this group for backwards-compatibility +// reasons. +// +// This group consists of the main executable, LD_PRELOADs +// and libraries with the DF_1_GLOBAL flag set. +static soinfo::soinfo_list_t make_global_group() { + soinfo::soinfo_list_t global_group; + for (soinfo* si = somain; si != nullptr; si = si->next) { + if ((si->get_dt_flags_1() & DF_1_GLOBAL) != 0) { + global_group.push_back(si); + } + } + + return global_group; +} + static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. @@ -925,6 +935,9 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] load_tasks.push_back(LoadTask::create(name, start_with)); } + // Construct global_group. + soinfo::soinfo_list_t global_group = make_global_group(); + // If soinfos array is null allocate one on stack. // The array is needed in case of failure; for example // when library_names[] = {libone.so, libtwo.so} and libone.so @@ -973,6 +986,11 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] // When ld_preloads is not null, the first // ld_preloads_count libs are in fact ld_preloads. if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { + // Add LD_PRELOADed libraries to the global group for future runs. + // There is no need to explicitly add them to the global group + // for this run because they are going to appear in the local + // group in the correct order. + si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); ld_preloads[soinfos_count] = si; } @@ -993,7 +1011,7 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] bool linked = local_group.visit([&](soinfo* si) { if ((si->flags & FLAG_LINKED) == 0) { - if (!si->LinkImage(local_group, extinfo)) { + if (!si->LinkImage(global_group, local_group, extinfo)) { return false; } si->flags |= FLAG_LINKED; @@ -1128,7 +1146,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1146,7 +1164,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, global_group,local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1405,7 +1423,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1424,7 +1442,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, global_group, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1610,7 +1628,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { +static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1643,7 +1661,7 @@ static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_gro // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, global_group, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -1783,7 +1801,7 @@ void soinfo::remove_all_links() { children.clear(); } -dev_t soinfo::get_st_dev() { +dev_t soinfo::get_st_dev() const { if (has_min_version(0)) { return st_dev; } @@ -1791,7 +1809,7 @@ dev_t soinfo::get_st_dev() { return 0; }; -ino_t soinfo::get_st_ino() { +ino_t soinfo::get_st_ino() const { if (has_min_version(0)) { return st_ino; } @@ -1799,7 +1817,7 @@ ino_t soinfo::get_st_ino() { return 0; } -off64_t soinfo::get_file_offset() { +off64_t soinfo::get_file_offset() const { if (has_min_version(1)) { return file_offset; } @@ -1807,7 +1825,7 @@ off64_t soinfo::get_file_offset() { return 0; } -int soinfo::get_rtld_flags() { +uint32_t soinfo::get_rtld_flags() const { if (has_min_version(1)) { return rtld_flags; } @@ -1815,6 +1833,27 @@ int soinfo::get_rtld_flags() { return 0; } +uint32_t soinfo::get_dt_flags_1() const { + if (has_min_version(1)) { + return dt_flags_1; + } + + return 0; +} +void soinfo::set_dt_flags_1(uint32_t dt_flags_1) { + if (has_min_version(1)) { + if ((dt_flags_1 & DF_1_GLOBAL) != 0) { + rtld_flags |= RTLD_GLOBAL; + } + + if ((dt_flags_1 & DF_1_NODELETE) != 0) { + rtld_flags |= RTLD_NODELETE; + } + + this->dt_flags_1 = dt_flags_1; + } +} + // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1852,8 +1891,9 @@ const char* soinfo::get_string(ElfW(Word) index) const { } bool soinfo::can_unload() const { - return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; + return (get_rtld_flags() & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; } + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2154,16 +2194,9 @@ bool soinfo::PrelinkImage() { break; case DT_FLAGS_1: - if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { - rtld_flags |= RTLD_GLOBAL; - } + set_dt_flags_1(d->d_un.d_val); - if ((d->d_un.d_val & DF_1_NODELETE) != 0) { - rtld_flags |= RTLD_NODELETE; - } - // TODO: Implement other flags - - if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { + if ((d->d_un.d_val & ~SUPPORTED_DT_FLAGS_1) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; @@ -2236,7 +2269,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2255,33 +2288,33 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count, local_group)) { + if (Relocate(rela, rela_count, global_group, local_group)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count, local_group)) { + if (Relocate(plt_rela, plt_rela_count, global_group, local_group)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count, local_group)) { + if (Relocate(rel, rel_count, global_group, local_group)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count, local_group)) { + if (Relocate(plt_rel, plt_rel_count, global_group, local_group)) { return false; } } #endif #if defined(__mips__) - if (!mips_relocate_got(this, local_group)) { + if (!mips_relocate_got(this, global_group, local_group)) { return false; } #endif @@ -2348,7 +2381,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(g_empty_list, nullptr); + si->LinkImage(g_empty_list, soinfo::soinfo_list_t::make_list(si), nullptr); #endif } @@ -2479,6 +2512,9 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->PrelinkImage(); + // add somain to global group + si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); + // Load ld_preloads and dependencies. StringLinkedList needed_library_name_list; size_t needed_libraries_count = 0; @@ -2622,7 +2658,13 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { + // This might not be obvious... The reasons why we pass g_empty_list + // in place of local_group here are (1) we do not really need it, because + // linker is built with DT_SYMBOLIC and therefore relocates its symbols against + // itself without having to look into local_group and (2) allocators + // are not yet initialized, and therefore we cannot use linked_list.push_* + // functions at this point. + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, g_empty_list, nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 222aca11e..0a98b40dc 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -89,7 +89,9 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format -#define SOINFO_VERSION 0 +#define SUPPORTED_DT_FLAGS_1 (DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE) + +#define SOINFO_VERSION 1 #define SOINFO_NAME_LEN 128 @@ -207,16 +209,18 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); + bool LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); - ino_t get_st_ino(); - dev_t get_st_dev(); - off64_t get_file_offset(); + ino_t get_st_ino() const; + dev_t get_st_dev() const; + off64_t get_file_offset() const; - int get_rtld_flags(); + uint32_t get_rtld_flags() const; + uint32_t get_dt_flags_1() const; + void set_dt_flags_1(uint32_t dt_flags_1); soinfo_list_t& get_children(); soinfo_list_t& get_parents(); @@ -234,9 +238,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); #else - int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); #endif private: @@ -254,7 +258,8 @@ struct soinfo { // version >= 1 off64_t file_offset; - int rtld_flags; + uint32_t rtld_flags; + uint32_t dt_flags_1; size_t strtab_size; friend soinfo* get_libdl_info(); diff --git a/tests/Android.mk b/tests/Android.mk index 8b0b0a0e0..6423df183 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -225,6 +225,7 @@ bionic-unit-tests_whole_static_libraries := \ bionic-unit-tests_src_files := \ atexit_test.cpp \ + dl_test.cpp \ dlext_test.cpp \ dlfcn_test.cpp \ @@ -237,8 +238,7 @@ bionic-unit-tests_conlyflags := \ bionic-unit-tests_cppflags := $(test_cppflags) bionic-unit-tests_ldflags := \ - -Wl,--export-dynamic \ - -Wl,-u,DlSymTestFunction \ + -Wl,--export-dynamic bionic-unit-tests_c_includes := \ bionic/libc \ @@ -247,6 +247,9 @@ bionic-unit-tests_c_includes := \ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ + libdl_preempt_test_1 \ + libdl_preempt_test_2 \ + libdl_test_df_1_global module := bionic-unit-tests module_tag := optional @@ -286,6 +289,12 @@ ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x bionic-unit-tests-glibc_src_files := \ atexit_test.cpp \ dlfcn_test.cpp \ + dl_test.cpp \ + +bionic-unit-tests-glibc_shared_libraries := \ + libdl_preempt_test_1 \ + libdl_preempt_test_2 \ + libdl_test_df_1_global bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dl_test.cpp b/tests/dl_test.cpp new file mode 100644 index 000000000..74c7b510f --- /dev/null +++ b/tests/dl_test.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +#include + +extern "C" int main_global_default_serial() { + return 3370318; +} + +extern "C" int main_global_protected_serial() { + return 2716057; +} + +// The following functions are defined in DT_NEEDED +// libdl_preempt_test.so library. + +// This one calls main_global_default_serial +extern "C" int main_global_default_get_serial(); + +// This one calls main_global_protected_serial +extern "C" int main_global_protected_get_serial(); + +// This one calls lib_global_default_serial +extern "C" int lib_global_default_get_serial(); + +// This one calls lib_global_protected_serial +extern "C" int lib_global_protected_get_serial(); + +// This test verifies that the global default function +// main_global_default_serial() is preempted by +// the function defined above. +TEST(dl, main_preempts_global_default) { + ASSERT_EQ(3370318, main_global_default_get_serial()); +} + +// This one makes sure that the global protected +// symbols do not get preempted +TEST(dl, main_does_not_preempt_global_protected) { + ASSERT_EQ(3370318, main_global_protected_get_serial()); +} + +// check same things for lib +TEST(dl, lib_preempts_global_default) { + ASSERT_EQ(3370318, lib_global_default_get_serial()); +} + +TEST(dl, lib_does_not_preempt_global_protected) { + ASSERT_EQ(3370318, lib_global_protected_get_serial()); +} + +// TODO: Add tests for LD_PRELOADs diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index e604f5abe..a7fe2f852 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -499,6 +499,20 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } +TEST(dlfcn, dlsym_df_1_global) { +#if !defined(__arm__) + void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + int (*get_answer)(); + get_answer = reinterpret_cast(dlsym(handle, "dl_df_1_global_get_answer")); + ASSERT_TRUE(get_answer != nullptr) << dlerror(); + ASSERT_EQ(42, get_answer()); + ASSERT_EQ(0, dlclose(handle)); +#else + GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; +#endif +} + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 05e7113ba..f45e5a80f 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -289,6 +289,42 @@ libtest_atexit_src_files := \ module := libtest_atexit include $(LOCAL_PATH)/Android.build.testlib.mk +# ----------------------------------------------------------------------------- +# This library is used by dl_load test to check symbol preempting +# by main executable +# ----------------------------------------------------------------------------- +libdl_preempt_test_1_src_files := dl_preempt_library_1.cpp + +module := libdl_preempt_test_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# This library is used by dl_load test to check symbol preempting +# by libdl_preempt_test_1.so +# ----------------------------------------------------------------------------- +libdl_preempt_test_2_src_files := dl_preempt_library_2.cpp + +module := libdl_preempt_test_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library with DF_1_GLOBAL +# ----------------------------------------------------------------------------- +# TODO: re-enable arm once b/18137520 or b/18130452 are fixed +ifeq ($(filter $(TARGET_ARCH),arm),) +libdl_test_df_1_global_src_files := dl_df_1_global.cpp +libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global +module := libdl_test_df_1_global +include $(LOCAL_PATH)/Android.build.testlib.mk +endif + +# ----------------------------------------------------------------------------- +# Library using symbol from libdl_test_df_1_global +# ----------------------------------------------------------------------------- +libtest_dlsym_df_1_global_src_files := dl_df_1_use_global.cpp +module := libtest_dlsym_df_1_global +include $(LOCAL_PATH)/Android.build.testlib.mk + # ----------------------------------------------------------------------------- # Library with weak function # ----------------------------------------------------------------------------- diff --git a/tests/libs/dl_df_1_global.cpp b/tests/libs/dl_df_1_global.cpp new file mode 100644 index 000000000..39856fd50 --- /dev/null +++ b/tests/libs/dl_df_1_global.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int dl_df_1_global_get_answer_impl() { + return 42; +} diff --git a/tests/libs/dl_df_1_use_global.cpp b/tests/libs/dl_df_1_use_global.cpp new file mode 100644 index 000000000..e14910d1c --- /dev/null +++ b/tests/libs/dl_df_1_use_global.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int __attribute__((weak)) dl_df_1_global_get_answer_impl() { + return 0; +} + +extern "C" int dl_df_1_global_get_answer() { + return dl_df_1_global_get_answer_impl(); +} diff --git a/tests/libs/dl_preempt_library_1.cpp b/tests/libs/dl_preempt_library_1.cpp new file mode 100644 index 000000000..b4d81d5ac --- /dev/null +++ b/tests/libs/dl_preempt_library_1.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This one should be preempted by the function +// defined in the main executable. +extern "C" int __attribute__((weak)) main_global_default_serial() { + return 2716057; +} + +// Even though this one is defined by the main +// executable it should not be preempted +// because of protected visibility +extern "C" int __attribute__((weak, visibility("protected"))) main_global_protected_serial() { + return 3370318; +} + +extern "C" int main_global_default_get_serial() { + return main_global_default_serial(); +} + +extern "C" int main_global_protected_get_serial() { + return main_global_protected_serial(); +} + +// Trying to preempt functions from a DT_NEEDED .so +extern "C" int lib_global_default_serial() { + return 3370318; +} + +extern "C" int lib_global_protected_serial() { + return 2716057; +} diff --git a/tests/libs/dl_preempt_library_2.cpp b/tests/libs/dl_preempt_library_2.cpp new file mode 100644 index 000000000..8df9a1667 --- /dev/null +++ b/tests/libs/dl_preempt_library_2.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This one should be preempted by the function +// defined in libdl_preempt_test_1.so +extern "C" int __attribute__((weak)) lib_global_default_serial() { + return 2716057; +} + +// Even though this one is defined by +// libdl_preempt_test_1.so it should not be +// preempted because of protected visibility +extern "C" int __attribute__((weak,visibility("protected"))) lib_global_protected_serial() { + return 3370318; +} + +extern "C" int lib_global_default_get_serial() { + return lib_global_default_serial(); +} + +extern "C" int lib_global_protected_get_serial() { + return lib_global_protected_serial(); +} + From 445111a1c977e94a4233efd54f3690defa4a7582 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 31 Oct 2014 17:27:02 -0700 Subject: [PATCH 086/194] Fix arm64 and arm builds. Bug: 18186310 (cherry picked from commit 4e446b19d8710cd2004785db4a00f18f249fe73f) Change-Id: Ibc77a9ade36dc6b9bf5a316b5ab9ae5f0a70e826 --- tests/Android.mk | 14 ++++++++++---- tests/dlfcn_test.cpp | 4 ++-- tests/libs/Android.mk | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/Android.mk b/tests/Android.mk index 6423df183..5a1127b96 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -248,8 +248,11 @@ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global + libdl_preempt_test_2 + +ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) +bionic-unit-tests_shared_libraries_target += libdl_test_df_1_global +endif module := bionic-unit-tests module_tag := optional @@ -293,8 +296,11 @@ bionic-unit-tests-glibc_src_files := \ bionic-unit-tests-glibc_shared_libraries := \ libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global + libdl_preempt_test_2 + +ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) +bionic-unit-tests-glibc_shared_libraries += libdl_test_df_1_global +endif bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index a7fe2f852..2f0d430f6 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -500,7 +500,7 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { } TEST(dlfcn, dlsym_df_1_global) { -#if !defined(__arm__) +#if !defined(__arm__) && !defined(__aarch64__) void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); ASSERT_TRUE(handle != nullptr) << dlerror(); int (*get_answer)(); @@ -509,7 +509,7 @@ TEST(dlfcn, dlsym_df_1_global) { ASSERT_EQ(42, get_answer()); ASSERT_EQ(0, dlclose(handle)); #else - GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; + GTEST_LOG_(INFO) << "This test does nothing on arm/arm64 (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; #endif } diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index f45e5a80f..7d959d484 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -311,7 +311,7 @@ include $(LOCAL_PATH)/Android.build.testlib.mk # Library with DF_1_GLOBAL # ----------------------------------------------------------------------------- # TODO: re-enable arm once b/18137520 or b/18130452 are fixed -ifeq ($(filter $(TARGET_ARCH),arm),) +ifeq ($(filter $(TARGET_ARCH),arm arm64),) libdl_test_df_1_global_src_files := dl_df_1_global.cpp libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global module := libdl_test_df_1_global From d18f4b25785761c022906b93b2123b3be90182e8 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 3 Nov 2014 12:32:17 -0800 Subject: [PATCH 087/194] Ensure we initialize stdin/stdout/stderr's recursive mutexes. (cherry-pick of 6a03abcfd23f31d1df06eb0059830e22621282bb.) Bug: 18208568 Change-Id: I9da16ce0f9375bc363d1d02be706d73fd3b1e150 --- libc/Android.mk | 2 +- .../lib/libc => }/stdio/findfp.c | 25 ++++++++++++------- tests/stdio_test.cpp | 17 +++++++++++++ 3 files changed, 34 insertions(+), 10 deletions(-) rename libc/{upstream-openbsd/lib/libc => }/stdio/findfp.c (90%) diff --git a/libc/Android.mk b/libc/Android.mk index 61bdf7e23..045556ea9 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -60,6 +60,7 @@ libc_common_src_files := \ bionic/siginterrupt.c \ bionic/sigsetmask.c \ bionic/system_properties_compat.c \ + stdio/findfp.c \ stdio/snprintf.c\ stdio/sprintf.c \ @@ -389,7 +390,6 @@ libc_upstream_openbsd_src_files := \ upstream-openbsd/lib/libc/stdio/fgetwc.c \ upstream-openbsd/lib/libc/stdio/fgetws.c \ upstream-openbsd/lib/libc/stdio/fileno.c \ - upstream-openbsd/lib/libc/stdio/findfp.c \ upstream-openbsd/lib/libc/stdio/fprintf.c \ upstream-openbsd/lib/libc/stdio/fpurge.c \ upstream-openbsd/lib/libc/stdio/fputc.c \ diff --git a/libc/upstream-openbsd/lib/libc/stdio/findfp.c b/libc/stdio/findfp.c similarity index 90% rename from libc/upstream-openbsd/lib/libc/stdio/findfp.c rename to libc/stdio/findfp.c index b8c7dc137..0c2ee7cee 100644 --- a/libc/upstream-openbsd/lib/libc/stdio/findfp.c +++ b/libc/stdio/findfp.c @@ -49,10 +49,8 @@ int __sdidinit; #define NDYNAMIC 10 /* add ten more whenever necessary */ #define std(flags, file) \ - {0,0,0,flags,file,{0,0},0,__sF+file,__sclose,__sread,__sseek,__swrite, \ - {(unsigned char *)(__sFext+file), 0},NULL,0,{0,0,0},{0},{0,0},0,0} -/* p r w flags file _bf z cookie close read seek write - ext */ + {0,0,0,flags,file,{0},0,__sF+file,__sclose,__sread,__sseek,__swrite, \ + {(unsigned char *)(__sFext+file), 0},NULL,0,{0},{0},{0},0,0} /* the usual - (stdin + stdout + stderr) */ static FILE usual[FOPEN_MAX - 3]; @@ -165,17 +163,26 @@ void __sinit(void) { _THREAD_PRIVATE_MUTEX(__sinit_mutex); - int i; _THREAD_PRIVATE_MUTEX_LOCK(__sinit_mutex); - if (__sdidinit) - goto out; /* bail out if caller lost the race */ - for (i = 0; i < FOPEN_MAX - 3; i++) { + if (__sdidinit) { + /* bail out if caller lost the race */ + _THREAD_PRIVATE_MUTEX_UNLOCK(__sinit_mutex); + return; + } + + /* Initialize stdin/stdout/stderr (for the recursive mutex). http://b/18208568. */ + for (size_t i = 0; i < 3; ++i) { + _FILEEXT_SETUP(__sF+i, __sFext+i); + } + /* Initialize the pre-allocated (but initially unused) streams. */ + for (size_t i = 0; i < FOPEN_MAX - 3; ++i) { _FILEEXT_SETUP(usual+i, usualext+i); } + /* make sure we clean up on exit */ __atexit_register_cleanup(_cleanup); /* conservative */ __sdidinit = 1; -out: + _THREAD_PRIVATE_MUTEX_UNLOCK(__sinit_mutex); } diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index 8c8c235ad..6a2991f57 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -29,6 +29,23 @@ #include "TemporaryFile.h" +TEST(stdio, flockfile_18208568_stderr) { + // Check that we have a _recursive_ mutex for flockfile. + flockfile(stderr); + feof(stderr); // We don't care about the result, but this needs to take the lock. + funlockfile(stderr); +} + +TEST(stdio, flockfile_18208568_regular) { + // We never had a bug for streams other than stdin/stdout/stderr, but test anyway. + FILE* fp = fopen("/dev/null", "w"); + ASSERT_TRUE(fp != NULL); + flockfile(fp); + feof(fp); + funlockfile(fp); + fclose(fp); +} + TEST(stdio, tmpfile_fileno_fprintf_rewind_fgets) { FILE* fp = tmpfile(); ASSERT_TRUE(fp != NULL); From 494bee796aa60131981308493e0e295493537e12 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 21:13:55 -0800 Subject: [PATCH 088/194] Revert "Fix arm64 and arm builds." This reverts commit 445111a1c977e94a4233efd54f3690defa4a7582. Bug: 18222321 Bug: 18211780 Change-Id: I4fa9e1b63ec9b528f8bfed73c2ec15046c43a2fe --- tests/Android.mk | 14 ++++---------- tests/dlfcn_test.cpp | 4 ++-- tests/libs/Android.mk | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/tests/Android.mk b/tests/Android.mk index 5a1127b96..6423df183 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -248,11 +248,8 @@ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ libdl_preempt_test_1 \ - libdl_preempt_test_2 - -ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) -bionic-unit-tests_shared_libraries_target += libdl_test_df_1_global -endif + libdl_preempt_test_2 \ + libdl_test_df_1_global module := bionic-unit-tests module_tag := optional @@ -296,11 +293,8 @@ bionic-unit-tests-glibc_src_files := \ bionic-unit-tests-glibc_shared_libraries := \ libdl_preempt_test_1 \ - libdl_preempt_test_2 - -ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) -bionic-unit-tests-glibc_shared_libraries += libdl_test_df_1_global -endif + libdl_preempt_test_2 \ + libdl_test_df_1_global bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 2f0d430f6..a7fe2f852 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -500,7 +500,7 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { } TEST(dlfcn, dlsym_df_1_global) { -#if !defined(__arm__) && !defined(__aarch64__) +#if !defined(__arm__) void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); ASSERT_TRUE(handle != nullptr) << dlerror(); int (*get_answer)(); @@ -509,7 +509,7 @@ TEST(dlfcn, dlsym_df_1_global) { ASSERT_EQ(42, get_answer()); ASSERT_EQ(0, dlclose(handle)); #else - GTEST_LOG_(INFO) << "This test does nothing on arm/arm64 (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; + GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; #endif } diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 7d959d484..f45e5a80f 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -311,7 +311,7 @@ include $(LOCAL_PATH)/Android.build.testlib.mk # Library with DF_1_GLOBAL # ----------------------------------------------------------------------------- # TODO: re-enable arm once b/18137520 or b/18130452 are fixed -ifeq ($(filter $(TARGET_ARCH),arm arm64),) +ifeq ($(filter $(TARGET_ARCH),arm),) libdl_test_df_1_global_src_files := dl_df_1_global.cpp libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global module := libdl_test_df_1_global From f947be2889639defc6424b1813ccc779528b7598 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 21:14:07 -0800 Subject: [PATCH 089/194] Revert "Fix symbol lookup order during relocation" This reverts commit 976402cca13a1f4f3aa988fd301575e134ef5f2c. Bug: 18222321 Bug: 18211780 Change-Id: Iafdd3d843db7b1cf288be9a0232022816622c944 --- linker/linked_list.h | 12 --- linker/linker.cpp | 162 +++++++++++----------------- linker/linker.h | 23 ++-- tests/Android.mk | 13 +-- tests/dl_test.cpp | 72 ------------- tests/dlfcn_test.cpp | 14 --- tests/libs/Android.mk | 36 ------- tests/libs/dl_df_1_global.cpp | 19 ---- tests/libs/dl_df_1_use_global.cpp | 23 ---- tests/libs/dl_preempt_library_1.cpp | 45 -------- tests/libs/dl_preempt_library_2.cpp | 37 ------- 11 files changed, 71 insertions(+), 385 deletions(-) delete mode 100644 tests/dl_test.cpp delete mode 100644 tests/libs/dl_df_1_global.cpp delete mode 100644 tests/libs/dl_df_1_use_global.cpp delete mode 100644 tests/libs/dl_preempt_library_1.cpp delete mode 100644 tests/libs/dl_preempt_library_2.cpp diff --git a/linker/linked_list.h b/linker/linked_list.h index b08806161..72a32b4ba 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -36,12 +36,6 @@ class LinkedList { clear(); } - LinkedList(LinkedList&& that) { - this->head_ = that.head_; - this->tail_ = that.tail_; - that.head_ = that.tail_ = nullptr; - } - void push_front(T* const element) { LinkedListEntry* new_entry = Allocator::alloc(); new_entry->next = head_; @@ -146,12 +140,6 @@ class LinkedList { return false; } - static LinkedList make_list(T* const element) { - LinkedList one_element_list; - one_element_list.push_back(element); - return one_element_list; - } - private: LinkedListEntry* head_; LinkedListEntry* tail_; diff --git a/linker/linker.cpp b/linker/linker.cpp index ef6e3e127..f8963b59c 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,7 +282,7 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, uint32_t rtld_flags) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; @@ -481,8 +481,7 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si_from, const char* name, soinfo** si_found_in, - const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -497,40 +496,49 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si_from, const char* name, soinfo** s * Note that this is unlikely since static linker avoids generating * relocations for -Bsymbolic linked dynamic executables. */ - if (si_from->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si_from->name, name); - s = soinfo_elf_lookup(si_from, elf_hash, name); + if (si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si->name, name); + s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { - *si_found_in = si_from; + *lsi = si; } } - // 1. Look for it in global_group - if (s == nullptr) { - global_group.visit([&](soinfo* global_si) { - DEBUG("%s: looking up %s in %s (from global group)", si_from->name, name, global_si->name); - s = soinfo_elf_lookup(global_si, elf_hash, name); + if (s == nullptr && somain != nullptr) { + // 1. Look for it in the main executable unless we already did. + if (si != somain || !si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in executable %s", + si->name, name, somain->name); + s = soinfo_elf_lookup(somain, elf_hash, name); if (s != nullptr) { - *si_found_in = global_si; - return false; + *lsi = somain; } + } - return true; - }); + // 2. Look for it in the ld_preloads + if (s == nullptr) { + for (int i = 0; g_ld_preloads[i] != NULL; i++) { + s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); + if (s != nullptr) { + *lsi = g_ld_preloads[i]; + break; + } + } + } } - // 2. Look for it in the local group + // 3. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { - if (local_si == si_from && si_from->has_DT_SYMBOLIC) { + if (local_si == si && si->has_DT_SYMBOLIC) { // we already did this - skip return true; } - DEBUG("%s: looking up %s in %s (from local group)", si_from->name, name, local_si->name); + DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { - *si_found_in = local_si; + *lsi = local_si; return false; } @@ -541,9 +549,9 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si_from, const char* name, soinfo** s if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", - si_from->name, name, reinterpret_cast(s->st_value), - (*si_found_in)->name, reinterpret_cast((*si_found_in)->base), - reinterpret_cast((*si_found_in)->load_bias)); + si->name, name, reinterpret_cast(s->st_value), + (*lsi)->name, reinterpret_cast((*lsi)->base), + reinterpret_cast((*lsi)->load_bias)); } return s; @@ -908,24 +916,6 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } -// TODO: this is slightly unusual way to construct -// the global group for relocation. Not every RTLD_GLOBAL -// library is included in this group for backwards-compatibility -// reasons. -// -// This group consists of the main executable, LD_PRELOADs -// and libraries with the DF_1_GLOBAL flag set. -static soinfo::soinfo_list_t make_global_group() { - soinfo::soinfo_list_t global_group; - for (soinfo* si = somain; si != nullptr; si = si->next) { - if ((si->get_dt_flags_1() & DF_1_GLOBAL) != 0) { - global_group.push_back(si); - } - } - - return global_group; -} - static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. @@ -935,9 +925,6 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] load_tasks.push_back(LoadTask::create(name, start_with)); } - // Construct global_group. - soinfo::soinfo_list_t global_group = make_global_group(); - // If soinfos array is null allocate one on stack. // The array is needed in case of failure; for example // when library_names[] = {libone.so, libtwo.so} and libone.so @@ -986,11 +973,6 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] // When ld_preloads is not null, the first // ld_preloads_count libs are in fact ld_preloads. if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { - // Add LD_PRELOADed libraries to the global group for future runs. - // There is no need to explicitly add them to the global group - // for this run because they are going to appear in the local - // group in the correct order. - si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); ld_preloads[soinfos_count] = si; } @@ -1011,7 +993,7 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] bool linked = local_group.visit([&](soinfo* si) { if ((si->flags & FLAG_LINKED) == 0) { - if (!si->LinkImage(global_group, local_group, extinfo)) { + if (!si->LinkImage(local_group, extinfo)) { return false; } si->flags |= FLAG_LINKED; @@ -1146,7 +1128,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1164,7 +1146,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& glob if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, global_group,local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1423,7 +1405,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& glob } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1442,7 +1424,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, global_group, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1628,7 +1610,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { +static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1661,7 +1643,7 @@ static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& global_gr // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, global_group, local_group); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -1801,7 +1783,7 @@ void soinfo::remove_all_links() { children.clear(); } -dev_t soinfo::get_st_dev() const { +dev_t soinfo::get_st_dev() { if (has_min_version(0)) { return st_dev; } @@ -1809,7 +1791,7 @@ dev_t soinfo::get_st_dev() const { return 0; }; -ino_t soinfo::get_st_ino() const { +ino_t soinfo::get_st_ino() { if (has_min_version(0)) { return st_ino; } @@ -1817,7 +1799,7 @@ ino_t soinfo::get_st_ino() const { return 0; } -off64_t soinfo::get_file_offset() const { +off64_t soinfo::get_file_offset() { if (has_min_version(1)) { return file_offset; } @@ -1825,7 +1807,7 @@ off64_t soinfo::get_file_offset() const { return 0; } -uint32_t soinfo::get_rtld_flags() const { +int soinfo::get_rtld_flags() { if (has_min_version(1)) { return rtld_flags; } @@ -1833,27 +1815,6 @@ uint32_t soinfo::get_rtld_flags() const { return 0; } -uint32_t soinfo::get_dt_flags_1() const { - if (has_min_version(1)) { - return dt_flags_1; - } - - return 0; -} -void soinfo::set_dt_flags_1(uint32_t dt_flags_1) { - if (has_min_version(1)) { - if ((dt_flags_1 & DF_1_GLOBAL) != 0) { - rtld_flags |= RTLD_GLOBAL; - } - - if ((dt_flags_1 & DF_1_NODELETE) != 0) { - rtld_flags |= RTLD_NODELETE; - } - - this->dt_flags_1 = dt_flags_1; - } -} - // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1891,9 +1852,8 @@ const char* soinfo::get_string(ElfW(Word) index) const { } bool soinfo::can_unload() const { - return (get_rtld_flags() & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; + return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; } - /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2194,9 +2154,16 @@ bool soinfo::PrelinkImage() { break; case DT_FLAGS_1: - set_dt_flags_1(d->d_un.d_val); + if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { + rtld_flags |= RTLD_GLOBAL; + } - if ((d->d_un.d_val & ~SUPPORTED_DT_FLAGS_1) != 0) { + if ((d->d_un.d_val & DF_1_NODELETE) != 0) { + rtld_flags |= RTLD_NODELETE; + } + // TODO: Implement other flags + + if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; @@ -2269,7 +2236,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2288,33 +2255,33 @@ bool soinfo::LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& l #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count, global_group, local_group)) { + if (Relocate(rela, rela_count, local_group)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count, global_group, local_group)) { + if (Relocate(plt_rela, plt_rela_count, local_group)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count, global_group, local_group)) { + if (Relocate(rel, rel_count, local_group)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count, global_group, local_group)) { + if (Relocate(plt_rel, plt_rel_count, local_group)) { return false; } } #endif #if defined(__mips__) - if (!mips_relocate_got(this, global_group, local_group)) { + if (!mips_relocate_got(this, local_group)) { return false; } #endif @@ -2381,7 +2348,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(g_empty_list, soinfo::soinfo_list_t::make_list(si), nullptr); + si->LinkImage(g_empty_list, nullptr); #endif } @@ -2512,9 +2479,6 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->PrelinkImage(); - // add somain to global group - si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); - // Load ld_preloads and dependencies. StringLinkedList needed_library_name_list; size_t needed_libraries_count = 0; @@ -2658,13 +2622,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - // This might not be obvious... The reasons why we pass g_empty_list - // in place of local_group here are (1) we do not really need it, because - // linker is built with DT_SYMBOLIC and therefore relocates its symbols against - // itself without having to look into local_group and (2) allocators - // are not yet initialized, and therefore we cannot use linked_list.push_* - // functions at this point. - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, g_empty_list, nullptr))) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 0a98b40dc..222aca11e 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -89,9 +89,7 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format -#define SUPPORTED_DT_FLAGS_1 (DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE) - -#define SOINFO_VERSION 1 +#define SOINFO_VERSION 0 #define SOINFO_NAME_LEN 128 @@ -209,18 +207,16 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo); + bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); - ino_t get_st_ino() const; - dev_t get_st_dev() const; - off64_t get_file_offset() const; + ino_t get_st_ino(); + dev_t get_st_dev(); + off64_t get_file_offset(); - uint32_t get_rtld_flags() const; - uint32_t get_dt_flags_1() const; - void set_dt_flags_1(uint32_t dt_flags_1); + int get_rtld_flags(); soinfo_list_t& get_children(); soinfo_list_t& get_parents(); @@ -238,9 +234,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); + int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); #else - int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); + int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); #endif private: @@ -258,8 +254,7 @@ struct soinfo { // version >= 1 off64_t file_offset; - uint32_t rtld_flags; - uint32_t dt_flags_1; + int rtld_flags; size_t strtab_size; friend soinfo* get_libdl_info(); diff --git a/tests/Android.mk b/tests/Android.mk index 6423df183..8b0b0a0e0 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -225,7 +225,6 @@ bionic-unit-tests_whole_static_libraries := \ bionic-unit-tests_src_files := \ atexit_test.cpp \ - dl_test.cpp \ dlext_test.cpp \ dlfcn_test.cpp \ @@ -238,7 +237,8 @@ bionic-unit-tests_conlyflags := \ bionic-unit-tests_cppflags := $(test_cppflags) bionic-unit-tests_ldflags := \ - -Wl,--export-dynamic + -Wl,--export-dynamic \ + -Wl,-u,DlSymTestFunction \ bionic-unit-tests_c_includes := \ bionic/libc \ @@ -247,9 +247,6 @@ bionic-unit-tests_c_includes := \ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ - libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global module := bionic-unit-tests module_tag := optional @@ -289,12 +286,6 @@ ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x bionic-unit-tests-glibc_src_files := \ atexit_test.cpp \ dlfcn_test.cpp \ - dl_test.cpp \ - -bionic-unit-tests-glibc_shared_libraries := \ - libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dl_test.cpp b/tests/dl_test.cpp deleted file mode 100644 index 74c7b510f..000000000 --- a/tests/dl_test.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include -#include -#include -#include -#include - -#include - -extern "C" int main_global_default_serial() { - return 3370318; -} - -extern "C" int main_global_protected_serial() { - return 2716057; -} - -// The following functions are defined in DT_NEEDED -// libdl_preempt_test.so library. - -// This one calls main_global_default_serial -extern "C" int main_global_default_get_serial(); - -// This one calls main_global_protected_serial -extern "C" int main_global_protected_get_serial(); - -// This one calls lib_global_default_serial -extern "C" int lib_global_default_get_serial(); - -// This one calls lib_global_protected_serial -extern "C" int lib_global_protected_get_serial(); - -// This test verifies that the global default function -// main_global_default_serial() is preempted by -// the function defined above. -TEST(dl, main_preempts_global_default) { - ASSERT_EQ(3370318, main_global_default_get_serial()); -} - -// This one makes sure that the global protected -// symbols do not get preempted -TEST(dl, main_does_not_preempt_global_protected) { - ASSERT_EQ(3370318, main_global_protected_get_serial()); -} - -// check same things for lib -TEST(dl, lib_preempts_global_default) { - ASSERT_EQ(3370318, lib_global_default_get_serial()); -} - -TEST(dl, lib_does_not_preempt_global_protected) { - ASSERT_EQ(3370318, lib_global_protected_get_serial()); -} - -// TODO: Add tests for LD_PRELOADs diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index a7fe2f852..e604f5abe 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -499,20 +499,6 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } -TEST(dlfcn, dlsym_df_1_global) { -#if !defined(__arm__) - void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr) << dlerror(); - int (*get_answer)(); - get_answer = reinterpret_cast(dlsym(handle, "dl_df_1_global_get_answer")); - ASSERT_TRUE(get_answer != nullptr) << dlerror(); - ASSERT_EQ(42, get_answer()); - ASSERT_EQ(0, dlclose(handle)); -#else - GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; -#endif -} - TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index f45e5a80f..05e7113ba 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -289,42 +289,6 @@ libtest_atexit_src_files := \ module := libtest_atexit include $(LOCAL_PATH)/Android.build.testlib.mk -# ----------------------------------------------------------------------------- -# This library is used by dl_load test to check symbol preempting -# by main executable -# ----------------------------------------------------------------------------- -libdl_preempt_test_1_src_files := dl_preempt_library_1.cpp - -module := libdl_preempt_test_1 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# This library is used by dl_load test to check symbol preempting -# by libdl_preempt_test_1.so -# ----------------------------------------------------------------------------- -libdl_preempt_test_2_src_files := dl_preempt_library_2.cpp - -module := libdl_preempt_test_2 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# Library with DF_1_GLOBAL -# ----------------------------------------------------------------------------- -# TODO: re-enable arm once b/18137520 or b/18130452 are fixed -ifeq ($(filter $(TARGET_ARCH),arm),) -libdl_test_df_1_global_src_files := dl_df_1_global.cpp -libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global -module := libdl_test_df_1_global -include $(LOCAL_PATH)/Android.build.testlib.mk -endif - -# ----------------------------------------------------------------------------- -# Library using symbol from libdl_test_df_1_global -# ----------------------------------------------------------------------------- -libtest_dlsym_df_1_global_src_files := dl_df_1_use_global.cpp -module := libtest_dlsym_df_1_global -include $(LOCAL_PATH)/Android.build.testlib.mk - # ----------------------------------------------------------------------------- # Library with weak function # ----------------------------------------------------------------------------- diff --git a/tests/libs/dl_df_1_global.cpp b/tests/libs/dl_df_1_global.cpp deleted file mode 100644 index 39856fd50..000000000 --- a/tests/libs/dl_df_1_global.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int dl_df_1_global_get_answer_impl() { - return 42; -} diff --git a/tests/libs/dl_df_1_use_global.cpp b/tests/libs/dl_df_1_use_global.cpp deleted file mode 100644 index e14910d1c..000000000 --- a/tests/libs/dl_df_1_use_global.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int __attribute__((weak)) dl_df_1_global_get_answer_impl() { - return 0; -} - -extern "C" int dl_df_1_global_get_answer() { - return dl_df_1_global_get_answer_impl(); -} diff --git a/tests/libs/dl_preempt_library_1.cpp b/tests/libs/dl_preempt_library_1.cpp deleted file mode 100644 index b4d81d5ac..000000000 --- a/tests/libs/dl_preempt_library_1.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This one should be preempted by the function -// defined in the main executable. -extern "C" int __attribute__((weak)) main_global_default_serial() { - return 2716057; -} - -// Even though this one is defined by the main -// executable it should not be preempted -// because of protected visibility -extern "C" int __attribute__((weak, visibility("protected"))) main_global_protected_serial() { - return 3370318; -} - -extern "C" int main_global_default_get_serial() { - return main_global_default_serial(); -} - -extern "C" int main_global_protected_get_serial() { - return main_global_protected_serial(); -} - -// Trying to preempt functions from a DT_NEEDED .so -extern "C" int lib_global_default_serial() { - return 3370318; -} - -extern "C" int lib_global_protected_serial() { - return 2716057; -} diff --git a/tests/libs/dl_preempt_library_2.cpp b/tests/libs/dl_preempt_library_2.cpp deleted file mode 100644 index 8df9a1667..000000000 --- a/tests/libs/dl_preempt_library_2.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This one should be preempted by the function -// defined in libdl_preempt_test_1.so -extern "C" int __attribute__((weak)) lib_global_default_serial() { - return 2716057; -} - -// Even though this one is defined by -// libdl_preempt_test_1.so it should not be -// preempted because of protected visibility -extern "C" int __attribute__((weak,visibility("protected"))) lib_global_protected_serial() { - return 3370318; -} - -extern "C" int lib_global_default_get_serial() { - return lib_global_default_serial(); -} - -extern "C" int lib_global_protected_get_serial() { - return lib_global_protected_serial(); -} - From 4402804c35c5c5992c728c6f3cee3bdbd325819e Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 21:14:31 -0800 Subject: [PATCH 090/194] Revert "Fix mips build" This reverts commit bf3d5ef5fd240d4c5fbde1b32f9084dbc720840b. Bug: 18222321 Bug: 18211780 Change-Id: I902ed888197b358c77303f1acb6d5ffd7ae6dcd3 --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index f8963b59c..c63ac35bb 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2281,7 +2281,7 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #endif #if defined(__mips__) - if (!mips_relocate_got(this, local_group)) { + if (!mips_relocate_got(this)) { return false; } #endif From eae09772558016836f1356816f4d1d0be498d74c Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 21:15:15 -0800 Subject: [PATCH 091/194] Revert "Remove unnecessary lookups during relocations" This reverts commit 6442dbd3bcadbd5e522465743a8d8cf56338ae1c. Bug: 18222321 Bug: 18211780 Change-Id: I87b18a32238a1f75afe56149221b6691f50d9f56 --- linker/linker.cpp | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index c63ac35bb..eb1a483ae 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -530,11 +530,6 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c // 3. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { - if (local_si == si && si->has_DT_SYMBOLIC) { - // we already did this - skip - return true; - } - DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { @@ -546,6 +541,28 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c }); } + // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) + if (s == nullptr && !si->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope", si->name, name); + s = soinfo_elf_lookup(si, elf_hash, name); + if (s != nullptr) { + *lsi = si; + } + } + + // 5. Dependencies + if (s == nullptr) { + si->get_children().visit([&](soinfo* child) { + DEBUG("%s: looking up %s in %s", si->name, name, child->name); + s = soinfo_elf_lookup(child, elf_hash, name); + if (s != nullptr) { + *lsi = child; + return false; + } + return true; + }); + } + if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", From 00dce525530c5d26c20750863f3e9890b468787a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 21:15:25 -0800 Subject: [PATCH 092/194] Revert "Fix relocation to look for symbols in local group" This reverts commit fd2747bb585fc51b5ad56db09c0e9b66c7091a92. Bug: 18222321 Bug: 18211780 Change-Id: I2d4ebab1e73b7277161af76b99f8249825b22d65 --- linker/linked_list.h | 4 +- linker/linker.cpp | 193 +++++++----------- linker/linker.h | 6 +- tests/dlfcn_test.cpp | 186 ++--------------- .../Android.build.dlopen_check_order_dlsym.mk | 90 -------- ...lopen_check_order_reloc_main_executable.mk | 56 ----- ...build.dlopen_check_order_reloc_siblings.mk | 133 ------------ tests/libs/Android.mk | 75 ++++++- .../libs/dlopen_check_order_reloc_answer.cpp | 23 --- .../dlopen_check_order_reloc_answer_impl.cpp | 19 -- ...dlopen_check_order_reloc_nephew_answer.cpp | 21 -- .../dlopen_check_order_reloc_root_answer.cpp | 21 -- ...pen_check_order_reloc_root_answer_impl.cpp | 19 -- ...m_answer.cpp => dlopen_testlib_answer.cpp} | 4 +- 14 files changed, 162 insertions(+), 688 deletions(-) delete mode 100644 tests/libs/Android.build.dlopen_check_order_dlsym.mk delete mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk delete mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk delete mode 100644 tests/libs/dlopen_check_order_reloc_answer.cpp delete mode 100644 tests/libs/dlopen_check_order_reloc_answer_impl.cpp delete mode 100644 tests/libs/dlopen_check_order_reloc_nephew_answer.cpp delete mode 100644 tests/libs/dlopen_check_order_reloc_root_answer.cpp delete mode 100644 tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp rename tests/libs/{dlopen_check_order_dlsym_answer.cpp => dlopen_testlib_answer.cpp} (87%) diff --git a/linker/linked_list.h b/linker/linked_list.h index 72a32b4ba..4e62e208f 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -86,7 +86,7 @@ class LinkedList { } template - void for_each(F action) const { + void for_each(F action) { visit([&] (T* si) { action(si); return true; @@ -94,7 +94,7 @@ class LinkedList { } template - bool visit(F action) const { + bool visit(F action) { for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { if (!action(e->element)) { return false; diff --git a/linker/linker.cpp b/linker/linker.cpp index eb1a483ae..41557e231 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -415,7 +415,7 @@ int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void return rv; } -static ElfW(Sym)* soinfo_elf_lookup(const soinfo* si, unsigned hash, const char* name) { +static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) { ElfW(Sym)* symtab = si->symtab; TRACE_TYPE(LOOKUP, "SEARCH %s in %s@%p %x %zd", @@ -481,7 +481,7 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -527,21 +527,16 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c } } - // 3. Look for it in the local group - if (s == nullptr) { - local_group.visit([&](soinfo* local_si) { - DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); - s = soinfo_elf_lookup(local_si, elf_hash, name); - if (s != nullptr) { - *lsi = local_si; - return false; - } + /* Look for symbols in the local scope (the object who is + * searching). This happens with C++ templates on x86 for some + * reason. + * + * Notes on weak symbols: + * The ELF specs are ambiguous about treatment of weak definitions in + * dynamic linking. Some systems return the first definition found + * and some the first non-weak definition. This is system dependent. + * Here we return the first definition found for simplicity. */ - return true; - }); - } - - // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) if (s == nullptr && !si->has_DT_SYMBOLIC) { DEBUG("%s: looking up %s in local scope", si->name, name); s = soinfo_elf_lookup(si, elf_hash, name); @@ -550,7 +545,6 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c } } - // 5. Dependencies if (s == nullptr) { si->get_children().visit([&](soinfo* child) { DEBUG("%s: looking up %s in %s", si->name, name, child->name); @@ -649,61 +643,33 @@ typedef linked_list_t StringLinkedList; typedef linked_list_t LoadTaskList; -// This function walks down the tree of soinfo dependencies -// in breadth-first order and -// * calls action(soinfo* si) for each node, and -// * terminates walk if action returns false. -// -// walk_dependencies_tree returns false if walk was terminated -// by the action and true otherwise. -template -static bool walk_dependencies_tree(soinfo* root_soinfos[], size_t root_soinfos_size, F action) { +// This is used by dlsym(3). It performs symbol lookup only within the +// specified soinfo object and its dependencies in breadth first order. +ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { SoinfoLinkedList visit_list; SoinfoLinkedList visited; - for (size_t i = 0; i < root_soinfos_size; ++i) { - visit_list.push_back(root_soinfos[i]); - } - - soinfo* si; - while ((si = visit_list.pop_front()) != nullptr) { - if (visited.contains(si)) { + visit_list.push_back(si); + soinfo* current_soinfo; + while ((current_soinfo = visit_list.pop_front()) != nullptr) { + if (visited.contains(current_soinfo)) { continue; } - if (!action(si)) { - return false; + ElfW(Sym)* result = soinfo_elf_lookup(current_soinfo, elfhash(name), name); + + if (result != nullptr) { + *found = current_soinfo; + return result; } + visited.push_back(current_soinfo); - visited.push_back(si); - - si->get_children().for_each([&](soinfo* child) { + current_soinfo->get_children().for_each([&](soinfo* child) { visit_list.push_back(child); }); } - return true; -} - - -// This is used by dlsym(3). It performs symbol lookup only within the -// specified soinfo object and its dependencies in breadth first order. -ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { - ElfW(Sym)* result = nullptr; - uint32_t elf_hash = elfhash(name); - - - walk_dependencies_tree(&si, 1, [&](soinfo* current_soinfo) { - result = soinfo_elf_lookup(current_soinfo, elf_hash, name); - if (result != nullptr) { - *found = current_soinfo; - return false; - } - - return true; - }); - - return result; + return nullptr; } /* This is used by dlsym(3) to performs a global symbol lookup. If the @@ -933,30 +899,19 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } -static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { +static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], + soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; - for (size_t i = 0; i < library_names_count; ++i) { + for (size_t i = 0; i < library_names_size; ++i) { const char* name = library_names[i]; - load_tasks.push_back(LoadTask::create(name, start_with)); + load_tasks.push_back(LoadTask::create(name, nullptr)); } - // If soinfos array is null allocate one on stack. - // The array is needed in case of failure; for example - // when library_names[] = {libone.so, libtwo.so} and libone.so - // is loaded correctly but libtwo.so failed for some reason. - // In this case libone.so should be unloaded on return. - // See also implementation of failure_guard below. - - if (soinfos == nullptr) { - size_t soinfos_size = sizeof(soinfo*)*library_names_count; - soinfos = reinterpret_cast(alloca(soinfos_size)); - memset(soinfos, 0, soinfos_size); - } - - // list of libraries to link - see step 2. - size_t soinfos_count = 0; + // Libraries added to this list in reverse order so that we can + // start linking from bottom-up - see step 2. + SoinfoLinkedList found_libs; + size_t soinfos_size = 0; auto failure_guard = make_scope_guard([&]() { // Housekeeping @@ -964,7 +919,7 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] LoadTask::deleter(t); }); - for (size_t i = 0; iadd_child(si); } + found_libs.push_front(si); - // When ld_preloads is not null, the first - // ld_preloads_count libs are in fact ld_preloads. - if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { - ld_preloads[soinfos_count] = si; + // When ld_preloads is not null first + // ld_preloads_size libs are in fact ld_preloads. + if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { + ld_preloads[soinfos_size] = si; } - if (soinfos_count < library_names_count) { - soinfos[soinfos_count++] = si; + if (soinfos_sizeflags & FLAG_LINKED) == 0) { - if (!si->LinkImage(local_group, extinfo)) { + if (!si->LinkImage(extinfo)) { return false; } si->flags |= FLAG_LINKED; } - - return true; - }); - - if (linked) { - failure_guard.disable(); } - return linked; + // All is well - found_libs and load_tasks are empty at this point + // and all libs are successfully linked. + failure_guard.disable(); + return true; } static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { @@ -1034,7 +979,7 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex soinfo* si; - if (!find_libraries(nullptr, &name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { + if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { return nullptr; } @@ -1145,7 +1090,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1163,7 +1108,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1422,7 +1367,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1441,7 +1386,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1627,7 +1572,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { +static bool mips_relocate_got(soinfo* si) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1660,7 +1605,7 @@ static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_gro // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -2253,7 +2198,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2272,26 +2217,26 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count, local_group)) { + if (Relocate(rela, rela_count)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count, local_group)) { + if (Relocate(plt_rela, plt_rela_count)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count, local_group)) { + if (Relocate(rel, rel_count)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count, local_group)) { + if (Relocate(plt_rel, plt_rel_count)) { return false; } } @@ -2365,7 +2310,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(g_empty_list, nullptr); + si->LinkImage(nullptr); #endif } @@ -2511,11 +2456,21 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( }); const char* needed_library_names[needed_libraries_count]; + soinfo* needed_library_si[needed_libraries_count]; memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(si, needed_library_names, needed_libraries_count, nullptr, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } + + for (size_t i = 0; iadd_child(needed_library_si[i]); + } + + if (!si->LinkImage(nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2639,7 +2594,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 222aca11e..ebb4793af 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -207,7 +207,7 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); + bool LinkImage(const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); @@ -234,9 +234,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rela)* rela, unsigned count); #else - int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rel)* rel, unsigned count); #endif private: diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index e604f5abe..f1ec0f131 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -162,39 +162,39 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { ASSERT_EQ(1, fn()); } -TEST(dlfcn, dlopen_check_order_dlsym) { +TEST(dlfcn, dlopen_check_order) { // Here is how the test library and its dt_needed // libraries are arranged // - // libtest_check_order_children.so + // libtest_check_order.so // | - // +-> ..._1_left.so + // +-> libtest_check_order_1_left.so // | | - // | +-> ..._a.so + // | +-> libtest_check_order_a.so // | | - // | +-> ...r_b.so + // | +-> libtest_check_order_b.so // | - // +-> ..._2_right.so + // +-> libtest_check_order_2_right.so // | | - // | +-> ..._d.so + // | +-> libtest_check_order_d.so // | | - // | +-> ..._b.so + // | +-> libtest_check_order_b.so // | - // +-> ..._3_c.so + // +-> libtest_check_order_3_c.so // // load order should be (1, 2, 3, a, b, d) // // get_answer() is defined in (2, 3, a, b, c) // get_answer2() is defined in (b, d) - void* sym = dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer"); + void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); ASSERT_TRUE(sym == nullptr); - void* handle = dlopen("libtest_check_order_dlsym.so", RTLD_NOW | RTLD_GLOBAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); + void* handle = dlopen("libtest_check_order.so", RTLD_NOW | RTLD_GLOBAL); + ASSERT_TRUE(handle != nullptr); typedef int (*fn_t) (void); fn_t fn, fn2; - fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer")); + fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); ASSERT_TRUE(fn != NULL) << dlerror(); - fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer2")); + fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); ASSERT_TRUE(fn2 != NULL) << dlerror(); ASSERT_EQ(42, fn()); @@ -202,163 +202,6 @@ TEST(dlfcn, dlopen_check_order_dlsym) { dlclose(handle); } -TEST(dlfcn, dlopen_check_order_reloc_siblings) { - // This is how this one works: - // we lookup and call get_answer which is defined in '_2.so' - // and in turn calls external get_answer_impl() defined in _1.so and in '_[a-f].so' - // the correct _impl() is implemented by '_a.so'; - // - // Note that this is test for RTLD_LOCAL (TODO: test for GLOBAL?) - // - // Here is the picture: - // - // libtest_check_order_reloc_siblings.so - // | - // +-> ..._1.so <- empty - // | | - // | +-> ..._a.so <- exports correct answer_impl() - // | | - // | +-> ..._b.so <- every other letter exporting incorrect one. - // | - // +-> ..._2.so <- empty - // | | - // | +-> ..._c.so - // | | - // | +-> ..._d.so - // | - // +-> ..._3.so <- empty - // | - // +-> ..._e.so - // | - // +-> ..._f.so <- exports get_answer() that calls get_anser_impl(); - // implements incorrect get_answer_impl() - - void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); -#ifdef __BIONIC__ - // TODO: glibc returns nullptr on dlerror() here. Is it bug? - ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); -#endif - - handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); - - typedef int (*fn_t) (void); - fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); - - ASSERT_EQ(0, dlclose(handle)); -} - -TEST(dlfcn, dlopen_check_order_reloc_siblings_with_preload) { - // This test uses the same library as dlopen_check_order_reloc_siblings. - // Unlike dlopen_check_order_reloc_siblings it preloads - // libtest_check_order_reloc_siblings_1.so (first dependency) prior to - // dlopen(libtest_check_order_reloc_siblings.so) - - void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); - handle = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); - - void* handle_for_1 = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle_for_1 != nullptr) << dlerror(); - - handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); - - ASSERT_EQ(0, dlclose(handle_for_1)); - - typedef int (*fn_t) (void); - fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); - - ASSERT_EQ(0, dlclose(handle)); -} - -TEST(dlfcn, dlopen_check_order_reloc_nephew) { - // This is how this one works: - // we lookup and call nephew_get_answer which is defined in '_2.so' - // and in turn calls external get_answer_impl() defined in '_[a-f].so' - // the correct _impl() is implemented by '_a.so'; - // - // Here is the picture: - // - // libtest_check_order_reloc_siblings.so - // | - // +-> ..._1.so <- empty - // | | - // | +-> ..._a.so <- exports correct answer_impl() - // | | - // | +-> ..._b.so <- every other letter exporting incorrect one. - // | - // +-> ..._2.so <- empty - // | | - // | +-> ..._c.so - // | | - // | +-> ..._d.so - // | - // +-> ..._3.so <- nephew_get_answer() that calls get_answer_impl(); - // | - // +-> ..._e.so - // | - // +-> ..._f.so - - void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); -#ifdef __BIONIC__ - // TODO: glibc returns nullptr on dlerror() here. Is it bug? - ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); -#endif - - handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); - - typedef int (*fn_t) (void); - fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_nephew_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); - - ASSERT_EQ(0, dlclose(handle)); -} - -extern "C" int check_order_reloc_root_get_answer_impl() { - return 42; -} - -TEST(dlfcn, dlopen_check_order_reloc_main_executable) { - // This is how this one works: - // we lookup and call get_answer3 which is defined in 'root.so' - // and in turn calls external root_get_answer_impl() defined in _2.so and - // above the correct _impl() is one in the executable. - // - // libtest_check_order_reloc_root.so - // | - // +-> ..._1.so <- empty - // | - // +-> ..._2.so <- gives incorrect answer for answer_main_impl() - // - - void* handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); -#ifdef __BIONIC__ - // TODO: glibc returns nullptr on dlerror() here. Is it bug? - ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_root.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); -#endif - - handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); - - typedef int (*fn_t) (void); - fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_root_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); - - ASSERT_EQ(0, dlclose(handle)); -} - TEST(dlfcn, dlopen_check_rtld_local) { void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym == nullptr); @@ -499,6 +342,7 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.build.dlopen_check_order_dlsym.mk b/tests/libs/Android.build.dlopen_check_order_dlsym.mk deleted file mode 100644 index 73d8c1a83..000000000 --- a/tests/libs/Android.build.dlopen_check_order_dlsym.mk +++ /dev/null @@ -1,90 +0,0 @@ -# -# Copyright (C) 2012 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct load order: -# libtest_check_order_2_right.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_2_right_src_files := \ - dlopen_check_order_dlsym_answer.cpp - -libtest_check_order_dlsym_2_right_cflags := -D__ANSWER=42 -module := libtest_check_order_dlsym_2_right -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_a.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_a_src_files := \ - dlopen_check_order_dlsym_answer.cpp - -libtest_check_order_dlsym_a_cflags := -D__ANSWER=1 -module := libtest_check_order_dlsym_a -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_b.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_b_src_files := \ - dlopen_check_order_dlsym_answer.cpp - -libtest_check_order_dlsym_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 -module := libtest_check_order_dlsym_b -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_c.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_3_c_src_files := \ - dlopen_check_order_dlsym_answer.cpp - -libtest_check_order_dlsym_3_c_cflags := -D__ANSWER=3 -module := libtest_check_order_dlsym_3_c -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_d.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_d_src_files := \ - dlopen_check_order_dlsym_answer.cpp - -libtest_check_order_dlsym_d_shared_libraries := libtest_check_order_dlsym_b -libtest_check_order_dlsym_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 -module := libtest_check_order_dlsym_d -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_left.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_1_left_src_files := \ - empty.cpp - -libtest_check_order_dlsym_1_left_shared_libraries := libtest_check_order_dlsym_a libtest_check_order_dlsym_b - -module := libtest_check_order_dlsym_1_left -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order.so -# ----------------------------------------------------------------------------- -libtest_check_order_dlsym_src_files := \ - empty.cpp - -libtest_check_order_dlsym_shared_libraries := libtest_check_order_dlsym_1_left \ - libtest_check_order_dlsym_2_right libtest_check_order_dlsym_3_c - -module := libtest_check_order_dlsym -include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk b/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk deleted file mode 100644 index 639696b25..000000000 --- a/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk +++ /dev/null @@ -1,56 +0,0 @@ -# -# Copyright (C) 2012 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct relocation order: -# libtest_check_order_reloc_root*.so -# ----------------------------------------------------------------------------- - - -# ----------------------------------------------------------------------------- -# ..._1.so - empty -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_root_1_src_files := \ - empty.cpp - - -module := libtest_check_order_reloc_root_1 -include $(LOCAL_PATH)/Android.build.testlib.mk - - -# ----------------------------------------------------------------------------- -# ..._2.so - this one has the incorrect answer -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_root_2_src_files := \ - dlopen_check_order_reloc_root_answer_impl.cpp - -libtest_check_order_reloc_root_2_cflags := -D__ANSWER=2 - -module := libtest_check_order_reloc_root_2 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_reloc_root.so <- implements get_answer3() -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_root_src_files := \ - dlopen_check_order_reloc_root_answer.cpp - -libtest_check_order_reloc_root_shared_libraries := \ - libtest_check_order_reloc_root_1 \ - libtest_check_order_reloc_root_2 - -module := libtest_check_order_reloc_root -include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk b/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk deleted file mode 100644 index 0f1a2b4da..000000000 --- a/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk +++ /dev/null @@ -1,133 +0,0 @@ -# -# Copyright (C) 2014 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct relocation order: -# libtest_check_order_reloc_siblings*.so -# ----------------------------------------------------------------------------- - -# ----------------------------------------------------------------------------- -# ..._1.so - empty -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_1_src_files := \ - empty.cpp - -libtest_check_order_reloc_siblings_1_shared_libraries := \ - libtest_check_order_reloc_siblings_a \ - libtest_check_order_reloc_siblings_b - -module := libtest_check_order_reloc_siblings_1 -include $(LOCAL_PATH)/Android.build.testlib.mk - - -# ----------------------------------------------------------------------------- -# ..._2.so - empty -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_2_src_files := \ - empty.cpp - -libtest_check_order_reloc_siblings_2_shared_libraries := \ - libtest_check_order_reloc_siblings_c \ - libtest_check_order_reloc_siblings_d - -module := libtest_check_order_reloc_siblings_2 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._3.so - get_answer2(); -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_3_src_files := \ - dlopen_check_order_reloc_nephew_answer.cpp - -libtest_check_order_reloc_siblings_3_shared_libraries := \ - libtest_check_order_reloc_siblings_e \ - libtest_check_order_reloc_siblings_f - -module := libtest_check_order_reloc_siblings_3 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._a.so <- correct impl -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_a_src_files := \ - dlopen_check_order_reloc_answer_impl.cpp - -libtest_check_order_reloc_siblings_a_cflags := -D__ANSWER=42 -module := libtest_check_order_reloc_siblings_a -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._b.so -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_b_src_files := \ - dlopen_check_order_reloc_answer_impl.cpp - -libtest_check_order_reloc_siblings_b_cflags := -D__ANSWER=1 -module := libtest_check_order_reloc_siblings_b -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._c.so -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_c_src_files := \ - dlopen_check_order_reloc_answer_impl.cpp - -libtest_check_order_reloc_siblings_c_cflags := -D__ANSWER=2 -module := libtest_check_order_reloc_siblings_c -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._d.so -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_d_src_files := \ - dlopen_check_order_reloc_answer_impl.cpp - -libtest_check_order_reloc_siblings_d_cflags := -D__ANSWER=3 -module := libtest_check_order_reloc_siblings_d -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._e.so -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_e_src_files := \ - dlopen_check_order_reloc_answer_impl.cpp - -libtest_check_order_reloc_siblings_e_cflags := -D__ANSWER=4 -module := libtest_check_order_reloc_siblings_e -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# ..._f.so <- get_answer() -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_f_src_files := \ - dlopen_check_order_reloc_answer.cpp - -module := libtest_check_order_reloc_siblings_f -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_reloc_siblings.so -# ----------------------------------------------------------------------------- -libtest_check_order_reloc_siblings_src_files := \ - empty.cpp - -libtest_check_order_reloc_siblings_shared_libraries := \ - libtest_check_order_reloc_siblings_1 \ - libtest_check_order_reloc_siblings_2 \ - libtest_check_order_reloc_siblings_3 - -module := libtest_check_order_reloc_siblings -include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 05e7113ba..175a63539 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -21,9 +21,6 @@ common_cppflags += -std=gnu++11 common_additional_dependencies := \ $(LOCAL_PATH)/Android.mk \ $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ - $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk \ - $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk \ - $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk \ $(LOCAL_PATH)/Android.build.testlib.mk \ $(TEST_PATH)/Android.build.mk @@ -153,19 +150,79 @@ module := libtest_nodelete_dt_flags_1 include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- -# Build libtest_check_order_dlsym.so with its dependencies. +# Libraries used by dlfcn tests to verify correct load order: +# libtest_check_order_2_right.so # ----------------------------------------------------------------------------- -include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk +libtest_check_order_2_right_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_2_right_cflags := -D__ANSWER=42 +module := libtest_check_order_2_right +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- -# Build libtest_check_order_siblings.so with its dependencies. +# libtest_check_order_a.so # ----------------------------------------------------------------------------- -include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk +libtest_check_order_a_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_a_cflags := -D__ANSWER=1 +module := libtest_check_order_a +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- -# Build libtest_check_order_root.so with its dependencies. +# libtest_check_order_b.so # ----------------------------------------------------------------------------- -include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk +libtest_check_order_b_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 +module := libtest_check_order_b +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_c.so +# ----------------------------------------------------------------------------- +libtest_check_order_3_c_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_3_c_cflags := -D__ANSWER=3 +module := libtest_check_order_3_c +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_d.so +# ----------------------------------------------------------------------------- +libtest_check_order_d_src_files := \ + dlopen_testlib_answer.cpp + +libtest_check_order_d_shared_libraries := libtest_check_order_b +libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 +module := libtest_check_order_d +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_left.so +# ----------------------------------------------------------------------------- +libtest_check_order_1_left_src_files := \ + empty.cpp + +libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b + +module := libtest_check_order_1_left +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order.so +# ----------------------------------------------------------------------------- +libtest_check_order_src_files := \ + empty.cpp + +libtest_check_order_shared_libraries := libtest_check_order_1_left \ + libtest_check_order_2_right libtest_check_order_3_c + +module := libtest_check_order +include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- # Library with dependency loop used by dlfcn tests diff --git a/tests/libs/dlopen_check_order_reloc_answer.cpp b/tests/libs/dlopen_check_order_reloc_answer.cpp deleted file mode 100644 index 036670bee..000000000 --- a/tests/libs/dlopen_check_order_reloc_answer.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int __attribute__((weak)) check_order_reloc_get_answer_impl() { - return 0; -} - -extern "C" int check_order_reloc_get_answer() { - return check_order_reloc_get_answer_impl(); -} diff --git a/tests/libs/dlopen_check_order_reloc_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_answer_impl.cpp deleted file mode 100644 index 324b905da..000000000 --- a/tests/libs/dlopen_check_order_reloc_answer_impl.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int check_order_reloc_get_answer_impl() { - return __ANSWER; -} diff --git a/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp b/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp deleted file mode 100644 index 065d1bef7..000000000 --- a/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int check_order_reloc_get_answer_impl(); - -extern "C" int check_order_reloc_nephew_get_answer() { - return check_order_reloc_get_answer_impl(); -} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer.cpp b/tests/libs/dlopen_check_order_reloc_root_answer.cpp deleted file mode 100644 index b21abd77a..000000000 --- a/tests/libs/dlopen_check_order_reloc_root_answer.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int check_order_reloc_root_get_answer_impl(); - -extern "C" int check_order_reloc_root_get_answer() { - return check_order_reloc_root_get_answer_impl(); -} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp deleted file mode 100644 index 25fb9aca9..000000000 --- a/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -extern "C" int check_order_reloc_root_get_answer_impl() { - return __ANSWER; -} diff --git a/tests/libs/dlopen_check_order_dlsym_answer.cpp b/tests/libs/dlopen_testlib_answer.cpp similarity index 87% rename from tests/libs/dlopen_check_order_dlsym_answer.cpp rename to tests/libs/dlopen_testlib_answer.cpp index 2ae6cf79e..a4d75046e 100644 --- a/tests/libs/dlopen_check_order_dlsym_answer.cpp +++ b/tests/libs/dlopen_testlib_answer.cpp @@ -14,12 +14,12 @@ * limitations under the License. */ -extern "C" int check_order_dlsym_get_answer() { +extern "C" int dlopen_test_get_answer() { return __ANSWER; } #ifdef __ANSWER2 -extern "C" int check_order_dlsym_get_answer2() { +extern "C" int dlopen_test_get_answer2() { return __ANSWER2; } #endif From 69c5d108a5cb44167a04d42ffdad6a39648ed235 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 22:08:31 -0800 Subject: [PATCH 093/194] Revert "Add RTLD_NODELETE flag support" This reverts commit c87f65d2cd0690d81665f8b241c1d763f72b6f80. Bug: 18222321 Bug: 18211780 Change-Id: I00252e26a28a41ab9f1e2dd3b32f0f80d86297f1 --- libc/include/dlfcn.h | 1 - linker/linker.cpp | 16 +---- linker/linker.h | 18 +++-- tests/dlfcn_test.cpp | 80 ----------------------- tests/libs/Android.mk | 29 -------- tests/libs/dlopen_nodelete_1.cpp | 31 --------- tests/libs/dlopen_nodelete_2.cpp | 31 --------- tests/libs/dlopen_nodelete_dt_flags_1.cpp | 30 --------- 8 files changed, 10 insertions(+), 226 deletions(-) delete mode 100644 tests/libs/dlopen_nodelete_1.cpp delete mode 100644 tests/libs/dlopen_nodelete_2.cpp delete mode 100644 tests/libs/dlopen_nodelete_dt_flags_1.cpp diff --git a/libc/include/dlfcn.h b/libc/include/dlfcn.h index afa76878f..8dde08cf5 100644 --- a/libc/include/dlfcn.h +++ b/libc/include/dlfcn.h @@ -64,7 +64,6 @@ enum { RTLD_GLOBAL = 2, #endif RTLD_NOLOAD = 4, - RTLD_NODELETE = 0x01000, }; #if defined (__LP64__) diff --git a/linker/linker.cpp b/linker/linker.cpp index 41557e231..636541297 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -987,11 +987,6 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex } static void soinfo_unload(soinfo* si) { - if (!si->can_unload()) { - TRACE("not unloading '%s' - the binary is flagged with NODELETE", si->name); - return; - } - if (si->ref_count == 1) { TRACE("unloading '%s'", si->name); si->CallDestructors(); @@ -1050,7 +1045,7 @@ void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) { } soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { - if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NODELETE|RTLD_NOLOAD)) != 0) { + if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NOLOAD)) != 0) { DL_ERR("invalid flags to dlopen: %x", flags); return nullptr; } @@ -1813,9 +1808,6 @@ const char* soinfo::get_string(ElfW(Word) index) const { return strtab + index; } -bool soinfo::can_unload() const { - return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; -} /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2119,13 +2111,9 @@ bool soinfo::PrelinkImage() { if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { rtld_flags |= RTLD_GLOBAL; } - - if ((d->d_un.d_val & DF_1_NODELETE) != 0) { - rtld_flags |= RTLD_NODELETE; - } // TODO: Implement other flags - if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { + if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL)) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; diff --git a/linker/linker.h b/linker/linker.h index ebb4793af..6329efda6 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -134,7 +134,7 @@ struct soinfo { #endif soinfo* next; - uint32_t flags; + unsigned flags; private: const char* strtab; @@ -143,8 +143,8 @@ struct soinfo { size_t nbucket; size_t nchain; - uint32_t* bucket; - uint32_t* chain; + unsigned* bucket; + unsigned* chain; #if defined(__mips__) || !defined(__LP64__) // This is only used by mips and mips64, but needs to be here for @@ -179,12 +179,12 @@ struct soinfo { #if defined(__arm__) // ARM EABI section used for stack unwinding. - uint32_t* ARM_exidx; + unsigned* ARM_exidx; size_t ARM_exidx_count; #elif defined(__mips__) - uint32_t mips_symtabno; - uint32_t mips_local_gotno; - uint32_t mips_gotsym; + unsigned mips_symtabno; + unsigned mips_local_gotno; + unsigned mips_gotsym; #endif size_t ref_count; @@ -224,12 +224,10 @@ struct soinfo { ElfW(Addr) resolve_symbol_address(ElfW(Sym)* s); const char* get_string(ElfW(Word) index) const; - bool can_unload() const; bool inline has_min_version(uint32_t min_version) const { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; } - private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); @@ -260,7 +258,7 @@ struct soinfo { friend soinfo* get_libdl_info(); }; -soinfo* get_libdl_info(); +extern soinfo* get_libdl_info(); void do_android_get_LD_LIBRARY_PATH(char*, size_t); void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index f1ec0f131..c9c856a37 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -232,15 +232,10 @@ TEST(dlfcn, dlopen_check_rtld_global) { ASSERT_TRUE(sym == nullptr); void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym != nullptr) << dlerror(); ASSERT_TRUE(reinterpret_cast(sym)()); dlclose(handle); - - // RTLD_GLOBAL implies RTLD_NODELETE, let's check that - void* sym_after_dlclose = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_EQ(sym, sym_after_dlclose); } // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> @@ -268,81 +263,6 @@ TEST(dlfcn, dlopen_check_loop) { #endif } -TEST(dlfcn, dlopen_nodelete) { - static bool is_unloaded = false; - - void* handle = dlopen("libtest_nodelete_1.so", RTLD_NOW | RTLD_NODELETE); - ASSERT_TRUE(handle != nullptr) << dlerror(); - void (*set_unload_flag_ptr)(bool*); - set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_set_unload_flag_ptr")); - ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); - set_unload_flag_ptr(&is_unloaded); - - uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); - ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); - ASSERT_EQ(1729U, *taxicab_number); - *taxicab_number = 2; - - dlclose(handle); - ASSERT_TRUE(!is_unloaded); - - uint32_t* taxicab_number_after_dlclose = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); - ASSERT_EQ(taxicab_number_after_dlclose, taxicab_number); - ASSERT_EQ(2U, *taxicab_number_after_dlclose); - - - handle = dlopen("libtest_nodelete_1.so", RTLD_NOW); - uint32_t* taxicab_number2 = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); - ASSERT_EQ(taxicab_number2, taxicab_number); - - ASSERT_EQ(2U, *taxicab_number2); - - dlclose(handle); - ASSERT_TRUE(!is_unloaded); -} - -TEST(dlfcn, dlopen_nodelete_on_second_dlopen) { - static bool is_unloaded = false; - - void* handle = dlopen("libtest_nodelete_2.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr) << dlerror(); - void (*set_unload_flag_ptr)(bool*); - set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_set_unload_flag_ptr")); - ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); - set_unload_flag_ptr(&is_unloaded); - - uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_taxicab_number")); - ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); - - ASSERT_EQ(1729U, *taxicab_number); - *taxicab_number = 2; - - // This RTLD_NODELETE should be ignored - void* handle1 = dlopen("libtest_nodelete_2.so", RTLD_NOW | RTLD_NODELETE); - ASSERT_TRUE(handle1 != nullptr) << dlerror(); - ASSERT_EQ(handle, handle1); - - dlclose(handle1); - dlclose(handle); - - ASSERT_TRUE(is_unloaded); -} - -TEST(dlfcn, dlopen_nodelete_dt_flags_1) { - static bool is_unloaded = false; - - void* handle = dlopen("libtest_nodelete_dt_flags_1.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr) << dlerror(); - void (*set_unload_flag_ptr)(bool*); - set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_dt_flags_1_set_unload_flag_ptr")); - ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); - set_unload_flag_ptr(&is_unloaded); - - dlclose(handle); - ASSERT_TRUE(!is_unloaded); -} - - TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 175a63539..af3e070a8 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -120,35 +120,6 @@ libtest_simple_src_files := \ module := libtest_simple include $(LOCAL_PATH)/Android.build.testlib.mk -# ----------------------------------------------------------------------------- -# Library used by dlfcn nodelete tests -# ----------------------------------------------------------------------------- -libtest_nodelete_1_src_files := \ - dlopen_nodelete_1.cpp - -module := libtest_nodelete_1 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# Library used by dlfcn nodelete tests -# ----------------------------------------------------------------------------- -libtest_nodelete_2_src_files := \ - dlopen_nodelete_2.cpp - -module := libtest_nodelete_2 -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# Library used by dlfcn nodelete tests -# ----------------------------------------------------------------------------- -libtest_nodelete_dt_flags_1_src_files := \ - dlopen_nodelete_dt_flags_1.cpp - -libtest_nodelete_dt_flags_1_ldflags := -Wl,-z,nodelete - -module := libtest_nodelete_dt_flags_1 -include $(LOCAL_PATH)/Android.build.testlib.mk - # ----------------------------------------------------------------------------- # Libraries used by dlfcn tests to verify correct load order: # libtest_check_order_2_right.so diff --git a/tests/libs/dlopen_nodelete_1.cpp b/tests/libs/dlopen_nodelete_1.cpp deleted file mode 100644 index 943897815..000000000 --- a/tests/libs/dlopen_nodelete_1.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -uint32_t dlopen_nodelete_1_taxicab_number = 1729; -static bool* unload_flag_ptr = nullptr; - -extern "C" void dlopen_nodelete_1_set_unload_flag_ptr(bool* ptr) { - unload_flag_ptr = ptr; -} - -static void __attribute__((destructor)) unload_guard() { - if (unload_flag_ptr != nullptr) { - *unload_flag_ptr = true; - } -} diff --git a/tests/libs/dlopen_nodelete_2.cpp b/tests/libs/dlopen_nodelete_2.cpp deleted file mode 100644 index b5ab5c1ae..000000000 --- a/tests/libs/dlopen_nodelete_2.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -uint32_t dlopen_nodelete_2_taxicab_number = 1729; -static bool* unload_flag_ptr = nullptr; - -extern "C" void dlopen_nodelete_2_set_unload_flag_ptr(bool* ptr) { - unload_flag_ptr = ptr; -} - -static void __attribute__((destructor)) unload_guard() { - if (unload_flag_ptr != nullptr) { - *unload_flag_ptr = true; - } -} diff --git a/tests/libs/dlopen_nodelete_dt_flags_1.cpp b/tests/libs/dlopen_nodelete_dt_flags_1.cpp deleted file mode 100644 index 39c0a7ea6..000000000 --- a/tests/libs/dlopen_nodelete_dt_flags_1.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -static bool* unload_flag_ptr = nullptr; - -extern "C" void dlopen_nodelete_dt_flags_1_set_unload_flag_ptr(bool* ptr) { - unload_flag_ptr = ptr; -} - -static void __attribute__((destructor)) unload_guard() { - if (unload_flag_ptr != nullptr) { - *unload_flag_ptr = true; - } -} From 9d3382d97a2cdc8c8f78c7825ece16f09292fc36 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 3 Nov 2014 22:12:19 -0800 Subject: [PATCH 094/194] Revert "Fix dlsym() to take into account RTLD_GLOBAL/LOCAL" This reverts commit c85e82dde5c4b2accc50a9e17740b9005dfbae6a. Bug: 18222321 Bug: 18211780 Change-Id: I32f4048bd5ea85dc8a3dfccce8cf141b241ab692 --- linker/dlfcn.cpp | 2 +- linker/linker.cpp | 48 ++++++++++------------------ linker/linker.h | 4 +-- tests/dlfcn_test.cpp | 36 --------------------- tests/libs/dlopen_testlib_simple.cpp | 2 +- 5 files changed, 20 insertions(+), 72 deletions(-) diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 367179d8d..3eb5bea22 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -232,7 +232,7 @@ static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 }; static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; #endif -static soinfo __libdl_info("libdl.so", nullptr, 0, RTLD_GLOBAL); +static soinfo __libdl_info("libdl.so", nullptr, 0); // This is used by the dynamic linker. Every process gets these symbols for free. soinfo* get_libdl_info() { diff --git a/linker/linker.cpp b/linker/linker.cpp index 636541297..35c8cbdc8 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,13 +282,13 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; } - soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset, rtld_flags); + soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset); sonext->next = si; sonext = si; @@ -452,7 +452,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return nullptr; } -soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags) { +soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset) { memset(this, 0, sizeof(*this)); strlcpy(this->name, name, sizeof(this->name)); @@ -464,8 +464,6 @@ soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offs this->st_ino = file_stat->st_ino; this->file_offset = file_offset; } - - this->rtld_flags = rtld_flags; } static unsigned elfhash(const char* _name) { @@ -686,10 +684,6 @@ ElfW(Sym)* dlsym_linear_lookup(const char* name, soinfo** found, soinfo* start) ElfW(Sym)* s = nullptr; for (soinfo* si = start; (s == nullptr) && (si != nullptr); si = si->next) { - if ((si->get_rtld_flags() & RTLD_GLOBAL) == 0) { - continue; - } - s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { *found = si; @@ -780,7 +774,7 @@ static void for_each_dt_needed(const soinfo* si, F action) { } } -static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { +static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { int fd = -1; off64_t file_offset = 0; ScopedFd file_guard(-1); @@ -825,7 +819,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld } } - if ((rtld_flags & RTLD_NOLOAD) != 0) { + if ((dlflags & RTLD_NOLOAD) != 0) { DL_ERR("library \"%s\" wasn't loaded and RTLD_NOLOAD prevented it", name); return nullptr; } @@ -836,7 +830,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld return nullptr; } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset, rtld_flags); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset); if (si == nullptr) { return nullptr; } @@ -868,7 +862,7 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { +static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { soinfo* si = find_loaded_library_by_name(name); @@ -876,7 +870,7 @@ static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, // of this fact is done by load_library. if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(load_tasks, name, rtld_flags, extinfo); + si = load_library(load_tasks, name, dlflags, extinfo); } return si; @@ -900,7 +894,7 @@ static bool is_recursive(soinfo* si, soinfo* parent) { } static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { + soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; for (size_t i = 0; i < library_names_size; ++i) { @@ -926,7 +920,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam // Step 1: load and pre-link all DT_NEEDED libraries in breadth first order. for (LoadTask::unique_ptr task(load_tasks.pop_front()); task.get() != nullptr; task.reset(load_tasks.pop_front())) { - soinfo* si = find_library_internal(load_tasks, task->get_name(), rtld_flags, extinfo); + soinfo* si = find_library_internal(load_tasks, task->get_name(), dlflags, extinfo); if (si == nullptr) { return false; } @@ -971,7 +965,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam return true; } -static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { +static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { if (name == nullptr) { somain->ref_count++; return somain; @@ -979,7 +973,7 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex soinfo* si; - if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { + if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { return nullptr; } @@ -1764,14 +1758,6 @@ off64_t soinfo::get_file_offset() { return 0; } -int soinfo::get_rtld_flags() { - if (has_min_version(1)) { - return rtld_flags; - } - - return 0; -} - // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -2289,7 +2275,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { return; } - soinfo* si = soinfo_alloc("[vdso]", nullptr, 0, 0); + soinfo* si = soinfo_alloc("[vdso]", nullptr, 0); si->phdr = reinterpret_cast(reinterpret_cast(ehdr_vdso) + ehdr_vdso->e_phoff); si->phnum = ehdr_vdso->e_phnum; @@ -2310,7 +2296,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { #else #define LINKER_PATH "/system/bin/linker" #endif -static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0, 0); +static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0); /* gdb expects the linker to be in the debug shared object list. * Without this, gdb has trouble locating the linker's ".text" @@ -2374,7 +2360,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( INFO("[ android linker & debugger ]"); - soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0, RTLD_GLOBAL); + soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); if (si == nullptr) { exit(EXIT_FAILURE); } @@ -2449,7 +2435,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2562,7 +2548,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_addr); ElfW(Phdr)* phdr = reinterpret_cast(linker_addr + elf_hdr->e_phoff); - soinfo linker_so("[dynamic linker]", nullptr, 0, 0); + soinfo linker_so("[dynamic linker]", nullptr, 0); // If the linker is not acting as PT_INTERP entry_point is equal to // _start. Which means that the linker is running as an executable and diff --git a/linker/linker.h b/linker/linker.h index 6329efda6..fa38c7fef 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -201,7 +201,7 @@ struct soinfo { #endif bool has_DT_SYMBOLIC; - soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags); + soinfo(const char* name, const struct stat* file_stat, off64_t file_offset); void CallConstructors(); void CallDestructors(); @@ -216,8 +216,6 @@ struct soinfo { dev_t get_st_dev(); off64_t get_file_offset(); - int get_rtld_flags(); - soinfo_list_t& get_children(); soinfo_list_t& get_parents(); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index c9c856a37..e24af13c0 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -202,42 +202,6 @@ TEST(dlfcn, dlopen_check_order) { dlclose(handle); } -TEST(dlfcn, dlopen_check_rtld_local) { - void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym == nullptr); - - // implicit RTLD_LOCAL - void* handle = dlopen("libtest_simple.so", RTLD_NOW); - sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym == nullptr); - ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); - sym = dlsym(handle, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym != nullptr); - ASSERT_TRUE(reinterpret_cast(sym)()); - dlclose(handle); - - // explicit RTLD_LOCAL - handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_LOCAL); - sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym == nullptr); - ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); - sym = dlsym(handle, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym != nullptr); - ASSERT_TRUE(reinterpret_cast(sym)()); - dlclose(handle); -} - -TEST(dlfcn, dlopen_check_rtld_global) { - void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym == nullptr); - - void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); - sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); - ASSERT_TRUE(sym != nullptr) << dlerror(); - ASSERT_TRUE(reinterpret_cast(sym)()); - dlclose(handle); -} - // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> // libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> // libtest_with_dependency_loop_a.so diff --git a/tests/libs/dlopen_testlib_simple.cpp b/tests/libs/dlopen_testlib_simple.cpp index 32269557a..bf750b2a6 100644 --- a/tests/libs/dlopen_testlib_simple.cpp +++ b/tests/libs/dlopen_testlib_simple.cpp @@ -19,6 +19,6 @@ uint32_t dlopen_testlib_taxicab_number = 1729; -extern "C" bool dlopen_testlib_simple_func() { +bool dlopen_testlib_simple_func() { return true; } From 68a555b57e2bed1292bf28609be693a95b5fdc6b Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:37:19 -0800 Subject: [PATCH 095/194] Revert "Revert "Fix dlsym() to take into account RTLD_GLOBAL/LOCAL"" This reverts commit 9d3382d97a2cdc8c8f78c7825ece16f09292fc36. --- linker/dlfcn.cpp | 2 +- linker/linker.cpp | 48 ++++++++++++++++++---------- linker/linker.h | 4 ++- tests/dlfcn_test.cpp | 36 +++++++++++++++++++++ tests/libs/dlopen_testlib_simple.cpp | 2 +- 5 files changed, 72 insertions(+), 20 deletions(-) diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 3eb5bea22..367179d8d 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -232,7 +232,7 @@ static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 }; static unsigned g_libdl_chains[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; #endif -static soinfo __libdl_info("libdl.so", nullptr, 0); +static soinfo __libdl_info("libdl.so", nullptr, 0, RTLD_GLOBAL); // This is used by the dynamic linker. Every process gets these symbols for free. soinfo* get_libdl_info() { diff --git a/linker/linker.cpp b/linker/linker.cpp index 60dabacbe..eadfe5efe 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,13 +282,13 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; } - soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset); + soinfo* si = new (g_soinfo_allocator.alloc()) soinfo(name, file_stat, file_offset, rtld_flags); sonext->next = si; sonext = si; @@ -452,7 +452,7 @@ static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) return nullptr; } -soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset) { +soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags) { memset(this, 0, sizeof(*this)); strlcpy(this->name, name, sizeof(this->name)); @@ -464,6 +464,8 @@ soinfo::soinfo(const char* name, const struct stat* file_stat, off64_t file_offs this->st_ino = file_stat->st_ino; this->file_offset = file_offset; } + + this->rtld_flags = rtld_flags; } static unsigned elfhash(const char* _name) { @@ -684,6 +686,10 @@ ElfW(Sym)* dlsym_linear_lookup(const char* name, soinfo** found, soinfo* start) ElfW(Sym)* s = nullptr; for (soinfo* si = start; (s == nullptr) && (si != nullptr); si = si->next) { + if ((si->get_rtld_flags() & RTLD_GLOBAL) == 0) { + continue; + } + s = soinfo_elf_lookup(si, elf_hash, name); if (s != nullptr) { *found = si; @@ -774,7 +780,7 @@ static void for_each_dt_needed(const soinfo* si, F action) { } } -static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { int fd = -1; off64_t file_offset = 0; ScopedFd file_guard(-1); @@ -819,7 +825,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl } } - if ((dlflags & RTLD_NOLOAD) != 0) { + if ((rtld_flags & RTLD_NOLOAD) != 0) { DL_ERR("library \"%s\" wasn't loaded and RTLD_NOLOAD prevented it", name); return nullptr; } @@ -830,7 +836,7 @@ static soinfo* load_library(LoadTaskList& load_tasks, const char* name, int dlfl return nullptr; } - soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset); + soinfo* si = soinfo_alloc(SEARCH_NAME(name), &file_stat, file_offset, rtld_flags); if (si == nullptr) { return nullptr; } @@ -862,7 +868,7 @@ static soinfo *find_loaded_library_by_name(const char* name) { return nullptr; } -static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, int rtld_flags, const android_dlextinfo* extinfo) { soinfo* si = find_loaded_library_by_name(name); @@ -870,7 +876,7 @@ static soinfo* find_library_internal(LoadTaskList& load_tasks, const char* name, // of this fact is done by load_library. if (si == nullptr) { TRACE("[ '%s' has not been found by name. Trying harder...]", name); - si = load_library(load_tasks, name, dlflags, extinfo); + si = load_library(load_tasks, name, rtld_flags, extinfo); } return si; @@ -894,7 +900,7 @@ static bool is_recursive(soinfo* si, soinfo* parent) { } static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int dlflags, const android_dlextinfo* extinfo) { + soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; for (size_t i = 0; i < library_names_size; ++i) { @@ -920,7 +926,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam // Step 1: load and pre-link all DT_NEEDED libraries in breadth first order. for (LoadTask::unique_ptr task(load_tasks.pop_front()); task.get() != nullptr; task.reset(load_tasks.pop_front())) { - soinfo* si = find_library_internal(load_tasks, task->get_name(), dlflags, extinfo); + soinfo* si = find_library_internal(load_tasks, task->get_name(), rtld_flags, extinfo); if (si == nullptr) { return false; } @@ -965,7 +971,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam return true; } -static soinfo* find_library(const char* name, int dlflags, const android_dlextinfo* extinfo) { +static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { if (name == nullptr) { somain->ref_count++; return somain; @@ -973,7 +979,7 @@ static soinfo* find_library(const char* name, int dlflags, const android_dlextin soinfo* si; - if (!find_libraries(&name, 1, &si, nullptr, 0, dlflags, extinfo)) { + if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { return nullptr; } @@ -1758,6 +1764,14 @@ off64_t soinfo::get_file_offset() { return 0; } +int soinfo::get_rtld_flags() { + if (has_min_version(1)) { + return rtld_flags; + } + + return 0; +} + // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -2275,7 +2289,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { return; } - soinfo* si = soinfo_alloc("[vdso]", nullptr, 0); + soinfo* si = soinfo_alloc("[vdso]", nullptr, 0, 0); si->phdr = reinterpret_cast(reinterpret_cast(ehdr_vdso) + ehdr_vdso->e_phoff); si->phnum = ehdr_vdso->e_phnum; @@ -2296,7 +2310,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { #else #define LINKER_PATH "/system/bin/linker" #endif -static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0); +static soinfo linker_soinfo_for_gdb(LINKER_PATH, nullptr, 0, 0); /* gdb expects the linker to be in the debug shared object list. * Without this, gdb has trouble locating the linker's ".text" @@ -2360,7 +2374,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( INFO("[ android linker & debugger ]"); - soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0); + soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0, RTLD_GLOBAL); if (si == nullptr) { exit(EXIT_FAILURE); } @@ -2435,7 +2449,7 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, 0, nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2548,7 +2562,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { ElfW(Ehdr)* elf_hdr = reinterpret_cast(linker_addr); ElfW(Phdr)* phdr = reinterpret_cast(linker_addr + elf_hdr->e_phoff); - soinfo linker_so("[dynamic linker]", nullptr, 0); + soinfo linker_so("[dynamic linker]", nullptr, 0, 0); // If the linker is not acting as PT_INTERP entry_point is equal to // _start. Which means that the linker is running as an executable and diff --git a/linker/linker.h b/linker/linker.h index fa38c7fef..6329efda6 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -201,7 +201,7 @@ struct soinfo { #endif bool has_DT_SYMBOLIC; - soinfo(const char* name, const struct stat* file_stat, off64_t file_offset); + soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags); void CallConstructors(); void CallDestructors(); @@ -216,6 +216,8 @@ struct soinfo { dev_t get_st_dev(); off64_t get_file_offset(); + int get_rtld_flags(); + soinfo_list_t& get_children(); soinfo_list_t& get_parents(); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 504aca3fa..1bf186b4b 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -202,6 +202,42 @@ TEST(dlfcn, dlopen_check_order) { dlclose(handle); } +TEST(dlfcn, dlopen_check_rtld_local) { + void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + + // implicit RTLD_LOCAL + void* handle = dlopen("libtest_simple.so", RTLD_NOW); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); + sym = dlsym(handle, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); + + // explicit RTLD_LOCAL + handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_LOCAL); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + ASSERT_SUBSTR("undefined symbol: dlopen_testlib_simple_func", dlerror()); + sym = dlsym(handle, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); +} + +TEST(dlfcn, dlopen_check_rtld_global) { + void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym == nullptr); + + void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); + sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_TRUE(sym != nullptr) << dlerror(); + ASSERT_TRUE(reinterpret_cast(sym)()); + dlclose(handle); +} + // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> // libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> // libtest_with_dependency_loop_a.so diff --git a/tests/libs/dlopen_testlib_simple.cpp b/tests/libs/dlopen_testlib_simple.cpp index bf750b2a6..32269557a 100644 --- a/tests/libs/dlopen_testlib_simple.cpp +++ b/tests/libs/dlopen_testlib_simple.cpp @@ -19,6 +19,6 @@ uint32_t dlopen_testlib_taxicab_number = 1729; -bool dlopen_testlib_simple_func() { +extern "C" bool dlopen_testlib_simple_func() { return true; } From 7ca96a075b778f1fa2ad265350879238cbcb4d09 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:37:28 -0800 Subject: [PATCH 096/194] Revert "Revert "Add RTLD_NODELETE flag support"" This reverts commit 69c5d108a5cb44167a04d42ffdad6a39648ed235. --- libc/include/dlfcn.h | 1 + linker/linker.cpp | 16 ++++- linker/linker.h | 18 ++--- tests/dlfcn_test.cpp | 80 +++++++++++++++++++++++ tests/libs/Android.mk | 29 ++++++++ tests/libs/dlopen_nodelete_1.cpp | 31 +++++++++ tests/libs/dlopen_nodelete_2.cpp | 31 +++++++++ tests/libs/dlopen_nodelete_dt_flags_1.cpp | 30 +++++++++ 8 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 tests/libs/dlopen_nodelete_1.cpp create mode 100644 tests/libs/dlopen_nodelete_2.cpp create mode 100644 tests/libs/dlopen_nodelete_dt_flags_1.cpp diff --git a/libc/include/dlfcn.h b/libc/include/dlfcn.h index 8dde08cf5..afa76878f 100644 --- a/libc/include/dlfcn.h +++ b/libc/include/dlfcn.h @@ -64,6 +64,7 @@ enum { RTLD_GLOBAL = 2, #endif RTLD_NOLOAD = 4, + RTLD_NODELETE = 0x01000, }; #if defined (__LP64__) diff --git a/linker/linker.cpp b/linker/linker.cpp index eadfe5efe..9ae853cc2 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -987,6 +987,11 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex } static void soinfo_unload(soinfo* si) { + if (!si->can_unload()) { + TRACE("not unloading '%s' - the binary is flagged with NODELETE", si->name); + return; + } + if (si->ref_count == 1) { TRACE("unloading '%s'", si->name); si->CallDestructors(); @@ -1045,7 +1050,7 @@ void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) { } soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { - if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NOLOAD)) != 0) { + if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NODELETE|RTLD_NOLOAD)) != 0) { DL_ERR("invalid flags to dlopen: %x", flags); return nullptr; } @@ -1808,6 +1813,9 @@ const char* soinfo::get_string(ElfW(Word) index) const { return strtab + index; } +bool soinfo::can_unload() const { + return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; +} /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2111,9 +2119,13 @@ bool soinfo::PrelinkImage() { if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { rtld_flags |= RTLD_GLOBAL; } + + if ((d->d_un.d_val & DF_1_NODELETE) != 0) { + rtld_flags |= RTLD_NODELETE; + } // TODO: Implement other flags - if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL)) != 0) { + if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; diff --git a/linker/linker.h b/linker/linker.h index 6329efda6..ebb4793af 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -134,7 +134,7 @@ struct soinfo { #endif soinfo* next; - unsigned flags; + uint32_t flags; private: const char* strtab; @@ -143,8 +143,8 @@ struct soinfo { size_t nbucket; size_t nchain; - unsigned* bucket; - unsigned* chain; + uint32_t* bucket; + uint32_t* chain; #if defined(__mips__) || !defined(__LP64__) // This is only used by mips and mips64, but needs to be here for @@ -179,12 +179,12 @@ struct soinfo { #if defined(__arm__) // ARM EABI section used for stack unwinding. - unsigned* ARM_exidx; + uint32_t* ARM_exidx; size_t ARM_exidx_count; #elif defined(__mips__) - unsigned mips_symtabno; - unsigned mips_local_gotno; - unsigned mips_gotsym; + uint32_t mips_symtabno; + uint32_t mips_local_gotno; + uint32_t mips_gotsym; #endif size_t ref_count; @@ -224,10 +224,12 @@ struct soinfo { ElfW(Addr) resolve_symbol_address(ElfW(Sym)* s); const char* get_string(ElfW(Word) index) const; + bool can_unload() const; bool inline has_min_version(uint32_t min_version) const { return (flags & FLAG_NEW_SOINFO) != 0 && version >= min_version; } + private: void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); @@ -258,7 +260,7 @@ struct soinfo { friend soinfo* get_libdl_info(); }; -extern soinfo* get_libdl_info(); +soinfo* get_libdl_info(); void do_android_get_LD_LIBRARY_PATH(char*, size_t); void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path); diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 1bf186b4b..1d7c29a54 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -232,10 +232,15 @@ TEST(dlfcn, dlopen_check_rtld_global) { ASSERT_TRUE(sym == nullptr); void* handle = dlopen("libtest_simple.so", RTLD_NOW | RTLD_GLOBAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym != nullptr) << dlerror(); ASSERT_TRUE(reinterpret_cast(sym)()); dlclose(handle); + + // RTLD_GLOBAL implies RTLD_NODELETE, let's check that + void* sym_after_dlclose = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); + ASSERT_EQ(sym, sym_after_dlclose); } // libtest_with_dependency_loop.so -> libtest_with_dependency_loop_a.so -> @@ -263,6 +268,81 @@ TEST(dlfcn, dlopen_check_loop) { #endif } +TEST(dlfcn, dlopen_nodelete) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_1.so", RTLD_NOW | RTLD_NODELETE); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); + ASSERT_EQ(1729U, *taxicab_number); + *taxicab_number = 2; + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); + + uint32_t* taxicab_number_after_dlclose = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_EQ(taxicab_number_after_dlclose, taxicab_number); + ASSERT_EQ(2U, *taxicab_number_after_dlclose); + + + handle = dlopen("libtest_nodelete_1.so", RTLD_NOW); + uint32_t* taxicab_number2 = reinterpret_cast(dlsym(handle, "dlopen_nodelete_1_taxicab_number")); + ASSERT_EQ(taxicab_number2, taxicab_number); + + ASSERT_EQ(2U, *taxicab_number2); + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); +} + +TEST(dlfcn, dlopen_nodelete_on_second_dlopen) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_2.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + uint32_t* taxicab_number = reinterpret_cast(dlsym(handle, "dlopen_nodelete_2_taxicab_number")); + ASSERT_TRUE(taxicab_number != nullptr) << dlerror(); + + ASSERT_EQ(1729U, *taxicab_number); + *taxicab_number = 2; + + // This RTLD_NODELETE should be ignored + void* handle1 = dlopen("libtest_nodelete_2.so", RTLD_NOW | RTLD_NODELETE); + ASSERT_TRUE(handle1 != nullptr) << dlerror(); + ASSERT_EQ(handle, handle1); + + dlclose(handle1); + dlclose(handle); + + ASSERT_TRUE(is_unloaded); +} + +TEST(dlfcn, dlopen_nodelete_dt_flags_1) { + static bool is_unloaded = false; + + void* handle = dlopen("libtest_nodelete_dt_flags_1.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void (*set_unload_flag_ptr)(bool*); + set_unload_flag_ptr = reinterpret_cast(dlsym(handle, "dlopen_nodelete_dt_flags_1_set_unload_flag_ptr")); + ASSERT_TRUE(set_unload_flag_ptr != nullptr) << dlerror(); + set_unload_flag_ptr(&is_unloaded); + + dlclose(handle); + ASSERT_TRUE(!is_unloaded); +} + + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index e38f3dc11..67f6a3732 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -120,6 +120,35 @@ libtest_simple_src_files := \ module := libtest_simple include $(LOCAL_PATH)/Android.build.testlib.mk +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_1_src_files := \ + dlopen_nodelete_1.cpp + +module := libtest_nodelete_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_2_src_files := \ + dlopen_nodelete_2.cpp + +module := libtest_nodelete_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library used by dlfcn nodelete tests +# ----------------------------------------------------------------------------- +libtest_nodelete_dt_flags_1_src_files := \ + dlopen_nodelete_dt_flags_1.cpp + +libtest_nodelete_dt_flags_1_ldflags := -Wl,-z,nodelete + +module := libtest_nodelete_dt_flags_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + # ----------------------------------------------------------------------------- # Libraries used by dlfcn tests to verify correct load order: # libtest_check_order_2_right.so diff --git a/tests/libs/dlopen_nodelete_1.cpp b/tests/libs/dlopen_nodelete_1.cpp new file mode 100644 index 000000000..943897815 --- /dev/null +++ b/tests/libs/dlopen_nodelete_1.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +uint32_t dlopen_nodelete_1_taxicab_number = 1729; +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_1_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} diff --git a/tests/libs/dlopen_nodelete_2.cpp b/tests/libs/dlopen_nodelete_2.cpp new file mode 100644 index 000000000..b5ab5c1ae --- /dev/null +++ b/tests/libs/dlopen_nodelete_2.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +uint32_t dlopen_nodelete_2_taxicab_number = 1729; +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_2_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} diff --git a/tests/libs/dlopen_nodelete_dt_flags_1.cpp b/tests/libs/dlopen_nodelete_dt_flags_1.cpp new file mode 100644 index 000000000..39c0a7ea6 --- /dev/null +++ b/tests/libs/dlopen_nodelete_dt_flags_1.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +static bool* unload_flag_ptr = nullptr; + +extern "C" void dlopen_nodelete_dt_flags_1_set_unload_flag_ptr(bool* ptr) { + unload_flag_ptr = ptr; +} + +static void __attribute__((destructor)) unload_guard() { + if (unload_flag_ptr != nullptr) { + *unload_flag_ptr = true; + } +} From c343cac62bfd2933e36357b206fdd81da7610164 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:37:51 -0800 Subject: [PATCH 097/194] Revert "Revert "Fix relocation to look for symbols in local group"" This reverts commit 00dce525530c5d26c20750863f3e9890b468787a. --- linker/linked_list.h | 4 +- linker/linker.cpp | 193 +++++++++++------- linker/linker.h | 6 +- tests/dlfcn_test.cpp | 186 +++++++++++++++-- .../Android.build.dlopen_check_order_dlsym.mk | 90 ++++++++ ...lopen_check_order_reloc_main_executable.mk | 56 +++++ ...build.dlopen_check_order_reloc_siblings.mk | 133 ++++++++++++ tests/libs/Android.mk | 75 +------ ...pp => dlopen_check_order_dlsym_answer.cpp} | 4 +- .../libs/dlopen_check_order_reloc_answer.cpp | 23 +++ .../dlopen_check_order_reloc_answer_impl.cpp | 19 ++ ...dlopen_check_order_reloc_nephew_answer.cpp | 21 ++ .../dlopen_check_order_reloc_root_answer.cpp | 21 ++ ...pen_check_order_reloc_root_answer_impl.cpp | 19 ++ 14 files changed, 688 insertions(+), 162 deletions(-) create mode 100644 tests/libs/Android.build.dlopen_check_order_dlsym.mk create mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk create mode 100644 tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk rename tests/libs/{dlopen_testlib_answer.cpp => dlopen_check_order_dlsym_answer.cpp} (87%) create mode 100644 tests/libs/dlopen_check_order_reloc_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_answer_impl.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_nephew_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_root_answer.cpp create mode 100644 tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp diff --git a/linker/linked_list.h b/linker/linked_list.h index 4e62e208f..72a32b4ba 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -86,7 +86,7 @@ class LinkedList { } template - void for_each(F action) { + void for_each(F action) const { visit([&] (T* si) { action(si); return true; @@ -94,7 +94,7 @@ class LinkedList { } template - bool visit(F action) { + bool visit(F action) const { for (LinkedListEntry* e = head_; e != nullptr; e = e->next) { if (!action(e->element)) { return false; diff --git a/linker/linker.cpp b/linker/linker.cpp index 9ae853cc2..48093f9d1 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -415,7 +415,7 @@ int dl_iterate_phdr(int (*cb)(dl_phdr_info* info, size_t size, void* data), void return rv; } -static ElfW(Sym)* soinfo_elf_lookup(soinfo* si, unsigned hash, const char* name) { +static ElfW(Sym)* soinfo_elf_lookup(const soinfo* si, unsigned hash, const char* name) { ElfW(Sym)* symtab = si->symtab; TRACE_TYPE(LOOKUP, "SEARCH %s in %s@%p %x %zd", @@ -481,7 +481,7 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -527,16 +527,21 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { } } - /* Look for symbols in the local scope (the object who is - * searching). This happens with C++ templates on x86 for some - * reason. - * - * Notes on weak symbols: - * The ELF specs are ambiguous about treatment of weak definitions in - * dynamic linking. Some systems return the first definition found - * and some the first non-weak definition. This is system dependent. - * Here we return the first definition found for simplicity. */ + // 3. Look for it in the local group + if (s == nullptr) { + local_group.visit([&](soinfo* local_si) { + DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); + s = soinfo_elf_lookup(local_si, elf_hash, name); + if (s != nullptr) { + *lsi = local_si; + return false; + } + return true; + }); + } + + // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) if (s == nullptr && !si->has_DT_SYMBOLIC) { DEBUG("%s: looking up %s in local scope", si->name, name); s = soinfo_elf_lookup(si, elf_hash, name); @@ -545,6 +550,7 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi) { } } + // 5. Dependencies if (s == nullptr) { si->get_children().visit([&](soinfo* child) { DEBUG("%s: looking up %s in %s", si->name, name, child->name); @@ -643,33 +649,61 @@ typedef linked_list_t StringLinkedList; typedef linked_list_t LoadTaskList; -// This is used by dlsym(3). It performs symbol lookup only within the -// specified soinfo object and its dependencies in breadth first order. -ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { +// This function walks down the tree of soinfo dependencies +// in breadth-first order and +// * calls action(soinfo* si) for each node, and +// * terminates walk if action returns false. +// +// walk_dependencies_tree returns false if walk was terminated +// by the action and true otherwise. +template +static bool walk_dependencies_tree(soinfo* root_soinfos[], size_t root_soinfos_size, F action) { SoinfoLinkedList visit_list; SoinfoLinkedList visited; - visit_list.push_back(si); - soinfo* current_soinfo; - while ((current_soinfo = visit_list.pop_front()) != nullptr) { - if (visited.contains(current_soinfo)) { + for (size_t i = 0; i < root_soinfos_size; ++i) { + visit_list.push_back(root_soinfos[i]); + } + + soinfo* si; + while ((si = visit_list.pop_front()) != nullptr) { + if (visited.contains(si)) { continue; } - ElfW(Sym)* result = soinfo_elf_lookup(current_soinfo, elfhash(name), name); - - if (result != nullptr) { - *found = current_soinfo; - return result; + if (!action(si)) { + return false; } - visited.push_back(current_soinfo); - current_soinfo->get_children().for_each([&](soinfo* child) { + visited.push_back(si); + + si->get_children().for_each([&](soinfo* child) { visit_list.push_back(child); }); } - return nullptr; + return true; +} + + +// This is used by dlsym(3). It performs symbol lookup only within the +// specified soinfo object and its dependencies in breadth first order. +ElfW(Sym)* dlsym_handle_lookup(soinfo* si, soinfo** found, const char* name) { + ElfW(Sym)* result = nullptr; + uint32_t elf_hash = elfhash(name); + + + walk_dependencies_tree(&si, 1, [&](soinfo* current_soinfo) { + result = soinfo_elf_lookup(current_soinfo, elf_hash, name); + if (result != nullptr) { + *found = current_soinfo; + return false; + } + + return true; + }); + + return result; } /* This is used by dlsym(3) to performs a global symbol lookup. If the @@ -899,19 +933,30 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } -static bool find_libraries(const char* const library_names[], size_t library_names_size, soinfo* soinfos[], - soinfo* ld_preloads[], size_t ld_preloads_size, int rtld_flags, const android_dlextinfo* extinfo) { +static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], + soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. LoadTaskList load_tasks; - for (size_t i = 0; i < library_names_size; ++i) { + for (size_t i = 0; i < library_names_count; ++i) { const char* name = library_names[i]; - load_tasks.push_back(LoadTask::create(name, nullptr)); + load_tasks.push_back(LoadTask::create(name, start_with)); } - // Libraries added to this list in reverse order so that we can - // start linking from bottom-up - see step 2. - SoinfoLinkedList found_libs; - size_t soinfos_size = 0; + // If soinfos array is null allocate one on stack. + // The array is needed in case of failure; for example + // when library_names[] = {libone.so, libtwo.so} and libone.so + // is loaded correctly but libtwo.so failed for some reason. + // In this case libone.so should be unloaded on return. + // See also implementation of failure_guard below. + + if (soinfos == nullptr) { + size_t soinfos_size = sizeof(soinfo*)*library_names_count; + soinfos = reinterpret_cast(alloca(soinfos_size)); + memset(soinfos, 0, soinfos_size); + } + + // list of libraries to link - see step 2. + size_t soinfos_count = 0; auto failure_guard = make_scope_guard([&]() { // Housekeeping @@ -919,7 +964,7 @@ static bool find_libraries(const char* const library_names[], size_t library_nam LoadTask::deleter(t); }); - for (size_t i = 0; iadd_child(si); } - found_libs.push_front(si); - // When ld_preloads is not null first - // ld_preloads_size libs are in fact ld_preloads. - if (ld_preloads != nullptr && soinfos_size < ld_preloads_size) { - ld_preloads[soinfos_size] = si; + // When ld_preloads is not null, the first + // ld_preloads_count libs are in fact ld_preloads. + if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { + ld_preloads[soinfos_count] = si; } - if (soinfos_sizeflags & FLAG_LINKED) == 0) { - if (!si->LinkImage(extinfo)) { + if (!si->LinkImage(local_group, extinfo)) { return false; } si->flags |= FLAG_LINKED; } + + return true; + }); + + if (linked) { + failure_guard.disable(); } - // All is well - found_libs and load_tasks are empty at this point - // and all libs are successfully linked. - failure_guard.disable(); - return true; + return linked; } static soinfo* find_library(const char* name, int rtld_flags, const android_dlextinfo* extinfo) { @@ -979,7 +1034,7 @@ static soinfo* find_library(const char* name, int rtld_flags, const android_dlex soinfo* si; - if (!find_libraries(&name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { + if (!find_libraries(nullptr, &name, 1, &si, nullptr, 0, rtld_flags, extinfo)) { return nullptr; } @@ -1090,7 +1145,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1108,7 +1163,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1367,7 +1422,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count) { } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1386,7 +1441,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi); + s = soinfo_do_lookup(this, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1572,7 +1627,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count) { #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si) { +static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1605,7 +1660,7 @@ static bool mips_relocate_got(soinfo* si) { // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -2198,7 +2253,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2217,26 +2272,26 @@ bool soinfo::LinkImage(const android_dlextinfo* extinfo) { #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count)) { + if (Relocate(rela, rela_count, local_group)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count)) { + if (Relocate(plt_rela, plt_rela_count, local_group)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count)) { + if (Relocate(rel, rel_count, local_group)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count)) { + if (Relocate(plt_rel, plt_rel_count, local_group)) { return false; } } @@ -2310,7 +2365,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(nullptr); + si->LinkImage(g_empty_list, nullptr); #endif } @@ -2456,21 +2511,11 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( }); const char* needed_library_names[needed_libraries_count]; - soinfo* needed_library_si[needed_libraries_count]; memset(needed_library_names, 0, sizeof(needed_library_names)); needed_library_name_list.copy_to_array(needed_library_names, needed_libraries_count); - if (needed_libraries_count > 0 && !find_libraries(needed_library_names, needed_libraries_count, needed_library_si, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { - __libc_format_fd(2, "CANNOT LINK EXECUTABLE DEPENDENCIES: %s\n", linker_get_error_buffer()); - exit(EXIT_FAILURE); - } - - for (size_t i = 0; iadd_child(needed_library_si[i]); - } - - if (!si->LinkImage(nullptr)) { + if (needed_libraries_count > 0 && !find_libraries(si, needed_library_names, needed_libraries_count, nullptr, g_ld_preloads, ld_preloads_count, RTLD_GLOBAL, nullptr)) { __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); exit(EXIT_FAILURE); } @@ -2594,7 +2639,7 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(nullptr))) { + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index ebb4793af..222aca11e 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -207,7 +207,7 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const android_dlextinfo* extinfo); + bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); @@ -234,9 +234,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count); + int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); #else - int Relocate(ElfW(Rel)* rel, unsigned count); + int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); #endif private: diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 1d7c29a54..2ab3dc1ed 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -162,39 +162,39 @@ TEST(dlfcn, dlopen_check_relocation_dt_needed_order) { ASSERT_EQ(1, fn()); } -TEST(dlfcn, dlopen_check_order) { +TEST(dlfcn, dlopen_check_order_dlsym) { // Here is how the test library and its dt_needed // libraries are arranged // - // libtest_check_order.so + // libtest_check_order_children.so // | - // +-> libtest_check_order_1_left.so + // +-> ..._1_left.so // | | - // | +-> libtest_check_order_a.so + // | +-> ..._a.so // | | - // | +-> libtest_check_order_b.so + // | +-> ...r_b.so // | - // +-> libtest_check_order_2_right.so + // +-> ..._2_right.so // | | - // | +-> libtest_check_order_d.so + // | +-> ..._d.so // | | - // | +-> libtest_check_order_b.so + // | +-> ..._b.so // | - // +-> libtest_check_order_3_c.so + // +-> ..._3_c.so // // load order should be (1, 2, 3, a, b, d) // // get_answer() is defined in (2, 3, a, b, c) // get_answer2() is defined in (b, d) - void* sym = dlsym(RTLD_DEFAULT, "dlopen_test_get_answer"); + void* sym = dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer"); ASSERT_TRUE(sym == nullptr); - void* handle = dlopen("libtest_check_order.so", RTLD_NOW | RTLD_GLOBAL); - ASSERT_TRUE(handle != nullptr); + void* handle = dlopen("libtest_check_order_dlsym.so", RTLD_NOW | RTLD_GLOBAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); typedef int (*fn_t) (void); fn_t fn, fn2; - fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer")); + fn = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer")); ASSERT_TRUE(fn != NULL) << dlerror(); - fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "dlopen_test_get_answer2")); + fn2 = reinterpret_cast(dlsym(RTLD_DEFAULT, "check_order_dlsym_get_answer2")); ASSERT_TRUE(fn2 != NULL) << dlerror(); ASSERT_EQ(42, fn()); @@ -202,6 +202,163 @@ TEST(dlfcn, dlopen_check_order) { dlclose(handle); } +TEST(dlfcn, dlopen_check_order_reloc_siblings) { + // This is how this one works: + // we lookup and call get_answer which is defined in '_2.so' + // and in turn calls external get_answer_impl() defined in _1.so and in '_[a-f].so' + // the correct _impl() is implemented by '_a.so'; + // + // Note that this is test for RTLD_LOCAL (TODO: test for GLOBAL?) + // + // Here is the picture: + // + // libtest_check_order_reloc_siblings.so + // | + // +-> ..._1.so <- empty + // | | + // | +-> ..._a.so <- exports correct answer_impl() + // | | + // | +-> ..._b.so <- every other letter exporting incorrect one. + // | + // +-> ..._2.so <- empty + // | | + // | +-> ..._c.so + // | | + // | +-> ..._d.so + // | + // +-> ..._3.so <- empty + // | + // +-> ..._e.so + // | + // +-> ..._f.so <- exports get_answer() that calls get_anser_impl(); + // implements incorrect get_answer_impl() + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +TEST(dlfcn, dlopen_check_order_reloc_siblings_with_preload) { + // This test uses the same library as dlopen_check_order_reloc_siblings. + // Unlike dlopen_check_order_reloc_siblings it preloads + // libtest_check_order_reloc_siblings_1.so (first dependency) prior to + // dlopen(libtest_check_order_reloc_siblings.so) + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); + handle = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); + + void* handle_for_1 = dlopen("libtest_check_order_reloc_siblings_1.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle_for_1 != nullptr) << dlerror(); + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + ASSERT_EQ(0, dlclose(handle_for_1)); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +TEST(dlfcn, dlopen_check_order_reloc_nephew) { + // This is how this one works: + // we lookup and call nephew_get_answer which is defined in '_2.so' + // and in turn calls external get_answer_impl() defined in '_[a-f].so' + // the correct _impl() is implemented by '_a.so'; + // + // Here is the picture: + // + // libtest_check_order_reloc_siblings.so + // | + // +-> ..._1.so <- empty + // | | + // | +-> ..._a.so <- exports correct answer_impl() + // | | + // | +-> ..._b.so <- every other letter exporting incorrect one. + // | + // +-> ..._2.so <- empty + // | | + // | +-> ..._c.so + // | | + // | +-> ..._d.so + // | + // +-> ..._3.so <- nephew_get_answer() that calls get_answer_impl(); + // | + // +-> ..._e.so + // | + // +-> ..._f.so + + void* handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_siblings.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_siblings.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_nephew_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + +extern "C" int check_order_reloc_root_get_answer_impl() { + return 42; +} + +TEST(dlfcn, dlopen_check_order_reloc_main_executable) { + // This is how this one works: + // we lookup and call get_answer3 which is defined in 'root.so' + // and in turn calls external root_get_answer_impl() defined in _2.so and + // above the correct _impl() is one in the executable. + // + // libtest_check_order_reloc_root.so + // | + // +-> ..._1.so <- empty + // | + // +-> ..._2.so <- gives incorrect answer for answer_main_impl() + // + + void* handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); +#ifdef __BIONIC__ + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_check_order_reloc_root.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); +#endif + + handle = dlopen("libtest_check_order_reloc_root.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); + + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle, "check_order_reloc_root_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); + + ASSERT_EQ(0, dlclose(handle)); +} + TEST(dlfcn, dlopen_check_rtld_local) { void* sym = dlsym(RTLD_DEFAULT, "dlopen_testlib_simple_func"); ASSERT_TRUE(sym == nullptr); @@ -342,7 +499,6 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } - TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.build.dlopen_check_order_dlsym.mk b/tests/libs/Android.build.dlopen_check_order_dlsym.mk new file mode 100644 index 000000000..73d8c1a83 --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_dlsym.mk @@ -0,0 +1,90 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct load order: +# libtest_check_order_2_right.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_2_right_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_2_right_cflags := -D__ANSWER=42 +module := libtest_check_order_dlsym_2_right +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_a.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_a_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_a_cflags := -D__ANSWER=1 +module := libtest_check_order_dlsym_a +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_b.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_b_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 +module := libtest_check_order_dlsym_b +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_c.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_3_c_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_3_c_cflags := -D__ANSWER=3 +module := libtest_check_order_dlsym_3_c +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_d.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_d_src_files := \ + dlopen_check_order_dlsym_answer.cpp + +libtest_check_order_dlsym_d_shared_libraries := libtest_check_order_dlsym_b +libtest_check_order_dlsym_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 +module := libtest_check_order_dlsym_d +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_left.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_1_left_src_files := \ + empty.cpp + +libtest_check_order_dlsym_1_left_shared_libraries := libtest_check_order_dlsym_a libtest_check_order_dlsym_b + +module := libtest_check_order_dlsym_1_left +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order.so +# ----------------------------------------------------------------------------- +libtest_check_order_dlsym_src_files := \ + empty.cpp + +libtest_check_order_dlsym_shared_libraries := libtest_check_order_dlsym_1_left \ + libtest_check_order_dlsym_2_right libtest_check_order_dlsym_3_c + +module := libtest_check_order_dlsym +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk b/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk new file mode 100644 index 000000000..639696b25 --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_reloc_main_executable.mk @@ -0,0 +1,56 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct relocation order: +# libtest_check_order_reloc_root*.so +# ----------------------------------------------------------------------------- + + +# ----------------------------------------------------------------------------- +# ..._1.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_1_src_files := \ + empty.cpp + + +module := libtest_check_order_reloc_root_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + + +# ----------------------------------------------------------------------------- +# ..._2.so - this one has the incorrect answer +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_2_src_files := \ + dlopen_check_order_reloc_root_answer_impl.cpp + +libtest_check_order_reloc_root_2_cflags := -D__ANSWER=2 + +module := libtest_check_order_reloc_root_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_reloc_root.so <- implements get_answer3() +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_root_src_files := \ + dlopen_check_order_reloc_root_answer.cpp + +libtest_check_order_reloc_root_shared_libraries := \ + libtest_check_order_reloc_root_1 \ + libtest_check_order_reloc_root_2 + +module := libtest_check_order_reloc_root +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk b/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk new file mode 100644 index 000000000..0f1a2b4da --- /dev/null +++ b/tests/libs/Android.build.dlopen_check_order_reloc_siblings.mk @@ -0,0 +1,133 @@ +# +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# ----------------------------------------------------------------------------- +# Libraries used by dlfcn tests to verify correct relocation order: +# libtest_check_order_reloc_siblings*.so +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# ..._1.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_1_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_1_shared_libraries := \ + libtest_check_order_reloc_siblings_a \ + libtest_check_order_reloc_siblings_b + +module := libtest_check_order_reloc_siblings_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + + +# ----------------------------------------------------------------------------- +# ..._2.so - empty +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_2_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_2_shared_libraries := \ + libtest_check_order_reloc_siblings_c \ + libtest_check_order_reloc_siblings_d + +module := libtest_check_order_reloc_siblings_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._3.so - get_answer2(); +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_3_src_files := \ + dlopen_check_order_reloc_nephew_answer.cpp + +libtest_check_order_reloc_siblings_3_shared_libraries := \ + libtest_check_order_reloc_siblings_e \ + libtest_check_order_reloc_siblings_f + +module := libtest_check_order_reloc_siblings_3 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._a.so <- correct impl +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_a_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_a_cflags := -D__ANSWER=42 +module := libtest_check_order_reloc_siblings_a +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._b.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_b_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_b_cflags := -D__ANSWER=1 +module := libtest_check_order_reloc_siblings_b +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._c.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_c_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_c_cflags := -D__ANSWER=2 +module := libtest_check_order_reloc_siblings_c +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._d.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_d_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_d_cflags := -D__ANSWER=3 +module := libtest_check_order_reloc_siblings_d +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._e.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_e_src_files := \ + dlopen_check_order_reloc_answer_impl.cpp + +libtest_check_order_reloc_siblings_e_cflags := -D__ANSWER=4 +module := libtest_check_order_reloc_siblings_e +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# ..._f.so <- get_answer() +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_f_src_files := \ + dlopen_check_order_reloc_answer.cpp + +module := libtest_check_order_reloc_siblings_f +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# libtest_check_order_reloc_siblings.so +# ----------------------------------------------------------------------------- +libtest_check_order_reloc_siblings_src_files := \ + empty.cpp + +libtest_check_order_reloc_siblings_shared_libraries := \ + libtest_check_order_reloc_siblings_1 \ + libtest_check_order_reloc_siblings_2 \ + libtest_check_order_reloc_siblings_3 + +module := libtest_check_order_reloc_siblings +include $(LOCAL_PATH)/Android.build.testlib.mk diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index 67f6a3732..e4fee6a6c 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -21,6 +21,9 @@ common_cppflags += -std=gnu++11 common_additional_dependencies := \ $(LOCAL_PATH)/Android.mk \ $(LOCAL_PATH)/Android.build.dlext_testzip.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk \ + $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk \ $(LOCAL_PATH)/Android.build.testlib.mk \ $(TEST_PATH)/Android.build.mk @@ -150,79 +153,19 @@ module := libtest_nodelete_dt_flags_1 include $(LOCAL_PATH)/Android.build.testlib.mk # ----------------------------------------------------------------------------- -# Libraries used by dlfcn tests to verify correct load order: -# libtest_check_order_2_right.so +# Build libtest_check_order_dlsym.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_2_right_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_2_right_cflags := -D__ANSWER=42 -module := libtest_check_order_2_right -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_dlsym.mk # ----------------------------------------------------------------------------- -# libtest_check_order_a.so +# Build libtest_check_order_siblings.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_a_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_a_cflags := -D__ANSWER=1 -module := libtest_check_order_a -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_siblings.mk # ----------------------------------------------------------------------------- -# libtest_check_order_b.so +# Build libtest_check_order_root.so with its dependencies. # ----------------------------------------------------------------------------- -libtest_check_order_b_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_b_cflags := -D__ANSWER=2 -D__ANSWER2=43 -module := libtest_check_order_b -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_c.so -# ----------------------------------------------------------------------------- -libtest_check_order_3_c_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_3_c_cflags := -D__ANSWER=3 -module := libtest_check_order_3_c -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_d.so -# ----------------------------------------------------------------------------- -libtest_check_order_d_src_files := \ - dlopen_testlib_answer.cpp - -libtest_check_order_d_shared_libraries := libtest_check_order_b -libtest_check_order_d_cflags := -D__ANSWER=4 -D__ANSWER2=4 -module := libtest_check_order_d -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order_left.so -# ----------------------------------------------------------------------------- -libtest_check_order_1_left_src_files := \ - empty.cpp - -libtest_check_order_1_left_shared_libraries := libtest_check_order_a libtest_check_order_b - -module := libtest_check_order_1_left -include $(LOCAL_PATH)/Android.build.testlib.mk - -# ----------------------------------------------------------------------------- -# libtest_check_order.so -# ----------------------------------------------------------------------------- -libtest_check_order_src_files := \ - empty.cpp - -libtest_check_order_shared_libraries := libtest_check_order_1_left \ - libtest_check_order_2_right libtest_check_order_3_c - -module := libtest_check_order -include $(LOCAL_PATH)/Android.build.testlib.mk +include $(LOCAL_PATH)/Android.build.dlopen_check_order_reloc_main_executable.mk # ----------------------------------------------------------------------------- # Library with dependency loop used by dlfcn tests diff --git a/tests/libs/dlopen_testlib_answer.cpp b/tests/libs/dlopen_check_order_dlsym_answer.cpp similarity index 87% rename from tests/libs/dlopen_testlib_answer.cpp rename to tests/libs/dlopen_check_order_dlsym_answer.cpp index a4d75046e..2ae6cf79e 100644 --- a/tests/libs/dlopen_testlib_answer.cpp +++ b/tests/libs/dlopen_check_order_dlsym_answer.cpp @@ -14,12 +14,12 @@ * limitations under the License. */ -extern "C" int dlopen_test_get_answer() { +extern "C" int check_order_dlsym_get_answer() { return __ANSWER; } #ifdef __ANSWER2 -extern "C" int dlopen_test_get_answer2() { +extern "C" int check_order_dlsym_get_answer2() { return __ANSWER2; } #endif diff --git a/tests/libs/dlopen_check_order_reloc_answer.cpp b/tests/libs/dlopen_check_order_reloc_answer.cpp new file mode 100644 index 000000000..036670bee --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_answer.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int __attribute__((weak)) check_order_reloc_get_answer_impl() { + return 0; +} + +extern "C" int check_order_reloc_get_answer() { + return check_order_reloc_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_answer_impl.cpp new file mode 100644 index 000000000..324b905da --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_answer_impl.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_get_answer_impl() { + return __ANSWER; +} diff --git a/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp b/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp new file mode 100644 index 000000000..065d1bef7 --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_nephew_answer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_get_answer_impl(); + +extern "C" int check_order_reloc_nephew_get_answer() { + return check_order_reloc_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer.cpp b/tests/libs/dlopen_check_order_reloc_root_answer.cpp new file mode 100644 index 000000000..b21abd77a --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_root_answer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_root_get_answer_impl(); + +extern "C" int check_order_reloc_root_get_answer() { + return check_order_reloc_root_get_answer_impl(); +} diff --git a/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp b/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp new file mode 100644 index 000000000..25fb9aca9 --- /dev/null +++ b/tests/libs/dlopen_check_order_reloc_root_answer_impl.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int check_order_reloc_root_get_answer_impl() { + return __ANSWER; +} From a42dfda53acc6127b5046672686b67a66be168eb Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:38:00 -0800 Subject: [PATCH 098/194] Revert "Revert "Remove unnecessary lookups during relocations"" This reverts commit eae09772558016836f1356816f4d1d0be498d74c. --- linker/linker.cpp | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 48093f9d1..e6fc9eccd 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -530,6 +530,11 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c // 3. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { + if (local_si == si && si->has_DT_SYMBOLIC) { + // we already did this - skip + return true; + } + DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { @@ -541,28 +546,6 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c }); } - // 4. Look for it in this library (unless we already did it because of DT_SYMBOLIC) - if (s == nullptr && !si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in local scope", si->name, name); - s = soinfo_elf_lookup(si, elf_hash, name); - if (s != nullptr) { - *lsi = si; - } - } - - // 5. Dependencies - if (s == nullptr) { - si->get_children().visit([&](soinfo* child) { - DEBUG("%s: looking up %s in %s", si->name, name, child->name); - s = soinfo_elf_lookup(child, elf_hash, name); - if (s != nullptr) { - *lsi = child; - return false; - } - return true; - }); - } - if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", From 1c095774c0527027bf3f7013ba15e9913d5f1853 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:38:10 -0800 Subject: [PATCH 099/194] Revert "Revert "Fix mips build"" This reverts commit 4402804c35c5c5992c728c6f3cee3bdbd325819e. --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index e6fc9eccd..f14d8b48d 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2281,7 +2281,7 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #endif #if defined(__mips__) - if (!mips_relocate_got(this)) { + if (!mips_relocate_got(this, local_group)) { return false; } #endif From 0416d88f9c90dcb1b97947a27a7c05f3627484c4 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:38:18 -0800 Subject: [PATCH 100/194] Revert "Revert "Fix symbol lookup order during relocation"" This reverts commit f947be2889639defc6424b1813ccc779528b7598. --- linker/linked_list.h | 12 +++ linker/linker.cpp | 162 +++++++++++++++++----------- linker/linker.h | 23 ++-- tests/Android.mk | 13 ++- tests/dl_test.cpp | 72 +++++++++++++ tests/dlfcn_test.cpp | 14 +++ tests/libs/Android.mk | 36 +++++++ tests/libs/dl_df_1_global.cpp | 19 ++++ tests/libs/dl_df_1_use_global.cpp | 23 ++++ tests/libs/dl_preempt_library_1.cpp | 45 ++++++++ tests/libs/dl_preempt_library_2.cpp | 37 +++++++ 11 files changed, 385 insertions(+), 71 deletions(-) create mode 100644 tests/dl_test.cpp create mode 100644 tests/libs/dl_df_1_global.cpp create mode 100644 tests/libs/dl_df_1_use_global.cpp create mode 100644 tests/libs/dl_preempt_library_1.cpp create mode 100644 tests/libs/dl_preempt_library_2.cpp diff --git a/linker/linked_list.h b/linker/linked_list.h index 72a32b4ba..b08806161 100644 --- a/linker/linked_list.h +++ b/linker/linked_list.h @@ -36,6 +36,12 @@ class LinkedList { clear(); } + LinkedList(LinkedList&& that) { + this->head_ = that.head_; + this->tail_ = that.tail_; + that.head_ = that.tail_ = nullptr; + } + void push_front(T* const element) { LinkedListEntry* new_entry = Allocator::alloc(); new_entry->next = head_; @@ -140,6 +146,12 @@ class LinkedList { return false; } + static LinkedList make_list(T* const element) { + LinkedList one_element_list; + one_element_list.push_back(element); + return one_element_list; + } + private: LinkedListEntry* head_; LinkedListEntry* tail_; diff --git a/linker/linker.cpp b/linker/linker.cpp index f14d8b48d..ab0fc0762 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -282,7 +282,7 @@ static void protect_data(int protection) { g_soinfo_links_allocator.protect_all(protection); } -static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, int rtld_flags) { +static soinfo* soinfo_alloc(const char* name, struct stat* file_stat, off64_t file_offset, uint32_t rtld_flags) { if (strlen(name) >= SOINFO_NAME_LEN) { DL_ERR("library name \"%s\" too long", name); return nullptr; @@ -481,7 +481,8 @@ static unsigned elfhash(const char* _name) { return h; } -static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, const soinfo::soinfo_list_t& local_group) { +static ElfW(Sym)* soinfo_do_lookup(soinfo* si_from, const char* name, soinfo** si_found_in, + const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { unsigned elf_hash = elfhash(name); ElfW(Sym)* s = nullptr; @@ -496,49 +497,40 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c * Note that this is unlikely since static linker avoids generating * relocations for -Bsymbolic linked dynamic executables. */ - if (si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si->name, name); - s = soinfo_elf_lookup(si, elf_hash, name); + if (si_from->has_DT_SYMBOLIC) { + DEBUG("%s: looking up %s in local scope (DT_SYMBOLIC)", si_from->name, name); + s = soinfo_elf_lookup(si_from, elf_hash, name); if (s != nullptr) { - *lsi = si; + *si_found_in = si_from; } } - if (s == nullptr && somain != nullptr) { - // 1. Look for it in the main executable unless we already did. - if (si != somain || !si->has_DT_SYMBOLIC) { - DEBUG("%s: looking up %s in executable %s", - si->name, name, somain->name); - s = soinfo_elf_lookup(somain, elf_hash, name); + // 1. Look for it in global_group + if (s == nullptr) { + global_group.visit([&](soinfo* global_si) { + DEBUG("%s: looking up %s in %s (from global group)", si_from->name, name, global_si->name); + s = soinfo_elf_lookup(global_si, elf_hash, name); if (s != nullptr) { - *lsi = somain; + *si_found_in = global_si; + return false; } - } - // 2. Look for it in the ld_preloads - if (s == nullptr) { - for (int i = 0; g_ld_preloads[i] != NULL; i++) { - s = soinfo_elf_lookup(g_ld_preloads[i], elf_hash, name); - if (s != nullptr) { - *lsi = g_ld_preloads[i]; - break; - } - } - } + return true; + }); } - // 3. Look for it in the local group + // 2. Look for it in the local group if (s == nullptr) { local_group.visit([&](soinfo* local_si) { - if (local_si == si && si->has_DT_SYMBOLIC) { + if (local_si == si_from && si_from->has_DT_SYMBOLIC) { // we already did this - skip return true; } - DEBUG("%s: looking up %s in %s (from local group)", si->name, name, local_si->name); + DEBUG("%s: looking up %s in %s (from local group)", si_from->name, name, local_si->name); s = soinfo_elf_lookup(local_si, elf_hash, name); if (s != nullptr) { - *lsi = local_si; + *si_found_in = local_si; return false; } @@ -549,9 +541,9 @@ static ElfW(Sym)* soinfo_do_lookup(soinfo* si, const char* name, soinfo** lsi, c if (s != nullptr) { TRACE_TYPE(LOOKUP, "si %s sym %s s->st_value = %p, " "found in %s, base = %p, load bias = %p", - si->name, name, reinterpret_cast(s->st_value), - (*lsi)->name, reinterpret_cast((*lsi)->base), - reinterpret_cast((*lsi)->load_bias)); + si_from->name, name, reinterpret_cast(s->st_value), + (*si_found_in)->name, reinterpret_cast((*si_found_in)->base), + reinterpret_cast((*si_found_in)->load_bias)); } return s; @@ -916,6 +908,24 @@ static bool is_recursive(soinfo* si, soinfo* parent) { }); } +// TODO: this is slightly unusual way to construct +// the global group for relocation. Not every RTLD_GLOBAL +// library is included in this group for backwards-compatibility +// reasons. +// +// This group consists of the main executable, LD_PRELOADs +// and libraries with the DF_1_GLOBAL flag set. +static soinfo::soinfo_list_t make_global_group() { + soinfo::soinfo_list_t global_group; + for (soinfo* si = somain; si != nullptr; si = si->next) { + if ((si->get_dt_flags_1() & DF_1_GLOBAL) != 0) { + global_group.push_back(si); + } + } + + return global_group; +} + static bool find_libraries(soinfo* start_with, const char* const library_names[], size_t library_names_count, soinfo* soinfos[], soinfo* ld_preloads[], size_t ld_preloads_count, int rtld_flags, const android_dlextinfo* extinfo) { // Step 0: prepare. @@ -925,6 +935,9 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] load_tasks.push_back(LoadTask::create(name, start_with)); } + // Construct global_group. + soinfo::soinfo_list_t global_group = make_global_group(); + // If soinfos array is null allocate one on stack. // The array is needed in case of failure; for example // when library_names[] = {libone.so, libtwo.so} and libone.so @@ -973,6 +986,11 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] // When ld_preloads is not null, the first // ld_preloads_count libs are in fact ld_preloads. if (ld_preloads != nullptr && soinfos_count < ld_preloads_count) { + // Add LD_PRELOADed libraries to the global group for future runs. + // There is no need to explicitly add them to the global group + // for this run because they are going to appear in the local + // group in the correct order. + si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); ld_preloads[soinfos_count] = si; } @@ -993,7 +1011,7 @@ static bool find_libraries(soinfo* start_with, const char* const library_names[] bool linked = local_group.visit([&](soinfo* si) { if ((si->flags & FLAG_LINKED) == 0) { - if (!si->LinkImage(local_group, extinfo)) { + if (!si->LinkImage(global_group, local_group, extinfo)) { return false; } si->flags |= FLAG_LINKED; @@ -1128,7 +1146,7 @@ static ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) { } #if defined(USE_RELA) -int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rela) { unsigned type = ELFW(R_TYPE)(rela->r_info); unsigned sym = ELFW(R_SYM)(rela->r_info); @@ -1146,7 +1164,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, global_group,local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1405,7 +1423,7 @@ int soinfo::Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& loca } #else // REL, not RELA. -int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group) { +int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; idx < count; ++idx, ++rel) { unsigned type = ELFW(R_TYPE)(rel->r_info); // TODO: don't use unsigned for 'sym'. Use uint32_t or ElfW(Addr) instead. @@ -1424,7 +1442,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ if (sym != 0) { sym_name = get_string(symtab[sym].st_name); - s = soinfo_do_lookup(this, sym_name, &lsi, local_group); + s = soinfo_do_lookup(this, sym_name, &lsi, global_group, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference... s = &symtab[sym]; @@ -1610,7 +1628,7 @@ int soinfo::Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_ #endif #if defined(__mips__) -static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_group) { +static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& global_group, const soinfo::soinfo_list_t& local_group) { ElfW(Addr)** got = si->plt_got; if (got == nullptr) { return true; @@ -1643,7 +1661,7 @@ static bool mips_relocate_got(soinfo* si, const soinfo::soinfo_list_t& local_gro // This is an undefined reference... try to locate it. const char* sym_name = si->get_string(sym->st_name); soinfo* lsi = nullptr; - ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, local_group); + ElfW(Sym)* s = soinfo_do_lookup(si, sym_name, &lsi, global_group, local_group); if (s == nullptr) { // We only allow an undefined symbol if this is a weak reference. s = &symtab[g]; @@ -1783,7 +1801,7 @@ void soinfo::remove_all_links() { children.clear(); } -dev_t soinfo::get_st_dev() { +dev_t soinfo::get_st_dev() const { if (has_min_version(0)) { return st_dev; } @@ -1791,7 +1809,7 @@ dev_t soinfo::get_st_dev() { return 0; }; -ino_t soinfo::get_st_ino() { +ino_t soinfo::get_st_ino() const { if (has_min_version(0)) { return st_ino; } @@ -1799,7 +1817,7 @@ ino_t soinfo::get_st_ino() { return 0; } -off64_t soinfo::get_file_offset() { +off64_t soinfo::get_file_offset() const { if (has_min_version(1)) { return file_offset; } @@ -1807,7 +1825,7 @@ off64_t soinfo::get_file_offset() { return 0; } -int soinfo::get_rtld_flags() { +uint32_t soinfo::get_rtld_flags() const { if (has_min_version(1)) { return rtld_flags; } @@ -1815,6 +1833,27 @@ int soinfo::get_rtld_flags() { return 0; } +uint32_t soinfo::get_dt_flags_1() const { + if (has_min_version(1)) { + return dt_flags_1; + } + + return 0; +} +void soinfo::set_dt_flags_1(uint32_t dt_flags_1) { + if (has_min_version(1)) { + if ((dt_flags_1 & DF_1_GLOBAL) != 0) { + rtld_flags |= RTLD_GLOBAL; + } + + if ((dt_flags_1 & DF_1_NODELETE) != 0) { + rtld_flags |= RTLD_NODELETE; + } + + this->dt_flags_1 = dt_flags_1; + } +} + // This is a return on get_children()/get_parents() if // 'this->flags' does not have FLAG_NEW_SOINFO set. static soinfo::soinfo_list_t g_empty_list; @@ -1852,8 +1891,9 @@ const char* soinfo::get_string(ElfW(Word) index) const { } bool soinfo::can_unload() const { - return (rtld_flags & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; + return (get_rtld_flags() & (RTLD_NODELETE | RTLD_GLOBAL)) == 0; } + /* Force any of the closed stdin, stdout and stderr to be associated with /dev/null. */ static int nullify_closed_stdio() { @@ -2154,16 +2194,9 @@ bool soinfo::PrelinkImage() { break; case DT_FLAGS_1: - if ((d->d_un.d_val & DF_1_GLOBAL) != 0) { - rtld_flags |= RTLD_GLOBAL; - } + set_dt_flags_1(d->d_un.d_val); - if ((d->d_un.d_val & DF_1_NODELETE) != 0) { - rtld_flags |= RTLD_NODELETE; - } - // TODO: Implement other flags - - if ((d->d_un.d_val & ~(DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE)) != 0) { + if ((d->d_un.d_val & ~SUPPORTED_DT_FLAGS_1) != 0) { DL_WARN("Unsupported flags DT_FLAGS_1=%p", reinterpret_cast(d->d_un.d_val)); } break; @@ -2236,7 +2269,7 @@ bool soinfo::PrelinkImage() { return true; } -bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { +bool soinfo::LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { #if !defined(__LP64__) if (has_text_relocations) { @@ -2255,33 +2288,33 @@ bool soinfo::LinkImage(const soinfo_list_t& local_group, const android_dlextinfo #if defined(USE_RELA) if (rela != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rela, rela_count, local_group)) { + if (Relocate(rela, rela_count, global_group, local_group)) { return false; } } if (plt_rela != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rela, plt_rela_count, local_group)) { + if (Relocate(plt_rela, plt_rela_count, global_group, local_group)) { return false; } } #else if (rel != nullptr) { DEBUG("[ relocating %s ]", name); - if (Relocate(rel, rel_count, local_group)) { + if (Relocate(rel, rel_count, global_group, local_group)) { return false; } } if (plt_rel != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (Relocate(plt_rel, plt_rel_count, local_group)) { + if (Relocate(plt_rel, plt_rel_count, global_group, local_group)) { return false; } } #endif #if defined(__mips__) - if (!mips_relocate_got(this, local_group)) { + if (!mips_relocate_got(this, global_group, local_group)) { return false; } #endif @@ -2348,7 +2381,7 @@ static void add_vdso(KernelArgumentBlock& args __unused) { si->load_bias = get_elf_exec_load_bias(ehdr_vdso); si->PrelinkImage(); - si->LinkImage(g_empty_list, nullptr); + si->LinkImage(g_empty_list, soinfo::soinfo_list_t::make_list(si), nullptr); #endif } @@ -2479,6 +2512,9 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( si->PrelinkImage(); + // add somain to global group + si->set_dt_flags_1(si->get_dt_flags_1() | DF_1_GLOBAL); + // Load ld_preloads and dependencies. StringLinkedList needed_library_name_list; size_t needed_libraries_count = 0; @@ -2622,7 +2658,13 @@ extern "C" ElfW(Addr) __linker_init(void* raw_args) { linker_so.phnum = elf_hdr->e_phnum; linker_so.flags |= FLAG_LINKER; - if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, nullptr))) { + // This might not be obvious... The reasons why we pass g_empty_list + // in place of local_group here are (1) we do not really need it, because + // linker is built with DT_SYMBOLIC and therefore relocates its symbols against + // itself without having to look into local_group and (2) allocators + // are not yet initialized, and therefore we cannot use linked_list.push_* + // functions at this point. + if (!(linker_so.PrelinkImage() && linker_so.LinkImage(g_empty_list, g_empty_list, nullptr))) { // It would be nice to print an error message, but if the linker // can't link itself, there's no guarantee that we'll be able to // call write() (because it involves a GOT reference). We may as diff --git a/linker/linker.h b/linker/linker.h index 222aca11e..0a98b40dc 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -89,7 +89,9 @@ #define FLAG_LINKER 0x00000010 // The linker itself #define FLAG_NEW_SOINFO 0x40000000 // new soinfo format -#define SOINFO_VERSION 0 +#define SUPPORTED_DT_FLAGS_1 (DF_1_NOW | DF_1_GLOBAL | DF_1_NODELETE) + +#define SOINFO_VERSION 1 #define SOINFO_NAME_LEN 128 @@ -207,16 +209,18 @@ struct soinfo { void CallDestructors(); void CallPreInitConstructors(); bool PrelinkImage(); - bool LinkImage(const soinfo_list_t& local_group, const android_dlextinfo* extinfo); + bool LinkImage(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo); void add_child(soinfo* child); void remove_all_links(); - ino_t get_st_ino(); - dev_t get_st_dev(); - off64_t get_file_offset(); + ino_t get_st_ino() const; + dev_t get_st_dev() const; + off64_t get_file_offset() const; - int get_rtld_flags(); + uint32_t get_rtld_flags() const; + uint32_t get_dt_flags_1() const; + void set_dt_flags_1(uint32_t dt_flags_1); soinfo_list_t& get_children(); soinfo_list_t& get_parents(); @@ -234,9 +238,9 @@ struct soinfo { void CallArray(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void CallFunction(const char* function_name, linker_function_t function); #if defined(USE_RELA) - int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); #else - int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& local_group); + int Relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); #endif private: @@ -254,7 +258,8 @@ struct soinfo { // version >= 1 off64_t file_offset; - int rtld_flags; + uint32_t rtld_flags; + uint32_t dt_flags_1; size_t strtab_size; friend soinfo* get_libdl_info(); diff --git a/tests/Android.mk b/tests/Android.mk index 2f182654e..82eae3da4 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -233,6 +233,7 @@ bionic-unit-tests_static_libraries := \ bionic-unit-tests_src_files := \ atexit_test.cpp \ + dl_test.cpp \ dlext_test.cpp \ dlfcn_test.cpp \ @@ -245,8 +246,7 @@ bionic-unit-tests_conlyflags := \ bionic-unit-tests_cppflags := $(test_cppflags) bionic-unit-tests_ldflags := \ - -Wl,--export-dynamic \ - -Wl,-u,DlSymTestFunction \ + -Wl,--export-dynamic bionic-unit-tests_c_includes := \ bionic/libc \ @@ -255,6 +255,9 @@ bionic-unit-tests_c_includes := \ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ + libdl_preempt_test_1 \ + libdl_preempt_test_2 \ + libdl_test_df_1_global module := bionic-unit-tests module_tag := optional @@ -302,6 +305,12 @@ ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x bionic-unit-tests-glibc_src_files := \ atexit_test.cpp \ dlfcn_test.cpp \ + dl_test.cpp \ + +bionic-unit-tests-glibc_shared_libraries := \ + libdl_preempt_test_1 \ + libdl_preempt_test_2 \ + libdl_test_df_1_global bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dl_test.cpp b/tests/dl_test.cpp new file mode 100644 index 000000000..74c7b510f --- /dev/null +++ b/tests/dl_test.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +#include + +extern "C" int main_global_default_serial() { + return 3370318; +} + +extern "C" int main_global_protected_serial() { + return 2716057; +} + +// The following functions are defined in DT_NEEDED +// libdl_preempt_test.so library. + +// This one calls main_global_default_serial +extern "C" int main_global_default_get_serial(); + +// This one calls main_global_protected_serial +extern "C" int main_global_protected_get_serial(); + +// This one calls lib_global_default_serial +extern "C" int lib_global_default_get_serial(); + +// This one calls lib_global_protected_serial +extern "C" int lib_global_protected_get_serial(); + +// This test verifies that the global default function +// main_global_default_serial() is preempted by +// the function defined above. +TEST(dl, main_preempts_global_default) { + ASSERT_EQ(3370318, main_global_default_get_serial()); +} + +// This one makes sure that the global protected +// symbols do not get preempted +TEST(dl, main_does_not_preempt_global_protected) { + ASSERT_EQ(3370318, main_global_protected_get_serial()); +} + +// check same things for lib +TEST(dl, lib_preempts_global_default) { + ASSERT_EQ(3370318, lib_global_default_get_serial()); +} + +TEST(dl, lib_does_not_preempt_global_protected) { + ASSERT_EQ(3370318, lib_global_protected_get_serial()); +} + +// TODO: Add tests for LD_PRELOADs diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 2ab3dc1ed..060f7e09c 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -499,6 +499,20 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { ASSERT_TRUE(!is_unloaded); } +TEST(dlfcn, dlsym_df_1_global) { +#if !defined(__arm__) + void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + int (*get_answer)(); + get_answer = reinterpret_cast(dlsym(handle, "dl_df_1_global_get_answer")); + ASSERT_TRUE(get_answer != nullptr) << dlerror(); + ASSERT_EQ(42, get_answer()); + ASSERT_EQ(0, dlclose(handle)); +#else + GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; +#endif +} + TEST(dlfcn, dlopen_failure) { void* self = dlopen("/does/not/exist", RTLD_NOW); ASSERT_TRUE(self == NULL); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index e4fee6a6c..a45442031 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -290,6 +290,42 @@ libtest_atexit_src_files := \ module := libtest_atexit include $(LOCAL_PATH)/Android.build.testlib.mk +# ----------------------------------------------------------------------------- +# This library is used by dl_load test to check symbol preempting +# by main executable +# ----------------------------------------------------------------------------- +libdl_preempt_test_1_src_files := dl_preempt_library_1.cpp + +module := libdl_preempt_test_1 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# This library is used by dl_load test to check symbol preempting +# by libdl_preempt_test_1.so +# ----------------------------------------------------------------------------- +libdl_preempt_test_2_src_files := dl_preempt_library_2.cpp + +module := libdl_preempt_test_2 +include $(LOCAL_PATH)/Android.build.testlib.mk + +# ----------------------------------------------------------------------------- +# Library with DF_1_GLOBAL +# ----------------------------------------------------------------------------- +# TODO: re-enable arm once b/18137520 or b/18130452 are fixed +ifeq ($(filter $(TARGET_ARCH),arm),) +libdl_test_df_1_global_src_files := dl_df_1_global.cpp +libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global +module := libdl_test_df_1_global +include $(LOCAL_PATH)/Android.build.testlib.mk +endif + +# ----------------------------------------------------------------------------- +# Library using symbol from libdl_test_df_1_global +# ----------------------------------------------------------------------------- +libtest_dlsym_df_1_global_src_files := dl_df_1_use_global.cpp +module := libtest_dlsym_df_1_global +include $(LOCAL_PATH)/Android.build.testlib.mk + # ----------------------------------------------------------------------------- # Library with weak function # ----------------------------------------------------------------------------- diff --git a/tests/libs/dl_df_1_global.cpp b/tests/libs/dl_df_1_global.cpp new file mode 100644 index 000000000..39856fd50 --- /dev/null +++ b/tests/libs/dl_df_1_global.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int dl_df_1_global_get_answer_impl() { + return 42; +} diff --git a/tests/libs/dl_df_1_use_global.cpp b/tests/libs/dl_df_1_use_global.cpp new file mode 100644 index 000000000..e14910d1c --- /dev/null +++ b/tests/libs/dl_df_1_use_global.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern "C" int __attribute__((weak)) dl_df_1_global_get_answer_impl() { + return 0; +} + +extern "C" int dl_df_1_global_get_answer() { + return dl_df_1_global_get_answer_impl(); +} diff --git a/tests/libs/dl_preempt_library_1.cpp b/tests/libs/dl_preempt_library_1.cpp new file mode 100644 index 000000000..b4d81d5ac --- /dev/null +++ b/tests/libs/dl_preempt_library_1.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This one should be preempted by the function +// defined in the main executable. +extern "C" int __attribute__((weak)) main_global_default_serial() { + return 2716057; +} + +// Even though this one is defined by the main +// executable it should not be preempted +// because of protected visibility +extern "C" int __attribute__((weak, visibility("protected"))) main_global_protected_serial() { + return 3370318; +} + +extern "C" int main_global_default_get_serial() { + return main_global_default_serial(); +} + +extern "C" int main_global_protected_get_serial() { + return main_global_protected_serial(); +} + +// Trying to preempt functions from a DT_NEEDED .so +extern "C" int lib_global_default_serial() { + return 3370318; +} + +extern "C" int lib_global_protected_serial() { + return 2716057; +} diff --git a/tests/libs/dl_preempt_library_2.cpp b/tests/libs/dl_preempt_library_2.cpp new file mode 100644 index 000000000..8df9a1667 --- /dev/null +++ b/tests/libs/dl_preempt_library_2.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This one should be preempted by the function +// defined in libdl_preempt_test_1.so +extern "C" int __attribute__((weak)) lib_global_default_serial() { + return 2716057; +} + +// Even though this one is defined by +// libdl_preempt_test_1.so it should not be +// preempted because of protected visibility +extern "C" int __attribute__((weak,visibility("protected"))) lib_global_protected_serial() { + return 3370318; +} + +extern "C" int lib_global_default_get_serial() { + return lib_global_default_serial(); +} + +extern "C" int lib_global_protected_get_serial() { + return lib_global_protected_serial(); +} + From ca564e2a994df5976869ec655c7d4056deefcaa2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 4 Nov 2014 09:38:27 -0800 Subject: [PATCH 101/194] Revert "Revert "Fix arm64 and arm builds."" This reverts commit 494bee796aa60131981308493e0e295493537e12. --- tests/Android.mk | 14 ++++++++++---- tests/dlfcn_test.cpp | 4 ++-- tests/libs/Android.mk | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/Android.mk b/tests/Android.mk index 82eae3da4..66b165541 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -256,8 +256,11 @@ bionic-unit-tests_shared_libraries_target := \ libdl \ libpagemap \ libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global + libdl_preempt_test_2 + +ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) +bionic-unit-tests_shared_libraries_target += libdl_test_df_1_global +endif module := bionic-unit-tests module_tag := optional @@ -309,8 +312,11 @@ bionic-unit-tests-glibc_src_files := \ bionic-unit-tests-glibc_shared_libraries := \ libdl_preempt_test_1 \ - libdl_preempt_test_2 \ - libdl_test_df_1_global + libdl_preempt_test_2 + +ifneq ($(filter $(TARGET_ARCH),arm arm64),$(TARGET_ARCH)) +bionic-unit-tests-glibc_shared_libraries += libdl_test_df_1_global +endif bionic-unit-tests-glibc_whole_static_libraries := \ libBionicStandardTests \ diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 060f7e09c..3af9e12a5 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -500,7 +500,7 @@ TEST(dlfcn, dlopen_nodelete_dt_flags_1) { } TEST(dlfcn, dlsym_df_1_global) { -#if !defined(__arm__) +#if !defined(__arm__) && !defined(__aarch64__) void* handle = dlopen("libtest_dlsym_df_1_global.so", RTLD_NOW); ASSERT_TRUE(handle != nullptr) << dlerror(); int (*get_answer)(); @@ -509,7 +509,7 @@ TEST(dlfcn, dlsym_df_1_global) { ASSERT_EQ(42, get_answer()); ASSERT_EQ(0, dlclose(handle)); #else - GTEST_LOG_(INFO) << "This test does nothing on arm (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; + GTEST_LOG_(INFO) << "This test does nothing on arm/arm64 (to be reenabled once b/18137520 or b/18130452 are fixed).\n"; #endif } diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index a45442031..2fb0b1225 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -312,7 +312,7 @@ include $(LOCAL_PATH)/Android.build.testlib.mk # Library with DF_1_GLOBAL # ----------------------------------------------------------------------------- # TODO: re-enable arm once b/18137520 or b/18130452 are fixed -ifeq ($(filter $(TARGET_ARCH),arm),) +ifeq ($(filter $(TARGET_ARCH),arm arm64),) libdl_test_df_1_global_src_files := dl_df_1_global.cpp libdl_test_df_1_global_ldflags := -fuse-ld=bfd -Wl,-z,global module := libdl_test_df_1_global From 371dcc189f62dbf5bc861aed41754a0ef1008ee5 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 11 Nov 2014 14:10:51 -0800 Subject: [PATCH 102/194] Fix tzdata update tools for 'backzone'. To maintain the status quo, we need to pull in backzone file. This file can't be built on its own, so the easiest fix is to give zic(1) all the files at once. We also now have a situation where we have links to links, so we need to dereference them until we find actual data. Bug: 18330681 (cherry picked from commit 2c2463bd3065f0a5fef34a47e3eb94aad64b0cea) Change-Id: I654b80518a7144038d8b3ea7223f49e2b1d2ad13 --- libc/tools/zoneinfo/ZoneCompactor.java | 10 ++++++++-- libc/tools/zoneinfo/update-tzdata.py | 22 +++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/libc/tools/zoneinfo/ZoneCompactor.java b/libc/tools/zoneinfo/ZoneCompactor.java index bf3153eff..2d598fec0 100644 --- a/libc/tools/zoneinfo/ZoneCompactor.java +++ b/libc/tools/zoneinfo/ZoneCompactor.java @@ -132,9 +132,15 @@ public class ZoneCompactor { throw new RuntimeException("zone filename too long: " + zoneName.length()); } + // Follow the chain of links to work out where the real data for this zone lives. + String actualZoneName = zoneName; + while (links.get(actualZoneName) != null) { + actualZoneName = links.get(actualZoneName); + } + f.write(toAscii(new byte[MAXNAME], zoneName)); - f.writeInt(offsets.get(zoneName)); - f.writeInt(lengths.get(zoneName)); + f.writeInt(offsets.get(actualZoneName)); + f.writeInt(lengths.get(actualZoneName)); f.writeInt(0); // Used to be raw GMT offset. No longer used. } diff --git a/libc/tools/zoneinfo/update-tzdata.py b/libc/tools/zoneinfo/update-tzdata.py index f5681beb2..330f1662d 100755 --- a/libc/tools/zoneinfo/update-tzdata.py +++ b/libc/tools/zoneinfo/update-tzdata.py @@ -13,8 +13,11 @@ import sys import tarfile import tempfile -regions = ['africa', 'antarctica', 'asia', 'australasia', 'backward', - 'etcetera', 'europe', 'northamerica', 'southamerica'] +regions = ['africa', 'antarctica', 'asia', 'australasia', + 'etcetera', 'europe', 'northamerica', 'southamerica', + # These two deliberately come last so they override what came + # before (and each other). + 'backward', 'backzone' ] def CheckDirExists(dir, dirname): if not os.path.isdir(dir): @@ -49,16 +52,16 @@ def WriteSetupFile(): fields = line.split() if fields: if fields[0] == 'Link': - links.append('%s %s %s\n' % (fields[0], fields[1], fields[2])) + links.append('%s %s %s' % (fields[0], fields[1], fields[2])) zones.append(fields[2]) elif fields[0] == 'Zone': zones.append(fields[1]) zones.sort() setup = open('setup', 'w') - for link in links: - setup.write(link) - for zone in zones: + for link in sorted(set(links)): + setup.write('%s\n' % link) + for zone in sorted(set(zones)): setup.write('%s\n' % zone) setup.close() @@ -165,9 +168,10 @@ def BuildBionicToolsAndData(data_filename): print 'Calling zic(1)...' os.mkdir('data') - for region in regions: - if region != 'backward': - subprocess.check_call(['zic', '-d', 'data', 'extracted/%s' % region]) + zic_inputs = [ 'extracted/%s' % x for x in regions ] + zic_cmd = ['zic', '-d', 'data' ] + zic_cmd.extend(zic_inputs) + subprocess.check_call(zic_cmd) WriteSetupFile() From 1ca3350f4c7b60afdb95784c9cb3ea5ba5ce591f Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 11 Nov 2014 16:44:21 -0800 Subject: [PATCH 103/194] Upgrade bionic to tzdata2014j. From the release notes: Changes affecting current and future time stamps Turks & Caicos' switch from US eastern time to UTC-4 year-round did not occur on 2014-11-02 at 02:00. It's currently scheduled for 2015-11-01 at 02:00. (Thanks to Chris Walton.) Changes affecting past time stamps Many pre-1989 time stamps have been corrected for Asia/Seoul and Asia/Pyongyang, based on sources for the Korean-language Wikipedia entry for time in Korea. (Thanks to Sanghyuk Jung.) Also, no longer guess that Pyongyang mimicked Seoul time after World War II, as this is politically implausible. Some more zones have been turned into links, when they differed from existing zones only for older time stamps. As usual, these changes affect UTC offsets in pre-1970 time stamps only. Their old contents have been moved to the 'backzone' file. The affected zones are: Africa/Addis_Ababa, Africa/Asmara, Africa/Dar_es_Salaam, Africa/Djibouti, Africa/Kampala, Africa/Mogadishu, Indian/Antananarivo, Indian/Comoro, and Indian/Mayotte. Bug: 18330681 (cherry picked from commit b11d8e057c86c3926128af9d07180d9328e144c6) Change-Id: Ifd48e7446e400dccae3afd5cbef96ca843775477 --- libc/zoneinfo/tzdata | Bin 565358 -> 498091 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index e9cf16428fd3a6bd6e022ff8f460ee134f9c9a41..fc6c5babb83b74177bbaa18f47f38cd5de8d7c5b 100644 GIT binary patch delta 11777 zcma)?4_p<+_P}@c?(V(d<(~rbPq-*53S77=Dk>@nDkv%@A{Z(tDux;=ni?slzDzOE zV~+XApnOmB@rndn^O<5=QTmF?O3O@(ObeCD%3tx~ch2q=v}gT(^oj4z&Y3f3&YU?j zvv|F}`#)-f{fbxS=N0FvF^<>=1pM(6gk|Z1d4hGT-!>)EEC|ePYmHqreYEwW>MVmF zv)_J9V>87*KS2$fBPw;^C#qs!fHVZYEHz4XqN-Efnwo` zZbOcNaswxoIixqztc&Ct*p9%L4MwRIf$C!{I`S>;>MJaEF(L*|cf65Y>|&HR#JcG1 z3tV=Q8p(B+81*$&x~gJK0h~ef^9D;NRU8x!@rV)GP=r_!1A7o-x4>CM+C;EgRdK=z zNU*BPq$`3TO#n};FFaxOyR-Nj7PHWQSbNcGS91P>k27?^zHWX>?pIixrWdDUarOu- zK1@a4c)!I8yWOnHyjS(cHEwogp%owdL5-Uqw7U5!i-+rtsTkw#t1PR);tE~YOm{!! zVIM3OLaDo5SzU^c6QIuBE?znTP423)_FX|R--I9!ySV8DqyL4G$4@`=Bkg`Gb7{GLXb7H{)a73&*i10vxpVqhd#{Z%o!3=;fRW!%rWjt{{_e{U%B4^Sq&h!e6%FV08}P#u6a9E6LA(h=Yt zs1GLv@mLQi2~?FQo<=P#P#0(ycWj0xeB%t*pdh=rb0MS!;cPzvrHJZ@P#2`$wxk*B z(ceMcRPi823gYEdSclNgz##-SYDS=lEm##_`xr8URpoUIZFUgKg6-m)i{S`XpqpBP z9VYhHX$T8JzFiAhAr3QZjKYz)LwSh(_8K`E5@lu|4Z#?D4{p)(=eRiJXCcxSWnxV) zK#mQYf1L~E#A|!tB=KfnxMfpCp%5ZNRYk_dXUT;8P`l_p1h$9j-8Uct8=(~u_5#Fo zS4DLJ(Px@??Qi1?O_$Oy`i9os?40AM{8vdyI9Z< z8u3j*6ZT{WOPF0;)EVN!RB>?}%ttI)4V4HS_L(qM*>x0y?oqJz#CSOk@jX?s#1)DN zH(*asRaqa7vr_`+vA%2%SbM4BmW7beOH}~#239QZWxuVX8Xs?`onChF=>+iXt%`r2 z1IfKrW#8KvJ#Rrt?LUKQp*cJiB{jl}pePACE%jZc3ILh<}?^u-CeiV{pvF^$HVR@{> z+r(=yC~siW6cU%r%ZpCQTlgS^#@fuL%4e|ASg47$Q8cVEJ~0oe9m ziP--!I5Ys;o)q8;)t~$)w%r1@f%xvNct{`UFiFvSVI9)+_Hj7mWb;6jJ@ptavtS5| zLs|4%MjXC-?*(js1j^{$M-RY}IBfUv1!y6j`xwFoAwMaGEGNqbVVlp^V4GLrppngS<@-<^e9gHgv%kLvx#3_;mnhe7TT zeVVrqL6No+Xc(d@0wx>gvMt^&vg;5NuZrSJkdIJ4gPjQTMK~Rgik!}shT28TBM>`O z72O6y!BAE4_#AUX6jWjbPD&$IbSVdEn5y`6$FARm_+fU@|0>KMriwu~pb{%WHey8% zoE>IYdR)fz`5;(_cep)axLxc!8H$GEl9~*A5D|WGb~u{g^nquBU5uO!2?;8pIKh~S zeF+Y;6qAga+u$NfU@&_o;;a5i`07^=5=!WK*b$thaHvU)GD%5Ia4`|p zq6c_I$TXz1U@MdoA9jN};_64?O44kzRO*KP zorH{J?Bm!^ur3+v*1ZRZh?`eHGjU4~u#H4weFl-=fDOdTb#R1O^%ArYpIZfCqmVBw zfh=P6S}1dt>xl;|;3g6EgpWpI`yAp?2b2@Bzmr7l{}vJDB2$p4HXCOZnGb1MCovA8qjHj_EHEh~82GMvNV#nxbg#rYo#tH=P0*zQn$y6Fk zCm4tu+mWk_#^POIDpX<(3Z6k=Vzs2TZvzQwQSQqA5?qX*Q8GwcIuj=Lvu#aK+*xuN z9W&_d$dMV~H9Jg3PoLA^Y#N$!sS{Yo5!XP%IMvm-FOV#><@Vw+k26V}G#mDj$Tttc zc_%%`Q~4Ss6TdBl|YxTy0x@ScF>YY#$-&TCLYyj}=3I zX~dRUP)fx9>h$s@xI+9c7lI}dzl3z+_j6#K&Z}^U_``f?)_DVL_hI?wLdej04K@&e zoDWBIehV$cpB{j)NyMv=Mf|w{%81x+y^}Zf_g_PJ2EM;F4RV|;ck-mp58zgYDoSw> zIaw85e}vr081K8*!gefnISdVmz>&~OZ-1BvF`0NM83Xy5Sd4xfb`s;J!D*yYxPIFd zEGF)QSmIa@C?MhtR1ou2Xe6R;DGRy44dRGco=?O?UFj^J$#R(G)h@VhZ-O-&llZ#- zKzugJZ1#qtY~8LsRK%udiTfJCIu%)$3kk%dYoM5jUF;(^RKt1VzrO*``%(3|Y*c*# zQtroGiTQN-{aA;4ZZ+}iD{%3Cy$kOgEaI3`h^^63l7oI~gqj>og^{QrAFkxs>5bns zT|RA^s(6=U#T&40nw^|ihZO;ta0Su*2?&~wSHABdeLDI|T?Ffp3vk+6>iRmGAUVCAuLz#I4c)LX5~T|5jE5!$u~Eh z49_zHBge_|JckDc3a%5pU<<~}FtEXI^zHcQT}Bz|_sR#G%uzb#bG*7uMzvr%1r zHCX1TbgPb^gT>`9KoPOD3HA`zOog*ZIt5zib{y}M=SI2VnH~2k++YM@{8Vy`f=_gm z+cy^*R{aOgBkAhqS)h7!#xp-#N3!XYGUC$Vr8!|HWn(%lFF;us1=U1sdy!ZrfcHE@ zM+))zW+<75(`uwXsGEo0sm+Easyo;R{2n0w2x$+X%*&OS_`+b_11NL&B-Byezb3*J z;t^j6DkL6+bmFU%U>)&j0333%nRv__Z1Yjqv5RQ$X~>$7y3kJ>=40LQ)o_IPT3=|< ziT9rcSUzzUvWO=epp5u>In)#17zH%OzH>CI_?Oy?km)Pm%y$37sT6T5`+JyeK7PntOlZ&JDn|yJx5gz-B^}FYJEYc`F zml|m}*~#TgJ2FwtQk;qR@HUO_Fjb?a%OG!AOl``tt;mG6t(bEV{6yL{Dl zNffkN_qFvh4;{<0dGkw>4^&olg1J@0;Q2lFK-?*#)R7}6WkimPwfDF8kB*5PHwYhM zqg9^Q#CpoJu><+Q-+V-hY}{X=ZNEQ{SS>nhYBTpfZ@QzZ*7qO%EpYKLno;+%Qd@H5 zlu5S*x*b2kb9abVzIlwr0ymFGVWYk=f&`(j1?u{Yin*^1y`ut>S4HxLS0tC(?_WFC zi$*8MqY-9c*PEW~#1i>@FV=~_?Zd*r)`~-wc#Xt@`R>uOKb(Kq3Js3vQ?%-qDyVU_vs8izw8eeehbt);Wa6uRmN+* z;97g(htVPwUhRhc$S~w5->nG}?Ea+>kM?C2kgmT0DL-Lq%%&%u-It^r5rVJh_xc(IlD z9E%ryjkDnYzJ|UR_Gk&dYzKqing{YDU0B(j0d(7~e3j21jE(%N4fMU+u_1c+%caKO{rI!l&6-ptj7$mdLaOTxiYX zcXPpy+a3{jX*+wd`x%PIfD_q1jW`rL^JUY=P;n%FImWparURie&%s=Jl}{ z-VdX;PMUurs}ilGi21a&JzXwX`QaoMW5QkQ$*nBpF41JRS-Q6<-{@@`$kU5)sb61d z>ZJ8ZWrxlB$foEcyPnQIbeb#i!I`*RuXQu^l#NQ4NenZfJ{D)?I}vOsPak1%;T4%I z6uYcHBuGi)GK9>L+_6NA($fb2DU%JAsE#|PFkfxt6tv87(ZIb7T+bma)@ZvvgWf~ zM#<7A^sgU{E!zD*L$F(2EB@Y6ig#G*K^QkFLrCYxubOQ%i{u&$4_L_TUWNf=v@S9! zgTL9zdg(KvtzF2fRXqS<=o=QERK<>>0k6~uE}T8fjD$`#E~urgZO8r%r93nRzayy6 zvB`G{&PX+d7?Ybj#A4Cjdya)zSw9~7I1AQ1YS<>xS>RZ3(Ox^i_L=yBjY?Rl+hXeri`WyryuS!G0{Lu3dug8lAs#JK$b}@*@JtBtj9lx?D)U8jg$7<0TtcKL0 z9bz2cyjo1=>s#-Z(%xxh<%+KGDN?9CXc9x(-@qgdPB6QDsqJY9@EfEiRcdS=K zC_@-Ii64z%UA4Gk@dJx4PWjN7Sq*3QQlP~@^jT)ninfY9LiMOvi;67To&(~mWYCuvnLE!rD2DP)4YI!x z0Cf9s(e@w2KSN=hp+sjr$)S`luQ)8aX?qWgqcUiS9Z62ZB-haHu6yJ+4fC5{ySH=! z^p*o`bw2zfZ&L-2Ov629C3bDq*7}&9b;gaq9yi^1Pd`(CexbLb@O6QhnePzZ=x5sK zjGX@xmQbBQkuy{)>t=HG)~AK;sfxDOVOr{(5f^@R6ecWvhcPN=#hNBMw*sS5doRxP zuCZ1PiI;}|N%I9Ge%GAVhr^i15bRy%-A0=<^#0wsRo3e?pA=I+@??9ZhWT_yC(M~G z!E&(XJ=s)b!osRRIhZ}OcTbi{=H5$9&+w|{rm2BRX&JFeX_Pnz*&X%)(P}K6*<Pr7I@>h$MXwEb#PNyxFWejTA3l7#tjdP$vHPTzqV11m8T|-+;$*20zp+WN z%KcDu`DjY{X2Go|6idH;_3aZ{u|Vn@C9Qnqx`M*EVt_V`NaQHIx;vP$N{ zJC#Vmd`O9GYmHLQ)e{lByJ0h8`910(EPMYvvmOAS$o|Bf`Raf+hWHZvkNNg-? zRi8*pDK?5qahw+~NY2Z&Q90$j^f(1ad!_dC1!<0r}?|o^lU5ykv0=u(nYLm20?4~!uzdK+fJyz~&$n7O^pw@g@TE;p~l*_J2 z-SLAO1rG(+lvG?^xFg|-JG4XSqbriV_kRgxV8_OfD>jQ7+vsC7ms`M5B%gGjmS9fFYA#} zR7#P7D@dQSvG*lr2>8nx8Akfq6DXI87({<6s*Mbm2bc}rTY4J0_tlf`GCYS-Jd8^m zt^c}9_mtj-?mrj3)kiiKgmH6=>?=p%zx}x#nRI@`s7VyYOyZ$<2s4D9?kf+)e>Zjy zA&e6KO<(fJVXI6xc!~GGE5EUZWS$oxci~azCF5|9*%Fs;MTA^}PpHgA&zmHpMMcUU zosAKv55p0oz|0~VaYinGd$=6H2baihh70`?aG3Y3*IpSRzc1@1dwXsA_`8a2mwj)Y zm^`HD{ph?R%yoQ5svP1$osPvAACpAC?igm6e)*zyl<%l5k=hgQ)ZzI%9T|LLw%kYm z(58KmDqnS5?TbUDn}yG&k6V_vn~~JJ<%SppC|49n|CkPMGBnaFiTlSOI?_^%wL6+f{n;!n{Hqmg%E+W~+E3@RF)npaDA~l9f8qQX*Na6D=l^)kLzKNY)c+1VkDI*+wHF(rAb@B1C}jhr{AZwjA0q8Z9SV zj&&yGJvp+z)l~25Wt;vzG#>@b+Q>pVhy)yQcoEB6 zfM)35fM)BJdl$%ICd~eVso3=_?zs~FLHW`SHiIcVdXY?jvgl~`fI5l6ch$)7sS zq^-nF+xU>YgUrO?xO3YIxhLkV;}Q!qhGNL9SRwBwJKAOF%o$%IM;c43q{K)jyYS;c zM>5GwOT^DPX?G{8+f2%mmW1%?LF!rT`!05 z|BS@>ph0+O2iD8aI!}JnH_CSIJw@^~zCGR{^zvi!e&_M8T}a!tQBH~1r-k-&v-ZOq z@)|nt;|C0hPdgT2{O`Y05zXa^hQJt7{_QGjQil5N_uQ*zcX#xZm}N_c9YzpgZq z*Mn?=FV8%s*hF-D)m*77|LbTuh`+rR&7OdgURv)4C4xT1qhtWT@06nQ>ba6td*YN* znqdrY9LjlUAvW^|l;1FzaEI?3!&^el4$5!t{OQr?GyRNfbe`GW>}xVaF-N2513k?H z4AB>}C0Tp1r@3>C7jA$8{ZBuM_+dS%?v#sZ8%lI0#+_B6B{ zwW7@n@Sowj-ytlZ16O;ae!2!}ALp8j1{p2Mb`LFUm-%V39b5jm+Z^@#**AnTE6i17 z^j$(P^fU+SmlSR4Gv>ko{ZpRy>S6OoOpAHdd|uR^uQ!iS=_W-7Qr92MUE2?&mywYoX&UR9*_!7W!KX znDNZ<*+u&;z|z9#4?x3s{Xk2vz)@o|q8#d|F{IStz{@25(Z_+O_t@xxJnu`qBsBI` xe6%ic7PGA90&X8_>5AUpRU-&vC;aZ)}Jf3 z8Zl#p)Z51|nxhXpj+^Po8TGrm&MrwJxvB8=@v3z?sl;#`^^3%g_x$HDgdZsc z-z7Qx7{SPg*a=dh`z#VdL4$F6%M+v$qxT%wBZF)f#FPE(TH|s3#dn(X~BEFpx^R$mpb> zq|m^VMLy639p)y%IYjEA)T2-`hShChh#_)4k|}7gNN+zVXnAiVAj(K8>0w37pCzeA zoSMiF*TJ6Qw9;4sZ=t3A;*b35OY%-l4xr8AF8VEV`xY&np#L^ zox~8Gsi$P#kAFt1ydn&ZZ0M=|*CVbS&4;pTs;v=p`e-u?$_GBrdkVk5lFHgr$+qv#&8b4W-XT!uJ`efcD>j#QF;guWSUNEOW=E+LNQ zQbBD)!YPhMkfjtSZAd=FDKAn*q1j2CEu_Mk1QJ0(uU5Q;R8oAC8i~L|T zSw+09DeDjt#b{rfq*&vnFQI6-C&@-CX-;1~A(8mocnTh?$T%Axktm>?q}oV@<;RGY z!gD4O+e!r=8S%H3O4?{S&UqY(vGtS;_UAa$XtIMIj>(|c{TeB=^lv$rA%_VpyokI@%oDpW&tjXTE~ z525NQY*q#YPUi1|mjscPN>Ipj%iLRa zdI~|iNOD6gUqsQT9r-~q#GZIJk_zL>NEF3X3z9-Hw*x7mSYVvgm|n@Cq{j70@5a`` zS_K)`SSm@OFBN^WrZ@H!wj>fQjcn~e7pYB*Ts(!{p~T-sD(sm~CQ|G@M$#$hGcI+J zO0;+Adu|#rZQ?297?OY{QsGb+5<`*Ooa|^Kl^h>MU!{qpoaWD7C8n-Y;oL?dbCpUi zPC{a~tLHy8vgqMIpGB^o!i}E9ys1s!xZu)y8m{Mf?8Roe87>eqfa9nLy^4tyYXuD>}gy<2cM_w~J&E1DQXY?3B z9Gg>mMw4(xzrJKCBfXdM8M_LksyT`{yGw<>DiT3KFGoDZuR5_4I&dMKAVtq zir+D$)W=687OfygQp#-!BtYt8C>D33rH_yqQV)^X=nL5)rFS0vn9#%2myR%SJu(?WR_|n;Cm&qPR>g8;V9sQ2sZHbj19b?~z1o_dNeKncwM{|xr9M`xnsq~{K z-;G$cq@fP<_GvtYgtYW96pxb7sRKw{OAkwN)KGddE7(2VaeDL!uiz;&Ny9;QBs`*) zFs_nRvZ)hY>5zlOv6Y8N67-FPw4y7;+$M3YXl@$)XyR^={8qH=bb&5mK&t3C@diWU z*qY`y%VLkFjSqdCnN_ zLL7re8ybXX)AjO5d=Onj8Bg+qXs+KVQpGsTggAGh9DbNYFw%TH3@jn>pd3ksL*C+qD?w;(sC8az4WTYR+CEca;J29yT9k;PQ@ng*BOUCs; ztB^`TKN__Z^jkpOQ~zP=-;*^kWMa>Me^&44>B&A=OKFAdc+t+!WOd{fGD^eChSIz8BOhYLTrV&}FkGa7iOZt8GiH+_uc23L; z!jEt<GsF_9Lz>g%4k*@cg@yvAM*qiYk31>VTOO}FPNIql1JW>Vz zBF=rN7cL?ZjOREK4=TtB@E56JJimar^kw`(1~OilM-sqqM8ine{qTow5!8$3kVvqa zDF3kV55F*898FsEqaOjqL{4#U1xfBl-{=zzNDTeFe0PK7~X)kdoH+XKcTfO#I{NjP$d* z^p6`2@-dWzZKgMDC6NuHuVOz1i5W!445e-AAe>hjQ(DS&Fy)*+M8>%E5t+fbRz&tN z(k03nH+mBDA(UGtlAs~9^xk{4^eHlb2>WO~PO?~z-rG9H{2s(A5=#U}Ql-y%K4Zx` zl0(BcrKB=aDyc}M1tN&!P)`;K8H(|7L#2|+M>KJSwX|77#&okX1I@`p$q*%)4-6p$vs4d z%^b);ITlWk(;>b|L?ibxqb~#Pz@pe4(XA7^9aP!?K`hWKiO zApMbs2%$DyKB;>_C!7(obdmS1>6VNk8Q12jCAHGwe)%;Nu<> zzfttOf?`S3C_282H%S3ckdje!OxK=tOd1hK(J@`06Tc`rrrR>>{dapmdo1nUY0tig z=2#0?&Nw54n2+?=?8ehvMm`B)+_sd& zji+O_(>}&2mE@17W6oS6&spy5K;k%ovY?qKI6HDr0NfyCsIG}Kq4m6 zTIZk9^EyEiCem8;s-0lDqM4+I@nS>bGKsN(3}h_6N)i|^ohBN_k`?3wiBTxL3h zE>5qnY{tKS9GyMG13%91p(*y`efbR94y`5Tu|Bowv!ttkW2ewB;-B}9K@n|+W7*=> zBrDd(^v`D$8#I7C3~@6tEE`F0?A|Ouv=Qu9HKb#y%~bgu7kTB*n|W45a%NiD8*8%P zrO-CZh5bz&*W8;k=ol0l!FB1V>TM#X?~SuoK4!n^qw{n7d`1kXy|4@ILoti~*i2^` zhtNrXW=0VI^d=;%*fh8M-0Q;s%PN{QQ&so^v2oy^l@b`Em#a+~^(%_#Vl%Mh42~{I zPuB0Jt1wCWyT<--$EQpTho?E0bP_RjHOYiF#7lqxTf8oJ#i=$5K7?*hE z!Y^UmcTb^ z&cQd`JOJOEz8ju;SP4&yQ>;W_%lc^uY?V)dr!QP9=jbD&dwe+KwqaA{jN6-yhwljN z3*TuR0^jA-629w&Cw%uWTlk)f=J37Ge03asWFBgvW!!hcTF02BNUDv%{#~CDI54#a zp1u4IJg4_{_`xy9;fH+k;JIDX;CU7s;D^1A$vOHs{4F<}QC%lh4&Gf4&#ztxKYDBy z{Mc1FTycEUAOucicS7Lg+;;F&YhB={2iJ#dX3KOOeVpmc{!)zo4eh{2I>v&=4)8*M zG5nnH6Mo+IDg6AS3iyT3Mew4tXW$ogPvjiODY)W&55nmIcS&=B1-O#c8u;b(z3?j& zw!yE)t%hrRE`?u{Pl8`}9|ON33xk)M1jBDOo1o+96<+qji#mP( z-^p`B;O<2W47itE3tqnGJ^cRkD)@sWb2&#J6+?}~8Ff?N$r&F8yn;XKT?&8fco|;l za|B-bBOCtIA_e}md>#DR+qrVKKKJ~@bOc`9-Jqk&z1+E0%lPWpY#n3OvZ?Ubn+C(* zjP47so*MwK>CzJZcCZutT@zdQ`?ehXgZL}_W8?aAjy^uVu?c7VEc}+U^|{ZNzaa4C z(L*`&ulw)9znv|Be_wL~{$txt_|HjO;J+5Hfd3ASW6pCEw(A)AR;gM>q31HV$Yvp2 z>^>GQ{v?M>Ou8!&klgBofZ;25xX}?8xbY=3c&!Z*xJh1fIY$edDjJ6~nkAdUYY#Vo z*O~qXZXWmyZqZi@uj_OXZs~gnZux5;+}crbMaR)X*3T|z8Et;#z-=$=h1-=U!R>di zhSxhW1MaY565KJhKfM0fFu2ove|Up#K5*yJ{p1|2+t9mLIAfzOt>KN$z2Pp3CiV!p z)YL`5Rs0?9di4XmY2|&mTlOt@v&&y~94*v5<(-z%eg8dpi`k`ck2NRZo&%4-y(Vpi zd;6!reL@$(rFL`S3SW;=2>5=9M4+WjoSdVDTRxl<&e-bHNOA)Bql^!3f@d1P>34eF^U%dkmKim*_ZJw_~&4T1o}qDeyT0osA!|03YO33=euy z0PpfE3*PnOPI$KmiSXdPE8yKP?2~hJUXP?5;fy_ZuYre5TMiFhF$LbM&p3G4*xvAP zX%FfOj_=*g7lA%?TVO!nrq=Mj?`p&QnfvHCTDaf6=32)7HJ0!J$4%h_uYQCN+VloK zIQuqy$XqQva_v$0(7}h`!)D)-bF|Lz&R4_P{m;t><|8no@xgGG80o(WK1xL3QFim; zQIBKcqrVJ;k0}@cA6q7akK5h`9(^WK$I&|D6Z&ZxCu9V|Cr)e)pR~vsJ~_l*%kF=E z$_N30829fOFjZCwpJs9&KHd2|eEO@?@L1!=a*oc6EiDgcocZD$d{*8m`0R_j;d7GH z;dA${gwLC?7(RdH1o(o8D186(3#YBnakP-4eVmptu1_?4QT>td#nPVe#Xp1KOY3^T zm)>`UFMC%9zWk&Se8si5@c7i1@Ri4F%Q;$i)pEmd#?_l@;0dD@FA!KW_c{WJT`s}b z4$gxso9u_LYr6rSWUv-a8XwYev=Di-Ps_Molnh^gWet48Pfhq8mf`RajiM`>Q zwzq|ER!sIqAa#i&0%^Uh;aeuQk#n^0*4EN+#`F*ec!sSNe4G1E__j}<;5$qz;5%-W z!FRqo1K)Mz7<~7o?eIMtQsH~^PU|>YSCOg6*Rq3s$r%V_4c`RcKVu2}K!^G8>F=XZpa_}Eki!nsu?`Dq7gjrCwe^oa8ZYFj@CbNA1xlQ-h&p8&p%m9PU8yx zXuJpmj-^(y0DpY!6ZnbwSKueRU4Wm8%z>Y7x)-kLf*y}QV~!q=KilMhj?F(?vs=qp zXn-D%FVv#NrhWz=Q3CLeK7eSrg|3%7B1TG#xkH;6!L665@O6)6Vg-QmY$Kx+g zZVA8A#xtD7ulBNqYwgkF@z*@Q!moXKhx`q*d+-}&rSQ^EpLHCack@h*mhslDJ38F| zw==FIP<8}89)D*MdOZH_hBQpLH(~?w}jOqXyKRB9kh(E z;>GZ)K0o2F$3BI>kygN~yP?P9YwDuMo&?a043On|??z6}1MX0Jld(ZU~( zZwqJqq+JdFym=}7OU@+t*Lh>$-;`nS??cez@jqgG;6K|nNB-9!^mzPlm#$il?z(Yp zymXAb7%iS4*jvDb%38>az9`V+3E~3uc!ELMO$?B1zk&gV`D(b)k{q~k26{Z9)B(Xf`4RUc1FQc%6>4$D?s`)9G-FhLLcKs(x@wMXlL7Ho)@cR4t>` zOZ0ex^ zsQ)FL(OHTXPjLQ;7Ee$#s#|~ojqabofX468;|VS&(c=kCuCGAeH4QzU(DYC=+-<=~ zjBmCXJ)Y2f40=4leco6dM;B_*RgM$z7}6c?>DmeI)ebG5;4MLmrx1J`%rL;`sRRRj z#m(icfbZ4DSir9mJ)Y1q8$F)Ts^AUstrMRi@4sCOZ!`HKyzLV7ctX2g```hil96xk zxdt8>lB45j{SLN!we0>EWG#{qkbPcF1Dw#wbOyZB?Md*?Rp{}AAaxkLONl@7T~$8t zZioBH*}UMmUg3=0*SCiEkfX;FddAwrLu7T44~_T^@73S~zW;?VzxxP;{l0|(y{%5e zdspPc`~1A8<7nZ&MddT0CL=AhdYGgvrIoPi#}5z<^1;vJjYTzY{*iGZ8-J z>k9bP+A;8{ccS6b-t>V_KiU&M<2HIcA$A*jJYlA~x16I3&sy9goN>0w7d~esT0CLy zENl3@PKw$XFu(t21Qs-`fiIL<>Nq-4VS*k{h->f>9{2K%mc zf@0$k^mxLinDZF0x!q|DNDbcuPjkqCZ)t-bPuMC(k0+$tqsJ4{E79W#8DCe**#g@N z7l$)$zk?o6*s&uDzVm1(^1GIHh40?z#atomiE=|=@8X_18W1u=(c=mGMtZ=rJY2Ob zzP}TCJmG*DdORV!;alXht6n01kiP*xSW*H%^s+|I=H(uKf%(Sx~M>6wh zp5FiJ*!>ugziI;}9PPIjer)_~`0FO*XM-u3qE7Qg;WPDP&C#G3tXIs9#1Il ziXKn6G^7Ig64x^1FSk1bzal}8CtP*d4!`;|6?yIVW$L>8WC07&(RI1S92~Vo_{^r$vpH@t5lz z_^-EU@kE^DICBwqEsy0zyy9sZ0>Z%!2#C%r;No@Y@k9o@M!+Rg2P1E|7CoNGXfS#_ zk?|Dtc%oWu(c_6s!aB)0TG+H+yKqJ`FBiDkH?(-7I&~!QI(L2}uP}e}907}?4-u$a zh8|C3xeYy@$V&ZG$I(L8iz{#fHmV}H?Z`85yIJV*ME0G~49(K6&6Wqajp zetnZ|sPE*A7Ek2#3N4;OzB>ts_f+jj7uylKyJ0YzRu|`H$6M3yuS9#*;4wnuKQXh_dqpfp zHl|9kX=1(hqaoeJFx{|EWaLr%$o3mqx6%~a>bhe}d4Z=pAEmSu+j0?eoNE?m#P&bB zbd2CS(Jh-1?F^m&ncA*4+dN^@8CeO&|CciT*al8p+jZ}+o6_~%X8g0BekHaq)XMIE zNk)*i>5bVF&b3h;k*K!H1S1d2gKsJv^UiM4-b!0u_AH@W1TWBk+R8aa{Zp6z3l2B7 zn?s+C8If&wz}3Or_Ll6N*?dM;gOSx?{C}xMI;1=0YSM1A%`Q_{fiB7Z7$4bwCHz@J zk1~25>{8MPJq7VUm+{Zem#Ip=Ph{3I=0wyNwj7(IUzW~euSD~BHc|gduxIceuY`UJ zjBZ7dtczuZGJ*SGz)tFW3_#1t;ne2 zhx7s%k(ejL{xzOGAH!V7ryc+6%=DM-KcAEGUo-U2W!TIA&vP-=UrqAs`WbTb^_G7> zBYNG)?=qv@k~hQu$5mss*j0N$X1HgIu?t`^2g{Jnx|X#Pd@P@a$FTT?Hfc zJVX8yukttJT~yWIMU4^U?NpxU_}Qu)UTC6P(OuZ6{#}dr6);LY%#8Q9R%sfEObzDI z+Q#bLjra^f72cfpR%M(OIsIo!-GpBwMvCWESH(h0b|a|IH|Nh8s=_}BrYc20dJ0>m z{B>S6%a3c5lOYHk=a~t6h`$#e%9wOOYjeY9@lHv$`mm&k?c4nu{B>oSqroSf7<@&bYYE zIQWtQ3*k%cd%%~qmcy3|W5E@+o%DRv9gP3%0!l@X(;SV6Mv|Ft1G{cvw6NJkn^kk}YtgvI{(47!1!ZYzja6C;)zJe`io}{HzlW zPONDHp4`TPrzRPKrx!f}H6bs+Gvj}ovjxt!xCAfg@ep2Ux*vY7c>(;~$71k8t(|(_ z%mRyEt^h9{PGqDT>o>M5S;0%|V~{AxT?W4#+XsGyjD=qvHW}1T?+#uI3X=bOviCeh1(B3*ftu``~-qO7KIA(|UeB z4}P+~r)2d%-QHu4`~UODlL&lKufl+@H@CvSsV2g|A6^9i5f=~sTt5o@B_9v|j_tz8 zbFvVSA2!mQx!~*x7X=2v#hf|Zz{wSE@WMlZ1IaHV(C}g%(CGe4(0I>Vu-3^E&?No_ zXu9jUk}Y61?l8Re@?vSH4(J5SPxpc#_0K0F$)Jab=H`(f;QI% z!ELLj!0isUgWF&24X?LpAn1_o3p&ni3)Ww24LS{W1RG5L3_7>@1vVULsbuvV+3Vnq zTYrQ%R(w5+Koi^B2sC;00CfF)6l{7{1G?Sb3^v=g4Q#H-H)jRi7cYgkNZ$na7&!*+ z88;v9)hQV6EguH=aUTszWin9VYtjt|e$I{beANtWWgMtv3$(gq0&o4o8SbC?8s6rj z0B@UY47S@-2?k7m1-6er4+i$V40af|2bB3{gB^RHGpF_G#=7M?1UmcdW&ytQ`|0p5 z7AxUh%9UW(w-dl_C#HeH*FwSWsS#k0W6?@Bzvui`@Q_VC;h~Xs@LqF0;9*_-!0^F! zDA~q(6B`8jw0R5m6@LLE>~H8J<=E)SNsc%-e3TZ&vP(m^(MqVgHI$s;gkAZgioGcf%~7I68IE}n7(JgsZK@U zG~exd{>lVrST57^K>`^2BSXm+n0ab4d{+4q`0Op=@Hr<&!{@G;2+m9G2F@Sb3tTY2 znF0q3yLp3((Ou11!MLV%;fuPs!52$Dz?U?s1z%EQ0WK3)>3Q`%xV-WTxFY)|7+;tJ zu3W1ISM4uRvihs1Y=kGQQ5-;EP1rmH5+^C)YyDNAGISca&TbBvA@B?Ez!Ly~^!JKX`;K91?;Gw1xJ>Qvud6MUPUaJNV*NBy@{*i;% z;OeVS;rZ)wnbVE+>>>n?&Akd9Uz-V@7<>>sIVAx+)s}##!zP28da>Xc|JCMffivF* zzzggq!3*xTffs%WgP$wt51udc0WWO#r(_%J`IZP=Tv87#&hS#Qf|o}AfR`+?fM4$P z0DeXO9)8vR8>p4t1h1KtgV&wadcHaZmU0{Qyp#^!d~w8_)xWiGvHt$QeK7@rvei)- zaA)sa_}v+czI?As!9wuG{7c}=O%Ki4xL1+;;Z<`B;I9ML!ru(u39oLF z1=h4(0lqaz1mD$**7HdW`2Jf@@WZ)2`j5hokH;$60-tvJA@RAOJN(Ns8~E4l?(lDu zrQr7^X5f!rR^ZQ()!;9WPvGwmQ*&BR;LOUH3%vUqIRE+>Tx6n!i*6}y<3RlC5NL4Z zC@8s<3>t3O3>xj52^!B_0M<%QQnJD({fEO%XUu?`wdx439nl|Nr@>Ir+|OUn-yOiZ zR`v8$R5Zka<UI?OzYtbegG6}K&3eAu2KF&rpy&0aVBeZe=4^q8Lu26m zwDaNplY-#`a)!YN&KnI5Qp&)=L%M-OVj6*w?V5o@!^Qai7lt{QATYd*vyv?^{M&2z z2zvoO;_g-W$S;-fQ3bESsIv3m=)_)T?S@b2JRLr9 z#7YGMlN$F!U~2-5fQ1M|4d{Nyz_@dG{_~LgP z;7d-XflIH?2A8GjpV;z4gW)R{i~!@40>G6+JA1cSy6)AjMRX6x{buVy7Ni%S# z${XC3WdiP=RhN-&tgn8Jz~25Jz|7cM=4^p|t!}}yBC6o~ZSvs<{I0+c{Jsh1Smo$h zp#~3rNCFR?-U#O2KcHmw^0v-{A3mvsA5jdY&NkN5rXi3&ZVq^KK?Ha#cnElWXe;o9 zTYK! z+5^0CTW-$kmu_rkLrKieEJXZ3!5Ukv|kp924V zFN(Q{`#P67-B>@~6#?N+Bm$xxqd@V|K+s@m7f`a%88nP)3K}gAP_hEXLB{Y}Bc0$T zjbFh{J8^I`GefX;!$*2ny#USmLQr8|atQ|(4|joev-X3Q#RcYU0jq?yaO=#SaGQx! z;kK(*!0q}ag7)L1!FnxYK!+YZK}YL8V13`QN>;D_M?ZK2%kIn@h#K6qLBRRFI|ej7 zB?TMZFjMkk)xlUH^Z&X%i!Iwp$$V?R7Fl=C#o!XHW~`3h$oq&@>1lj(RsW~FqbmFk z-N7iKsaooFuR1D||7Ne>x9|=Sj8xMK`SGeP!T-4>phCjq9KQ<*_1ANJqC~%$ zu#ujGfr{=+SgADSys0|Bg#S(dos+w@}{?<~?{-Sx+JMe_TWZ{mAC$`1#nJQq#?;^MZa5-C@yh&Zy$r7#OMY z+VU2-oT|_o-bj5fM9}E3sj9+HY^1IV6I%THN_yhl2e5NjFYPB><@pd*Mti}Qoql5j zeSGr(!Cmwxu6{aL7}Jn#q8corlMK~E=L;tVm9s)=>ak0Oun7G#|MxzUitZy#RY%+r2K?`vN%p*Yv>+VkRhRG6e-Vf+C;F^wsVc-m z6S}u#t;&8Nr0U<;bLrx>)R7g!HbGVEk)4* zkN(}HtR*&9Cq5JCTaxY58O);P4Akl0g;+u5@Jnc*IxtJz_)j$Im(W{`sJdJbUH;0XZCf?07a7 zzN?`Ve3y2qjK%lx9DGmC82Db@BY37V7`{(a2+vZ)G)G{6`Yr?xgqy;%R~C44^pWHB z27WMlC;X6oEe(t3c3%O{{Za)#+$~7*G;@4}N*mK=_sJC*fC@%*de=IIZ-q zjPcs2{_yK{Prz?<_J`kiw*`K)aXt9W>v8bg!VmcELnGm3RrcO&eeObJ%?BNZO!56qw;Ps{HfI< z_|t-CG8TXKVN?!VpL@RjA_6Z;yI{b}CHvs7@|wb{My-LrP7Cs;!?`z|r@*ThxWa2% ztk$sj+o4AAcczoz?*m@K-&cjfKRTAcKbH8wKm9o1&DQ5WXIUcfrCf;tUsr#Ge><0z z!}8xJ+=l3q1P zwyy#K$;lKAOBlYfh8v~Lg&SY~46n5y5^l2p4%~ETAlz)tad_?a&hR=jZ|88dj(L3n zZqffJyso5yjKwWmZH8Mu<>A&giUkN*pL>je&8OjT+nwj&cDFjh?U(I_*E>DTo1=vs zCKqTJ9k%v(lTRb-Zoz;6C9K z;6A^#8WvahdWRz5TX6`1mgZjYmZy{9t!gabt+&pE``_`%VH4XZ2EyAOtpjg2E>_0k z0V!|c?Sluv183iWcW`S1mkm4&?`Y(}oNitDs}Sh)>?Z~UHO%v-2|nmT1-vW20p2y| zyN1QPJ)8{>R^EqqKQkEKBjz-`XGQ=#Bs>Eiy2uIM%Xfn?;R80h!3SQi@MiM{&8Y<+eCP~($VgWW zi$^AHhY#&!1RpkS8GLxdml}5e^YT7p5g5UjV8BReclgMM2jEc-qjOlHs546V=0*4SbXfgX7F*V*21HYo5079p9-I_={0;}kG}9pOKW+vd6S#Bl(GAtpE9Znff&o) z8s<|wUx813?+c&aI0ruchBZ7^lmw4G^cg<$@eKH^q&x80CCVI*)|oTyIDBr_H2AzB zWil3@pAZ3G(C(N5frS%WA)s(bg~x^1!Q;L!gfDjg248$n4qs|*>&?+ZOAF^~7?*wc z3SYis7<@(PJ$U?58GL2lN%*R$M)1|iTj2>o3NZp}797vvXraW$PvL8arookFA{mRX zYp;N>t9k+_^+&)-$pv`w&(84mS$p9d?l*y}5>~@g&Uf@8Ek6Ool5mhn6C+FEJc}toBFX`)8rY;}6tNfoBgukH_ao(Btt3Tl;u( zbfJS!H)t4hZPDZLx#wrY^FDn<{_w8B@FTZw!_~_J;Q6QD=g@g{>uQV>0>`%AWC8wo z7#^|5V=LiTY`ep+_U5pl zmK!5uf?w02$K!99qsQZKXqqEmTC)rJo9Srr_*>d|eE;*e6>l)0?C4G`aA&v{ zes?2!JpNuVdOW^-PBilO-L7ajy5NIB=<)apqa3)djR*3&=jieHNA`8#kBVj>Un#if zuz8hx`oo_*GRwjJ|8(7S8B07nQ;h-7r}l%t$Uu+BzwC`3kAJl&7x^k5d*ok_*Lt&g zZ_K~Lt9ziwwJ_&0(ckN@5YJs$sKdc7QuF7&feoQ&~TAM|+i?*v9N7dYtymKV53L2#k2 z1}>a+g^Ru`?z062@xD$PMuU5&;gZ!ZaKqynaH9zlxbfyC@LE04;|V77M#D{;7b9;L zwJ3+9b!ykjg4YS6Js$Ns?=Q+2EnK?5EpDL26D$?trU+Q(uE7ASN@KV+nF6;dcm=ne z-WzVW-^iO4vhV8)ub1!=?ht?;PjH-A0hkWxO^mu}MtPQ+{ z%Y5WLhWUE4I-cTTaIZkLc!JmKxf&X$zY|*jGY0rvj${Er`tuIlcRzYO!SDWYc*`~D z@q|_<)8MTq2^jCc>u3&}*QS318Drb!o8j$R@$i5#3*haoAHxH?4u=PRJV%{vUAcBd zKz4IC26U=3%$uWyIvrjK?_7-@PYBwwQ^Vq2t~Nrx>%tZAZrNgZ@UUoj_r$009)alb zgr1X&;2};P$cGLWv;xnDqG!22Almk0(sgp~s{D(dNP4tk6`= zX$|AFx9IVN>FF8p8P}YUkBvi*C(Jy^!Dq=wBR_i+T0CKntQ&mpoL@MBdCe5)@r3z< zbOVw(bwhh#e1rdU-D?XH=DOK$w5mW}!fF6ZCk(rGAO<67hTFF9&8~!ON95 z;a8m!;8!odlW}wb?Jx9r!nOUS@aqrI;t4m_9D$dflH&VcxH$X>uC;X7@g8!&7MgEsF?eXZiUsuuMi8yXNa}k$~ z7LRUSy+DsA64oAK6GWnm=ptudhPHS~BQ%SHBZtAp#2 zx0a*F6WMG!Y>FGIbB4H zrw}#x=7<5#dlz9q!^i$PtWcw*Ei%T&1@+)A)6nCInr!<4ckMG0`KF7}k4=8dEc9(b==<>!9Cp3;)y)&u@;a0PN+!+26!Ep&;Td$ezgSdv*|fpdTBJ= zcP@H7k>9><@RozKkZ+YdDu>N$-8K>KKcfr0P2+ts7H=ET6y8pR7Ecu5XABQ`JVnMi z(E)*$uMh|<=#2>-ej0hRiL&j!s*l8?SjAC1%I~-{%#li-7fgMUGR6i;O}<9-|d3G+Xa8O3;u2w{M|12|8u)w@KMo1 zmGY6na8-Ike)|7}){^vS5M;|Ls4~4I~KOMe$&s;F! zWIu3Cd?c8d)>?sswc`Rod#{n; z4*O_ur)Q9!UweYPYrE=s#{=B+xs#5gkG)6hz%y^V!1rx)2eTAv2@duzHUkfAcn)Td zs0MRp7J~;nUIPyeet=_+frM{78d+@FOn|f$HCD!2IH5@My&p@L1+d zP;vZpZycOhH4r?xXOfPik5l8@!cWJC!8LvRgJ;J1fMUHR zFBsm|^ZEm@sOE#5qmPS+G|cI51!!-{=>d0X^L?-+Cm*~#?=*Ntxe2^FBm>mO%m=Tv zTLNAml%nJ48X#0`52?aCb*j@ZM1Y zEMIC2-rv?h&e6w%QLo??i+Q*%)Chby;xYKB#Y^yU$8%t%X$knG;ch*v4uH>U73etn zcvhm6v-P>>FLxsFB5RtQD)+K@g^uyn`b4lQGa7sy8w0*s)f24l*9WW_?*YDT=?A{+ z+e6OL$9roV_y^w>@DCrpz&}~mhJSisEobX-qjdhtFR5+WUUM|-QfV5O=$$yUh)&H6D9`DM^%6po=?HLozH-lwTnQj z7WZ`=t#9>4k%@qf>1hOPZl4Ejt1>`4^&Zf^WC>VLwF-2|8Vx$mnh4fkzgW)Ef=&Z^ z!5hRz!JS)s!yESN3UA~b3N~)(2D&IXFB~+nuBE5W0(AXQ1vWkX9&~$Pq~quU&9>fz zH$V9j?jHXZY>`$1dW^dPdM-EsdIcW_y@x76A2$^!?Ydvi(RvDBqd5rpxvoXP@A(jT zE6G%Nt825t)=&F_{s#wxZO*p@+pY@$+wHOi1ExBG?brJ1IJ!V!Zw}sJiZxu;))DO3 z>oX($tpNL92z2(mqvuy0*roPyJ@1?ayS_;SyB*yD2H!p==ja06H!g?wP^ZFsF5V7? zs1|~uBbR}_X34>@PGiCF0i7t>Zv`~!jzAyTFdat=_7&XW5zaDr#3M6!f36X{|D|T& z0G${dxX%O}bowbcc-3og$krk-a{N_rX#5j7N9zykaS%Ry+y&hKyxjK+5+j25f+H<+ zz)^0i^?aWMjy9U4=ZzWQn71o+94$CDw?BN`wF&TO;twBxFcdyvegrsiofkMMvK2Ua zs)df-|NN8yI|O3F--A;fzJb%)n#(zwpZ2{RKEwVUd`9J0F!pOHIJ58`IP1<4aQ2Rq z;GCl=;M}EK!Fe0!g7c#mfeRLI(BJc&_wWy@r6V{UhF)536Y zvm$kjoTCL(he;7gn;#6{5@-eA8rdA4-qZ)o2rvb=8Crtd9p32q^dq?AyB6Ge{x-O) zvP#F%`nz`>h3_f60^hs#CaB2Vk%NPMQ`BJA(j;(y*hcU`)C@4&YaW;r)E_)pXDE2c zW4fH93mmHM0M9e)2hY3O5PtY|Yxt4;Ku~?z9?Va1W~9Frko6sbW3vVDc*1?~#DGfh zWb9WRM;AEN`aJw}zk6_v^CR#~%ah<)t`ID+-m0f=7g+dl5qM4$51zj{3cQd$o|63s ztxm}KJ=QR=eL>Q<2t?dygLxAto8+;9BV7b{r|KqOvllJ&o((C@jTxL z{$kEA_{$Va_^VO%z^Yjv!PlLBfNuue2CExA0Bc$w1>Xu9@SXE5IY;Zid$bMyfy;+~ zxO7^9gO9pR;HP~V;AhQz@XP8Y;MeqF;I|2*!S8W0@JG*X;Lqqt9Y+`V<=zbbyL%w> z|I^-mhDDKf|GuxTZlZ#iz$}Ov5k$p=ia9G{&KNKU%-IGJF^izKVn9@ksEDCeRKOfi zF$WBQIb#l}?7F{5G5>S+zV>-}Ug&epEI#YLtE$_vVLkJk>XxNK&8V76_SyAw1*+CU z&aOA~7JQ+5@q}u!?={u*n#M;`PGA;x37hYIj4j6R!IsNT<2=2SsCmb3rCNFHrdoHL zPt8{%glbc5M0Wi(j#{8taH^!7zkvRJXBq{64x>@%v>&zby*5So z;rXb=d~K=41FQH*$_Yy}{feO{6waSR@RA={o)T(XjQeA8t zQC*!%h^qWonO_}gxD~47qcmir=i<0Vd>LxZ>%Xb)5jtwEeUGTMXFa3V2}`8b z?R$<|Z^naENjaZKgB`ej?|9sx)FRx_BT})rE5K|U3yn$yX4mHnsEvR5Qk$F|No{(+ z1-04M_SEL52l+_K1zH5V;+9d(aVx)e)Yd^2scpPmsBL{MsqI|zQ`wg zCmLQ=%~K`CUhi*WZ>v|>`-%~FdYgnhAG%KMa%nfU>#76PZo5LL-KQ9+Jr<9n_Ut~D z+H2BMA4xfX@7ld^pRQwll6rM4fonhdL>A2zBz-#?&d}T2ZG4m!(egcA`!n zqBrG>8E#h8nOY8C6eI(_C zYn_hcb**mT^?5enh)M@>#OGtwNQ+h3^+p7B?<*tCxo;0@i=}+A;&V#zMeiLf6cPZ+wlI5to-K6aL+l(5MKRvtNe@Wf@Gs{O( zE)aY4BHni|4eyV7K|OHfB=um>1*M9+0>Yzc9P*8(9-bCVJ<@CmHE!UhR7pAE(Q;Fu2Wgkhoz}Zn> zSva>SFFxO`AoaqCchrmSU#LlKlBt($Z&NQj#b(#9hpEYhE~iS$`I2v~!B;=W;A;nG z;_Ej;@r{Vpsd`D-cys>*8n^V*skfJRrQYe+hkAEHZR)*-4XG)8y7)-Sara9*;0N_< z;fLl8sEL)W=(&==tKw(Rk|9;4{=`Q7NgCa)IYVw&52+ z$M8$9Q`A?!5!BbNTc~fE1yJAG%%i?5H!!NeCbyUSC*PIab!TVhWA-XkCN$Ea7-pS3?wGrO6lO3DR(6}gUoyT8DHH1DZd zwimK%+Er1t(${FJMxVHkFXUTGsM^RCR9*Z|A4%D05-=H?Ml8l={d-_@{TOV~dJ@&L zUq@=5%H64X8&;=US=OammoA)LUzMQRm{&`cl=JIt&i|p2|3yI>1@;xA7CiffS}61v zweZ&4RNHY6sdmAKsYSdKs6~gYp%!!7NG(`eU!vivdF&%87jQkf2UklwjoqS?sMQmFUaS^I=73oc{GI-~8hvYT8l%;(pL|4UUq7UZJVozH0E zGf52g^^`X?@=DT9(ioC1X^R+2gzGE}ZPJyuc@m#ylD%B~vUZaEpXDRT$}I*79Zd6@ zRF@WKb6A+zA2xT^7N9{IlsC^eC`k1Y?|ukXbh?QbVvWQx2cP+rqTFQJ6bE=qp6Ug z&L3?{L;Eb{qdk-l4>E*I(ped9{n3s#w9e8x8pmX5ms;}PO@=*n%*+i1EOoUFUY5Gz zVfXL+{e%_zt1NYG=^M@R=zc37@uJ)-!COEX9j$exw1(&t+Jee`7s|~NfyVy%bs;*v z@?0eUoD`+`S}$QWMJYcEt0{`94-Wd9qRf3iBU$VZ&Ph?O^u=n5vd0svDaz6^SWQvJ z==3zy6s7$$tfnZnwO--^YKmg_6z8NUE54n@IVp*v!@Qxu;OSWQtp+hH|Dv3J30iX!F5QGZjEEibEji3@DaNm0(*U^PYA_7Uf%DD!U6 zP*aql2eF!>v|NSN6s6k!WN`sCMajPs=cFhHK1{)CigL9lR#TL{9ym8e3Gd-0PN=3R z)9PV0Md?`*t0_vIEUcy|MbmIjigN15NqqWmigG6XQL;Gy*_;&RL?X^jQ8sR(p{6La zgRq*S3>bpd6s64^FL6ROMR6L8)f6R9OPrIU+KF|*McEvI)f8n;09I3! zQR}_L1=SR#oxgByisC!~t0{_AQ=F5c=-!scCTfaut8ub8ftsQmEQ{3?Wu+-rQ zu$rQDxq#IarDil%QNQJgZ9h1C=#&jXy3qKtnXkJS|AVkA~ml%0WCO;Hy5 zVl_pXFxyLM}TIVs99bF8K) zYhPhCMVXO=)fA<-em4y@Mezv1YKl^BmzTJJnxdF2#W^WT*we9CO;JvF!fJ{VRTHZz zN{}7SO;JWyPZk$YQR#TLf zjCh*d6lKyZHmE5|S7tnonxeQjW?fBDN;BhWa#EDNSvLt0{^ZGoB_VMLF?&6zeB*Qk1hDu$rR8 zj7S#e&rMN6+R;!`6hCG>jhdo(G2>~}6vgEe`_&Yss0|m$Nl~tTXU0=gl%kYKo%qz-fO|l=QSx_;F5( zk|^Qa6lDi9UT%sqKg&y;P)$*WrC~KiX~m4EQB#ykQLL*eN`XW!kdvZ(_{fN-rYN7T z1+ku+qQo-eY19-Yv=tlF6lI(fR#TK-Exp78R8y3Cm9d(l6wfQHrYO?ScUbeeLaOM? z_mZ(zO;Jw1Nfrxgin8f4R#TL~7_6o!1DWw;HAQJMfps-SaqNoK6eaI?FL8dGzbQ)o zH;j1yNl}t&u|Z8yqM7kzHAPvN$-0`NjCg?66s7ZzWN`sCMX8a3)fA-=Bc7a-qS$|C z#FNz&rOb^04sgs#QI4(W0&0q~ju|gEMVUE(bu~rl!;B}ZDN6nFtg9(XNpq~GD5i{f zxhYDuXQs*G8K^1B=@(c{QKFdfWHm(zie_C+QAVHV0&0rVo*6GUMX9=&bu~q?9;5g_ zDT?PiW<0r3PKt85ItQpJijf&lR#OxMGhS|rGPz)~cmisQ(v=xcR#O!B+pMc8itS;3 z{;MfUhb(41HAU(8=nxM;O;O^*v6`YpFyqN;ilXn!x|*U4oyG;#6s2WvtfnXx8zhUL z|G6oOIWwM|lcM;%V8)aC=cFiSpKt;-McJ$2f@+Eq!i<-jqWGO=T}@HE81ZB^MRA?a z&wp7>QEWzVKu(G><_9yLoRgxAy*rEtpr$B?+h8?CS4@Qn@Z0)D*?C1kOoOmVRQ!lSBTdD9f%h{NZ zpo(lzQ$UB`FE3DM~aWo~))Qix~0b z+!STxI1W%#lrBrTfSRJzWX8))Q3`irJtsvu{-q|)Nl_AR+Tp~U6lMPptfnaI8S&)Y z6lLbOWbq8t6s6BytfnaSqFiRglhqVu_YU^w zrYHtxJXuXqCNtyZrYPMO@_^J7r4}=utfnY-9avXW6lnw(c=tC&d7sLNmz$y_xUim^ zqHM@dLrqci%y_bzqV&7Tx|*W2{OBcqOVt#mA~RlYiei3{^_&#t&x=(!D%S>V zzPnjCH$^#|Mng?eR-eRbiZV3{t0_v4V63JnjW;EW3#chdnINpDDDn`TlcJPLXTfDN1E#Jgu6dSjMuRlcG3(5+mM! zQWTf#%y_ve%Dzx#gQQhclrUyIt(u~Y@5;KGqI9Z_)fB~}ij4G~EKA>B9tpAdL-1{m1B?14EfPYEAza-#a67Vkx_?HCy zO9K8S0soSKe@VcSvjUe8lTH@?vSW4*J~ zx>ILEco|(KK54s|aw47aMj72ijlrRUuBc&A9W&)av)AP{$zBO9tD7&gB3rgJbac^` z5R1ma6?E=eZq_gn_e@wAcU9KuHF;Z!hvD6ZzZrIV=&EFY#&u(5i={EBiY`<(IJ)Rc z8kHL;0yJS>C-Sb`skJcNbJaN*l#hfj7*^+mqrqpV*2>VlnywNpt!1}Xh7Zkk6-<`! zNDo)jrOSrM8p&--SE=f_XO3vRu{3nO~tMG2;U;)})l26#!t3q6gc{p@Lk z=r7=9Ej|22BeY*M4y#xSFK@U6uP~SJ%8ENO#J-i!)A1_vMR?WOQ+V}@(KtLNP1&V< z*z`Fsyf)+{Ubju}Mq|BS6pe^^h42QiU>rHNnxFV$qw6rdsbfLB*`^JSa{Yp%ehl#! zjjcAf@z%So@V1P@c>7@|yyNc846$$LYAYPAKWwD2Ysz~XyH~Hqd%9o6F;l1Gy^Y=} zhe=Xwk3M*xLo(i9ry)L|iNy!Y^!5{9986n|56KPip~Ok}aJoG{vLn=AH1u&NWEw{o zOrUWr@(DgZyep0mID->f*T#v%(=(Lgq!X2k;ghXT;ZqjB@af81@aa!Q#Wv}zq{@5l%Vl4dI=j|U8;35r6(t7=JAs?$nFKW=#?6{m|?53P5H3tJ+`>Sjz+muXMeG={I_+uLP9=V@iyNn zmA94pfGa1g$q@UT^w)8f4KuNGzXQ0ce?RQf(12Zi8sTac_bZ1<8aGcztlSW>l12@C z6B;#MOu_CJW&FfO_j5gQt(Q7ndz%NYbM6_gyR5sv*jI1cIqWgEF0Mas2X4@@1a3HV z5%zTbgBx|+mZ2P{+z?@tN~1}&1)`y8l5qkz%Rdq~yZcCKOPb~%+T#|76LHI{uDI3e zO}O=uc79@Co2fy#ZMX|=*JB87KP^A*&^XXv?DOjJNijD>_|ovMbCV67B|K!`I6U-1Ivy6*84ut0 zCqwKTG2R`I3`@nMIu*gA$Dha$uRrC6h?+`~G=7~nvteurJ3OxXTs$uG2cA%HD4vj# zf+zk8@)O5RiaUlU-yedftck!=kG8_o=EV7nebd)E;TeP0;h8h6vj0@iYO1H9_pOv6 zHu{(Cj{}6MrX)bv>vwqpn_^mx`k{j7>VpNJIKmo#4&8I*?W8mQKHC@n*pv_d91-9z_GQjy##3&H z7>IulxX$_?CuTfNR-5-3%05}jBW65F);KZZ$(q*|Ses`b>&gug<&|~i!=_&|)i)Dz7g^n`g$%XI#!nSK`ux@wsAuck*78hO1j3*cKt*#s< z$;D?dDjDK|tg7aX2z4-w8+nT+aYnRw=4e% zw{NkIpZ{_P8)iJ&s{%g_l^Y^H_=^*HoAu`a?9sf4Ogwo;3Q^VaAjDefPlqi!kHK z{qK~*1HPZ*0S!#7>#sEAL3egw-^dbp@S#O`i2olvG;$jk9OlD_Cl3!`#FIyOo?v}s z|B-q&jI!TMV|1hTc#H)zp6ut~iv3JiuKTw%y@FxJbA^* z6L{t9pX@hm+Kg8XxR3R#1Lx8RZ}USrPWiCufkW|Hrxd)dNo%}54>O(|QH2>#j(8ox zdSqT^JUQ}W0N(h<$xobT)Bbh-qHa#I!coihc+1ZBcsCO>iFX*Yc0DI=bIayKKMeCjkKo^nG(HF14OJ`=Tp1I~^vsGLWV z&n-E|1^Tj%p08{`Y&5B06QyjE|0yCw~rc#$RG?`-ua;`sKslLJs5aJ)HbS|A*fi{IiY~&h(mz ze-(L;f7e-^A@=?LuFQB!%__=>CuiMZ#M4SY`iOPqhKNHe#0IT=w;>H}Br~2?cbFMZ zxglb?vaEdA^lB~ZX8k8&^V#-(qHoctJGLAk<2(*^ao$Exu$5(3f3eTnfe}x+A%YQ4 zYolSrQ{GnULNPYvPg}qN1-Adf1utyL5C;~T{}316F%R1gOTcyuhT|gM%y`Tkt>R}DK|tkW4(On0oE(@s(>p_zsdzG)nmrfR_?VAI~9A)dX;)Bu(QrwIlc03 zQpLrH#|;t8cv_dt9&B(unZ$-_PbT?^jc%Km@wC-XG2>}#1ctC)b2BrZ)_veOTx(7V z_SbI9jHj(L@DHwA#m`@yr(Tm(?2*?S*RP_CcrMC9{WmpeG|bD4r)`*Ii#^{YWQYSB z9jLApN!vJSV}`+}j&AAy_TC3qTkS-H-wcyJh7WagC3GUf5dY4%AexBJ3FH$kRroZe73UN&UyQ{FzRiE@OM zF{_a-Qe!YG$%0{TOS$ZSmvl{ayJVJ(sm*mYHUG^y%C}T<4#VD7${iU-CExg)e*9^r z3zW0F(;Dh5jr-c_YMTA`upgboVLsje=V4d7h{NcL!whq~>y)?3`Y0DN9PX}jHoWQn zH;>8gx%JT1&+div(3KYHiHZ29uf#AtbPX)MT6R)$pq5I!6Xq)3@#?Fb*Thm;HZe5n zsheR#3Z!o7)Y*8mr>;LjPAtW zZ9LWBvAU}!hWho*EIfn4W=)CtvpD0>oc&WycB$ug&85FzdWT9G88xT)Ym|S3s?}*F zY4SYfoYJfiNyp!nD=1$pzmz{$hSF1%i|?MS{6kdURx7WUcy{9FV1DrkhRyX|E2_AN zsNzDRii?RVE-0$FsHoz?qH=LrT-?O)d$O*ya#=rr!?MXr3RQE8uB5fzTDgLmxXS zXsmdi%EcCK&{(xm{(-e_V)#8*=PLdr>&16x@staThdpfWAfDF$_30`PQtZ!py5hkK ziw7*Kc>1D>2dF*DBrjnOeuc-E(VoWwnNnYjpEiGAiFc z%uRU+2LCELb7TA#U6{tueVeYFp=7Ksk72EarbzCxMN#ov7n$R`ELPusvyZ|6TSp>UPMv%f>24bS*uy zf4`dX`xW$6iC_)Ce=6Tkl{c+3X|6QQj2*t~Hp_+|KXs*z#WHnWfAXe!h6amG&5d)u zn51b8Bfgn98`3(Ox|wuP4zMv^{bu5%&HhKDEZG~%XPQ_W-7`%Vbk6>U+D_SJWxU$K z^t#3n)6vu=`+F@SYx<_N^5p3#VD4JxN&#=Uxe2@IkdUCMoKKVcEw-%T>{P&@lFBA_YZIP*y zA^N_lg`vV@ZSm~ix9rE$WU=yi4E;h(U9;CiDx2yI)vlOk{}VHw4>9$tlf7U3p|>`+ zzF@jeV|aVf)F~`7t=xZCypl{KWmYtjp?p)*TE^a2Oh*(G@wvgKhM9%ivQL*jr&mu% zNZ)zbQ~CZRNmUjpr<5wYif@gzJvGYr0`ax@&fTn$_^XrQ!v|Amaj=!AI9UAQ6epnm ze?CcPgbE&FseLnBEQ`CgoRSwqJ>I`<;~hsDlebvM*D z#=bVaFWY`fE}|S>d1%fv$bQs0hyQOEvkzbV&a{b}p-xk?zi)Q<-rmekYbbI``L6+Z zv%^`&@@38D{mu4gEs7Br2yp)BDeCOLqj8|s4LqmCLRZnB^Y$Q~TVWKQd+S<)=+86j zfae|DkLN$Hh8L_{i5H$Nh!;(of){W3f|qpdsi(0tB!7&g{0edRz{|#b!l9*mc#3{l zhnqMos~%qAV#F&RmBfa8tFhsD7GCv!I$pg#4Ts-Z zP8j$y_zzH$R0aCKtJx@`u4(y7r6*!8oH>r)Ue_W4mIu^q> zuleKK@-KWlb^yNfrl>3b-}-K7QyTX!W-1LO+n?@}AnN^{5AcItjq$^U@%T}_vN&}_ zBu*=CiqqQ!;`E;{@RJ%5F_QA@$-N8sS)l;@?BsJ#(SQDVV2t?x_R@<@=V`pW(TokR z0(auq`zzo#0~h1B>zcYM+og9+#^Coe%j1kH3ll{DLmzYeG4Ck+$>SCN^ri#;QX&a| zNvejw{@U#-t}lIyE=c41{SY?%Soj71JRKb))-y-k#=oML;NP7;dy4*_AU~W{|J4OzHS<}xbzKM&g_lz z?7EBd_Gy5v7RO=h`t~^Aq}wr)avqzKGS1)iFfL$P+Eerky05_npJ{MmTm4KLg-<`G zVf(cowu?HAi`;62iw14Q#p3(AO3I0fk3N|oYKaI>T(W%>E~PJnOIHoX_Wg9&!Fm`j z)8H8{^R5jptFI`>NXm)IUUsHY-s}l3Z*1);`W2p^!4(ZvaHX@`aOKI?*lFtmT%~IU zb`BnitGZvqE`IY}CFMM>w)=54uMxOfR&s*q>#MuAqfz})ERC8rF1Tj=a_pXwAJ>YQ zglpe*ju8je(Rasn59h=6hEDVpeUDWiaQ&9uaDyq=al?vruxIxJxRH5rVI|wIZJ^Qk z`ENEfb=dE!ENGgZeT189R^sL{nF*rbB5ew88S((PO6-YS`^Donksi3MS0rv1Pztwq z4a6OW*Nu^s^LQ2A;3;1JnvShY(CGMMw$f1E?6A@w-0AKh+{GdlcRAb~cYS#RcUxT% zcfapTnyJ@%q>Jcn_h`Uz5a!0dB4E zfVACsP;uWFaiT$qA=o#w1s=R(m#63tNvVW~E?A0(#pS`nhmXZ0!r$VNtvlgSb1YrO zaic5O^c1gu&6t62X!sTEm>@j1$z?qDQ*}JvF$RynUKmf*hT@5_-|(cz6Y%8FyLd`c zNQ|VMXX>~(JS}=0p5E(@r|8dE)EUpLcSKKP)<}06`r>P`f7>G1KXVqI?er7RPVvEW z3fs9#%8BNjnvo!C(B~g`?&iKY_(lqzH^&pt-+v4*7*qx?TpocJHP!2AES?z`BPl0Z z;`j_N?XwPtSZO^)e_4G!UiRiG4lCIohb5iG%YQe)E26jKl@H2c!=iZr5#BcQBi_DyG}iCvbA!gtC0;b5>mS6sCNtw{c9&d*_jF^% z)5MrE<7xKRs^%&w7ux%5WrC>t?3nR1`_4?k`@eo+{lJ!<_~5PE*f`e%ABz7Jqa3GX z`-4l-I1+JFG&FG?nDI16^~`vhV=g53TAAI8SNqowj z8BcR+cN9MTf)P)1#*mmGDd#(Tu7NAB|8tW!(Kx@28BcSeTM)iDPgXWanxtAo@TDP7 z@MXJJ_)15K3noj0J;lDOuIcz{Dl?wux(zd)=6XV9)^B8NVg2R?Mm)`} zW5b=pQC#3|zhr!GH8Y+jr6n_-=Kj=StUsuDIYCk`_^<~vp5~Ex3{I`%%zEkzW;{)L z(R?`l+yvI2$WAfhxF_4X;-~3WF}(htEgSDC7M>@*XTyuJUGU3DW<1TSj?8$P*8%%j ze^ad}>u-lAyNcu9*<|APt(oyO?|<4Qi2jGl%US<$_XqxD$%v=HyNti5sDHef@ibZT0AX2j zdnndrDZMF{3nXCqM0u>u)ISgxlyy5BCx~j25|2$6mc?dqk=T5MDYjS>h%H+)oZ z`{KNnFR*SkC?G~s&SPyEjq^2CW<16DKArazHGkP=IRAA?!)?Zu;T!bC~hu3I~|+*Z=Czp+QNR;>qp)CwH{lhC80M_7r{Z zZ_Iddr!5({^X-wWcbR()cTJe@D)x07ydQVpFar1Jkend;J^kC^UM`Gya&I3O+$Z1i z1o8Tp`+73t$$j5X;sBr0pV;7Yg&9vCV399I>>IGBF6#qdFyqOCRx#trzUQv9K6nZ< zo;+k5GoC!OdvQ;3+^~5D)`!>njYkZfibvW#;^)6Ssv|R=JnCB_8^%;)#*@dSGULf( z^Y?TWCmNd&pCIbE56pP-_zjVG!qrl&PxNQTlPB$!@MIrf)~AFs;>lAzTi|I^|L_2& zSJE@%$uoMS(wJ${+*496FslwTo;>SiMeJX6Gwc56nepU+A9L~SZEsi)OyA@xj++x| zo*-(_i6A_8>?<6+kr7Xx*D(ptpUsG;Wc$^a@#KXAoH$@n{tz}SZqtGbEdDSKFLkPf zm)>K>lb7YmgO?p)#*;%|G2_W$;hj7s#`S8?DPM`k>EZKqJYPX3l4`s=Gt!0XfR;td76;teO_aOAIXF=F4wjqC8H`*B6;PVrsIl+Z;%y{y}E=zEd?i1^m8tmYL zm!90jS4u6yS1x_@l#~l3|6#_HukN~muRUbMldms6h;JNsEEDdERgjM=~CPxK`{CFKH7_pFW)^;zF6{Cw$j{Gve`emSNOepTuue%+xVe*Gs3 zzpc%TC%=83m>?C;xD5=_&d@eNM5SX~T>s|MJ{|e`Vxl{g1se<0n)78Bc4ny^X8rn|6;$5Y=qHGd8asiYWNvC~%b-Pg^jcC@!>j z1?z=;jymbM0TDJST8b-8BbfZ(vJkuFV=Gs>%}cnaEZFzafz45aH(R9c-m6u z8S#{C|7Qs{*l!PDgTv$6G2%pJLf3nW>UgpkE<27HPg`!|FI?Vx0P7WIGvjG1x;4d> z1|+avxj=dB)aHS!q@2g;qd9hVV#L!rr-%_x$@X3HM6$sp&QxhgTG!WsxLWuN>~_%? zSD(g=r>(KG1+LjMnsxW(17pN-wdyXxwI?*gbsTqkihkYB6>vQ*Bc9fyh6VO`JjPRU zP&PCu_?kw8lN~vr;cs(SaiHg>>Yf^1*s@in43{gK`587iXvP~t(oOpPAHNDq-fd!N zP|2*Vp`%t)cBPeUZoE;+%wB6~RmH5JNVbgyoy~@7!s?$WC2QS`YpR-k*XWf?N&Y4e zd_)cKua`=F8t)@&pijwE>gh-yQG*(0rBb5;eMAi|ot8=s^7RpQUe?J}QRn-%@DX*v zqo`C-7q%ZrU3Bh*kMQEE&G3?KoAor7T34VEGH)&pd1rw`hYrP|mtN!LEnDN|Msw=Q zYJ=&oT=@#G%HI;Nnv{fBf2fSZyY9wouI9yS-9zxY82vjM>utx;hzLo>5m`&9kyGE& zk9_2ZH}$xJH^qD7s5*ObR74HDwP+aLs<*}4eoVyM`+mne(w9+pwk%9PT7P0Zja?PK z(b&DQ3*KXP7st%5g=3z_;n)F1aqQW3cz>fzyg%kJ^`KJ``UgYS;6s)_@gcvN`0%Uy z_=s0OtdF~JoW@btMl_D?*np4QIO6yPvvK?nPio@$_4E_(mcb`G`Qwv^b@+7k0r>Q) zXZUQvrugiXbNJk+^7wrJC!#6|!2KpZ$`{hbMrTq*O*&f6N7PFW+fqfnyw=P|)GL|= zsiG!Nf9XR_8<{HVwO$u}sEO@UMZHmPmk)Kv2-=m;IW-2~uk;B&*xV66w77{MEgqd+KYpN}Hp&a9UAvASw{ydfV-Mh`&V}&P zPy>FR_bYxrZfdHyzVzbF9U3ott)#xX`8ic-ORwuq!EX-S!f%WB#P3!d!tXLYaK^-N zoRLxrf9x^?e~gpx=bC--=glRkUrSA=|26PWs<^)N?N1*X-v_3q3jcW65dUm)0%sm~ zz`qXoj&YJlYXT8}Zszx(JlS)kr!rJDKu{L@LHYtA^n=ER@>tADLx|N36 zNGCR!Kbwy&+FD`DGb3=Gnw6+|_spYjRX7i}UOF6Ge}0Q?#2c1*zUVEF489y7rmWyS03T^=`Wd(x_1}kwy*WzZ;R1e}?Y)AJTW9 z+#lEakbrA%y9i>gK_<@FLA@MEpfwCQ);80gG67iX%zp0 zMw7bDMMKjh;sS0~tRilvkH*b^TH+S{mf)6m-{4j)cTiiOw4mRn;v(F3<7?c`d^B!9 z`x0*d!V7y1*rQlU0KCq*(eQ4(j1At~3gOOW#^cV*s!_Y#?}I*B9L5 zVkg|w^)~LcvnK9sa~StoXove`tik;z)bJ6ne@(x;Mi%;awq>FJ;njFx_3wD#>gm|G z;63a+wGSTr=_nr3qahx8eLWu5xHon9(IfOnlxcuRu3d{q$@X~kj9I+?HKWsI8h*Wf z*x;A=1dsD*jK@Wu!4pc9#S<2!Qzw};qCaW)DLnb9Bc9TF3!Zw~1W&6x4^Q9x9M7;E zj%Us}pZ)ru`6-wM{ivrb=&ujM0qxG>fPHOnp!0Sd80L(FtQO*+@%ixFx1(^d_Xj-h zQU^TW!-~4#;7Ixli@(Qzw8ESN!>iR}Pwl4G(YNRZY9&)yEIw@UnIB8vXiJG}h`$&{#KX8eaFdHZ@|1fqulL zVmPwJR2&)o3va5>3vXKV5J#ES$5A5_@RsML@z%B*@wT%XyuD^TRlg&qBnvwWN79I1 znuVjk1mfLe((vw^zBs1CNgQ*a1&(!z!m%qV;r;o7@%~xOs0Y4prhl++1#G-C7awY1 zA*>_-hlbKPQu4KEXyR72#&N$d;bT*(;A0Q=;P~#=IQ~o$HL+1;`iWb1&3^sgzE+FIomz2hxEos(-?LkX zQ1Agk`nEm>H zc5gO~=bk2PcyVM9ep#su_0=YS`mZf?_)Xvd{N}|o{BB@V{O;U2oYAB_&e*mCe{?j* zALlK?pXFEh^Vn^AzWDOSjD@cq7vOIfU*hl8M&chkFXEs1+vCiIyKv?QSNwa#QvCZ~ zJ8D+vo%FMgxCqOd8jFQxO?ZB+Ei?ver|Lh^(0%Sm!=%SeY3yl#p=v{{cL+N{ z!_nG-hU56nxa>PEF4t);E`RAMu26j_uDI(gu2dq3T6yJT`jvkT!Br-m##QdO!d1I& z#Z`|wVORJ0!pgsaS!+eZ&31%n$ZkQEsMWLP(XZi~2iJTw9J@Dti)+QV#kI>`!F3|4 z;<~!MxSrky*LxC%>-YVL>tBkYHf(9F^u^tMyFzI+s*s^HB)QSz3Al;bHQZ!WSKRdZ ze%!2GZQT6qO5DP^7;YJ}kJ`%Coqp?(6}a`+BDk&JWZd@VPu$+C2d{s*{ek;5yj<(C z!E42F>}^vLd(TRtcKT6=e&@c&aF@Hqan}YBxZ9!MxO=Gp++)=v+~dzc+-piA?)9)4 z?$dn}uYbAE+5Rl_Ym~r3zpYJhe}|2@e{eZGP%{S)9AbtCr47cu&0pfdi7oLES5xZH z9fRl(%l85gU(g&6e}4gw9A1&vzdZ6vG>y@%E!i-7&l2oc=?(T<>W9Z!T*l+Zc;oRe zWAKFTqp1_GU7|m!wilipy9ZAx;)bV&F2hs57sAuW>BrNUe)}tpnciLS%*29JeZ8^t z^&7t6fa0BSfd6egJF_MZ^f`>@q}bsg&oy}NksmnNekPt5o`UCFtfnr|2YzQ^!OQ71 z77e_I7oG2emozzwmuzo{Lmb!RkogWcRO^pJhiP%xo3+&C-uCoYB+bGr-DGTt_Q9+2 zKf(IdiyG5d{oxFaH6zR7HCMOcb!|=Yx+ABk5j7p@M}%*|k%dig`Bzn8tQ(8|sdk+r@&sf#gcR^gMKOW;$Nr{UAp|75@Z&+P6^ z<7~lHHk>m|&91+G(Z4Xc7rt=+Ax`R6A1576z?W;4#+TP_#L0FVoIGO=zWVhszUCWA zz5XbR{*7jVK6**{t-cwbM&njFUpCy1IEn9=w7_@uQTXoDN;suoFitt02R~>y3_sXi zf%>T8T>6ieSl~4Cp*U^SYn=X~HGbUglAgwsb5&?Ob>4%YZL`MDZIh@kmQ|+z;_Ghw zYHVKo>Q)GTM z{#x1=e_K5ffBW+t|Crhh|9E&0XZEOrGmjs|zZ-YSu3PWY&ni<3X9dRzYc+CFVI=_= zvW|wFmPtd~LXUNc53osv{@64!9-Gh|1Lzm3{R|i0*A&|pIfw1S%456lJ8;qQ=D6sc zMYy>4D_lHr8?~f|8U2!x3vlV;FNKu^AYdd7`^<}?p>^or9+yekg&iBY;<9l|aXE(q zxcr*2xPqk%wc?z`^eeu~k1G!vgDao^gsU{|h^uVBiK~{au2|gNH{VFZRack|uESR2 zYH!`BZr%szSHDyU*Kjl7n$cgedx5FA)}lMO*2iAB&d4LU&b9iuUfZ>}UR+OV{hEhT zr4Gt7uD`~EM#IA4Y-~8a6!!cw12^g=;l?-n;wE*|anl2yxLL7NxcQ1QsfLa%G)99@ z3(dCw`L{rWcU7};-05f7;Av)OY+TLE#6;Y3 Date: Mon, 10 Nov 2014 16:59:57 -0800 Subject: [PATCH 104/194] bionic: libc: Added path to vendor build properties file. Signed-off-by: Daniel Rosenberg (cherry picked from commit 71d220c1de1372e20c8bbec4ccf387991a3bb549) Bug: 18281574 Change-Id: I2843f23ecb4c4ca79b230d8041bbca02dbedeadc --- libc/include/sys/_system_properties.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libc/include/sys/_system_properties.h b/libc/include/sys/_system_properties.h index 5a681df72..0349e4c3d 100644 --- a/libc/include/sys/_system_properties.h +++ b/libc/include/sys/_system_properties.h @@ -81,6 +81,7 @@ struct prop_msg #define PROP_PATH_RAMDISK_DEFAULT "/default.prop" #define PROP_PATH_SYSTEM_BUILD "/system/build.prop" #define PROP_PATH_SYSTEM_DEFAULT "/system/default.prop" +#define PROP_PATH_VENDOR_BUILD "/vendor/build.prop" #define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop" #define PROP_PATH_FACTORY "/factory/factory.prop" From 047d943ee90c7582c08bafe6c2a6de132f12502f Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 14 Nov 2014 15:14:44 -0800 Subject: [PATCH 105/194] sysconf(3) returns long. On LP32, this makes no difference. Not an ABI change. On LP64, results are going to be in %rax or x0 whether they're 32- or 64-bit, and the only difference is going to be whether the top bits are clobbered. (cherry picked from commit 60d84af1726225320b26683b726e5e735d9d76e8) Bug: 18390956 Change-Id: I722461498bc5494e2972fb07d5189dffe76e8993 --- libc/bionic/sysconf.cpp | 2 +- libc/include/sys/sysconf.h | 2 +- libc/include/unistd.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/bionic/sysconf.cpp b/libc/bionic/sysconf.cpp index 8309f087a..7734e40bd 100644 --- a/libc/bionic/sysconf.cpp +++ b/libc/bionic/sysconf.cpp @@ -150,7 +150,7 @@ static int __sysconf_monotonic_clock() { return (rc == -1) ? -1 : _POSIX_VERSION; } -int sysconf(int name) { +long sysconf(int name) { switch (name) { #ifdef _POSIX_ARG_MAX case _SC_ARG_MAX: return _POSIX_ARG_MAX; diff --git a/libc/include/sys/sysconf.h b/libc/include/sys/sysconf.h index 0a46e7aab..3d058d748 100644 --- a/libc/include/sys/sysconf.h +++ b/libc/include/sys/sysconf.h @@ -129,7 +129,7 @@ __BEGIN_DECLS #define _SC_AVPHYS_PAGES 0x0063 #define _SC_MONOTONIC_CLOCK 0x0064 -extern int sysconf(int name); +long sysconf(int); __END_DECLS diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 9b9adcead..1bfdb0e4c 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -177,7 +177,7 @@ extern int acct(const char* filepath); int getpagesize(void); -extern int sysconf(int name); +long sysconf(int); extern int daemon(int, int); From 432f645887466ed7099addb20fa8915c8a29fcab Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 19 Nov 2014 15:16:51 -0800 Subject: [PATCH 106/194] Fix flockfile(3) and friends for stdin/stdout/stderr too. stdin/stdout/stderr are special; their mutexes are initialized by __sinit. There's no unit test for this, because __sinit has already been called by the time the first unit test runs, but you could reproduce this failure with a trivial main() that calls flockfile or ftrylockfile on one of the standard streams before otherwise using stdio. Bug: 18208568 (cherry picked from commit c48c3e4bb3d1665f3e9fa2785daafa72dfe59399) Change-Id: Ia0c43ed4ac69daea8152aee9516415a6e3f8a042 --- libc/bionic/flockfile.cpp | 12 ++++++++++++ libc/stdio/fileext.h | 4 ++++ libc/stdio/glue.h | 6 ++++++ libc/stdio/local.h | 4 ++++ libc/stdio/wcio.h | 6 ++++++ 5 files changed, 32 insertions(+) diff --git a/libc/bionic/flockfile.cpp b/libc/bionic/flockfile.cpp index 3381e8eb9..b73907cbc 100644 --- a/libc/bionic/flockfile.cpp +++ b/libc/bionic/flockfile.cpp @@ -36,12 +36,20 @@ // struct __sfileext (see fileext.h). void flockfile(FILE* fp) { + if (!__sdidinit) { + __sinit(); + } + if (fp != NULL) { pthread_mutex_lock(&_FLOCK(fp)); } } int ftrylockfile(FILE* fp) { + if (!__sdidinit) { + __sinit(); + } + // The specification for ftrylockfile() says it returns 0 on success, // or non-zero on error. So return an errno code directly on error. if (fp == NULL) { @@ -52,6 +60,10 @@ int ftrylockfile(FILE* fp) { } void funlockfile(FILE* fp) { + if (!__sdidinit) { + __sinit(); + } + if (fp != NULL) { pthread_mutex_unlock(&_FLOCK(fp)); } diff --git a/libc/stdio/fileext.h b/libc/stdio/fileext.h index 1f2a3a31e..c074b4b6d 100644 --- a/libc/stdio/fileext.h +++ b/libc/stdio/fileext.h @@ -34,6 +34,8 @@ #include +__BEGIN_DECLS + /* * file extension */ @@ -63,4 +65,6 @@ do { \ _FILEEXT_INIT(f); \ } while (0) +__END_DECLS + #endif /* _FILEEXT_H_ */ diff --git a/libc/stdio/glue.h b/libc/stdio/glue.h index 4ead20a81..a9e5d1030 100644 --- a/libc/stdio/glue.h +++ b/libc/stdio/glue.h @@ -32,6 +32,10 @@ * SUCH DAMAGE. */ +#include + +__BEGIN_DECLS + /* * The first few FILEs are statically allocated; others are dynamically * allocated and linked in via this glue structure. @@ -44,3 +48,5 @@ struct glue { /* This was referenced by a couple of different pieces of middleware and the Crystax NDK. */ __LIBC64_HIDDEN__ extern struct glue __sglue; + +__END_DECLS diff --git a/libc/stdio/local.h b/libc/stdio/local.h index 13188ee1b..46b11f13a 100644 --- a/libc/stdio/local.h +++ b/libc/stdio/local.h @@ -41,6 +41,8 @@ #include "wcio.h" #include "fileext.h" +__BEGIN_DECLS + /* * Android <= KitKat had getc/putc macros in that referred * to __srget/__swbuf, so those symbols need to be public for LP32 @@ -137,3 +139,5 @@ extern int __sfvwrite(FILE *, struct __suio *); wint_t __fputwc_unlock(wchar_t wc, FILE *fp); #pragma GCC visibility pop + +__END_DECLS diff --git a/libc/stdio/wcio.h b/libc/stdio/wcio.h index 584a3f209..2c1fa3c17 100644 --- a/libc/stdio/wcio.h +++ b/libc/stdio/wcio.h @@ -32,6 +32,10 @@ #ifndef _WCIO_H_ #define _WCIO_H_ +#include + +__BEGIN_DECLS + /* minimal requirement of SUSv2 */ #define WCIO_UNGETWC_BUFSIZE 1 @@ -78,4 +82,6 @@ do {\ #define WCIO_INIT(fp) \ memset(&(_EXT(fp)->_wcio), 0, sizeof(struct wchar_io_data)) +__END_DECLS + #endif /*_WCIO_H_*/ From e5477f83b0a639b86d8cbe710f25d9808a8f72af Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 28 Nov 2014 20:03:23 +0900 Subject: [PATCH 107/194] Fail queries fast if no DNS servers are configured. When no DNS servers are configured (and thus there is no chance that the DNS query will suceed), res_nsend returns early, but it does not tell the cache that the query has failed. Therefore, if the caller retries the query, it will block for PENDING_REQUEST_TIMEOUT (= 20 seconds) waiting for the "existing query" (which isn't actually doing anything) to complete. Bug: 18240188 Bug: 18327075 Change-Id: I0df13ff4a17ee65e640be96695a3af31b020963a --- libc/dns/resolv/res_send.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libc/dns/resolv/res_send.c b/libc/dns/resolv/res_send.c index 6439e31ce..a8da3ac75 100644 --- a/libc/dns/resolv/res_send.c +++ b/libc/dns/resolv/res_send.c @@ -402,6 +402,10 @@ res_nsend(res_state statp, } if (statp->nscount == 0) { + // We have no nameservers configured, so there's no point trying. + // Tell the cache the query failed, or any retries and anyone else asking the same + // question will block for PENDING_REQUEST_TIMEOUT seconds instead of failing fast. + _resolv_cache_query_failed(statp->netid, buf, buflen); errno = ESRCH; return (-1); } From 111461aaaec2b7d9ffa5f3baabb1bd019d2e0c1d Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 1 Dec 2014 21:27:59 -0800 Subject: [PATCH 108/194] Put stdin/stdout/stderr symbols in place. To help with future binary compatibility. Bug: 18553223 Change-Id: Ia8103b4f189c18528b11948ac9e520f61b9ccc0e --- libc/stdio/findfp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libc/stdio/findfp.c b/libc/stdio/findfp.c index 0c2ee7cee..cfbb66bb8 100644 --- a/libc/stdio/findfp.c +++ b/libc/stdio/findfp.c @@ -44,6 +44,10 @@ #define ALIGNBYTES (sizeof(uintptr_t) - 1) #define ALIGN(p) (((uintptr_t)(p) + ALIGNBYTES) &~ ALIGNBYTES) +#undef stdin +#undef stdout +#undef stderr + int __sdidinit; #define NDYNAMIC 10 /* add ten more whenever necessary */ @@ -65,6 +69,9 @@ FILE __sF[3] = { std(__SWR, STDOUT_FILENO), /* stdout */ std(__SWR|__SNBF, STDERR_FILENO) /* stderr */ }; +FILE* stdin = &__sF[0]; +FILE* stdout = &__sF[1]; +FILE* stderr = &__sF[2]; struct glue __sglue = { &uglue, 3, __sF }; static struct glue * From 6c1e3f6e56364141dc0afd467e3dd414bee99412 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 2 Dec 2014 14:50:20 -0800 Subject: [PATCH 109/194] Remove unnecessary #undefs from AOSP. This is a manual revert of 111461aaaec2b7d9ffa5f3baabb1bd019d2e0c1d. git revert does the wrong thing because that patch shares lines (that we want to keep) with 168667c972a1e9ede5b64ad6cee0666e9b96d4d8 and git revert just removes them. Change-Id: I83ac8c95e5c90a4137b7742a9b7536e1627f1ac7 --- libc/stdio/findfp.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libc/stdio/findfp.c b/libc/stdio/findfp.c index 7a537c8fe..5e51198a7 100644 --- a/libc/stdio/findfp.c +++ b/libc/stdio/findfp.c @@ -44,10 +44,6 @@ #define ALIGNBYTES (sizeof(uintptr_t) - 1) #define ALIGN(p) (((uintptr_t)(p) + ALIGNBYTES) &~ ALIGNBYTES) -#undef stdin -#undef stdout -#undef stderr - int __sdidinit; #define NDYNAMIC 10 /* add ten more whenever necessary */ From 27d276f3a6d81d29fab13de96496efb7bc072773 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 1 Dec 2014 16:13:30 -0800 Subject: [PATCH 110/194] Avoid pathological behavior in OpenBSD's fread. (cherry picked from commit 20841a137beac5caa824e3586c7bd91d879ff92e) Bug: https://code.google.com/p/android/issues/detail?id=81155 Bug: 18556607 Change-Id: Ibdfebc20dce4c34ad565014523c9b074e90ea665 --- libc/Android.mk | 2 +- .../lib/libc => }/stdio/fread.c | 18 ++++++++++- tests/stdio_test.cpp | 31 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) rename libc/{upstream-openbsd/lib/libc => }/stdio/fread.c (85%) diff --git a/libc/Android.mk b/libc/Android.mk index 045556ea9..30050922b 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -61,6 +61,7 @@ libc_common_src_files := \ bionic/sigsetmask.c \ bionic/system_properties_compat.c \ stdio/findfp.c \ + stdio/fread.c \ stdio/snprintf.c\ stdio/sprintf.c \ @@ -396,7 +397,6 @@ libc_upstream_openbsd_src_files := \ upstream-openbsd/lib/libc/stdio/fputs.c \ upstream-openbsd/lib/libc/stdio/fputwc.c \ upstream-openbsd/lib/libc/stdio/fputws.c \ - upstream-openbsd/lib/libc/stdio/fread.c \ upstream-openbsd/lib/libc/stdio/freopen.c \ upstream-openbsd/lib/libc/stdio/fscanf.c \ upstream-openbsd/lib/libc/stdio/fseek.c \ diff --git a/libc/upstream-openbsd/lib/libc/stdio/fread.c b/libc/stdio/fread.c similarity index 85% rename from libc/upstream-openbsd/lib/libc/stdio/fread.c rename to libc/stdio/fread.c index 8a592f6d3..e052128cc 100644 --- a/libc/upstream-openbsd/lib/libc/stdio/fread.c +++ b/libc/stdio/fread.c @@ -68,7 +68,23 @@ fread(void *buf, size_t size, size_t count, FILE *fp) fp->_r = 0; total = resid; p = buf; - while (resid > (r = fp->_r)) { + + // BEGIN android-added + // Avoid pathological behavior on unbuffered files. OpenBSD + // will loop reading one byte then memcpying one byte! + if ((fp->_flags & __SNBF) != 0) { + // We know if we're unbuffered that our buffer is empty, so + // we can just read directly. + while (resid > 0 && (r = (*fp->_read)(fp->_cookie, p, resid)) > 0) { + p += r; + resid -= r; + } + FUNLOCKFILE(fp); + return ((total - resid) / size); + } + // END android-added + + while (resid > (size_t)(r = fp->_r)) { (void)memcpy((void *)p, (void *)fp->_p, (size_t)r); fp->_p += r; /* fp->_r = 0 ... done in __srefill */ diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index 6a2991f57..bba744a4b 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -694,3 +694,34 @@ TEST(stdio, fpos_t_and_seek) { fclose(fp); } + +// https://code.google.com/p/android/issues/detail?id=81155 +// http://b/18556607 +TEST(stdio, fread_unbuffered_pathological_performance) { + FILE* fp = fopen("/dev/zero", "r"); + ASSERT_TRUE(fp != NULL); + + // Make this stream unbuffered. + setvbuf(fp, 0, _IONBF, 0); + + char buf[65*1024]; + memset(buf, 0xff, sizeof(buf)); + + time_t t0 = time(NULL); + for (size_t i = 0; i < 1024; ++i) { + fread(buf, 64*1024, 1, fp); + } + time_t t1 = time(NULL); + + fclose(fp); + + // 1024 64KiB reads should have been very quick. + ASSERT_LE(t1 - t0, 1); + + for (size_t i = 0; i < 64*1024; ++i) { + ASSERT_EQ('\0', buf[i]); + } + for (size_t i = 64*1024; i < 65*1024; ++i) { + ASSERT_EQ('\xff', buf[i]); + } +} From c7450f7738b0d1edf832fc881ef63546d45428cb Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 4 Dec 2014 12:39:46 -0800 Subject: [PATCH 111/194] Restore symbols from . Bug: 18627252 Bug: https://code.google.com/p/android/issues/detail?id=81690 (cherry picked from commit 42804c4b30e813d3140cba877d3ae6bbef0d3a17) Change-Id: Idd33578b31bba9a4afdfd15c7b193d10974aea90 --- libc/include/arpa/nameser.h | 119 ++++++++++++++---------------------- 1 file changed, 45 insertions(+), 74 deletions(-) diff --git a/libc/include/arpa/nameser.h b/libc/include/arpa/nameser.h index a87ac913a..91561ce35 100644 --- a/libc/include/arpa/nameser.h +++ b/libc/include/arpa/nameser.h @@ -518,9 +518,8 @@ typedef enum __ns_cert_types { (cp) += NS_INT32SZ; \ } while (/*CONSTCOND*/0) -/* - * ANSI C identifier hiding for bind's lib/nameser. - */ +#if !defined(__LP64__) +/* Annoyingly, LP32 shipped with __ names. */ #define ns_msg_getflag __ns_msg_getflag #define ns_get16 __ns_get16 #define ns_get32 __ns_get32 @@ -564,101 +563,73 @@ typedef enum __ns_cert_types { #define ns_subdomain __ns_subdomain #define ns_makecanon __ns_makecanon #define ns_samename __ns_samename -#define ns_newmsg_init __ns_newmsg_init -#define ns_newmsg_copy __ns_newmsg_copy -#define ns_newmsg_id __ns_newmsg_id -#define ns_newmsg_flag __ns_newmsg_flag -#define ns_newmsg_q __ns_newmsg_q -#define ns_newmsg_rr __ns_newmsg_rr -#define ns_newmsg_done __ns_newmsg_done -#define ns_rdata_unpack __ns_rdata_unpack -#define ns_rdata_equal __ns_rdata_equal -#define ns_rdata_refers __ns_rdata_refers +#endif __BEGIN_DECLS -int ns_msg_getflag(ns_msg, int); -uint16_t ns_get16(const u_char *); -uint32_t ns_get32(const u_char *); -void ns_put16(uint16_t, u_char *); -void ns_put32(uint32_t, u_char *); -int ns_initparse(const u_char *, int, ns_msg *); -int ns_skiprr(const u_char *, const u_char *, ns_sect, int); -int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); -int ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *); +int ns_msg_getflag(ns_msg, int) __LIBC_ABI_PUBLIC__; +uint16_t ns_get16(const u_char *) __LIBC_ABI_PUBLIC__; +uint32_t ns_get32(const u_char *) __LIBC_ABI_PUBLIC__; +void ns_put16(uint16_t, u_char *) __LIBC_ABI_PUBLIC__; +void ns_put32(uint32_t, u_char *) __LIBC_ABI_PUBLIC__; +int ns_initparse(const u_char *, int, ns_msg *) __LIBC_ABI_PUBLIC__; +int ns_skiprr(const u_char *, const u_char *, ns_sect, int) __LIBC_ABI_PUBLIC__; +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *) __LIBC_ABI_PUBLIC__; +int ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *) __LIBC_HIDDEN__; int ns_sprintrr(const ns_msg *, const ns_rr *, - const char *, const char *, char *, size_t); + const char *, const char *, char *, size_t) __LIBC_ABI_PUBLIC__; int ns_sprintrrf(const u_char *, size_t, const char *, ns_class, ns_type, u_long, const u_char *, size_t, const char *, const char *, - char *, size_t); -int ns_format_ttl(u_long, char *, size_t); -int ns_parse_ttl(const char *, u_long *); -uint32_t ns_datetosecs(const char *cp, int *errp); -int ns_name_ntol(const u_char *, u_char *, size_t); -int ns_name_ntop(const u_char *, char *, size_t); -int ns_name_pton(const char *, u_char *, size_t); -int ns_name_pton2(const char *, u_char *, size_t, size_t *); + char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_format_ttl(u_long, char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_parse_ttl(const char *, u_long *) __LIBC_ABI_PUBLIC__; +uint32_t ns_datetosecs(const char *cp, int *errp) __LIBC_ABI_PUBLIC__; +int ns_name_ntol(const u_char *, u_char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_name_ntop(const u_char *, char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_name_pton(const char *, u_char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_name_pton2(const char *, u_char *, size_t, size_t *) __LIBC_HIDDEN__; int ns_name_unpack(const u_char *, const u_char *, - const u_char *, u_char *, size_t); + const u_char *, u_char *, size_t) __LIBC_ABI_PUBLIC__; int ns_name_unpack2(const u_char *, const u_char *, const u_char *, u_char *, size_t, - size_t *); + size_t *) __LIBC_HIDDEN__; int ns_name_pack(const u_char *, u_char *, int, - const u_char **, const u_char **); + const u_char **, const u_char **) __LIBC_ABI_PUBLIC__; int ns_name_uncompress(const u_char *, const u_char *, - const u_char *, char *, size_t); + const u_char *, char *, size_t) __LIBC_ABI_PUBLIC__; int ns_name_compress(const char *, u_char *, size_t, - const u_char **, const u_char **); -int ns_name_skip(const u_char **, const u_char *); + const u_char **, const u_char **) __LIBC_ABI_PUBLIC__; +int ns_name_skip(const u_char **, const u_char *) __LIBC_ABI_PUBLIC__; void ns_name_rollback(const u_char *, const u_char **, - const u_char **); + const u_char **) __LIBC_ABI_PUBLIC__; int ns_sign(u_char *, int *, int, int, void *, - const u_char *, int, u_char *, int *, time_t); + const u_char *, int, u_char *, int *, time_t) __LIBC_ABI_PUBLIC__; int ns_sign2(u_char *, int *, int, int, void *, const u_char *, int, u_char *, int *, time_t, - u_char **, u_char **); -ssize_t ns_name_length(ns_nname_ct, size_t); -int ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t); -int ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int); -int ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int); -int ns_name_labels(ns_nname_ct, size_t); + u_char **, u_char **) __LIBC_ABI_PUBLIC__; +ssize_t ns_name_length(ns_nname_ct, size_t) __LIBC_HIDDEN__; +int ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t) __LIBC_HIDDEN__; +int ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int) __LIBC_HIDDEN__; +int ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int) __LIBC_HIDDEN__; +int ns_name_labels(ns_nname_ct, size_t) __LIBC_HIDDEN__; int ns_sign_tcp(u_char *, int *, int, int, - ns_tcp_tsig_state *, int); + ns_tcp_tsig_state *, int) __LIBC_ABI_PUBLIC__; int ns_sign_tcp2(u_char *, int *, int, int, ns_tcp_tsig_state *, int, - u_char **, u_char **); + u_char **, u_char **) __LIBC_ABI_PUBLIC__; int ns_sign_tcp_init(void *, const u_char *, int, - ns_tcp_tsig_state *); -u_char *ns_find_tsig(u_char *, u_char *); + ns_tcp_tsig_state *) __LIBC_ABI_PUBLIC__; +u_char *ns_find_tsig(u_char *, u_char *) __LIBC_ABI_PUBLIC__; int ns_verify(u_char *, int *, void *, const u_char *, int, u_char *, int *, - time_t *, int); + time_t *, int) __LIBC_ABI_PUBLIC__; int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); int ns_verify_tcp_init(void *, const u_char *, int, - ns_tcp_tsig_state *); -int ns_samedomain(const char *, const char *); -int ns_subdomain(const char *, const char *); -int ns_makecanon(const char *, char *, size_t); -int ns_samename(const char *, const char *); -int ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *); -int ns_newmsg_copy(ns_newmsg *, ns_msg *); -void ns_newmsg_id(ns_newmsg *handle, uint16_t id); -void ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value); -int ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname, - ns_type qtype, ns_class qclass); -int ns_newmsg_rr(ns_newmsg *handle, ns_sect sect, - ns_nname_ct name, ns_type type, - ns_class rr_class, uint32_t ttl, - uint16_t rdlen, const u_char *rdata); -size_t ns_newmsg_done(ns_newmsg *handle); -ssize_t ns_rdata_unpack(const u_char *, const u_char *, ns_type, - const u_char *, size_t, u_char *, size_t); -int ns_rdata_equal(ns_type, - const u_char *, size_t, - const u_char *, size_t); -int ns_rdata_refers(ns_type, - const u_char *, size_t, - const u_char *); + ns_tcp_tsig_state *) __LIBC_ABI_PUBLIC__; +int ns_samedomain(const char *, const char *) __LIBC_ABI_PUBLIC__; +int ns_subdomain(const char *, const char *) __LIBC_ABI_PUBLIC__; +int ns_makecanon(const char *, char *, size_t) __LIBC_ABI_PUBLIC__; +int ns_samename(const char *, const char *) __LIBC_ABI_PUBLIC__; __END_DECLS #ifdef BIND_4_COMPAT From d9e211ca1fcf8bb78a1e1de9e54fe7c8d0a01518 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Wed, 7 Jan 2015 11:16:58 -0800 Subject: [PATCH 112/194] Print error when prelink fails for main executable Bug: 18931021 Change-Id: Ieefdcf60f1506af522714300030754a4ed61c08e --- linker/linker.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 35c8cbdc8..54867dce2 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2413,7 +2413,10 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW( somain = si; - si->PrelinkImage(); + if (!si->PrelinkImage()) { + __libc_format_fd(2, "CANNOT LINK EXECUTABLE: %s\n", linker_get_error_buffer()); + exit(EXIT_FAILURE); + } // Load ld_preloads and dependencies. StringLinkedList needed_library_name_list; From 700eb048fb6df8805245097d73a87384108fdf67 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Mon, 2 Feb 2015 11:24:22 +0000 Subject: [PATCH 113/194] Update tzdata to tzdata2015a Time Zone Data v. 2015a (Released 2015-01-29) http://www.iana.org/time-zones/repository/releases/tzdata2015a.tar.gz Information from NEWS: Release 2015a - 2015-01-29 22:35:20 -0800 Changes affecting future time stamps The Mexican state of Quintana Roo, represented by America/Cancun, will shift from Central Time with DST to Eastern Time without DST on 2015-02-01 at 02:00. (Thanks to Steffen Thorsen and Gwillim Law.) Chile will not change clocks in April or thereafter; its new standard time will be its old daylight saving time. This affects America/Santiago, Pacific/Easter, and Antarctica/Palmer. (Thanks to Juan Correa.) New leap second 2015-06-30 23:59:60 UTC as per IERS Bulletin C 49. (Thanks to Tim Parenti.) Changes affecting past time stamps Iceland observed DST in 1919 and 1921, and its 1939 fallback transition was Oct. 29, not Nov. 29. Remove incorrect data from Shanks about time in Iceland between 1837 and 1908. Some more zones have been turned into links, when they differed from existing zones only for older time stamps. As usual, these changes affect UTC offsets in pre-1970 time stamps only. Their old contents have been moved to the 'backzone' file. The affected zones are: Asia/Aden, Asia/Bahrain, Asia/Kuwait, and Asia/Muscat. Changes affecting code tzalloc now scrubs time zone abbreviations compatibly with the way that tzset always has, by replacing invalid bytes with '_' and by shortening too-long abbreviations. tzselect ports to POSIX awk implementations, no longer mishandles POSIX TZ settings when GNU awk is used, and reports POSIX TZ settings to the user. (Thanks to Stefan Kuhn.) Changes affecting build procedure 'make check' now checks for links to links in the data. One such link (for Africa/Asmera) has been fixed. (Thanks to Stephen Colebourne for pointing out the problem.) Changes affecting commentary The leapseconds file commentary now mentions the expiration date. (Problem reported by Martin Burnicki.) Update Mexican Library of Congress URL. Bug: 19212588 Change-Id: Idc07ac862901500d4a1dbd0f4aadcfd0aa9d10b8 --- libc/zoneinfo/tzdata | Bin 498091 -> 494904 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index fc6c5babb83b74177bbaa18f47f38cd5de8d7c5b..b9a66210eb8eb2a94d5db930cb3ac727921251b8 100644 GIT binary patch delta 4585 zcmb8ye^?b&8VB&1GndN`uXZ(5Kon9`RK&}OMn#5*MtRYzVqsnrgb0fi4N-}9*`yYY zdXO(Q>_6S-k&kEQ%sFS? zbLKrWyY`K0*fuI4H$NjSH%+xgO-qyb3y`EdhvXe!x+h@E0FhU*uX?}?MVz0suX9km zB9zex9}+3vpM#VknZi9C?jfphcjG!a@*2W#R>dd9aNfL4oXSQoOJD3jgug1j%tIlFVz2qB}51EGkAj>pFjcHApq5S4xuia^s{kD9HTCzgc%T z>Vk%1YfzwAQ-j(dRjeP04)Wwq_>V9~o=A$GMFA=CLLI@6=p2zLUibp`U{$=*gF^Dw zLDUoWc!@B2!6Q|%w+)Vws^7jn9OSe5lxb^T@V*(ZjvOxb$D)BXcy$+H{m@aIp1Y7t zj*dk!Id%q(gfZzRC!!G+qKc*wNFgU*KuJiZ_HOZDflDmT`>s7lmv8@Ky@v7MVF%rhB<~LQ&=v)+x zj}*I~L@iIeV@C&Zjf8)=u}~Aqd*vt~96=p9QG-rTDPV$e(C(qoLp?cl4wp#VAOufT z#pz*ikn<9X2-kE2>3#=Ygl&dSic-X{2}qt~6pM-PpV3GLm!X>kA4OP%D#q?Z3YnaS z5)zpXH<_{?*NM%J@X4x}ZiACN_c%%?tLEufCCMuvO_L)rtshg$RKl^s31w((M%S`m)TTt-%do62O5y&p^_}S2QB0$H%w8g zNE?6{lJy$0$;w5jB5NAZO4fY>AC*zugIJQc1v%si2datpIkb7OOjX67K0+MXd@FKE z;WX5EO6_FJc37iT@$5%PASDlD19`p?wM5&64#LL#r*YzYkVsyaQ9!n5p^oh6M<>}e z69Lmz@yIgRN!<_>l0A>0p6pG+C34t;;9JQ-IEXtDMP%$oG>{`F(d8jDMin0b$%Hpn zOqvd%k(|s!H~IK7!frEyn?hQ?Mu`VE`J6eGwCzUt?OZG_I0EbtW8^{`ddbC| zh`2))UCBr#*Q_Wf4003saUS~ah*Fdu7i_VVGm)X&y9pJ#eea-I_m{n8cN)=%zLTY2 z=Oc?n#ez!WwFfPPfiunEB3ywO;&&a{FKDSrJ8fjOOmMqU9%#^y7dT7$P{@3MG30de+3OB z|3h?$cA09v!;eJ+0m@8Tclb&g=kzHblbOzak8LMipC&{$3$T~iDBgw?tZ{)ySd*r~X zHQdp%^?hd6x)oS3HFRs7S&_L@wz2vrwXh^{dzTQGq~7#po+SD7=v8MwyfG&ia#|SP zNSY?@c>wLK)sYSBJc9(C3)n!uN=2>C1$2-L8StM^zCj}SIs*kd7f?q!Q_-n&4gn5T z{L=}$&KVSvZ&FZC*uy2g^aX+!@X1&VhfW)c$fc!d&^d=L@@*PI7m`jSlgsHS*13R2 zawQGjIvogG#0P6RQgqItgnYLQZo-bPdk9bF!FD*w)rBbaaLhxmP7@*)M=7SCCnI$+ zgMS(2q;vzCi0?b-BZF^;?LH3XL1d7iyHG*KzK>=Sxv=bh=FWUXlUrX#7MW>6C1F@w z$o=DCN->&@A?X6yo>CQI5^MF8e3qyp_gBP{{O^%NHu<8Oa13pPBeFceSBK+>BRdx( zm(=H>hOo_c^4@E(F6E2Fc_ffe=3xV2GO8tf!aB&=v+#EsZ6*@lPyzWq40X;Z#p~ze z=w#9B76dHw6z$85x`o8=Y1Dg4mxy&Pf*({xz$Q3I$VC*9@Juui2BC}Cwjgx55t-!W zp4N(4jM;%kGV@+^lY34eEL9cr&LM^HPD{v=#c-#pmb83s^BMYLy*plCsaol7*`$Xd zJk5xPlW>|#(^S6>efe{3OA_3Uv0LLziiu}>JryEW81+&~);W|DZYNDEeor%H=_|y_ z#mGqKWLQz5Q;FvEO!4R>L}#et(I#Y(?1xZE9^*@GMy6P0M$AJ-Ce0?yq*a7(h^>Sv z)F+cuV?%6a=73e(`N&Pzhn9ry^TT0H8?2b~PNR)g*3XCKVdLE*j_~C!m+(EVhVX5m zooL^~nxziBdR&rxpU_)zES#kW!;2Y`8Gl0-x7gXJC7bU+N0#dM+~chIlwMQI`HQzd zY%7O}7k@%a$=ivzq;m?v zk20fegM-xFh9aFW(LnaRf-VoC*$hSnlF7ad6ca|Fk?dE{t@Ad*9#h2u2U3X3i4xLa zhnpPq$90{L5WY$khkD>7hr3Zq8VhiYygM1a9wJt=^e$4#d#NZV?jkf1Ue`yCtb{Fx zo4YSEbY4OQ;f*(wqo0+nVNza!Xu@MzgbT2e@QG_#qYk|3up}vFJ%$VC&()(nkkR(y z>%5q(AH?7pVTg-2>w9hXTH_h6B1|%^Yq#m|zd4T^A6wOgA3<$|@7R`HBT{jMp9{H! zUs5%M-&O5|p9a=->cB&Kdj47OW^wY3nP%eJu+GR|wS*6L$2!&T*uVIEEYNGBC0Sqe z-lnSyS<2I*4l7gkJ&|W^)Eqs+;x&;6y|hYIt}!K_JS%B^Q{@REN`L>`HImfdzpF|z z_4l7}%Rc@62kRt@{#UkY>!amS+RGD^;s4c!>-}iiA^*`v8U~4xaKCKP98a2j{<exgG;x>}E#>!QOn+|QT<*N&y8(=SX*;2`zIIr!PsO;wd!M@cV#T3q_d+69HL zo>Ht;i=LKVJ21VpI(B?v^}$^0he<)wi95%KYHwUKeW#sXX1aZxSAYMNR9?@Y%sac* zE%|!>dX5+;2HLf&-=`lUi<8`3N+%i$SErB1?^FOj^g-x8FpF+L=q;!w5 zxqb~%EV8UgUM2Tqyzam6bL^P<4B0)t&1iwOrOz>zF zGsvTs$3?|iCm{y46G_?_%CPc_XWLuBFHa)V@7&@x@sL2xm@DMPmpMK+y6SicDQ>@B4B%alL<4P5L?tiLM%HW+FB_sI=L zbh32)S%mwj@)x~fCwIz zi4I2t850hRzbeO$1?^?PU}#S`H(NI&zbWJ?GN$?N;!AbWP8 zX;7xTHwOuUs(k2m6qD+is3GjJnJ{{RgH`#xTqKeAr=f&6ui_-(4y}Yuf`e4~<7-GJ z7e2yPaxo953B%A%F4ZA)h$>$`fmBjI0;NMT<uOLkkZ4jJg&+=&w-6#BJv6Mt9m?B-fx5V6RP}1CgPt^%~h8rsmCQ0 zJ`o|m3siGM&0;i?)1%=Nrq9i(D~|?!Rh`_u#-s~ zLo)4s)RNm{&_$k0fpsML4jJV69oS3ea16=(HRV=SUidpilEp2^a#KN;ZbUs<77ODj z(v29hdN;C3-V{`ljn%kHHl2f~$_e;O#FC;-$R#E5I86Fk(BQ^0nm5WB*hu+P$S1Eo zi7I#L27w0eNLAi-2JvL~3s_Gy2dYWsK{OH`%qNO>$TyfujyyymsZN7~IKD#@sfmJL zv?}LkA%T2gMlm_H5H;k(31}wgB?OKkN0CG>#iE3ad=n?h<+EsY6C9(;zutmm!VB9< zt{lT@^7(SKlWVsS`ZTlRHKdX+@=@x>MQ*-=4)Xi)2pg-)Urt3DY0^+e?ndG~X)~jf zJZM1pI92}sXRwohACFyxL9Qj;h3FbLN-;`zVU4ARKOjRWzk|I(^G(zVJsQiO(W4Rh z3`?FbBa20^v8W(@Zlj(saK`aWt!0QIzC)2s{98~-0`KE08L|zY&#H3BSBNDHRW2Dm z2Z!A>kf;1$vFVp(BjHPt@1}|{em96U9^Mo5D~Kmiaad2rN~k8|Pot5{fZ$2Y7$Ha|+_sfy_i>t3mY|&+dIzDCRr#McA(b3kgHlrcDqQYT z2YIgoVN>+o(+Kw~BWFh8JYf%=g#Cq2)tlG}54MYNzgohUU4$oLou=oj48rWWmoP2W zk&Aid|lc0`i;v&bS`!YT-JMLl8CGfvmDOAJx+kWHAeDyO@X%vBcI#xp@rGO-Ci z<-q)e2(KfBlH_?)JPpJZEXK^y!8>hc#lXd}fz7WwVM*jl(+jplwa=Yb*z|kRbkd6( za`SOzHXEDpMq;Eqdnsz7)pPYFGRfNa9L29ev{emig`VHdA^?6uNn2)LnZ?Z=6bu)a@^kYsXyr4qT zH4=`rQHt4Ek0uuTgu`!vyO^**Z(B@!%24AjHIsl81TN&$+v`XoPkxIMqOQhC!XUJg zvAYqxNRLeNBKOg@vN-WwoF>!fpq5G%#qt_EGL~>G24Sz@P1G&PlnbH}nW4%BpCOB^%|!)SHx%_5nezI+h*_%V(rm(9 zTDes1vu6h%Mem5ScrHCRJ;!~@JQZeD&rDTzRU$6mO zTN0`XCZmyXN1tWfQNmQg4=5yWwZgGXHM^4snwLe$C+5L#IrG|+NDw?kF?qidHRRNJ zG?Nc!B5(ztvj!kZ@E%IYN3(H~oC!dyo8WBbN*^Q(8nKn|!cUX4MQA4<4@c-qQioJ> zt^uXwd@Wq$LK!;9CzBDDqdyC$k=ksO2|96}TzU(gZo*e_HGdj*!42#ppGv4De1`54 zC9bNus{EVH$RPjXi@k&wUPtPmFJH~Sw-8BKmqj=SD+q78`qiqJe~Tn3W)b08Gp7F- z;a1K51L>^+?$W z-xKl)U!kf9U#M;nz94uPs9qQI*ukGfFLRRrJi1I?>kIT8R!w+wHx{TpudLubGE+1~ zeX^MO9>z}24QVYVyfg@owZ10`*Y-KBIb?&yG?(>etwJ?aX)&IL4-AU7dWvE0&|_7S z)ZP7drDW{xzUVS|c6Wc^kSyY_!P{N0m5nw8X*+rwhq;g8{Cu<_$>2P&PF`vFpB^R6 z%kYern`rRdayH7~JR2on_)5$CxuHK?CoQG}JVQ_CkwB%^P&DV>Dcjt@Xvf@NSJ+a! z{2cS%-ejA9H_H0LcDpU@!a(bS{6g2l!~bSol)TVoFZrD{J<{e{obi!$iO*11M*Kl* zMu*XrIpRY{=FP`!Szh}cSsy93Wo<={vnj5>_ zwtDSEYu>OoU29T8qpbO+*IWhBW^2LS6|Qx@&DM1n5?$*bUbb%d&mL}-~IO0@Qi5G7!k*h3$?o*d0cF`D6tPe+W3h#sj%h9^cw zM2i2kE3cdVHScJH#n~RB%zEvoY3=ng_x9v>!1sHPO1N{)>O62%vHZPG@gv8S8K^%N z!8cWAo%WVME#SD~tyzyNK^~%tfznF*8U6G-TEBE>@o}X@{{NY+&(y!g%$7N|-9LQ% z@Zh`_KiaR3DP#YOfeZa{;H3Y4g4d7n@O3u5t4uPB<)z0L=`krxX~TzWWAcshe^D&S zH>&!&Y}R6;;Bn!n+=I^{6Pif@{CUnKH#Vu&3Vk(6@Wa*fzRdn;{z~dps&s$UG_i z7Tqw@czyRU8+#RteBbT%S9ewH43hR=*;;lWZ)Wkqe^tCcNeqxKW|}IsEngekw9C!1 zk7oPOF!XU#clW()?!=FQYvzM?smEXcFL}+NHnTVVW)o{Od*k~td;W|6rM?MVXlC&{ zZ8jI0Y5Y!ML2oA38{AntRI|022X1+I&&aRI`S6~(ez=~X^dZucI*guL>i~~U&KCzO zz5dTLQ}q98@l|kVU66KmkReyQ;pY)LXcA*EX##`6KVto5C?5TawKv36#t3;hr~7;K zFgWi7EB*iBQ`GXm-Que~NHGL!j~z9wU`jG+p9Ojhe^$)mzaF$7hs;e+F`Uu*aQ?Ia ktAAdA-?5wgnP)7{q`@BFC3(ax&B@P8&vwqv@wglGA7LSX6aWAK From 4177bd8d16e0dc2d0d541fc54f81518c57651e55 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Mon, 2 Feb 2015 16:50:05 +0000 Subject: [PATCH 114/194] Fixes to the update-tzdata.py tool We build one too many times. Creating a missing directory is sufficient. The tz2icu needs some files in the CWD. Added symlinks. Bug: 19230091 (cherry-pick of commit 0662c3e5b33840e19f4c14b85bf619c33b3a0d0f) Change-Id: Ie21d848f1b776ec745473b9122e003fdf0acf105 --- libc/tools/zoneinfo/update-tzdata.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libc/tools/zoneinfo/update-tzdata.py b/libc/tools/zoneinfo/update-tzdata.py index 330f1662d..4847356df 100755 --- a/libc/tools/zoneinfo/update-tzdata.py +++ b/libc/tools/zoneinfo/update-tzdata.py @@ -117,13 +117,20 @@ def BuildIcuToolsAndData(data_filename): # Build the ICU tools. print 'Configuring ICU tools...' subprocess.check_call(['%s/runConfigureICU' % icu_dir, 'Linux']) - print 'Making ICU tools...' - subprocess.check_call(['make', '-j32']) # Run the ICU tools. os.chdir('tools/tzcode') + + # The tz2icu tool only picks up icuregions and icuzones in they are in the CWD + for icu_data_file in [ 'icuregions', 'icuzones']: + icu_data_file_source = '%s/tools/tzcode/%s' % (icu_dir, icu_data_file) + icu_data_file_symlink = './%s' % icu_data_file + os.symlink(icu_data_file_source, icu_data_file_symlink) + shutil.copyfile('%s/%s' % (original_working_dir, data_filename), data_filename) print 'Making ICU data...' + # The Makefile assumes the existence of the bin directory. + os.mkdir('%s/bin' % icu_working_dir) subprocess.check_call(['make']) # Copy the source file to its ultimate destination. From b6d301f42dc191681a17eb85536f9cde4eb78c44 Mon Sep 17 00:00:00 2001 From: Duane Sand Date: Mon, 26 Jan 2015 14:48:48 -0800 Subject: [PATCH 115/194] [MIPS] Fix setjmp signals Include full 16-byte Mips sigset_t signal mask within jump buffer. Call sigprocmask instead of sigblockmask/sigsetmask to get/set full signal mask. Include sigsetjmp's savesigs arg inside jmp_buf, instead of following it. Reserve room for future extensions. Preserve historically-large mips32 _JBLEN size. Eliminate redundancy: code setjmp and _setjmp as tail calls into sigsetjmp, and make longjmp and _longjmp aliases of siglongjmp. Change-Id: Ie79137cf059228c1a51344ebb20d3a9a40b4a252 --- libc/arch-mips/bionic/setjmp.S | 370 +++++++++--------------- libc/arch-mips/include/machine/setjmp.h | 5 +- 2 files changed, 135 insertions(+), 240 deletions(-) diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S index 05d0e2567..1c2655385 100644 --- a/libc/arch-mips/bionic/setjmp.S +++ b/libc/arch-mips/bionic/setjmp.S @@ -1,3 +1,30 @@ +/* + * Copyright (C) 2014-2015 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ /* * Copyright (c) 2001-2002 Opsycon AB (www.opsycon.se / www.opsycon.com) * @@ -94,23 +121,31 @@ #include #include -/* On Mips32, jmpbuf begins with optional 4-byte filler so that - * all saved FP regs are aligned on 8-byte boundary, despite this whole - * struct being mis-declared to users as an array of (4-byte) longs. - * All the following offsets are then from the rounded-up base addr +/* jmpbuf is declared to users as an array of longs, which is only + * 4-byte aligned in 32-bit builds. The Mips jmpbuf begins with a + * dynamically-sized 0- or 4-byte unused filler so that double-prec FP regs + * are saved to 8-byte-aligned mem cells. + * All the following jmpbuf offsets are from the rounded-DOWN base addr. */ /* Fields of same size on all MIPS abis: */ -#define SC_MAGIC (0*4) /* 4 bytes, identify jmpbuf */ -#define SC_MASK (1*4) /* 4 bytes, saved signal mask */ -#define SC_FPSR (2*4) /* 4 bytes, floating point control/status reg */ -/* filler2 (3*4) 4 bytes, pad to 8-byte boundary */ +/* field: byte offset: size: */ +/* dynam filler (0*4) 0-4 bytes of rounddown filler, DON'T TOUCH!! + often overlays user storage!! */ +#define SC_MAGIC_OFFSET (1*4) /* 4 bytes, identify jmpbuf, first actual field */ +#define SC_FLAG_OFFSET (2*4) /* 4 bytes, savesigs flag */ +#define SC_FPSR_OFFSET (3*4) /* 4 bytes, floating point control/status reg */ +/* following fields are 8-byte aligned */ +#define SC_MASK_OFFSET (4*4) /* 16 bytes, mips32/mips64 version of sigset_t */ +#define SC_SPARE_OFFSET (8*4) /* 8 bytes, reserved for future uses */ /* Registers that are 4-byte on mips32 o32, and 8-byte on mips64 n64 abi */ -#define SC_REGS_SAVED 12 /* ra,gp,sp,s0-s8 */ -#define SC_REGS (4*4) /* SC_REGS_SAVED*REGSZ bytes */ +#define SC_REGS_OFFSET (10*4) /* SC_REGS_BYTES */ +#define SC_REGS_SAVED 12 /*regs*/ /* ra,s0-s8,gp,sp */ +#define SC_REGS_BYTES (SC_REGS_SAVED*REGSZ) +#define SC_REGS SC_REGS_OFFSET -/* Floating pt registers are 8-bytes on all abis, +/* Double floating pt registers are 8-bytes on all abis, * but the number of saved fp regs varies for o32/n32 versus n64 abis: */ @@ -120,22 +155,20 @@ #define SC_FPREGS_SAVED 6 /* even fp regs f20,f22,f24,f26,f28,f30 */ #endif -#define SC_FPREGS (SC_REGS + SC_REGS_SAVED*REGSZ) /* SC_FPREGS_SAVED*REGSZ_FP bytes */ +#define SC_FPREGS_OFFSET (SC_REGS_OFFSET + SC_REGS_BYTES) /* SC_FPREGS_BYTES */ +#define SC_FPREGS_BYTES (SC_FPREGS_SAVED*REGSZ_FP) +#define SC_FPREGS SC_FPREGS_OFFSET -#define SC_BYTES (SC_FPREGS + SC_FPREGS_SAVED*REGSZ_FP) -#define SC_LONGS (SC_BYTES/REGSZ) +#define SC_TOTAL_BYTES (SC_FPREGS_OFFSET + SC_FPREGS_BYTES) +#define SC_TOTAL_LONGS (SC_TOTAL_BYTES/REGSZ) -#ifdef __LP64__ -/* SC_LONGS is 22, so _JBLEN should be 22 or larger */ -#else -/* SC_LONGS is 28, but must also allocate dynamic-roundup filler. - so _JBLEN should be 29 or larger */ +#if SC_TOTAL_LONGS > _JBLEN +#error _JBLEN is too small #endif /* - * _setjmp, _longjmp (restoring signal state) * - * GPOFF and FRAMESIZE must be the same for both _setjmp and _longjmp! + * GPOFF and FRAMESIZE must be the same for all setjmp/longjmp routines * */ @@ -145,30 +178,33 @@ A0OFF= FRAMESZ-3*REGSZ GPOFF= FRAMESZ-2*REGSZ RAOFF= FRAMESZ-1*REGSZ -NON_LEAF(setjmp, FRAMESZ, ra) +NON_LEAF(sigsetjmp, FRAMESZ, ra) .mask 0x80000000, RAOFF PTR_SUBU sp, FRAMESZ # allocate stack frame - SETUP_GP64(GPOFF, setjmp) + SETUP_GP64(GPOFF, sigsetjmp) SAVE_GP(GPOFF) .set reorder +setjmp_common: #ifndef __LP64__ - addiu a0, 7 # roundup jmpbuf addr to 8-byte boundary - li t0, ~7 - and a0, t0 + li t0, ~7 + and a0, t0 # round jmpbuf addr DOWN to 8-byte boundary #endif + sw a1, SC_FLAG_OFFSET(a0) # save savesigs flag + beqz a1, 1f # do saving of signal mask? - REG_S ra, RAOFF(sp) # save state + REG_S ra, RAOFF(sp) # spill state REG_S a0, A0OFF(sp) - move a0, zero # get current signal mask - jal sigblock + # call sigprocmask(int how ignored, sigset_t* null, sigset_t* SC_MASK(a0)): + LA a2, SC_MASK_OFFSET(a0) # gets current signal mask + li a0, 0 # how; ignored when new mask is null + li a1, 0 # null new mask + jal sigprocmask # get current signal mask REG_L a0, A0OFF(sp) REG_L ra, RAOFF(sp) - - REG_S v0, SC_MASK(a0) # save sc_mask = sigblock(0) - +1: li v0, 0xACEDBADE # sigcontext magic number - sw v0, SC_MAGIC(a0) + sw v0, SC_MAGIC_OFFSET(a0) # callee-saved long-sized regs: REG_S ra, SC_REGS+0*REGSZ(a0) REG_S s0, SC_REGS+1*REGSZ(a0) @@ -181,9 +217,9 @@ NON_LEAF(setjmp, FRAMESZ, ra) REG_S s7, SC_REGS+8*REGSZ(a0) REG_S s8, SC_REGS+9*REGSZ(a0) REG_L v0, GPOFF(sp) - REG_S v0, SC_REGS+10*REGSZ(a0) + REG_S v0, SC_REGS+10*REGSZ(a0) # save gp PTR_ADDU v0, sp, FRAMESZ - REG_S v0, SC_REGS+11*REGSZ(a0) + REG_S v0, SC_REGS+11*REGSZ(a0) # save orig sp cfc1 v0, $31 @@ -199,7 +235,7 @@ NON_LEAF(setjmp, FRAMESZ, ra) s.d $f31, SC_FPREGS+7*REGSZ_FP(a0) #else # callee-saved fp regs on mips o32 ABI are - # the even-numbered fp regs $f20,$f22,...$f30 + # the even-numbered double fp regs $f20,$f22,...$f30 s.d $f20, SC_FPREGS+0*REGSZ_FP(a0) s.d $f22, SC_FPREGS+1*REGSZ_FP(a0) s.d $f24, SC_FPREGS+2*REGSZ_FP(a0) @@ -207,37 +243,68 @@ NON_LEAF(setjmp, FRAMESZ, ra) s.d $f28, SC_FPREGS+4*REGSZ_FP(a0) s.d $f30, SC_FPREGS+5*REGSZ_FP(a0) #endif - sw v0, SC_FPSR(a0) + sw v0, SC_FPSR_OFFSET(a0) move v0, zero RESTORE_GP64 PTR_ADDU sp, FRAMESZ j ra -END(setjmp) +END(sigsetjmp) -NON_LEAF(longjmp, FRAMESZ, ra) + +# Alternate entry points: + +NON_LEAF(setjmp, FRAMESZ, ra) .mask 0x80000000, RAOFF PTR_SUBU sp, FRAMESZ - SETUP_GP64(GPOFF, longjmp) + SETUP_GP64(GPOFF, setjmp) # can't share sigsetjmp's gp code + SAVE_GP(GPOFF) + .set reorder + + li a1, 1 # save/restore signals state + b setjmp_common # tail call +END(setjmp) + + +NON_LEAF(_setjmp, FRAMESZ, ra) + .mask 0x80000000, RAOFF + PTR_SUBU sp, FRAMESZ + SETUP_GP64(GPOFF, _setjmp) # can't share sigsetjmp's gp code + SAVE_GP(GPOFF) + .set reorder + + li a1, 0 # don't save/restore signals + b setjmp_common # tail call +END(_setjmp) + + +NON_LEAF(siglongjmp, FRAMESZ, ra) + .mask 0x80000000, RAOFF + PTR_SUBU sp, FRAMESZ + SETUP_GP64(GPOFF, siglongjmp) SAVE_GP(GPOFF) .set reorder #ifndef __LP64__ - addiu a0, 7 # roundup jmpbuf addr to 8-byte boundary - li t0, ~7 - and a0, t0 + li t0, ~7 + and a0, t0 # round jmpbuf addr DOWN to 8-byte boundary #endif + lw v0, SC_MAGIC_OFFSET(a0) + li t0, 0xACEDBADE + bne v0, t0, longjmp_botch # jump if error - REG_S a1, A1OFF(sp) + lw t0, SC_FLAG_OFFSET(a0) # get savesigs flag + beqz t0, 1f # restore signal mask? + + REG_S a1, A1OFF(sp) # temp spill REG_S a0, A0OFF(sp) - lw a0, SC_MASK(a0) - jal sigsetmask + # call sigprocmask(int how SIG_SETMASK, sigset_t* SC_MASK(a0), sigset_t* null): + LA a1, SC_MASK_OFFSET(a0) # signals being restored + li a0, 3 # mips SIG_SETMASK + li a2, 0 # null + jal sigprocmask # restore signal mask REG_L a0, A0OFF(sp) REG_L a1, A1OFF(sp) - - lw v0, SC_MAGIC(a0) - li t0, 0xACEDBADE - bne v0, t0, longjmp_botch # jump if error - +1: # callee-saved long-sized regs: REG_L ra, SC_REGS+0*REGSZ(a0) REG_L s0, SC_REGS+1*REGSZ(a0) @@ -252,8 +319,8 @@ NON_LEAF(longjmp, FRAMESZ, ra) REG_L gp, SC_REGS+10*REGSZ(a0) REG_L sp, SC_REGS+11*REGSZ(a0) - lw v0, SC_FPSR(a0) - ctc1 v0, $31 + lw v0, SC_FPSR_OFFSET(a0) + ctc1 v0, $31 # restore old fr mode before fp values #ifdef __LP64__ # callee-saved fp regs on mips n64 ABI are $f24..$f31 l.d $f24, SC_FPREGS+0*REGSZ_FP(a0) @@ -266,7 +333,7 @@ NON_LEAF(longjmp, FRAMESZ, ra) l.d $f31, SC_FPREGS+7*REGSZ_FP(a0) #else # callee-saved fp regs on mips o32 ABI are - # the even-numbered fp regs $f20,$f22,...$f30 + # the even-numbered double fp regs $f20,$f22,...$f30 l.d $f20, SC_FPREGS+0*REGSZ_FP(a0) l.d $f22, SC_FPREGS+1*REGSZ_FP(a0) l.d $f24, SC_FPREGS+2*REGSZ_FP(a0) @@ -278,192 +345,19 @@ NON_LEAF(longjmp, FRAMESZ, ra) li a1, 1 # never return 0! 1: move v0, a1 - j ra + j ra # return to setjmp call site longjmp_botch: jal longjmperror jal abort - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ -END(longjmp) - - -/* - * _setjmp, _longjmp (not restoring signal state) - * - * GPOFF and FRAMESIZE must be the same for both _setjmp and _longjmp! - * - */ - -FRAMESZ= MKFSIZ(0,4) -GPOFF= FRAMESZ-2*REGSZ - -LEAF(_setjmp, FRAMESZ) - PTR_SUBU sp, FRAMESZ - SETUP_GP64(GPOFF, _setjmp) - SAVE_GP(GPOFF) - .set reorder - -#ifndef __LP64__ - addiu a0, 7 # roundup jmpbuf addr to 8-byte boundary - li t0, ~7 - and a0, t0 -#endif - - # SC_MASK is unused here - - li v0, 0xACEDBADE # sigcontext magic number - sw v0, SC_MAGIC(a0) - # callee-saved long-sized regs: - REG_S ra, SC_REGS+0*REGSZ(a0) - REG_S s0, SC_REGS+1*REGSZ(a0) - REG_S s1, SC_REGS+2*REGSZ(a0) - REG_S s2, SC_REGS+3*REGSZ(a0) - REG_S s3, SC_REGS+4*REGSZ(a0) - REG_S s4, SC_REGS+5*REGSZ(a0) - REG_S s5, SC_REGS+6*REGSZ(a0) - REG_S s6, SC_REGS+7*REGSZ(a0) - REG_S s7, SC_REGS+8*REGSZ(a0) - REG_S s8, SC_REGS+9*REGSZ(a0) - REG_L v0, GPOFF(sp) - REG_S v0, SC_REGS+10*REGSZ(a0) - PTR_ADDU v0, sp, FRAMESZ - REG_S v0, SC_REGS+11*REGSZ(a0) - - cfc1 v0, $31 - -#ifdef __LP64__ - # callee-saved fp regs on mips n64 ABI are $f24..$f31 - s.d $f24, SC_FPREGS+0*REGSZ_FP(a0) - s.d $f25, SC_FPREGS+1*REGSZ_FP(a0) - s.d $f26, SC_FPREGS+2*REGSZ_FP(a0) - s.d $f27, SC_FPREGS+3*REGSZ_FP(a0) - s.d $f28, SC_FPREGS+4*REGSZ_FP(a0) - s.d $f29, SC_FPREGS+5*REGSZ_FP(a0) - s.d $f30, SC_FPREGS+6*REGSZ_FP(a0) - s.d $f31, SC_FPREGS+7*REGSZ_FP(a0) -#else - # callee-saved fp regs on mips o32 ABI are - # the even-numbered fp regs $f20,$f22,...$f30 - s.d $f20, SC_FPREGS+0*REGSZ_FP(a0) - s.d $f22, SC_FPREGS+1*REGSZ_FP(a0) - s.d $f24, SC_FPREGS+2*REGSZ_FP(a0) - s.d $f26, SC_FPREGS+3*REGSZ_FP(a0) - s.d $f28, SC_FPREGS+4*REGSZ_FP(a0) - s.d $f30, SC_FPREGS+5*REGSZ_FP(a0) -#endif - sw v0, SC_FPSR(a0) - move v0, zero - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - j ra -END(_setjmp) - - -LEAF(_longjmp, FRAMESZ) - PTR_SUBU sp, FRAMESZ - SETUP_GP64(GPOFF, _longjmp) - SAVE_GP(GPOFF) - .set reorder - -#ifndef __LP64__ - addiu a0, 7 # roundup jmpbuf addr to 8-byte boundary - li t0, ~7 - and a0, t0 -#endif - - # SC_MASK is unused here - - lw v0, SC_MAGIC(a0) - li t0, 0xACEDBADE - bne v0, t0, _longjmp_botch # jump if error - - # callee-saved long-sized regs: - REG_L ra, SC_REGS+0*REGSZ(a0) - REG_L s0, SC_REGS+1*REGSZ(a0) - REG_L s1, SC_REGS+2*REGSZ(a0) - REG_L s2, SC_REGS+3*REGSZ(a0) - REG_L s3, SC_REGS+4*REGSZ(a0) - REG_L s4, SC_REGS+5*REGSZ(a0) - REG_L s5, SC_REGS+6*REGSZ(a0) - REG_L s6, SC_REGS+7*REGSZ(a0) - REG_L s7, SC_REGS+8*REGSZ(a0) - REG_L s8, SC_REGS+9*REGSZ(a0) - REG_L gp, SC_REGS+10*REGSZ(a0) - REG_L sp, SC_REGS+11*REGSZ(a0) - - lw v0, SC_FPSR(a0) - ctc1 v0, $31 -#ifdef __LP64__ - # callee-saved fp regs on mips n64 ABI are $f24..$f31 - l.d $f24, SC_FPREGS+0*REGSZ_FP(a0) - l.d $f25, SC_FPREGS+1*REGSZ_FP(a0) - l.d $f26, SC_FPREGS+2*REGSZ_FP(a0) - l.d $f27, SC_FPREGS+3*REGSZ_FP(a0) - l.d $f28, SC_FPREGS+4*REGSZ_FP(a0) - l.d $f29, SC_FPREGS+5*REGSZ_FP(a0) - l.d $f30, SC_FPREGS+6*REGSZ_FP(a0) - l.d $f31, SC_FPREGS+7*REGSZ_FP(a0) -#else - # callee-saved fp regs on mips o32 ABI are - # the even-numbered fp regs $f20,$f22,...$f30 - l.d $f20, SC_FPREGS+0*REGSZ_FP(a0) - l.d $f22, SC_FPREGS+1*REGSZ_FP(a0) - l.d $f24, SC_FPREGS+2*REGSZ_FP(a0) - l.d $f26, SC_FPREGS+3*REGSZ_FP(a0) - l.d $f28, SC_FPREGS+4*REGSZ_FP(a0) - l.d $f30, SC_FPREGS+5*REGSZ_FP(a0) -#endif - bne a1, zero, 1f - li a1, 1 # never return 0! -1: - move v0, a1 - j ra - -_longjmp_botch: - jal longjmperror - jal abort - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ -END(_longjmp) - -/* - * trampolines for sigsetjmp and siglongjmp save and restore mask. - * - */ -FRAMESZ= MKFSIZ(1,1) -GPOFF= FRAMESZ-2*REGSZ - -LEAF(sigsetjmp, FRAMESZ) - PTR_SUBU sp, FRAMESZ - SETUP_GP64(GPOFF, sigsetjmp) - .set reorder - sw a1, _JBLEN*REGSZ(a0) # save "savemask" - bne a1, 0x0, 1f # do saving of signal mask? - LA t9, _setjmp - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - jr t9 - -1: LA t9, setjmp - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - jr t9 -END(sigsetjmp) - -LEAF(siglongjmp, FRAMESZ) - PTR_SUBU sp, FRAMESZ - SETUP_GP64(GPOFF, siglongjmp) - .set reorder - lw t0, _JBLEN*REGSZ(a0) # get "savemask" - bne t0, 0x0, 1f # restore signal mask? - LA t9, _longjmp - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - jr t9 -1: - LA t9, longjmp - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - jr t9 END(siglongjmp) + + + .globl longjmp + .type longjmp, @function + .equ longjmp, siglongjmp # alias for siglongjmp + + + .globl _longjmp + .type _longjmp, @function + .equ _longjmp, siglongjmp # alias for siglongjmp diff --git a/libc/arch-mips/include/machine/setjmp.h b/libc/arch-mips/include/machine/setjmp.h index a9707dc2e..4067d510a 100644 --- a/libc/arch-mips/include/machine/setjmp.h +++ b/libc/arch-mips/include/machine/setjmp.h @@ -6,9 +6,10 @@ #define _MIPS_SETJMP_H_ #ifdef __LP64__ -#define _JBLEN 22 /* size, in 8-byte longs, of a mips64 jmp_buf */ +#define _JBLEN 25 /* size, in 8-byte longs, of a mips64 jmp_buf/sigjmp_buf */ #else -#define _JBLEN 29 /* size, in 4-byte longs, of a mips32 jmp_buf */ +#define _JBLEN 157 /* historical size, in 4-byte longs, of a mips32 jmp_buf */ + /* actual used size is 34 */ #endif #endif /* !_MIPS_SETJMP_H_ */ From 3a629af0add238c2801b64aade52ee983c9012bc Mon Sep 17 00:00:00 2001 From: Shu Zhang Date: Wed, 23 Jul 2014 16:59:22 +0800 Subject: [PATCH 116/194] libm: arm: Add arm specific floor() optimization Add arm specific floor() implementation which avoids VMSR and VMRS instructions. Change-Id: Ibd4cd7147aa2f98c9b5bbaf74948843ea619dba4 --- libm/Android.mk | 23 +++++++- libm/arm/s_floor.S | 142 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 libm/arm/s_floor.S diff --git a/libm/Android.mk b/libm/Android.mk index dc6c70499..ebc3c9fe9 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -130,7 +130,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_fdim.c \ upstream-freebsd/lib/msun/src/s_finite.c \ upstream-freebsd/lib/msun/src/s_finitef.c \ - upstream-freebsd/lib/msun/src/s_floor.c \ upstream-freebsd/lib/msun/src/s_floorf.c \ upstream-freebsd/lib/msun/src/s_fma.c \ upstream-freebsd/lib/msun/src/s_fmaf.c \ @@ -264,20 +263,39 @@ LOCAL_SRC_FILES += \ LOCAL_SRC_FILES_arm += \ arm/fenv.c \ +# s_floor.S requires neon instructions. +ifdef TARGET_2ND_ARCH +arch_variant := $(TARGET_2ND_ARCH_VARIANT) +else +arch_variant := $(TARGET_ARCH_VARIANT) +endif + +# Use the C version on armv7-a since it doesn't support neon instructions. +ifeq ($(arch_variant),armv7-a) +LOCAL_SRC_FILES_arm += upstream-freebsd/lib/msun/src/s_floor.c +else +LOCAL_SRC_FILES_arm += arm/s_floor.S +endif + LOCAL_SRC_FILES_arm64 += \ arm64/fenv.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ LOCAL_SRC_FILES_mips += \ mips/fenv.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ LOCAL_SRC_FILES_mips64 += \ mips/fenv.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ LOCAL_SRC_FILES_x86 += \ i387/fenv.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ LOCAL_SRC_FILES_x86_64 += \ amd64/fenv.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ LOCAL_C_INCLUDES_x86 += $(LOCAL_PATH)/i387 @@ -297,6 +315,9 @@ LOCAL_CFLAGS := \ -Wno-unknown-pragmas \ -fvisibility=hidden \ +LOCAL_ASFLAGS := \ + -Ibionic/libc \ + # Workaround the GCC "(long)fn -> lfn" optimization bug which will result in # self recursions for lrint, lrintf, and lrintl. # BUG: 14225968 diff --git a/libm/arm/s_floor.S b/libm/arm/s_floor.S new file mode 100644 index 000000000..44053581e --- /dev/null +++ b/libm/arm/s_floor.S @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2013-2014, NVIDIA Corporation. All rights reserved. + * Johnny Qiu + * Shu Zhang + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +ENTRY(floor) /* x in r0, r1 */ + + and r3, r1, #0x80000000 /* sign(x) */ + bic r1, r1, #0x80000000 /* x = abs(x) */ + + /* extract exp of x */ + lsr r2, r1, #20 + sub r2, r2, #0x3fc + subs r2, r2, #0x3 /* r2 <- exp */ + + /* |x| < 1.0? */ + blt .Lx_lt_one + + /* x < 0? */ + cmp r3, #0 + bne .Lclr_frac_neg + + /* |x| <= 2^20? */ + cmp r2, #20 + ble .Lclr_frac_r1 + + /* |x| < 2^52? */ + cmp r2, #52 + blt .Lclr_frac_r0 + + /* return x */ + bx lr + +.Lclr_frac_r1: + rsb r2, r2, #20 + lsr r1, r1, r2 + lsl r1, r1, r2 + mov r0, #0 + bx lr + +.Lclr_frac_r0: + rsb r2, r2, #52 + lsr r0, r0, r2 + lsl r0, r0, r2 + bx lr + +.Lclr_frac_neg: + /* |x| <= 2^20? */ + cmp r2, #20 + ble .Lclr_frac_r1_neg + + /* |x| < 2^52? */ + cmp r2, #52 + blt .Lclr_frac_r0_neg + + /* return x */ + orr r1, r1, #0x80000000 + bx lr + +.Lclr_frac_r1_neg: + rsb r2, r2, #20 + mov r3, #1 + lsl r3, r3, r2 + sub r3, r3, #1 + and r3, r1, r3 + orr r3, r3, r0 + lsr r1, r1, r2 + lsl r1, r1, r2 + mov r0, #0 + b .Lreturn_x_neg + +.Lclr_frac_r0_neg: + rsb r2, r2, #52 + mov r3, #1 + lsl r3, r3, r2 + sub r3, r3, #1 + and r3, r0, r3 + lsr r0, r0, r2 + lsl r0, r0, r2 + b .Lreturn_x_neg + +.Lx_lt_one: + /* x == +-0? */ + cmp r0, #0 + cmpeq r1, #0 + orreq r1, r1, r3 + bxeq lr + + /* (x > 0) ? 0 : -1 */ + mov r1, #0x00100000 + mov r0, #0 + cmp r3, #0 + movne r1, #0xc0000000 + sub r1, r1, #0x00100000 + bx lr + +.Lreturn_x_neg: + cmp r3, #0 + orr r1, r1, #0x80000000 + bxeq lr + + vmov d16, r0, r1 + vmov.f64 d18, #1.0 + vsub.f64 d16, d16, d18 + vmov r0, r1, d16 + bx lr + +END(floor) + +#if LDBL_MANT_DIG == 53 + .weak floorl + .equ floorl,floor +#endif From 56b2b2916b72eb21352c7aed529e0deeb5582072 Mon Sep 17 00:00:00 2001 From: Jingwei Zhang Date: Tue, 2 Sep 2014 21:39:14 +0800 Subject: [PATCH 117/194] Accuracy tests for libm This patch adds more tests for math functions to address coverage issue of math functions discussed in: https://android-review.googlesource.com/#/c/49653/ https://android-review.googlesource.com/#/c/94780/ These are data sets used in regression tests for the Intel the math library (libm). They were collected over a long period of testing various libm implementations. The data sets contain function specific data (special and corner cases such as +/-0, maximum/minimum normalized numbers, +/-infinity, QNaN/SNaN, maximum/minimum denormal numbers, arguments that would produce close to overflow/underflow results, known hard-to-round cases, etc), implementation specific data (arguments close to table look-up values for different polynomial approximations, worst cases for range reduction algorithms) and other data with interesting bit patterns. The reference values are computed with Maple and were converted into hexadecimal format. Change-Id: I7177c282937369eae98f25d02134e4fc3beadde8 Signed-off-by: Jingwei Zhang Signed-off-by: Mingwei Shi --- tests/math_data/acos_intel_data.h | 1314 ++ tests/math_data/acosf_intel_data.h | 982 ++ tests/math_data/acosh_intel_data.h | 958 ++ tests/math_data/acoshf_intel_data.h | 662 + tests/math_data/asin_intel_data.h | 2774 ++++ tests/math_data/asinf_intel_data.h | 1934 +++ tests/math_data/asinh_intel_data.h | 2042 +++ tests/math_data/asinhf_intel_data.h | 1650 ++ tests/math_data/atan2_intel_data.h | 5348 ++++++ tests/math_data/atan2f_intel_data.h | 4703 ++++++ tests/math_data/atan_intel_data.h | 4646 ++++++ tests/math_data/atanf_intel_data.h | 4350 +++++ tests/math_data/atanh_intel_data.h | 2458 +++ tests/math_data/atanhf_intel_data.h | 2090 +++ tests/math_data/cbrt_intel_data.h | 2274 +++ tests/math_data/cbrtf_intel_data.h | 1754 ++ tests/math_data/ceil_intel_data.h | 1338 ++ tests/math_data/ceilf_intel_data.h | 1338 ++ tests/math_data/copysign_intel_data.h | 1458 ++ tests/math_data/copysignf_intel_data.h | 1458 ++ .../cos_intel_data.h} | 0 .../cosf_intel_data.h} | 0 tests/math_data/cosh_intel_data.h | 2934 ++++ tests/math_data/coshf_intel_data.h | 2438 +++ tests/math_data/exp2_intel_data.h | 1342 ++ tests/math_data/exp2f_intel_data.h | 1126 ++ .../exp_intel_data.h} | 0 .../expf_intel_data.h} | 0 tests/math_data/expm1_intel_data.h | 1570 ++ tests/math_data/expm1f_intel_data.h | 1182 ++ tests/math_data/fabs_intel_data.h | 494 + tests/math_data/fabsf_intel_data.h | 446 + tests/math_data/fdim_intel_data.h | 1788 ++ tests/math_data/fdimf_intel_data.h | 1793 ++ tests/math_data/floor_intel_data.h | 1338 ++ tests/math_data/floorf_intel_data.h | 1338 ++ tests/math_data/fma_intel_data.h | 13830 +++++++++++++++ tests/math_data/fmaf_intel_data.h | 13836 ++++++++++++++++ tests/math_data/fmax_intel_data.h | 1093 ++ tests/math_data/fmaxf_intel_data.h | 1103 ++ tests/math_data/fmin_intel_data.h | 1093 ++ tests/math_data/fminf_intel_data.h | 1103 ++ tests/math_data/fmod_intel_data.h | 1328 ++ tests/math_data/fmodf_intel_data.h | 1298 ++ tests/math_data/frexp_intel_data.h | 1108 ++ tests/math_data/frexpf_intel_data.h | 888 + tests/math_data/hypot_intel_data.h | 2788 ++++ tests/math_data/hypotf_intel_data.h | 2373 +++ tests/math_data/ilogb_intel_data.h | 890 + tests/math_data/ilogbf_intel_data.h | 714 + tests/math_data/ldexp_intel_data.h | 4348 +++++ tests/math_data/ldexpf_intel_data.h | 4288 +++++ tests/math_data/log10_intel_data.h | 1474 ++ tests/math_data/log10f_intel_data.h | 1226 ++ tests/math_data/log1p_intel_data.h | 1486 ++ tests/math_data/log1pf_intel_data.h | 1182 ++ tests/math_data/log2_intel_data.h | 1422 ++ tests/math_data/log2f_intel_data.h | 1150 ++ .../log_intel_data.h} | 0 tests/math_data/logb_intel_data.h | 898 + tests/math_data/logbf_intel_data.h | 714 + .../logf_intel_data.h} | 0 tests/math_data/modf_intel_data.h | 1858 +++ tests/math_data/modff_intel_data.h | 1858 +++ tests/math_data/nearbyint_intel_data.h | 1338 ++ tests/math_data/nearbyintf_intel_data.h | 1338 ++ tests/math_data/nextafter_intel_data.h | 2088 +++ tests/math_data/nextafterf_intel_data.h | 1863 +++ .../pow_intel_data.h} | 0 .../powf_intel_data.h} | 0 tests/math_data/remainder_intel_data.h | 1308 ++ tests/math_data/remainderf_intel_data.h | 1293 ++ tests/math_data/remquo_intel_data.h | 1584 ++ tests/math_data/remquof_intel_data.h | 1578 ++ tests/math_data/rint_intel_data.h | 1338 ++ tests/math_data/rintf_intel_data.h | 1358 ++ tests/math_data/round_intel_data.h | 1350 ++ tests/math_data/roundf_intel_data.h | 1338 ++ tests/math_data/scalb_intel_data.h | 4628 ++++++ tests/math_data/scalbf_intel_data.h | 4588 +++++ tests/math_data/scalbn_intel_data.h | 4333 +++++ tests/math_data/scalbnf_intel_data.h | 4288 +++++ tests/math_data/significand_intel_data.h | 638 + tests/math_data/significandf_intel_data.h | 526 + .../sin_intel_data.h} | 0 .../sincos_intel_data.h} | 0 .../sincosf_intel_data.h} | 0 .../sinf_intel_data.h} | 0 tests/math_data/sinh_intel_data.h | 3054 ++++ tests/math_data/sinhf_intel_data.h | 2494 +++ tests/math_data/sqrt_intel_data.h | 718 + tests/math_data/sqrtf_intel_data.h | 710 + .../tan_intel_data.h} | 0 .../tanf_intel_data.h} | 0 tests/math_data/tanh_intel_data.h | 2938 ++++ tests/math_data/tanhf_intel_data.h | 2274 +++ tests/math_data/trunc_intel_data.h | 1338 ++ tests/math_data/truncf_intel_data.h | 1338 ++ tests/math_data_test.h | 103 + tests/math_test.cpp | 464 +- 100 files changed, 180853 insertions(+), 22 deletions(-) create mode 100644 tests/math_data/acos_intel_data.h create mode 100644 tests/math_data/acosf_intel_data.h create mode 100644 tests/math_data/acosh_intel_data.h create mode 100644 tests/math_data/acoshf_intel_data.h create mode 100644 tests/math_data/asin_intel_data.h create mode 100644 tests/math_data/asinf_intel_data.h create mode 100644 tests/math_data/asinh_intel_data.h create mode 100644 tests/math_data/asinhf_intel_data.h create mode 100644 tests/math_data/atan2_intel_data.h create mode 100644 tests/math_data/atan2f_intel_data.h create mode 100644 tests/math_data/atan_intel_data.h create mode 100644 tests/math_data/atanf_intel_data.h create mode 100644 tests/math_data/atanh_intel_data.h create mode 100644 tests/math_data/atanhf_intel_data.h create mode 100644 tests/math_data/cbrt_intel_data.h create mode 100644 tests/math_data/cbrtf_intel_data.h create mode 100644 tests/math_data/ceil_intel_data.h create mode 100644 tests/math_data/ceilf_intel_data.h create mode 100644 tests/math_data/copysign_intel_data.h create mode 100644 tests/math_data/copysignf_intel_data.h rename tests/{math_cos_intel_data.h => math_data/cos_intel_data.h} (100%) rename tests/{math_cosf_intel_data.h => math_data/cosf_intel_data.h} (100%) create mode 100644 tests/math_data/cosh_intel_data.h create mode 100644 tests/math_data/coshf_intel_data.h create mode 100644 tests/math_data/exp2_intel_data.h create mode 100644 tests/math_data/exp2f_intel_data.h rename tests/{math_exp_intel_data.h => math_data/exp_intel_data.h} (100%) rename tests/{math_expf_intel_data.h => math_data/expf_intel_data.h} (100%) create mode 100644 tests/math_data/expm1_intel_data.h create mode 100644 tests/math_data/expm1f_intel_data.h create mode 100644 tests/math_data/fabs_intel_data.h create mode 100644 tests/math_data/fabsf_intel_data.h create mode 100644 tests/math_data/fdim_intel_data.h create mode 100644 tests/math_data/fdimf_intel_data.h create mode 100644 tests/math_data/floor_intel_data.h create mode 100644 tests/math_data/floorf_intel_data.h create mode 100644 tests/math_data/fma_intel_data.h create mode 100644 tests/math_data/fmaf_intel_data.h create mode 100644 tests/math_data/fmax_intel_data.h create mode 100644 tests/math_data/fmaxf_intel_data.h create mode 100644 tests/math_data/fmin_intel_data.h create mode 100644 tests/math_data/fminf_intel_data.h create mode 100644 tests/math_data/fmod_intel_data.h create mode 100644 tests/math_data/fmodf_intel_data.h create mode 100644 tests/math_data/frexp_intel_data.h create mode 100644 tests/math_data/frexpf_intel_data.h create mode 100644 tests/math_data/hypot_intel_data.h create mode 100644 tests/math_data/hypotf_intel_data.h create mode 100644 tests/math_data/ilogb_intel_data.h create mode 100644 tests/math_data/ilogbf_intel_data.h create mode 100644 tests/math_data/ldexp_intel_data.h create mode 100644 tests/math_data/ldexpf_intel_data.h create mode 100644 tests/math_data/log10_intel_data.h create mode 100644 tests/math_data/log10f_intel_data.h create mode 100644 tests/math_data/log1p_intel_data.h create mode 100644 tests/math_data/log1pf_intel_data.h create mode 100644 tests/math_data/log2_intel_data.h create mode 100644 tests/math_data/log2f_intel_data.h rename tests/{math_log_intel_data.h => math_data/log_intel_data.h} (100%) create mode 100644 tests/math_data/logb_intel_data.h create mode 100644 tests/math_data/logbf_intel_data.h rename tests/{math_logf_intel_data.h => math_data/logf_intel_data.h} (100%) create mode 100644 tests/math_data/modf_intel_data.h create mode 100644 tests/math_data/modff_intel_data.h create mode 100644 tests/math_data/nearbyint_intel_data.h create mode 100644 tests/math_data/nearbyintf_intel_data.h create mode 100644 tests/math_data/nextafter_intel_data.h create mode 100644 tests/math_data/nextafterf_intel_data.h rename tests/{math_pow_intel_data.h => math_data/pow_intel_data.h} (100%) rename tests/{math_powf_intel_data.h => math_data/powf_intel_data.h} (100%) create mode 100644 tests/math_data/remainder_intel_data.h create mode 100644 tests/math_data/remainderf_intel_data.h create mode 100644 tests/math_data/remquo_intel_data.h create mode 100644 tests/math_data/remquof_intel_data.h create mode 100644 tests/math_data/rint_intel_data.h create mode 100644 tests/math_data/rintf_intel_data.h create mode 100644 tests/math_data/round_intel_data.h create mode 100644 tests/math_data/roundf_intel_data.h create mode 100644 tests/math_data/scalb_intel_data.h create mode 100644 tests/math_data/scalbf_intel_data.h create mode 100644 tests/math_data/scalbn_intel_data.h create mode 100644 tests/math_data/scalbnf_intel_data.h create mode 100644 tests/math_data/significand_intel_data.h create mode 100644 tests/math_data/significandf_intel_data.h rename tests/{math_sin_intel_data.h => math_data/sin_intel_data.h} (100%) rename tests/{math_sincos_intel_data.h => math_data/sincos_intel_data.h} (100%) rename tests/{math_sincosf_intel_data.h => math_data/sincosf_intel_data.h} (100%) rename tests/{math_sinf_intel_data.h => math_data/sinf_intel_data.h} (100%) create mode 100644 tests/math_data/sinh_intel_data.h create mode 100644 tests/math_data/sinhf_intel_data.h create mode 100644 tests/math_data/sqrt_intel_data.h create mode 100644 tests/math_data/sqrtf_intel_data.h rename tests/{math_tan_intel_data.h => math_data/tan_intel_data.h} (100%) rename tests/{math_tanf_intel_data.h => math_data/tanf_intel_data.h} (100%) create mode 100644 tests/math_data/tanh_intel_data.h create mode 100644 tests/math_data/tanhf_intel_data.h create mode 100644 tests/math_data/trunc_intel_data.h create mode 100644 tests/math_data/truncf_intel_data.h diff --git a/tests/math_data/acos_intel_data.h b/tests/math_data/acos_intel_data.h new file mode 100644 index 000000000..5c177ce5c --- /dev/null +++ b/tests/math_data/acos_intel_data.h @@ -0,0 +1,1314 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_acos_intel_data[] = { + { // Entry 0 + 0x1.c8a538ae83d1f7ffffffffffffcef091p-1, + 0x1.4182199998587p-1 + }, + { // Entry 1 + 0x1.520dc553f6b23800000000000226b93cp-2, + 0x1.e45a1c93651ecp-1 + }, + { // Entry 2 + 0x1.91e006d41d8d8fffffffffffffffe4aep0, + 0x1.fd737be914578p-11 + }, + { // Entry 3 + 0x1.efeef61d39ac1ffffffffffff8244904p-3, + 0x1.f10fc61e2c78fp-1 + }, + { // Entry 4 + 0x1.0c152382d8f1bff4e139b41e4025d0fcp1, + -0x1.00000000060p-1 + }, + { // Entry 5 + 0x1.0c152382e0732be923fe009ea0c7355dp1, + -0x1.000000002p-1 + }, + { // Entry 6 + 0x1.d2cf5cbe8a4768000d63bae9c7297bcfp0, + -0x1.00000100001p-2 + }, + { // Entry 7 + 0x1.0c164c45aca25370b59ffdf4a18d65a1p1, + -0x1.0004040p-1 + }, + { // Entry 8 + 0x1.a222e1630a32c8001e3ce23da074be9bp0, + -0x1.0007ffffffffep-4 + }, + { // Entry 9 + 0x1.0c75b731b9c0ceed0fc3f7c5f98c5e1bp1, + -0x1.014e445bdcf7dp-1 + }, + { // Entry 10 + 0x1.0c8df00b6a96b44b4bbb209fc767369fp1, + -0x1.01a2037b1bac4p-1 + }, + { // Entry 11 + 0x1.0de4edea718bd2db5b8f1e8d95da11f5p1, + -0x1.064p-1 + }, + { // Entry 12 + 0x1.0e4b7c84d10ff2cdc09d8629c37c6bf9p1, + -0x1.07ap-1 + }, + { // Entry 13 + 0x1.0f2e40d09060f1a3d94731a6ca70a8ddp1, + -0x1.0aa7f71e6e71cp-1 + }, + { // Entry 14 + 0x1.0f43445ef5606fffa32df1d88ff691efp1, + -0x1.0aefb502023b6p-1 + }, + { // Entry 15 + 0x1.101adb881a80b24d6b78dbda9f109728p1, + -0x1.0dce1b9c37387p-1 + }, + { // Entry 16 + 0x1.10e62fa769e6534e688c4e0e33eca505p1, + -0x1.108p-1 + }, + { // Entry 17 + 0x1.11c33797afddabbea24dc3547594c5c0p1, + -0x1.136ae890a0b29p-1 + }, + { // Entry 18 + 0x1.1bae2535eaee0c1296c6eab12d27114ap1, + -0x1.340p-1 + }, + { // Entry 19 + 0x1.238d4f63c0137461ca7c6635fd0225bcp1, + -0x1.4c8df30e0f9f9p-1 + }, + { // Entry 20 + 0x1.bd4c060e9d4fa8000ae2414e49c449dep0, + -0x1.57cp-3 + }, + { // Entry 21 + 0x1.f3739df16d5810008dbb8f86206274e3p0, + -0x1.7c0p-2 + }, + { // Entry 22 + 0x1.359d26f93b6c08001b822971ead56e4cp1, + -0x1.7fffffffffff9p-1 + }, + { // Entry 23 + 0x1.f4aa0ecbe9ca07ff5383e6cbdeda0e6fp0, + -0x1.808p-2 + }, + { // Entry 24 + 0x1.3f176283f912f4d5c7129ad9f5141c1dp1, + -0x1.980p-1 + }, + { // Entry 25 + 0x1.92398cd07734cfff8e4658afba76b963p0, + -0x1.9d78c29270c37p-12 + }, + { // Entry 26 + 0x1.0241ccc7797b28001d8b3ed530288167p1, + -0x1.ba7c5af7cd988p-2 + }, + { // Entry 27 + 0x1.a0fad7a0ff6ff7ff77e44ec7b5ef9ba3p0, + -0x1.db2p-5 + }, + { // Entry 28 + 0x1.921fb54442d18469898cc51711854bddp0, + -0x1.f9a2475d37a04p-101 + }, + { // Entry 29 + 0x1.921fb54442d18469898cc517119368e5p0, + -0x1.fb65e86dc7e52p-101 + }, + { // Entry 30 + 0x1.821f3cbecf0a577f98d9122b4f7b3737p1, + -0x1.fc01190c5f1d4p-1 + }, + { // Entry 31 + 0x1.931eb46e6d8fd80019cf2ec002d1ea6ep0, + -0x1.fdfdfffffffffp-9 + }, + { // Entry 32 + 0x1.d2bdcdea4bbff28ee1513ce0581e6b80p0, + -0x1.ff77fffffffffp-3 + }, + { // Entry 33 + 0x1.b235294c376f9ffbe3cda85efb67c658p0, + -0x1.ffff7ffffffffp-4 + }, + { // Entry 34 + 0x1.0c1523808801280001696015d499795fp1, + -0x1.ffffffeffffe1p-2 + }, + { // Entry 35 + 0x1.9a200aa3332ca8002dd33eda52daa3b5p0, + -0x1.ffffffffff8ffp-6 + }, + { // Entry 36 + 0x1.0c152382d7340fff11bb3dc1f95c2689p1, + -0x1.fffffffffff03p-2 + }, + { // Entry 37 + 0x1.9a200aa3332e67f83053ef04d0a4eb45p0, + -0x1.ffffffffffffep-6 + }, + { // Entry 38 + 0x1.921fb54442d18869898cc517019839a2p0, + -0x1.fffffffffffffp-55 + }, + { // Entry 39 + 0x1.720a392c1d8527f0766bdc231b390704p0, + 0x1.00000000008p-3 + }, + { // Entry 40 + 0x1.51700e0c1325b800d16de8911c74de7dp0, + 0x1.00000000060p-2 + }, + { // Entry 41 + 0x1.720a392c198d30009edc2a4283eae411p0, + 0x1.000000002p-3 + }, + { // Entry 42 + 0x1.0c1523804a159000007341c4be8459a3p0, + 0x1.000000046b404p-1 + }, + { // Entry 43 + 0x1.0c15235de3e7cb9bd2348617696fafccp0, + 0x1.0000004p-1 + }, + { // Entry 44 + 0x1.51700cf3291357ffa4ca332eb644f0f6p0, + 0x1.0000044p-2 + }, + { // Entry 45 + 0x1.911fb1199613980023854405784aadecp0, + 0x1.0004000000050p-8 + }, + { // Entry 46 + 0x1.512df2849c580e80a384e0df8f8e5a29p0, + 0x1.010p-2 + }, + { // Entry 47 + 0x1.0a2f22b4aaf4137fd551484ed58a9734p0, + 0x1.0347f8edc9a96p-1 + }, + { // Entry 48 + 0x1.4e34727b36618e7b44a67aa702c53623p0, + 0x1.0c8p-2 + }, + { // Entry 49 + 0x1.04bc2567dc9f8cd86255dcf4fafa7693p0, + 0x1.0c9e8916420b6p-1 + }, + { // Entry 50 + 0x1.04014982d9ce73c468c55eb187532cd7p0, + 0x1.0ddc68b675658p-1 + }, + { // Entry 51 + 0x1.81385760faf0f7fe7fd9d1f793eb6e9bp0, + 0x1.0e4390e4390e1p-4 + }, + { // Entry 52 + 0x1.4d7407811e5f8f522dfdeb46952e8762p0, + 0x1.0f6671d3cee5ep-2 + }, + { // Entry 53 + 0x1.4d4c369ec6516bd075addb99a8f1fdc7p0, + 0x1.0ffffffe0p-2 + }, + { // Entry 54 + 0x1.899f4edc942ce80055c005582a9d9f5fp0, + 0x1.100000004p-5 + }, + { // Entry 55 + 0x1.02bb48da5f7b9308fc7983b9f555bdf9p0, + 0x1.1005a3ac6f054p-1 + }, + { // Entry 56 + 0x1.028b1af46d959324ee19f46a706b7d35p0, + 0x1.1057411e5735ap-1 + }, + { // Entry 57 + 0x1.020b51b1f72a8c2e4de9ec5488de7857p0, + 0x1.112f8a27ba5d5p-1 + }, + { // Entry 58 + 0x1.01e697d61109f3bbb99fe25e8efaf83fp0, + 0x1.116da6bf8b495p-1 + }, + { // Entry 59 + 0x1.017d9b789233f3964f1c62e3d1f18bb8p0, + 0x1.121f157cb6c0ap-1 + }, + { // Entry 60 + 0x1.0176c4d6b5631326381f276a1cf5aff2p0, + 0x1.122aa2913636cp-1 + }, + { // Entry 61 + 0x1.00d2160daa60f2dc9c5d2070d90ff117p0, + 0x1.134093e8f975bp-1 + }, + { // Entry 62 + 0x1.0067819bc0a6131b2515e089e5ffead6p0, + 0x1.13f438738f770p-1 + }, + { // Entry 63 + 0x1.005af0d670a69300326d1f919e90e37ep0, + 0x1.1409633da0018p-1 + }, + { // Entry 64 + 0x1.0006aaab22f953446798783c17afa73ap0, + 0x1.149748a9f1e12p-1 + }, + { // Entry 65 + 0x1.8dc1a761fc3e27ffddbace0c08f7d931p0, + 0x1.178p-6 + }, + { // Entry 66 + 0x1.faedbe5d362f77e0e37df0ba380d6bf2p-1, + 0x1.18e37509b64bfp-1 + }, + { // Entry 67 + 0x1.f723c85457f23e048017ebac9828f74ap-1, + 0x1.1c0c71b0d77b4p-1 + }, + { // Entry 68 + 0x1.f40045aa068255be54395b26191ca6ecp-1, + 0x1.1ea7972fc8124p-1 + }, + { // Entry 69 + 0x1.f3e4a7973ba9f5bc588023272bfd8fefp-1, + 0x1.1ebe78e20b1c4p-1 + }, + { // Entry 70 + 0x1.f35b18d9133df5c3286ad7c7f3a599ebp-1, + 0x1.1f306490c5782p-1 + }, + { // Entry 71 + 0x1.edf06e518f1d7e7d6318864553757b63p-1, + 0x1.23a83d7649788p-1 + }, + { // Entry 72 + 0x1.edae9bcb630d4d2d95081b152b6797a3p-1, + 0x1.23de545deeef6p-1 + }, + { // Entry 73 + 0x1.eb59d70c979f2da8249d5a4f58755b8fp-1, + 0x1.25c7dcb26a9cap-1 + }, + { // Entry 74 + 0x1.ea55cf128780505242c68838513032e7p-1, + 0x1.269cae16c3f63p-1 + }, + { // Entry 75 + 0x1.e0c7b682b6a8581abfbc77e99954db72p-1, + 0x1.2e6p-1 + }, + { // Entry 76 + 0x1.d9b299bbb4e537ac6ff62206d2da36b3p-1, + 0x1.340fb2423c6b3p-1 + }, + { // Entry 77 + 0x1.d538889085d30e4ca3abe981c9888d22p-1, + 0x1.37a0130f68f6ap-1 + }, + { // Entry 78 + 0x1.8d4034388cd22fff892e9180c4337f63p0, + 0x1.37db709c37bf5p-6 + }, + { // Entry 79 + 0x1.c8a538ae83d1f7ffffffffffffcef091p-1, + 0x1.4182199998587p-1 + }, + { // Entry 80 + 0x1.3ea71520cf3d37faeb955cf605d0a7dbp0, + 0x1.480p-2 + }, + { // Entry 81 + 0x1.be76e54ddede3ffe867c8817e7c6e06fp-1, + 0x1.495e1625f7b6fp-1 + }, + { // Entry 82 + 0x1.921562b09cf0e8004c5a81cf221a6e56p0, + 0x1.4a5274a529496p-13 + }, + { // Entry 83 + 0x1.af9fdabd59d9e658ff0e5e8c0c145370p-1, + 0x1.5496e087b338fp-1 + }, + { // Entry 84 + 0x1.91f48e0a5cec37ffff970d899abc38d6p0, + 0x1.5939cd8c9fbedp-11 + }, + { // Entry 85 + 0x1.a5282161b01857fa74d0820197a14f5ep-1, + 0x1.5c55572447fb8p-1 + }, + { // Entry 86 + 0x1.9c0c4195064df7ffd3c667633bf7a651p-1, + 0x1.62f42a09bce1dp-1 + }, + { // Entry 87 + 0x1.91c4c20a0ea7f800004eb45095fd191ap0, + 0x1.6bcce1297373ep-10 + }, + { // Entry 88 + 0x1.339d18f59afb880000d2fbce3d9c08c2p0, + 0x1.7182fc23eb316p-2 + }, + { // Entry 89 + 0x1.7ad4c5762d7b6800001a3adffeded5f4p0, + 0x1.742b66dcd4308p-4 + }, + { // Entry 90 + 0x1.32882c24236038000cd47b0b46bba64ep0, + 0x1.758b345cb9f3ep-2 + }, + { // Entry 91 + 0x1.7f46927c463a28062e3b1b0c16ac1bdbp-1, + 0x1.771e38e0af4fcp-1 + }, + { // Entry 92 + 0x1.782ebe246cbe37e3fb6a1ef678b064bfp-1, + 0x1.7be8d3908cb27p-1 + }, + { // Entry 93 + 0x1.7a40db57e99637fea04162825b2bc181p0, + 0x1.7d6p-4 + }, + { // Entry 94 + 0x1.720a392c1d9517f0970e86dd5de5b635p-1, + 0x1.8000000000002p-1 + }, + { // Entry 95 + 0x1.2e038f4737dfb7f94f31df896ea0ac7ap0, + 0x1.864fbb7b12ad6p-2 + }, + { // Entry 96 + 0x1.657df1f3a0bc08338a7af19c234dfc3ap-1, + 0x1.882efd2dd4220p-1 + }, + { // Entry 97 + 0x1.85cea1911701e80000bca0371b899679p0, + 0x1.89fb8a6df15e2p-5 + }, + { // Entry 98 + 0x1.2a202393ed2377fd5857f95af8665161p0, + 0x1.94a5294a52948p-2 + }, + { // Entry 99 + 0x1.781e4389c0b36fff9c101747cda30edcp0, + 0x1.9f6p-4 + }, + { // Entry 100 + 0x1.5d318bf3e390e7fff88af7a5da604d3ap0, + 0x1.a46e97f496ea3p-3 + }, + { // Entry 101 + 0x1.1b5148dd9e1bd7b01791138f3f325580p-1, + 0x1.b397a5f961839p-1 + }, + { // Entry 102 + 0x1.1a583fd138fb37a3f6d2f07dbf3ec7b3p-1, + 0x1.b41a53773a4e3p-1 + }, + { // Entry 103 + 0x1.14823c2657c87f555ecd15bb19387e6bp-1, + 0x1.b721cf87383f3p-1 + }, + { // Entry 104 + 0x1.1301fd2ab34e480181c3a283011497c5p-1, + 0x1.b7e6e68840de9p-1 + }, + { // Entry 105 + 0x1.12e096afcb7de8799b39619a4d425055p-1, + 0x1.b7f7fc997bfe3p-1 + }, + { // Entry 106 + 0x1.05b944cc4600b7f611b44550901f0ceep-1, + 0x1.be8cd7678f521p-1 + }, + { // Entry 107 + 0x1.8e9f6e1d3decc7fff55630ea5ccfd289p0, + 0x1.c01ffffffffffp-7 + }, + { // Entry 108 + 0x1.ffc7ad9153ff2fd7a788766680d9a358p-2, + 0x1.c16p-1 + }, + { // Entry 109 + 0x1.1dc2cb388dc96800004b1ca5a21af6b0p0, + 0x1.c196ba7c38699p-2 + }, + { // Entry 110 + 0x1.fb29d815d149880a7b959c1fb8374fd0p-2, + 0x1.c27a04ea38cddp-1 + }, + { // Entry 111 + 0x1.fb0f38754a0cf7f96b7417b739fd6712p-2, + 0x1.c280586977fd3p-1 + }, + { // Entry 112 + 0x1.f1884288008e97f81e1bbdd955287e5bp-2, + 0x1.c4bed345ea41ap-1 + }, + { // Entry 113 + 0x1.eb974d89e1c136026c6858b963f4f0d2p-2, + 0x1.c62p-1 + }, + { // Entry 114 + 0x1.e297da83df05f62c3022324c50ec1611p-2, + 0x1.c82f6b1c3d906p-1 + }, + { // Entry 115 + 0x1.589c2963846ca801074a478b55f6b7cap0, + 0x1.c84p-3 + }, + { // Entry 116 + 0x1.cdd9f8d6e777f7ffff853f09a06b5911p-2, + 0x1.ccccccd442bf9p-1 + }, + { // Entry 117 + 0x1.c42907c37d1b27cc0fa3350a28179421p-2, + 0x1.cee437c4d6115p-1 + }, + { // Entry 118 + 0x1.bf05da450c97f7f8826c8bfaa9e0af95p-2, + 0x1.cffbbf702a732p-1 + }, + { // Entry 119 + 0x1.bedf70d3703617fac6520f0337bf4a56p-2, + 0x1.d003ddf5923bap-1 + }, + { // Entry 120 + 0x1.b5d5824cd5a5b7f84e927113df50ca1dp-2, + 0x1.d1e84213079a0p-1 + }, + { // Entry 121 + 0x1.a858c231190e17fa9b20a3d037ec0e43p-2, + 0x1.d4a9c16b6b42ep-1 + }, + { // Entry 122 + 0x1.9f6c7fe8723777fb3d256621194eb6f1p-2, + 0x1.d6711059b2ce3p-1 + }, + { // Entry 123 + 0x1.9d5978ef2047b7f97b093ad7540b39b8p-2, + 0x1.d6d99a0c90a6ap-1 + }, + { // Entry 124 + 0x1.9cb189645b2df7f79b30cb75dff78e0bp-2, + 0x1.d6fa8f01023cfp-1 + }, + { // Entry 125 + 0x1.97b574226c7d77fd9b3bd3bc8ba77dd9p-2, + 0x1.d7f35e4f0e194p-1 + }, + { // Entry 126 + 0x1.9613e250da73e8056bef22e9fe299078p-2, + 0x1.d8442a16f8a05p-1 + }, + { // Entry 127 + 0x1.95e4749133f2a806cc1561ec93381a09p-2, + 0x1.d84d5271eccedp-1 + }, + { // Entry 128 + 0x1.858c8c0e0f34bf9b87be908d0e8cd365p-2, + 0x1.db658d47a4f02p-1 + }, + { // Entry 129 + 0x1.6bf38913626aa7ff1b8b15b0481456e5p-2, + 0x1.e00000007ffffp-1 + }, + { // Entry 130 + 0x1.3c2328dda8571001f1fa3a4b1b738ab2p-2, + 0x1.e7cb07ba8097ap-1 + }, + { // Entry 131 + 0x1.37fa7f88bd54d0023b864b207af0307cp-2, + 0x1.e86bbf35007dfp-1 + }, + { // Entry 132 + 0x1.29ce7191cc2fe7ff1aee4a298866fa12p-2, + 0x1.ea7feaf29d558p-1 + }, + { // Entry 133 + 0x1.1cedf22edfdaee581a28423c374a63e9p-2, + 0x1.ec4e9a59613acp-1 + }, + { // Entry 134 + 0x1.110e9a3d93e5d3b661dc886b7dfc0145p0, + 0x1.eeac200629b5dp-2 + }, + { // Entry 135 + 0x1.ffd3bf06ed2642f1bf646de4dfb90f14p-3, + 0x1.f018068f84bdep-1 + }, + { // Entry 136 + 0x1.106ef026ab7e73cb6256ab29382a05f3p0, + 0x1.f0daf154de72cp-2 + }, + { // Entry 137 + 0x1.ecd91ecf5a9e8000fcf0fe2a481676b9p-3, + 0x1.f13efac234068p-1 + }, + { // Entry 138 + 0x1.d75772546bfc7f3d87511ce008b8b8c3p-3, + 0x1.f28p-1 + }, + { // Entry 139 + 0x1.d5b9693237ace821fe875ccefd4cc418p-3, + 0x1.f297929fe63cap-1 + }, + { // Entry 140 + 0x1.af6c2d4b59de08016fcef2f0148a746dp-3, + 0x1.f4ae875c6bacbp-1 + }, + { // Entry 141 + 0x1.a6be0361001ee8060af2ba4dd0c50aa9p-3, + 0x1.f5218a91baa07p-1 + }, + { // Entry 142 + 0x1.0ee85baa5eb7f3fbe1fccd08bc3b4492p0, + 0x1.f62ec3b97b60cp-2 + }, + { // Entry 143 + 0x1.0e9a941b232133fa63772cc6a091171bp0, + 0x1.f73dcf73dcf70p-2 + }, + { // Entry 144 + 0x1.6c424b343238b7c44b51bd77c7190160p-3, + 0x1.f7ec434d201d1p-1 + }, + { // Entry 145 + 0x1.6a83017dfb54de59e9192470188662cfp-3, + 0x1.f80p-1 + }, + { // Entry 146 + 0x1.90252d2c42cd97ffe9be50f9322516ccp0, + 0x1.fa86cd7cf3513p-8 + }, + { // Entry 147 + 0x1.0d58a360c87c4bbf3d29d0f4a82169bbp0, + 0x1.fb9dc5ca73720p-2 + }, + { // Entry 148 + 0x1.fa6c651bf32d78660fb62ba8468a8cc0p-4, + 0x1.fc1775dbef1abp-1 + }, + { // Entry 149 + 0x1.f7c328cf834cd87de2b639509dda5de1p-4, + 0x1.fc21ef3b98990p-1 + }, + { // Entry 150 + 0x1.f3c8ed27ef9f283f2ac70ec9d6098d19p-4, + 0x1.fc317cd691f52p-1 + }, + { // Entry 151 + 0x1.eea6e96b75ead807baca906e58bb8059p-4, + 0x1.fc4560a02d712p-1 + }, + { // Entry 152 + 0x1.0d1a4cf1b1fd73b9c4a8b5017d645f3bp0, + 0x1.fc76453e6bae8p-2 + }, + { // Entry 153 + 0x1.df3494c7556a03ecf756bf4c5c1d24b7p-4, + 0x1.fc7ffffffffffp-1 + }, + { // Entry 154 + 0x1.0d05103b42c9940e6e6c705d65e17858p0, + 0x1.fccp-2 + }, + { // Entry 155 + 0x1.9c9bb5b4c94c8001b817fedb0eaca0ecp-4, + 0x1.fd678a5a7385ep-1 + }, + { // Entry 156 + 0x1.f4f3987cd68ff86900930a2b99148f4fp-5, + 0x1.ff0b016f7cb8bp-1 + }, + { // Entry 157 + 0x1.b96fe9afa4c148152f48dd9ea74565d6p-5, + 0x1.ff41bf1886212p-1 + }, + { // Entry 158 + 0x1.a38189360e584c2c315c37b74a8de324p-5, + 0x1.ff542d4af33e4p-1 + }, + { // Entry 159 + 0x1.def2feb427f5869945b1e63446daac8ep-6, + 0x1.ffc7fffffffffp-1 + }, + { // Entry 160 + 0x1.911fb919aa13a80003dab66eeb93af47p0, + 0x1.fff7ffep-9 + }, + { // Entry 161 + 0x1.7bb96d689be7ca1030e43bc3fecb819ap-8, + 0x1.fffdccc1d701fp-1 + }, + { // Entry 162 + 0x1.b95e54541a071ffcc559e575e1c45d84p-9, + 0x1.ffff41c283750p-1 + }, + { // Entry 163 + 0x1.9464bc1fea5e476fc7c730847ef2072cp-9, + 0x1.ffff604c81f35p-1 + }, + { // Entry 164 + 0x1.2380ce33ccc5d81a1da42a66818b51f4p-9, + 0x1.ffffad047cd7bp-1 + }, + { // Entry 165 + 0x1.0c1524bceb518c3bb68d2d3c320fc558p0, + 0x1.fffffbbffffffp-2 + }, + { // Entry 166 + 0x1.feffc038c368f967261955172b2d21e2p-12, + 0x1.fffffc03fffffp-1 + }, + { // Entry 167 + 0x1.821d0973b4a0b0016c6b1edfcc06b6ffp0, + 0x1.fffffe3ffffffp-5 + }, + { // Entry 168 + 0x1.9eb04d49b225986a90691720b967589ap-13, + 0x1.ffffff5810533p-1 + }, + { // Entry 169 + 0x1.3988e15f98f3dd3665a7a72d97547617p-13, + 0x1.ffffff9ffffffp-1 + }, + { // Entry 170 + 0x1.bb67aed2e237162c8ad96b5482f602bep-14, + 0x1.ffffffcffffffp-1 + }, + { // Entry 171 + 0x1.6514ba909fbbf3226dfd735dfdf42191p-14, + 0x1.ffffffe0ded2ep-1 + }, + { // Entry 172 + 0x1.911fb519a01327ffffaff63cfe51a6ffp0, + 0x1.fffffff001050p-9 + }, + { // Entry 173 + 0x1.0c152386e1d2f41799a6b289b1db9e6cp0, + 0x1.fffffff1fffffp-2 + }, + { // Entry 174 + 0x1.3988e7c8d4f60f003e750e7129eb31cdp-16, + 0x1.fffffffe7ffffp-1 + }, + { // Entry 175 + 0x1.deeeb2316401cb2cb77ada03ca8dd431p-17, + 0x1.ffffffff1ffffp-1 + }, + { // Entry 176 + 0x1.752ea8a9db933d7df1d6cffb00007a5ap-18, + 0x1.ffffffffddfffp-1 + }, + { // Entry 177 + 0x1.deefb2c32530bab30cf8bbb0a6928f4cp-19, + 0x1.fffffffff1fffp-1 + }, + { // Entry 178 + 0x1.0c152382daad2c41d08ab091f9f43ac6p0, + 0x1.fffffffff3fffp-2 + }, + { // Entry 179 + 0x1.b000000000cd0800000106bc80666823p-19, + 0x1.fffffffff49c0p-1 + }, + { // Entry 180 + 0x1.0c152382d7c177dbb5c7b51c4e876e71p0, + 0x1.fffffffffe1e1p-2 + }, + { // Entry 181 + 0x1.911fb5199813a8003eb04539417cd403p0, + 0x1.fffffffffffd0p-9 + }, + { // Entry 182 + 0x1.0c152382d736ab69cc6c36f54e0a958bp0, + 0x1.fffffffffffeep-2 + }, + { // Entry 183 + 0x1.8000000000000900000000000091ccccp-25, + 0x1.ffffffffffff7p-1 + }, + { // Entry 184 + 0x1.0c152382d73673fcd69b865c0010cf96p0, + 0x1.ffffffffffffap-2 + }, + { // Entry 185 + 0x1.4d5341b00be8a7fed4c5dfdc2eee1ccbp-2, + 0x1.e51cfe3b1ba8bp-1 + }, + { // Entry 186 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.0p-1 + }, + { // Entry 187 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.0p-1 + }, + { // Entry 188 + 0x1.da22859b2d5c27c2d45ce750728c8805p-1, + 0x1.33b645a1cac08p-1 + }, + { // Entry 189 + 0x1.921fb54442d1913030139541b9b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 190 + 0x1.921fb54442d1913030139541b9b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 191 + 0x1.359d26f93b6c32551ad5cf63b6549b57p1, + -0x1.8p-1 + }, + { // Entry 192 + 0x1.0c152382d73666bca69b88f04790b76cp-1, + 0x1.bb67ae8584caap-1 + }, + { // Entry 193 + 0x1.0c152382d73666bca69b88f04790b76cp-1, + 0x1.bb67ae8584caap-1 + }, + { // Entry 194 + 0x1.9e7c9b89260e3bcb44d14a8fdac1fd70p-8, + 0x1.fffd60e94ee39p-1 + }, + { // Entry 195 + 0x1.921fb54442d18469898c851701b839a2p0, + 0x1.0p-82 + }, + { // Entry 196 + 0x1.921fb54442d18461898cc51701b839a2p0, + 0x1.0p-61 + }, + { // Entry 197 + 0x1.921fb54442918469898cc51701b839a1p0, + 0x1.0p-42 + }, + { // Entry 198 + 0x1.921fb14442d184697ee21a6c570d422ap0, + 0x1.0p-22 + }, + { // Entry 199 + 0x1.916ab041f915522c7a634527690e82a5p0, + 0x1.6a09e667f3bcbp-9 + }, + { // Entry 200 + 0x1.916ab041f91552247a614526a90e32a5p0, + 0x1.6a09e667f3bccp-9 + }, + { // Entry 201 + 0x1.916ab041f915521c7a5f4525e90de2a5p0, + 0x1.6a09e667f3bcdp-9 + }, + { // Entry 202 + 0x1.90b5aae52c79b2aa66b36d577b951ab5p0, + 0x1.6a09e667f3bcbp-8 + }, + { // Entry 203 + 0x1.90b5aae52c79b29a66a36d3f7b6d1a70p0, + 0x1.6a09e667f3bccp-8 + }, + { // Entry 204 + 0x1.90b5aae52c79b28a66936d277b451a2ap0, + 0x1.6a09e667f3bcdp-8 + }, + { // Entry 205 + 0x1.8f4b9db1f59a78450728d07fcec82844p0, + 0x1.6a09e667f3bcbp-7 + }, + { // Entry 206 + 0x1.8f4b9db1f59a782506a8cd7fbac79c4cp0, + 0x1.6a09e667f3bccp-7 + }, + { // Entry 207 + 0x1.8f4b9db1f59a78050628ca7fa6c71049p0, + 0x1.6a09e667f3bcdp-7 + }, + { // Entry 208 + 0x1.8c776f7d7291f51392f5b98b4f9ef640p0, + 0x1.6a09e667f3bcbp-6 + }, + { // Entry 209 + 0x1.8c776f7d7291f4d38ef559814e86d71dp0, + 0x1.6a09e667f3bccp-6 + }, + { // Entry 210 + 0x1.8c776f7d7291f4938af4f9774d6eb79fp0, + 0x1.6a09e667f3bcdp-6 + }, + { // Entry 211 + 0x1.86ce747eb5cb996caf44709717fef092p0, + 0x1.6a09e667f3bcbp-5 + }, + { // Entry 212 + 0x1.86ce747eb5cb98ec8f386b94e7027fe1p0, + 0x1.6a09e667f3bccp-5 + }, + { // Entry 213 + 0x1.86ce747eb5cb986c6f2c6692b6060c5ap0, + 0x1.6a09e667f3bcdp-5 + }, + { // Entry 214 + 0x1.7b77852c631c38160912d4bff04e41e2p0, + 0x1.6a09e667f3bcbp-4 + }, + { // Entry 215 + 0x1.7b77852c631c37150790505801c3579cp0, + 0x1.6a09e667f3bccp-4 + }, + { // Entry 216 + 0x1.7b77852c631c3614060dcbf013385671p0, + 0x1.6a09e667f3bcdp-4 + }, + { // Entry 217 + 0x1.64a144217a8f043112de5f55544e1c28p0, + 0x1.6a09e667f3bcbp-3 + }, + { // Entry 218 + 0x1.64a144217a8f0228e1955e7984b3f71bp0, + 0x1.6a09e667f3bccp-3 + }, + { // Entry 219 + 0x1.64a144217a8f0020b04c5d9db5191435p0, + 0x1.6a09e667f3bcdp-3 + }, + { // Entry 220 + 0x1.359d26f93b6c3905e6d6ef5eb0f574adp0, + 0x1.6a09e667f3bcbp-2 + }, + { // Entry 221 + 0x1.359d26f93b6c34bf331d9755a68a7afcp0, + 0x1.6a09e667f3bccp-2 + }, + { // Entry 222 + 0x1.359d26f93b6c30787f643f4c9c1897fdp0, + 0x1.6a09e667f3bcdp-2 + }, + { // Entry 223 + 0x1.91420151498adc61fb274f09e54f1937p0, + 0x1.bb67ae8584ca9p-9 + }, + { // Entry 224 + 0x1.91420151498adc59fb244f08354e0b37p0, + 0x1.bb67ae8584caap-9 + }, + { // Entry 225 + 0x1.91420151498adc51fb214f06854cfd36p0, + 0x1.bb67ae8584cabp-9 + }, + { // Entry 226 + 0x1.90644cb8084a289e0fdaf319a3d72d0bp0, + 0x1.bb67ae8584ca9p-8 + }, + { // Entry 227 + 0x1.90644cb8084a288e0fc2f2e3a3502baap0, + 0x1.bb67ae8584caap-8 + }, + { // Entry 228 + 0x1.90644cb8084a287e0faaf2ada2c92a48p0, + 0x1.bb67ae8584cabp-8 + }, + { // Entry 229 + 0x1.8ea8def973a3419f8672de627481cc16p0, + 0x1.bb67ae8584ca9p-7 + }, + { // Entry 230 + 0x1.8ea8def973a3417f85b2d7a230ff0745p0, + 0x1.bb67ae8584caap-7 + }, + { // Entry 231 + 0x1.8ea8def973a3415f84f2d0e1ed7c4267p0, + 0x1.bb67ae8584cabp-7 + }, + { // Entry 232 + 0x1.8b31df18893670912b1c1be4889884efp0, + 0x1.bb67ae8584ca9p-6 + }, + { // Entry 233 + 0x1.8b31df1889367051251b43c2c30e15fcp0, + 0x1.bb67ae8584caap-6 + }, + { // Entry 234 + 0x1.8b31df18893670111f1a6ba0fd83a699p0, + 0x1.bb67ae8584cabp-6 + }, + { // Entry 235 + 0x1.8442bbd27f036dec946a1fbdbfe07d8fp0, + 0x1.bb67ae8584ca9p-5 + }, + { // Entry 236 + 0x1.8442bbd27f036d6c644f0ed2a561b9aap0, + 0x1.bb67ae8584caap-5 + }, + { // Entry 237 + 0x1.8442bbd27f036cec3433fde78ae2f24bp0, + 0x1.bb67ae8584cabp-5 + }, + { // Entry 238 + 0x1.765b4c48040219666b2fef59fcb0d2d4p0, + 0x1.bb67ae8584ca9p-4 + }, + { // Entry 239 + 0x1.765b4c4804021864e7c768f7896df8efp0, + 0x1.bb67ae8584caap-4 + }, + { // Entry 240 + 0x1.765b4c4804021763645ee295162b02d4p0, + 0x1.bb67ae8584cabp-4 + }, + { // Entry 241 + 0x1.5a417dae31bf8205988e1afc294b93e7p0, + 0x1.bb67ae8584ca9p-3 + }, + { // Entry 242 + 0x1.5a417dae31bf7ff92827db161a0e0411p0, + 0x1.bb67ae8584caap-3 + }, + { // Entry 243 + 0x1.5a417dae31bf7decb7c19b300acf85f9p0, + 0x1.bb67ae8584cabp-3 + }, + { // Entry 244 + 0x1.1f7a90695ca9046f7f711f3c5271788dp0, + 0x1.bb67ae8584ca9p-2 + }, + { // Entry 245 + 0x1.1f7a90695ca8ffff78c910422d09179bp0, + 0x1.bb67ae8584caap-2 + }, + { // Entry 246 + 0x1.1f7a90695ca8fb8f72210148079740eep0, + 0x1.bb67ae8584cabp-2 + }, + { // Entry 247 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.fffffffffffffp-128 + }, + { // Entry 248 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.0p-127 + }, + { // Entry 249 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.0000000000001p-127 + }, + { // Entry 250 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.fffffffffffffp-127 + }, + { // Entry 251 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.0p-126 + }, + { // Entry 252 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.0000000000001p-126 + }, + { // Entry 253 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p-1022 + }, + { // Entry 254 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1022 + }, + { // Entry 255 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 256 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074 + }, + { // Entry 257 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0.0 + }, + { // Entry 258 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074 + }, + { // Entry 259 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 260 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1022 + }, + { // Entry 261 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p-1022 + }, + { // Entry 262 + 0x1.921fb54042d18469898ce50c570d8ef7p0, + 0x1.fffffffffffffp-31 + }, + { // Entry 263 + 0x1.921fb54042d18469898cc50c570d8ef7p0, + 0x1.0p-30 + }, + { // Entry 264 + 0x1.921fb54042d18469898c850c570d8ef7p0, + 0x1.0000000000001p-30 + }, + { // Entry 265 + 0x1.921fb52442d18469898dafc1ac62e44cp0, + 0x1.fffffffffffffp-28 + }, + { // Entry 266 + 0x1.921fb52442d18469898cafc1ac62e44cp0, + 0x1.0p-27 + }, + { // Entry 267 + 0x1.921fb52442d18469898aafc1ac62e44cp0, + 0x1.0000000000001p-27 + }, + { // Entry 268 + 0x1.921fb4c442d18469898b6fc1ac62e44cp0, + 0x1.fffffffffffffp-26 + }, + { // Entry 269 + 0x1.921fb4c442d1846989876fc1ac62e44cp0, + 0x1.0p-25 + }, + { // Entry 270 + 0x1.921fb4c442d18469897f6fc1ac62e44bp0, + 0x1.0000000000001p-25 + }, + { // Entry 271 + 0x1.921bb54442c6d9befe954da08765547fp0, + 0x1.fffffffffffffp-15 + }, + { // Entry 272 + 0x1.921bb54442c6d9bede954d9f87655473p0, + 0x1.0p-14 + }, + { // Entry 273 + 0x1.921bb54442c6d9be9e954d9d8765545bp0, + 0x1.0000000000001p-14 + }, + { // Entry 274 + 0x1.8e1faa994b5731853e59876423331a32p0, + 0x1.fffffffffffffp-7 + }, + { // Entry 275 + 0x1.8e1faa994b5731653d597b63832a59bcp0, + 0x1.0p-6 + }, + { // Entry 276 + 0x1.8e1faa994b5731253b5963624318d8a0p0, + 0x1.0000000000001p-6 + }, + { // Entry 277 + 0x1.8a1f5fe55274a09adac41ad9214797d8p0, + 0x1.fffffffffffffp-6 + }, + { // Entry 278 + 0x1.8a1f5fe55274a05ad2c29a890fc3a730p0, + 0x1.0p-5 + }, + { // Entry 279 + 0x1.8a1f5fe552749fdac2bf99e8ecbbc462p0, + 0x1.0000000000001p-5 + }, + { // Entry 280 + 0x1.821d0965ad9b6ba3be317b82a5a09c93p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 281 + 0x1.821d0965ad9b6b237e01535f8603a3acp0, + 0x1.0p-4 + }, + { // Entry 282 + 0x1.821d0965ad9b6a22fda1031946c9a5cep0, + 0x1.0000000000001p-4 + }, + { // Entry 283 + 0x1.720a392c1d954953c0f01dccd7296f92p0, + 0x1.fffffffffffffp-4 + }, + { // Entry 284 + 0x1.720a392c1d954851badbd6cd2d8e792cp0, + 0x1.0p-3 + }, + { // Entry 285 + 0x1.720a392c1d95464daeb348cdda582a13p0, + 0x1.0000000000001p-3 + }, + { // Entry 286 + 0x1.51700e0c14b25200dff9b6fda0f736e3p0, + 0x1.fffffffffffffp-3 + }, + { // Entry 287 + 0x1.51700e0c14b24ff015655c5ec5a7aaa3p0, + 0x1.0p-2 + }, + { // Entry 288 + 0x1.51700e0c14b24bce803ca7210f054413p0, + 0x1.0000000000001p-2 + }, + { // Entry 289 + 0x1.0c152382d7365ce4c584921c1d87f0edp0, + 0x1.fffffffffffffp-2 + }, + { // Entry 290 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.0p-1 + }, + { // Entry 291 + 0x1.0c152382d7364f09881065f5c83b9e1ap0, + 0x1.0000000000001p-1 + }, + { // Entry 292 + 0x1.00000000000000aaaaaaaaaaaaabddddp-26, + 0x1.fffffffffffffp-1 + }, + { // Entry 293 + 0.0, + 0x1.0p0 + }, + { // Entry 294 + 0x1.921fb54442d1be716ce093b94fb839a2p-1, + 0x1.6a09e667f3bcap-1 + }, + { // Entry 295 + 0x1.921fb54442d1a7d0ce7a147d853839a2p-1, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 296 + 0x1.921fb54442d1913030139541b9b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 297 + 0x1.921fb54442d17a8f91ad1605ed3839a2p-1, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 298 + 0x1.921fb54442d163eef34696ca1fb839a2p-1, + 0x1.6a09e667f3bcep-1 + }, + { // Entry 299 + 0x1.0c152382d736a6bca69b88f03d8186d0p-1, + 0x1.bb67ae8584ca8p-1 + }, + { // Entry 300 + 0x1.0c152382d73686bca69b88f0444486cdp-1, + 0x1.bb67ae8584ca9p-1 + }, + { // Entry 301 + 0x1.0c152382d73666bca69b88f04790b76cp-1, + 0x1.bb67ae8584caap-1 + }, + { // Entry 302 + 0x1.0c152382d73646bca69b88f0476618afp-1, + 0x1.bb67ae8584cabp-1 + }, + { // Entry 303 + 0x1.0c152382d73626bca69b88f043c4aa95p-1, + 0x1.bb67ae8584cacp-1 + }, + { // Entry 304 + 0.0, + 0x1.0p0 + }, + { // Entry 305 + 0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p0 + }, + { // Entry 306 + 0x1.00000000000000aaaaaaaaaaaaabddddp-26, + 0x1.fffffffffffffp-1 + }, + { // Entry 307 + 0x1.921fb52442d18469898cafc1ac62e44cp1, + -0x1.fffffffffffffp-1 + }, + { // Entry 308 + 0x1.55bcf3c4a46940e467961a6926261188p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 309 + 0x1.3cb0785319b734306fa73e7cb82eb540p1, + -0x1.921fb54442d18p-1 + }, + { // Entry 310 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p-1022 + }, + { // Entry 311 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p-1022 + }, + { // Entry 312 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1022 + }, + { // Entry 313 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1022 + }, + { // Entry 314 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 315 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 316 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 317 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 318 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1073 + }, + { // Entry 319 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1073 + }, + { // Entry 320 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074 + }, + { // Entry 321 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074 + }, + { // Entry 322 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0.0 + }, + { // Entry 323 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0.0 + } +}; diff --git a/tests/math_data/acosf_intel_data.h b/tests/math_data/acosf_intel_data.h new file mode 100644 index 000000000..1dca9a6a2 --- /dev/null +++ b/tests/math_data/acosf_intel_data.h @@ -0,0 +1,982 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_acosf_intel_data[] = { + { // Entry 0 + 0x1.0c257a7050fc3cea24f3029a2ad2e815p1, + -0x1.003898p-1 + }, + { // Entry 1 + 0x1.0c5f16794284a814e57dd1aeaff2935dp1, + -0x1.01p-1 + }, + { // Entry 2 + 0x1.0c8b0a779009c3775eee358be153ba65p1, + -0x1.0198p-1 + }, + { // Entry 3 + 0x1.0c9c667630ac1465b612be91f8800305p1, + -0x1.01d4p-1 + }, + { // Entry 4 + 0x1.0ca922436a0ff902c6cea7bee39f2164p1, + -0x1.02p-1 + }, + { // Entry 5 + 0x1.0cb2657e0dce844aad10d5211ad1439cp1, + -0x1.0220p-1 + }, + { // Entry 6 + 0x1.0df8b9ffd527aa217e668eed5b98130dp1, + -0x1.0684p-1 + }, + { // Entry 7 + 0x1.0e677d6ca16a0aa3a9d0e12324b56b7fp1, + -0x1.08p-1 + }, + { // Entry 8 + 0x1.b3374800692e62ccb28232cf124403efp0, + -0x1.08p-3 + }, + { // Entry 9 + 0x1.0f93197d31106d9f9dba9ce88846e520p1, + -0x1.0cp-1 + }, + { // Entry 10 + 0x1.1123e56d1de1347426f6fa3a25b95c8cp1, + -0x1.1150dap-1 + }, + { // Entry 11 + 0x1.112abd8e560b61295f76c37854cc404dp1, + -0x1.1168p-1 + }, + { // Entry 12 + 0x1.e678d3006dfeea8466508e9c6fee67a4p0, + -0x1.4b5228p-2 + }, + { // Entry 13 + 0x1.979fd100670d576688cfaa662e894818p0, + -0x1.60p-6 + }, + { // Entry 14 + 0x1.921fb60042d08469899dab0c12058f59p0, + -0x1.77fffep-25 + }, + { // Entry 15 + 0x1.07828bffbd26a9f5425b3c7691d1145fp1, + -0x1.e0p-2 + }, + { // Entry 16 + 0x1.821faef0618143c8461491fc02984220p1, + -0x1.fc0152p-1 + }, + { // Entry 17 + 0x1.854911067d00b04f895724d24d2830a4p1, + -0x1.fd6d40p-1 + }, + { // Entry 18 + 0x1.892b29068f5ed60cbc8141ceb1ff1701p1, + -0x1.febf58p-1 + }, + { // Entry 19 + 0x1.892d7afb015ab37d6eccc7ff7772b447p1, + -0x1.febffep-1 + }, + { // Entry 20 + 0x1.922fb500357c0d0df814593ed0d8a6f6p0, + -0x1.fff77ep-13 + }, + { // Entry 21 + 0x1.d2cf54ff929e2d5be1416c50d9d79662p0, + -0x1.ffffc6p-3 + }, + { // Entry 22 + 0x1.516fecff6adfa313f251aed1e1a22f51p0, + 0x1.000080p-2 + }, + { // Entry 23 + 0x1.720a22ff97b83535612cba12029c626cp0, + 0x1.0000b0p-3 + }, + { // Entry 24 + 0x1.920fb5000026b79d1a03feae60b3ad18p0, + 0x1.000444p-12 + }, + { // Entry 25 + 0x1.0c0296fe93cb8e2df049d07fc1f71573p0, + 0x1.002020p-1 + }, + { // Entry 26 + 0x1.0becac0001ed95caabc8aaf7ac71baadp0, + 0x1.004614p-1 + }, + { // Entry 27 + 0x1.821444fffa502058fee64d29443f6673p0, + 0x1.008cp-4 + }, + { // Entry 28 + 0x1.921fa50002d18466bc2fbaf2dfbfe5c0p0, + 0x1.0444p-20 + }, + { // Entry 29 + 0x1.89fc5200006860d664f1779f6433bb6bp0, + 0x1.04612ep-5 + }, + { // Entry 30 + 0x1.066d06ff24cb086507a3136cbe17f53bp0, + 0x1.09bcp-1 + }, + { // Entry 31 + 0x1.004b2400184a6783cce37c77124fbad7p0, + 0x1.1424p-1 + }, + { // Entry 32 + 0x1.8dce2b0000002047ed2091cba08e645dp0, + 0x1.145f36p-6 + }, + { // Entry 33 + 0x1.ff4e43161f8e1568e3cef5ea955e27aep-1, + 0x1.1538p-1 + }, + { // Entry 34 + 0x1.fbfd9c80230bbece7389c23697ccf2fbp-1, + 0x1.18p-1 + }, + { // Entry 35 + 0x1.fb5652006b924c37b98c87daeb1d82ecp-1, + 0x1.188cp-1 + }, + { // Entry 36 + 0x1.fb42a430e00edbd5da24f337e1d23079p-1, + 0x1.189c76p-1 + }, + { // Entry 37 + 0x1.fa6f4f234b75986db2db5b5dc5c48cecp-1, + 0x1.194d22p-1 + }, + { // Entry 38 + 0x1.f77a1830c13bdad867d6c4b90616f090p-1, + 0x1.1bc49ep-1 + }, + { // Entry 39 + 0x1.f573250e683e3fad23db66c319161854p-1, + 0x1.1d74p-1 + }, + { // Entry 40 + 0x1.f265000c4bfabe772e7612fd97fed272p-1, + 0x1.1ffcp-1 + }, + { // Entry 41 + 0x1.f2602bf7f44f7de8784eb95d1beba89bp-1, + 0x1.1ffffep-1 + }, + { // Entry 42 + 0x1.f25de4fe24f7cf27cd316d2820678f2fp-1, + 0x1.2001e0p-1 + }, + { // Entry 43 + 0x1.f196d900045457fd3b54c3489c7c98bep-1, + 0x1.20a65cp-1 + }, + { // Entry 44 + 0x1.ecaf3b0005b758518583cf278db2ae82p-1, + 0x1.24b002p-1 + }, + { // Entry 45 + 0x1.6d695dffff9b6175c1d6960d5402e86cp0, + 0x1.24b148p-3 + }, + { // Entry 46 + 0x1.e9e3edfe52297b7e3bda43edcec28af5p-1, + 0x1.26f9cap-1 + }, + { // Entry 47 + 0x1.e8e04cff129c3819b1047ff1f1783828p-1, + 0x1.27cddap-1 + }, + { // Entry 48 + 0x1.e859c30003395e0da55cc100bf66122ep-1, + 0x1.283ba0p-1 + }, + { // Entry 49 + 0x1.e0c1d61d78cd94b9d9e6ec7562ec236fp-1, + 0x1.2e64bep-1 + }, + { // Entry 50 + 0x1.ddff723813e38a441c78c70496a65788p-1, + 0x1.309da4p-1 + }, + { // Entry 51 + 0x1.886e55001396e3f47532d8a787794f14p0, + 0x1.361910p-5 + }, + { // Entry 52 + 0x1.d4121631cf7cf3b517f471b456bebde0p-1, + 0x1.388980p-1 + }, + { // Entry 53 + 0x1.ca9495fb7b2ac583f7b612b659bb4d75p-1, + 0x1.3ffffep-1 + }, + { // Entry 54 + 0x1.c4957352aa82e9e602a75716c087d355p-1, + 0x1.44a8b6p-1 + }, + { // Entry 55 + 0x1.baa309030f555d66a64a3c50d49ca0e4p-1, + 0x1.4c49ecp-1 + }, + { // Entry 56 + 0x1.aea132fb898a11ba65de612cf32c7f6cp-1, + 0x1.5554dap-1 + }, + { // Entry 57 + 0x1.668f1f001255d1b8844c2bf7d8b804dep0, + 0x1.5ad6b0p-3 + }, + { // Entry 58 + 0x1.a633baf67d350b07cd61c177ab058a1ep-1, + 0x1.5b9108p-1 + }, + { // Entry 59 + 0x1.a37262f499382b280c29295c80043ef3p-1, + 0x1.5d95aap-1 + }, + { // Entry 60 + 0x1.a1945af39258c47400a7049b0fa1ced0p-1, + 0x1.5ef254p-1 + }, + { // Entry 61 + 0x1.a022c6f49c36ad7986e19f087aa933d9p-1, + 0x1.5fff12p-1 + }, + { // Entry 62 + 0x1.37fab2ffff9477b036f349972197c2bep0, + 0x1.612c3ap-2 + }, + { // Entry 63 + 0x1.65b292ffffcc939788e4b6d487fe8cdfp0, + 0x1.61a112p-3 + }, + { // Entry 64 + 0x1.9b8ff4fe183afaa47464c07e624d4445p-1, + 0x1.634db4p-1 + }, + { // Entry 65 + 0x1.96dc1701b6e0eb4ea1fcf021a2c3d38ap-1, + 0x1.66acaap-1 + }, + { // Entry 66 + 0x1.8e32af0006512524b5cd8aeb6e63c791p-1, + 0x1.6ccdd4p-1 + }, + { // Entry 67 + 0x1.804bbd016ca13c18200362deaa59fed2p-1, + 0x1.766c48p-1 + }, + { // Entry 68 + 0x1.4fd532ffffd0b23ae975cddd912591b4p-1, + 0x1.95c09ap-1 + }, + { // Entry 69 + 0x1.788c1b00007236e7c664a0714def797bp0, + 0x1.988b72p-4 + }, + { // Entry 70 + 0x1.426b63ffff75484d98afbacb71fd1a5ap-1, + 0x1.9dcaf8p-1 + }, + { // Entry 71 + 0x1.39de4eff95f8ac0807aca0b9cdd04a1dp-1, + 0x1.a2c556p-1 + }, + { // Entry 72 + 0x1.38f16effff9e4e67514d5d63a0a6557dp-1, + 0x1.a34d72p-1 + }, + { // Entry 73 + 0x1.1a76cb056f41ba8d9cd68713a9c2b0a3p-1, + 0x1.b40a52p-1 + }, + { // Entry 74 + 0x1.1ee3e8000050338f0fc9efe7ffb60bdcp0, + 0x1.bd8696p-2 + }, + { // Entry 75 + 0x1.02bedad86f18596f026ada4944e9c33dp-1, + 0x1.bfffe2p-1 + }, + { // Entry 76 + 0x1.02be9ce0b87cd1e5d09da2e0f0423bfap-1, + 0x1.c0p-1 + }, + { // Entry 77 + 0x1.ff8307c1ec4e07784126d1b4edd06823p-2, + 0x1.c17072p-1 + }, + { // Entry 78 + 0x1.fe02b6529120aa515e1832349a662dfep-2, + 0x1.c1cc5ep-1 + }, + { // Entry 79 + 0x1.759edd0162a92b1a62937275448bb090p0, + 0x1.c71c72p-4 + }, + { // Entry 80 + 0x1.e3689a62e92c874e13f58948bcfc3f8ep-2, + 0x1.c7fffep-1 + }, + { // Entry 81 + 0x1.5840c3ffff9a16c02ea4a0bc7608d63cp0, + 0x1.cb08aep-3 + }, + { // Entry 82 + 0x1.75490d00012add014fd20781cfa59149p0, + 0x1.cc70d8p-4 + }, + { // Entry 83 + 0x1.c2d789028d1b6bc4445359a77b66b22cp-2, + 0x1.cf2c3cp-1 + }, + { // Entry 84 + 0x1.befee4fdeaa4df1ce9fca3988ffc256fp-2, + 0x1.cffd38p-1 + }, + { // Entry 85 + 0x1.15851afc2ea1823412c4566b9741155ap0, + 0x1.def7b0p-2 + }, + { // Entry 86 + 0x1.54cf89ffff9b35c2d6f0eec1cdddd7fcp0, + 0x1.e5d44cp-3 + }, + { // Entry 87 + 0x1.736f86ffff8f1c8e0754f45ce46de0f0p0, + 0x1.e9d60ep-4 + }, + { // Entry 88 + 0x1.11bd758662c5b5d2186c1d298cf7f0b2p0, + 0x1.ec4746p-2 + }, + { // Entry 89 + 0x1.e0f8c30892663dadc7f43b5a93088423p-3, + 0x1.f1f1fep-1 + }, + { // Entry 90 + 0x1.e007dfb3698110ebd1dc3d45233e2c73p-3, + 0x1.f1fffep-1 + }, + { // Entry 91 + 0x1.d1fa8b029886129544d943c684a8ceb5p-3, + 0x1.f2cddcp-1 + }, + { // Entry 92 + 0x1.b4df86024b58e8e96534a6e26d324fa2p-3, + 0x1.f46522p-1 + }, + { // Entry 93 + 0x1.39d7acf9d6e48f39ad2962a89d3a8b86p-3, + 0x1.f9fffep-1 + }, + { // Entry 94 + 0x1.0d6dbe7f2e341b18c74019a99120f59cp0, + 0x1.fb5472p-2 + }, + { // Entry 95 + 0x1.0c5eb8f7ab8c9e685b9d22e45d04f3a2p0, + 0x1.ff0104p-2 + }, + { // Entry 96 + 0x1.0c55c92a56134b333fbf4af2c68a3854p0, + 0x1.ff1ffep-2 + }, + { // Entry 97 + 0x1.0c4e426ce9414f08c194150bdcbcf176p0, + 0x1.ff3a14p-2 + }, + { // Entry 98 + 0x1.8220dcff801a88159a8ca341c9eec793p0, + 0x1.ff85cap-5 + }, + { // Entry 99 + 0x1.0c17983d1def4e82b953bdfc7dff0dfbp0, + 0x1.fff77ep-2 + }, + { // Entry 100 + 0x1.0c159a71ec12c92e12b2592f98c68b03p0, + 0x1.fffe64p-2 + }, + { // Entry 101 + 0x1.800009000091ccd901171c6034e7b4d3p-9, + 0x1.ffff70p-1 + }, + { // Entry 102 + 0x1.901fb3feeb35c355e40ef2b73166eccep0, + 0x1.fffff0p-8 + }, + { // Entry 103 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.p-1 + }, + { // Entry 104 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.p-1 + }, + { // Entry 105 + 0x1.da2285254e79544ff70a5c48f856e1e2p-1, + 0x1.33b646p-1 + }, + { // Entry 106 + 0x1.921fb5d7457f84698994d9949c77055ep-1, + 0x1.6a09e6p-1 + }, + { // Entry 107 + 0x1.921fb5d7457f84698994d9949c77055ep-1, + 0x1.6a09e6p-1 + }, + { // Entry 108 + 0x1.359d26f93b6c32551ad5cf63b6549b57p1, + -0x1.80p-1 + }, + { // Entry 109 + 0x1.0c15248de0cb2e1ef42023dc8eb80020p-1, + 0x1.bb67aep-1 + }, + { // Entry 110 + 0x1.0c15248de0cb2e1ef42023dc8eb80020p-1, + 0x1.bb67aep-1 + }, + { // Entry 111 + 0x1.9ec4a1ffeb4da0d834c0a89f94a8e3d5p-8, + 0x1.fffd60p-1 + }, + { // Entry 112 + 0x1.921fb54442d18469898c851701b839a2p0, + 0x1.p-82 + }, + { // Entry 113 + 0x1.921fb54442d18461898cc51701b839a2p0, + 0x1.p-61 + }, + { // Entry 114 + 0x1.921fb54442918469898cc51701b839a1p0, + 0x1.p-42 + }, + { // Entry 115 + 0x1.921fb14442d184697ee21a6c570d422ap0, + 0x1.p-22 + }, + { // Entry 116 + 0x1.916ab0432d0f7d830e55bf5f9d23ea06p0, + 0x1.6a09e4p-9 + }, + { // Entry 117 + 0x1.916ab0422d0f3d82f6d4f8e3e0b0161ap0, + 0x1.6a09e6p-9 + }, + { // Entry 118 + 0x1.916ab0412d0efd82de9f2ced603175a1p0, + 0x1.6a09e8p-9 + }, + { // Entry 119 + 0x1.90b5aae7946fd751bb3f0dd6bd9c3a5fp0, + 0x1.6a09e4p-8 + }, + { // Entry 120 + 0x1.90b5aae5946dd74ebf3432e311714a32p0, + 0x1.6a09e6p-8 + }, + { // Entry 121 + 0x1.90b5aae3946bd74bbd811f5ec41a8d1cp0, + 0x1.6a09e8p-8 + }, + { // Entry 122 + 0x1.8f4b9db6c59531b64c9d1cca72a60098p0, + 0x1.6a09e4p-7 + }, + { // Entry 123 + 0x1.8f4b9db2c585315669ef5257a125885ep0, + 0x1.6a09e6p-7 + }, + { // Entry 124 + 0x1.8f4b9daec57530f659fe2c00c0828556p0, + 0x1.6a09e8p-7 + }, + { // Entry 125 + 0x1.8c776f8712faf332f0569d2e2b1c8af2p0, + 0x1.6a09e4p-6 + }, + { // Entry 126 + 0x1.8c776f7f127ae732aee9a38c00683c31p0, + 0x1.6a09e6p-6 + }, + { // Entry 127 + 0x1.8c776f7711fadb31032ed772064bfaa2p0, + 0x1.6a09e8p-6 + }, + { // Entry 128 + 0x1.86ce7491fa3b3515774393cc5a2ac8d1p0, + 0x1.6a09e4p-5 + }, + { // Entry 129 + 0x1.86ce7481f639b47d2b513503952d36b3p0, + 0x1.6a09e6p-5 + }, + { // Entry 130 + 0x1.86ce7471f23833d9868e1a1ce3223d95p0, + 0x1.6a09e8p-5 + }, + { // Entry 131 + 0x1.7b77855309115e60277dd0adb2d211ecp0, + 0x1.6a09e4p-4 + }, + { // Entry 132 + 0x1.7b778532e8e10e138c0530964bec6a45p0, + 0x1.6a09e6p-4 + }, + { // Entry 133 + 0x1.7b778512c8b0bd6b5bde9418a60c5362p0, + 0x1.6a09e8p-4 + }, + { // Entry 134 + 0x1.64a1446fb469cb3e8129d8af56970d03p0, + 0x1.6a09e4p-3 + }, + { // Entry 135 + 0x1.64a1442eae40ad38e802ab2319096ca4p0, + 0x1.6a09e6p-3 + }, + { // Entry 136 + 0x1.64a143eda8178c3be9e58f8805a8cd99p0, + 0x1.6a09e8p-3 + }, + { // Entry 137 + 0x1.359d279dda2c8084c57122774bedccd7p0, + 0x1.6a09e4p-2 + }, + { // Entry 138 + 0x1.359d271503b568f326aba2ee1163aa56p0, + 0x1.6a09e6p-2 + }, + { // Entry 139 + 0x1.359d268c2d3e35bc4ee9def9a883b8e9p0, + 0x1.6a09e8p-2 + }, + { // Entry 140 + 0x1.914201528c4dbab3248745b01274284cp0, + 0x1.bb67acp-9 + }, + { // Entry 141 + 0x1.914201518c4d5ab2ef2fcf50924bc48fp0, + 0x1.bb67aep-9 + }, + { // Entry 142 + 0x1.914201508c4cfab2b8faa420a6e84290p0, + 0x1.bb67b0p-9 + }, + { // Entry 143 + 0x1.90644cba8dd2bb7dbce6a8d00d628b45p0, + 0x1.bb67acp-8 + }, + { // Entry 144 + 0x1.90644cb88dcfbb77021b3572c356f712p0, + 0x1.bb67aep-8 + }, + { // Entry 145 + 0x1.90644cb68dccbb704062042fba36ba7fp0, + 0x1.bb67b0p-8 + }, + { // Entry 146 + 0x1.8ea8defe7ecb1a0937cbd2748d94a22cp0, + 0x1.bb67acp-7 + }, + { // Entry 147 + 0x1.8ea8defa7eb31931598919ba7b226aebp0, + 0x1.bb67aep-7 + }, + { // Entry 148 + 0x1.8ea8def67e9b185943d5855cab6b8f1ep0, + 0x1.bb67b0p-7 + }, + { // Entry 149 + 0x1.8b31df22a03bceab93822903a64e5616p0, + 0x1.bb67acp-6 + }, + { // Entry 150 + 0x1.8b31df1a9f7bb3a8ac8516ff422b02efp0, + 0x1.bb67aep-6 + }, + { // Entry 151 + 0x1.8b31df129ebb98a409a384915d8a1e46p0, + 0x1.bb67b0p-6 + }, + { // Entry 152 + 0x1.8442bbe6b2be94bbdc8bc8ce90846342p0, + 0x1.bb67acp-5 + }, + { // Entry 153 + 0x1.8442bbd6acbb32a90fcd44a67b9dbfa7p0, + 0x1.bb67aep-5 + }, + { // Entry 154 + 0x1.8442bbc6a6b7d088582c015aa929c60bp0, + 0x1.bb67b0p-5 + }, + { // Entry 155 + 0x1.765b4c70995cb6fd1a5785f37349503ep0, + 0x1.bb67acp-4 + }, + { // Entry 156 + 0x1.765b4c5068efa686a263561080ef83d3p0, + 0x1.bb67aep-4 + }, + { // Entry 157 + 0x1.765b4c303882959f56467ba4dca02931p0, + 0x1.bb67b0p-4 + }, + { // Entry 158 + 0x1.5a417e00d83327c69d7b1be72667fb7ap0, + 0x1.bb67acp-3 + }, + { // Entry 159 + 0x1.5a417dbf4a26629ee6bfd4a919213520p0, + 0x1.bb67aep-3 + }, + { // Entry 160 + 0x1.5a417d7dbc1999be28c737a49a8b1a97p0, + 0x1.bb67b0p-3 + }, + { // Entry 161 + 0x1.1f7a911c6589a2670979ee4bbce207acp0, + 0x1.bb67acp-2 + }, + { // Entry 162 + 0x1.1f7a908e64b4bd515e30fcb0d207f55cp0, + 0x1.bb67aep-2 + }, + { // Entry 163 + 0x1.1f7a900063dfb264c88f3cfb5460a189p0, + 0x1.bb67b0p-2 + }, + { // Entry 164 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.fffff8p-128 + }, + { // Entry 165 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.p-127 + }, + { // Entry 166 + 0x1.921fb54442d18469898cc51701b839a0p0, + 0x1.000004p-127 + }, + { // Entry 167 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.fffffcp-127 + }, + { // Entry 168 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.p-126 + }, + { // Entry 169 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.000002p-126 + }, + { // Entry 170 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.000002p-126 + }, + { // Entry 171 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.p-126 + }, + { // Entry 172 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.fffffcp-127 + }, + { // Entry 173 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149 + }, + { // Entry 174 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0.0 + }, + { // Entry 175 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149 + }, + { // Entry 176 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.fffffcp-127 + }, + { // Entry 177 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.p-126 + }, + { // Entry 178 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.000002p-126 + }, + { // Entry 179 + 0x1.921fb54042d18869898cc50c570daef7p0, + 0x1.fffffep-31 + }, + { // Entry 180 + 0x1.921fb54042d18469898cc50c570d8ef7p0, + 0x1.p-30 + }, + { // Entry 181 + 0x1.921fb54042d17c69898cc50c570d4ef7p0, + 0x1.000002p-30 + }, + { // Entry 182 + 0x1.921fb52442d1a469898cafc1aca2e44cp0, + 0x1.fffffep-28 + }, + { // Entry 183 + 0x1.921fb52442d18469898cafc1ac62e44cp0, + 0x1.p-27 + }, + { // Entry 184 + 0x1.921fb52442d14469898cafc1abe2e44bp0, + 0x1.000002p-27 + }, + { // Entry 185 + 0x1.921fb4c442d2046989876fc1bc62e43cp0, + 0x1.fffffep-26 + }, + { // Entry 186 + 0x1.921fb4c442d1846989876fc1ac62e44cp0, + 0x1.p-25 + }, + { // Entry 187 + 0x1.921fb4c442d0846989876fc18c62e40cp0, + 0x1.000002p-25 + }, + { // Entry 188 + 0x1.921bb54446c6d9befe954d8107655c32p0, + 0x1.fffffep-15 + }, + { // Entry 189 + 0x1.921bb54442c6d9bede954d9f87655473p0, + 0x1.p-14 + }, + { // Entry 190 + 0x1.921bb5443ac6d9be9e954d1c8764f2f6p0, + 0x1.000002p-14 + }, + { // Entry 191 + 0x1.8e1faa9d4b7732e531579341ed5c2713p0, + 0x1.fffffep-7 + }, + { // Entry 192 + 0x1.8e1faa994b5731653d597b63832a59bcp0, + 0x1.p-6 + }, + { // Entry 193 + 0x1.8e1faa914b172e64954b49fe82828e16p0, + 0x1.000002p-6 + }, + { // Entry 194 + 0x1.8a1f5fed5374d063d492faf2e989f5e8p0, + 0x1.fffffep-6 + }, + { // Entry 195 + 0x1.8a1f5fe55274a05ad2c29a890fc3a730p0, + 0x1.p-5 + }, + { // Entry 196 + 0x1.8a1f5fd550744042cce1237e8c427b18p0, + 0x1.000002p-5 + }, + { // Entry 197 + 0x1.821d0975b5a1701fd5e5e3dfab724e1dp0, + 0x1.fffffep-5 + }, + { // Entry 198 + 0x1.821d0965ad9b6b237e01535f8603a3acp0, + 0x1.p-4 + }, + { // Entry 199 + 0x1.821d09459d8f60fa85ddb8a001b22154p0, + 0x1.000002p-4 + }, + { // Entry 200 + 0x1.720a394c5e57d0f0286bae477c8095f1p0, + 0x1.fffffep-4 + }, + { // Entry 201 + 0x1.720a392c1d954851badbd6cd2d8e792cp0, + 0x1.p-3 + }, + { // Entry 202 + 0x1.720a38eb9c10358bb1e5dd06059098b3p0, + 0x1.000002p-3 + }, + { // Entry 203 + 0x1.51700e4e2e04d90fe58757f33d17c63ep0, + 0x1.fffffep-3 + }, + { // Entry 204 + 0x1.51700e0c14b24ff015655c5ec5a7aaa3p0, + 0x1.p-2 + }, + { // Entry 205 + 0x1.51700d87e20d30783166a45543964e85p0, + 0x1.000002p-2 + }, + { // Entry 206 + 0x1.0c152416a4706c25c04942fa8bb98d98p0, + 0x1.fffffep-2 + }, + { // Entry 207 + 0x1.0c152382d73658465bb32e0f567ad116p0, + 0x1.p-1 + }, + { // Entry 208 + 0x1.0c15225b3cc19cba57f7f9cdea23cba7p0, + 0x1.000002p-1 + }, + { // Entry 209 + 0x1.6a09e6861f3aadd17681ee6db029b4c0p-12, + 0x1.fffffep-1 + }, + { // Entry 210 + 0.0, + 0x1.p0 + }, + { // Entry 211 + 0x1.921fbb7f6d0f8469b1df49c77c9d4d49p-1, + 0x1.6a09e2p-1 + }, + { // Entry 212 + 0x1.921fb8ab59498469901db80ff0ba49ecp-1, + 0x1.6a09e4p-1 + }, + { // Entry 213 + 0x1.921fb5d7457f84698994d9949c77055ep-1, + 0x1.6a09e6p-1 + }, + { // Entry 214 + 0x1.921fb30331b1846987a41075fbfb2392p-1, + 0x1.6a09e8p-1 + }, + { // Entry 215 + 0x1.921fb02f1ddf846973aabe148b701d17p-1, + 0x1.6a09eap-1 + }, + { // Entry 216 + 0x1.0c152c8de0a83d8e4e5b1362f47a87c2p-1, + 0x1.bb67aap-1 + }, + { // Entry 217 + 0x1.0c15288de0c0a374f676f4425482c282p-1, + 0x1.bb67acp-1 + }, + { // Entry 218 + 0x1.0c15248de0cb2e1ef42023dc8eb80020p-1, + 0x1.bb67aep-1 + }, + { // Entry 219 + 0x1.0c15208de0c7dd8ba756ab16a2362af4p-1, + 0x1.bb67b0p-1 + }, + { // Entry 220 + 0x1.0c151c8de0b6b1ba701a8724928ef46ap-1, + 0x1.bb67b2p-1 + }, + { // Entry 221 + 0.0, + 0x1.p0 + }, + { // Entry 222 + 0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p0 + }, + { // Entry 223 + 0x1.6a09e6861f3aadd17681ee6db029b4c0p-12, + 0x1.fffffep-1 + }, + { // Entry 224 + 0x1.921464f50ea08a941b0111078e4ab854p1, + -0x1.fffffep-1 + }, + { // Entry 225 + 0x1.55bcf295580042e4947664b4c398a672p-1, + 0x1.921fb6p-1 + }, + { // Entry 226 + 0x1.3cb0789eecd173b0646f2be9d0d21005p1, + -0x1.921fb6p-1 + }, + { // Entry 227 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.000002p-126 + }, + { // Entry 228 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.000002p-126 + }, + { // Entry 229 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.p-126 + }, + { // Entry 230 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.p-126 + }, + { // Entry 231 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.fffffcp-127 + }, + { // Entry 232 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.fffffcp-127 + }, + { // Entry 233 + 0x1.921fb54442d18469898cc51701b8399ep0, + 0x1.fffff8p-127 + }, + { // Entry 234 + 0x1.921fb54442d18469898cc51701b839a6p0, + -0x1.fffff8p-127 + }, + { // Entry 235 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-148 + }, + { // Entry 236 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-148 + }, + { // Entry 237 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149 + }, + { // Entry 238 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149 + }, + { // Entry 239 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0.0f + }, + { // Entry 240 + 0x1.921fb54442d18469898cc51701b839a2p0, + -0.0f + } +}; diff --git a/tests/math_data/acosh_intel_data.h b/tests/math_data/acosh_intel_data.h new file mode 100644 index 000000000..69552f8ac --- /dev/null +++ b/tests/math_data/acosh_intel_data.h @@ -0,0 +1,958 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_acosh_intel_data[] = { + { // Entry 0 + 0x1.52417db067f37fff78da0e59c786a63ep8, + 0x1.0000000000001p487 + }, + { // Entry 1 + 0x1.132def2b505ebfb768161d82be1f888dp9, + 0x1.0000000000001p793 + }, + { // Entry 2 + 0x1.0979b1dbc2e56800030ba9b06cf83f10p9, + 0x1.000000000001fp765 + }, + { // Entry 3 + 0x1.2c2fc595456a2807214d0087f4432d47p-23, + 0x1.000000000002cp0 + }, + { // Entry 4 + 0x1.7fffffffffff70000000000091ccccccp-23, + 0x1.0000000000048p0 + }, + { // Entry 5 + 0x1.fffffffffffaaaaaaaaaaad111111111p-22, + 0x1.00000000002p0 + }, + { // Entry 6 + 0x1.bb67ae854d5db16a878f9eb2adb06a0bp-16, + 0x1.000000018p0 + }, + { // Entry 7 + 0x1.69dca2563fe028021e9094ed47ed04ecp-15, + 0x1.00000003ff0p0 + }, + { // Entry 8 + 0x1.30fc1934f09c97ff42ffecad467897fdp6, + 0x1.000000cp109 + }, + { // Entry 9 + 0x1.6c275e69b28b4441b5463b5476d53758p-10, + 0x1.0000103p0 + }, + { // Entry 10 + 0x1.b1e5d906d5ed79cefcae2668c5f67c8ap-10, + 0x1.000016fb5b0c4p0 + }, + { // Entry 11 + 0x1.deee9cb901ed887353ce5684cd29c83ep-10, + 0x1.00001c0p0 + }, + { // Entry 12 + 0x1.deee5b3e7d4c333cbcba1f16d8473a1ep-8, + 0x1.0001cp0 + }, + { // Entry 13 + 0x1.ffffaaaad110fa35b2e863129439b017p-8, + 0x1.00020p0 + }, + { // Entry 14 + 0x1.338a7b0a9bbf4515d91fc94b631d949bp-7, + 0x1.0002e2ec3f80cp0 + }, + { // Entry 15 + 0x1.398892de8eab46dddf895e6b2df71e14p-7, + 0x1.00030p0 + }, + { // Entry 16 + 0x1.bb66d0d2d8d230fe173d0d972c5321a0p-7, + 0x1.00060p0 + }, + { // Entry 17 + 0x1.ffdea9ecfe4a23fd37592420dd1e4aecp-7, + 0x1.0007ff0p0 + }, + { // Entry 18 + 0x1.6a0803b6df85a5a6a28a7d24344fd7bcp-6, + 0x1.001p0 + }, + { // Entry 19 + 0x1.13b744b6fc24081df6488fc0a0521447p-5, + 0x1.00251f4dbf0f3p0 + }, + { // Entry 20 + 0x1.5164c776eb38b7a1b4e392209f7cd76cp0, + 0x1.00380p1 + }, + { // Entry 21 + 0x1.74927a59064b972c627d0f8dbf3a208bp-5, + 0x1.0043ca3ea0570p0 + }, + { // Entry 22 + 0x1.e9b61fa83327114a9499c4386197f7ecp-5, + 0x1.007522166b864p0 + }, + { // Entry 23 + 0x1.4a6b504ae30bf818ff58df731784a2e5p-4, + 0x1.00d55a07e7d7dp0 + }, + { // Entry 24 + 0x1.6e48df1bd304d83259b7350ef19d654ap-4, + 0x1.010636f08d98cp0 + }, + { // Entry 25 + 0x1.86cc84485647b80c608bfc977c465c3ep-4, + 0x1.012a83d511968p0 + }, + { // Entry 26 + 0x1.8c96a62f43fda829f2c6aa64fc7c3f52p-4, + 0x1.01336eaa27065p0 + }, + { // Entry 27 + 0x1.c96ae158c261681aae2f1ac5b1e7b53dp-4, + 0x1.01991427286a7p0 + }, + { // Entry 28 + 0x1.fd303bdcd51d207b38fd033ccca4ebe0p-4, + 0x1.01fb0b7471c13p0 + }, + { // Entry 29 + 0x1.01fbf091ad42880b50591ac5a3c25a55p-3, + 0x1.0208a7bec3ef6p0 + }, + { // Entry 30 + 0x1.2142780a5b4da80572f1f1e417c281e0p-3, + 0x1.028ec4a860985p0 + }, + { // Entry 31 + 0x1.c6f3debc6b9baf8fd4952d3e75007116p4, + 0x1.040p40 + }, + { // Entry 32 + 0x1.b776eaca67a8d81470ca11e3c19618f4p-3, + 0x1.05ea9e87359f0p0 + }, + { // Entry 33 + 0x1.c738f388674bbffeab4246796640039ap-3, + 0x1.0659a435f099fp0 + }, + { // Entry 34 + 0x1.f33d4f7790f6982e3cae58a8f5a4c85cp-3, + 0x1.07a4d97d8d94cp0 + }, + { // Entry 35 + 0x1.f6ac7bad8b4ac7489787663c51fd8389p-3, + 0x1.07cp0 + }, + { // Entry 36 + 0x1.fc25c7d91809f80c15ad7b8a098904e9p-3, + 0x1.07ebaac665ee8p0 + }, + { // Entry 37 + 0x1.14d72e562b86f80b92db76914c1a8483p-2, + 0x1.0969a517e7390p0 + }, + { // Entry 38 + 0x1.3724eb536abd17f3549fde7c0a8bcc78p4, + 0x1.0a05028140ap27 + }, + { // Entry 39 + 0x1.424e1a83309277fc74e6252f9ccff51ep4, + 0x1.0b31d5526e304p28 + }, + { // Entry 40 + 0x1.42dc24aefea4a00000f4c4c42f7676bdp-2, + 0x1.0cd48770c2348p0 + }, + { // Entry 41 + 0x1.aa3dbe48def817845faa61fd5cb0449ap-2, + 0x1.168p0 + }, + { // Entry 42 + 0x1.6c0ff5895036d14a54136cb97458c3a1p0, + 0x1.18c6318c6318cp1 + }, + { // Entry 43 + 0x1.14aeaf2cf882b800017816b0634a51c7p1, + 0x1.1999999a7f91bp2 + }, + { // Entry 44 + 0x1.c636c1b2700c78000114e5846e56f02ap-2, + 0x1.1999999abcb84p0 + }, + { // Entry 45 + 0x1.c636c1b55e89800000206f2d5b63746ep-2, + 0x1.1999999b12b2fp0 + }, + { // Entry 46 + 0x1.c636c1b787628800007e1a95058e28f9p-2, + 0x1.1999999b52092p0 + }, + { // Entry 47 + 0x1.c636c1bc867dc0000156a1eae635a35ep-2, + 0x1.1999999be4936p0 + }, + { // Entry 48 + 0x1.c636c1c7da2afffffeb98fc860cd7ceep-2, + 0x1.1999999d30c68p0 + }, + { // Entry 49 + 0x1.c6d30f1d087751157fa51c32440dd291p-2, + 0x1.19ab84ff770f9p0 + }, + { // Entry 50 + 0x1.38138021525b17f5a7d79c6787045fbap4, + 0x1.19f9842cbe9dap27 + }, + { // Entry 51 + 0x1.cff8efdd68b8b000088f99302f13fd55p-2, + 0x1.1abb14934c112p0 + }, + { // Entry 52 + 0x1.4345ce06726eeffd3deec654e93bb704p4, + 0x1.1bd9ff3818250p28 + }, + { // Entry 53 + 0x1.da627b574124041f55d0b8534c07caa2p-2, + 0x1.1bf734206562ep0 + }, + { // Entry 54 + 0x1.dcfa110e4d2be4e60f4c2c7b792aa979p-2, + 0x1.1c4711c4711c4p0 + }, + { // Entry 55 + 0x1.e4f600bca9b43c7505820f34625aedf8p-2, + 0x1.1d4p0 + }, + { // Entry 56 + 0x1.435af0cd8723f7fc0f030744eaf5e4f3p4, + 0x1.1d51ee6904f05p28 + }, + { // Entry 57 + 0x1.f66cd8a589f9e801dcbbaba95fa2db1bp-2, + 0x1.1f7p0 + }, + { // Entry 58 + 0x1.fb04da24bd3263c3c19595829f887623p-2, + 0x1.2006d9ba6b627p0 + }, + { // Entry 59 + 0x1.fb4d685e13d1738553151c2a08436513p-2, + 0x1.201034be9b997p0 + }, + { // Entry 60 + 0x1.fd9747d199d9e34b5ee5a758b3a33b2ep-2, + 0x1.205bf510b5de4p0 + }, + { // Entry 61 + 0x1.fde64921f2be26d349af15c65d2baec8p-2, + 0x1.206633589fb42p0 + }, + { // Entry 62 + 0x1.ff88ab5b57988a62645ec106c4097863p-2, + 0x1.209c8ea824394p0 + }, + { // Entry 63 + 0x1.ffaa5d190b3e38a2f5978b0cbdef37c0p-2, + 0x1.20a0f16a1f3a8p0 + }, + { // Entry 64 + 0x1.43d0ccb7eaf817fbfc58bb2d606c246ap4, + 0x1.25a62ecd4ac96p28 + }, + { // Entry 65 + 0x1.25942d7ea38d3037fdf235c374a0a10ap-1, + 0x1.2b4p0 + }, + { // Entry 66 + 0x1.1eb90fcb975c97e99a03cd4e9ecf7efep1, + 0x1.30000000e4cffp2 + }, + { // Entry 67 + 0x1.1ed61acd1cef37f72ebe2150d786654ap1, + 0x1.304376382bfc1p2 + }, + { // Entry 68 + 0x1.1f962e5c168007edbcf9aaa8334a7be8p1, + 0x1.32032a240af45p2 + }, + { // Entry 69 + 0x1.1fda546800eb981039b042c0a6205a51p1, + 0x1.32a2a7cec80a3p2 + }, + { // Entry 70 + 0x1.1ff53fa69f9f6813df120c0fc9a7c82fp1, + 0x1.32e1bf98770d2p2 + }, + { // Entry 71 + 0x1.85a6fe5151e877fffe89df73281dac1ep0, + 0x1.333333335c4e7p1 + }, + { // Entry 72 + 0x1.203dae008f42281336198904d353a9d3p1, + 0x1.338bc6d217390p2 + }, + { // Entry 73 + 0x1.204200d0ad3cb80822eaaf1a8fd400eep1, + 0x1.3395f01ec30aep2 + }, + { // Entry 74 + 0x1.2180ae42458557f160869fa88bfdd767p1, + 0x1.3686b30ec28f9p2 + }, + { // Entry 75 + 0x1.22824d7775d127ed6249aedcd653a683p1, + 0x1.38ecbb448bb60p2 + }, + { // Entry 76 + 0x1.24d7aa57e09e200f0fa51b8e122a50d1p1, + 0x1.3e8fa3e8fa3e8p2 + }, + { // Entry 77 + 0x1.24ead0998b45e80c15775fe412fa3476p1, + 0x1.3ebe5740abf57p2 + }, + { // Entry 78 + 0x1.9119c13a31baffe46835ab2266588de9p0, + 0x1.4p1 + }, + { // Entry 79 + 0x1.638eab49216f8ee9217f986540739282p-1, + 0x1.404p0 + }, + { // Entry 80 + 0x1.663100c2a4fe2251bc802e040c21517cp-1, + 0x1.413e827d04fa0p0 + }, + { // Entry 81 + 0x1.2a8a45eb147ce80084d5dc0629061b72p1, + 0x1.4cc5baf5c8392p2 + }, + { // Entry 82 + 0x1.834b2cacec9cf00000bf6612e57cbe8fp-1, + 0x1.4ccccccd6481ap0 + }, + { // Entry 83 + 0x1.834b2cb510a9c7fffe91256bde54bbddp-1, + 0x1.4cccccd0c613dp0 + }, + { // Entry 84 + 0x1.869f689d41e5ae1cbc4db884da78fec0p-1, + 0x1.4e309016165fcp0 + }, + { // Entry 85 + 0x1.dfcd5df1bc2707ffd5ca5383f4cce6e7p1, + 0x1.53d4f53d4f53cp4 + }, + { // Entry 86 + 0x1.2e3bb6dd0b0ae0067c5f911faaaa78ddp1, + 0x1.5655956559564p2 + }, + { // Entry 87 + 0x1.30af83c42c157ff130f6bbdfb23ca759p1, + 0x1.5cd735cd735ccp2 + }, + { // Entry 88 + 0x1.af87977409910c12e8a8802fd87c6abfp-1, + 0x1.6070381c0e040p0 + }, + { // Entry 89 + 0x1.3bacc53061f3b7f7d9035c57315345fbp4, + 0x1.6118461184610p27 + }, + { // Entry 90 + 0x1.b2066fe0952af7fd5b1a52e397d20b42p-1, + 0x1.619f89771feaap0 + }, + { // Entry 91 + 0x1.b243d68391f9d80c17216d59e4919bafp-1, + 0x1.61bccd7f349c4p0 + }, + { // Entry 92 + 0x1.bbe95ab6d25078000176eb5757518ce0p-1, + 0x1.6666666a4d8cap0 + }, + { // Entry 93 + 0x1.bce47c50e597e80168ea6ea197b7c5fbp-1, + 0x1.66e198e40a07cp0 + }, + { // Entry 94 + 0x1.c4b434e7858417fe5522bdc24515e3abp-1, + 0x1.6ac2abcce660fp0 + }, + { // Entry 95 + 0x1.b4b0591fab93e80c344916601f3f98fep0, + 0x1.6c0p1 + }, + { // Entry 96 + 0x1.c9e777034bed37fc519e004af23c57ecp-1, + 0x1.6d63c0cb542d6p0 + }, + { // Entry 97 + 0x1.cda9310b784e5000aeae7baa2dcc4cfcp-1, + 0x1.6f5p0 + }, + { // Entry 98 + 0x1.d169426b135d0bbab276664d9f830c71p-1, + 0x1.7140727bb4fa3p0 + }, + { // Entry 99 + 0x1.d740fdf53668a1bcea81609db9e0db68p-1, + 0x1.745p0 + }, + { // Entry 100 + 0x1.bc01207bd25b6801df8e788fb5f41357p0, + 0x1.75e32cf383997p1 + }, + { // Entry 101 + 0x1.ecc2caec5160436e6ef0c4dfd37de905p-1, + 0x1.7fffffffffffdp0 + }, + { // Entry 102 + 0x1.ecc2caf0a75cdffffe93419822098956p-1, + 0x1.800000026c803p0 + }, + { // Entry 103 + 0x1.ee3b06ecea5ed564406442d07861a73fp-1, + 0x1.80d2ba083b446p0 + }, + { // Entry 104 + 0x1.f314c9cb875be7f25915ef6fe8147ea7p-1, + 0x1.839p0 + }, + { // Entry 105 + 0x1.f4ba2f1cad8f475dfb4fa048b5cece75p-1, + 0x1.848p0 + }, + { // Entry 106 + 0x1.fbd18e6aa534eed05007aee3d66b990ap-1, + 0x1.8895b461da6c6p0 + }, + { // Entry 107 + 0x1.9bdb225dace4b0005714c41371dff0c4p1, + 0x1.90240902409p3 + }, + { // Entry 108 + 0x1.0c0616dbd301e000016d7f0d89731675p0, + 0x1.9999999ac11f3p0 + }, + { // Entry 109 + 0x1.d4d19d0a825927fe1b0973d8b461e8edp0, + 0x1.99cp1 + }, + { // Entry 110 + 0x1.4c703d5db8586802badfb82b797d3dc0p1, + 0x1.b0020p2 + }, + { // Entry 111 + 0x1.1efb699cdcd33801fb03b9466fdd60fap0, + 0x1.b26c9b26c9b26p0 + }, + { // Entry 112 + 0x1.2d72a3ace48437fde986eb51409ae273p0, + 0x1.c6f61e8a542a8p0 + }, + { // Entry 113 + 0x1.f1b4656fac2777ff0b0732f4ed9eaaf0p0, + 0x1.c86p1 + }, + { // Entry 114 + 0x1.5550540d3de547fce11196feb22aa2e1p1, + 0x1.ceb1dd915e476p2 + }, + { // Entry 115 + 0x1.e4db571e008197fe9e09c3aa26aa7fccp3, + 0x1.d0741d0741d04p20 + }, + { // Entry 116 + 0x1.07eac9f6dafa57ff028d331cb48f9038p3, + 0x1.dd374dd374dd0p10 + }, + { // Entry 117 + 0x1.e784c2b3e554f800004d96919f791652p5, + 0x1.e3920fcba08c5p86 + }, + { // Entry 118 + 0x1.e4bcd2d77ead3ffffa7087c93f5678b5p2, + 0x1.e6bd865d59181p9 + }, + { // Entry 119 + 0x1.09ba252166ce8800003aa2a95746a4aap3, + 0x1.f8fc7e3f1f880p10 + }, + { // Entry 120 + 0x1.4e6b108abebaefffc5c616605660da14p0, + 0x1.fb5p0 + }, + { // Entry 121 + 0x1.2a66594f2e5b0fffff7ff379f5e243a7p9, + 0x1.fff003fffffffp859 + }, + { // Entry 122 + 0x1.081ca3e524daf5a4d1e9e6092a37c659p1, + 0x1.fff7fffffffffp1 + }, + { // Entry 123 + 0x1.081ce5ff7fcfd7ff29362493ef56165fp1, + 0x1.fff8fffffffffp1 + }, + { // Entry 124 + 0x1.6262acbb698ca80507700d5ef3d0c5adp1, + 0x1.fffcfffffffffp2 + }, + { // Entry 125 + 0x1.8e8f43d38040fffeda732c8d164c1eb5p8, + 0x1.fffffbbffffffp573 + }, + { // Entry 126 + 0x1.c55179395a000800ddc334790469d4dep7, + 0x1.fffffe3ffffffp325 + }, + { // Entry 127 + 0x1.27a094edef0c27ffb3d9ba9f6d2910a5p9, + 0x1.fffffe3ffffffp851 + }, + { // Entry 128 + 0x1.27f94df9eaf50fbc89beac79392b0a20p9, + 0x1.fffffe3ffffffp852 + }, + { // Entry 129 + 0x1.bb7d2fe3dbf7f7fee03edebc7a01d599p1, + 0x1.fffffffbfbfffp3 + }, + { // Entry 130 + 0x1.62e3efef359dffffb4e2975678a61bf4p2, + 0x1.ffffffff8ffffp6 + }, + { // Entry 131 + 0x1.86ef5ccdfa1b17fe78c886a9d8b2faaep7, + 0x1.ffffffffddfffp280 + }, + { // Entry 132 + 0x1.62e3efef419e17fffe6390b9f02bcc28p2, + 0x1.ffffffffeffffp6 + }, + { // Entry 133 + 0x1.62e3efef439dffffd26b10f8467623p2, + 0x1.ffffffffffff1p6 + }, + { // Entry 134 + 0x1.419ecb712c4808035decb58386841d9dp4, + 0x1.ffffffffffff7p27 + }, + { // Entry 135 + 0x1.633ce8fb9f87dafc69ac5909d3e5a6d9p9, + 0x1.ffffffffffffap1023 + }, + { // Entry 136 + 0x1.62e3efef439e1800026ba0fa2d3cdb98p2, + 0x1.ffffffffffffdp6 + }, + { // Entry 137 + 0x1.5ca72d17ed3ea80089ae65dfafc1e2b2p8, + 0x1.ffffffffffffep501 + }, + { // Entry 138 + 0.0, + 0x1.0p0 + }, + { // Entry 139 + 0x1.9f323ecbf9848bf835a433c0ce9aed17p-2, + 0x1.1555555555555p0 + }, + { // Entry 140 + 0x1.23a4fbcdbc0835819feea2ceae6532bdp-1, + 0x1.2aaaaaaaaaaaap0 + }, + { // Entry 141 + 0x1.62e42fefa39ec8ace91cbc855a44bdf6p-1, + 0x1.3ffffffffffffp0 + }, + { // Entry 142 + 0x1.973a2448a635d2473522e0e7015d28f1p-1, + 0x1.5555555555554p0 + }, + { // Entry 143 + 0x1.c484603eb09c0970ffa86254d6babfa5p-1, + 0x1.6aaaaaaaaaaa9p0 + }, + { // Entry 144 + 0x1.ecc2caec5160600d94b684cdb2112543p-1, + 0x1.7fffffffffffep0 + }, + { // Entry 145 + 0.0, + 0x1.0p0 + }, + { // Entry 146 + 0x1.79072028586b73758a4f622cafb07d48p-1, + 0x1.489a5796de0b2p0 + }, + { // Entry 147 + 0x1.94d80f30e93e5e29997af8fe4481c88cp-1, + 0x1.54494203c1934p0 + }, + { // Entry 148 + 0x1.cddcc71de32ab5ac57c13ba40ec7963bp-1, + 0x1.6f6a8be981db0p0 + }, + { // Entry 149 + 0x1.8fcb9d874c026f2c12450971bb1bddfcp-1, + 0x1.521792ea7d26ep0 + }, + { // Entry 150 + 0x1.8ca5043b79263a06aa0f70d7d0bda22bp-2, + 0x1.13723f2585da2p0 + }, + { // Entry 151 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.8p0 + }, + { // Entry 152 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.8p0 + }, + { // Entry 153 + 0x1.0893ff7cee46eb16015477f9b6695819p0, + 0x1.9555555555555p0 + }, + { // Entry 154 + 0x1.193ea7aad030a176a4198d5505137cb5p0, + 0x1.aaaaaaaaaaaaap0 + }, + { // Entry 155 + 0x1.28a7cbb850061ed8cb452c64c52218c9p0, + 0x1.bffffffffffffp0 + }, + { // Entry 156 + 0x1.37030b8cc93542ccc38cca9157b0f26dp0, + 0x1.d555555555554p0 + }, + { // Entry 157 + 0x1.44779e1ebd847257f6c077cb3350b457p0, + 0x1.eaaaaaaaaaaa9p0 + }, + { // Entry 158 + 0x1.5124271980433744c1063fe570409b9ap0, + 0x1.ffffffffffffep0 + }, + { // Entry 159 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.8p0 + }, + { // Entry 160 + 0x1.0c2423fc001c38dcbc9cd1946000f563p0, + 0x1.99bf25234bccap0 + }, + { // Entry 161 + 0x1.197e89ca48809b3746de418fbf0ee383p0, + 0x1.aaffe573bd7bbp0 + }, + { // Entry 162 + 0x1.261b72900d136b90cbef8fa9a3bbd85ap0, + 0x1.bc5ccd71976cbp0 + }, + { // Entry 163 + 0x1.fbbfb95324eb186f3d677aed30c35884p-1, + 0x1.888b56d86b26ep0 + }, + { // Entry 164 + 0x1.4cf1a48b4bdba9043707a45b35f0d529p0, + 0x1.f8cc6db1bbcb4p0 + }, + { // Entry 165 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.0p1 + }, + { // Entry 166 + 0x1.18080dd3171b6c031a9b576be63b6d4cp6, + 0x1.0p100 + }, + { // Entry 167 + 0x1.1869a6d0fc0c8734cff5be4c994a623cp6, + 0x1.199999999999ap100 + }, + { // Entry 168 + 0x1.18c2c053a6401fdf8f801885ecec896ep6, + 0x1.3333333333334p100 + }, + { // Entry 169 + 0x1.1914b70ad53709fc02e60c9931465d1cp6, + 0x1.4cccccccccccep100 + }, + { // Entry 170 + 0x1.19609a00a84eb5469b8a14575cfcffdcp6, + 0x1.6666666666668p100 + }, + { // Entry 171 + 0x1.19a74011e314f1179b5984282f925681p6, + 0x1.8000000000002p100 + }, + { // Entry 172 + 0x1.19e95674b98dd93c68942542ae48ec14p6, + 0x1.999999999999cp100 + }, + { // Entry 173 + 0x1.1a276ad639b09e9294f7218ef587ce6cp6, + 0x1.b333333333336p100 + }, + { // Entry 174 + 0x1.1a61f2927239a4e5d75ab70952b3595ap6, + 0x1.cccccccccccd0p100 + }, + { // Entry 175 + 0x1.1a994ff83eca77f3ef91866a7b8540e2p6, + 0x1.e66666666666ap100 + }, + { // Entry 176 + 0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + 0x1.0p101 + }, + { // Entry 177 + 0x1.16a529a32777cd0fc3079004b633875fp7, + 0x1.0p200 + }, + { // Entry 178 + 0x1.16d5f62219f05aa89db4c3750fbb01d6p7, + 0x1.199999999999ap200 + }, + { // Entry 179 + 0x1.170282e36f0a26fdfd79f091b98c1570p7, + 0x1.3333333333334p200 + }, + { // Entry 180 + 0x1.172b7e3f06859c0c372cea9b5bb8ff47p7, + 0x1.4cccccccccccep200 + }, + { // Entry 181 + 0x1.17516fb9f01171b1837eee7a719450a6p7, + 0x1.6666666666668p200 + }, + { // Entry 182 + 0x1.1774c2c28d748f9a0366a662dadefbf9p7, + 0x1.8000000000002p200 + }, + { // Entry 183 + 0x1.1795cdf3f8b103ac6a03f6f01a3a46c3p7, + 0x1.999999999999cp200 + }, + { // Entry 184 + 0x1.17b4d824b8c26657803575163dd9b7efp7, + 0x1.b333333333336p200 + }, + { // Entry 185 + 0x1.17d21c02d506e98121673fd36c6f7d66p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 186 + 0x1.17edcab5bb4f53082d82a78400d8712ap7, + 0x1.e66666666666ap200 + }, + { // Entry 187 + 0x1.18080dd3171b6c031a9b576be63b6d4cp7, + 0x1.0p201 + }, + { // Entry 188 + 0x1.5aeb8fdc01b221605c35ac9eb3b88349p9, + 0x1.0p1000 + }, + { // Entry 189 + 0x1.5af7c2fbbe5044c692e0f97aca1a61e7p9, + 0x1.199999999999ap1000 + }, + { // Entry 190 + 0x1.5b02e62c1396b7dbead244c1f48ea6cdp9, + 0x1.3333333333334p1000 + }, + { // Entry 191 + 0x1.5b0d2502f975951f793f03445d19e143p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 192 + 0x1.5b16a161b3d88a88cc53843c2290b59bp9, + 0x1.6666666666668p1000 + }, + { // Entry 193 + 0x1.5b1f7623db315202ec4d72363ce36070p9, + 0x1.8000000000002p1000 + }, + { // Entry 194 + 0x1.5b27b8f036006f0785f4c6598cba3322p9, + 0x1.999999999999cp1000 + }, + { // Entry 195 + 0x1.5b2f7b7c6604c7b24b8125e315a20f6dp9, + 0x1.b333333333336p1000 + }, + { // Entry 196 + 0x1.5b36cc73ed15e87cb3cd9892614780cbp9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 197 + 0x1.5b3db820a6a802de76d4727e8661bdbcp9, + 0x1.e66666666666ap1000 + }, + { // Entry 198 + 0x1.5b4448e7fd9b091d321a9e787fba7cc4p9, + 0x1.0p1001 + }, + { // Entry 199 + 0.0, + 0x1.0p0 + }, + { // Entry 200 + 0x1.ecc2caec51607cacba7c44bb8e7ed846p-1, + 0x1.7ffffffffffffp0 + }, + { // Entry 201 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.8p0 + }, + { // Entry 202 + 0x1.ecc2caec5160b5eb0607c49740e9a298p-1, + 0x1.8000000000001p0 + }, + { // Entry 203 + 0x1.512427198043408194a907fefefaf99cp0, + 0x1.fffffffffffffp0 + }, + { // Entry 204 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.0p1 + }, + { // Entry 205 + 0x1.5124271980435c380f91604ba8dadeb9p0, + 0x1.0000000000001p1 + }, + { // Entry 206 + 0x1.081eb4b42159138d780ef9da45476c93p1, + 0x1.fffffffffffffp1 + }, + { // Entry 207 + 0x1.081eb4b4215917af0d37af17fbf93f73p1, + 0x1.0p2 + }, + { // Entry 208 + 0x1.081eb4b421591ff23789199368f32314p1, + 0x1.0000000000001p2 + }, + { // Entry 209 + 0x1.1542457337d4299c6b73c89d8469a171p4, + 0x1.fffffffffffffp23 + }, + { // Entry 210 + 0x1.1542457337d42a1c6b73c89d84aba171p4, + 0x1.0p24 + }, + { // Entry 211 + 0x1.1542457337d42b1c6b73c89d8523a171p4, + 0x1.0000000000001p24 + }, + { // Entry 212 + 0x1.3687a9f1af2b145ca14e7a4a06e617b2p4, + 0x1.fffffffffffffp26 + }, + { // Entry 213 + 0x1.3687a9f1af2b14dca14e7a4a06e917b2p4, + 0x1.0p27 + }, + { // Entry 214 + 0x1.3687a9f1af2b15dca14e7a4a06e317b2p4, + 0x1.0000000000001p27 + }, + { // Entry 215 + 0x1.419ecb712c480c035decb58387261d9dp4, + 0x1.fffffffffffffp27 + }, + { // Entry 216 + 0x1.419ecb712c480c835decb58387285d9dp4, + 0x1.0p28 + }, + { // Entry 217 + 0x1.419ecb712c480d835decb5838720dd9dp4, + 0x1.0000000000001p28 + }, + { // Entry 218 + 0x1.62e42fefa39ef31793c7673007e4ed5ep5, + 0x1.fffffffffffffp62 + }, + { // Entry 219 + 0x1.62e42fefa39ef35793c7673007e5ed5ep5, + 0x1.0p63 + }, + { // Entry 220 + 0x1.62e42fefa39ef3d793c7673007e1ed5ep5, + 0x1.0000000000001p63 + }, + { // Entry 221 + 0x1.601e678fc457b550e49fd861a7d5a183p6, + 0x1.fffffffffffffp125 + }, + { // Entry 222 + 0x1.601e678fc457b570e49fd861a7d62183p6, + 0x1.0p126 + }, + { // Entry 223 + 0x1.601e678fc457b5b0e49fd861a7d42183p6, + 0x1.0000000000001p126 + }, + { // Entry 224 + 0x1.628b76e3a7b60b96bde275563be3e3e3p9, + 0x1.fffffffffffffp1021 + }, + { // Entry 225 + 0x1.628b76e3a7b60b9abde275563be3f3e3p9, + 0x1.0p1022 + }, + { // Entry 226 + 0x1.628b76e3a7b60ba2bde275563be3b3e3p9, + 0x1.0000000000001p1022 + }, + { // Entry 227 + 0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 228 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 229 + 0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 230 + 0x1.633ce8fb9f87db0c69ac5909d3e7a6d9p9, + 0x1.ffffffffffffep1023 + }, + { // Entry 231 + 0x1.cfc02f90106c17a3fd778845de3494b4p0, + 0x1.921fb54442d18p1 + }, + { // Entry 232 + 0x1.05f23c6cbaf30c042e32011989ade594p0, + 0x1.921fb54442d18p0 + }, + { // Entry 233 + 0x1.6a09e667f3bcc725fb1d3377443ae618p-26, + 0x1.0000000000001p0 + }, + { // Entry 234 + 0.0, + 0x1.0p0 + } +}; diff --git a/tests/math_data/acoshf_intel_data.h b/tests/math_data/acoshf_intel_data.h new file mode 100644 index 000000000..2541aee54 --- /dev/null +++ b/tests/math_data/acoshf_intel_data.h @@ -0,0 +1,662 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_acoshf_intel_data[] = { + { // Entry 0 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.p1 + }, + { // Entry 1 + 0x1.7912730e9dd8c28d0c2e8851730eeb45p4, + 0x1.000002p33 + }, + { // Entry 2 + 0x1.62e42fffa39ee35793dcbc853d3b42e7p5, + 0x1.000002p63 + }, + { // Entry 3 + 0x1.6a09dedd14b1e5d3f0a7b66fb7978e52p-9, + 0x1.000040p0 + }, + { // Entry 4 + 0x1.5124710011087370bef8ff29334f0588p0, + 0x1.000040p1 + }, + { // Entry 5 + 0x1.7ffff7000091ccc09884d33b64b1eb87p-9, + 0x1.000048p0 + }, + { // Entry 6 + 0x1.686fc30f61d32f36cebd3556647e6d85p5, + 0x1.00004cp64 + }, + { // Entry 7 + 0x1.5125e27f7363b91a4d3149cf50666ecap0, + 0x1.000180p1 + }, + { // Entry 8 + 0x1.e330350c572f333162767c36dce61564p-8, + 0x1.0001c8p0 + }, + { // Entry 9 + 0x1.52a797d729941823c44aae94a78e8d74p-7, + 0x1.000380p0 + }, + { // Entry 10 + 0x1.94c4db06c1e84a221d39f0a3cee05599p-7, + 0x1.0005p0 + }, + { // Entry 11 + 0x1.deed89b7b3535ce83319a83454260bf8p-7, + 0x1.0007p0 + }, + { // Entry 12 + 0x1.52a1ce85b747431168d159e69c1ef56ep-5, + 0x1.0038p0 + }, + { // Entry 13 + 0x1.67d67454b91b1d46567f99ba2e2e100cp-5, + 0x1.003f3cp0 + }, + { // Entry 14 + 0x1.deff5d6d7e77e9ef89d533cd1b4674c0p-5, + 0x1.007010p0 + }, + { // Entry 15 + 0x1.03ecf505a34cdb22e926c22dafdcba93p-4, + 0x1.0084p0 + }, + { // Entry 16 + 0x1.522637e146375db3d5e54da506a6da8ap0, + 0x1.00e0p1 + }, + { // Entry 17 + 0x1.74d0fb045fad2bb6a0e3f2f93c3dbcc4p-4, + 0x1.010fa8p0 + }, + { // Entry 18 + 0x1.90b591058df058eb707359449093e7d5p-4, + 0x1.0139dcp0 + }, + { // Entry 19 + 0x1.bb67a8fd17fb152d1c73ebdb092cac1dp-4, + 0x1.018060p0 + }, + { // Entry 20 + 0x1.e71f530f94e947158a386b336cdec658p-4, + 0x1.01d0p0 + }, + { // Entry 21 + 0x1.ffaad0fa452627976ff366b9d3840fd1p-4, + 0x1.02p0 + }, + { // Entry 22 + 0x1.5530ccfff7ae8f7c70f1590984ee044fp0, + 0x1.038ap1 + }, + { // Entry 23 + 0x1.5e4fd4ffff5dbe26d4ed5650c003b86ap0, + 0x1.0bc0p1 + }, + { // Entry 24 + 0x1.5fab1f780d388e9cc57b36be3c3141c7p0, + 0x1.0dp1 + }, + { // Entry 25 + 0x1.763bdf002ea17936e0bfcfe7b6511bcbp-2, + 0x1.114986p0 + }, + { // Entry 26 + 0x1.a00911010f93abee028e302008964513p-2, + 0x1.156bbcp0 + }, + { // Entry 27 + 0x1.94e9050d7f9b05eaab2ab578f9f7c8a9p2, + 0x1.17a93cp8 + }, + { // Entry 28 + 0x1.b6c931c025238ebcf98ef12eb28d8307p5, + 0x1.18p78 + }, + { // Entry 29 + 0x1.bb6f05ffddc8a6d7ec01df7072e6e0f0p-2, + 0x1.18616cp0 + }, + { // Entry 30 + 0x1.6d74ee000195eb1aa7d81dd17a217ffap0, + 0x1.1a23bap1 + }, + { // Entry 31 + 0x1.ca976f7083fa74fb28b04fb16943e348p1, + 0x1.20p4 + }, + { // Entry 32 + 0x1.efbe20ff9b93b8c1be0904c4167348d7p2, + 0x1.210840p10 + }, + { // Entry 33 + 0x1.76b1c30001e25f3c8bf59f51e1345b89p0, + 0x1.2365e8p1 + }, + { // Entry 34 + 0x1.14d7f7fffe2fabae91a11982e4e616c8p-1, + 0x1.2658p0 + }, + { // Entry 35 + 0x1.2693990483fd8eeb51271e2e585b684dp-1, + 0x1.2b8d74p0 + }, + { // Entry 36 + 0x1.5c4e960001d47445bae41369dbff3bebp-1, + 0x1.3d8ea8p0 + }, + { // Entry 37 + 0x1.6aae7300008fa4d9f021ed601c65f965p-1, + 0x1.42f55cp0 + }, + { // Entry 38 + 0x1.9e86a6000ecf0210e4a6a5b7423d0413p0, + 0x1.4fd3f0p1 + }, + { // Entry 39 + 0x1.8e05b6fd5d1b8aec832f758abac8fe89p-1, + 0x1.515450p0 + }, + { // Entry 40 + 0x1.df328b0ba47a77279fd4ced3f49c93eap1, + 0x1.523b56p4 + }, + { // Entry 41 + 0x1.9eb7a2fc5b6aa4ff59b8601984b72a68p-1, + 0x1.58ac40p0 + }, + { // Entry 42 + 0x1.abc47a73960e8473135511220cc16ca9p0, + 0x1.6058p1 + }, + { // Entry 43 + 0x1.83ceeb0e93a6e047b70a3145b22d0855p3, + 0x1.660dd6p16 + }, + { // Entry 44 + 0x1.e7306f0ae25f79290292e6e2e6fa8ca0p1, + 0x1.67ffc0p4 + }, + { // Entry 45 + 0x1.c3bf8400023ca827c6741d7e90c625f4p-1, + 0x1.6a48p0 + }, + { // Entry 46 + 0x1.9036310001a25b1ccef0f5035d136dc3p1, + 0x1.6d7680p3 + }, + { // Entry 47 + 0x1.cb7077ffffb491dd760b7538a02c6e3ep-1, + 0x1.6e2c4cp0 + }, + { // Entry 48 + 0x1.d466eb047d3274c3f8e4ad57ff764ea1p-1, + 0x1.72d0p0 + }, + { // Entry 49 + 0x1.d53c6fc6f92e0ba23b31c22d8cc254cfp-1, + 0x1.7340p0 + }, + { // Entry 50 + 0x1.ec49d25fbb6766d39e90829e6e2e250cp1, + 0x1.769da0p4 + }, + { // Entry 51 + 0x1.dc679d017683946d78e2a9cc803cf6c7p-1, + 0x1.770d10p0 + }, + { // Entry 52 + 0x1.e8c0b0fffe1ddf6adf3d4c2f7dd95d58p-1, + 0x1.7dc566p0 + }, + { // Entry 53 + 0x1.e9609b000000a0eda71092f93ae128abp-1, + 0x1.7e1deep0 + }, + { // Entry 54 + 0x1.ecc2c030a30fcdab9ac241b66cd30c25p-1, + 0x1.7ffffap0 + }, + { // Entry 55 + 0x1.ecc35a07f3682dbaa360587c559ccbd3p-1, + 0x1.800050p0 + }, + { // Entry 56 + 0x1.ecc6dc03c34154354f855c6bd517af5dp-1, + 0x1.800246p0 + }, + { // Entry 57 + 0x1.f0192f00019712eb97524c0bc702be17p-1, + 0x1.81dfb6p0 + }, + { // Entry 58 + 0x1.f284540001b93c8ebe3f4affe21905a6p-1, + 0x1.833df6p0 + }, + { // Entry 59 + 0x1.f4d44c1caf6cd216b634d3097e9011f1p-1, + 0x1.848ee8p0 + }, + { // Entry 60 + 0x1.f4ff87d0159c59ba0482602abe442ae8p-1, + 0x1.84a798p0 + }, + { // Entry 61 + 0x1.fbd18dc250d3324af75f978654b26cdfp-1, + 0x1.8895b4p0 + }, + { // Entry 62 + 0x1.fc5d43a0453c54315cc3647a30e4ed2bp-1, + 0x1.88e6fap0 + }, + { // Entry 63 + 0x1.feb4430000ee8977e14ac962c3ef7706p-1, + 0x1.8a44bap0 + }, + { // Entry 64 + 0x1.ce51f9f47895ee807158da16a38ca157p0, + 0x1.8ffffep1 + }, + { // Entry 65 + 0x1.6c02870f43f412f2facda9c71af64d9ap5, + 0x1.9026f4p64 + }, + { // Entry 66 + 0x1.47533d0000264c4cbb7c2fab58133240p1, + 0x1.9f47e2p2 + }, + { // Entry 67 + 0x1.1a30b200001c3de79bc0f29982af5fc1p0, + 0x1.abee22p0 + }, + { // Entry 68 + 0x1.3f6350ffda1d235a4490f7aa2ce26ae7p4, + 0x1.bd531cp27 + }, + { // Entry 69 + 0x1.50eb6d04542893111cfd374dfd3d214fp1, + 0x1.bf3baap2 + }, + { // Entry 70 + 0x1.2dfa93ff2c6700d1d90825d37183dcd9p2, + 0x1.bffffep5 + }, + { // Entry 71 + 0x1.ecf4c21af95787266aac99616d63af21p0, + 0x1.c053d4p1 + }, + { // Entry 72 + 0x1.ee596e252c01641fd16160b80bc6afe6p0, + 0x1.c2ac2ap1 + }, + { // Entry 73 + 0x1.52826efff379e591193fb977ff4e6bb1p1, + 0x1.c4c3fcp2 + }, + { // Entry 74 + 0x1.cb605d0b0f66c2ac5857cda13901790bp5, + 0x1.cb0d08p81 + }, + { // Entry 75 + 0x1.f38fc1e25f10f5fb2271b50edba446b8p0, + 0x1.cb9080p1 + }, + { // Entry 76 + 0x1.3940a3ffff65e12ff76d6976a25254bfp0, + 0x1.d8cb54p0 + }, + { // Entry 77 + 0x1.40889effd28e277ad840d7466abad6ecp4, + 0x1.de61fcp27 + }, + { // Entry 78 + 0x1.09aa20ff6df329fc6965c5157042b44ap3, + 0x1.f7fffep10 + }, + { // Entry 79 + 0x1.dca21f00608c1d5dfa8c6e2db5abd9c0p4, + 0x1.f7fffep41 + }, + { // Entry 80 + 0x1.62636e000aae80a748dcd7555caf8e89p2, + 0x1.fbfffep6 + }, + { // Entry 81 + 0x1.50a2ac95684b68fdc508df40cc73323dp0, + 0x1.ff1ffep0 + }, + { // Entry 82 + 0x1.50b9c8d9ac3d9fed6029492e2946e89cp0, + 0x1.ff47f0p0 + }, + { // Entry 83 + 0x1.b6102affc7f74638c6d979799db2bfaap5, + 0x1.ff9ffep77 + }, + { // Entry 84 + 0x1.50f6250001e11ede297c4b3f4b76e264p0, + 0x1.ffb058p0 + }, + { // Entry 85 + 0x1.510a08ffff3a5b971fb41b757c6603ecp0, + 0x1.ffd2c6p0 + }, + { // Entry 86 + 0x1.419ecb012c46848356c72808ab86361cp4, + 0x1.fffff2p27 + }, + { // Entry 87 + 0x1.55074600473a9dd627ac47d1d2419990p6, + 0x1.fffff8p121 + }, + { // Entry 88 + 0x1.640e90fffe1db3e4bbbe3d2c1b08c229p0, + 0x1.111874p1 + }, + { // Entry 89 + 0.0, + 0x1.p0 + }, + { // Entry 90 + 0x1.9f3245325fddd5b2c87f249c5271c1cdp-2, + 0x1.155556p0 + }, + { // Entry 91 + 0x1.23a5003dc2a6d928dd921e808a9011e8p-1, + 0x1.2aaaacp0 + }, + { // Entry 92 + 0x1.62e43544f8e86e9a20f297ce4a2bc5d8p-1, + 0x1.400002p0 + }, + { // Entry 93 + 0x1.973a2a54caa1da0a04be159db5cae8abp-1, + 0x1.555558p0 + }, + { // Entry 94 + 0x1.c48466e37608eec558429434454efbc0p-1, + 0x1.6aaaaep0 + }, + { // Entry 95 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.80p0 + }, + { // Entry 96 + 0.0, + 0x1.p0 + }, + { // Entry 97 + 0x1.7907212d9f29112f246e3e48d17cb877p-1, + 0x1.489a58p0 + }, + { // Entry 98 + 0x1.94d80f28552a7960dbd361ef8d997239p-1, + 0x1.544942p0 + }, + { // Entry 99 + 0x1.cddcc749958a508d272c8af1d7f4ee9fp-1, + 0x1.6f6a8cp0 + }, + { // Entry 100 + 0x1.8fcba00aaf47e796d01724c28df0a8c3p-1, + 0x1.521794p0 + }, + { // Entry 101 + 0x1.8ca50cd428a176f539205f3add783b57p-2, + 0x1.137240p0 + }, + { // Entry 102 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.80p0 + }, + { // Entry 103 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.80p0 + }, + { // Entry 104 + 0x1.08940007f543cfa0adae2e6229dce7e2p0, + 0x1.955556p0 + }, + { // Entry 105 + 0x1.193ea8aad0300976a4b6e2a99a10d315p0, + 0x1.aaaaacp0 + }, + { // Entry 106 + 0x1.28a7cd1cd2d875d89ba32eb5d574ffa4p0, + 0x1.c00002p0 + }, + { // Entry 107 + 0x1.37030d490f3cb36dda8e8436280f6666p0, + 0x1.d55558p0 + }, + { // Entry 108 + 0x1.4477a0289e7622001965214199d0661bp0, + 0x1.eaaaaep0 + }, + { // Entry 109 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.p1 + }, + { // Entry 110 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.80p0 + }, + { // Entry 111 + 0x1.0c242312e9f147c72de6f878eed5f263p0, + 0x1.99bf24p0 + }, + { // Entry 112 + 0x1.197e88b3d1486826e7557849fa8702f9p0, + 0x1.aaffe4p0 + }, + { // Entry 113 + 0x1.261b718b8dc24a39a77a013459187eabp0, + 0x1.bc5cccp0 + }, + { // Entry 114 + 0x1.fbbfbb4fb3c51a1a693b8538d12b2528p-1, + 0x1.888b58p0 + }, + { // Entry 115 + 0x1.4cf1a4b95964bc7af475a1628b613d0bp0, + 0x1.f8cc6ep0 + }, + { // Entry 116 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.p1 + }, + { // Entry 117 + 0x1.18080dd3171b6c031a9b576be63b6d4cp6, + 0x1.p100 + }, + { // Entry 118 + 0x1.1869a6d270699e1fa7c307d5fdbce864p6, + 0x1.19999ap100 + }, + { // Entry 119 + 0x1.18c2c05650eac97c01479a1a77caa909p6, + 0x1.333334p100 + }, + { // Entry 120 + 0x1.1914b70e86721bbde7a2eea6f077d548p6, + 0x1.4ccccep100 + }, + { // Entry 121 + 0x1.19609a053a97d6f30409751e6281de59p6, + 0x1.666668p100 + }, + { // Entry 122 + 0x1.19a74017386a428962791f05687972f6p6, + 0x1.800002p100 + }, + { // Entry 123 + 0x1.19e9567ab98dd45c6898a542a93d6c1bp6, + 0x1.99999cp100 + }, + { // Entry 124 + 0x1.1a276adcd0472f52cdae405190f05814p6, + 0x1.b33336p100 + }, + { // Entry 125 + 0x1.1a61f2998eab653e55cda9cf1b8d9e50p6, + 0x1.ccccd0p100 + }, + { // Entry 126 + 0x1.1a994fffd300555a0d63481601d36422p6, + 0x1.e6666ap100 + }, + { // Entry 127 + 0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + 0x1.p101 + }, + { // Entry 128 + 0.0, + 0x1.p0 + }, + { // Entry 129 + 0x1.ecc2c7586ca3963ba572db868c3947eep-1, + 0x1.7ffffep0 + }, + { // Entry 130 + 0x1.ecc2caec5160994be04204a968c7020dp-1, + 0x1.80p0 + }, + { // Entry 131 + 0x1.ecc2ce80361506372c8accaeb16b83abp-1, + 0x1.800002p0 + }, + { // Entry 132 + 0x1.512425f1e5ce2ba992dbea3a907450b6p0, + 0x1.fffffep0 + }, + { // Entry 133 + 0x1.51242719804349be684bd0188d52ceccp0, + 0x1.p1 + }, + { // Entry 134 + 0x1.51242968b528e77e4665f8cde850553dp0, + 0x1.000002p1 + }, + { // Entry 135 + 0x1.081eb42feeb3ba85ed12ce4bc0fcf1eep1, + 0x1.fffffep1 + }, + { // Entry 136 + 0x1.081eb4b4215917af0d37af17fbf93f73p1, + 0x1.p2 + }, + { // Entry 137 + 0x1.081eb5bc86a22af8d808c499360fc118p1, + 0x1.000002p2 + }, + { // Entry 138 + 0x1.1542456337d4221c6b6673481f564c03p4, + 0x1.fffffep23 + }, + { // Entry 139 + 0x1.1542457337d42a1c6b73c89d84aba171p4, + 0x1.p24 + }, + { // Entry 140 + 0x1.1542459337d40a1c6bae7347bf564d0ep4, + 0x1.000002p24 + }, + { // Entry 141 + 0x1.3687a9e1af2b0cdca14904f4ad63c259p4, + 0x1.fffffep26 + }, + { // Entry 142 + 0x1.3687a9f1af2b14dca14e7a4a06e917b2p4, + 0x1.p27 + }, + { // Entry 143 + 0x1.3687aa11af2af4dca17964f470d3c2c5p4, + 0x1.000002p27 + }, + { // Entry 144 + 0x1.419ecb612c4804835de7582e2dc70845p4, + 0x1.fffffep27 + }, + { // Entry 145 + 0x1.419ecb712c480c835decb58387285d9dp4, + 0x1.p28 + }, + { // Entry 146 + 0x1.419ecb912c47ec835e17702df1a308afp4, + 0x1.000002p28 + }, + { // Entry 147 + 0x1.62e42fe7a39eef5793c4bc855b3b42b2p5, + 0x1.fffffep62 + }, + { // Entry 148 + 0x1.62e42fefa39ef35793c7673007e5ed5ep5, + 0x1.p63 + }, + { // Entry 149 + 0x1.62e42fffa39ee35793dcbc853d3b42e7p5, + 0x1.000002p63 + }, + { // Entry 150 + 0x1.601e678bc457b370e49e830c5180cc2dp6, + 0x1.fffffep125 + }, + { // Entry 151 + 0x1.601e678fc457b570e49fd861a7d62183p6, + 0x1.p126 + }, + { // Entry 152 + 0x1.601e6797c457ad70e4aa830c4280cc48p6, + 0x1.000002p126 + }, + { // Entry 153 + 0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + 0x1.fffffep127 + }, + { // Entry 154 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 155 + 0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + 0x1.fffffep127 + }, + { // Entry 156 + 0x1.65a9f84782e6293e42e44b53ad4b0e74p6, + 0x1.fffffcp127 + }, + { // Entry 157 + 0x1.cfc0300e23df54cd908a25ac434e488cp0, + 0x1.921fb6p1 + }, + { // Entry 158 + 0x1.05f23d07b63b0afafa9ad8203dad69f2p0, + 0x1.921fb6p0 + }, + { // Entry 159 + 0x1.ffffffaaaaaad11110fa35a369c3dc32p-12, + 0x1.000002p0 + }, + { // Entry 160 + 0.0, + 0x1.p0 + } +}; diff --git a/tests/math_data/asin_intel_data.h b/tests/math_data/asin_intel_data.h new file mode 100644 index 000000000..7d16a4ba4 --- /dev/null +++ b/tests/math_data/asin_intel_data.h @@ -0,0 +1,2774 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_asin_intel_data[] = { + { // Entry 0 + 0x1.9283586503fe000000000000000e46aap-5, + 0x1.9259e3708bd3ap-5 + }, + { // Entry 1 + -0x1.9283586503fe000000000000000e46aap-5, + -0x1.9259e3708bd3ap-5 + }, + { // Entry 2 + 0x1.d7bdcd778049f00000000000000d57e1p-5, + 0x1.d77b117f230d6p-5 + }, + { // Entry 3 + -0x1.d7bdcd778049f00000000000000d57e1p-5, + -0x1.d77b117f230d6p-5 + }, + { // Entry 4 + 0x1.a202b3fb84788000000000000056edb7p-4, + 0x1.a1490c8c06ba7p-4 + }, + { // Entry 5 + -0x1.a202b3fb84788000000000000056edb7p-4, + -0x1.a1490c8c06ba7p-4 + }, + { // Entry 6 + 0x1.994ffb5daf0f97ffffffffffffa81adap-3, + 0x1.9697cb602c582p-3 + }, + { // Entry 7 + -0x1.994ffb5daf0f97ffffffffffffa81adap-3, + -0x1.9697cb602c582p-3 + }, + { // Entry 8 + 0x1.d5064e6fe82c4fffffffffffff9ed184p-3, + 0x1.d0ef799001ba9p-3 + }, + { // Entry 9 + -0x1.d5064e6fe82c4fffffffffffff9ed184p-3, + -0x1.d0ef799001ba9p-3 + }, + { // Entry 10 + 0x1.fe767739d0f6d0000000000000000458p-2, + 0x1.e9950730c4696p-2 + }, + { // Entry 11 + -0x1.fe767739d0f6d0000000000000000458p-2, + -0x1.e9950730c4696p-2 + }, + { // Entry 12 + 0x1.30706f699466d7ffffffffffff5f2011p-1, + 0x1.1ed06d50f7e88p-1 + }, + { // Entry 13 + -0x1.30706f699466d7ffffffffffff5f2011p-1, + -0x1.1ed06d50f7e88p-1 + }, + { // Entry 14 + 0x1.29517ab4c132a800000000000089db56p0, + 0x1.d5b05a89d3e77p-1 + }, + { // Entry 15 + -0x1.29517ab4c132a800000000000089db56p0, + -0x1.d5b05a89d3e77p-1 + }, + { // Entry 16 + 0x1.3aa301f6ebb1dfffffffffffff16c28cp0, + 0x1.e264357ea0e29p-1 + }, + { // Entry 17 + -0x1.3aa301f6ebb1dfffffffffffff16c28cp0, + -0x1.e264357ea0e29p-1 + }, + { // Entry 18 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.0p-1 + }, + { // Entry 19 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.0p-1 + }, + { // Entry 20 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 21 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 22 + -0x1.0000000000001002aaaaaaaaaaab2abdp-30, + -0x1.0000000000001p-30 + }, + { // Entry 23 + 0x1.0000000000001002aaaaaaaaaaab2abdp-30, + 0x1.0000000000001p-30 + }, + { // Entry 24 + -0x1.1fc5e19315892ffd69defb731e5b723ap-2, + -0x1.1c0p-2 + }, + { // Entry 25 + 0x1.1fc5e19315892ffd69defb731e5b723ap-2, + 0x1.1c0p-2 + }, + { // Entry 26 + -0x1.322f6d8e910113592ff4014f403aad06p-1, + -0x1.20424621202acp-1 + }, + { // Entry 27 + 0x1.322f6d8e910113592ff4014f403aad06p-1, + 0x1.20424621202acp-1 + }, + { // Entry 28 + -0x1.57c8d32d4c7a763ab677a006ae66467fp-1, + -0x1.3e872c7cba096p-1 + }, + { // Entry 29 + 0x1.57c8d32d4c7a763ab677a006ae66467fp-1, + 0x1.3e872c7cba096p-1 + }, + { // Entry 30 + -0x1.759edd04f68e48001bb07775889fc8a5p-1, + -0x1.555555555555ap-1 + }, + { // Entry 31 + 0x1.759edd04f68e48001bb07775889fc8a5p-1, + 0x1.555555555555ap-1 + }, + { // Entry 32 + -0x1.782333f928813ffec11dba3a89d05c6cp-1, + -0x1.573489b9ae5adp-1 + }, + { // Entry 33 + 0x1.782333f928813ffec11dba3a89d05c6cp-1, + 0x1.573489b9ae5adp-1 + }, + { // Entry 34 + -0x1.94d8b4c7808fb7a87e757b5f42035aacp-1, + -0x1.6bf5707aa0f6bp-1 + }, + { // Entry 35 + 0x1.94d8b4c7808fb7a87e757b5f42035aacp-1, + 0x1.6bf5707aa0f6bp-1 + }, + { // Entry 36 + -0x1.b235315cc8d0081c027b42e63e305a66p-1, + -0x1.800000004p-1 + }, + { // Entry 37 + 0x1.b235315cc8d0081c027b42e63e305a66p-1, + 0x1.800000004p-1 + }, + { // Entry 38 + -0x1.96b6e8a201871000f870b24841c05f73p-4, + -0x1.960be5db7a892p-4 + }, + { // Entry 39 + 0x1.96b6e8a201871000f870b24841c05f73p-4, + 0x1.960be5db7a892p-4 + }, + { // Entry 40 + -0x1.98ad7f9954c2c000dda10069f24bfb9fp-4, + -0x1.980p-4 + }, + { // Entry 41 + 0x1.98ad7f9954c2c000dda10069f24bfb9fp-4, + 0x1.980p-4 + }, + { // Entry 42 + -0x1.aa371ee73bd1c8079ffffa36ba5e5d8cp-2, + -0x1.9e03d2f534734p-2 + }, + { // Entry 43 + 0x1.aa371ee73bd1c8079ffffa36ba5e5d8cp-2, + 0x1.9e03d2f534734p-2 + }, + { // Entry 44 + -0x1.ed27cb01adedd7ae3d6cfc08b5b1ca73p-1, + -0x1.a45ca57a33fcdp-1 + }, + { // Entry 45 + 0x1.ed27cb01adedd7ae3d6cfc08b5b1ca73p-1, + 0x1.a45ca57a33fcdp-1 + }, + { // Entry 46 + -0x1.b34d1c29d5ccbffecdc2bdebc095bf13p-6, + -0x1.b34p-6 + }, + { // Entry 47 + 0x1.b34d1c29d5ccbffecdc2bdebc095bf13p-6, + 0x1.b34p-6 + }, + { // Entry 48 + -0x1.bf79714a2c1567fffff9585f49069adbp-15, + -0x1.bf7971469ca1fp-15 + }, + { // Entry 49 + 0x1.bf79714a2c1567fffff9585f49069adbp-15, + 0x1.bf7971469ca1fp-15 + }, + { // Entry 50 + -0x1.bf79714a2c19b8000013b283b77d9f82p-15, + -0x1.bf7971469ca64p-15 + }, + { // Entry 51 + 0x1.bf79714a2c19b8000013b283b77d9f82p-15, + 0x1.bf7971469ca64p-15 + }, + { // Entry 52 + -0x1.cfaf2746103107617c4b6b2c15223d0dp-2, + -0x1.c0000000003ffp-2 + }, + { // Entry 53 + 0x1.cfaf2746103107617c4b6b2c15223d0dp-2, + 0x1.c0000000003ffp-2 + }, + { // Entry 54 + -0x1.0129be4949aae7feec564fbe5489c78ep-1, + -0x1.ecf8cad745f54p-2 + }, + { // Entry 55 + 0x1.0129be4949aae7feec564fbe5489c78ep-1, + 0x1.ecf8cad745f54p-2 + }, + { // Entry 56 + -0x1.5047d77b0f8938000011f5af41f72c88p0, + -0x1.ef28841197292p-1 + }, + { // Entry 57 + 0x1.5047d77b0f8938000011f5af41f72c88p0, + 0x1.ef28841197292p-1 + }, + { // Entry 58 + -0x1.fb9f1177a8157880070f3ad2a1f9422ep-6, + -0x1.fb8a474fa66d0p-6 + }, + { // Entry 59 + 0x1.fb9f1177a8157880070f3ad2a1f9422ep-6, + 0x1.fb8a474fa66d0p-6 + }, + { // Entry 60 + -0x1.7b9033edad533793d172bb5d680b97b4p0, + -0x1.fe0359a2193f8p-1 + }, + { // Entry 61 + 0x1.7b9033edad533793d172bb5d680b97b4p0, + 0x1.fe0359a2193f8p-1 + }, + { // Entry 62 + -0x1.7b9033f17fe8b7728028f04d5b42dfa4p0, + -0x1.fe0359a2c5813p-1 + }, + { // Entry 63 + 0x1.7b9033f17fe8b7728028f04d5b42dfa4p0, + 0x1.fe0359a2c5813p-1 + }, + { // Entry 64 + -0x1.7da665f5fe592780850c1bef60fac479p0, + -0x1.fe5d0b4f2f569p-1 + }, + { // Entry 65 + 0x1.7da665f5fe592780850c1bef60fac479p0, + 0x1.fe5d0b4f2f569p-1 + }, + { // Entry 66 + -0x1.ff348201393248a795686f3f0d307c5ap-6, + -0x1.ff1f4655459b6p-6 + }, + { // Entry 67 + 0x1.ff348201393248a795686f3f0d307c5ap-6, + 0x1.ff1f4655459b6p-6 + }, + { // Entry 68 + 0x1.0000000000001002aaaaaaaaaaab2abdp-30, + 0x1.0000000000001p-30 + }, + { // Entry 69 + -0x1.0000000000001002aaaaaaaaaaab2abdp-30, + -0x1.0000000000001p-30 + }, + { // Entry 70 + 0x1.0c152382d736d999ee9a1f752604d40ep-1, + 0x1.0000000000007p-1 + }, + { // Entry 71 + -0x1.0c152382d736d999ee9a1f752604d40ep-1, + -0x1.0000000000007p-1 + }, + { // Entry 72 + 0x1.0c152382d7495341342a52c5694cd736p-1, + 0x1.0000000000107p-1 + }, + { // Entry 73 + -0x1.0c152382d7495341342a52c5694cd736p-1, + -0x1.0000000000107p-1 + }, + { // Entry 74 + 0x1.0c152382d74c92a39b64abd4b3dd08c3p-1, + 0x1.0000000000134p-1 + }, + { // Entry 75 + -0x1.0c152382d74c92a39b64abd4b3dd08c3p-1, + -0x1.0000000000134p-1 + }, + { // Entry 76 + 0x1.000aabde0bba85978d6ad9f48828ec86p-5, + 0x1.00000000001e0p-5 + }, + { // Entry 77 + -0x1.000aabde0bba85978d6ad9f48828ec86p-5, + -0x1.00000000001e0p-5 + }, + { // Entry 78 + 0x1.000aabde0bbc75d5990d467c55b9ae34p-5, + 0x1.00000000001ffp-5 + }, + { // Entry 79 + -0x1.000aabde0bbc75d5990d467c55b9ae34p-5, + -0x1.00000000001ffp-5 + }, + { // Entry 80 + 0x1.000aabde0c8daffe80d2e7d3e14097d7p-5, + 0x1.0000000000f11p-5 + }, + { // Entry 81 + -0x1.000aabde0c8daffe80d2e7d3e14097d7p-5, + -0x1.0000000000f11p-5 + }, + { // Entry 82 + 0x1.02be9ce0ba0b280001c151672b571466p-2, + 0x1.000000000181bp-2 + }, + { // Entry 83 + -0x1.02be9ce0ba0b280001c151672b571466p-2, + -0x1.000000000181bp-2 + }, + { // Entry 84 + 0x1.0c152382de23f70071cd464afd26d0adp-1, + 0x1.00000000060p-1 + }, + { // Entry 85 + -0x1.0c152382de23f70071cd464afd26d0adp-1, + -0x1.00000000060p-1 + }, + { // Entry 86 + 0x1.0c152382f2ecd32eb46eb26eaa3a3436p-1, + 0x1.00000000180p-1 + }, + { // Entry 87 + -0x1.0c152382f2ecd32eb46eb26eaa3a3436p-1, + -0x1.00000000180p-1 + }, + { // Entry 88 + 0x1.0c1523836b039272e99d2aa6c733fbd4p-1, + 0x1.000000008p-1 + }, + { // Entry 89 + -0x1.0c1523836b039272e99d2aa6c733fbd4p-1, + -0x1.000000008p-1 + }, + { // Entry 90 + 0x1.0c15258825828aed7433be734fa034e0p-1, + 0x1.000001cp-1 + }, + { // Entry 91 + -0x1.0c15258825828aed7433be734fa034e0p-1, + -0x1.000001cp-1 + }, + { // Entry 92 + 0x1.0c15258d2e27e114dc33e19be219a967p-1, + 0x1.000001c45c0p-1 + }, + { // Entry 93 + -0x1.0c15258d2e27e114dc33e19be219a967p-1, + -0x1.000001c45c0p-1 + }, + { // Entry 94 + 0x1.02c23a43a81227fff55e30293b8669cfp-2, + 0x1.00038p-2 + }, + { // Entry 95 + -0x1.02c23a43a81227fff55e30293b8669cfp-2, + -0x1.00038p-2 + }, + { // Entry 96 + 0x1.0032c1ec76116800257dc6de53c0616ep-4, + 0x1.0007fffffffd1p-4 + }, + { // Entry 97 + -0x1.0032c1ec76116800257dc6de53c0616ep-4, + -0x1.0007fffffffd1p-4 + }, + { // Entry 98 + 0x1.0c279d5b633cdc69f2775e85622dc4a2p-1, + 0x1.001p-1 + }, + { // Entry 99 + -0x1.0c279d5b633cdc69f2775e85622dc4a2p-1, + -0x1.001p-1 + }, + { // Entry 100 + 0x1.0c4c923447087dae5cae7c825ed2a0ccp-1, + 0x1.003p-1 + }, + { // Entry 101 + -0x1.0c4c923447087dae5cae7c825ed2a0ccp-1, + -0x1.003p-1 + }, + { // Entry 102 + 0x1.0c55cfa828c0b38becd1409b658d6950p-1, + 0x1.00380p-1 + }, + { // Entry 103 + -0x1.0c55cfa828c0b38becd1409b658d6950p-1, + -0x1.00380p-1 + }, + { // Entry 104 + 0x1.0062da048ea0d7efd536d5c643e9f215p-4, + 0x1.00380p-4 + }, + { // Entry 105 + -0x1.0062da048ea0d7efd536d5c643e9f215p-4, + -0x1.00380p-4 + }, + { // Entry 106 + 0x1.00402aaac5e698004c94e39262202714p-8, + 0x1.003fffep-8 + }, + { // Entry 107 + -0x1.00402aaac5e698004c94e39262202714p-8, + -0x1.003fffep-8 + }, + { // Entry 108 + 0x1.0c9720590ac37fd593221825ec3a084bp-1, + 0x1.00708a54b2c67p-1 + }, + { // Entry 109 + -0x1.0c9720590ac37fd593221825ec3a084bp-1, + -0x1.00708a54b2c67p-1 + }, + { // Entry 110 + 0x1.00c00000000000000000000ac2bcaf2ap-45, + 0x1.00cp-45 + }, + { // Entry 111 + -0x1.00c00000000000000000000ac2bcaf2ap-45, + -0x1.00cp-45 + }, + { // Entry 112 + 0x1.0d96e57290c3f1c3681bab8c1f00b39cp-1, + 0x1.014dcaa237970p-1 + }, + { // Entry 113 + -0x1.0d96e57290c3f1c3681bab8c1f00b39cp-1, + -0x1.014dcaa237970p-1 + }, + { // Entry 114 + 0x1.0dabf55dce937f7558a8b531d459f15ep-1, + 0x1.016p-1 + }, + { // Entry 115 + -0x1.0dabf55dce937f7558a8b531d459f15ep-1, + -0x1.016p-1 + }, + { // Entry 116 + 0x1.0dc2ef671d6c33eaa546ddae05d5e453p-1, + 0x1.0173dc94b6306p-1 + }, + { // Entry 117 + -0x1.0dc2ef671d6c33eaa546ddae05d5e453p-1, + -0x1.0173dc94b6306p-1 + }, + { // Entry 118 + 0x1.0f1e6ec54eea2c73401f62badd2976acp-1, + 0x1.02ap-1 + }, + { // Entry 119 + -0x1.0f1e6ec54eea2c73401f62badd2976acp-1, + -0x1.02ap-1 + }, + { // Entry 120 + 0x1.0f4da9229cffec0c3743997491f11d56p-1, + 0x1.02c8c16dc1934p-1 + }, + { // Entry 121 + -0x1.0f4da9229cffec0c3743997491f11d56p-1, + -0x1.02c8c16dc1934p-1 + }, + { // Entry 122 + 0x1.0f6899dc73e34a54ad3cce806ce29011p-1, + 0x1.02ep-1 + }, + { // Entry 123 + -0x1.0f6899dc73e34a54ad3cce806ce29011p-1, + -0x1.02ep-1 + }, + { // Entry 124 + 0x1.0f838e30479aba67ec652b632028fefap-1, + 0x1.02f740f61e37ap-1 + }, + { // Entry 125 + -0x1.0f838e30479aba67ec652b632028fefap-1, + -0x1.02f740f61e37ap-1 + }, + { // Entry 126 + 0x1.0fe301c2f5be2a63ef5b2626fe19c78ap-1, + 0x1.034993ee3b8dap-1 + }, + { // Entry 127 + -0x1.0fe301c2f5be2a63ef5b2626fe19c78ap-1, + -0x1.034993ee3b8dap-1 + }, + { // Entry 128 + 0x1.1022212ba23069c4a937494d32fea558p-1, + 0x1.038p-1 + }, + { // Entry 129 + -0x1.1022212ba23069c4a937494d32fea558p-1, + -0x1.038p-1 + }, + { // Entry 130 + 0x1.10282996f9883a58886ba1799ed5dd8ep-1, + 0x1.038533564d2f6p-1 + }, + { // Entry 131 + -0x1.10282996f9883a58886ba1799ed5dd8ep-1, + -0x1.038533564d2f6p-1 + }, + { // Entry 132 + 0x1.1066e87eac0fa20763c3465fae49f6f3p-1, + 0x1.03bb47eba27acp-1 + }, + { // Entry 133 + -0x1.1066e87eac0fa20763c3465fae49f6f3p-1, + -0x1.03bb47eba27acp-1 + }, + { // Entry 134 + 0x1.10cbb4c8656620d5e25de954cc196a15p-1, + 0x1.04122069afab2p-1 + }, + { // Entry 135 + -0x1.10cbb4c8656620d5e25de954cc196a15p-1, + -0x1.04122069afab2p-1 + }, + { // Entry 136 + 0x1.116717f96556ee4420b909b7fa6b63dfp-1, + 0x1.0497edab6ede1p-1 + }, + { // Entry 137 + -0x1.116717f96556ee4420b909b7fa6b63dfp-1, + -0x1.0497edab6ede1p-1 + }, + { // Entry 138 + 0x1.1179dbb27e582d73878c014b8e3e1cc0p-1, + 0x1.04a814758e0f8p-1 + }, + { // Entry 139 + -0x1.1179dbb27e582d73878c014b8e3e1cc0p-1, + -0x1.04a814758e0f8p-1 + }, + { // Entry 140 + 0x1.1198c0d79289b2f9f277c2f3a7a05d25p-1, + 0x1.04c2ab77cf474p-1 + }, + { // Entry 141 + -0x1.1198c0d79289b2f9f277c2f3a7a05d25p-1, + -0x1.04c2ab77cf474p-1 + }, + { // Entry 142 + 0x1.196875557f2137d39d74d174f529db4bp-1, + 0x1.0b73c2dcdc2b8p-1 + }, + { // Entry 143 + -0x1.196875557f2137d39d74d174f529db4bp-1, + -0x1.0b73c2dcdc2b8p-1 + }, + { // Entry 144 + 0x1.1b553e4436fee055d4d2c67c601a0212p-1, + 0x1.0d177bea3f610p-1 + }, + { // Entry 145 + -0x1.1b553e4436fee055d4d2c67c601a0212p-1, + -0x1.0d177bea3f610p-1 + }, + { // Entry 146 + 0x1.1c38449a61c9580d6859380e343d833cp-1, + 0x1.0dd885a3ef4fcp-1 + }, + { // Entry 147 + -0x1.1c38449a61c9580d6859380e343d833cp-1, + -0x1.0dd885a3ef4fcp-1 + }, + { // Entry 148 + 0x1.1cc4b3c079836265872b7d492044d616p-1, + 0x1.0e4fd42b1d0e6p-1 + }, + { // Entry 149 + -0x1.1cc4b3c079836265872b7d492044d616p-1, + -0x1.0e4fd42b1d0e6p-1 + }, + { // Entry 150 + 0x1.1cfd6e266de95f1bf48764f46577e309p-1, + 0x1.0e8p-1 + }, + { // Entry 151 + -0x1.1cfd6e266de95f1bf48764f46577e309p-1, + -0x1.0e8p-1 + }, + { // Entry 152 + 0x1.21cdcf52000c220a966befeb62e640f6p-1, + 0x1.129345051b29dp-1 + }, + { // Entry 153 + -0x1.21cdcf52000c220a966befeb62e640f6p-1, + -0x1.129345051b29dp-1 + }, + { // Entry 154 + 0x1.130d3aa02dac280175032d7dcd901029p-5, + 0x1.130p-5 + }, + { // Entry 155 + -0x1.130d3aa02dac280175032d7dcd901029p-5, + -0x1.130p-5 + }, + { // Entry 156 + 0x1.140000000d5df80001bf7913cb80995cp-17, + 0x1.140p-17 + }, + { // Entry 157 + -0x1.140000000d5df80001bf7913cb80995cp-17, + -0x1.140p-17 + }, + { // Entry 158 + 0x1.2775c4b617d654588958a178dea861bap-1, + 0x1.1755174d62823p-1 + }, + { // Entry 159 + -0x1.2775c4b617d654588958a178dea861bap-1, + -0x1.1755174d62823p-1 + }, + { // Entry 160 + 0x1.199af8e5ca4257fcd763543b8f3fce81p-5, + 0x1.198cc66331980p-5 + }, + { // Entry 161 + -0x1.199af8e5ca4257fcd763543b8f3fce81p-5, + -0x1.198cc66331980p-5 + }, + { // Entry 162 + 0x1.2c5ab8264bdbb3e1bc65214317759a09p-1, + 0x1.1b6bdc91e8ed8p-1 + }, + { // Entry 163 + -0x1.2c5ab8264bdbb3e1bc65214317759a09p-1, + -0x1.1b6bdc91e8ed8p-1 + }, + { // Entry 164 + 0x1.2cee00a870ba528fbe6b9f3cda1408b3p-1, + 0x1.1be67991de2d4p-1 + }, + { // Entry 165 + -0x1.2cee00a870ba528fbe6b9f3cda1408b3p-1, + -0x1.1be67991de2d4p-1 + }, + { // Entry 166 + 0x1.1fc5e19315892ffd69defb731e5b723ap-2, + 0x1.1c0p-2 + }, + { // Entry 167 + -0x1.1fc5e19315892ffd69defb731e5b723ap-2, + -0x1.1c0p-2 + }, + { // Entry 168 + 0x1.2febc655185c99c444ff04c55bfb6d66p-1, + 0x1.1e627f69af588p-1 + }, + { // Entry 169 + -0x1.2febc655185c99c444ff04c55bfb6d66p-1, + -0x1.1e627f69af588p-1 + }, + { // Entry 170 + 0x1.30d8a981b9948a394e1467470cfad235p-1, + 0x1.1f26bdf8a0343p-1 + }, + { // Entry 171 + -0x1.30d8a981b9948a394e1467470cfad235p-1, + -0x1.1f26bdf8a0343p-1 + }, + { // Entry 172 + 0x1.30f8d6bccdf217fff8c0dda31391974fp-1, + 0x1.1f41613172746p-1 + }, + { // Entry 173 + -0x1.30f8d6bccdf217fff8c0dda31391974fp-1, + -0x1.1f41613172746p-1 + }, + { // Entry 174 + 0x1.3110249047eaf30fc3ba6988a43b8ccbp-1, + 0x1.1f54ab50e347ep-1 + }, + { // Entry 175 + -0x1.3110249047eaf30fc3ba6988a43b8ccbp-1, + -0x1.1f54ab50e347ep-1 + }, + { // Entry 176 + 0x1.31462f20d3145a25898cd5561126dbefp-1, + 0x1.1f816460b6e0dp-1 + }, + { // Entry 177 + -0x1.31462f20d3145a25898cd5561126dbefp-1, + -0x1.1f816460b6e0dp-1 + }, + { // Entry 178 + 0x1.31ef197bde35531a915e264fef2305e8p-1, + 0x1.200d19c3f0b0bp-1 + }, + { // Entry 179 + -0x1.31ef197bde35531a915e264fef2305e8p-1, + -0x1.200d19c3f0b0bp-1 + }, + { // Entry 180 + 0x1.321d12e54f83b31627f80c3fa62b7ca1p-1, + 0x1.20331ab8a7458p-1 + }, + { // Entry 181 + -0x1.321d12e54f83b31627f80c3fa62b7ca1p-1, + -0x1.20331ab8a7458p-1 + }, + { // Entry 182 + 0x1.2177521a338b07fff0d9c9957c5a6cebp-16, + 0x1.21775219f5dc5p-16 + }, + { // Entry 183 + -0x1.2177521a338b07fff0d9c9957c5a6cebp-16, + -0x1.21775219f5dc5p-16 + }, + { // Entry 184 + 0x1.3e67925d0e6f8bcbb21a79d27ecca7d2p-1, + 0x1.2a46471805efdp-1 + }, + { // Entry 185 + -0x1.3e67925d0e6f8bcbb21a79d27ecca7d2p-1, + -0x1.2a46471805efdp-1 + }, + { // Entry 186 + 0x1.2bb1862a568148015c0bf4a2a7154dc1p-3, + 0x1.2aap-3 + }, + { // Entry 187 + -0x1.2bb1862a568148015c0bf4a2a7154dc1p-3, + -0x1.2aap-3 + }, + { // Entry 188 + 0x1.3f6fd0f27823d7fefc74a71eccd96298p-1, + 0x1.2b1ce548833aep-1 + }, + { // Entry 189 + -0x1.3f6fd0f27823d7fefc74a71eccd96298p-1, + -0x1.2b1ce548833aep-1 + }, + { // Entry 190 + 0x1.411bb49364c5ea4184bb3805a893e054p-1, + 0x1.2c77c3b7fadbcp-1 + }, + { // Entry 191 + -0x1.411bb49364c5ea4184bb3805a893e054p-1, + -0x1.2c77c3b7fadbcp-1 + }, + { // Entry 192 + 0x1.442ff6c0f5d4d7fe7775e70c3e4e8219p-1, + 0x1.2ef49e5511ddfp-1 + }, + { // Entry 193 + -0x1.442ff6c0f5d4d7fe7775e70c3e4e8219p-1, + -0x1.2ef49e5511ddfp-1 + }, + { // Entry 194 + 0x1.443fecfebc1df7de68052624a8b1d61dp-1, + 0x1.2f017c4fe3544p-1 + }, + { // Entry 195 + -0x1.443fecfebc1df7de68052624a8b1d61dp-1, + -0x1.2f017c4fe3544p-1 + }, + { // Entry 196 + 0x1.457bf318fe516a79da6f4a61af7a7fa5p-1, + 0x1.3p-1 + }, + { // Entry 197 + -0x1.457bf318fe516a79da6f4a61af7a7fa5p-1, + -0x1.3p-1 + }, + { // Entry 198 + 0x1.5ccd5c05e68fb800000849ddd0fe2ca5p-1, + 0x1.4270ed4aad70ep-1 + }, + { // Entry 199 + -0x1.5ccd5c05e68fb800000849ddd0fe2ca5p-1, + -0x1.4270ed4aad70ep-1 + }, + { // Entry 200 + 0x1.44000000159fd80003e593b785ba9626p-17, + 0x1.440p-17 + }, + { // Entry 201 + -0x1.44000000159fd80003e593b785ba9626p-17, + -0x1.440p-17 + }, + { // Entry 202 + 0x1.63b1cbb66b8a17ae1fd76035d949e2b7p-1, + 0x1.47c3fdc9bf433p-1 + }, + { // Entry 203 + -0x1.63b1cbb66b8a17ae1fd76035d949e2b7p-1, + -0x1.47c3fdc9bf433p-1 + }, + { // Entry 204 + 0x1.65fc8f66ba692e01a5afda7ace8deae2p-1, + 0x1.4985ec22e7bf6p-1 + }, + { // Entry 205 + -0x1.65fc8f66ba692e01a5afda7ace8deae2p-1, + -0x1.4985ec22e7bf6p-1 + }, + { // Entry 206 + 0x1.4d78bac08656681847462467555e549bp-3, + 0x1.4c0p-3 + }, + { // Entry 207 + -0x1.4d78bac08656681847462467555e549bp-3, + -0x1.4c0p-3 + }, + { // Entry 208 + 0x1.6d59bfe3f2224f6000acc00b769ed440p-1, + 0x1.4f2p-1 + }, + { // Entry 209 + -0x1.6d59bfe3f2224f6000acc00b769ed440p-1, + -0x1.4f2p-1 + }, + { // Entry 210 + 0x1.5000000000207800000013a839333343p-20, + 0x1.4fffffffffcp-20 + }, + { // Entry 211 + -0x1.5000000000207800000013a839333343p-20, + -0x1.4fffffffffcp-20 + }, + { // Entry 212 + 0x1.500000000060780000004ac83933337fp-20, + 0x1.5p-20 + }, + { // Entry 213 + -0x1.500000000060780000004ac83933337fp-20, + -0x1.5p-20 + }, + { // Entry 214 + 0x1.55277b9f38d027ffff30112bed0c9f0fp-4, + 0x1.54c28a8e4f3e2p-4 + }, + { // Entry 215 + -0x1.55277b9f38d027ffff30112bed0c9f0fp-4, + -0x1.54c28a8e4f3e2p-4 + }, + { // Entry 216 + 0x1.5ed2a392bb50f7fad69db4d959b3510ap-2, + 0x1.580p-2 + }, + { // Entry 217 + -0x1.5ed2a392bb50f7fad69db4d959b3510ap-2, + -0x1.580p-2 + }, + { // Entry 218 + 0x1.7f1f4917c72b6003b55c8200e8dcecc0p-1, + 0x1.5c5b3407f55e1p-1 + }, + { // Entry 219 + -0x1.7f1f4917c72b6003b55c8200e8dcecc0p-1, + -0x1.5c5b3407f55e1p-1 + }, + { // Entry 220 + 0x1.8b6201c0f179080000d81b7964ae4654p-1, + 0x1.653da5baf7440p-1 + }, + { // Entry 221 + -0x1.8b6201c0f179080000d81b7964ae4654p-1, + -0x1.653da5baf7440p-1 + }, + { // Entry 222 + 0x1.7250952ca29c0813f4e50a0ad18f3648p-2, + 0x1.6a4bb63c82129p-2 + }, + { // Entry 223 + -0x1.7250952ca29c0813f4e50a0ad18f3648p-2, + -0x1.6a4bb63c82129p-2 + }, + { // Entry 224 + 0x1.77b27e3a4418480d8c0062be11693e16p-2, + 0x1.6f533603e2320p-2 + }, + { // Entry 225 + -0x1.77b27e3a4418480d8c0062be11693e16p-2, + -0x1.6f533603e2320p-2 + }, + { // Entry 226 + 0x1.9e149bad9649280000eb9dad7440c574p-1, + 0x1.7264d0bec49b2p-1 + }, + { // Entry 227 + -0x1.9e149bad9649280000eb9dad7440c574p-1, + -0x1.7264d0bec49b2p-1 + }, + { // Entry 228 + 0x1.7cc0ee7ed8ad48137e185fb9156bae4cp-2, + 0x1.740a59647d7a5p-2 + }, + { // Entry 229 + -0x1.7cc0ee7ed8ad48137e185fb9156bae4cp-2, + -0x1.740a59647d7a5p-2 + }, + { // Entry 230 + 0x1.a207566488fc97fcadc30933e3392d3dp-1, + 0x1.751bcca851309p-1 + }, + { // Entry 231 + -0x1.a207566488fc97fcadc30933e3392d3dp-1, + -0x1.751bcca851309p-1 + }, + { // Entry 232 + 0x1.7e693c113d4a4814c150d8ac5b0c8d53p-2, + 0x1.7595883b67f16p-2 + }, + { // Entry 233 + -0x1.7e693c113d4a4814c150d8ac5b0c8d53p-2, + -0x1.7595883b67f16p-2 + }, + { // Entry 234 + 0x1.7ee6be5058d0201a24d137f52ff6909ep-2, + 0x1.760a6116c7198p-2 + }, + { // Entry 235 + -0x1.7ee6be5058d0201a24d137f52ff6909ep-2, + -0x1.760a6116c7198p-2 + }, + { // Entry 236 + 0x1.a6a1bef361a7d7f9c2816e02dbac1bf5p-1, + 0x1.783ee81831665p-1 + }, + { // Entry 237 + -0x1.a6a1bef361a7d7f9c2816e02dbac1bf5p-1, + -0x1.783ee81831665p-1 + }, + { // Entry 238 + 0x1.86618612c359e81481d9a7341d6a2a51p-2, + 0x1.7cfe473430fc6p-2 + }, + { // Entry 239 + -0x1.86618612c359e81481d9a7341d6a2a51p-2, + -0x1.7cfe473430fc6p-2 + }, + { // Entry 240 + 0x1.88d8a3b14d9e1ff14bbde3d33d157530p-2, + 0x1.7f47cd10de0e8p-2 + }, + { // Entry 241 + -0x1.88d8a3b14d9e1ff14bbde3d33d157530p-2, + -0x1.7f47cd10de0e8p-2 + }, + { // Entry 242 + 0x1.8988868fc564c81982b2db8ce8bc0625p-2, + 0x1.7feae137d5ddep-2 + }, + { // Entry 243 + -0x1.8988868fc564c81982b2db8ce8bc0625p-2, + -0x1.7feae137d5ddep-2 + }, + { // Entry 244 + 0x1.899fd8f017515812de14f44be98d055cp-2, + 0x1.80007ffffffffp-2 + }, + { // Entry 245 + -0x1.899fd8f017515812de14f44be98d055cp-2, + -0x1.80007ffffffffp-2 + }, + { // Entry 246 + 0x1.b27ae0f5ee6e67fffb44fb3a0cb3c215p-1, + 0x1.802e143a91c4ep-1 + }, + { // Entry 247 + -0x1.b27ae0f5ee6e67fffb44fb3a0cb3c215p-1, + -0x1.802e143a91c4ep-1 + }, + { // Entry 248 + 0x1.8b7809bb86ae17ec6c24da984138f419p-2, + 0x1.81b612840dbaep-2 + }, + { // Entry 249 + -0x1.8b7809bb86ae17ec6c24da984138f419p-2, + -0x1.81b612840dbaep-2 + }, + { // Entry 250 + 0x1.8f91c0fb8e2e97ef847eab1159f00cc6p-2, + 0x1.8581ade28355fp-2 + }, + { // Entry 251 + -0x1.8f91c0fb8e2e97ef847eab1159f00cc6p-2, + -0x1.8581ade28355fp-2 + }, + { // Entry 252 + 0x1.8c16f3fc4a5840013187c62d948aa003p-3, + 0x1.89ap-3 + }, + { // Entry 253 + -0x1.8c16f3fc4a5840013187c62d948aa003p-3, + -0x1.89ap-3 + }, + { // Entry 254 + 0x1.c1e120b980b3cf3fbf17268200fc8ffbp-1, + 0x1.8a2f2f54d849ep-1 + }, + { // Entry 255 + -0x1.c1e120b980b3cf3fbf17268200fc8ffbp-1, + -0x1.8a2f2f54d849ep-1 + }, + { // Entry 256 + 0x1.95b5a93656211806335e5300e251533cp-2, + 0x1.8b2da077338c2p-2 + }, + { // Entry 257 + -0x1.95b5a93656211806335e5300e251533cp-2, + -0x1.8b2da077338c2p-2 + }, + { // Entry 258 + 0x1.90cc7766b33bd000fff143442b4e2043p-4, + 0x1.9028ceb4afd2cp-4 + }, + { // Entry 259 + -0x1.90cc7766b33bd000fff143442b4e2043p-4, + -0x1.9028ceb4afd2cp-4 + }, + { // Entry 260 + 0x1.cbe2739ce56927fbb7d0777fc5057965p-1, + 0x1.907e632b1000ep-1 + }, + { // Entry 261 + -0x1.cbe2739ce56927fbb7d0777fc5057965p-1, + -0x1.907e632b1000ep-1 + }, + { // Entry 262 + 0x1.9eff7d224a10cffd0ccc2eea39c4ecacp-2, + 0x1.93bb0fc0700b7p-2 + }, + { // Entry 263 + -0x1.9eff7d224a10cffd0ccc2eea39c4ecacp-2, + -0x1.93bb0fc0700b7p-2 + }, + { // Entry 264 + 0x1.a0552aa49b7117fa53b105630024fe49p-2, + 0x1.94f4f95477d9ep-2 + }, + { // Entry 265 + -0x1.a0552aa49b7117fa53b105630024fe49p-2, + -0x1.94f4f95477d9ep-2 + }, + { // Entry 266 + 0x1.994ffb5daf0f97ffffffffffffa81adap-3, + 0x1.9697cb602c582p-3 + }, + { // Entry 267 + -0x1.994ffb5daf0f97ffffffffffffa81adap-3, + -0x1.9697cb602c582p-3 + }, + { // Entry 268 + 0x1.98ad7f9954c2c000dda10069f24bfb9fp-4, + 0x1.980p-4 + }, + { // Entry 269 + -0x1.98ad7f9954c2c000dda10069f24bfb9fp-4, + -0x1.980p-4 + }, + { // Entry 270 + 0x1.9c618aafabed50000080bb9d9c6d602ep-3, + 0x1.999999a45e898p-3 + }, + { // Entry 271 + -0x1.9c618aafabed50000080bb9d9c6d602ep-3, + -0x1.999999a45e898p-3 + }, + { // Entry 272 + 0x1.9c618aafac061003732b347dbb6bf610p-3, + 0x1.999999a45ea1cp-3 + }, + { // Entry 273 + -0x1.9c618aafac061003732b347dbb6bf610p-3, + -0x1.999999a45ea1cp-3 + }, + { // Entry 274 + 0x1.9c618ab54a7b2ffe4628191f82391647p-3, + 0x1.999999a9e006dp-3 + }, + { // Entry 275 + -0x1.9c618ab54a7b2ffe4628191f82391647p-3, + -0x1.999999a9e006dp-3 + }, + { // Entry 276 + 0x1.9c618ab55b092ffd804a3f4bc32f43c6p-3, + 0x1.999999a9f03f3p-3 + }, + { // Entry 277 + -0x1.9c618ab55b092ffd804a3f4bc32f43c6p-3, + -0x1.999999a9f03f3p-3 + }, + { // Entry 278 + 0x1.ddedf400713097ce31df0888bcde8d69p-1, + 0x1.9b7c1d9445413p-1 + }, + { // Entry 279 + -0x1.ddedf400713097ce31df0888bcde8d69p-1, + -0x1.9b7c1d9445413p-1 + }, + { // Entry 280 + 0x1.eca34562d4a0d79516186d1c200eae46p-1, + 0x1.a410ef3ffe9b1p-1 + }, + { // Entry 281 + -0x1.eca34562d4a0d79516186d1c200eae46p-1, + -0x1.a410ef3ffe9b1p-1 + }, + { // Entry 282 + 0x1.f90469438f616801edb23ef0fcf7a322p-1, + 0x1.ab053825fa3c7p-1 + }, + { // Entry 283 + -0x1.f90469438f616801edb23ef0fcf7a322p-1, + -0x1.ab053825fa3c7p-1 + }, + { // Entry 284 + 0x1.b000000000cd0800000106bc80666823p-20, + 0x1.bp-20 + }, + { // Entry 285 + -0x1.b000000000cd0800000106bc80666823p-20, + -0x1.bp-20 + }, + { // Entry 286 + 0x1.b3b0da67543b3807834a8feb1c1eba94p-3, + 0x1.b0696dec2c0a1p-3 + }, + { // Entry 287 + -0x1.b3b0da67543b3807834a8feb1c1eba94p-3, + -0x1.b0696dec2c0a1p-3 + }, + { // Entry 288 + 0x1.04179cbe1e5c1fffff818794e482d547p0, + 0x1.b333333761245p-1 + }, + { // Entry 289 + -0x1.04179cbe1e5c1fffff818794e482d547p0, + -0x1.b333333761245p-1 + }, + { // Entry 290 + 0x1.b34d1c29d5ccbffecdc2bdebc095bf13p-6, + 0x1.b34p-6 + }, + { // Entry 291 + -0x1.b34d1c29d5ccbffecdc2bdebc095bf13p-6, + -0x1.b34p-6 + }, + { // Entry 292 + 0x1.0554bb3242a2a800df4cee49ca092177p0, + 0x1.b48p-1 + }, + { // Entry 293 + -0x1.0554bb3242a2a800df4cee49ca092177p0, + -0x1.b48p-1 + }, + { // Entry 294 + 0x1.b8a88f38bc5ac8137e8c7eb54443675ep-3, + 0x1.b54423c1483e2p-3 + }, + { // Entry 295 + -0x1.b8a88f38bc5ac8137e8c7eb54443675ep-3, + -0x1.b54423c1483e2p-3 + }, + { // Entry 296 + 0x1.07d8cdf7eeee880fbc5277faa149e24ap0, + 0x1.b71bdc2c4ecf6p-1 + }, + { // Entry 297 + -0x1.07d8cdf7eeee880fbc5277faa149e24ap0, + -0x1.b71bdc2c4ecf6p-1 + }, + { // Entry 298 + 0x1.bf06ca3159a247fffd949acbf7190141p-6, + 0x1.bef89775b5e88p-6 + }, + { // Entry 299 + -0x1.bf06ca3159a247fffd949acbf7190141p-6, + -0x1.bef89775b5e88p-6 + }, + { // Entry 300 + 0x1.ce8c7a50bddbaffeae205209c4b290fcp-2, + 0x1.befa8c764e35dp-2 + }, + { // Entry 301 + -0x1.ce8c7a50bddbaffeae205209c4b290fcp-2, + -0x1.befa8c764e35dp-2 + }, + { // Entry 302 + 0x1.cf79cf3c63f057d0885a264fa7e14a24p-2, + 0x1.bfd007a1b1a48p-2 + }, + { // Entry 303 + -0x1.cf79cf3c63f057d0885a264fa7e14a24p-2, + -0x1.bfd007a1b1a48p-2 + }, + { // Entry 304 + 0x1.c0e0d42a150f980e71b5f03eded5070fp-23, + 0x1.c0e0d42a150c0p-23 + }, + { // Entry 305 + -0x1.c0e0d42a150f980e71b5f03eded5070fp-23, + -0x1.c0e0d42a150c0p-23 + }, + { // Entry 306 + 0x1.c14a6c452bfa080160389f80233eca63p-6, + 0x1.c13c020751a78p-6 + }, + { // Entry 307 + -0x1.c14a6c452bfa080160389f80233eca63p-6, + -0x1.c13c020751a78p-6 + }, + { // Entry 308 + 0x1.d11a7b81b1c1e79cf616ad2e273afb43p-2, + 0x1.c1469a15e68f5p-2 + }, + { // Entry 309 + -0x1.d11a7b81b1c1e79cf616ad2e273afb43p-2, + -0x1.c1469a15e68f5p-2 + }, + { // Entry 310 + 0x1.16f4bb864adfc800008fd38fd1e04261p0, + 0x1.c5e01019009efp-1 + }, + { // Entry 311 + -0x1.16f4bb864adfc800008fd38fd1e04261p0, + -0x1.c5e01019009efp-1 + }, + { // Entry 312 + 0x1.c678548c22ba90p-115, + 0x1.c678548c22ba9p-115 + }, + { // Entry 313 + -0x1.c678548c22ba90p-115, + -0x1.c678548c22ba9p-115 + }, + { // Entry 314 + 0x1.d7efd0e20d07d8013801e962e317e549p-2, + 0x1.c767fffffffffp-2 + }, + { // Entry 315 + -0x1.d7efd0e20d07d8013801e962e317e549p-2, + -0x1.c767fffffffffp-2 + }, + { // Entry 316 + 0x1.c9e63f1fe0f0e821b29667bc4eb4d50bp-4, + 0x1.c8f23c8f23c8cp-4 + }, + { // Entry 317 + -0x1.c9e63f1fe0f0e821b29667bc4eb4d50bp-4, + -0x1.c8f23c8f23c8cp-4 + }, + { // Entry 318 + 0x1.1ea9370e567be7ffffffe01e15866a33p0, + 0x1.ccccccd416c08p-1 + }, + { // Entry 319 + -0x1.1ea9370e567be7ffffffe01e15866a33p0, + -0x1.ccccccd416c08p-1 + }, + { // Entry 320 + 0x1.22927e6073b4c80000d27967f2a7a4f7p0, + 0x1.d027e48f2c2bap-1 + }, + { // Entry 321 + -0x1.22927e6073b4c80000d27967f2a7a4f7p0, + -0x1.d027e48f2c2bap-1 + }, + { // Entry 322 + 0x1.d2e000000102cdc6eb418359d0682dedp-20, + 0x1.d2ep-20 + }, + { // Entry 323 + -0x1.d2e000000102cdc6eb418359d0682dedp-20, + -0x1.d2ep-20 + }, + { // Entry 324 + 0x1.281b4c2fcafe57fe16b4679be76d29f5p0, + 0x1.d4b81182fe13bp-1 + }, + { // Entry 325 + -0x1.281b4c2fcafe57fe16b4679be76d29f5p0, + -0x1.d4b81182fe13bp-1 + }, + { // Entry 326 + 0x1.e70a08011eeb97fb46e212681fd509f0p-2, + 0x1.d4e205cadb381p-2 + }, + { // Entry 327 + -0x1.e70a08011eeb97fb46e212681fd509f0p-2, + -0x1.d4e205cadb381p-2 + }, + { // Entry 328 + 0x1.d90d0803393b9819fec9e92bfd414223p-4, + 0x1.d80p-4 + }, + { // Entry 329 + -0x1.d90d0803393b9819fec9e92bfd414223p-4, + -0x1.d80p-4 + }, + { // Entry 330 + 0x1.3172527a00f7e8002439c6d9f1d3590dp0, + 0x1.dbec0e2ae5bdbp-1 + }, + { // Entry 331 + -0x1.3172527a00f7e8002439c6d9f1d3590dp0, + -0x1.dbec0e2ae5bdbp-1 + }, + { // Entry 332 + 0x1.dd2bf488d4241c11bf324d508cfacbeap-11, + 0x1.dd2bf03799278p-11 + }, + { // Entry 333 + -0x1.dd2bf488d4241c11bf324d508cfacbeap-11, + -0x1.dd2bf03799278p-11 + }, + { // Entry 334 + 0x1.f192112f19e6f7fc311ba78ec60abb13p-2, + 0x1.de386d60903a5p-2 + }, + { // Entry 335 + -0x1.f192112f19e6f7fc311ba78ec60abb13p-2, + -0x1.de386d60903a5p-2 + }, + { // Entry 336 + 0x1.f408515902f777fad5cb629690c96e8cp-2, + 0x1.e0655f628fcc4p-2 + }, + { // Entry 337 + -0x1.f408515902f777fad5cb629690c96e8cp-2, + -0x1.e0655f628fcc4p-2 + }, + { // Entry 338 + 0x1.f425d0cdf031d78d14e47ef92c30410dp-2, + 0x1.e07f6c11f3ad7p-2 + }, + { // Entry 339 + -0x1.f425d0cdf031d78d14e47ef92c30410dp-2, + -0x1.e07f6c11f3ad7p-2 + }, + { // Entry 340 + 0x1.e4c86c3587e888034c71e60a370d6263p-5, + 0x1.e48p-5 + }, + { // Entry 341 + -0x1.e4c86c3587e888034c71e60a370d6263p-5, + -0x1.e48p-5 + }, + { // Entry 342 + 0x1.e6c2ee85159eeffd05dd82882578d1d4p-5, + 0x1.e6799e6799e64p-5 + }, + { // Entry 343 + -0x1.e6c2ee85159eeffd05dd82882578d1d4p-5, + -0x1.e6799e6799e64p-5 + }, + { // Entry 344 + 0x1.e92973bd05fb21d34afdf692cee7c5d5p-4, + 0x1.e80p-4 + }, + { // Entry 345 + -0x1.e92973bd05fb21d34afdf692cee7c5d5p-4, + -0x1.e80p-4 + }, + { // Entry 346 + 0x1.eb3228982dcb8aaa55776e8b9ba3cd25p-4, + 0x1.ea04fb75153f7p-4 + }, + { // Entry 347 + -0x1.eb3228982dcb8aaa55776e8b9ba3cd25p-4, + -0x1.ea04fb75153f7p-4 + }, + { // Entry 348 + 0x1.f026f488662fc51b1e6d97371bb4f957p-3, + 0x1.eb50295fad425p-3 + }, + { // Entry 349 + -0x1.f026f488662fc51b1e6d97371bb4f957p-3, + -0x1.eb50295fad425p-3 + }, + { // Entry 350 + 0x1.eb63051149d3b7822ba54208fc03580ep-6, + 0x1.eb50295fad425p-6 + }, + { // Entry 351 + -0x1.eb63051149d3b7822ba54208fc03580ep-6, + -0x1.eb50295fad425p-6 + }, + { // Entry 352 + 0x1.4a55ae332c7a4c09ea98e7d59d9872dfp0, + 0x1.ec0p-1 + }, + { // Entry 353 + -0x1.4a55ae332c7a4c09ea98e7d59d9872dfp0, + -0x1.ec0p-1 + }, + { // Entry 354 + 0x1.4c655babcbe0b41389bc82e9f12e67c7p0, + 0x1.ed2p-1 + }, + { // Entry 355 + -0x1.4c655babcbe0b41389bc82e9f12e67c7p0, + -0x1.ed2p-1 + }, + { // Entry 356 + 0x1.4ff93f191d3694ab593de5dd6371b96fp0, + 0x1.ef00708a54b2cp-1 + }, + { // Entry 357 + -0x1.4ff93f191d3694ab593de5dd6371b96fp0, + -0x1.ef00708a54b2cp-1 + }, + { // Entry 358 + 0x1.ef77ab8e8feff4c39e94fa09320902abp-21, + 0x1.ef77ab8e8fa2ap-21 + }, + { // Entry 359 + -0x1.ef77ab8e8feff4c39e94fa09320902abp-21, + -0x1.ef77ab8e8fa2ap-21 + }, + { // Entry 360 + 0x1.efe5d9610962p-114, + 0x1.efe5d96109620p-114 + }, + { // Entry 361 + -0x1.efe5d9610962p-114, + -0x1.efe5d96109620p-114 + }, + { // Entry 362 + 0x1.51f4bd13f858ebf929a2088e2df34c72p0, + 0x1.effffffffffffp-1 + }, + { // Entry 363 + -0x1.51f4bd13f858ebf929a2088e2df34c72p0, + -0x1.effffffffffffp-1 + }, + { // Entry 364 + 0x1.52f8c72726a5343c6b1f75919edb5695p0, + 0x1.f08p-1 + }, + { // Entry 365 + -0x1.52f8c72726a5343c6b1f75919edb5695p0, + -0x1.f08p-1 + }, + { // Entry 366 + 0x1.54a5553221e80bf87bdb823192526176p0, + 0x1.f14e94d8d2e1ep-1 + }, + { // Entry 367 + -0x1.54a5553221e80bf87bdb823192526176p0, + -0x1.f14e94d8d2e1ep-1 + }, + { // Entry 368 + 0x1.5587523c7468b4173cf688f3219a184bp0, + 0x1.f1b9535b4f194p-1 + }, + { // Entry 369 + -0x1.5587523c7468b4173cf688f3219a184bp0, + -0x1.f1b9535b4f194p-1 + }, + { // Entry 370 + 0x1.56f4285735ecd7fe51444aebf353c0fbp0, + 0x1.f26274adac979p-1 + }, + { // Entry 371 + -0x1.56f4285735ecd7fe51444aebf353c0fbp0, + -0x1.f26274adac979p-1 + }, + { // Entry 372 + 0x1.6a45631fc69f340139208a9ea48fe11ap0, + 0x1.f9cef541d5e40p-1 + }, + { // Entry 373 + -0x1.6a45631fc69f340139208a9ea48fe11ap0, + -0x1.f9cef541d5e40p-1 + }, + { // Entry 374 + 0x1.fa639fc0adc0454cb19c822984da84edp-10, + 0x1.fa638b1ceed60p-10 + }, + { // Entry 375 + -0x1.fa639fc0adc0454cb19c822984da84edp-10, + -0x1.fa638b1ceed60p-10 + }, + { // Entry 376 + 0x1.fbf655a75453f895b93ae4abf4622da1p-5, + 0x1.fba3053043e65p-5 + }, + { // Entry 377 + -0x1.fbf655a75453f895b93ae4abf4622da1p-5, + -0x1.fba3053043e65p-5 + }, + { // Entry 378 + 0x1.7b802087557af76d96f304c0322df996p0, + 0x1.fe0084356e6d3p-1 + }, + { // Entry 379 + -0x1.7b802087557af76d96f304c0322df996p0, + -0x1.fe0084356e6d3p-1 + }, + { // Entry 380 + 0x1.7b8020890cf9e76f8fbc0fabd64eff53p0, + 0x1.fe008435bc011p-1 + }, + { // Entry 381 + -0x1.7b8020890cf9e76f8fbc0fabd64eff53p0, + -0x1.fe008435bc011p-1 + }, + { // Entry 382 + 0x1.7e1781bb355ec7803ff31d5be8def463p0, + 0x1.fe6eec178dfcbp-1 + }, + { // Entry 383 + -0x1.7e1781bb355ec7803ff31d5be8def463p0, + -0x1.fe6eec178dfcbp-1 + }, + { // Entry 384 + 0x1.7e2f2046c07b287fa8dea80ba23ad32dp0, + 0x1.fe729b3d76af8p-1 + }, + { // Entry 385 + -0x1.7e2f2046c07b287fa8dea80ba23ad32dp0, + -0x1.fe729b3d76af8p-1 + }, + { // Entry 386 + 0x1.7e2f2de8b8a817806d1670be6f754d6dp0, + 0x1.fe729d5c93ad0p-1 + }, + { // Entry 387 + -0x1.7e2f2de8b8a817806d1670be6f754d6dp0, + -0x1.fe729d5c93ad0p-1 + }, + { // Entry 388 + 0x1.ff49880d5a20aac3e3526e6cf9e09cb8p-10, + 0x1.ff4972cecbed8p-10 + }, + { // Entry 389 + -0x1.ff49880d5a20aac3e3526e6cf9e09cb8p-10, + -0x1.ff4972cecbed8p-10 + }, + { // Entry 390 + 0x1.ff87e144b3d5285c831c0483be2e06a7p-6, + 0x1.ff729b33a450ap-6 + }, + { // Entry 391 + -0x1.ff87e144b3d5285c831c0483be2e06a7p-6, + -0x1.ff729b33a450ap-6 + }, + { // Entry 392 + 0x1.027c7bd81acdf7fffe09c8613b3ac04ap-2, + 0x1.ff7feffffffffp-3 + }, + { // Entry 393 + -0x1.027c7bd81acdf7fffe09c8613b3ac04ap-2, + -0x1.ff7feffffffffp-3 + }, + { // Entry 394 + 0x1.ff8ffffffffff0000000551d619470aap-41, + 0x1.ff8ffffffffffp-41 + }, + { // Entry 395 + -0x1.ff8ffffffffff0000000551d619470aap-41, + -0x1.ff8ffffffffffp-41 + }, + { // Entry 396 + 0x1.0bf4cf34f3faeff2e4c6b885b77bb549p-1, + 0x1.ffc7fffffffffp-2 + }, + { // Entry 397 + -0x1.0bf4cf34f3faeff2e4c6b885b77bb549p-1, + -0x1.ffc7fffffffffp-2 + }, + { // Entry 398 + 0x1.8ab0d642e4c54804398ead7dd2453377p0, + 0x1.ffc8c0c7e6e1ap-1 + }, + { // Entry 399 + -0x1.8ab0d642e4c54804398ead7dd2453377p0, + -0x1.ffc8c0c7e6e1ap-1 + }, + { // Entry 400 + 0x1.8bbc3fa798db6800007c1f9be356a554p0, + 0x1.ffd730634939cp-1 + }, + { // Entry 401 + -0x1.8bbc3fa798db6800007c1f9be356a554p0, + -0x1.ffd730634939cp-1 + }, + { // Entry 402 + 0x1.8bc09a510098b804dee9939611959c0ep0, + 0x1.ffd767f0eb014p-1 + }, + { // Entry 403 + -0x1.8bc09a510098b804dee9939611959c0ep0, + -0x1.ffd767f0eb014p-1 + }, + { // Entry 404 + 0x1.0022b9e6710f97fcdf56a91cace59e6dp-4, + 0x1.fff000000000ap-5 + }, + { // Entry 405 + -0x1.0022b9e6710f97fcdf56a91cace59e6dp-4, + -0x1.fff000000000ap-5 + }, + { // Entry 406 + 0x1.fff1065375e97dcce338cf6e9331a5d9p-10, + 0x1.fff0f0fffffffp-10 + }, + { // Entry 407 + -0x1.fff1065375e97dcce338cf6e9331a5d9p-10, + -0x1.fff0f0fffffffp-10 + }, + { // Entry 408 + 0x1.0c10851c1a1097dc3df97865c5caec5bp-1, + 0x1.fff7fffffffffp-2 + }, + { // Entry 409 + -0x1.0c10851c1a1097dc3df97865c5caec5bp-1, + -0x1.fff7fffffffffp-2 + }, + { // Entry 410 + 0x1.02be94db85e837fffd06abd4bb6eb065p-2, + 0x1.fffff077fffaep-3 + }, + { // Entry 411 + -0x1.02be94db85e837fffd06abd4bb6eb065p-2, + -0x1.fffff077fffaep-3 + }, + { // Entry 412 + 0x1.ffffff4555553f7bbbbd352972db79p-15, + 0x1.ffffff3ffffffp-15 + }, + { // Entry 413 + -0x1.ffffff4555553f7bbbbd352972db79p-15, + -0x1.ffffff3ffffffp-15 + }, + { // Entry 414 + 0x1.00abe0c026d6980000ee7b5b3c750ee4p-3, + 0x1.fffffffdfdf9bp-4 + }, + { // Entry 415 + -0x1.00abe0c026d6980000ee7b5b3c750ee4p-3, + -0x1.fffffffdfdf9bp-4 + }, + { // Entry 416 + 0x1.921e7bbb5b08af737a8c86a1f3470fb7p0, + 0x1.fffffffe7ffffp-1 + }, + { // Entry 417 + -0x1.921e7bbb5b08af737a8c86a1f3470fb7p0, + -0x1.fffffffe7ffffp-1 + }, + { // Entry 418 + 0x1.921e91836230570dcee4fe03756f458cp0, + 0x1.fffffffeb37ffp-1 + }, + { // Entry 419 + -0x1.921e91836230570dcee4fe03756f458cp0, + -0x1.fffffffeb37ffp-1 + }, + { // Entry 420 + 0x1.0002aabdac7327ffffd50d8db1e7238cp-6, + 0x1.ffffffff9bbffp-7 + }, + { // Entry 421 + -0x1.0002aabdac7327ffffd50d8db1e7238cp-6, + -0x1.ffffffff9bbffp-7 + }, + { // Entry 422 + 0x1.00abe0c121d1a80c0ce870896b905389p-3, + 0x1.ffffffffeffffp-4 + }, + { // Entry 423 + -0x1.00abe0c121d1a80c0ce870896b905389p-3, + -0x1.ffffffffeffffp-4 + }, + { // Entry 424 + 0x1.0002aabdde7237febfdec02e5706bab1p-6, + 0x1.ffffffffffbafp-7 + }, + { // Entry 425 + -0x1.0002aabdde7237febfdec02e5706bab1p-6, + -0x1.ffffffffffbafp-7 + }, + { // Entry 426 + 0x1.002abde95358d80170fb3700a02d872dp-4, + 0x1.ffffffffffee9p-5 + }, + { // Entry 427 + -0x1.002abde95358d80170fb3700a02d872dp-4, + -0x1.ffffffffffee9p-5 + }, + { // Entry 428 + 0x1.921fb2cdef21d7febc9f3f1b1d1683b0p0, + 0x1.fffffffffff9fp-1 + }, + { // Entry 429 + -0x1.921fb2cdef21d7febc9f3f1b1d1683b0p0, + -0x1.fffffffffff9fp-1 + }, + { // Entry 430 + 0x1.921fb48f3dde506fab247b4dc86ea6e0p0, + 0x1.ffffffffffff8p-1 + }, + { // Entry 431 + -0x1.921fb48f3dde506fab247b4dc86ea6e0p0, + -0x1.ffffffffffff8p-1 + }, + { // Entry 432 + 0x1.02be9ce0b87c980fa863b980f3eb6ed8p-2, + 0x1.ffffffffffff9p-3 + }, + { // Entry 433 + -0x1.02be9ce0b87c980fa863b980f3eb6ed8p-2, + -0x1.ffffffffffff9p-3 + }, + { // Entry 434 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.0p-1 + }, + { // Entry 435 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.0p-1 + }, + { // Entry 436 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.0p-1 + }, + { // Entry 437 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.0p-1 + }, + { // Entry 438 + 0x1.4a1ce4ed5846e1103ebca2dd90e3eb3fp-1, + 0x1.33b645a1cac08p-1 + }, + { // Entry 439 + -0x1.4a1ce4ed5846e1103ebca2dd90e3eb3fp-1, + -0x1.33b645a1cac08p-1 + }, + { // Entry 440 + 0x1.921fb54442d177a2e305f4ec49b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 441 + -0x1.921fb54442d177a2e305f4ec49b839a2p-1, + -0x1.6a09e667f3bccp-1 + }, + { // Entry 442 + 0x1.921fb54442d177a2e305f4ec49b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 443 + -0x1.921fb54442d177a2e305f4ec49b839a2p-1, + -0x1.6a09e667f3bccp-1 + }, + { // Entry 444 + -0x1.b235315c680dc081583db360d5e1fa18p-1, + -0x1.8p-1 + }, + { // Entry 445 + 0x1.b235315c680dc081583db360d5e1fa18p-1, + 0x1.8p-1 + }, + { // Entry 446 + 0x1.0c152382d736510b363f009eddefddebp0, + 0x1.bb67ae8584caap-1 + }, + { // Entry 447 + -0x1.0c152382d736510b363f009eddefddebp0, + -0x1.bb67ae8584caap-1 + }, + { // Entry 448 + 0x1.0c152382d736510b363f009eddefddebp0, + 0x1.bb67ae8584caap-1 + }, + { // Entry 449 + -0x1.0c152382d736510b363f009eddefddebp0, + -0x1.bb67ae8584caap-1 + }, + { // Entry 450 + 0x1.908138a8b9ab762dbe47f3cc71dd77a4p0, + 0x1.fffd60e94ee39p-1 + }, + { // Entry 451 + -0x1.908138a8b9ab762dbe47f3cc71dd77a4p0, + -0x1.fffd60e94ee39p-1 + }, + { // Entry 452 + 0x1.p-82, + 0x1.0p-82 + }, + { // Entry 453 + -0x1.p-82, + -0x1.0p-82 + }, + { // Entry 454 + 0x1.0000000000000000000000000000000ap-61, + 0x1.0p-61 + }, + { // Entry 455 + -0x1.0000000000000000000000000000000ap-61, + -0x1.0p-61 + }, + { // Entry 456 + 0x1.0000000000000000000002aaaaaaaaaap-42, + 0x1.0p-42 + }, + { // Entry 457 + -0x1.0000000000000000000002aaaaaaaaaap-42, + -0x1.0p-42 + }, + { // Entry 458 + 0x1.000000000002aaaaaaaaaabdddddddddp-22, + 0x1.0p-22 + }, + { // Entry 459 + -0x1.000000000002aaaaaaaaaabdddddddddp-22, + -0x1.0p-22 + }, + { // Entry 460 + 0x1.6a0a049378647a1e52ffdf31536df951p-9, + 0x1.6a09e667f3bcbp-9 + }, + { // Entry 461 + -0x1.6a0a049378647a1e52ffdf31536df951p-9, + -0x1.6a09e667f3bcbp-9 + }, + { // Entry 462 + 0x1.6a0a049378648a1e56ffe0b1540df936p-9, + 0x1.6a09e667f3bccp-9 + }, + { // Entry 463 + -0x1.6a0a049378648a1e56ffe0b1540df936p-9, + -0x1.6a09e667f3bccp-9 + }, + { // Entry 464 + 0x1.6a0a049378649a1e5affe23154adf976p-9, + 0x1.6a09e667f3bcdp-9 + }, + { // Entry 465 + -0x1.6a0a049378649a1e5affe23154adf976p-9, + -0x1.6a09e667f3bcdp-9 + }, + { // Entry 466 + 0x1.6a0a5f1657d1bf22d957bf86231eed1ap-8, + 0x1.6a09e667f3bcbp-8 + }, + { // Entry 467 + -0x1.6a0a5f1657d1bf22d957bf86231eed1ap-8, + -0x1.6a09e667f3bcbp-8 + }, + { // Entry 468 + 0x1.6a0a5f1657d1cf22e957d7864b1f3199p-8, + 0x1.6a09e667f3bccp-8 + }, + { // Entry 469 + -0x1.6a0a5f1657d1cf22e957d7864b1f3199p-8, + -0x1.6a09e667f3bccp-8 + }, + { // Entry 470 + 0x1.6a0a5f1657d1df22f957ef86731f7782p-8, + 0x1.6a09e667f3bcdp-8 + }, + { // Entry 471 + -0x1.6a0a5f1657d1df22f957ef86731f7782p-8, + -0x1.6a09e667f3bcdp-8 + }, + { // Entry 472 + 0x1.6a0bc9269b86124131fa4b997808aec8p-7, + 0x1.6a09e667f3bcbp-7 + }, + { // Entry 473 + -0x1.6a0bc9269b86124131fa4b997808aec8p-7, + -0x1.6a09e667f3bcbp-7 + }, + { // Entry 474 + 0x1.6a0bc9269b86224171fbcba3784eaabap-7, + 0x1.6a09e667f3bccp-7 + }, + { // Entry 475 + -0x1.6a0bc9269b86224171fbcba3784eaabap-7, + -0x1.6a09e667f3bccp-7 + }, + { // Entry 476 + 0x1.6a0bc9269b863241b1fd4bad7894ac55p-7, + 0x1.6a09e667f3bcdp-7 + }, + { // Entry 477 + -0x1.6a0bc9269b863241b1fd4bad7894ac55p-7, + -0x1.6a09e667f3bcdp-7 + }, + { // Entry 478 + 0x1.6a1171b40fe3d57da5c2e2ec8650d873p-6, + 0x1.6a09e667f3bcbp-6 + }, + { // Entry 479 + -0x1.6a1171b40fe3d57da5c2e2ec8650d873p-6, + -0x1.6a09e667f3bcbp-6 + }, + { // Entry 480 + 0x1.6a1171b40fe3e57ea5dae56ccc58a13ep-6, + 0x1.6a09e667f3bccp-6 + }, + { // Entry 481 + -0x1.6a1171b40fe3e57ea5dae56ccc58a13ep-6, + -0x1.6a09e667f3bccp-6 + }, + { // Entry 482 + 0x1.6a1171b40fe3f57fa5f2e7ed126080afp-6, + 0x1.6a09e667f3bcdp-6 + }, + { // Entry 483 + -0x1.6a1171b40fe3f57fa5f2e7ed126080afp-6, + -0x1.6a09e667f3bcdp-6 + }, + { // Entry 484 + 0x1.6a2818b1a0bd5f9b490a8ffd372921ffp-5, + 0x1.6a09e667f3bcbp-5 + }, + { // Entry 485 + -0x1.6a2818b1a0bd5f9b490a8ffd372921ffp-5, + -0x1.6a09e667f3bcbp-5 + }, + { // Entry 486 + 0x1.6a2818b1a0bd6f9f4a8b304356b73812p-5, + 0x1.6a09e667f3bccp-5 + }, + { // Entry 487 + -0x1.6a2818b1a0bd6f9f4a8b304356b73812p-5, + -0x1.6a09e667f3bccp-5 + }, + { // Entry 488 + 0x1.6a2818b1a0bd7fa34c0bd0897645a8ebp-5, + 0x1.6a09e667f3bcdp-5 + }, + { // Entry 489 + -0x1.6a2818b1a0bd7fa34c0bd0897645a8ebp-5, + -0x1.6a09e667f3bcdp-5 + }, + { // Entry 490 + 0x1.6a83017dfb54c538079f0571169f7c03p-4, + 0x1.6a09e667f3bcbp-4 + }, + { // Entry 491 + -0x1.6a83017dfb54c538079f0571169f7c03p-4, + -0x1.6a09e667f3bcbp-4 + }, + { // Entry 492 + 0x1.6a83017dfb54d5481fc74befff4e205fp-4, + 0x1.6a09e667f3bccp-4 + }, + { // Entry 493 + -0x1.6a83017dfb54d5481fc74befff4e205fp-4, + -0x1.6a09e667f3bccp-4 + }, + { // Entry 494 + 0x1.6a83017dfb54e55837ef926ee7fe330dp-4, + 0x1.6a09e667f3bcdp-4 + }, + { // Entry 495 + -0x1.6a83017dfb54e55837ef926ee7fe330dp-4, + -0x1.6a09e667f3bcdp-4 + }, + { // Entry 496 + 0x1.6bf38916421401c3b5732e0d6b50ebd0p-3, + 0x1.6a09e667f3bcbp-3 + }, + { // Entry 497 + -0x1.6bf38916421401c3b5732e0d6b50ebd0p-3, + -0x1.6a09e667f3bcbp-3 + }, + { // Entry 498 + 0x1.6bf38916421412053fbb34ebe8221436p-3, + 0x1.6a09e667f3bccp-3 + }, + { // Entry 499 + -0x1.6bf38916421412053fbb34ebe8221436p-3, + -0x1.6a09e667f3bccp-3 + }, + { // Entry 500 + 0x1.6bf3891642142246ca033bca64f92b66p-3, + 0x1.6a09e667f3bcdp-3 + }, + { // Entry 501 + -0x1.6bf3891642142246ca033bca64f92b66p-3, + -0x1.6a09e667f3bcdp-3 + }, + { // Entry 502 + 0x1.720a392c1d952d8e8ad756e1430b13d1p-2, + 0x1.6a09e667f3bcbp-2 + }, + { // Entry 503 + -0x1.720a392c1d952d8e8ad756e1430b13d1p-2, + -0x1.6a09e667f3bcbp-2 + }, + { // Entry 504 + 0x1.720a392c1d953ea959bcb7056cb6fa96p-2, + 0x1.6a09e667f3bccp-2 + }, + { // Entry 505 + -0x1.720a392c1d953ea959bcb7056cb6fa96p-2, + -0x1.6a09e667f3bccp-2 + }, + { // Entry 506 + 0x1.720a392c1d954fc428a21729967e8694p-2, + 0x1.6a09e667f3bcdp-2 + }, + { // Entry 507 + -0x1.720a392c1d954fc428a21729967e8694p-2, + -0x1.6a09e667f3bcdp-2 + }, + { // Entry 508 + 0x1.bb67e5f28d500f1ccaec1a38d240d53fp-9, + 0x1.bb67ae8584ca9p-9 + }, + { // Entry 509 + -0x1.bb67e5f28d500f1ccaec1a38d240d53fp-9, + -0x1.bb67ae8584ca9p-9 + }, + { // Entry 510 + 0x1.bb67e5f28d501f1cd0ec1d98d45cd638p-9, + 0x1.bb67ae8584caap-9 + }, + { // Entry 511 + -0x1.bb67e5f28d501f1cd0ec1d98d45cd638p-9, + -0x1.bb67ae8584caap-9 + }, + { // Entry 512 + 0x1.bb67e5f28d502f1cd6ec20f8d678d7a0p-9, + 0x1.bb67ae8584cabp-9 + }, + { // Entry 513 + -0x1.bb67e5f28d502f1cd6ec20f8d678d7a0p-9, + -0x1.bb67ae8584cabp-9 + }, + { // Entry 514 + 0x1.bb688c3a875bcb79b1d1fd5de10c96d1p-8, + 0x1.bb67ae8584ca9p-8 + }, + { // Entry 515 + -0x1.bb688c3a875bcb79b1d1fd5de10c96d1p-8, + -0x1.bb67ae8584ca9p-8 + }, + { // Entry 516 + 0x1.bb688c3a875bdb79c9d2335e680df78fp-8, + 0x1.bb67ae8584caap-8 + }, + { // Entry 517 + -0x1.bb688c3a875bdb79c9d2335e680df78fp-8, + -0x1.bb67ae8584caap-8 + }, + { // Entry 518 + 0x1.bb688c3a875beb79e1d2695eef0f5a08p-8, + 0x1.bb67ae8584cabp-8 + }, + { // Entry 519 + -0x1.bb688c3a875beb79e1d2695eef0f5a08p-8, + -0x1.bb67ae8584cabp-8 + }, + { // Entry 520 + 0x1.bb6b2567972165018cf35a469b36c5e6p-7, + 0x1.bb67ae8584ca9p-7 + }, + { // Entry 521 + -0x1.bb6b2567972165018cf35a469b36c5e6p-7, + -0x1.bb67ae8584ca9p-7 + }, + { // Entry 522 + 0x1.bb6b256797217501ecf6ba685c992e41p-7, + 0x1.bb67ae8584caap-7 + }, + { // Entry 523 + -0x1.bb6b256797217501ecf6ba685c992e41p-7, + -0x1.bb67ae8584caap-7 + }, + { // Entry 524 + 0x1.bb6b2567972185024cfa1a8a1dfb9d8ap-7, + 0x1.bb67ae8584cabp-7 + }, + { // Entry 525 + -0x1.bb6b2567972185024cfa1a8a1dfb9d8ap-7, + -0x1.bb67ae8584cabp-7 + }, + { // Entry 526 + 0x1.bb758aee66c4f6179c2a4c9e47ed2c98p-6, + 0x1.bb67ae8584ca9p-6 + }, + { // Entry 527 + -0x1.bb758aee66c4f6179c2a4c9e47ed2c98p-6, + -0x1.bb67ae8584ca9p-6 + }, + { // Entry 528 + 0x1.bb758aee66c506191c60550faa88e978p-6, + 0x1.bb67ae8584caap-6 + }, + { // Entry 529 + -0x1.bb758aee66c506191c60550faa88e978p-6, + -0x1.bb67ae8584caap-6 + }, + { // Entry 530 + 0x1.bb758aee66c5161a9c965d810d24c216p-6, + 0x1.bb67ae8584cabp-6 + }, + { // Entry 531 + -0x1.bb758aee66c5161a9c965d810d24c216p-6, + -0x1.bb67ae8584cabp-6 + }, + { // Entry 532 + 0x1.bb9f2e3879c2cf9ea454ab283af7825ap-5, + 0x1.bb67ae8584ca9p-5 + }, + { // Entry 533 + -0x1.bb9f2e3879c2cf9ea454ab283af7825ap-5, + -0x1.bb67ae8584ca9p-5 + }, + { // Entry 534 + 0x1.bb9f2e3879c2dfa4a7b6c88b8acffef5p-5, + 0x1.bb67ae8584caap-5 + }, + { // Entry 535 + -0x1.bb9f2e3879c2dfa4a7b6c88b8acffef5p-5, + -0x1.bb67ae8584caap-5 + }, + { // Entry 536 + 0x1.bb9f2e3879c2efaaab18e5eedaa8eae8p-5, + 0x1.bb67ae8584cabp-5 + }, + { // Entry 537 + -0x1.bb9f2e3879c2efaaab18e5eedaa8eae8p-5, + -0x1.bb67ae8584cabp-5 + }, + { // Entry 538 + 0x1.bc468fc3ecf6b031e5cd5bd050766cd7p-4, + 0x1.bb67ae8584ca9p-4 + }, + { // Entry 539 + -0x1.bc468fc3ecf6b031e5cd5bd050766cd7p-4, + -0x1.bb67ae8584ca9p-4 + }, + { // Entry 540 + 0x1.bc468fc3ecf6c04a1c55c1f784a40b33p-4, + 0x1.bb67ae8584caap-4 + }, + { // Entry 541 + -0x1.bc468fc3ecf6c04a1c55c1f784a40b33p-4, + -0x1.bb67ae8584caap-4 + }, + { // Entry 542 + 0x1.bc468fc3ecf6d06252de281eb8d36cdfp-4, + 0x1.bb67ae8584cabp-4 + }, + { // Entry 543 + -0x1.bc468fc3ecf6d06252de281eb8d36cdfp-4, + -0x1.bb67ae8584cabp-4 + }, + { // Entry 544 + 0x1.bef1bcb08890131f87f550d6c3652dd7p-3, + 0x1.bb67ae8584ca9p-3 + }, + { // Entry 545 + -0x1.bef1bcb08890131f87f550d6c3652dd7p-3, + -0x1.bb67ae8584ca9p-3 + }, + { // Entry 546 + 0x1.bef1bcb0889023830b2750073d51ac87p-3, + 0x1.bb67ae8584caap-3 + }, + { // Entry 547 + -0x1.bef1bcb0889023830b2750073d51ac87p-3, + -0x1.bb67ae8584caap-3 + }, + { // Entry 548 + 0x1.bef1bcb0889033e68e594f37b7459d46p-3, + 0x1.bb67ae8584cabp-3 + }, + { // Entry 549 + -0x1.bef1bcb0889033e68e594f37b7459d46p-3, + -0x1.bb67ae8584cabp-3 + }, + { // Entry 550 + 0x1.ca94936b98a1ffe8286e976abd1b0451p-2, + 0x1.bb67ae8584ca9p-2 + }, + { // Entry 551 + -0x1.ca94936b98a1ffe8286e976abd1b0451p-2, + -0x1.bb67ae8584ca9p-2 + }, + { // Entry 552 + 0x1.ca94936b98a211a8430ed35352bc881bp-2, + 0x1.bb67ae8584caap-2 + }, + { // Entry 553 + -0x1.ca94936b98a211a8430ed35352bc881bp-2, + -0x1.bb67ae8584caap-2 + }, + { // Entry 554 + 0x1.ca94936b98a223685daf0f3be883e2d0p-2, + 0x1.bb67ae8584cabp-2 + }, + { // Entry 555 + -0x1.ca94936b98a223685daf0f3be883e2d0p-2, + -0x1.bb67ae8584cabp-2 + }, + { // Entry 556 + 0x1.fffffffffffff0p-128, + 0x1.fffffffffffffp-128 + }, + { // Entry 557 + -0x1.fffffffffffff0p-128, + -0x1.fffffffffffffp-128 + }, + { // Entry 558 + 0x1.p-127, + 0x1.0p-127 + }, + { // Entry 559 + -0x1.p-127, + -0x1.0p-127 + }, + { // Entry 560 + 0x1.00000000000010p-127, + 0x1.0000000000001p-127 + }, + { // Entry 561 + -0x1.00000000000010p-127, + -0x1.0000000000001p-127 + }, + { // Entry 562 + 0x1.fffffffffffff0p-127, + 0x1.fffffffffffffp-127 + }, + { // Entry 563 + -0x1.fffffffffffff0p-127, + -0x1.fffffffffffffp-127 + }, + { // Entry 564 + 0x1.p-126, + 0x1.0p-126 + }, + { // Entry 565 + -0x1.p-126, + -0x1.0p-126 + }, + { // Entry 566 + 0x1.00000000000010p-126, + 0x1.0000000000001p-126 + }, + { // Entry 567 + -0x1.00000000000010p-126, + -0x1.0000000000001p-126 + }, + { // Entry 568 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 569 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 570 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 571 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 572 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 573 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 574 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 575 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 576 + -0.0, + -0.0 + }, + { // Entry 577 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 578 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 579 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 580 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 581 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 582 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 583 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 584 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 585 + 0x1.fffffffffffff005555555555554d57bp-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 586 + -0x1.fffffffffffff005555555555554d57bp-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 587 + 0x1.0000000000000002aaaaaaaaaaaaaabdp-30, + 0x1.0p-30 + }, + { // Entry 588 + -0x1.0000000000000002aaaaaaaaaaaaaabdp-30, + -0x1.0p-30 + }, + { // Entry 589 + 0x1.0000000000001002aaaaaaaaaaab2abdp-30, + 0x1.0000000000001p-30 + }, + { // Entry 590 + -0x1.0000000000001002aaaaaaaaaaab2abdp-30, + -0x1.0000000000001p-30 + }, + { // Entry 591 + 0x1.fffffffffffff155555555555537bbbbp-28, + 0x1.fffffffffffffp-28 + }, + { // Entry 592 + -0x1.fffffffffffff155555555555537bbbbp-28, + -0x1.fffffffffffffp-28 + }, + { // Entry 593 + 0x1.00000000000000aaaaaaaaaaaaabddddp-27, + 0x1.0p-27 + }, + { // Entry 594 + -0x1.00000000000000aaaaaaaaaaaaabddddp-27, + -0x1.0p-27 + }, + { // Entry 595 + 0x1.00000000000010aaaaaaaaaaaacbddddp-27, + 0x1.0000000000001p-27 + }, + { // Entry 596 + -0x1.00000000000010aaaaaaaaaaaacbddddp-27, + -0x1.0000000000001p-27 + }, + { // Entry 597 + 0x1.00000000000002aaaaaaaaaaaaddddddp-25, + 0x1.fffffffffffffp-26 + }, + { // Entry 598 + -0x1.00000000000002aaaaaaaaaaaaddddddp-25, + -0x1.fffffffffffffp-26 + }, + { // Entry 599 + 0x1.0000000000000aaaaaaaaaaaabddddddp-25, + 0x1.0p-25 + }, + { // Entry 600 + -0x1.0000000000000aaaaaaaaaaaabddddddp-25, + -0x1.0p-25 + }, + { // Entry 601 + 0x1.0000000000001aaaaaaaaaaaadddddddp-25, + 0x1.0000000000001p-25 + }, + { // Entry 602 + -0x1.0000000000001aaaaaaaaaaaadddddddp-25, + -0x1.0000000000001p-25 + }, + { // Entry 603 + 0x1.00000002aaaaa2bddddd9e94b9489c80p-14, + 0x1.fffffffffffffp-15 + }, + { // Entry 604 + -0x1.00000002aaaaa2bddddd9e94b9489c80p-14, + -0x1.fffffffffffffp-15 + }, + { // Entry 605 + 0x1.00000002aaaaaabdddddde94b94b9c80p-14, + 0x1.0p-14 + }, + { // Entry 606 + -0x1.00000002aaaaaabdddddde94b94b9c80p-14, + -0x1.0p-14 + }, + { // Entry 607 + 0x1.00000002aaaababdddde5e94b9519c80p-14, + 0x1.0000000000001p-14 + }, + { // Entry 608 + -0x1.00000002aaaababdddde5e94b9519c80p-14, + -0x1.0000000000001p-14 + }, + { // Entry 609 + 0x1.0002aabdde94b912cccf6cb7a147dbe6p-6, + 0x1.fffffffffffffp-7 + }, + { // Entry 610 + -0x1.0002aabdde94b912cccf6cb7a147dbe6p-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 611 + 0x1.0002aabdde94c1130cd26cdfa377f967p-6, + 0x1.0p-6 + }, + { // Entry 612 + -0x1.0002aabdde94c1130cd26cdfa377f967p-6, + -0x1.0p-6 + }, + { // Entry 613 + 0x1.0002aabdde94d1138cd86d2fa7d8406cp-6, + 0x1.0000000000001p-6 + }, + { // Entry 614 + -0x1.0002aabdde94d1138cd86d2fa7d8406cp-6, + -0x1.0000000000001p-6 + }, + { // Entry 615 + 0x1.000aabde0b9c79d5d91547bc0e143946p-5, + 0x1.fffffffffffffp-6 + }, + { // Entry 616 + -0x1.000aabde0b9c79d5d91547bc0e143946p-5, + -0x1.fffffffffffffp-6 + }, + { // Entry 617 + 0x1.000aabde0b9c81d6d94551be3e924e2ap-5, + 0x1.0p-5 + }, + { // Entry 618 + -0x1.000aabde0b9c81d6d94551be3e924e2ap-5, + -0x1.0p-5 + }, + { // Entry 619 + 0x1.000aabde0b9c91d8d9a565c29f8ea804p-5, + 0x1.0000000000001p-5 + }, + { // Entry 620 + -0x1.000aabde0b9c91d8d9a565c29f8ea804p-5, + -0x1.0000000000001p-5 + }, + { // Entry 621 + 0x1.002abde953618c5cb5b49945c179d0f3p-4, + 0x1.fffffffffffffp-5 + }, + { // Entry 622 + -0x1.002abde953618c5cb5b49945c179d0f3p-4, + -0x1.fffffffffffffp-5 + }, + { // Entry 623 + 0x1.002abde953619460b8b71b77bb495f57p-4, + 0x1.0p-4 + }, + { // Entry 624 + -0x1.002abde953619460b8b71b77bb495f57p-4, + -0x1.0p-4 + }, + { // Entry 625 + 0x1.002abde95361a468bebc1fdbaee93d3fp-4, + 0x1.0000000000001p-4 + }, + { // Entry 626 + -0x1.002abde95361a468bebc1fdbaee93d3fp-4, + -0x1.0000000000001p-4 + }, + { // Entry 627 + 0x1.00abe0c129e1d8ae44e53a515476507cp-3, + 0x1.fffffffffffffp-4 + }, + { // Entry 628 + -0x1.00abe0c129e1d8ae44e53a515476507cp-3, + -0x1.fffffffffffffp-4 + }, + { // Entry 629 + 0x1.00abe0c129e1e0be7587724ea14e03b1p-3, + 0x1.0p-3 + }, + { // Entry 630 + -0x1.00abe0c129e1e0be7587724ea14e03b1p-3, + -0x1.0p-3 + }, + { // Entry 631 + 0x1.00abe0c129e1f0ded6cbe2493b007c79p-3, + 0x1.0000000000001p-3 + }, + { // Entry 632 + -0x1.00abe0c129e1f0ded6cbe2493b007c79p-3, + -0x1.0000000000001p-3 + }, + { // Entry 633 + 0x1.02be9ce0b87cc9a2a64c386583040afap-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 634 + -0x1.02be9ce0b87cc9a2a64c386583040afap-2, + -0x1.fffffffffffffp-3 + }, + { // Entry 635 + 0x1.02be9ce0b87cd1e5d09da2e0f0423bfap-2, + 0x1.0p-2 + }, + { // Entry 636 + -0x1.02be9ce0b87cd1e5d09da2e0f0423bfap-2, + -0x1.0p-2 + }, + { // Entry 637 + 0x1.02be9ce0b87ce26c254077d7cacbd63cp-2, + 0x1.0000000000001p-2 + }, + { // Entry 638 + -0x1.02be9ce0b87ce26c254077d7cacbd63cp-2, + -0x1.0000000000001p-2 + }, + { // Entry 639 + 0x1.0c152382d7364f09881065f5c8609169p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 640 + -0x1.0c152382d7364f09881065f5c8609169p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 641 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.0p-1 + }, + { // Entry 642 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.0p-1 + }, + { // Entry 643 + 0x1.0c152382d7366ac002f8be4272f9370fp-1, + 0x1.0000000000001p-1 + }, + { // Entry 644 + -0x1.0c152382d7366ac002f8be4272f9370fp-1, + -0x1.0000000000001p-1 + }, + { // Entry 645 + 0x1.921fb50442d18469898c9a6c570d8ef7p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 646 + -0x1.921fb50442d18469898c9a6c570d8ef7p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 647 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p0 + }, + { // Entry 648 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p0 + }, + { // Entry 649 + 0x1.921fb54442d14a61a638f674b3b839a2p-1, + 0x1.6a09e667f3bcap-1 + }, + { // Entry 650 + -0x1.921fb54442d14a61a638f674b3b839a2p-1, + -0x1.6a09e667f3bcap-1 + }, + { // Entry 651 + 0x1.921fb54442d16102449f75b07e3839a2p-1, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 652 + -0x1.921fb54442d16102449f75b07e3839a2p-1, + -0x1.6a09e667f3bcbp-1 + }, + { // Entry 653 + 0x1.921fb54442d177a2e305f4ec49b839a2p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 654 + -0x1.921fb54442d177a2e305f4ec49b839a2p-1, + -0x1.6a09e667f3bccp-1 + }, + { // Entry 655 + 0x1.921fb54442d18e43816c7428163839a2p-1, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 656 + -0x1.921fb54442d18e43816c7428163839a2p-1, + -0x1.6a09e667f3bcdp-1 + }, + { // Entry 657 + 0x1.921fb54442d1a4e41fd2f363e3b839a2p-1, + 0x1.6a09e667f3bcep-1 + }, + { // Entry 658 + -0x1.921fb54442d1a4e41fd2f363e3b839a2p-1, + -0x1.6a09e667f3bcep-1 + }, + { // Entry 659 + 0x1.0c152382d736310b363f009ee2f7763ap0, + 0x1.bb67ae8584ca8p-1 + }, + { // Entry 660 + -0x1.0c152382d736310b363f009ee2f7763ap0, + -0x1.bb67ae8584ca8p-1 + }, + { // Entry 661 + 0x1.0c152382d736410b363f009edf95f63bp0, + 0x1.bb67ae8584ca9p-1 + }, + { // Entry 662 + -0x1.0c152382d736410b363f009edf95f63bp0, + -0x1.bb67ae8584ca9p-1 + }, + { // Entry 663 + 0x1.0c152382d736510b363f009eddefddebp0, + 0x1.bb67ae8584caap-1 + }, + { // Entry 664 + -0x1.0c152382d736510b363f009eddefddebp0, + -0x1.bb67ae8584caap-1 + }, + { // Entry 665 + 0x1.0c152382d736610b363f009ede052d4ap0, + 0x1.bb67ae8584cabp-1 + }, + { // Entry 666 + -0x1.0c152382d736610b363f009ede052d4ap0, + -0x1.bb67ae8584cabp-1 + }, + { // Entry 667 + 0x1.0c152382d736710b363f009edfd5e457p0, + 0x1.bb67ae8584cacp-1 + }, + { // Entry 668 + -0x1.0c152382d736710b363f009edfd5e457p0, + -0x1.bb67ae8584cacp-1 + }, + { // Entry 669 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p0 + }, + { // Entry 670 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p0 + }, + { // Entry 671 + 0x1.921fb50442d18469898c9a6c570d8ef7p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 672 + -0x1.921fb50442d18469898c9a6c570d8ef7p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 673 + 0x1.ce8276c3e139c7eeab836fc4dd4a61bcp-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 674 + -0x1.ce8276c3e139c7eeab836fc4dd4a61bcp-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 675 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 676 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 677 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 678 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 679 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 680 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 681 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 682 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 683 + 0x1.p-1073, + 0x1.0p-1073 + }, + { // Entry 684 + -0x1.p-1073, + -0x1.0p-1073 + }, + { // Entry 685 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 686 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 687 + 0.0, + 0.0 + }, + { // Entry 688 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/asinf_intel_data.h b/tests/math_data/asinf_intel_data.h new file mode 100644 index 000000000..6979a6b4e --- /dev/null +++ b/tests/math_data/asinf_intel_data.h @@ -0,0 +1,1934 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_asinf_intel_data[] = { + { // Entry 0 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 2 + -0x1.0cad8e66f6fb487cf1df9ed091e4a72ep-1, + -0x1.0083f4p-1 + }, + { // Entry 3 + 0x1.0cad8e66f6fb487cf1df9ed091e4a72ep-1, + 0x1.0083f4p-1 + }, + { // Entry 4 + -0x1.103565dad7e2002283a3fac2b1d6311dp-1, + -0x1.03909cp-1 + }, + { // Entry 5 + 0x1.103565dad7e2002283a3fac2b1d6311dp-1, + 0x1.03909cp-1 + }, + { // Entry 6 + -0x1.1c66b9ffd666cc7518f5aeee38193508p-1, + -0x1.0ep-1 + }, + { // Entry 7 + 0x1.1c66b9ffd666cc7518f5aeee38193508p-1, + 0x1.0ep-1 + }, + { // Entry 8 + -0x1.311900012958ac30f09a111b838a00c4p-1, + -0x1.1f5cp-1 + }, + { // Entry 9 + 0x1.311900012958ac30f09a111b838a00c4p-1, + 0x1.1f5cp-1 + }, + { // Entry 10 + -0x1.246f5c0000a72022c39c255ede1512d3p-3, + -0x1.237138p-3 + }, + { // Entry 11 + 0x1.246f5c0000a72022c39c255ede1512d3p-3, + 0x1.237138p-3 + }, + { // Entry 12 + -0x1.3db0900000395b4211afefffc6915c36p-3, + -0x1.3c6acap-3 + }, + { // Entry 13 + 0x1.3db0900000395b4211afefffc6915c36p-3, + 0x1.3c6acap-3 + }, + { // Entry 14 + -0x1.5e2e4b551d68af4d88152d62976726c4p-1, + -0x1.4382c8p-1 + }, + { // Entry 15 + 0x1.5e2e4b551d68af4d88152d62976726c4p-1, + 0x1.4382c8p-1 + }, + { // Entry 16 + -0x1.7be252f6f0a776a93608351ae10eb974p0, + -0x1.fe11b4p-1 + }, + { // Entry 17 + 0x1.7be252f6f0a776a93608351ae10eb974p0, + 0x1.fe11b4p-1 + }, + { // Entry 18 + -0x1.00ab00ffe5d68ab742fd93647ec0a67bp-3, + -0x1.fffe44p-4 + }, + { // Entry 19 + 0x1.00ab00ffe5d68ab742fd93647ec0a67bp-3, + 0x1.fffe44p-4 + }, + { // Entry 20 + -0x1.0c15110930220c79eb624ae419c8836cp-1, + -0x1.ffffe0p-2 + }, + { // Entry 21 + 0x1.0c15110930220c79eb624ae419c8836cp-1, + 0x1.ffffe0p-2 + }, + { // Entry 22 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 23 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 24 + 0x1.02be9ef183114fc560988306f887ac74p-2, + 0x1.000002p-2 + }, + { // Entry 25 + -0x1.02be9ef183114fc560988306f887ac74p-2, + -0x1.000002p-2 + }, + { // Entry 26 + 0x1.02bea1024da614265a59c002ae0c56a0p-2, + 0x1.000004p-2 + }, + { // Entry 27 + -0x1.02bea1024da614265a59c002ae0c56a0p-2, + -0x1.000004p-2 + }, + { // Entry 28 + 0x1.0c152a7075f75bf85c1ca9191b19a5afp-1, + 0x1.000006p-1 + }, + { // Entry 29 + -0x1.0c152a7075f75bf85c1ca9191b19a5afp-1, + -0x1.000006p-1 + }, + { // Entry 30 + 0x1.0c15315e14c63ae876f9313819157a92p-1, + 0x1.00000cp-1 + }, + { // Entry 31 + -0x1.0c15315e14c63ae876f9313819157a92p-1, + -0x1.00000cp-1 + }, + { // Entry 32 + 0x1.00ac0101ec72f1a878790d17bb281556p-3, + 0x1.000020p-3 + }, + { // Entry 33 + -0x1.00ac0101ec72f1a878790d17bb281556p-3, + -0x1.000020p-3 + }, + { // Entry 34 + 0x1.0c154ac55b88a3af9035a28322fdd9a3p-1, + 0x1.000022p-1 + }, + { // Entry 35 + -0x1.0c154ac55b88a3af9035a28322fdd9a3p-1, + -0x1.000022p-1 + }, + { // Entry 36 + 0x1.02bebffe2c7ea2805320dec66ca7844cp-2, + 0x1.000022p-2 + }, + { // Entry 37 + -0x1.02bebffe2c7ea2805320dec66ca7844cp-2, + -0x1.000022p-2 + }, + { // Entry 38 + 0x1.0c15565164aa3a55958458405a1c1e98p-1, + 0x1.00002cp-1 + }, + { // Entry 39 + -0x1.0c15565164aa3a55958458405a1c1e98p-1, + -0x1.00002cp-1 + }, + { // Entry 40 + 0x1.0c155aefcec270c5a31b3e016614b676p-1, + 0x1.000030p-1 + }, + { // Entry 41 + -0x1.0c155aefcec270c5a31b3e016614b676p-1, + -0x1.000030p-1 + }, + { // Entry 42 + 0x1.0c15667bd819ea5190d64e1eecd9d3ffp-1, + 0x1.00003ap-1 + }, + { // Entry 43 + -0x1.0c15667bd819ea5190d64e1eecd9d3ffp-1, + -0x1.00003ap-1 + }, + { // Entry 44 + 0x1.0c16deeaf496378cb0c17601a82b3ef7p-1, + 0x1.000180p-1 + }, + { // Entry 45 + -0x1.0c16deeaf496378cb0c17601a82b3ef7p-1, + -0x1.000180p-1 + }, + { // Entry 46 + 0x1.0c1772b884fb0853488f82c8eab22f06p-1, + 0x1.0002p-1 + }, + { // Entry 47 + -0x1.0c1772b884fb0853488f82c8eab22f06p-1, + -0x1.0002p-1 + }, + { // Entry 48 + 0x1.0c189a53efac87369bf73699b02aa09ep-1, + 0x1.0003p-1 + }, + { // Entry 49 + -0x1.0c189a53efac87369bf73699b02aa09ep-1, + -0x1.0003p-1 + }, + { // Entry 50 + 0x1.00aefcfffff563634fb095cc9e40dda3p-3, + 0x1.000316p-3 + }, + { // Entry 51 + -0x1.00aefcfffff563634fb095cc9e40dda3p-3, + -0x1.000316p-3 + }, + { // Entry 52 + 0x1.0c190240aa98557da9d4fe206ae66279p-1, + 0x1.00035ap-1 + }, + { // Entry 53 + -0x1.0c190240aa98557da9d4fe206ae66279p-1, + -0x1.00035ap-1 + }, + { // Entry 54 + 0x1.0c19c1efbce926ca14cb3e0b0fcfe46cp-1, + 0x1.0004p-1 + }, + { // Entry 55 + -0x1.0c19c1efbce926ca14cb3e0b0fcfe46cp-1, + -0x1.0004p-1 + }, + { // Entry 56 + 0x1.000b2b01e4072831138943d51020c3f5p-6, + 0x1.000880p-6 + }, + { // Entry 57 + -0x1.000b2b01e4072831138943d51020c3f5p-6, + -0x1.000880p-6 + }, + { // Entry 58 + 0x1.0c30da6ca06846115bb5e8040cd163a5p-1, + 0x1.0018p-1 + }, + { // Entry 59 + -0x1.0c30da6ca06846115bb5e8040cd163a5p-1, + -0x1.0018p-1 + }, + { // Entry 60 + 0x1.0c3578fe7d748ef467902185b57079a1p-1, + 0x1.001cp-1 + }, + { // Entry 61 + -0x1.0c3578fe7d748ef467902185b57079a1p-1, + -0x1.001cp-1 + }, + { // Entry 62 + 0x1.0c3a17968466fa128c82b047d29e1a81p-1, + 0x1.0020p-1 + }, + { // Entry 63 + -0x1.0c3a17968466fa128c82b047d29e1a81p-1, + -0x1.0020p-1 + }, + { // Entry 64 + 0x1.0c3b1a489846ab8835c530f3c925e48dp-1, + 0x1.0020e0p-1 + }, + { // Entry 65 + -0x1.0c3b1a489846ab8835c530f3c925e48dp-1, + -0x1.0020e0p-1 + }, + { // Entry 66 + 0x1.0c3c8bd9c9f36a99f8039f99249719a7p-1, + 0x1.002220p-1 + }, + { // Entry 67 + -0x1.0c3c8bd9c9f36a99f8039f99249719a7p-1, + -0x1.002220p-1 + }, + { // Entry 68 + 0x1.0c3eb634b570d95017c1efd1196f0188p-1, + 0x1.0024p-1 + }, + { // Entry 69 + -0x1.0c3eb634b570d95017c1efd1196f0188p-1, + -0x1.0024p-1 + }, + { // Entry 70 + 0x1.0c502e329b76cbc90d2bc2d8a46fd894p-1, + 0x1.003320p-1 + }, + { // Entry 71 + -0x1.0c502e329b76cbc90d2bc2d8a46fd894p-1, + -0x1.003320p-1 + }, + { // Entry 72 + 0x1.0c7f6563138d8ff3289425afc29cf2e4p-1, + 0x1.005cp-1 + }, + { // Entry 73 + -0x1.0c7f6563138d8ff3289425afc29cf2e4p-1, + -0x1.005cp-1 + }, + { // Entry 74 + 0x1.0c8d4265d9ee207b3dc21f1db76ede7cp-1, + 0x1.0068p-1 + }, + { // Entry 75 + -0x1.0c8d4265d9ee207b3dc21f1db76ede7cp-1, + -0x1.0068p-1 + }, + { // Entry 76 + 0x1.0c91e1732197e2a5d4dca63deb68090ap-1, + 0x1.006cp-1 + }, + { // Entry 77 + -0x1.0c91e1732197e2a5d4dca63deb68090ap-1, + -0x1.006cp-1 + }, + { // Entry 78 + 0x1.035dad0091daa5df1fc0e0e0a9fe4ed4p-2, + 0x1.009ap-2 + }, + { // Entry 79 + -0x1.035dad0091daa5df1fc0e0e0a9fe4ed4p-2, + -0x1.009ap-2 + }, + { // Entry 80 + 0x1.0d403226a827880e2ff8226ddebdcb2bp-1, + 0x1.0102d2p-1 + }, + { // Entry 81 + -0x1.0d403226a827880e2ff8226ddebdcb2bp-1, + -0x1.0102d2p-1 + }, + { // Entry 82 + 0x1.0d9488ef7d93f71e126a87e6a4df2604p-1, + 0x1.014bc0p-1 + }, + { // Entry 83 + -0x1.0d9488ef7d93f71e126a87e6a4df2604p-1, + -0x1.014bc0p-1 + }, + { // Entry 84 + 0x1.0db5367f9e64f3f50a2f70dbcc5b7254p-1, + 0x1.0168p-1 + }, + { // Entry 85 + -0x1.0db5367f9e64f3f50a2f70dbcc5b7254p-1, + -0x1.0168p-1 + }, + { // Entry 86 + 0x1.0de005001105becff3be2f022c424727p-1, + 0x1.018dp-1 + }, + { // Entry 87 + -0x1.0de005001105becff3be2f022c424727p-1, + -0x1.018dp-1 + }, + { // Entry 88 + 0x1.0f8db1c47d54f959ab0145145c67ac7cp-1, + 0x1.03p-1 + }, + { // Entry 89 + -0x1.0f8db1c47d54f959ab0145145c67ac7cp-1, + -0x1.03p-1 + }, + { // Entry 90 + 0x1.17df11023b00b60e566bcc34452d8efcp-1, + 0x1.0a24p-1 + }, + { // Entry 91 + -0x1.17df11023b00b60e566bcc34452d8efcp-1, + -0x1.0a24p-1 + }, + { // Entry 92 + 0x1.188a13003e2d6673f8b1137ddefa7ff6p-1, + 0x1.0ab608p-1 + }, + { // Entry 93 + -0x1.188a13003e2d6673f8b1137ddefa7ff6p-1, + -0x1.0ab608p-1 + }, + { // Entry 94 + 0x1.0c310bfed8146bab3eccd1f36ad598dfp-4, + 0x1.0cp-4 + }, + { // Entry 95 + -0x1.0c310bfed8146bab3eccd1f36ad598dfp-4, + -0x1.0cp-4 + }, + { // Entry 96 + 0x1.1ab071a6a6495483fb202832876267b1p-1, + 0x1.0c8b3ap-1 + }, + { // Entry 97 + -0x1.1ab071a6a6495483fb202832876267b1p-1, + -0x1.0c8b3ap-1 + }, + { // Entry 98 + 0x1.1ae03117af7650c7036eeb7f258539aep-1, + 0x1.0cb3e0p-1 + }, + { // Entry 99 + -0x1.1ae03117af7650c7036eeb7f258539aep-1, + -0x1.0cb3e0p-1 + }, + { // Entry 100 + 0x1.1c66b9ffd666cc7518f5aeee38193508p-1, + 0x1.0ep-1 + }, + { // Entry 101 + -0x1.1c66b9ffd666cc7518f5aeee38193508p-1, + -0x1.0ep-1 + }, + { // Entry 102 + 0x1.0e0321004f7f95de7df856f46276d32cp-6, + 0x1.0ep-6 + }, + { // Entry 103 + -0x1.0e0321004f7f95de7df856f46276d32cp-6, + -0x1.0ep-6 + }, + { // Entry 104 + 0x1.1d19b3000a8c63dbb9cd3aa26cb93af8p-1, + 0x1.0e98p-1 + }, + { // Entry 105 + -0x1.1d19b3000a8c63dbb9cd3aa26cb93af8p-1, + -0x1.0e98p-1 + }, + { // Entry 106 + 0x1.0f37e6ffffffcadf5403653d968a2680p-5, + 0x1.0f2b38p-5 + }, + { // Entry 107 + -0x1.0f37e6ffffffcadf5403653d968a2680p-5, + -0x1.0f2b38p-5 + }, + { // Entry 108 + 0x1.1ecf67bb91057e1a4092f0d0eaea1701p-1, + 0x1.100b32p-1 + }, + { // Entry 109 + -0x1.1ecf67bb91057e1a4092f0d0eaea1701p-1, + -0x1.100b32p-1 + }, + { // Entry 110 + 0x1.1f4b64fffffffa0c91291e1431281f37p-1, + 0x1.107434p-1 + }, + { // Entry 111 + -0x1.1f4b64fffffffa0c91291e1431281f37p-1, + -0x1.107434p-1 + }, + { // Entry 112 + 0x1.1903930006f8309241827585b2c80661p-2, + 0x1.1580p-2 + }, + { // Entry 113 + -0x1.1903930006f8309241827585b2c80661p-2, + -0x1.1580p-2 + }, + { // Entry 114 + 0x1.172493fffee5a2507f132613cadeccccp-5, + 0x1.1716c0p-5 + }, + { // Entry 115 + -0x1.172493fffee5a2507f132613cadeccccp-5, + -0x1.1716c0p-5 + }, + { // Entry 116 + 0x1.1c7d46fd7b1ac4ded1655c5206e6e630p-2, + 0x1.18d8p-2 + }, + { // Entry 117 + -0x1.1c7d46fd7b1ac4ded1655c5206e6e630p-2, + -0x1.18d8p-2 + }, + { // Entry 118 + 0x1.29647a7e646f32008c8601ac04967bfcp-1, + 0x1.18f32ep-1 + }, + { // Entry 119 + -0x1.29647a7e646f32008c8601ac04967bfcp-1, + -0x1.18f32ep-1 + }, + { // Entry 120 + 0x1.311900012958ac30f09a111b838a00c4p-1, + 0x1.1f5cp-1 + }, + { // Entry 121 + -0x1.311900012958ac30f09a111b838a00c4p-1, + -0x1.1f5cp-1 + }, + { // Entry 122 + 0x1.23fee9057a799bd52740b1ae1d1e9685p-2, + 0x1.200ep-2 + }, + { // Entry 123 + -0x1.23fee9057a799bd52740b1ae1d1e9685p-2, + -0x1.200ep-2 + }, + { // Entry 124 + 0x1.3cdf26fdd7f39ef9b6df17e306cf9247p-1, + 0x1.2906fcp-1 + }, + { // Entry 125 + -0x1.3cdf26fdd7f39ef9b6df17e306cf9247p-1, + -0x1.2906fcp-1 + }, + { // Entry 126 + 0x1.45311906dbb495a038edf78f3481fba9p-1, + 0x1.2fc3c2p-1 + }, + { // Entry 127 + -0x1.45311906dbb495a038edf78f3481fba9p-1, + -0x1.2fc3c2p-1 + }, + { // Entry 128 + 0x1.3644eaffff7a7a503708b5792101243fp-2, + 0x1.318b20p-2 + }, + { // Entry 129 + -0x1.3644eaffff7a7a503708b5792101243fp-2, + -0x1.318b20p-2 + }, + { // Entry 130 + 0x1.34360affff7ab0ac1a44f15312908de9p-5, + 0x1.34236ep-5 + }, + { // Entry 131 + -0x1.34360affff7ab0ac1a44f15312908de9p-5, + -0x1.34236ep-5 + }, + { // Entry 132 + 0x1.380134f73a1260de2e6015aa3c882e11p-7, + 0x1.38p-7 + }, + { // Entry 133 + -0x1.380134f73a1260de2e6015aa3c882e11p-7, + -0x1.38p-7 + }, + { // Entry 134 + 0x1.4014d8ffaf8aeb3dbd2dcdaae835ffefp-5, + 0x1.40p-5 + }, + { // Entry 135 + -0x1.4014d8ffaf8aeb3dbd2dcdaae835ffefp-5, + -0x1.40p-5 + }, + { // Entry 136 + 0x1.59ad15042743d036220b033a43e33a33p-1, + 0x1.4001c0p-1 + }, + { // Entry 137 + -0x1.59ad15042743d036220b033a43e33a33p-1, + -0x1.4001c0p-1 + }, + { // Entry 138 + 0x1.5ff1acffefe1ce301daaa4f72cee5d3ap-1, + 0x1.44e026p-1 + }, + { // Entry 139 + -0x1.5ff1acffefe1ce301daaa4f72cee5d3ap-1, + -0x1.44e026p-1 + }, + { // Entry 140 + 0x1.6eafa6f9f2763aaeabf6311f88ed3ce1p-1, + 0x1.502232p-1 + }, + { // Entry 141 + -0x1.6eafa6f9f2763aaeabf6311f88ed3ce1p-1, + -0x1.502232p-1 + }, + { // Entry 142 + 0x1.7423d70007f86d1c5c92cd2399d33f4cp-1, + 0x1.543a76p-1 + }, + { // Entry 143 + -0x1.7423d70007f86d1c5c92cd2399d33f4cp-1, + -0x1.543a76p-1 + }, + { // Entry 144 + 0x1.583dff000083fab9afb8092f68183a9fp-5, + 0x1.582410p-5 + }, + { // Entry 145 + -0x1.583dff000083fab9afb8092f68183a9fp-5, + -0x1.582410p-5 + }, + { // Entry 146 + 0x1.8f10290841d65bfd313e02877a87a22ep-1, + 0x1.67de32p-1 + }, + { // Entry 147 + -0x1.8f10290841d65bfd313e02877a87a22ep-1, + -0x1.67de32p-1 + }, + { // Entry 148 + 0x1.68ab6efc047d3ad046bd8183ec5c4d46p-4, + 0x1.68342ap-4 + }, + { // Entry 149 + -0x1.68ab6efc047d3ad046bd8183ec5c4d46p-4, + -0x1.68342ap-4 + }, + { // Entry 150 + 0x1.958d3affedd648f35110cf87a747e43dp-1, + 0x1.6c7452p-1 + }, + { // Entry 151 + -0x1.958d3affedd648f35110cf87a747e43dp-1, + -0x1.6c7452p-1 + }, + { // Entry 152 + 0x1.980272fff139547fa5ad822694b7159fp-1, + 0x1.6e2d2ep-1 + }, + { // Entry 153 + -0x1.980272fff139547fa5ad822694b7159fp-1, + -0x1.6e2d2ep-1 + }, + { // Entry 154 + 0x1.8101cefb4b74963084b66c2235b48567p-2, + 0x1.77fffep-2 + }, + { // Entry 155 + -0x1.8101cefb4b74963084b66c2235b48567p-2, + -0x1.77fffep-2 + }, + { // Entry 156 + 0x1.800001000001ccccd115f16ac09c2c1dp-10, + 0x1.7ffff8p-10 + }, + { // Entry 157 + -0x1.800001000001ccccd115f16ac09c2c1dp-10, + -0x1.7ffff8p-10 + }, + { // Entry 158 + 0x1.81f272fdf7b31c16d324f90717ad9849p-4, + 0x1.816050p-4 + }, + { // Entry 159 + -0x1.81f272fdf7b31c16d324f90717ad9849p-4, + -0x1.816050p-4 + }, + { // Entry 160 + 0x1.bce4ceffee2656af653f471f22502ccbp-1, + 0x1.86fbe6p-1 + }, + { // Entry 161 + -0x1.bce4ceffee2656af653f471f22502ccbp-1, + -0x1.86fbe6p-1 + }, + { // Entry 162 + 0x1.bd56d0ffebe6415a921b526b10cc09edp-1, + 0x1.874578p-1 + }, + { // Entry 163 + -0x1.bd56d0ffebe6415a921b526b10cc09edp-1, + -0x1.874578p-1 + }, + { // Entry 164 + 0x1.bd866affeb83a8ebf25b7e0c9b453091p-1, + 0x1.87642ap-1 + }, + { // Entry 165 + -0x1.bd866affeb83a8ebf25b7e0c9b453091p-1, + -0x1.87642ap-1 + }, + { // Entry 166 + 0x1.bdeae8ffefe79fe29894af8440b888bdp-1, + 0x1.87a4ecp-1 + }, + { // Entry 167 + -0x1.bdeae8ffefe79fe29894af8440b888bdp-1, + -0x1.87a4ecp-1 + }, + { // Entry 168 + 0x1.c0ffa2ffef29ead18ae6ab673811f725p-1, + 0x1.899f22p-1 + }, + { // Entry 169 + -0x1.c0ffa2ffef29ead18ae6ab673811f725p-1, + -0x1.899f22p-1 + }, + { // Entry 170 + 0x1.c257fb0004ddb2849076737a53acb2a8p-1, + 0x1.8a7afep-1 + }, + { // Entry 171 + -0x1.c257fb0004ddb2849076737a53acb2a8p-1, + -0x1.8a7afep-1 + }, + { // Entry 172 + 0x1.cc9d2b00116cbcf4625a1bbb3b5b4e78p-1, + 0x1.90f29cp-1 + }, + { // Entry 173 + -0x1.cc9d2b00116cbcf4625a1bbb3b5b4e78p-1, + -0x1.90f29cp-1 + }, + { // Entry 174 + 0x1.cdddf100135cb2e8716e639bb3b5249fp-1, + 0x1.91b9cap-1 + }, + { // Entry 175 + -0x1.cdddf100135cb2e8716e639bb3b5249fp-1, + -0x1.91b9cap-1 + }, + { // Entry 176 + 0x1.9dd80f000084e0c3df1946aed6d959bfp-7, + 0x1.9dd53ep-7 + }, + { // Entry 177 + -0x1.9dd80f000084e0c3df1946aed6d959bfp-7, + -0x1.9dd53ep-7 + }, + { // Entry 178 + 0x1.e5e6ecedd795023dfa3c7dc241f10438p-1, + 0x1.a02dccp-1 + }, + { // Entry 179 + -0x1.e5e6ecedd795023dfa3c7dc241f10438p-1, + -0x1.a02dccp-1 + }, + { // Entry 180 + 0x1.aa8363fe050a48c7238e23364d019995p-4, + 0x1.a9be2ep-4 + }, + { // Entry 181 + -0x1.aa8363fe050a48c7238e23364d019995p-4, + -0x1.a9be2ep-4 + }, + { // Entry 182 + 0x1.bf42d6021ad1ba9c3760e8c7cccdb6a5p-2, + 0x1.b12cd0p-2 + }, + { // Entry 183 + -0x1.bf42d6021ad1ba9c3760e8c7cccdb6a5p-2, + -0x1.b12cd0p-2 + }, + { // Entry 184 + 0x1.c43c42fc467765267b2bce544d70b0edp-2, + 0x1.b5ad60p-2 + }, + { // Entry 185 + -0x1.c43c42fc467765267b2bce544d70b0edp-2, + -0x1.b5ad60p-2 + }, + { // Entry 186 + 0x1.1094910e7fcd16c9764b4e1b76b737f6p0, + 0x1.bfd588p-1 + }, + { // Entry 187 + -0x1.1094910e7fcd16c9764b4e1b76b737f6p0, + -0x1.bfd588p-1 + }, + { // Entry 188 + 0x1.10c02f0e93e8632e646d67e9015374c9p0, + 0x1.bfffcap-1 + }, + { // Entry 189 + -0x1.10c02f0e93e8632e646d67e9015374c9p0, + -0x1.bfffcap-1 + }, + { // Entry 190 + 0x1.10c066d3e6931b76a13df3a689971ba5p0, + 0x1.c0p-1 + }, + { // Entry 191 + -0x1.10c066d3e6931b76a13df3a689971ba5p0, + -0x1.c0p-1 + }, + { // Entry 192 + 0x1.c7006b02966adf6a3df6650579596d38p-3, + 0x1.c3448ep-3 + }, + { // Entry 193 + -0x1.c7006b02966adf6a3df6650579596d38p-3, + -0x1.c3448ep-3 + }, + { // Entry 194 + 0x1.cced1cffffffead2e67aff2ed34f68fbp-4, + 0x1.cbf43cp-4 + }, + { // Entry 195 + -0x1.cced1cffffffead2e67aff2ed34f68fbp-4, + -0x1.cbf43cp-4 + }, + { // Entry 196 + 0x1.d194fd0297f56d654d767460f12bbd70p-3, + 0x1.cd95p-3 + }, + { // Entry 197 + -0x1.d194fd0297f56d654d767460f12bbd70p-3, + -0x1.cd95p-3 + }, + { // Entry 198 + 0x1.2d46e9003819962ec438e47416ebe356p0, + 0x1.d8c8c0p-1 + }, + { // Entry 199 + -0x1.2d46e9003819962ec438e47416ebe356p0, + -0x1.d8c8c0p-1 + }, + { // Entry 200 + 0x1.de1b0901f98eac7553f0e8195ad077fcp-3, + 0x1.d9c654p-3 + }, + { // Entry 201 + -0x1.de1b0901f98eac7553f0e8195ad077fcp-3, + -0x1.d9c654p-3 + }, + { // Entry 202 + 0x1.3722d2feb24c7d9ccc847f53a3a4ee80p0, + 0x1.e0p-1 + }, + { // Entry 203 + -0x1.3722d2feb24c7d9ccc847f53a3a4ee80p0, + -0x1.e0p-1 + }, + { // Entry 204 + 0x1.e481c0fce71340393796f56e26562981p-3, + 0x1.e0p-3 + }, + { // Entry 205 + -0x1.e481c0fce71340393796f56e26562981p-3, + -0x1.e0p-3 + }, + { // Entry 206 + 0x1.e2579e00010e16a23389c5d2d04cb016p-6, + 0x1.e245c8p-6 + }, + { // Entry 207 + -0x1.e2579e00010e16a23389c5d2d04cb016p-6, + -0x1.e245c8p-6 + }, + { // Entry 208 + 0x1.ebf1570082616eec6d62ca4bbe98a80ep-3, + 0x1.e739c0p-3 + }, + { // Entry 209 + -0x1.ebf1570082616eec6d62ca4bbe98a80ep-3, + -0x1.e739c0p-3 + }, + { // Entry 210 + 0x1.ec0b2efe45213aa2a5913be53fba2675p-3, + 0x1.e752dap-3 + }, + { // Entry 211 + -0x1.ec0b2efe45213aa2a5913be53fba2675p-3, + -0x1.e752dap-3 + }, + { // Entry 212 + 0x1.ed3b16ffff7cb9709229934808bd086bp-3, + 0x1.e87a02p-3 + }, + { // Entry 213 + -0x1.ed3b16ffff7cb9709229934808bd086bp-3, + -0x1.e87a02p-3 + }, + { // Entry 214 + 0x1.ffeaecffff817ca1af5df7aff71f98c6p-3, + 0x1.fa9a82p-3 + }, + { // Entry 215 + -0x1.ffeaecffff817ca1af5df7aff71f98c6p-3, + -0x1.fa9a82p-3 + }, + { // Entry 216 + 0x1.7d60c2f47c8167d9affdf68d4fdbc5d9p0, + 0x1.fe51d8p-1 + }, + { // Entry 217 + -0x1.7d60c2f47c8167d9affdf68d4fdbc5d9p0, + -0x1.fe51d8p-1 + }, + { // Entry 218 + 0x1.901f34fea94ed8bf7d5ce1e00256bec5p0, + 0x1.fffbfep-1 + }, + { // Entry 219 + -0x1.901f34fea94ed8bf7d5ce1e00256bec5p0, + -0x1.fffbfep-1 + }, + { // Entry 220 + 0x1.00ab7efcdc7e3da7637e617c6307c133p-3, + 0x1.ffff3ep-4 + }, + { // Entry 221 + -0x1.00ab7efcdc7e3da7637e617c6307c133p-3, + -0x1.ffff3ep-4 + }, + { // Entry 222 + 0x1.0c15110930220c79eb624ae419c8836cp-1, + 0x1.ffffe0p-2 + }, + { // Entry 223 + -0x1.0c15110930220c79eb624ae419c8836cp-1, + -0x1.ffffe0p-2 + }, + { // Entry 224 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.p-1 + }, + { // Entry 225 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.p-1 + }, + { // Entry 226 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.p-1 + }, + { // Entry 227 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.p-1 + }, + { // Entry 228 + 0x1.4a1ce5633729b4831c0f2de50b199161p-1, + 0x1.33b646p-1 + }, + { // Entry 229 + -0x1.4a1ce5633729b4831c0f2de50b199161p-1, + -0x1.33b646p-1 + }, + { // Entry 230 + 0x1.921fb4b1402384698984b09966f96de6p-1, + 0x1.6a09e6p-1 + }, + { // Entry 231 + -0x1.921fb4b1402384698984b09966f96de6p-1, + -0x1.6a09e6p-1 + }, + { // Entry 232 + 0x1.921fb4b1402384698984b09966f96de6p-1, + 0x1.6a09e6p-1 + }, + { // Entry 233 + -0x1.921fb4b1402384698984b09966f96de6p-1, + -0x1.6a09e6p-1 + }, + { // Entry 234 + -0x1.b235315c680dc081583db360d5e1fa18p-1, + -0x1.80p-1 + }, + { // Entry 235 + 0x1.b235315c680dc081583db360d5e1fa18p-1, + 0x1.80p-1 + }, + { // Entry 236 + 0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + 0x1.bb67aep-1 + }, + { // Entry 237 + -0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + -0x1.bb67aep-1 + }, + { // Entry 238 + 0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + 0x1.bb67aep-1 + }, + { // Entry 239 + -0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + -0x1.bb67aep-1 + }, + { // Entry 240 + 0x1.9080f0a242e636c8b158046e622390bep0, + 0x1.fffd60p-1 + }, + { // Entry 241 + -0x1.9080f0a242e636c8b158046e622390bep0, + -0x1.fffd60p-1 + }, + { // Entry 242 + 0x1.p-82, + 0x1.p-82 + }, + { // Entry 243 + -0x1.p-82, + -0x1.p-82 + }, + { // Entry 244 + 0x1.0000000000000000000000000000000ap-61, + 0x1.p-61 + }, + { // Entry 245 + -0x1.0000000000000000000000000000000ap-61, + -0x1.p-61 + }, + { // Entry 246 + 0x1.0000000000000000000002aaaaaaaaaap-42, + 0x1.p-42 + }, + { // Entry 247 + -0x1.0000000000000000000002aaaaaaaaaap-42, + -0x1.p-42 + }, + { // Entry 248 + 0x1.000000000002aaaaaaaaaabdddddddddp-22, + 0x1.p-22 + }, + { // Entry 249 + -0x1.000000000002aaaaaaaaaabdddddddddp-22, + -0x1.p-22 + }, + { // Entry 250 + 0x1.6a0a022b840dccf66e0b6ec9289f36b5p-9, + 0x1.6a09e4p-9 + }, + { // Entry 251 + -0x1.6a0a022b840dccf66e0b6ec9289f36b5p-9, + -0x1.6a09e4p-9 + }, + { // Entry 252 + 0x1.6a0a042b848dcd256f98664210471010p-9, + 0x1.6a09e6p-9 + }, + { // Entry 253 + -0x1.6a0a042b848dcd256f98664210471010p-9, + -0x1.6a09e6p-9 + }, + { // Entry 254 + 0x1.6a0a062b850dcd55db3053430d8801dep-9, + 0x1.6a09e8p-9 + }, + { // Entry 255 + -0x1.6a0a062b850dcd55db3053430d8801dep-9, + -0x1.6a09e8p-9 + }, + { // Entry 256 + 0x1.6a0a5cae61ad17ce4db740441bff4264p-8, + 0x1.6a09e4p-8 + }, + { // Entry 257 + -0x1.6a0a5cae61ad17ce4db740441bff4264p-8, + -0x1.6a09e4p-8 + }, + { // Entry 258 + 0x1.6a0a5eae63ad1aca589233f046ef6f98p-8, + 0x1.6a09e6p-8 + }, + { // Entry 259 + -0x1.6a0a5eae63ad1aca589233f046ef6f98p-8, + -0x1.6a09e6p-8 + }, + { // Entry 260 + 0x1.6a0a60ae65ad1dcc0ba5b83d9dac8608p-8, + 0x1.6a09e8p-8 + }, + { // Entry 261 + -0x1.6a0a60ae65ad1dcc0ba5b83d9dac8608p-8, + -0x1.6a09e8p-8 + }, + { // Entry 262 + 0x1.6a0bc6be9e29599e77d42647891c84e9p-7, + 0x1.6a09e4p-7 + }, + { // Entry 263 + -0x1.6a0bc6be9e29599e77d42647891c84e9p-7, + -0x1.6a09e4p-7 + }, + { // Entry 264 + 0x1.6a0bc8bea629898fceb95fb04958a217p-7, + 0x1.6a09e6p-7 + }, + { // Entry 265 + -0x1.6a0bc8bea629898fceb95fb04958a217p-7, + -0x1.6a09e6p-7 + }, + { // Entry 266 + 0x1.6a0bcabeae29b997c74c8b209ada2625p-7, + 0x1.6a09e8p-7 + }, + { // Entry 267 + -0x1.6a0bcabeae29b997c74c8b209ada2625p-7, + -0x1.6a09e8p-7 + }, + { // Entry 268 + 0x1.6a116f4bf5a44da64d89fa35a6ebac04p-6, + 0x1.6a09e4p-6 + }, + { // Entry 269 + -0x1.6a116f4bf5a44da64d89fa35a6ebac04p-6, + -0x1.6a09e4p-6 + }, + { // Entry 270 + 0x1.6a11714c15a74db6a8c862c053ff5c47p-6, + 0x1.6a09e6p-6 + }, + { // Entry 271 + -0x1.6a11714c15a74db6a8c862c053ff5c47p-6, + -0x1.6a09e6p-6 + }, + { // Entry 272 + 0x1.6a11734c35aa4e21977b693edb0fbfedp-6, + 0x1.6a09e8p-6 + }, + { // Entry 273 + -0x1.6a11734c35aa4e21977b693edb0fbfedp-6, + -0x1.6a09e8p-6 + }, + { // Entry 274 + 0x1.6a28164912c9ea8249262954f1ae1a22p-5, + 0x1.6a09e4p-5 + }, + { // Entry 275 + -0x1.6a28164912c9ea8249262954f1ae1a22p-5, + -0x1.6a09e4p-5 + }, + { // Entry 276 + 0x1.6a28184992f9fd8bc772026d91605dcap-5, + 0x1.6a09e6p-5 + }, + { // Entry 277 + -0x1.6a28184992f9fd8bc772026d91605dcap-5, + -0x1.6a09e6p-5 + }, + { // Entry 278 + 0x1.6a281a4a132a12005fd55f43d2bf81a6p-5, + 0x1.6a09e8p-5 + }, + { // Entry 279 + -0x1.6a281a4a132a12005fd55f43d2bf81a6p-5, + -0x1.6a09e8p-5 + }, + { // Entry 280 + 0x1.6a82ff139c02609620ef4694ee627b57p-4, + 0x1.6a09e4p-4 + }, + { // Entry 281 + -0x1.6a82ff139c02609620ef4694ee627b57p-4, + -0x1.6a09e4p-4 + }, + { // Entry 282 + 0x1.6a8301159f07655fd879480b5cbcf5cbp-4, + 0x1.6a09e6p-4 + }, + { // Entry 283 + -0x1.6a8301159f07655fd879480b5cbcf5cbp-4, + -0x1.6a09e6p-4 + }, + { // Entry 284 + 0x1.6a830317a20c6fe2dae30fe5babe63f8p-4, + 0x1.6a09e8p-4 + }, + { // Entry 285 + -0x1.6a830317a20c6fe2dae30fe5babe63f8p-4, + -0x1.6a09e8p-4 + }, + { // Entry 286 + 0x1.6bf386a4733dc9584317633d590964f4p-3, + 0x1.6a09e4p-3 + }, + { // Entry 287 + -0x1.6bf386a4733dc9584317633d590964f4p-3, + -0x1.6a09e4p-3 + }, + { // Entry 288 + 0x1.6bf388aca486b9850c50cf9f457667f2p-3, + 0x1.6a09e6p-3 + }, + { // Entry 289 + -0x1.6bf388aca486b9850c50cf9f457667f2p-3, + -0x1.6a09e6p-3 + }, + { // Entry 290 + 0x1.6bf38ab4d5cfc16cfd39ac77e07b6048p-3, + 0x1.6a09e8p-3 + }, + { // Entry 291 + -0x1.6bf38ab4d5cfc16cfd39ac77e07b6048p-3, + -0x1.6a09e8p-3 + }, + { // Entry 292 + 0x1.720a3699a2940f93106e8a7ed729b32ap-2, + 0x1.6a09e4p-2 + }, + { // Entry 293 + -0x1.720a3699a2940f93106e8a7ed729b32ap-2, + -0x1.6a09e4p-2 + }, + { // Entry 294 + 0x1.720a38bcfc706dd98b8488a3c1523d31p-2, + 0x1.6a09e6p-2 + }, + { // Entry 295 + -0x1.720a38bcfc706dd98b8488a3c1523d31p-2, + -0x1.6a09e6p-2 + }, + { // Entry 296 + 0x1.720a3ae0564d3ab4ea8b987564d202e2p-2, + 0x1.6a09e8p-2 + }, + { // Entry 297 + -0x1.720a3ae0564d3ab4ea8b987564d202e2p-2, + -0x1.6a09e8p-2 + }, + { // Entry 298 + 0x1.bb67e36d07936cca0afecdde8822ac92p-9, + 0x1.bb67acp-9 + }, + { // Entry 299 + -0x1.bb67e36d07936cca0afecdde8822ac92p-9, + -0x1.bb67acp-9 + }, + { // Entry 300 + 0x1.bb67e56d08536d34b9eb8cded8ea25b3p-9, + 0x1.bb67aep-9 + }, + { // Entry 301 + -0x1.bb67e56d08536d34b9eb8cded8ea25b3p-9, + -0x1.bb67aep-9 + }, + { // Entry 302 + 0x1.bb67e76d09136da12441ecb59fee2493p-9, + 0x1.bb67b0p-9 + }, + { // Entry 303 + -0x1.bb67e76d09136da12441ecb59fee2493p-9, + -0x1.bb67b0p-9 + }, + { // Entry 304 + 0x1.bb6889b4fec8ebcca61c46f455ae5d4fp-8, + 0x1.bb67acp-8 + }, + { // Entry 305 + -0x1.bb6889b4fec8ebcca61c46f455ae5d4fp-8, + -0x1.bb67acp-8 + }, + { // Entry 306 + 0x1.bb688bb501c8f287718fa43e6142902dp-8, + 0x1.bb67aep-8 + }, + { // Entry 307 + -0x1.bb688bb501c8f287718fa43e6142902dp-8, + -0x1.bb67aep-8 + }, + { // Entry 308 + 0x1.bb688db504c8f9492ac0e747817f22a8p-8, + 0x1.bb67b0p-8 + }, + { // Entry 309 + -0x1.bb688db504c8f9492ac0e747817f22a8p-8, + -0x1.bb67b0p-8 + }, + { // Entry 310 + 0x1.bb6b22e203353028e079513a11cbbab3p-7, + 0x1.bb67acp-7 + }, + { // Entry 311 + -0x1.bb6b22e203353028e079513a11cbbab3p-7, + -0x1.bb67acp-7 + }, + { // Entry 312 + 0x1.bb6b24e20f359c1801d5ae434ae75b2dp-7, + 0x1.bb67aep-7 + }, + { // Entry 313 + -0x1.bb6b24e20f359c1801d5ae434ae75b2dp-7, + -0x1.bb67aep-7 + }, + { // Entry 314 + 0x1.bb6b26e21b360822db9fdd2b265541b5p-7, + 0x1.bb67b0p-7 + }, + { // Entry 315 + -0x1.bb6b26e21b360822db9fdd2b265541b5p-7, + -0x1.bb67b0p-7 + }, + { // Entry 316 + 0x1.bb758868a56d6f7d82a704d6da78e2fdp-6, + 0x1.bb67acp-6 + }, + { // Entry 317 + -0x1.bb758868a56d6f7d82a704d6da78e2fdp-6, + -0x1.bb67acp-6 + }, + { // Entry 318 + 0x1.bb758a68d574303741eb85efe34dac9ap-6, + 0x1.bb67aep-6 + }, + { // Entry 319 + -0x1.bb758a68d574303741eb85efe34dac9ap-6, + -0x1.bb67aep-6 + }, + { // Entry 320 + 0x1.bb758c69057af15ffa5021690b86d6e5p-6, + 0x1.bb67b0p-6 + }, + { // Entry 321 + -0x1.bb758c69057af15ffa5021690b86d6e5p-6, + -0x1.bb67b0p-6 + }, + { // Entry 322 + 0x1.bb9f2bb2025df5b5a01f890e267acbf6p-5, + 0x1.bb67acp-5 + }, + { // Entry 323 + -0x1.bb9f2bb2025df5b5a01f890e267acbf6p-5, + -0x1.bb67acp-5 + }, + { // Entry 324 + 0x1.bb9f2db2c2ca380f37f00e10c34f3f4ep-5, + 0x1.bb67aep-5 + }, + { // Entry 325 + -0x1.bb9f2db2c2ca380f37f00e10c34f3f4ep-5, + -0x1.bb67aep-5 + }, + { // Entry 326 + 0x1.bb9f2fb383367c262c18778b11ce72cap-5, + 0x1.bb67b0p-5 + }, + { // Entry 327 + -0x1.bb9f2fb383367c262c18778b11ce72cap-5, + -0x1.bb67b0p-5 + }, + { // Entry 328 + 0x1.bc468d3a974cd6c6f353f238e6ee9635p-4, + 0x1.bb67acp-4 + }, + { // Entry 329 + -0x1.bc468d3a974cd6c6f353f238e6ee9635p-4, + -0x1.bb67acp-4 + }, + { // Entry 330 + 0x1.bc468f3d9e1dde2e7296f0680c8b5cf1p-4, + 0x1.bb67aep-4 + }, + { // Entry 331 + -0x1.bc468f3d9e1dde2e7296f0680c8b5cf1p-4, + -0x1.bb67aep-4 + }, + { // Entry 332 + 0x1.bc469140a4eeeca3346497225181070ep-4, + 0x1.bb67b0p-4 + }, + { // Entry 333 + -0x1.bc469140a4eeeca3346497225181070ep-4, + -0x1.bb67b0p-4 + }, + { // Entry 334 + 0x1.bef1ba1b54f2e517608d497eda81f13ep-3, + 0x1.bb67acp-3 + }, + { // Entry 335 + -0x1.bef1ba1b54f2e517608d497eda81f13ep-3, + -0x1.bb67acp-3 + }, + { // Entry 336 + 0x1.bef1bc27c5590e551667836f44b8240bp-3, + 0x1.bb67aep-3 + }, + { // Entry 337 + -0x1.bef1bc27c5590e551667836f44b8240bp-3, + -0x1.bb67aep-3 + }, + { // Entry 338 + 0x1.bef1be3435bf555b062c6b933968f858p-3, + 0x1.bb67b0p-3 + }, + { // Entry 339 + -0x1.bef1be3435bf555b062c6b933968f858p-3, + -0x1.bb67b0p-3 + }, + { // Entry 340 + 0x1.ca94909f751f880a004b5b2d1358c7d8p-2, + 0x1.bb67acp-2 + }, + { // Entry 341 + -0x1.ca94909f751f880a004b5b2d1358c7d8p-2, + -0x1.bb67acp-2 + }, + { // Entry 342 + 0x1.ca9492d778731c60ad6f2198bec11118p-2, + 0x1.bb67aep-2 + }, + { // Entry 343 + -0x1.ca9492d778731c60ad6f2198bec11118p-2, + -0x1.bb67aep-2 + }, + { // Entry 344 + 0x1.ca94950f7bc7481303f6206eb55e6063p-2, + 0x1.bb67b0p-2 + }, + { // Entry 345 + -0x1.ca94950f7bc7481303f6206eb55e6063p-2, + -0x1.bb67b0p-2 + }, + { // Entry 346 + 0x1.fffff8p-128, + 0x1.fffff8p-128 + }, + { // Entry 347 + -0x1.fffff8p-128, + -0x1.fffff8p-128 + }, + { // Entry 348 + 0x1.p-127, + 0x1.p-127 + }, + { // Entry 349 + -0x1.p-127, + -0x1.p-127 + }, + { // Entry 350 + 0x1.000004p-127, + 0x1.000004p-127 + }, + { // Entry 351 + -0x1.000004p-127, + -0x1.000004p-127 + }, + { // Entry 352 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 353 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 354 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 355 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 356 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 357 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 358 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 359 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 360 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 361 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 362 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 363 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 364 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 365 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 366 + 0.0, + 0.0 + }, + { // Entry 367 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 368 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 369 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 370 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 371 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 372 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 373 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 374 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 375 + 0x1.fffffe0000000005555545555565557bp-31, + 0x1.fffffep-31 + }, + { // Entry 376 + -0x1.fffffe0000000005555545555565557bp-31, + -0x1.fffffep-31 + }, + { // Entry 377 + 0x1.0000000000000002aaaaaaaaaaaaaabdp-30, + 0x1.p-30 + }, + { // Entry 378 + -0x1.0000000000000002aaaaaaaaaaaaaabdp-30, + -0x1.p-30 + }, + { // Entry 379 + 0x1.0000020000000002aaaabaaaaacaaabdp-30, + 0x1.000002p-30 + }, + { // Entry 380 + -0x1.0000020000000002aaaabaaaaacaaabdp-30, + -0x1.000002p-30 + }, + { // Entry 381 + 0x1.fffffe0000000155555155555957bbbap-28, + 0x1.fffffep-28 + }, + { // Entry 382 + -0x1.fffffe0000000155555155555957bbbap-28, + -0x1.fffffep-28 + }, + { // Entry 383 + 0x1.00000000000000aaaaaaaaaaaaabddddp-27, + 0x1.p-27 + }, + { // Entry 384 + -0x1.00000000000000aaaaaaaaaaaaabddddp-27, + -0x1.p-27 + }, + { // Entry 385 + 0x1.00000200000000aaaaaeaaaab2abdde3p-27, + 0x1.000002p-27 + }, + { // Entry 386 + -0x1.00000200000000aaaaaeaaaab2abdde3p-27, + -0x1.000002p-27 + }, + { // Entry 387 + 0x1.fffffe00000015555515555597bbbb9ap-26, + 0x1.fffffep-26 + }, + { // Entry 388 + -0x1.fffffe00000015555515555597bbbb9ap-26, + -0x1.fffffep-26 + }, + { // Entry 389 + 0x1.0000000000000aaaaaaaaaaaabddddddp-25, + 0x1.p-25 + }, + { // Entry 390 + -0x1.0000000000000aaaaaaaaaaaabddddddp-25, + -0x1.p-25 + }, + { // Entry 391 + 0x1.0000020000000aaaaaeaaaab2bddde3fp-25, + 0x1.000002p-25 + }, + { // Entry 392 + -0x1.0000020000000aaaaaeaaaab2bddde3fp-25, + -0x1.000002p-25 + }, + { // Entry 393 + 0x1.fffffe055555457bbbcafd296eb7e3aap-15, + 0x1.fffffep-15 + }, + { // Entry 394 + -0x1.fffffe055555457bbbcafd296eb7e3aap-15, + -0x1.fffffep-15 + }, + { // Entry 395 + 0x1.00000002aaaaaabdddddde94b94b9c80p-14, + 0x1.p-14 + }, + { // Entry 396 + -0x1.00000002aaaaaabdddddde94b94b9c80p-14, + -0x1.p-14 + }, + { // Entry 397 + 0x1.00000202aaaababdddfe9e94d1aaf1dbp-14, + 0x1.000002p-14 + }, + { // Entry 398 + -0x1.00000202aaaababdddfe9e94d1aaf1dbp-14, + -0x1.000002p-14 + }, + { // Entry 399 + 0x1.0002a9bdd69461160d4c75451704a3b7p-6, + 0x1.fffffep-7 + }, + { // Entry 400 + -0x1.0002a9bdd69461160d4c75451704a3b7p-6, + -0x1.fffffep-7 + }, + { // Entry 401 + 0x1.0002aabdde94c1130cd26cdfa377f967p-6, + 0x1.p-6 + }, + { // Entry 402 + -0x1.0002aabdde94c1130cd26cdfa377f967p-6, + -0x1.p-6 + }, + { // Entry 403 + 0x1.0002acbdee95813d105ec61fcd6ae2fap-6, + 0x1.000002p-6 + }, + { // Entry 404 + -0x1.0002acbdee95813d105ec61fcd6ae2fap-6, + -0x1.000002p-6 + }, + { // Entry 405 + 0x1.000aaaddeb9680b69f39448305c87741p-5, + 0x1.fffffep-6 + }, + { // Entry 406 + -0x1.000aaaddeb9680b69f39448305c87741p-5, + -0x1.fffffep-6 + }, + { // Entry 407 + 0x1.000aabde0b9c81d6d94551be3e924e2ap-5, + 0x1.p-5 + }, + { // Entry 408 + -0x1.000aabde0b9c81d6d94551be3e924e2ap-5, + -0x1.p-5 + }, + { // Entry 409 + 0x1.000aadde4ba884d79574330eaeb7d132p-5, + 0x1.000002p-5 + }, + { // Entry 410 + -0x1.000aadde4ba884d79574330eaeb7d132p-5, + -0x1.000002p-5 + }, + { // Entry 411 + 0x1.002abce8d301449b3a6e1375645eb853p-4, + 0x1.fffffep-5 + }, + { // Entry 412 + -0x1.002abce8d301449b3a6e1375645eb853p-4, + -0x1.fffffep-5 + }, + { // Entry 413 + 0x1.002abde953619460b8b71b77bb495f57p-4, + 0x1.p-4 + }, + { // Entry 414 + -0x1.002abde953619460b8b71b77bb495f57p-4, + -0x1.p-4 + }, + { // Entry 415 + 0x1.002abfea542236f03af0c770006184e0p-4, + 0x1.000002p-4 + }, + { // Entry 416 + -0x1.002abfea542236f03af0c770006184e0p-4, + -0x1.000002p-4 + }, + { // Entry 417 + 0x1.00abdfbf23cd9bcb0908b67c29bd1d84p-3, + 0x1.fffffep-4 + }, + { // Entry 418 + -0x1.00abdfbf23cd9bcb0908b67c29bd1d84p-3, + -0x1.fffffep-4 + }, + { // Entry 419 + 0x1.00abe0c129e1e0be7587724ea14e03b1p-3, + 0x1.p-3 + }, + { // Entry 420 + -0x1.00abe0c129e1e0be7587724ea14e03b1p-3, + -0x1.p-3 + }, + { // Entry 421 + 0x1.00abe2c5360a76eebd374087e13d0778p-3, + 0x1.000002p-3 + }, + { // Entry 422 + -0x1.00abe2c5360a76eebd374087e13d0778p-3, + -0x1.000002p-3 + }, + { // Entry 423 + 0x1.02be9bd85332ad669015b48f1281cd8ep-2, + 0x1.fffffep-3 + }, + { // Entry 424 + -0x1.02be9bd85332ad669015b48f1281cd8ep-2, + -0x1.fffffep-3 + }, + { // Entry 425 + 0x1.02be9ce0b87cd1e5d09da2e0f0423bfap-2, + 0x1.p-2 + }, + { // Entry 426 + -0x1.02be9ce0b87cd1e5d09da2e0f0423bfap-2, + -0x1.p-2 + }, + { // Entry 427 + 0x1.02be9ef183114fc560988306f887ac74p-2, + 0x1.000002p-2 + }, + { // Entry 428 + -0x1.02be9ef183114fc560988306f887ac74p-2, + -0x1.000002p-2 + }, + { // Entry 429 + 0x1.0c15225b3cc2308792870438ebfd5814p-1, + 0x1.fffffep-2 + }, + { // Entry 430 + -0x1.0c15225b3cc2308792870438ebfd5814p-1, + -0x1.fffffep-2 + }, + { // Entry 431 + 0x1.0c152382d73658465bb32e0f567ad116p-1, + 0x1.p-1 + }, + { // Entry 432 + -0x1.0c152382d73658465bb32e0f567ad116p-1, + -0x1.p-1 + }, + { // Entry 433 + 0x1.0c1525d20c1fcf5e632996922f28dbf4p-1, + 0x1.000002p-1 + }, + { // Entry 434 + -0x1.0c1525d20c1fcf5e632996922f28dbf4p-1, + -0x1.000002p-1 + }, + { // Entry 435 + 0x1.920914a5da6f90beac755cf81add3707p0, + 0x1.fffffep-1 + }, + { // Entry 436 + -0x1.920914a5da6f90beac755cf81add3707p0, + -0x1.fffffep-1 + }, + { // Entry 437 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p0 + }, + { // Entry 438 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p0 + }, + { // Entry 439 + 0x1.921faf0918938469613a406686d325fbp-1, + 0x1.6a09e2p-1 + }, + { // Entry 440 + -0x1.921faf0918938469613a406686d325fbp-1, + -0x1.6a09e2p-1 + }, + { // Entry 441 + 0x1.921fb1dd2c59846982fbd21e12b62957p-1, + 0x1.6a09e4p-1 + }, + { // Entry 442 + -0x1.921fb1dd2c59846982fbd21e12b62957p-1, + -0x1.6a09e4p-1 + }, + { // Entry 443 + 0x1.921fb4b1402384698984b09966f96de6p-1, + 0x1.6a09e6p-1 + }, + { // Entry 444 + -0x1.921fb4b1402384698984b09966f96de6p-1, + -0x1.6a09e6p-1 + }, + { // Entry 445 + 0x1.921fb78553f184698b7579b807754fb1p-1, + 0x1.6a09e8p-1 + }, + { // Entry 446 + -0x1.921fb78553f184698b7579b807754fb1p-1, + -0x1.6a09e8p-1 + }, + { // Entry 447 + 0x1.921fba5967c384699f6ecc197800562dp-1, + 0x1.6a09eap-1 + }, + { // Entry 448 + -0x1.921fba5967c384699f6ecc197800562dp-1, + -0x1.6a09eap-1 + }, + { // Entry 449 + 0x1.0c151efd527d65a2625f3b65877af5c1p0, + 0x1.bb67aap-1 + }, + { // Entry 450 + -0x1.0c151efd527d65a2625f3b65877af5c1p0, + -0x1.bb67aap-1 + }, + { // Entry 451 + 0x1.0c1520fd527132af0e514af5d776d861p0, + 0x1.bb67acp-1 + }, + { // Entry 452 + -0x1.0c1520fd527132af0e514af5d776d861p0, + -0x1.bb67acp-1 + }, + { // Entry 453 + 0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + 0x1.bb67aep-1 + }, + { // Entry 454 + -0x1.0c1522fd526bed5a0f7cb328ba5c3991p0, + -0x1.bb67aep-1 + }, + { // Entry 455 + 0x1.0c1524fd526d95a3b5e16f8bb09d2428p0, + 0x1.bb67b0p-1 + }, + { // Entry 456 + -0x1.0c1524fd526d95a3b5e16f8bb09d2428p0, + -0x1.bb67b0p-1 + }, + { // Entry 457 + 0x1.0c1526fd52762b8c517f8184b870bf6dp0, + 0x1.bb67b2p-1 + }, + { // Entry 458 + -0x1.0c1526fd52762b8c517f8184b870bf6dp0, + -0x1.bb67b2p-1 + }, + { // Entry 459 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p0 + }, + { // Entry 460 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p0 + }, + { // Entry 461 + 0x1.920914a5da6f90beac755cf81add3707p0, + 0x1.fffffep-1 + }, + { // Entry 462 + -0x1.920914a5da6f90beac755cf81add3707p0, + -0x1.fffffep-1 + }, + { // Entry 463 + 0x1.ce8277f32da2c5ee7ea325793fd7ccd1p-1, + 0x1.921fb6p-1 + }, + { // Entry 464 + -0x1.ce8277f32da2c5ee7ea325793fd7ccd1p-1, + -0x1.921fb6p-1 + }, + { // Entry 465 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 466 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 467 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 468 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 469 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 470 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 471 + 0x1.fffff8p-127, + 0x1.fffff8p-127 + }, + { // Entry 472 + -0x1.fffff8p-127, + -0x1.fffff8p-127 + }, + { // Entry 473 + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 474 + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 475 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 476 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 477 + 0.0, + 0.0f + }, + { // Entry 478 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/asinh_intel_data.h b/tests/math_data/asinh_intel_data.h new file mode 100644 index 000000000..98eff8674 --- /dev/null +++ b/tests/math_data/asinh_intel_data.h @@ -0,0 +1,2042 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_asinh_intel_data[] = { + { // Entry 0 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 1 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 2 + -0x1.f2eba5eb5b53c803301c0f8279efd38cp-2, + -0x1.0372ae11c5a53p-1 + }, + { // Entry 3 + 0x1.f2eba5eb5b53c803301c0f8279efd38cp-2, + 0x1.0372ae11c5a53p-1 + }, + { // Entry 4 + -0x1.f8df023d2021bc3d400b315a5494d006p-2, + -0x1.06c9b26c9b268p-1 + }, + { // Entry 5 + 0x1.f8df023d2021bc3d400b315a5494d006p-2, + 0x1.06c9b26c9b268p-1 + }, + { // Entry 6 + -0x1.fb25d3a760a193706b3228440829ee8fp-2, + -0x1.08116a27c1078p-1 + }, + { // Entry 7 + 0x1.fb25d3a760a193706b3228440829ee8fp-2, + 0x1.08116a27c1078p-1 + }, + { // Entry 8 + -0x1.fec35b3e7215a3724feecdb2518899cep-2, + -0x1.0a1a86a1a87p-1 + }, + { // Entry 9 + 0x1.fec35b3e7215a3724feecdb2518899cep-2, + 0x1.0a1a86a1a87p-1 + }, + { // Entry 10 + -0x1.ff951bb7ee7f7a1d9dcf30fb1f47bad6p-2, + -0x1.0a90be1c15949p-1 + }, + { // Entry 11 + 0x1.ff951bb7ee7f7a1d9dcf30fb1f47bad6p-2, + 0x1.0a90be1c15949p-1 + }, + { // Entry 12 + -0x1.3b60a4460a2d2800883eb5ded3be4df0p2, + -0x1.1421084210848p6 + }, + { // Entry 13 + 0x1.3b60a4460a2d2800883eb5ded3be4df0p2, + 0x1.1421084210848p6 + }, + { // Entry 14 + -0x1.138aeab017488804b338e9ac099ab687p-2, + -0x1.16e1400db88a8p-2 + }, + { // Entry 15 + 0x1.138aeab017488804b338e9ac099ab687p-2, + 0x1.16e1400db88a8p-2 + }, + { // Entry 16 + -0x1.fdbacdc8a66437ff0c93d9767a45cb0cp-1, + -0x1.2b1a532971568p0 + }, + { // Entry 17 + 0x1.fdbacdc8a66437ff0c93d9767a45cb0cp-1, + 0x1.2b1a532971568p0 + }, + { // Entry 18 + -0x1.24501dcbce83f8126c61bacbb8a27cedp1, + -0x1.36c03904a8e4ep2 + }, + { // Entry 19 + 0x1.24501dcbce83f8126c61bacbb8a27cedp1, + 0x1.36c03904a8e4ep2 + }, + { // Entry 20 + -0x1.5d36f22f9d342ff8da6ba2b17b474db8p-3, + -0x1.5ee8cb3c781c0p-3 + }, + { // Entry 21 + 0x1.5d36f22f9d342ff8da6ba2b17b474db8p-3, + 0x1.5ee8cb3c781c0p-3 + }, + { // Entry 22 + -0x1.52b6672b024fe000ae144fc9afaeaf51p-1, + -0x1.6bf6fdbf6fd24p-1 + }, + { // Entry 23 + 0x1.52b6672b024fe000ae144fc9afaeaf51p-1, + 0x1.6bf6fdbf6fd24p-1 + }, + { // Entry 24 + -0x1.3993d63acc4ba8035d2b420b1158f993p1, + -0x1.70000000000ffp2 + }, + { // Entry 25 + 0x1.3993d63acc4ba8035d2b420b1158f993p1, + 0x1.70000000000ffp2 + }, + { // Entry 26 + -0x1.97580351103362867acce504fee4245dp-9, + -0x1.97582e4a115p-9 + }, + { // Entry 27 + 0x1.97580351103362867acce504fee4245dp-9, + 0x1.97582e4a115p-9 + }, + { // Entry 28 + -0x1.97b3da2c985dc7e04ebe6b0d62a5513ap-3, + -0x1.9a6699a6699b0p-3 + }, + { // Entry 29 + 0x1.97b3da2c985dc7e04ebe6b0d62a5513ap-3, + 0x1.9a6699a6699b0p-3 + }, + { // Entry 30 + -0x1.92a338ada07c1b531a9867c9a235d502p-2, + -0x1.9d17d9fcad768p-2 + }, + { // Entry 31 + 0x1.92a338ada07c1b531a9867c9a235d502p-2, + 0x1.9d17d9fcad768p-2 + }, + { // Entry 32 + -0x1.4c76858b980217a240a5c74a2588e630p1, + -0x1.ab52dd08f34f4p2 + }, + { // Entry 33 + 0x1.4c76858b980217a240a5c74a2588e630p1, + 0x1.ab52dd08f34f4p2 + }, + { // Entry 34 + -0x1.c06f36b1bdfbf6638d2d6cdc9bc63083p-8, + -0x1.c0701c0701ep-8 + }, + { // Entry 35 + 0x1.c06f36b1bdfbf6638d2d6cdc9bc63083p-8, + 0x1.c0701c0701ep-8 + }, + { // Entry 36 + 0.0, + 0x1.0p-1074 + }, + { // Entry 37 + -0.0, + -0x1.0p-1074 + }, + { // Entry 38 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 39 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 40 + 0x1.419ecb712c480f8b5decb58386dedd9dp4, + 0x1.0000000000003p28 + }, + { // Entry 41 + -0x1.419ecb712c480f8b5decb58386dedd9dp4, + -0x1.0000000000003p28 + }, + { // Entry 42 + 0x1.ecc2caec516161a5e8aa442a5078d5cfp-2, + 0x1.0000000000007p-1 + }, + { // Entry 43 + -0x1.ecc2caec516161a5e8aa442a5078d5cfp-2, + -0x1.0000000000007p-1 + }, + { // Entry 44 + 0x1.facfb2399e674ffa702bb3c88b513063p-3, + 0x1.0000000000020p-2 + }, + { // Entry 45 + -0x1.facfb2399e674ffa702bb3c88b513063p-3, + -0x1.0000000000020p-2 + }, + { // Entry 46 + 0x1.fffaaad10fbf68e32f80487342e56091p-7, + 0x1.00000000000e0p-6 + }, + { // Entry 47 + -0x1.fffaaad10fbf68e32f80487342e56091p-7, + -0x1.00000000000e0p-6 + }, + { // Entry 48 + 0x1.ffeaad10b5eade934d677b23c2b7f1f1p-6, + 0x1.00000000001c0p-5 + }, + { // Entry 49 + -0x1.ffeaad10b5eade934d677b23c2b7f1f1p-6, + -0x1.00000000001c0p-5 + }, + { // Entry 50 + 0x1.c3436617a1808a74e9cb44e078522310p-1, + 0x1.00000000030p0 + }, + { // Entry 51 + -0x1.c3436617a1808a74e9cb44e078522310p-1, + -0x1.00000000030p0 + }, + { // Entry 52 + 0x1.ffffeaaacb7b0ce864203f798c0ce39dp-10, + 0x1.000000000f350p-9 + }, + { // Entry 53 + -0x1.ffffeaaacb7b0ce864203f798c0ce39dp-10, + -0x1.000000000f350p-9 + }, + { // Entry 54 + 0x1.ffffeaaacd310cb1a42a8370b88e1d60p-10, + 0x1.00000000101p-9 + }, + { // Entry 55 + -0x1.ffffeaaacd310cb1a42a8370b88e1d60p-10, + -0x1.00000000101p-9 + }, + { // Entry 56 + 0x1.fead0b69d618a81747624f3c7ca38382p-4, + 0x1.000000002p-3 + }, + { // Entry 57 + -0x1.fead0b69d618a81747624f3c7ca38382p-4, + -0x1.000000002p-3 + }, + { // Entry 58 + 0x1.ffeaad1131a3687962cb8ca0a64f4c60p-6, + 0x1.000000003e0p-5 + }, + { // Entry 59 + -0x1.ffeaad1131a3687962cb8ca0a64f4c60p-6, + -0x1.000000003e0p-5 + }, + { // Entry 60 + 0x1.ffeaad1135a2e8915dcc65794d5c1216p-6, + 0x1.000000004p-5 + }, + { // Entry 61 + -0x1.ffeaad1135a2e8915dcc65794d5c1216p-6, + -0x1.000000004p-5 + }, + { // Entry 62 + 0x1.fead0b6d0fabe7f7940a172c81b216a2p-4, + 0x1.00000001cp-3 + }, + { // Entry 63 + -0x1.fead0b6d0fabe7f7940a172c81b216a2p-4, + -0x1.00000001cp-3 + }, + { // Entry 64 + 0x1.719218369adf88000392d7dc8518a18fp0, + 0x1.000000060p1 + }, + { // Entry 65 + -0x1.719218369adf88000392d7dc8518a18fp0, + -0x1.000000060p1 + }, + { // Entry 66 + 0x1.ecc2cafab28f10000058d757d62be0f2p-2, + 0x1.0000000809d7dp-1 + }, + { // Entry 67 + -0x1.ecc2cafab28f10000058d757d62be0f2p-2, + -0x1.0000000809d7dp-1 + }, + { // Entry 68 + 0x1.ffeabb0ef606c7da67459428149adbadp-6, + 0x1.0000070p-5 + }, + { // Entry 69 + -0x1.ffeabb0ef606c7da67459428149adbadp-6, + -0x1.0000070p-5 + }, + { // Entry 70 + 0x1.0c1f98037ddb97ff3c5068b316a00165p1, + 0x1.00001c0p2 + }, + { // Entry 71 + -0x1.0c1f98037ddb97ff3c5068b316a00165p1, + -0x1.00001c0p2 + }, + { // Entry 72 + 0x1.fad06c7e0e0a7003b1140bc95ab405ffp-3, + 0x1.00006p-2 + }, + { // Entry 73 + -0x1.fad06c7e0e0a7003b1140bc95ab405ffp-3, + -0x1.00006p-2 + }, + { // Entry 74 + 0x1.c344d0212927f5fa42a3dd90c845aafep-1, + 0x1.00010p0 + }, + { // Entry 75 + -0x1.c344d0212927f5fa42a3dd90c845aafep-1, + -0x1.00010p0 + }, + { // Entry 76 + 0x1.5507660f47456800d91258e8755bd5f4p7, + 0x1.001p245 + }, + { // Entry 77 + -0x1.5507660f47456800d91258e8755bd5f4p7, + -0x1.001p245 + }, + { // Entry 78 + 0x1.210ae10a6cc59fbb8020167ab1dffccap9, + 0x1.001p833 + }, + { // Entry 79 + -0x1.210ae10a6cc59fbb8020167ab1dffccap9, + -0x1.001p833 + }, + { // Entry 80 + 0x1.d5f45b75d63b680001d13ac1dbe562bcp8, + 0x1.003p677 + }, + { // Entry 81 + -0x1.d5f45b75d63b680001d13ac1dbe562bcp8, + -0x1.003p677 + }, + { // Entry 82 + 0x1.ffb3c044157318449812a557bcf1706ap-4, + 0x1.008460a44ffc1p-3 + }, + { // Entry 83 + -0x1.ffb3c044157318449812a557bcf1706ap-4, + -0x1.008460a44ffc1p-3 + }, + { // Entry 84 + 0x1.edb50436723d4759390d6456c2e8adf5p-2, + 0x1.00876f69ec52fp-1 + }, + { // Entry 85 + -0x1.edb50436723d4759390d6456c2e8adf5p-2, + -0x1.00876f69ec52fp-1 + }, + { // Entry 86 + 0x1.41bb41c3f17da804e9ad14f4bd75bacep4, + 0x1.01c8fb2951ca4p28 + }, + { // Entry 87 + -0x1.41bb41c3f17da804e9ad14f4bd75bacep4, + -0x1.01c8fb2951ca4p28 + }, + { // Entry 88 + 0x1.c6dfe797565f57ffff7a8713d032c096p-1, + 0x1.028f5c2a30342p0 + }, + { // Entry 89 + -0x1.c6dfe797565f57ffff7a8713d032c096p-1, + -0x1.028f5c2a30342p0 + }, + { // Entry 90 + 0x1.c6dfe79afae7afffffa3117d3818eeecp-1, + 0x1.028f5c2cc6e8bp0 + }, + { // Entry 91 + -0x1.c6dfe79afae7afffffa3117d3818eeecp-1, + -0x1.028f5c2cc6e8bp0 + }, + { // Entry 92 + 0x1.f15897705c5497fd072c467ee385c7a0p-2, + 0x1.0290d52c6e91cp-1 + }, + { // Entry 93 + -0x1.f15897705c5497fd072c467ee385c7a0p-2, + -0x1.0290d52c6e91cp-1 + }, + { // Entry 94 + 0x1.f1760421743425feec4439805ecd1fc5p-2, + 0x1.02a150a8542a0p-1 + }, + { // Entry 95 + -0x1.f1760421743425feec4439805ecd1fc5p-2, + -0x1.02a150a8542a0p-1 + }, + { // Entry 96 + 0x1.f6bc79c87c02ec261ae70361810513bfp-2, + 0x1.0596af363ee5ap-1 + }, + { // Entry 97 + -0x1.f6bc79c87c02ec261ae70361810513bfp-2, + -0x1.0596af363ee5ap-1 + }, + { // Entry 98 + 0x1.78a6cf7b3035bce4e063abd1ab00c432p0, + 0x1.08040201008p1 + }, + { // Entry 99 + -0x1.78a6cf7b3035bce4e063abd1ab00c432p0, + -0x1.08040201008p1 + }, + { // Entry 100 + 0x1.fb18e232de8cd7fb0a7c7d40c2100415p-2, + 0x1.080a2213c5d7fp-1 + }, + { // Entry 101 + -0x1.fb18e232de8cd7fb0a7c7d40c2100415p-2, + -0x1.080a2213c5d7fp-1 + }, + { // Entry 102 + 0x1.fc36c248c852a7ffddc9062d9e764f4bp-2, + 0x1.08aaffb099863p-1 + }, + { // Entry 103 + -0x1.fc36c248c852a7ffddc9062d9e764f4bp-2, + -0x1.08aaffb099863p-1 + }, + { // Entry 104 + 0x1.0f28edd4476116d66ca78dc309cf80f9p-9, + 0x1.0f28fa815b6c8p-9 + }, + { // Entry 105 + -0x1.0f28edd4476116d66ca78dc309cf80f9p-9, + -0x1.0f28fa815b6c8p-9 + }, + { // Entry 106 + 0x1.151f44f2b4f427ffff7a41c02c5cf355p1, + 0x1.133333335479ap2 + }, + { // Entry 107 + -0x1.151f44f2b4f427ffff7a41c02c5cf355p1, + -0x1.133333335479ap2 + }, + { // Entry 108 + 0x1.e46bf608630f17f3183a7d1db5529144p-1, + 0x1.180p0 + }, + { // Entry 109 + -0x1.e46bf608630f17f3183a7d1db5529144p-1, + -0x1.180p0 + }, + { // Entry 110 + 0x1.434264c6fc6708034a24c8e524f5687dp4, + 0x1.1b9d819ebf8cep28 + }, + { // Entry 111 + -0x1.434264c6fc6708034a24c8e524f5687dp4, + -0x1.1b9d819ebf8cep28 + }, + { // Entry 112 + 0x1.101ff8a713880a351f47c974f12ce55ep-1, + 0x1.1d1e74e330911p-1 + }, + { // Entry 113 + -0x1.101ff8a713880a351f47c974f12ce55ep-1, + -0x1.1d1e74e330911p-1 + }, + { // Entry 114 + 0x1.1a493ab88461d7fd3beeba172ff9a7f0p-2, + 0x1.1dep-2 + }, + { // Entry 115 + -0x1.1a493ab88461d7fd3beeba172ff9a7f0p-2, + -0x1.1dep-2 + }, + { // Entry 116 + 0x1.12e044c3ab17180beb67fd37dde3818ep-1, + 0x1.2045a703c2358p-1 + }, + { // Entry 117 + -0x1.12e044c3ab17180beb67fd37dde3818ep-1, + -0x1.2045a703c2358p-1 + }, + { // Entry 118 + 0x1.134f8303f8e7d7792a8cfcae2ab188a3p-1, + 0x1.20c557b1da1d0p-1 + }, + { // Entry 119 + -0x1.134f8303f8e7d7792a8cfcae2ab188a3p-1, + -0x1.20c557b1da1d0p-1 + }, + { // Entry 120 + 0x1.13a88f92f15df43236c0af1f8703f1e3p-1, + 0x1.212b987b85034p-1 + }, + { // Entry 121 + -0x1.13a88f92f15df43236c0af1f8703f1e3p-1, + -0x1.212b987b85034p-1 + }, + { // Entry 122 + 0x1.16805e66deb3cf0b1c0ec9b60fdb7894p-1, + 0x1.24709b4a7de54p-1 + }, + { // Entry 123 + -0x1.16805e66deb3cf0b1c0ec9b60fdb7894p-1, + -0x1.24709b4a7de54p-1 + }, + { // Entry 124 + 0x1.265195db6355dfff0127bbf1e5e11703p-6, + 0x1.2655a343af923p-6 + }, + { // Entry 125 + -0x1.265195db6355dfff0127bbf1e5e11703p-6, + -0x1.2655a343af923p-6 + }, + { // Entry 126 + 0x1.43fe1550dc5730023455469bb4ddb63fp4, + 0x1.28e9e3033b2d0p28 + }, + { // Entry 127 + -0x1.43fe1550dc5730023455469bb4ddb63fp4, + -0x1.28e9e3033b2d0p28 + }, + { // Entry 128 + 0x1.218f8513eb4d27ec00b1291cfdc18d67p1, + 0x1.300000036bf99p2 + }, + { // Entry 129 + -0x1.218f8513eb4d27ec00b1291cfdc18d67p1, + -0x1.300000036bf99p2 + }, + { // Entry 130 + 0x1.22a54301136de7ee5ce85eb01455a4eep1, + 0x1.32a4e674697e7p2 + }, + { // Entry 131 + -0x1.22a54301136de7ee5ce85eb01455a4eep1, + -0x1.32a4e674697e7p2 + }, + { // Entry 132 + 0x1.24292ef03128080ed3d9b08df44f6fb7p1, + 0x1.365fc696fa5b0p2 + }, + { // Entry 133 + -0x1.24292ef03128080ed3d9b08df44f6fb7p1, + -0x1.365fc696fa5b0p2 + }, + { // Entry 134 + 0x1.2575169c887057ffff7a5b19ee86a3d5p1, + 0x1.3999999a1ab8cp2 + }, + { // Entry 135 + -0x1.2575169c887057ffff7a5b19ee86a3d5p1, + -0x1.3999999a1ab8cp2 + }, + { // Entry 136 + 0x1.25dc8638bdb2f80ff1668031438c9765p1, + 0x1.3a9ca45e66e91p2 + }, + { // Entry 137 + -0x1.25dc8638bdb2f80ff1668031438c9765p1, + -0x1.3a9ca45e66e91p2 + }, + { // Entry 138 + 0x1.26409faea12417fd5ca4674254142d91p1, + 0x1.3b9817a24777ep2 + }, + { // Entry 139 + -0x1.26409faea12417fd5ca4674254142d91p1, + -0x1.3b9817a24777ep2 + }, + { // Entry 140 + 0x1.4fffffffff9f880000004ac8393332e6p-20, + 0x1.5p-20 + }, + { // Entry 141 + -0x1.4fffffffff9f880000004ac8393332e6p-20, + -0x1.5p-20 + }, + { // Entry 142 + 0x1.2ee78375a21e580b5728c038fb225c9fp1, + 0x1.52191d255a790p2 + }, + { // Entry 143 + -0x1.2ee78375a21e580b5728c038fb225c9fp1, + -0x1.52191d255a790p2 + }, + { // Entry 144 + 0x1.3185d0f16e6b6807a095bb392a3382b4p1, + 0x1.593552a340f40p2 + }, + { // Entry 145 + -0x1.3185d0f16e6b6807a095bb392a3382b4p1, + -0x1.593552a340f40p2 + }, + { // Entry 146 + 0x1.5aa83c174d0747d7431c3ae246f0a0c0p-5, + 0x1.5ac2b9013fba0p-5 + }, + { // Entry 147 + -0x1.5aa83c174d0747d7431c3ae246f0a0c0p-5, + -0x1.5ac2b9013fba0p-5 + }, + { // Entry 148 + 0x1.339f4c2a909867fb9c10e43011125aa5p1, + 0x1.5f03888dbf20fp2 + }, + { // Entry 149 + -0x1.339f4c2a909867fb9c10e43011125aa5p1, + -0x1.5f03888dbf20fp2 + }, + { // Entry 150 + 0x1.bd38dfe35d1acaae5c9501194270a136p0, + 0x1.6113b497290a0p1 + }, + { // Entry 151 + -0x1.bd38dfe35d1acaae5c9501194270a136p0, + -0x1.6113b497290a0p1 + }, + { // Entry 152 + 0x1.c1075a363e410a8f98845c743ba3787ap0, + 0x1.66b359acd6680p1 + }, + { // Entry 153 + -0x1.c1075a363e410a8f98845c743ba3787ap0, + -0x1.66b359acd6680p1 + }, + { // Entry 154 + 0x1.c262c12766e32579979b9555c11e1726p0, + 0x1.68b97a389b46cp1 + }, + { // Entry 155 + -0x1.c262c12766e32579979b9555c11e1726p0, + -0x1.68b97a389b46cp1 + }, + { // Entry 156 + 0x1.747df23f098e1ea8bfc81fa5be8e0998p-7, + 0x1.748p-7 + }, + { // Entry 157 + -0x1.747df23f098e1ea8bfc81fa5be8e0998p-7, + -0x1.748p-7 + }, + { // Entry 158 + 0x1.734f39e590ff4c558714ce06a3e0ce12p-2, + 0x1.7b8p-2 + }, + { // Entry 159 + -0x1.734f39e590ff4c558714ce06a3e0ce12p-2, + -0x1.7b8p-2 + }, + { // Entry 160 + 0x1.84ea54e95b79d80052d4496a3b257037p-4, + 0x1.858p-4 + }, + { // Entry 161 + -0x1.84ea54e95b79d80052d4496a3b257037p-4, + -0x1.858p-4 + }, + { // Entry 162 + 0x1.8c3d8723afa7d7fe5aac8c67302c2016p-7, + 0x1.8c4p-7 + }, + { // Entry 163 + -0x1.8c3d8723afa7d7fe5aac8c67302c2016p-7, + -0x1.8c4p-7 + }, + { // Entry 164 + 0x1.6fdab10671bdb04ee0b9e2255ea89ee4p-1, + 0x1.905415054158cp-1 + }, + { // Entry 165 + -0x1.6fdab10671bdb04ee0b9e2255ea89ee4p-1, + -0x1.905415054158cp-1 + }, + { // Entry 166 + 0x1.77204b30761997ffff9f14bcadd5050ep-1, + 0x1.9999999df31f2p-1 + }, + { // Entry 167 + -0x1.77204b30761997ffff9f14bcadd5050ep-1, + -0x1.9999999df31f2p-1 + }, + { // Entry 168 + 0x1.8f656b48fdbb8800007fb53bc7f22857p-2, + 0x1.999999a8e2404p-2 + }, + { // Entry 169 + -0x1.8f656b48fdbb8800007fb53bc7f22857p-2, + -0x1.999999a8e2404p-2 + }, + { // Entry 170 + 0x1.98eb9ea8504947ffff97daef209016f0p-4, + 0x1.999999c3bfab9p-4 + }, + { // Entry 171 + -0x1.98eb9ea8504947ffff97daef209016f0p-4, + -0x1.999999c3bfab9p-4 + }, + { // Entry 172 + 0x1.98eb9eaddfeba000008e0f13b5b376e8p-4, + 0x1.999999c95667ap-4 + }, + { // Entry 173 + -0x1.98eb9eaddfeba000008e0f13b5b376e8p-4, + -0x1.999999c95667ap-4 + }, + { // Entry 174 + 0x1.796335ca772c2274edcfef9c0d7aea2ap-1, + 0x1.9c8p-1 + }, + { // Entry 175 + -0x1.796335ca772c2274edcfef9c0d7aea2ap-1, + -0x1.9c8p-1 + }, + { // Entry 176 + 0x1.a3fc70e78b72affea798fb1ed9e01b11p-7, + 0x1.a3ff627f789p-7 + }, + { // Entry 177 + -0x1.a3fc70e78b72affea798fb1ed9e01b11p-7, + -0x1.a3ff627f789p-7 + }, + { // Entry 178 + 0x1.4f0a85b0ad4857ff001b414064939016p9, + 0x1.a6edff7a583f8p965 + }, + { // Entry 179 + -0x1.4f0a85b0ad4857ff001b414064939016p9, + -0x1.a6edff7a583f8p965 + }, + { // Entry 180 + 0x1.4c2b484bc41907fe51fbf0db7eb6c058p1, + 0x1.aa552a954aap2 + }, + { // Entry 181 + -0x1.4c2b484bc41907fe51fbf0db7eb6c058p1, + -0x1.aa552a954aap2 + }, + { // Entry 182 + 0x1.8964d070b42ff2d026071f870e311b26p-1, + 0x1.b1427cd988b8cp-1 + }, + { // Entry 183 + -0x1.8964d070b42ff2d026071f870e311b26p-1, + -0x1.b1427cd988b8cp-1 + }, + { // Entry 184 + 0x1.4d02914955d62fffff71df03043350f4p0, + 0x1.b3333337506cap0 + }, + { // Entry 185 + -0x1.4d02914955d62fffff71df03043350f4p0, + -0x1.b3333337506cap0 + }, + { // Entry 186 + 0x1.b010ad38a80b2ae0fc455f9f136e746dp-2, + 0x1.bd0p-2 + }, + { // Entry 187 + -0x1.b010ad38a80b2ae0fc455f9f136e746dp-2, + -0x1.bd0p-2 + }, + { // Entry 188 + 0x1.c8543a9a9c24311233a315255f5c4651p-9, + 0x1.c8547704cc94ap-9 + }, + { // Entry 189 + -0x1.c8543a9a9c24311233a315255f5c4651p-9, + -0x1.c8547704cc94ap-9 + }, + { // Entry 190 + 0x1.c9ac0c777fff8ff9d8ee7153627176abp-4, + 0x1.caap-4 + }, + { // Entry 191 + -0x1.c9ac0c777fff8ff9d8ee7153627176abp-4, + -0x1.caap-4 + }, + { // Entry 192 + 0x1.ca6adaba65efe7f20f871de10947cd5cp-4, + 0x1.cb5fffffe7a06p-4 + }, + { // Entry 193 + -0x1.ca6adaba65efe7f20f871de10947cd5cp-4, + -0x1.cb5fffffe7a06p-4 + }, + { // Entry 194 + 0x1.ca6adaba7e28a7f59fa07b692a9fe0f9p-4, + 0x1.cb6p-4 + }, + { // Entry 195 + -0x1.ca6adaba7e28a7f59fa07b692a9fe0f9p-4, + -0x1.cb6p-4 + }, + { // Entry 196 + 0x1.e1c5c0ca279f77ff07f31b933b58d12ap2, + 0x1.d0b42d0b42d08p9 + }, + { // Entry 197 + -0x1.e1c5c0ca279f77ff07f31b933b58d12ap2, + -0x1.d0b42d0b42d08p9 + }, + { // Entry 198 + 0x1.a3e8b71cba28d7fec3d1c6454bbba99dp-1, + 0x1.d4974eca333c3p-1 + }, + { // Entry 199 + -0x1.a3e8b71cba28d7fec3d1c6454bbba99dp-1, + -0x1.d4974eca333c3p-1 + }, + { // Entry 200 + 0x1.d4ede01f10ab67b211c278274a3c64eap-5, + 0x1.d52f71e93cb21p-5 + }, + { // Entry 201 + -0x1.d4ede01f10ab67b211c278274a3c64eap-5, + -0x1.d52f71e93cb21p-5 + }, + { // Entry 202 + 0x1.a66b6c181a57eec89a856dab88260c85p-1, + 0x1.d80p-1 + }, + { // Entry 203 + -0x1.a66b6c181a57eec89a856dab88260c85p-1, + -0x1.d80p-1 + }, + { // Entry 204 + 0x1.da493afa5f7b1834c0ac9129ea3f8481p-5, + 0x1.da8d12b111853p-5 + }, + { // Entry 205 + -0x1.da493afa5f7b1834c0ac9129ea3f8481p-5, + -0x1.da8d12b111853p-5 + }, + { // Entry 206 + 0x1.d86c93088bcd89c3a7ea69e10bebc834p-3, + 0x1.dcap-3 + }, + { // Entry 207 + -0x1.d86c93088bcd89c3a7ea69e10bebc834p-3, + -0x1.dcap-3 + }, + { // Entry 208 + 0x1.5b210231129f7801b2df8c036bedd614p1, + 0x1.dfbf7efdfbf78p2 + }, + { // Entry 209 + -0x1.5b210231129f7801b2df8c036bedd614p1, + -0x1.dfbf7efdfbf78p2 + }, + { // Entry 210 + 0x1.e743ce73d923d00856cbaafe09163cdfp-3, + 0x1.ebep-3 + }, + { // Entry 211 + -0x1.e743ce73d923d00856cbaafe09163cdfp-3, + -0x1.ebep-3 + }, + { // Entry 212 + 0x1.de596b4f4d5018eb85e6571011c15683p-2, + 0x1.efeffffffffffp-2 + }, + { // Entry 213 + -0x1.de596b4f4d5018eb85e6571011c15683p-2, + -0x1.efeffffffffffp-2 + }, + { // Entry 214 + 0x1.6a6eb2ffee2edafd7fed403ad2c6d203p0, + 0x1.f03c3f9d576bcp0 + }, + { // Entry 215 + -0x1.6a6eb2ffee2edafd7fed403ad2c6d203p0, + -0x1.f03c3f9d576bcp0 + }, + { // Entry 216 + 0x1.f3df6e88a792e801ff70692e5a789f21p-5, + 0x1.f42edbd85d9f8p-5 + }, + { // Entry 217 + -0x1.f3df6e88a792e801ff70692e5a789f21p-5, + -0x1.f42edbd85d9f8p-5 + }, + { // Entry 218 + 0x1.6c59a446d1b78b1c9b74684b78b10b0fp0, + 0x1.f46ea5f8f54e8p0 + }, + { // Entry 219 + -0x1.6c59a446d1b78b1c9b74684b78b10b0fp0, + -0x1.f46ea5f8f54e8p0 + }, + { // Entry 220 + 0x1.f55afe0cccf0971d810065fd8ca51746p-7, + 0x1.f56p-7 + }, + { // Entry 221 + -0x1.f55afe0cccf0971d810065fd8ca51746p-7, + -0x1.f56p-7 + }, + { // Entry 222 + 0x1.f72c28bf439cf823462f9436177c0f68p-3, + 0x1.fc4p-3 + }, + { // Entry 223 + -0x1.f72c28bf439cf823462f9436177c0f68p-3, + -0x1.fc4p-3 + }, + { // Entry 224 + 0x1.fe3de8a25c148ff37ff3fff4ea96b0c5p-4, + 0x1.ff8ffffffffffp-4 + }, + { // Entry 225 + -0x1.fe3de8a25c148ff37ff3fff4ea96b0c5p-4, + -0x1.ff8ffffffffffp-4 + }, + { // Entry 226 + 0x1.ff7abb0b079d45b8c077c138812ef785p-6, + 0x1.ff8ffffffffffp-6 + }, + { // Entry 227 + -0x1.ff7abb0b079d45b8c077c138812ef785p-6, + -0x1.ff8ffffffffffp-6 + }, + { // Entry 228 + 0x1.ff8faae2c4a7e15f49f1e7fd10226df8p-9, + 0x1.ff8ffffffffffp-9 + }, + { // Entry 229 + -0x1.ff8faae2c4a7e15f49f1e7fd10226df8p-9, + -0x1.ff8ffffffffffp-9 + }, + { // Entry 230 + 0x1.6363716659a0d6ec9a4d1673a0c1caf9p1, + 0x1.ffffff3ffffffp2 + }, + { // Entry 231 + -0x1.6363716659a0d6ec9a4d1673a0c1caf9p1, + -0x1.ffffff3ffffffp2 + }, + { // Entry 232 + 0x1.fffaaab70073cffe1ca7af59dea383bdp-7, + 0x1.ffffffe5effffp-7 + }, + { // Entry 233 + -0x1.fffaaab70073cffe1ca7af59dea383bdp-7, + -0x1.ffffffe5effffp-7 + }, + { // Entry 234 + 0x1.ffeaad091c25f7fe78be0efb91393b35p-6, + 0x1.fffffff8657ffp-6 + }, + { // Entry 235 + -0x1.ffeaad091c25f7fe78be0efb91393b35p-6, + -0x1.fffffff8657ffp-6 + }, + { // Entry 236 + 0x1.fffaaacd0fc35843b8b9c2c8eaaf170dp-7, + 0x1.fffffffbfffffp-7 + }, + { // Entry 237 + -0x1.fffaaacd0fc35843b8b9c2c8eaaf170dp-7, + -0x1.fffffffbfffffp-7 + }, + { // Entry 238 + 0x1.c34366179ac8d01e2cd45de4745e134ap-1, + 0x1.fffffffffc7ffp-1 + }, + { // Entry 239 + -0x1.c34366179ac8d01e2cd45de4745e134ap-1, + -0x1.fffffffffc7ffp-1 + }, + { // Entry 240 + 0x1.fead0b6996797834b43bac6b0f3fe20fp-4, + 0x1.ffffffffffe21p-4 + }, + { // Entry 241 + -0x1.fead0b6996797834b43bac6b0f3fe20fp-4, + -0x1.ffffffffffe21p-4 + }, + { // Entry 242 + 0x1.c34366179d41a11c2058c40156eae780p-1, + 0x1.fffffffffffeep-1 + }, + { // Entry 243 + -0x1.c34366179d41a11c2058c40156eae780p-1, + -0x1.fffffffffffeep-1 + }, + { // Entry 244 + 0x1.ffffaaaad10fda3642e7f712ee391058p-9, + 0x1.fffffffffffeep-9 + }, + { // Entry 245 + -0x1.ffffaaaad10fda3642e7f712ee391058p-9, + -0x1.fffffffffffeep-9 + }, + { // Entry 246 + 0x1.30fc1931f09c97ff42ff5cad467897fdp7, + 0x1.fffffffffffeep218 + }, + { // Entry 247 + -0x1.30fc1931f09c97ff42ff5cad467897fdp7, + -0x1.fffffffffffeep218 + }, + { // Entry 248 + 0x1.ffaad0fa452557ff22342e0cd4997830p-5, + 0x1.ffffffffffff3p-5 + }, + { // Entry 249 + -0x1.ffaad0fa452557ff22342e0cd4997830p-5, + -0x1.ffffffffffff3p-5 + }, + { // Entry 250 + 0x1.5ca72d17ed3ea80089ae65dfafc1e2b2p8, + 0x1.ffffffffffffep501 + }, + { // Entry 251 + -0x1.5ca72d17ed3ea80089ae65dfafc1e2b2p8, + -0x1.ffffffffffffep501 + }, + { // Entry 252 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.0p0 + }, + { // Entry 253 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.0p0 + }, + { // Entry 254 + -0x1.9490fec3efbe5988497c1478565aa446p-1, + -0x1.cp-1 + }, + { // Entry 255 + 0x1.9490fec3efbe5988497c1478565aa446p-1, + 0x1.cp-1 + }, + { // Entry 256 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.8p-1 + }, + { // Entry 257 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.8p-1 + }, + { // Entry 258 + -0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + -0x1.4p-1 + }, + { // Entry 259 + 0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + 0x1.4p-1 + }, + { // Entry 260 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.0p-1 + }, + { // Entry 261 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.0p-1 + }, + { // Entry 262 + -0x1.7786a7973a5923b96eef2610c25e841ap-2, + -0x1.8p-2 + }, + { // Entry 263 + 0x1.7786a7973a5923b96eef2610c25e841ap-2, + 0x1.8p-2 + }, + { // Entry 264 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.0p-2 + }, + { // Entry 265 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.0p-2 + }, + { // Entry 266 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.0p-3 + }, + { // Entry 267 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.0p-3 + }, + { // Entry 268 + 0.0, + 0.0 + }, + { // Entry 269 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.0p-3 + }, + { // Entry 270 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.0p-3 + }, + { // Entry 271 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.0p-2 + }, + { // Entry 272 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.0p-2 + }, + { // Entry 273 + 0x1.7786a7973a5923b96eef2610c25e841ap-2, + 0x1.8p-2 + }, + { // Entry 274 + -0x1.7786a7973a5923b96eef2610c25e841ap-2, + -0x1.8p-2 + }, + { // Entry 275 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.0p-1 + }, + { // Entry 276 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.0p-1 + }, + { // Entry 277 + 0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + 0x1.4p-1 + }, + { // Entry 278 + -0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + -0x1.4p-1 + }, + { // Entry 279 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.8p-1 + }, + { // Entry 280 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.8p-1 + }, + { // Entry 281 + 0x1.9490fec3efbe5988497c1478565aa446p-1, + 0x1.cp-1 + }, + { // Entry 282 + -0x1.9490fec3efbe5988497c1478565aa446p-1, + -0x1.cp-1 + }, + { // Entry 283 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.0p0 + }, + { // Entry 284 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.0p0 + }, + { // Entry 285 + 0x1.18080dd3171b6c031a9b576be63b6d4cp6, + 0x1.0p100 + }, + { // Entry 286 + -0x1.18080dd3171b6c031a9b576be63b6d4cp6, + -0x1.0p100 + }, + { // Entry 287 + 0x1.1869a6d0fc0c8734cff5be4c994a623cp6, + 0x1.199999999999ap100 + }, + { // Entry 288 + -0x1.1869a6d0fc0c8734cff5be4c994a623cp6, + -0x1.199999999999ap100 + }, + { // Entry 289 + 0x1.18c2c053a6401fdf8f801885ecec896ep6, + 0x1.3333333333334p100 + }, + { // Entry 290 + -0x1.18c2c053a6401fdf8f801885ecec896ep6, + -0x1.3333333333334p100 + }, + { // Entry 291 + 0x1.1914b70ad53709fc02e60c9931465d1cp6, + 0x1.4cccccccccccep100 + }, + { // Entry 292 + -0x1.1914b70ad53709fc02e60c9931465d1cp6, + -0x1.4cccccccccccep100 + }, + { // Entry 293 + 0x1.19609a00a84eb5469b8a14575cfcffdcp6, + 0x1.6666666666668p100 + }, + { // Entry 294 + -0x1.19609a00a84eb5469b8a14575cfcffdcp6, + -0x1.6666666666668p100 + }, + { // Entry 295 + 0x1.19a74011e314f1179b5984282f925681p6, + 0x1.8000000000002p100 + }, + { // Entry 296 + -0x1.19a74011e314f1179b5984282f925681p6, + -0x1.8000000000002p100 + }, + { // Entry 297 + 0x1.19e95674b98dd93c68942542ae48ec14p6, + 0x1.999999999999cp100 + }, + { // Entry 298 + -0x1.19e95674b98dd93c68942542ae48ec14p6, + -0x1.999999999999cp100 + }, + { // Entry 299 + 0x1.1a276ad639b09e9294f7218ef587ce6cp6, + 0x1.b333333333336p100 + }, + { // Entry 300 + -0x1.1a276ad639b09e9294f7218ef587ce6cp6, + -0x1.b333333333336p100 + }, + { // Entry 301 + 0x1.1a61f2927239a4e5d75ab70952b3595ap6, + 0x1.cccccccccccd0p100 + }, + { // Entry 302 + -0x1.1a61f2927239a4e5d75ab70952b3595ap6, + -0x1.cccccccccccd0p100 + }, + { // Entry 303 + 0x1.1a994ff83eca77f3ef91866a7b8540e2p6, + 0x1.e66666666666ap100 + }, + { // Entry 304 + -0x1.1a994ff83eca77f3ef91866a7b8540e2p6, + -0x1.e66666666666ap100 + }, + { // Entry 305 + 0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + 0x1.0p101 + }, + { // Entry 306 + -0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + -0x1.0p101 + }, + { // Entry 307 + 0x1.16a529a32777cd0fc3079004b633875fp7, + 0x1.0p200 + }, + { // Entry 308 + -0x1.16a529a32777cd0fc3079004b633875fp7, + -0x1.0p200 + }, + { // Entry 309 + 0x1.16d5f62219f05aa89db4c3750fbb01d6p7, + 0x1.199999999999ap200 + }, + { // Entry 310 + -0x1.16d5f62219f05aa89db4c3750fbb01d6p7, + -0x1.199999999999ap200 + }, + { // Entry 311 + 0x1.170282e36f0a26fdfd79f091b98c1570p7, + 0x1.3333333333334p200 + }, + { // Entry 312 + -0x1.170282e36f0a26fdfd79f091b98c1570p7, + -0x1.3333333333334p200 + }, + { // Entry 313 + 0x1.172b7e3f06859c0c372cea9b5bb8ff47p7, + 0x1.4cccccccccccep200 + }, + { // Entry 314 + -0x1.172b7e3f06859c0c372cea9b5bb8ff47p7, + -0x1.4cccccccccccep200 + }, + { // Entry 315 + 0x1.17516fb9f01171b1837eee7a719450a6p7, + 0x1.6666666666668p200 + }, + { // Entry 316 + -0x1.17516fb9f01171b1837eee7a719450a6p7, + -0x1.6666666666668p200 + }, + { // Entry 317 + 0x1.1774c2c28d748f9a0366a662dadefbf9p7, + 0x1.8000000000002p200 + }, + { // Entry 318 + -0x1.1774c2c28d748f9a0366a662dadefbf9p7, + -0x1.8000000000002p200 + }, + { // Entry 319 + 0x1.1795cdf3f8b103ac6a03f6f01a3a46c3p7, + 0x1.999999999999cp200 + }, + { // Entry 320 + -0x1.1795cdf3f8b103ac6a03f6f01a3a46c3p7, + -0x1.999999999999cp200 + }, + { // Entry 321 + 0x1.17b4d824b8c26657803575163dd9b7efp7, + 0x1.b333333333336p200 + }, + { // Entry 322 + -0x1.17b4d824b8c26657803575163dd9b7efp7, + -0x1.b333333333336p200 + }, + { // Entry 323 + 0x1.17d21c02d506e98121673fd36c6f7d66p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 324 + -0x1.17d21c02d506e98121673fd36c6f7d66p7, + -0x1.cccccccccccd0p200 + }, + { // Entry 325 + 0x1.17edcab5bb4f53082d82a78400d8712ap7, + 0x1.e66666666666ap200 + }, + { // Entry 326 + -0x1.17edcab5bb4f53082d82a78400d8712ap7, + -0x1.e66666666666ap200 + }, + { // Entry 327 + 0x1.18080dd3171b6c031a9b576be63b6d4cp7, + 0x1.0p201 + }, + { // Entry 328 + -0x1.18080dd3171b6c031a9b576be63b6d4cp7, + -0x1.0p201 + }, + { // Entry 329 + 0x1.5aeb8fdc01b221605c35ac9eb3b88349p9, + 0x1.0p1000 + }, + { // Entry 330 + -0x1.5aeb8fdc01b221605c35ac9eb3b88349p9, + -0x1.0p1000 + }, + { // Entry 331 + 0x1.5af7c2fbbe5044c692e0f97aca1a61e7p9, + 0x1.199999999999ap1000 + }, + { // Entry 332 + -0x1.5af7c2fbbe5044c692e0f97aca1a61e7p9, + -0x1.199999999999ap1000 + }, + { // Entry 333 + 0x1.5b02e62c1396b7dbead244c1f48ea6cdp9, + 0x1.3333333333334p1000 + }, + { // Entry 334 + -0x1.5b02e62c1396b7dbead244c1f48ea6cdp9, + -0x1.3333333333334p1000 + }, + { // Entry 335 + 0x1.5b0d2502f975951f793f03445d19e143p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 336 + -0x1.5b0d2502f975951f793f03445d19e143p9, + -0x1.4cccccccccccep1000 + }, + { // Entry 337 + 0x1.5b16a161b3d88a88cc53843c2290b59bp9, + 0x1.6666666666668p1000 + }, + { // Entry 338 + -0x1.5b16a161b3d88a88cc53843c2290b59bp9, + -0x1.6666666666668p1000 + }, + { // Entry 339 + 0x1.5b1f7623db315202ec4d72363ce36070p9, + 0x1.8000000000002p1000 + }, + { // Entry 340 + -0x1.5b1f7623db315202ec4d72363ce36070p9, + -0x1.8000000000002p1000 + }, + { // Entry 341 + 0x1.5b27b8f036006f0785f4c6598cba3322p9, + 0x1.999999999999cp1000 + }, + { // Entry 342 + -0x1.5b27b8f036006f0785f4c6598cba3322p9, + -0x1.999999999999cp1000 + }, + { // Entry 343 + 0x1.5b2f7b7c6604c7b24b8125e315a20f6dp9, + 0x1.b333333333336p1000 + }, + { // Entry 344 + -0x1.5b2f7b7c6604c7b24b8125e315a20f6dp9, + -0x1.b333333333336p1000 + }, + { // Entry 345 + 0x1.5b36cc73ed15e87cb3cd9892614780cbp9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 346 + -0x1.5b36cc73ed15e87cb3cd9892614780cbp9, + -0x1.cccccccccccd0p1000 + }, + { // Entry 347 + 0x1.5b3db820a6a802de76d4727e8661bdbcp9, + 0x1.e66666666666ap1000 + }, + { // Entry 348 + -0x1.5b3db820a6a802de76d4727e8661bdbcp9, + -0x1.e66666666666ap1000 + }, + { // Entry 349 + 0x1.5b4448e7fd9b091d321a9e787fba7cc4p9, + 0x1.0p1001 + }, + { // Entry 350 + -0x1.5b4448e7fd9b091d321a9e787fba7cc4p9, + -0x1.0p1001 + }, + { // Entry 351 + -0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 352 + 0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 353 + 0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 354 + -0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 355 + -0.0, + -0x1.0p-1074 + }, + { // Entry 356 + 0.0, + 0x1.0p-1074 + }, + { // Entry 357 + -0.0, + -0.0 + }, + { // Entry 358 + 0.0, + 0x1.0p-1074 + }, + { // Entry 359 + -0.0, + -0x1.0p-1074 + }, + { // Entry 360 + -0x1.0499e40c65ff571c4214191e409f886cp-1, + -0x1.1000000000001p-1 + }, + { // Entry 361 + 0x1.0499e40c65ff571c4214191e409f886cp-1, + 0x1.1000000000001p-1 + }, + { // Entry 362 + -0x1.0499e40c65ff48fb04213eab32faa345p-1, + -0x1.1p-1 + }, + { // Entry 363 + 0x1.0499e40c65ff48fb04213eab32faa345p-1, + 0x1.1p-1 + }, + { // Entry 364 + -0x1.0499e40c65ff3ad9c62e64382526e89ap-1, + -0x1.0ffffffffffffp-1 + }, + { // Entry 365 + 0x1.0499e40c65ff3ad9c62e64382526e89ap-1, + 0x1.0ffffffffffffp-1 + }, + { // Entry 366 + 0x1.0499e40c65ff3ad9c62e64382526e89ap-1, + 0x1.0ffffffffffffp-1 + }, + { // Entry 367 + -0x1.0499e40c65ff3ad9c62e64382526e89ap-1, + -0x1.0ffffffffffffp-1 + }, + { // Entry 368 + 0x1.0499e40c65ff48fb04213eab32faa345p-1, + 0x1.1p-1 + }, + { // Entry 369 + -0x1.0499e40c65ff48fb04213eab32faa345p-1, + -0x1.1p-1 + }, + { // Entry 370 + 0x1.0499e40c65ff571c4214191e409f886cp-1, + 0x1.1000000000001p-1 + }, + { // Entry 371 + -0x1.0499e40c65ff571c4214191e409f886cp-1, + -0x1.1000000000001p-1 + }, + { // Entry 372 + 0x1.62e42fefa39ef31793c7673007e4ed5ep5, + 0x1.fffffffffffffp62 + }, + { // Entry 373 + -0x1.62e42fefa39ef31793c7673007e4ed5ep5, + -0x1.fffffffffffffp62 + }, + { // Entry 374 + 0x1.62e42fefa39ef35793c7673007e5ed5ep5, + 0x1.0p63 + }, + { // Entry 375 + -0x1.62e42fefa39ef35793c7673007e5ed5ep5, + -0x1.0p63 + }, + { // Entry 376 + 0x1.62e42fefa39ef3d793c7673007e1ed5ep5, + 0x1.0000000000001p63 + }, + { // Entry 377 + -0x1.62e42fefa39ef3d793c7673007e1ed5ep5, + -0x1.0000000000001p63 + }, + { // Entry 378 + 0x1.419ecb712c480c0b5decb58387269d9dp4, + 0x1.fffffffffffffp27 + }, + { // Entry 379 + -0x1.419ecb712c480c0b5decb58387269d9dp4, + -0x1.fffffffffffffp27 + }, + { // Entry 380 + 0x1.419ecb712c480c8b5decb58387285d9dp4, + 0x1.0p28 + }, + { // Entry 381 + -0x1.419ecb712c480c8b5decb58387285d9dp4, + -0x1.0p28 + }, + { // Entry 382 + 0x1.419ecb712c480d8b5decb583871fdd9dp4, + 0x1.0000000000001p28 + }, + { // Entry 383 + -0x1.419ecb712c480d8b5decb583871fdd9dp4, + -0x1.0000000000001p28 + }, + { // Entry 384 + 0x1.3687a9f1af2b147ca14e7a4a06e817b2p4, + 0x1.fffffffffffffp26 + }, + { // Entry 385 + -0x1.3687a9f1af2b147ca14e7a4a06e817b2p4, + -0x1.fffffffffffffp26 + }, + { // Entry 386 + 0x1.3687a9f1af2b14fca14e7a4a06e917b2p4, + 0x1.0p27 + }, + { // Entry 387 + -0x1.3687a9f1af2b14fca14e7a4a06e917b2p4, + -0x1.0p27 + }, + { // Entry 388 + 0x1.3687a9f1af2b15fca14e7a4a06df17b2p4, + 0x1.0000000000001p27 + }, + { // Entry 389 + -0x1.3687a9f1af2b15fca14e7a4a06df17b2p4, + -0x1.0000000000001p27 + }, + { // Entry 390 + 0x1.1542457337d4319c6b73c89d84e9a171p4, + 0x1.fffffffffffffp23 + }, + { // Entry 391 + -0x1.1542457337d4319c6b73c89d84e9a171p4, + -0x1.fffffffffffffp23 + }, + { // Entry 392 + 0x1.1542457337d4321c6b73c89d84aba171p4, + 0x1.0p24 + }, + { // Entry 393 + -0x1.1542457337d4321c6b73c89d84aba171p4, + -0x1.0p24 + }, + { // Entry 394 + 0x1.1542457337d4331c6b73c89d8423a171p4, + 0x1.0000000000001p24 + }, + { // Entry 395 + -0x1.1542457337d4331c6b73c89d8423a171p4, + -0x1.0000000000001p24 + }, + { // Entry 396 + 0x1.0c1f8a6e80eeae5c96894f2bffb535afp1, + 0x1.fffffffffffffp1 + }, + { // Entry 397 + -0x1.0c1f8a6e80eeae5c96894f2bffb535afp1, + -0x1.fffffffffffffp1 + }, + { // Entry 398 + 0x1.0c1f8a6e80eeb23e03926981e348eb2ep1, + 0x1.0p2 + }, + { // Entry 399 + -0x1.0c1f8a6e80eeb23e03926981e348eb2ep1, + -0x1.0p2 + }, + { // Entry 400 + 0x1.0c1f8a6e80eeba00dda49e2daa18ae71p1, + 0x1.0000000000001p2 + }, + { // Entry 401 + -0x1.0c1f8a6e80eeba00dda49e2daa18ae71p1, + -0x1.0000000000001p2 + }, + { // Entry 402 + 0x1.719218313d086bd11ec0138398310287p0, + 0x1.fffffffffffffp0 + }, + { // Entry 403 + -0x1.719218313d086bd11ec0138398310287p0, + -0x1.fffffffffffffp0 + }, + { // Entry 404 + 0x1.719218313d0872f8e831837f0e954189p0, + 0x1.0p1 + }, + { // Entry 405 + -0x1.719218313d0872f8e831837f0e954189p0, + -0x1.0p1 + }, + { // Entry 406 + 0x1.719218313d0881487b146375fad45d3fp0, + 0x1.0000000000001p1 + }, + { // Entry 407 + -0x1.719218313d0881487b146375fad45d3fp0, + -0x1.0000000000001p1 + }, + { // Entry 408 + 0x1.c34366179d42617162bffd7dbe442e71p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 409 + -0x1.c34366179d42617162bffd7dbe442e71p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 410 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.0p0 + }, + { // Entry 411 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.0p0 + }, + { // Entry 412 + 0x1.c34366179d4283625059bc5770d91d5dp-1, + 0x1.0000000000001p0 + }, + { // Entry 413 + -0x1.c34366179d4283625059bc5770d91d5dp-1, + -0x1.0000000000001p0 + }, + { // Entry 414 + 0x1.ecc2caec51608afc4d5f24b27c20dc9cp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 415 + -0x1.ecc2caec51608afc4d5f24b27c20dc9cp-2, + -0x1.fffffffffffffp-2 + }, + { // Entry 416 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.0p-1 + }, + { // Entry 417 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.0p-1 + }, + { // Entry 418 + 0x1.ecc2caec5160b5eb0607c49741ce9bc6p-2, + 0x1.0000000000001p-1 + }, + { // Entry 419 + -0x1.ecc2caec5160b5eb0607c49741ce9bc6p-2, + -0x1.0000000000001p-1 + }, + { // Entry 420 + 0x1.facfb2399e635f07b2ecf48db28f6b82p-3, + 0x1.fffffffffffffp-3 + }, + { // Entry 421 + -0x1.facfb2399e635f07b2ecf48db28f6b82p-3, + -0x1.fffffffffffffp-3 + }, + { // Entry 422 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.0p-2 + }, + { // Entry 423 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.0p-2 + }, + { // Entry 424 + 0x1.facfb2399e638d98cf5a30945cc1a910p-3, + 0x1.0000000000001p-2 + }, + { // Entry 425 + -0x1.facfb2399e638d98cf5a30945cc1a910p-3, + -0x1.0000000000001p-2 + }, + { // Entry 426 + 0x1.fead0b6996971d25a6c9ee383ff9d971p-4, + 0x1.fffffffffffffp-4 + }, + { // Entry 427 + -0x1.fead0b6996971d25a6c9ee383ff9d971p-4, + -0x1.fffffffffffffp-4 + }, + { // Entry 428 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.0p-3 + }, + { // Entry 429 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.0p-3 + }, + { // Entry 430 + 0x1.fead0b6996974cc6c316dfa305c0f42dp-4, + 0x1.0000000000001p-3 + }, + { // Entry 431 + -0x1.fead0b6996974cc6c316dfa305c0f42dp-4, + -0x1.0000000000001p-3 + }, + { // Entry 432 + 0x1.ffaad0fa4526179f69f8625dbfeb270fp-5, + 0x1.fffffffffffffp-5 + }, + { // Entry 433 + -0x1.ffaad0fa4526179f69f8625dbfeb270fp-5, + -0x1.fffffffffffffp-5 + }, + { // Entry 434 + 0x1.ffaad0fa452627976ff366b9d3840fd1p-5, + 0x1.0p-4 + }, + { // Entry 435 + -0x1.ffaad0fa452627976ff366b9d3840fd1p-5, + -0x1.0p-4 + }, + { // Entry 436 + 0x1.ffaad0fa452647877be96f71fab46392p-5, + 0x1.0000000000001p-4 + }, + { // Entry 437 + -0x1.ffaad0fa452647877be96f71fab46392p-5, + -0x1.0000000000001p-4 + }, + { // Entry 438 + 0x1.ffeaad10b5b2d593fd4d7fd398a04e17p-6, + 0x1.fffffffffffffp-6 + }, + { // Entry 439 + -0x1.ffeaad10b5b2d593fd4d7fd398a04e17p-6, + -0x1.fffffffffffffp-6 + }, + { // Entry 440 + 0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + 0x1.0p-5 + }, + { // Entry 441 + -0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + -0x1.0p-5 + }, + { // Entry 442 + 0x1.ffeaad10b5b3058dfe6d43e0b5accb41p-6, + 0x1.0000000000001p-5 + }, + { // Entry 443 + -0x1.ffeaad10b5b3058dfe6d43e0b5accb41p-6, + -0x1.0000000000001p-5 + }, + { // Entry 444 + 0x1.fffaaad10fa359c3a4fad4bba332af54p-7, + 0x1.fffffffffffffp-7 + }, + { // Entry 445 + -0x1.fffaaad10fa359c3a4fad4bba332af54p-7, + -0x1.fffffffffffffp-7 + }, + { // Entry 446 + 0x1.fffaaad10fa369c32500d46ba7927458p-7, + 0x1.0p-6 + }, + { // Entry 447 + -0x1.fffaaad10fa369c32500d46ba7927458p-7, + -0x1.0p-6 + }, + { // Entry 448 + 0x1.fffaaad10fa389c2250cd3cbb051e660p-7, + 0x1.0000000000001p-6 + }, + { // Entry 449 + -0x1.fffaaad10fa389c2250cd3cbb051e660p-7, + -0x1.0000000000001p-6 + }, + { // Entry 450 + 0x1.fffffffaaaaa9ad111118fa35a2fb2e8p-15, + 0x1.fffffffffffffp-15 + }, + { // Entry 451 + -0x1.fffffffaaaaa9ad111118fa35a2fb2e8p-15, + -0x1.fffffffffffffp-15 + }, + { // Entry 452 + 0x1.fffffffaaaaaaad111110fa35a35b2e8p-15, + 0x1.0p-14 + }, + { // Entry 453 + -0x1.fffffffaaaaaaad111110fa35a35b2e8p-15, + -0x1.0p-14 + }, + { // Entry 454 + 0x1.fffffffaaaaacad111100fa35a41b2e8p-15, + 0x1.0000000000001p-14 + }, + { // Entry 455 + -0x1.fffffffaaaaacad111100fa35a41b2e8p-15, + -0x1.0000000000001p-14 + }, + { // Entry 456 + 0x1.ffffffffffffeeaaaaaaaaaaaacd1111p-28, + 0x1.fffffffffffffp-28 + }, + { // Entry 457 + -0x1.ffffffffffffeeaaaaaaaaaaaacd1111p-28, + -0x1.fffffffffffffp-28 + }, + { // Entry 458 + 0x1.fffffffffffffeaaaaaaaaaaaaad1111p-28, + 0x1.0p-27 + }, + { // Entry 459 + -0x1.fffffffffffffeaaaaaaaaaaaaad1111p-28, + -0x1.0p-27 + }, + { // Entry 460 + 0x1.0000000000000f555555555555368888p-27, + 0x1.0000000000001p-27 + }, + { // Entry 461 + -0x1.0000000000000f555555555555368888p-27, + -0x1.0000000000001p-27 + }, + { // Entry 462 + 0x1.ffffffffffffefaaaaaaaaaaaab2d111p-29, + 0x1.fffffffffffffp-29 + }, + { // Entry 463 + -0x1.ffffffffffffefaaaaaaaaaaaab2d111p-29, + -0x1.fffffffffffffp-29 + }, + { // Entry 464 + 0x1.ffffffffffffffaaaaaaaaaaaaaad111p-29, + 0x1.0p-28 + }, + { // Entry 465 + -0x1.ffffffffffffffaaaaaaaaaaaaaad111p-29, + -0x1.0p-28 + }, + { // Entry 466 + 0x1.0000000000000fd555555555554d6888p-28, + 0x1.0000000000001p-28 + }, + { // Entry 467 + -0x1.0000000000000fd555555555554d6888p-28, + -0x1.0000000000001p-28 + }, + { // Entry 468 + 0x1.ffffffffffffeffaaaaaaaaaaaab2ad1p-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 469 + -0x1.ffffffffffffeffaaaaaaaaaaaab2ad1p-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 470 + 0x1.fffffffffffffffaaaaaaaaaaaaaaad1p-31, + 0x1.0p-30 + }, + { // Entry 471 + -0x1.fffffffffffffffaaaaaaaaaaaaaaad1p-31, + -0x1.0p-30 + }, + { // Entry 472 + 0x1.0000000000000ffd555555555554d568p-30, + 0x1.0000000000001p-30 + }, + { // Entry 473 + -0x1.0000000000000ffd555555555554d568p-30, + -0x1.0000000000001p-30 + }, + { // Entry 474 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 475 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 476 + 0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 477 + -0x1.633ce8fb9f87db1069ac5909d3e7d6d9p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 478 + 0x1.633ce8fb9f87db0c69ac5909d3e7a6d9p9, + 0x1.ffffffffffffep1023 + }, + { // Entry 479 + -0x1.633ce8fb9f87db0c69ac5909d3e7a6d9p9, + -0x1.ffffffffffffep1023 + }, + { // Entry 480 + 0x1.dcbf69f10006cbe9c11ca9a5d76ab0c1p0, + 0x1.921fb54442d18p1 + }, + { // Entry 481 + -0x1.dcbf69f10006cbe9c11ca9a5d76ab0c1p0, + -0x1.921fb54442d18p1 + }, + { // Entry 482 + 0x1.3bc04e847ec0514731ddcb476d407d39p0, + 0x1.921fb54442d18p0 + }, + { // Entry 483 + -0x1.3bc04e847ec0514731ddcb476d407d39p0, + -0x1.921fb54442d18p0 + }, + { // Entry 484 + 0x1.c34366179d4283625059bc5770d91d5dp-1, + 0x1.0000000000001p0 + }, + { // Entry 485 + -0x1.c34366179d4283625059bc5770d91d5dp-1, + -0x1.0000000000001p0 + }, + { // Entry 486 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.0p0 + }, + { // Entry 487 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.0p0 + }, + { // Entry 488 + 0x1.c34366179d42617162bffd7dbe442e71p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 489 + -0x1.c34366179d42617162bffd7dbe442e71p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 490 + 0x1.7144779e3f0ba7a6bf77ae922933a297p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 491 + -0x1.7144779e3f0ba7a6bf77ae922933a297p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 492 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 493 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 494 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 495 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 496 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 497 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 498 + 0x1.ffffffffffffbfffffffffffffffffffp-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 499 + -0x1.ffffffffffffbfffffffffffffffffffp-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 500 + 0x1.ffffffffffffffffffffffffffffffffp-1074, + 0x1.0p-1073 + }, + { // Entry 501 + -0x1.ffffffffffffffffffffffffffffffffp-1074, + -0x1.0p-1073 + }, + { // Entry 502 + 0.0, + 0x1.0p-1074 + }, + { // Entry 503 + -0.0, + -0x1.0p-1074 + }, + { // Entry 504 + 0.0, + 0.0 + }, + { // Entry 505 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/asinhf_intel_data.h b/tests/math_data/asinhf_intel_data.h new file mode 100644 index 000000000..e09b2f1a0 --- /dev/null +++ b/tests/math_data/asinhf_intel_data.h @@ -0,0 +1,1650 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_asinhf_intel_data[] = { + { // Entry 0 + -0x1.0f1feafffe3d1154765de9942446abdfp-2, + -0x1.124db8p-2 + }, + { // Entry 1 + 0x1.0f1feafffe3d1154765de9942446abdfp-2, + 0x1.124db8p-2 + }, + { // Entry 2 + -0x1.250abb00034e7ff129bd35187e5a90a8p-11, + -0x1.250abcp-11 + }, + { // Entry 3 + 0x1.250abb00034e7ff129bd35187e5a90a8p-11, + 0x1.250abcp-11 + }, + { // Entry 4 + -0x1.544e70ffffe14ccbadab97b65580f0f7p-5, + -0x1.546780p-5 + }, + { // Entry 5 + 0x1.544e70ffffe14ccbadab97b65580f0f7p-5, + 0x1.546780p-5 + }, + { // Entry 6 + -0x1.e4713d0abf552bdbc167e2422c33c9cbp1, + -0x1.60p4 + }, + { // Entry 7 + 0x1.e4713d0abf552bdbc167e2422c33c9cbp1, + 0x1.60p4 + }, + { // Entry 8 + -0x1.5fe9a00168f4b6cc1a76f27bb6acd88bp-4, + -0x1.605880p-4 + }, + { // Entry 9 + 0x1.5fe9a00168f4b6cc1a76f27bb6acd88bp-4, + 0x1.605880p-4 + }, + { // Entry 10 + -0x1.dade546facd5dc06721c3a76f2fa6a4cp0, + -0x1.8f096ep1 + }, + { // Entry 11 + 0x1.dade546facd5dc06721c3a76f2fa6a4cp0, + 0x1.8f096ep1 + }, + { // Entry 12 + -0x1.d4982b0c930dad1b48293ef31d693cecp-6, + -0x1.d4a886p-6 + }, + { // Entry 13 + 0x1.d4982b0c930dad1b48293ef31d693cecp-6, + 0x1.d4a886p-6 + }, + { // Entry 14 + -0x1.d9ecbcfff8be129cc3cf7bf216da5f46p-4, + -0x1.dafba0p-4 + }, + { // Entry 15 + 0x1.d9ecbcfff8be129cc3cf7bf216da5f46p-4, + 0x1.dafba0p-4 + }, + { // Entry 16 + -0x1.f95ae3069ee6ea46106060615b04d1b9p-3, + -0x1.fe7fc0p-3 + }, + { // Entry 17 + 0x1.f95ae3069ee6ea46106060615b04d1b9p-3, + 0x1.fe7fc0p-3 + }, + { // Entry 18 + 0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + 0x1.p-5 + }, + { // Entry 19 + -0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + -0x1.p-5 + }, + { // Entry 20 + 0x1.ffffffffffffffffffffffffffffffffp-144, + 0x1.p-143 + }, + { // Entry 21 + -0x1.ffffffffffffffffffffffffffffffffp-144, + -0x1.p-143 + }, + { // Entry 22 + 0x1.ffeab11035cadf93754fd9171a996c98p-6, + 0x1.000002p-5 + }, + { // Entry 23 + -0x1.ffeab11035cadf93754fd9171a996c98p-6, + -0x1.000002p-5 + }, + { // Entry 24 + 0x1.000001fffffffffffffff55555155554p-41, + 0x1.000002p-41 + }, + { // Entry 25 + -0x1.000001fffffffffffffff55555155554p-41, + -0x1.000002p-41 + }, + { // Entry 26 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 27 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 28 + 0x1.7912730e9dd8c28d0e2e8849730f0345p4, + 0x1.000002p33 + }, + { // Entry 29 + -0x1.7912730e9dd8c28d0e2e8849730f0345p4, + -0x1.000002p33 + }, + { // Entry 30 + 0x1.fead3b0ab2db53675e78fa2d41047d4ap-4, + 0x1.000018p-3 + }, + { // Entry 31 + -0x1.fead3b0ab2db53675e78fa2d41047d4ap-4, + -0x1.000018p-3 + }, + { // Entry 32 + 0x1.fead42fae23a4ec3ec74e75d7e6a8e01p-4, + 0x1.00001cp-3 + }, + { // Entry 33 + -0x1.fead42fae23a4ec3ec74e75d7e6a8e01p-4, + -0x1.00001cp-3 + }, + { // Entry 34 + 0x1.686fc30f61d32f36cebd3556647e6d85p5, + 0x1.00004cp64 + }, + { // Entry 35 + -0x1.686fc30f61d32f36cebd3556647e6d85p5, + -0x1.00004cp64 + }, + { // Entry 36 + 0x1.0c1fb8ff9524366b4770e679f3d2be09p1, + 0x1.000060p2 + }, + { // Entry 37 + -0x1.0c1fb8ff9524366b4770e679f3d2be09p1, + -0x1.000060p2 + }, + { // Entry 38 + 0x1.ecc43f011e3008670443b4fad065f492p-2, + 0x1.0000d0p-1 + }, + { // Entry 39 + -0x1.ecc43f011e3008670443b4fad065f492p-2, + -0x1.0000d0p-1 + }, + { // Entry 40 + 0x1.feafbe09a9ba162c9d72e1d6bf7564a3p-4, + 0x1.00015cp-3 + }, + { // Entry 41 + -0x1.feafbe09a9ba162c9d72e1d6bf7564a3p-4, + -0x1.00015cp-3 + }, + { // Entry 42 + 0x1.c3458525ab38fbabe76fc767cf7a5730p-1, + 0x1.000180p0 + }, + { // Entry 43 + -0x1.c3458525ab38fbabe76fc767cf7a5730p-1, + -0x1.000180p0 + }, + { // Entry 44 + 0x1.fad2e50655314fc4b2c8f27b0fc674ddp-3, + 0x1.0001a6p-2 + }, + { // Entry 45 + -0x1.fad2e50655314fc4b2c8f27b0fc674ddp-3, + -0x1.0001a6p-2 + }, + { // Entry 46 + 0x1.fff8d74b7e204f81827216900ed8543fp-6, + 0x1.000716p-5 + }, + { // Entry 47 + -0x1.fff8d74b7e204f81827216900ed8543fp-6, + -0x1.000716p-5 + }, + { // Entry 48 + 0x1.ffbac9000089648597139384da627d36p-5, + 0x1.0008p-4 + }, + { // Entry 49 + -0x1.ffbac9000089648597139384da627d36p-5, + -0x1.0008p-4 + }, + { // Entry 50 + 0x1.fffb13040741e3467cc63b91d9b9d8c7p-6, + 0x1.000834p-5 + }, + { // Entry 51 + -0x1.fffb13040741e3467cc63b91d9b9d8c7p-6, + -0x1.000834p-5 + }, + { // Entry 52 + 0x1.fec8d40c701c746cf9bdcc066cc0c5bbp-4, + 0x1.000ep-3 + }, + { // Entry 53 + -0x1.fec8d40c701c746cf9bdcc066cc0c5bbp-4, + -0x1.000ep-3 + }, + { // Entry 54 + 0x1.0c3ab19e45eb29d7ac3cb690b07f2c76p1, + 0x1.0038p2 + }, + { // Entry 55 + -0x1.0c3ab19e45eb29d7ac3cb690b07f2c76p1, + -0x1.0038p2 + }, + { // Entry 56 + 0x1.c3b5a37f910bfbf8ba8ffc861755f387p-1, + 0x1.0050cep0 + }, + { // Entry 57 + -0x1.c3b5a37f910bfbf8ba8ffc861755f387p-1, + -0x1.0050cep0 + }, + { // Entry 58 + 0x1.ff9b301b22a673c34515e6fb85810f60p-4, + 0x1.0078p-3 + }, + { // Entry 59 + -0x1.ff9b301b22a673c34515e6fb85810f60p-4, + -0x1.0078p-3 + }, + { // Entry 60 + 0x1.c4bc4cfeab01d553217d775dafbe1e54p-1, + 0x1.010ac8p0 + }, + { // Entry 61 + -0x1.c4bc4cfeab01d553217d775dafbe1e54p-1, + -0x1.010ac8p0 + }, + { // Entry 62 + 0x1.fe5b8ef85ffc7ee05a4f3f96b6e60554p-3, + 0x1.01d4p-2 + }, + { // Entry 63 + -0x1.fe5b8ef85ffc7ee05a4f3f96b6e60554p-3, + -0x1.01d4p-2 + }, + { // Entry 64 + 0x1.795233437bda10a17c9819cb13d288e3p3, + 0x1.02p16 + }, + { // Entry 65 + -0x1.795233437bda10a17c9819cb13d288e3p3, + -0x1.02p16 + }, + { // Entry 66 + 0x1.7952350002c01bfe0af7d7457dbf20dap3, + 0x1.02000ep16 + }, + { // Entry 67 + -0x1.7952350002c01bfe0af7d7457dbf20dap3, + -0x1.02000ep16 + }, + { // Entry 68 + 0x1.f1abad0010bc92fb3c926eb5ded61431p-2, + 0x1.02bf60p-1 + }, + { // Entry 69 + -0x1.f1abad0010bc92fb3c926eb5ded61431p-2, + -0x1.02bf60p-1 + }, + { // Entry 70 + 0x1.ca35e4554c95b4f73f96234be8db5a0cp-1, + 0x1.04efa8p0 + }, + { // Entry 71 + -0x1.ca35e4554c95b4f73f96234be8db5a0cp-1, + -0x1.04efa8p0 + }, + { // Entry 72 + 0x1.f62556ffff16c63d4ba67855548e7a1ap-2, + 0x1.0541d6p-1 + }, + { // Entry 73 + -0x1.f62556ffff16c63d4ba67855548e7a1ap-2, + -0x1.0541d6p-1 + }, + { // Entry 74 + 0x1.cc0aec88d32a2ccff738ff8f5e116de3p-1, + 0x1.063ef4p0 + }, + { // Entry 75 + -0x1.cc0aec88d32a2ccff738ff8f5e116de3p-1, + -0x1.063ef4p0 + }, + { // Entry 76 + 0x1.06ac7a01a2b93dd343117d62da00efe9p-5, + 0x1.06b8p-5 + }, + { // Entry 77 + -0x1.06ac7a01a2b93dd343117d62da00efe9p-5, + -0x1.06b8p-5 + }, + { // Entry 78 + 0x1.78a50f013838dd4ba303180ecb0af32fp0, + 0x1.0802p1 + }, + { // Entry 79 + -0x1.78a50f013838dd4ba303180ecb0af32fp0, + -0x1.0802p1 + }, + { // Entry 80 + 0x1.104e01af3396534a594bd72c365a3eedp1, + 0x1.08c230p2 + }, + { // Entry 81 + -0x1.104e01af3396534a594bd72c365a3eedp1, + -0x1.08c230p2 + }, + { // Entry 82 + 0x1.d0517f0001a7d9a1e6f44c6bab1469eep-1, + 0x1.0950c8p0 + }, + { // Entry 83 + -0x1.d0517f0001a7d9a1e6f44c6bab1469eep-1, + -0x1.0950c8p0 + }, + { // Entry 84 + 0x1.fe0a030fb46d45fb1c02b3272bcd1914p-2, + 0x1.09b21ap-1 + }, + { // Entry 85 + -0x1.fe0a030fb46d45fb1c02b3272bcd1914p-2, + -0x1.09b21ap-1 + }, + { // Entry 86 + 0x1.fea6bc4743366aeba868336ffac3acbdp-2, + 0x1.0a0a66p-1 + }, + { // Entry 87 + -0x1.fea6bc4743366aeba868336ffac3acbdp-2, + -0x1.0a0a66p-1 + }, + { // Entry 88 + 0x1.d822f300019612b0ea114300b20b6d9dp-1, + 0x1.0ef9fap0 + }, + { // Entry 89 + -0x1.d822f300019612b0ea114300b20b6d9dp-1, + -0x1.0ef9fap0 + }, + { // Entry 90 + 0x1.d98a7896e162415f9165e41af5e889cbp-1, + 0x1.10p0 + }, + { // Entry 91 + -0x1.d98a7896e162415f9165e41af5e889cbp-1, + -0x1.10p0 + }, + { // Entry 92 + 0x1.1034b2000a6d7c1400fd184bdac732ffp-4, + 0x1.1068p-4 + }, + { // Entry 93 + -0x1.1034b2000a6d7c1400fd184bdac732ffp-4, + -0x1.1068p-4 + }, + { // Entry 94 + 0x1.de5c70fffea7cdc7698c00ca7b57f914p-1, + 0x1.138754p0 + }, + { // Entry 95 + -0x1.de5c70fffea7cdc7698c00ca7b57f914p-1, + -0x1.138754p0 + }, + { // Entry 96 + 0x1.16a7b0fce815d17a58d940605c85f9cfp-3, + 0x1.1784p-3 + }, + { // Entry 97 + -0x1.16a7b0fce815d17a58d940605c85f9cfp-3, + -0x1.1784p-3 + }, + { // Entry 98 + 0x1.e46bf608630f17f3183a7d1db5529144p-1, + 0x1.18p0 + }, + { // Entry 99 + -0x1.e46bf608630f17f3183a7d1db5529144p-1, + -0x1.18p0 + }, + { // Entry 100 + 0x1.b6c931c025238ebcf98ef12eb28d8307p5, + 0x1.18p78 + }, + { // Entry 101 + -0x1.b6c931c025238ebcf98ef12eb28d8307p5, + -0x1.18p78 + }, + { // Entry 102 + 0x1.7bf48d0006896bad6b7e5e69afbdc70bp3, + 0x1.1823p16 + }, + { // Entry 103 + -0x1.7bf48d0006896bad6b7e5e69afbdc70bp3, + -0x1.1823p16 + }, + { // Entry 104 + 0x1.e681682e3230779582a57284cdf10552p-1, + 0x1.198be0p0 + }, + { // Entry 105 + -0x1.e681682e3230779582a57284cdf10552p-1, + -0x1.198be0p0 + }, + { // Entry 106 + 0x1.e7ff47ef1be499dbdb2d4c2dab7144d2p-1, + 0x1.1aa8p0 + }, + { // Entry 107 + -0x1.e7ff47ef1be499dbdb2d4c2dab7144d2p-1, + -0x1.1aa8p0 + }, + { // Entry 108 + 0x1.19ffa8fffcaa5a70836fe5869d6f3e64p-3, + 0x1.1ae4p-3 + }, + { // Entry 109 + -0x1.19ffa8fffcaa5a70836fe5869d6f3e64p-3, + -0x1.1ae4p-3 + }, + { // Entry 110 + 0x1.e8d45f38a22bc64723c44174227b6055p-1, + 0x1.1b46d0p0 + }, + { // Entry 111 + -0x1.e8d45f38a22bc64723c44174227b6055p-1, + -0x1.1b46d0p0 + }, + { // Entry 112 + 0x1.e8db53fe01cb2f1941b1e02656828b71p-1, + 0x1.1b4cp0 + }, + { // Entry 113 + -0x1.e8db53fe01cb2f1941b1e02656828b71p-1, + -0x1.1b4cp0 + }, + { // Entry 114 + 0x1.e93d1fffffc916cac5df6685ccfb9a95p-1, + 0x1.1b94f4p0 + }, + { // Entry 115 + -0x1.e93d1fffffc916cac5df6685ccfb9a95p-1, + -0x1.1b94f4p0 + }, + { // Entry 116 + 0x1.e9cc87321d1ed3ec8130e9128585214cp-1, + 0x1.1cp0 + }, + { // Entry 117 + -0x1.e9cc87321d1ed3ec8130e9128585214cp-1, + -0x1.1cp0 + }, + { // Entry 118 + 0x1.18760b00045eb313cf2650593887e2bep6, + 0x1.1d0740p100 + }, + { // Entry 119 + -0x1.18760b00045eb313cf2650593887e2bep6, + -0x1.1d0740p100 + }, + { // Entry 120 + 0x1.ed98b1f64a808793ae088a13d43da9c2p-1, + 0x1.1ed8p0 + }, + { // Entry 121 + -0x1.ed98b1f64a808793ae088a13d43da9c2p-1, + -0x1.1ed8p0 + }, + { // Entry 122 + 0x1.24f53378690fc7ab8aafbeb62b1c3badp-5, + 0x1.250530p-5 + }, + { // Entry 123 + -0x1.24f53378690fc7ab8aafbeb62b1c3badp-5, + -0x1.250530p-5 + }, + { // Entry 124 + 0x1.4a5b157658bb51fe2cd170c897ff9227p-5, + 0x1.4a7202p-5 + }, + { // Entry 125 + -0x1.4a5b157658bb51fe2cd170c897ff9227p-5, + -0x1.4a7202p-5 + }, + { // Entry 126 + 0x1.b736e800018136bc46678d296cd029bdp0, + 0x1.585c20p1 + }, + { // Entry 127 + -0x1.b736e800018136bc46678d296cd029bdp0, + -0x1.585c20p1 + }, + { // Entry 128 + 0x1.220b35fffea45ca3a7091d0d1dd0328dp0, + 0x1.6433f4p0 + }, + { // Entry 129 + -0x1.220b35fffea45ca3a7091d0d1dd0328dp0, + -0x1.6433f4p0 + }, + { // Entry 130 + 0x1.6b88e10b317c9c2d54079667c212fd16p-6, + 0x1.6b9084p-6 + }, + { // Entry 131 + -0x1.6b88e10b317c9c2d54079667c212fd16p-6, + -0x1.6b9084p-6 + }, + { // Entry 132 + 0x1.c570240000129c3304aa0b9915097b93p0, + 0x1.6d505ep1 + }, + { // Entry 133 + -0x1.c570240000129c3304aa0b9915097b93p0, + -0x1.6d505ep1 + }, + { // Entry 134 + 0x1.71f3de02331239b851f896c8c251b36fp-4, + 0x1.7274b0p-4 + }, + { // Entry 135 + -0x1.71f3de02331239b851f896c8c251b36fp-4, + -0x1.7274b0p-4 + }, + { // Entry 136 + 0x1.7fffff000001ccccc883a8462e52c2d1p-10, + 0x1.800008p-10 + }, + { // Entry 137 + -0x1.7fffff000001ccccc883a8462e52c2d1p-10, + -0x1.800008p-10 + }, + { // Entry 138 + 0x1.d2c365a2367e0a0f342a944b8fe912adp0, + 0x1.81f778p1 + }, + { // Entry 139 + -0x1.d2c365a2367e0a0f342a944b8fe912adp0, + -0x1.81f778p1 + }, + { // Entry 140 + 0x1.7042f9000343b85d0080af58e6ce2a5bp3, + 0x1.84c61ep15 + }, + { // Entry 141 + -0x1.7042f9000343b85d0080af58e6ce2a5bp3, + -0x1.84c61ep15 + }, + { // Entry 142 + 0x1.ca328b0b0732378d71b2ed8f94926b5cp5, + 0x1.8c25e4p81 + }, + { // Entry 143 + -0x1.ca328b0b0732378d71b2ed8f94926b5cp5, + -0x1.8c25e4p81 + }, + { // Entry 144 + 0x1.6c02870f43f412f2facda9c71af64d9ap5, + 0x1.9026f4p64 + }, + { // Entry 145 + -0x1.6c02870f43f412f2facda9c71af64d9ap5, + -0x1.9026f4p64 + }, + { // Entry 146 + 0x1.dc29a21d978c49d5ef40e243da93e547p0, + 0x1.912912p1 + }, + { // Entry 147 + -0x1.dc29a21d978c49d5ef40e243da93e547p0, + -0x1.912912p1 + }, + { // Entry 148 + 0x1.e87da9ce17176d9508dd14c470c83b98p0, + 0x1.a5e970p1 + }, + { // Entry 149 + -0x1.e87da9ce17176d9508dd14c470c83b98p0, + -0x1.a5e970p1 + }, + { // Entry 150 + 0x1.52728c00e52ef07d6e0a17848d326ee2p1, + 0x1.bffffep2 + }, + { // Entry 151 + -0x1.52728c00e52ef07d6e0a17848d326ee2p1, + -0x1.bffffep2 + }, + { // Entry 152 + 0x1.5512b2ffffffdc9663a38b72b6dcdf6fp0, + 0x1.c3523ep0 + }, + { // Entry 153 + -0x1.5512b2ffffffdc9663a38b72b6dcdf6fp0, + -0x1.c3523ep0 + }, + { // Entry 154 + 0x1.c52b7d0f27e70062b6eeb63fbfbccb96p-6, + 0x1.c53a48p-6 + }, + { // Entry 155 + -0x1.c52b7d0f27e70062b6eeb63fbfbccb96p-6, + -0x1.c53a48p-6 + }, + { // Entry 156 + 0x1.a89b32fff40d30fcb4988c656e03af82p-1, + 0x1.dafa74p-1 + }, + { // Entry 157 + -0x1.a89b32fff40d30fcb4988c656e03af82p-1, + -0x1.dafa74p-1 + }, + { // Entry 158 + 0x1.6274b2fffe689d7abb667b3f8ab66e94p0, + 0x1.df1344p0 + }, + { // Entry 159 + -0x1.6274b2fffe689d7abb667b3f8ab66e94p0, + -0x1.df1344p0 + }, + { // Entry 160 + 0x1.e9d89afff66699a3a0a0107eec7292b8p-4, + 0x1.eb03bcp-4 + }, + { // Entry 161 + -0x1.e9d89afff66699a3a0a0107eec7292b8p-4, + -0x1.eb03bcp-4 + }, + { // Entry 162 + 0x1.baba624cf203c38bfc585ab19463e81bp-1, + 0x1.f3fffep-1 + }, + { // Entry 163 + -0x1.baba624cf203c38bfc585ab19463e81bp-1, + -0x1.f3fffep-1 + }, + { // Entry 164 + 0x1.bcc66ead9bdc7bae10b705739ce6273ap-1, + 0x1.f6dd80p-1 + }, + { // Entry 165 + -0x1.bcc66ead9bdc7bae10b705739ce6273ap-1, + -0x1.f6dd80p-1 + }, + { // Entry 166 + 0x1.dca21f00608c1d5dfa8c6eb1ce2f725cp4, + 0x1.f7fffep41 + }, + { // Entry 167 + -0x1.dca21f00608c1d5dfa8c6eb1ce2f725cp4, + -0x1.f7fffep41 + }, + { // Entry 168 + 0x1.0a2f1d0000074b9fe1702b2e3f079a3bp1, + 0x1.f81024p1 + }, + { // Entry 169 + -0x1.0a2f1d0000074b9fe1702b2e3f079a3bp1, + -0x1.f81024p1 + }, + { // Entry 170 + 0x1.f8b8c2d940b76e1cca1ebf54f4195d20p-4, + 0x1.f9fffep-4 + }, + { // Entry 171 + -0x1.f8b8c2d940b76e1cca1ebf54f4195d20p-4, + -0x1.f9fffep-4 + }, + { // Entry 172 + 0x1.fa6d06fff6691e956f3207b0a5ca4eeap-4, + 0x1.fbb796p-4 + }, + { // Entry 173 + -0x1.fa6d06fff6691e956f3207b0a5ca4eeap-4, + -0x1.fbb796p-4 + }, + { // Entry 174 + 0x1.fd26a51202d84047f50c18a4c4235d86p-6, + 0x1.fd3ba0p-6 + }, + { // Entry 175 + -0x1.fd26a51202d84047f50c18a4c4235d86p-6, + -0x1.fd3ba0p-6 + }, + { // Entry 176 + 0x1.eaf8a9005792f097e006d070ec6e7538p-2, + 0x1.fdfffep-2 + }, + { // Entry 177 + -0x1.eaf8a9005792f097e006d070ec6e7538p-2, + -0x1.fdfffep-2 + }, + { // Entry 178 + 0x1.ff322f1260d5d5168ca6d76975246012p-7, + 0x1.ff377ep-7 + }, + { // Entry 179 + -0x1.ff322f1260d5d5168ca6d76975246012p-7, + -0x1.ff377ep-7 + }, + { // Entry 180 + 0x1.b6102affc7f74638c6d979799db2bfaap5, + 0x1.ff9ffep77 + }, + { // Entry 181 + -0x1.b6102affc7f74638c6d979799db2bfaap5, + -0x1.ff9ffep77 + }, + { // Entry 182 + 0x1.ffb29911437bb58cb151e304b1fad9a8p-7, + 0x1.ffb7ecp-7 + }, + { // Entry 183 + -0x1.ffb29911437bb58cb151e304b1fad9a8p-7, + -0x1.ffb7ecp-7 + }, + { // Entry 184 + 0x1.fe8d48ac193eaa17e2bb8b9342791f2dp-4, + 0x1.ffdffep-4 + }, + { // Entry 185 + -0x1.fe8d48ac193eaa17e2bb8b9342791f2dp-4, + -0x1.ffdffep-4 + }, + { // Entry 186 + 0x1.ffdfa8bad104e0551f02b0530cfad4f8p-9, + 0x1.ffdffep-9 + }, + { // Entry 187 + -0x1.ffdfa8bad104e0551f02b0530cfad4f8p-9, + -0x1.ffdffep-9 + }, + { // Entry 188 + 0x1.fea49a3aebbc35e17238eea29547caf8p-4, + 0x1.fff77ep-4 + }, + { // Entry 189 + -0x1.fea49a3aebbc35e17238eea29547caf8p-4, + -0x1.fff77ep-4 + }, + { // Entry 190 + 0x1.facf9900599e9e6aa0b023811476fee8p-3, + 0x1.ffffe6p-3 + }, + { // Entry 191 + -0x1.facf9900599e9e6aa0b023811476fee8p-3, + -0x1.ffffe6p-3 + }, + { // Entry 192 + 0x1.ffaac50040a9c0881e560e4889792087p-5, + 0x1.fffff4p-5 + }, + { // Entry 193 + -0x1.ffaac50040a9c0881e560e4889792087p-5, + -0x1.fffff4p-5 + }, + { // Entry 194 + 0x1.ffaac8fe42289581485ee110507837f6p-5, + 0x1.fffff8p-5 + }, + { // Entry 195 + -0x1.ffaac8fe42289581485ee110507837f6p-5, + -0x1.fffff8p-5 + }, + { // Entry 196 + 0x1.c9d926ffffec577f549c952aff8ea67ep-1, + 0x1.04ad76p0 + }, + { // Entry 197 + -0x1.c9d926ffffec577f549c952aff8ea67ep-1, + -0x1.04ad76p0 + }, + { // Entry 198 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.p0 + }, + { // Entry 199 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.p0 + }, + { // Entry 200 + -0x1.9490fec3efbe5988497c1478565aa446p-1, + -0x1.c0p-1 + }, + { // Entry 201 + 0x1.9490fec3efbe5988497c1478565aa446p-1, + 0x1.c0p-1 + }, + { // Entry 202 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.80p-1 + }, + { // Entry 203 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.80p-1 + }, + { // Entry 204 + -0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + -0x1.40p-1 + }, + { // Entry 205 + 0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + 0x1.40p-1 + }, + { // Entry 206 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.p-1 + }, + { // Entry 207 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.p-1 + }, + { // Entry 208 + -0x1.7786a7973a5923b96eef2610c25e841ap-2, + -0x1.80p-2 + }, + { // Entry 209 + 0x1.7786a7973a5923b96eef2610c25e841ap-2, + 0x1.80p-2 + }, + { // Entry 210 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.p-2 + }, + { // Entry 211 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.p-2 + }, + { // Entry 212 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.p-3 + }, + { // Entry 213 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.p-3 + }, + { // Entry 214 + 0.0, + 0.0 + }, + { // Entry 215 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.p-3 + }, + { // Entry 216 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.p-3 + }, + { // Entry 217 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.p-2 + }, + { // Entry 218 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.p-2 + }, + { // Entry 219 + 0x1.7786a7973a5923b96eef2610c25e841ap-2, + 0x1.80p-2 + }, + { // Entry 220 + -0x1.7786a7973a5923b96eef2610c25e841ap-2, + -0x1.80p-2 + }, + { // Entry 221 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.p-1 + }, + { // Entry 222 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.p-1 + }, + { // Entry 223 + 0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + 0x1.40p-1 + }, + { // Entry 224 + -0x1.2e27502cbfb3347f6bcbf84eb95ca4a3p-1, + -0x1.40p-1 + }, + { // Entry 225 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.80p-1 + }, + { // Entry 226 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.80p-1 + }, + { // Entry 227 + 0x1.9490fec3efbe5988497c1478565aa446p-1, + 0x1.c0p-1 + }, + { // Entry 228 + -0x1.9490fec3efbe5988497c1478565aa446p-1, + -0x1.c0p-1 + }, + { // Entry 229 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.p0 + }, + { // Entry 230 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.p0 + }, + { // Entry 231 + 0x1.18080dd3171b6c031a9b576be63b6d4cp6, + 0x1.p100 + }, + { // Entry 232 + -0x1.18080dd3171b6c031a9b576be63b6d4cp6, + -0x1.p100 + }, + { // Entry 233 + 0x1.1869a6d270699e1fa7c307d5fdbce864p6, + 0x1.19999ap100 + }, + { // Entry 234 + -0x1.1869a6d270699e1fa7c307d5fdbce864p6, + -0x1.19999ap100 + }, + { // Entry 235 + 0x1.18c2c05650eac97c01479a1a77caa909p6, + 0x1.333334p100 + }, + { // Entry 236 + -0x1.18c2c05650eac97c01479a1a77caa909p6, + -0x1.333334p100 + }, + { // Entry 237 + 0x1.1914b70e86721bbde7a2eea6f077d548p6, + 0x1.4ccccep100 + }, + { // Entry 238 + -0x1.1914b70e86721bbde7a2eea6f077d548p6, + -0x1.4ccccep100 + }, + { // Entry 239 + 0x1.19609a053a97d6f30409751e6281de59p6, + 0x1.666668p100 + }, + { // Entry 240 + -0x1.19609a053a97d6f30409751e6281de59p6, + -0x1.666668p100 + }, + { // Entry 241 + 0x1.19a74017386a428962791f05687972f6p6, + 0x1.800002p100 + }, + { // Entry 242 + -0x1.19a74017386a428962791f05687972f6p6, + -0x1.800002p100 + }, + { // Entry 243 + 0x1.19e9567ab98dd45c6898a542a93d6c1bp6, + 0x1.99999cp100 + }, + { // Entry 244 + -0x1.19e9567ab98dd45c6898a542a93d6c1bp6, + -0x1.99999cp100 + }, + { // Entry 245 + 0x1.1a276adcd0472f52cdae405190f05814p6, + 0x1.b33336p100 + }, + { // Entry 246 + -0x1.1a276adcd0472f52cdae405190f05814p6, + -0x1.b33336p100 + }, + { // Entry 247 + 0x1.1a61f2998eab653e55cda9cf1b8d9e50p6, + 0x1.ccccd0p100 + }, + { // Entry 248 + -0x1.1a61f2998eab653e55cda9cf1b8d9e50p6, + -0x1.ccccd0p100 + }, + { // Entry 249 + 0x1.1a994fffd300555a0d63481601d36422p6, + 0x1.e6666ap100 + }, + { // Entry 250 + -0x1.1a994fffd300555a0d63481601d36422p6, + -0x1.e6666ap100 + }, + { // Entry 251 + 0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + 0x1.p101 + }, + { // Entry 252 + -0x1.1acdd632f662a9e9c9c2e63a464b3927p6, + -0x1.p101 + }, + { // Entry 253 + -0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + -0x1.fffffep127 + }, + { // Entry 254 + 0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + 0x1.fffffep127 + }, + { // Entry 255 + 0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + 0x1.fffffep127 + }, + { // Entry 256 + -0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + -0x1.fffffep127 + }, + { // Entry 257 + -0.0f, + -0x1.p-149 + }, + { // Entry 258 + 0.0f, + 0x1.p-149 + }, + { // Entry 259 + 0.0, + 0.0 + }, + { // Entry 260 + 0.0f, + 0x1.p-149 + }, + { // Entry 261 + -0.0f, + -0x1.p-149 + }, + { // Entry 262 + -0x1.0499e5d08dbd469e5c8e399d3fdaf2bap-1, + -0x1.100002p-1 + }, + { // Entry 263 + 0x1.0499e5d08dbd469e5c8e399d3fdaf2bap-1, + 0x1.100002p-1 + }, + { // Entry 264 + -0x1.0499e40c65ff48fb04213eab32faa345p-1, + -0x1.10p-1 + }, + { // Entry 265 + 0x1.0499e40c65ff48fb04213eab32faa345p-1, + 0x1.10p-1 + }, + { // Entry 266 + -0x1.0499e2483e40900199471311080aa3efp-1, + -0x1.0ffffep-1 + }, + { // Entry 267 + 0x1.0499e2483e40900199471311080aa3efp-1, + 0x1.0ffffep-1 + }, + { // Entry 268 + 0x1.0499e2483e40900199471311080aa3efp-1, + 0x1.0ffffep-1 + }, + { // Entry 269 + -0x1.0499e2483e40900199471311080aa3efp-1, + -0x1.0ffffep-1 + }, + { // Entry 270 + 0x1.0499e40c65ff48fb04213eab32faa345p-1, + 0x1.10p-1 + }, + { // Entry 271 + -0x1.0499e40c65ff48fb04213eab32faa345p-1, + -0x1.10p-1 + }, + { // Entry 272 + 0x1.0499e5d08dbd469e5c8e399d3fdaf2bap-1, + 0x1.100002p-1 + }, + { // Entry 273 + -0x1.0499e5d08dbd469e5c8e399d3fdaf2bap-1, + -0x1.100002p-1 + }, + { // Entry 274 + 0x1.62e42fe7a39eef5793c4bc855b3b42b2p5, + 0x1.fffffep62 + }, + { // Entry 275 + -0x1.62e42fe7a39eef5793c4bc855b3b42b2p5, + -0x1.fffffep62 + }, + { // Entry 276 + 0x1.62e42fefa39ef35793c7673007e5ed5ep5, + 0x1.p63 + }, + { // Entry 277 + -0x1.62e42fefa39ef35793c7673007e5ed5ep5, + -0x1.p63 + }, + { // Entry 278 + 0x1.62e42fffa39ee35793dcbc853d3b42e7p5, + 0x1.000002p63 + }, + { // Entry 279 + -0x1.62e42fffa39ee35793dcbc853d3b42e7p5, + -0x1.000002p63 + }, + { // Entry 280 + 0x1.419ecb612c48048b5de7682e2ddf0845p4, + 0x1.fffffep27 + }, + { // Entry 281 + -0x1.419ecb612c48048b5de7682e2ddf0845p4, + -0x1.fffffep27 + }, + { // Entry 282 + 0x1.419ecb712c480c8b5decb58387285d9dp4, + 0x1.p28 + }, + { // Entry 283 + -0x1.419ecb712c480c8b5decb58387285d9dp4, + -0x1.p28 + }, + { // Entry 284 + 0x1.419ecb912c47ec8b5e17502df20308aep4, + 0x1.000002p28 + }, + { // Entry 285 + -0x1.419ecb912c47ec8b5e17502df20308aep4, + -0x1.000002p28 + }, + { // Entry 286 + 0x1.3687a9e1af2b0cfca14944f4adc3c25ap4, + 0x1.fffffep26 + }, + { // Entry 287 + -0x1.3687a9e1af2b0cfca14944f4adc3c25ap4, + -0x1.fffffep26 + }, + { // Entry 288 + 0x1.3687a9f1af2b14fca14e7a4a06e917b2p4, + 0x1.p27 + }, + { // Entry 289 + -0x1.3687a9f1af2b14fca14e7a4a06e917b2p4, + -0x1.p27 + }, + { // Entry 290 + 0x1.3687aa11af2af4fca178e4f47253c2c1p4, + 0x1.000002p27 + }, + { // Entry 291 + -0x1.3687aa11af2af4fca178e4f47253c2c1p4, + -0x1.000002p27 + }, + { // Entry 292 + 0x1.1542456337d42a1c6b76734837564c23p4, + 0x1.fffffep23 + }, + { // Entry 293 + -0x1.1542456337d42a1c6b76734837564c23p4, + -0x1.fffffep23 + }, + { // Entry 294 + 0x1.1542457337d4321c6b73c89d84aba171p4, + 0x1.p24 + }, + { // Entry 295 + -0x1.1542457337d4321c6b73c89d84aba171p4, + -0x1.p24 + }, + { // Entry 296 + 0x1.1542459337d4121c6b8e73481f564c0ep4, + 0x1.000002p24 + }, + { // Entry 297 + -0x1.1542459337d4121c6b8e73481f564c0ep4, + -0x1.000002p24 + }, + { // Entry 298 + 0x1.0c1f89f2534d548373a25a26f285c8e4p1, + 0x1.fffffep1 + }, + { // Entry 299 + -0x1.0c1f89f2534d548373a25a26f285c8e4p1, + -0x1.fffffep1 + }, + { // Entry 300 + 0x1.0c1f8a6e80eeb23e03926981e348eb2ep1, + 0x1.p2 + }, + { // Entry 301 + -0x1.0c1f8a6e80eeb23e03926981e348eb2ep1, + -0x1.p2 + }, + { // Entry 302 + 0x1.0c1f8b66dc300f1430203df7b7466063p1, + 0x1.000002p2 + }, + { // Entry 303 + -0x1.0c1f8b66dc300f1430203df7b7466063p1, + -0x1.000002p2 + }, + { // Entry 304 + 0x1.7192174c43d9e96299f78116852f0226p0, + 0x1.fffffep0 + }, + { // Entry 305 + -0x1.7192174c43d9e96299f78116852f0226p0, + -0x1.fffffep0 + }, + { // Entry 306 + 0x1.719218313d0872f8e831837f0e954189p0, + 0x1.p1 + }, + { // Entry 307 + -0x1.719218313d0872f8e831837f0e954189p0, + -0x1.p1 + }, + { // Entry 308 + 0x1.719219fb2f63609c4a04634fb68878aep0, + 0x1.000002p1 + }, + { // Entry 309 + -0x1.719219fb2f63609c4a04634fb68878aep0, + -0x1.000002p1 + }, + { // Entry 310 + 0x1.c34364ad935baa4b7b8121ba8df62b6cp-1, + 0x1.fffffep-1 + }, + { // Entry 311 + -0x1.c34364ad935baa4b7b8121ba8df62b6cp-1, + -0x1.fffffep-1 + }, + { // Entry 312 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.p0 + }, + { // Entry 313 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.p0 + }, + { // Entry 314 + 0x1.c34368ebb10dd29f459608bca43f91c8p-1, + 0x1.000002p0 + }, + { // Entry 315 + -0x1.c34368ebb10dd29f459608bca43f91c8p-1, + -0x1.000002p0 + }, + { // Entry 316 + 0x1.ecc2c9225f040f819311fcc70a981347p-2, + 0x1.fffffep-2 + }, + { // Entry 317 + -0x1.ecc2c9225f040f819311fcc70a981347p-2, + -0x1.fffffep-2 + }, + { // Entry 318 + 0x1.ecc2caec5160994be04204a968c7020dp-2, + 0x1.p-1 + }, + { // Entry 319 + -0x1.ecc2caec5160994be04204a968c7020dp-2, + -0x1.p-1 + }, + { // Entry 320 + 0x1.ecc2ce8036189a1bdcaca590368850b2p-2, + 0x1.000002p-1 + }, + { // Entry 321 + -0x1.ecc2ce8036189a1bdcaca590368850b2p-2, + -0x1.000002p-1 + }, + { // Entry 322 + 0x1.facfb048e7ded2c6807bda0b8101be5ep-3, + 0x1.fffffep-3 + }, + { // Entry 323 + -0x1.facfb048e7ded2c6807bda0b8101be5ep-3, + -0x1.fffffep-3 + }, + { // Entry 324 + 0x1.facfb2399e636e8d67115de540a778acp-3, + 0x1.p-2 + }, + { // Entry 325 + -0x1.facfb2399e636e8d67115de540a778acp-3, + -0x1.p-2 + }, + { // Entry 326 + 0x1.facfb61b0b6c4e73771a7b444600d862p-3, + 0x1.000002p-2 + }, + { // Entry 327 + -0x1.facfb61b0b6c4e73771a7b444600d862p-3, + -0x1.000002p-2 + }, + { // Entry 328 + 0x1.fead096d8abe9f0e7222b9aab95512f1p-4, + 0x1.fffffep-4 + }, + { // Entry 329 + -0x1.fead096d8abe9f0e7222b9aab95512f1p-4, + -0x1.fffffep-4 + }, + { // Entry 330 + 0x1.fead0b6996972d06058e3eb12c938140p-4, + 0x1.p-3 + }, + { // Entry 331 + -0x1.fead0b6996972d06058e3eb12c938140p-4, + -0x1.p-3 + }, + { // Entry 332 + 0x1.fead0f61ae4831826943c3b871be46a4p-4, + 0x1.000002p-3 + }, + { // Entry 333 + -0x1.fead0f61ae4831826943c3b871be46a4p-4, + -0x1.000002p-3 + }, + { // Entry 334 + 0x1.ffaacefb4466c60d6ba2d2fac8774fdap-5, + 0x1.fffffep-5 + }, + { // Entry 335 + -0x1.ffaacefb4466c60d6ba2d2fac8774fdap-5, + -0x1.fffffep-5 + }, + { // Entry 336 + 0x1.ffaad0fa452627976ff366b9d3840fd1p-5, + 0x1.p-4 + }, + { // Entry 337 + -0x1.ffaad0fa452627976ff366b9d3840fd1p-5, + -0x1.p-4 + }, + { // Entry 338 + 0x1.ffaad4f846a4e4b46d5fa87174990d96p-5, + 0x1.000002p-4 + }, + { // Entry 339 + -0x1.ffaad4f846a4e4b46d5fa87174990d96p-5, + -0x1.000002p-4 + }, + { // Entry 340 + 0x1.ffeaab10f5a6e7d189c57c0e68bbb03ap-6, + 0x1.fffffep-6 + }, + { // Entry 341 + -0x1.ffeaab10f5a6e7d189c57c0e68bbb03ap-6, + -0x1.fffffep-6 + }, + { // Entry 342 + 0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + 0x1.p-5 + }, + { // Entry 343 + -0x1.ffeaad10b5b2e591fdad6bd7f7a497c3p-6, + -0x1.p-5 + }, + { // Entry 344 + 0x1.ffeab11035cadf93754fd9171a996c98p-6, + 0x1.000002p-5 + }, + { // Entry 345 + -0x1.ffeab11035cadf93754fd9171a996c98p-6, + -0x1.000002p-5 + }, + { // Entry 346 + 0x1.fffaa8d11fa2a9bd25f4c3a139791ba3p-7, + 0x1.fffffep-7 + }, + { // Entry 347 + -0x1.fffaa8d11fa2a9bd25f4c3a139791ba3p-7, + -0x1.fffffep-7 + }, + { // Entry 348 + 0x1.fffaaad10fa369c32500d46ba7927458p-7, + 0x1.p-6 + }, + { // Entry 349 + -0x1.fffaaad10fa369c32500d46ba7927458p-7, + -0x1.p-6 + }, + { // Entry 350 + 0x1.fffaaed0efa4e96f2c182216a1ad2218p-7, + 0x1.000002p-6 + }, + { // Entry 351 + -0x1.fffaaed0efa4e96f2c182216a1ad2218p-7, + -0x1.000002p-6 + }, + { // Entry 352 + 0x1.fffffdfaaaaabad111004fa36115083cp-15, + 0x1.fffffep-15 + }, + { // Entry 353 + -0x1.fffffdfaaaaabad111004fa36115083cp-15, + -0x1.fffffep-15 + }, + { // Entry 354 + 0x1.fffffffaaaaaaad111110fa35a35b2e8p-15, + 0x1.p-14 + }, + { // Entry 355 + -0x1.fffffffaaaaaaad111110fa35a35b2e8p-15, + -0x1.p-14 + }, + { // Entry 356 + 0x1.000001fd55554568886947d19abb8424p-14, + 0x1.000002p-14 + }, + { // Entry 357 + -0x1.000001fd55554568886947d19abb8424p-14, + -0x1.000002p-14 + }, + { // Entry 358 + 0x1.fffffdfffffffeaaaaaeaaaaa6ad1112p-28, + 0x1.fffffep-28 + }, + { // Entry 359 + -0x1.fffffdfffffffeaaaaaeaaaaa6ad1112p-28, + -0x1.fffffep-28 + }, + { // Entry 360 + 0x1.fffffffffffffeaaaaaaaaaaaaad1111p-28, + 0x1.p-27 + }, + { // Entry 361 + -0x1.fffffffffffffeaaaaaaaaaaaaad1111p-28, + -0x1.p-27 + }, + { // Entry 362 + 0x1.000001ffffffff55555155554d568883p-27, + 0x1.000002p-27 + }, + { // Entry 363 + -0x1.000001ffffffff55555155554d568883p-27, + -0x1.000002p-27 + }, + { // Entry 364 + 0x1.fffffdffffffffaaaaabaaaaa9aad111p-29, + 0x1.fffffep-29 + }, + { // Entry 365 + -0x1.fffffdffffffffaaaaabaaaaa9aad111p-29, + -0x1.fffffep-29 + }, + { // Entry 366 + 0x1.ffffffffffffffaaaaaaaaaaaaaad111p-29, + 0x1.p-28 + }, + { // Entry 367 + -0x1.ffffffffffffffaaaaaaaaaaaaaad111p-29, + -0x1.p-28 + }, + { // Entry 368 + 0x1.000001ffffffffd55554555553556887p-28, + 0x1.000002p-28 + }, + { // Entry 369 + -0x1.000001ffffffffd55554555553556887p-28, + -0x1.000002p-28 + }, + { // Entry 370 + 0x1.fffffdfffffffffaaaaabaaaaa9aaad1p-31, + 0x1.fffffep-31 + }, + { // Entry 371 + -0x1.fffffdfffffffffaaaaabaaaaa9aaad1p-31, + -0x1.fffffep-31 + }, + { // Entry 372 + 0x1.fffffffffffffffaaaaaaaaaaaaaaad1p-31, + 0x1.p-30 + }, + { // Entry 373 + -0x1.fffffffffffffffaaaaaaaaaaaaaaad1p-31, + -0x1.p-30 + }, + { // Entry 374 + 0x1.000001fffffffffd5555455555355568p-30, + 0x1.000002p-30 + }, + { // Entry 375 + -0x1.000001fffffffffd5555455555355568p-30, + -0x1.000002p-30 + }, + { // Entry 376 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 377 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 378 + 0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + 0x1.fffffep127 + }, + { // Entry 379 + -0x1.65a9f84b82e62f3e42eda0a911a063e3p6, + -0x1.fffffep127 + }, + { // Entry 380 + 0x1.65a9f84782e6293e42e44b53ad4b0e74p6, + 0x1.fffffcp127 + }, + { // Entry 381 + -0x1.65a9f84782e6293e42e44b53ad4b0e74p6, + -0x1.fffffcp127 + }, + { // Entry 382 + 0x1.dcbf6a62e35477f9ae79be71ed97620bp0, + 0x1.921fb6p1 + }, + { // Entry 383 + -0x1.dcbf6a62e35477f9ae79be71ed97620bp0, + -0x1.921fb6p1 + }, + { // Entry 384 + 0x1.3bc04ee951032b4f7509b3b2e0f0715ap0, + 0x1.921fb6p0 + }, + { // Entry 385 + -0x1.3bc04ee951032b4f7509b3b2e0f0715ap0, + -0x1.921fb6p0 + }, + { // Entry 386 + 0x1.c34368ebb10dd29f459608bca43f91c8p-1, + 0x1.000002p0 + }, + { // Entry 387 + -0x1.c34368ebb10dd29f459608bca43f91c8p-1, + -0x1.000002p0 + }, + { // Entry 388 + 0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + 0x1.p0 + }, + { // Entry 389 + -0x1.c34366179d426cc1b1f33d1ba4a314a7p-1, + -0x1.p0 + }, + { // Entry 390 + 0x1.c34364ad935baa4b7b8121ba8df62b6cp-1, + 0x1.fffffep-1 + }, + { // Entry 391 + -0x1.c34364ad935baa4b7b8121ba8df62b6cp-1, + -0x1.fffffep-1 + }, + { // Entry 392 + 0x1.71447831e43cde2ed30650428c5a8410p-1, + 0x1.921fb6p-1 + }, + { // Entry 393 + -0x1.71447831e43cde2ed30650428c5a8410p-1, + -0x1.921fb6p-1 + }, + { // Entry 394 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 395 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 396 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126 + }, + { // Entry 397 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126 + }, + { // Entry 398 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127 + }, + { // Entry 399 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127 + }, + { // Entry 400 + 0x1.fffff7ffffffffffffffffffffffffffp-127, + 0x1.fffff8p-127 + }, + { // Entry 401 + -0x1.fffff7ffffffffffffffffffffffffffp-127, + -0x1.fffff8p-127 + }, + { // Entry 402 + 0x1.ffffffffffffffffffffffffffffffffp-149, + 0x1.p-148 + }, + { // Entry 403 + -0x1.ffffffffffffffffffffffffffffffffp-149, + -0x1.p-148 + }, + { // Entry 404 + 0.0f, + 0x1.p-149 + }, + { // Entry 405 + -0.0f, + -0x1.p-149 + }, + { // Entry 406 + 0.0, + 0.0f + }, + { // Entry 407 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/atan2_intel_data.h b/tests/math_data/atan2_intel_data.h new file mode 100644 index 000000000..5d9eb44d1 --- /dev/null +++ b/tests/math_data/atan2_intel_data.h @@ -0,0 +1,5348 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_atan2_intel_data[] = { + { // Entry 0 + -0x1.ffffffffffff20000000000061fffd55p-60, + -0x1.0p-100, + 0x1.0000000000007p-41 + }, + { // Entry 1 + 0x1.ffffffffffff20000000000061fffd55p-60, + 0x1.0p-100, + 0x1.0000000000007p-41 + }, + { // Entry 2 + -0.0, + -0x1.0p-1073, + 0x1.0000000000001p1 + }, + { // Entry 3 + 0.0, + 0x1.0p-1073, + 0x1.0000000000001p1 + }, + { // Entry 4 + -0x1.cd648010e76317fd25f197c89894a747p-1, + -0x1.0p10, + 0x1.955555555555ep9 + }, + { // Entry 5 + 0x1.cd648010e76317fd25f197c89894a747p-1, + 0x1.0p10, + 0x1.955555555555ep9 + }, + { // Entry 6 + -0x1.0000000000000800000000000040p-924, + -0x1.0p100, + 0x1.fffffffffffffp1023 + }, + { // Entry 7 + 0x1.0000000000000800000000000040p-924, + 0x1.0p100, + 0x1.fffffffffffffp1023 + }, + { // Entry 8 + -0x1.0945ca475762680110c86c82f4007bdap1, + -0x1.0000000000001p0, + -0x1.18cd584e6112bp-1 + }, + { // Entry 9 + 0x1.0945ca475762680110c86c82f4007bdap1, + 0x1.0000000000001p0, + -0x1.18cd584e6112bp-1 + }, + { // Entry 10 + -0x1.f9ca0e1dd954324b96732f0ae9c1c8ffp-3, + -0x1.0222222222222p0, + 0x1.ffeffffffffffp1 + }, + { // Entry 11 + 0x1.f9ca0e1dd954324b96732f0ae9c1c8ffp-3, + 0x1.0222222222222p0, + 0x1.ffeffffffffffp1 + }, + { // Entry 12 + -0x1.fff9653e6201f888937cfc2d716b4d44p-2, + -0x1.14171f06bfb89p-2, + 0x1.f96902dccd29ap-2 + }, + { // Entry 13 + 0x1.fff9653e6201f888937cfc2d716b4d44p-2, + 0x1.14171f06bfb89p-2, + 0x1.f96902dccd29ap-2 + }, + { // Entry 14 + -0x1.ff572aded0be932feeb4707dcb65336dp0, + -0x1.1999999999998p-2, + -0x1.0000000000001p-3 + }, + { // Entry 15 + 0x1.ff572aded0be932feeb4707dcb65336dp0, + 0x1.1999999999998p-2, + -0x1.0000000000001p-3 + }, + { // Entry 16 + -0x1.ff542758ef05b8e7de0d70e2d341ed67p0, + -0x1.1999999999999p-1, + -0x1.ffeffffffffffp-3 + }, + { // Entry 17 + 0x1.ff542758ef05b8e7de0d70e2d341ed67p0, + 0x1.1999999999999p-1, + -0x1.ffeffffffffffp-3 + }, + { // Entry 18 + -0x1.2fffffffffffffffffffffffffffffffp-1071, + -0x1.3p-1070, + 0x1.0p1 + }, + { // Entry 19 + 0x1.2fffffffffffffffffffffffffffffffp-1071, + 0x1.3p-1070, + 0x1.0p1 + }, + { // Entry 20 + -0x1.85539729ef1727fed15784b60b91b2ecp-1, + -0x1.3cf3cf3cf3cf4p9, + 0x1.4d34d34d34d34p9 + }, + { // Entry 21 + 0x1.85539729ef1727fed15784b60b91b2ecp-1, + 0x1.3cf3cf3cf3cf4p9, + 0x1.4d34d34d34d34p9 + }, + { // Entry 22 + -0x1.40000000000008000000000000fffd65p-59, + -0x1.3fffffffffffep42, + 0x1.ffffffffffffcp100 + }, + { // Entry 23 + 0x1.40000000000008000000000000fffd65p-59, + 0x1.3fffffffffffep42, + 0x1.ffffffffffffcp100 + }, + { // Entry 24 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.4p-1072, + -0x1.fffffffffffffp1023 + }, + { // Entry 25 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.4p-1072, + -0x1.fffffffffffffp1023 + }, + { // Entry 26 + -0x1.3fffffffffffffffffffffffffffffffp-1073, + -0x1.4p-1072, + 0x1.0p1 + }, + { // Entry 27 + 0x1.3fffffffffffffffffffffffffffffffp-1073, + 0x1.4p-1072, + 0x1.0p1 + }, + { // Entry 28 + -0x1.5ffe7c27a5cf37fef15668ed8bfdc92cp-1, + -0x1.6477c84a032cep-1, + 0x1.b21f69ae030b0p-1 + }, + { // Entry 29 + 0x1.5ffe7c27a5cf37fef15668ed8bfdc92cp-1, + 0x1.6477c84a032cep-1, + 0x1.b21f69ae030b0p-1 + }, + { // Entry 30 + -0x1.66719908f7c3b796d84184977c923894p-12, + -0x1.6666666665b64p-1, + 0x1.ffeffffffffffp10 + }, + { // Entry 31 + 0x1.66719908f7c3b796d84184977c923894p-12, + 0x1.6666666665b64p-1, + 0x1.ffeffffffffffp10 + }, + { // Entry 32 + -0x1.667199f33acd08010011a82e9838500dp-52, + -0x1.6666666666668p-1, + 0x1.ffeffffff924fp50 + }, + { // Entry 33 + 0x1.667199f33acd08010011a82e9838500dp-52, + 0x1.6666666666668p-1, + 0x1.ffeffffff924fp50 + }, + { // Entry 34 + -0x1.48ef86a5d674e7fe626345caa6dea1adp0, + -0x1.6e589292a58a8p3, + 0x1.aebd9564499f0p1 + }, + { // Entry 35 + 0x1.48ef86a5d674e7fe626345caa6dea1adp0, + 0x1.6e589292a58a8p3, + 0x1.aebd9564499f0p1 + }, + { // Entry 36 + -0x1.69412651b663880102057ffe2b6916e7p-2, + -0x1.7906fe92593dcp-2, + 0x1.0p0 + }, + { // Entry 37 + 0x1.69412651b663880102057ffe2b6916e7p-2, + 0x1.7906fe92593dcp-2, + 0x1.0p0 + }, + { // Entry 38 + -0x1.7fffffffffff97ffb800000013803a80p-33, + -0x1.7fffffffffffep0, + 0x1.0000000000003p33 + }, + { // Entry 39 + 0x1.7fffffffffff97ffb800000013803a80p-33, + 0x1.7fffffffffffep0, + 0x1.0000000000003p33 + }, + { // Entry 40 + -0x1.7fffffffee0020000184c84cd0a5bfb7p-18, + -0x1.7ffffffffffffp0, + 0x1.ffffffffffffcp17 + }, + { // Entry 41 + 0x1.7fffffffee0020000184c84cd0a5bfb7p-18, + 0x1.7ffffffffffffp0, + 0x1.ffffffffffffcp17 + }, + { // Entry 42 + -0x1.01b7ead625912801099d55f3bb6d9b74p0, + -0x1.8e38e38e38e39p9, + 0x1.f7df7df7df7dep8 + }, + { // Entry 43 + 0x1.01b7ead625912801099d55f3bb6d9b74p0, + 0x1.8e38e38e38e39p9, + 0x1.f7df7df7df7dep8 + }, + { // Entry 44 + -0x1.119e0f7084d96bc18bbf2e7a08cfe5adp1, + -0x1.9249249249246p-2, + -0x1.001p-2 + }, + { // Entry 45 + 0x1.119e0f7084d96bc18bbf2e7a08cfe5adp1, + 0x1.9249249249246p-2, + -0x1.001p-2 + }, + { // Entry 46 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.99999999999a8p-4, + 0x1.0p-1074 + }, + { // Entry 47 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.99999999999a8p-4, + 0x1.0p-1074 + }, + { // Entry 48 + -0x1.37626c23803aec7d7a70f700585852f4p-1, + -0x1.a77569dd5a776p8, + 0x1.301ecc07b301ep9 + }, + { // Entry 49 + 0x1.37626c23803aec7d7a70f700585852f4p-1, + 0x1.a77569dd5a776p8, + 0x1.301ecc07b301ep9 + }, + { // Entry 50 + -0x1.0ca7cc2d0d7fd03164ee3af269e6bf79p1, + -0x1.b6db6db6db6e0p-1, + -0x1.0000000000003p-1 + }, + { // Entry 51 + 0x1.0ca7cc2d0d7fd03164ee3af269e6bf79p1, + 0x1.b6db6db6db6e0p-1, + -0x1.0000000000003p-1 + }, + { // Entry 52 + -0x1.a271f63e34fb2fff42b98e7a5ab17eafp-2, + -0x1.bb67ae8584c96p-1, + 0x1.0000000000008p1 + }, + { // Entry 53 + 0x1.a271f63e34fb2fff42b98e7a5ab17eafp-2, + 0x1.bb67ae8584c96p-1, + 0x1.0000000000008p1 + }, + { // Entry 54 + -0x1.f0845de317dae782ac3e8a7eb1fadd63p-2, + -0x1.bed61bed61be4p7, + 0x1.a814afd6a053bp8 + }, + { // Entry 55 + 0x1.f0845de317dae782ac3e8a7eb1fadd63p-2, + 0x1.bed61bed61be4p7, + 0x1.a814afd6a053bp8 + }, + { // Entry 56 + -0x1.3a51f5f0cb5d33de07ac24a32621878dp-1, + -0x1.c18f9c18f9c3ep7, + 0x1.3ef368eb04334p8 + }, + { // Entry 57 + 0x1.3a51f5f0cb5d33de07ac24a32621878dp-1, + 0x1.c18f9c18f9c3ep7, + 0x1.3ef368eb04334p8 + }, + { // Entry 58 + -0x1.fcb510cd5b6bbb8cde13f46dbeeb3110p-3, + -0x1.d26a2bad98d68p-2, + 0x1.cbbd407a7a5b0p0 + }, + { // Entry 59 + 0x1.fcb510cd5b6bbb8cde13f46dbeeb3110p-3, + 0x1.d26a2bad98d68p-2, + 0x1.cbbd407a7a5b0p0 + }, + { // Entry 60 + -0x1.cd5de97a2e3e1859fc3e2517de7a0880p-3, + -0x1.d555555555555p0, + 0x1.0000000000003p3 + }, + { // Entry 61 + 0x1.cd5de97a2e3e1859fc3e2517de7a0880p-3, + 0x1.d555555555555p0, + 0x1.0000000000003p3 + }, + { // Entry 62 + -0x1.337d175e088fb7fa32fafca382768a15p-3, + -0x1.db8a874640569p-3, + 0x1.88eed10e75135p0 + }, + { // Entry 63 + 0x1.337d175e088fb7fa32fafca382768a15p-3, + 0x1.db8a874640569p-3, + 0x1.88eed10e75135p0 + }, + { // Entry 64 + -0x1.f9d28f3da09c8864390cd924ac658d33p0, + -0x1.ddddddddddde0p-2, + -0x1.99ce075f6fd27p-3 + }, + { // Entry 65 + 0x1.f9d28f3da09c8864390cd924ac658d33p0, + 0x1.ddddddddddde0p-2, + -0x1.99ce075f6fd27p-3 + }, + { // Entry 66 + -0x1.ae127b4fb5a7e81cc14c8d0627d18c73p-8, + -0x1.eccd7fdf96454p10, + 0x1.255608e135d80p18 + }, + { // Entry 67 + 0x1.ae127b4fb5a7e81cc14c8d0627d18c73p-8, + 0x1.eccd7fdf96454p10, + 0x1.255608e135d80p18 + }, + { // Entry 68 + -0x1.09121b4b0fb15403f902f2d06a8f1034p1, + -0x1.f5a814afd6a05p9, + -0x1.1219dbcc48673p9 + }, + { // Entry 69 + 0x1.09121b4b0fb15403f902f2d06a8f1034p1, + 0x1.f5a814afd6a05p9, + -0x1.1219dbcc48673p9 + }, + { // Entry 70 + -0x1.ffd55bba97625a80f03aaeebb3192417p-6, + -0x1.ffffffffffffdp-1, + 0x1.ffffffffffffcp4 + }, + { // Entry 71 + 0x1.ffd55bba97625a80f03aaeebb3192417p-6, + 0x1.ffffffffffffdp-1, + 0x1.ffffffffffffcp4 + }, + { // Entry 72 + 0x1.ffffffffffffe0000000000001fffffdp-64, + 0x1.0p-53, + 0x1.0000000000001p10 + }, + { // Entry 73 + -0x1.ffffffffffffe0000000000001fffffdp-64, + -0x1.0p-53, + 0x1.0000000000001p10 + }, + { // Entry 74 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.745d1745d173cp-3 + }, + { // Entry 75 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.745d1745d173cp-3 + }, + { // Entry 76 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.99999999999a8p-4 + }, + { // Entry 77 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.99999999999a8p-4 + }, + { // Entry 78 + 0.0, + 0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 79 + -0.0, + -0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 80 + 0x1.ffffffffffffe0000000000001ffffffp-1074, + 0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 81 + -0x1.ffffffffffffe0000000000001ffffffp-1074, + -0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 82 + 0.0, + 0x1.0p-1074, + 0x1.0222222222223p0 + }, + { // Entry 83 + -0.0, + -0x1.0p-1074, + 0x1.0222222222223p0 + }, + { // Entry 84 + 0.0, + 0x1.0p-1074, + 0x1.03126e978d4fep0 + }, + { // Entry 85 + -0.0, + -0x1.0p-1074, + 0x1.03126e978d4fep0 + }, + { // Entry 86 + 0.0, + 0x1.0p-1074, + 0x1.0a3d70a3d70a3p0 + }, + { // Entry 87 + -0.0, + -0x1.0p-1074, + 0x1.0a3d70a3d70a3p0 + }, + { // Entry 88 + 0x1.0b833be165ccd3f3660d385792d30b1fp1, + 0x1.0000000000001p-2, + -0x1.24924924924aap-3 + }, + { // Entry 89 + -0x1.0b833be165ccd3f3660d385792d30b1fp1, + -0x1.0000000000001p-2, + -0x1.24924924924aap-3 + }, + { // Entry 90 + 0x1.5522d16b2f5a7d52fbf6dd4ea12734c4p-5, + 0x1.0000000000001p-4, + 0x1.8000000000001p0 + }, + { // Entry 91 + -0x1.5522d16b2f5a7d52fbf6dd4ea12734c4p-5, + -0x1.0000000000001p-4, + 0x1.8000000000001p0 + }, + { // Entry 92 + 0x1.7ffffffedfffe80184cd02ca5ef0e59ap-16, + 0x1.0000000000001p-17, + 0x1.5555555555558p-2 + }, + { // Entry 93 + -0x1.7ffffffedfffe80184cd02ca5ef0e59ap-16, + -0x1.0000000000001p-17, + 0x1.5555555555558p-2 + }, + { // Entry 94 + 0x1.00000000000017ffaaaaaaaaab6a92aap-32, + 0x1.0000000000001p-31, + 0x1.fffffffffffffp0 + }, + { // Entry 95 + -0x1.00000000000017ffaaaaaaaaab6a92aap-32, + -0x1.0000000000001p-31, + 0x1.fffffffffffffp0 + }, + { // Entry 96 + 0x1.00000000000027ffffffaaaaae6aaaaap-40, + 0x1.0000000000001p-41, + 0x1.ffffffffffffdp-2 + }, + { // Entry 97 + -0x1.00000000000027ffffffaaaaae6aaaaap-40, + -0x1.0000000000001p-41, + 0x1.ffffffffffffdp-2 + }, + { // Entry 98 + 0x1.000000000000680000000000103faaaap-56, + 0x1.0000000000004p1, + 0x1.ffffffffffffbp56 + }, + { // Entry 99 + -0x1.000000000000680000000000103faaaap-56, + -0x1.0000000000004p1, + 0x1.ffffffffffffbp56 + }, + { // Entry 100 + 0x1.fd5ba9aac2f7c8b4561b80036f0e165cp-4, + 0x1.0000000000007p3, + 0x1.fffffffffffffp5 + }, + { // Entry 101 + -0x1.fd5ba9aac2f7c8b4561b80036f0e165cp-4, + -0x1.0000000000007p3, + 0x1.fffffffffffffp5 + }, + { // Entry 102 + 0x1.ff55bb72cfe2e821e203716e1d97a257p-5, + 0x1.000000000001cp-3, + 0x1.ffffffffffff3p0 + }, + { // Entry 103 + -0x1.ff55bb72cfe2e821e203716e1d97a257p-5, + -0x1.000000000001cp-3, + 0x1.ffffffffffff3p0 + }, + { // Entry 104 + 0x1.38e36745aef6d7ab02058b0c0c876fc8p-9, + 0x1.00000000004d6p-8, + 0x1.a2e8ba2e8ba30p0 + }, + { // Entry 105 + -0x1.38e36745aef6d7ab02058b0c0c876fc8p-9, + -0x1.00000000004d6p-8, + 0x1.a2e8ba2e8ba30p0 + }, + { // Entry 106 + 0x1.3ff4325a8437500000286dff86bc02adp-1, + 0x1.00000009f0205p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 107 + -0x1.3ff4325a8437500000286dff86bc02adp-1, + -0x1.00000009f0205p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 108 + 0x1.b4f5f236308b48037fe229608c1d81fbp-2, + 0x1.001p-1, + 0x1.199999999999ap0 + }, + { // Entry 109 + -0x1.b4f5f236308b48037fe229608c1d81fbp-2, + -0x1.001p-1, + 0x1.199999999999ap0 + }, + { // Entry 110 + 0x1.9242e6442d4317ff2531ceafca8af0f4p0, + 0x1.001p10, + -0x1.1999999999999p-1 + }, + { // Entry 111 + -0x1.9242e6442d4317ff2531ceafca8af0f4p0, + -0x1.001p10, + -0x1.1999999999999p-1 + }, + { // Entry 112 + 0x1.046862a40cbe6ab9070021df9e1e411bp1, + 0x1.0175fcd4ab261p1, + -0x1.01749ca942943p0 + }, + { // Entry 113 + -0x1.046862a40cbe6ab9070021df9e1e411bp1, + -0x1.0175fcd4ab261p1, + -0x1.01749ca942943p0 + }, + { // Entry 114 + 0x1.9b2bb7e10b2677febb378df81a94d587p-1, + 0x1.066b3f39ae7a1p0, + 0x1.fa9c4b9f46842p-1 + }, + { // Entry 115 + -0x1.9b2bb7e10b2677febb378df81a94d587p-1, + -0x1.066b3f39ae7a1p0, + 0x1.fa9c4b9f46842p-1 + }, + { // Entry 116 + 0x1.e897850a716e4889a143afe6cdae77d1p-2, + 0x1.08b1d3b97c955p-2, + 0x1.0p-1 + }, + { // Entry 117 + -0x1.e897850a716e4889a143afe6cdae77d1p-2, + -0x1.08b1d3b97c955p-2, + 0x1.0p-1 + }, + { // Entry 118 + 0x1.13e7bb06113d680135e98e8c2e9c9628p-92, + 0x1.09d89d89d89d8p9, + 0x1.ed55555555573p100 + }, + { // Entry 119 + -0x1.13e7bb06113d680135e98e8c2e9c9628p-92, + -0x1.09d89d89d89d8p9, + 0x1.ed55555555573p100 + }, + { // Entry 120 + 0x1.ff572aded0be7136f236315e3c9eccb7p0, + 0x1.199999999999cp-1, + -0x1.ffffffffffffep-3 + }, + { // Entry 121 + -0x1.ff572aded0be7136f236315e3c9eccb7p0, + -0x1.199999999999cp-1, + -0x1.ffffffffffffep-3 + }, + { // Entry 122 + 0x1.196ba6878b92680ebe4a5666ff18a384p-5, + 0x1.199999999999cp-2, + 0x1.001p3 + }, + { // Entry 123 + -0x1.196ba6878b92680ebe4a5666ff18a384p-5, + -0x1.199999999999cp-2, + 0x1.001p3 + }, + { // Entry 124 + 0x1.1b4a29a02a9c87fffdb48e539399967ap-3, + 0x1.1adec7d06a010p-2, + 0x1.fbfa204c8234cp0 + }, + { // Entry 125 + -0x1.1b4a29a02a9c87fffdb48e539399967ap-3, + -0x1.1adec7d06a010p-2, + 0x1.fbfa204c8234cp0 + }, + { // Entry 126 + 0x1.19dcd054169247fffd4cc05900e64848p-2, + 0x1.213422ec61f53p-3, + 0x1.0p-1 + }, + { // Entry 127 + -0x1.19dcd054169247fffd4cc05900e64848p-2, + -0x1.213422ec61f53p-3, + 0x1.0p-1 + }, + { // Entry 128 + 0x1.b3b95bdcb30277fec23bb4be90b63531p-1, + 0x1.2776fe2145bd5p0, + 0x1.0306216790738p0 + }, + { // Entry 129 + -0x1.b3b95bdcb30277fec23bb4be90b63531p-1, + -0x1.2776fe2145bd5p0, + 0x1.0306216790738p0 + }, + { // Entry 130 + 0x1.ee0c54984cb15edcdcb239dbfffd57dep-4, + 0x1.27fb7de0e57c8p12, + 0x1.313f9061390p15 + }, + { // Entry 131 + -0x1.ee0c54984cb15edcdcb239dbfffd57dep-4, + -0x1.27fb7de0e57c8p12, + 0x1.313f9061390p15 + }, + { // Entry 132 + 0x1.27ff4834766d779860765d14b68788cep-8, + 0x1.27fb7de0e57c8p12, + 0x1.fff88d6e2d934p19 + }, + { // Entry 133 + -0x1.27ff4834766d779860765d14b68788cep-8, + -0x1.27fb7de0e57c8p12, + 0x1.fff88d6e2d934p19 + }, + { // Entry 134 + 0x1.f9c6b238c6435777790ced0df81049e2p0, + 0x1.2aaaaaaaaaaabp0, + -0x1.0000000000003p-1 + }, + { // Entry 135 + -0x1.f9c6b238c6435777790ced0df81049e2p0, + -0x1.2aaaaaaaaaaabp0, + -0x1.0000000000003p-1 + }, + { // Entry 136 + 0x1.2aaaaaaaaaaa77ff787e6b74f9b2d658p-32, + 0x1.2aaaaaaaaaaabp0, + 0x1.0000000000003p32 + }, + { // Entry 137 + -0x1.2aaaaaaaaaaa77ff787e6b74f9b2d658p-32, + -0x1.2aaaaaaaaaaabp0, + 0x1.0000000000003p32 + }, + { // Entry 138 + 0x1.edae91ebbfb8780006f7e9144583c7b3p0, + 0x1.2d66ca857bf9ap0, + -0x1.c28f5c28f5c28p-2 + }, + { // Entry 139 + -0x1.edae91ebbfb8780006f7e9144583c7b3p0, + -0x1.2d66ca857bf9ap0, + -0x1.c28f5c28f5c28p-2 + }, + { // Entry 140 + 0x1.9d5a77d67cf1d7febab338e68f258f5ap-1, + 0x1.2e12530a85951p2, + 0x1.211a7b9611a7bp2 + }, + { // Entry 141 + -0x1.9d5a77d67cf1d7febab338e68f258f5ap-1, + -0x1.2e12530a85951p2, + 0x1.211a7b9611a7bp2 + }, + { // Entry 142 + 0x1.a244e21ebefa8fffffbfabeaba9e67acp-2, + 0x1.3333333d813abp-2, + 0x1.62e42fefa39efp-1 + }, + { // Entry 143 + -0x1.a244e21ebefa8fffffbfabeaba9e67acp-2, + -0x1.3333333d813abp-2, + 0x1.62e42fefa39efp-1 + }, + { // Entry 144 + 0x1.90a08b292067f00094284270c3b75547p-4, + 0x1.3deb308a9c960p-4, + 0x1.9500a27c6a82ep-1 + }, + { // Entry 145 + -0x1.90a08b292067f00094284270c3b75547p-4, + -0x1.3deb308a9c960p-4, + 0x1.9500a27c6a82ep-1 + }, + { // Entry 146 + 0x1.a896592d6fdb57b63fa6ed728b91fe47p-5, + 0x1.420bc59c42c7cp2, + 0x1.83fffffffffffp6 + }, + { // Entry 147 + -0x1.a896592d6fdb57b63fa6ed728b91fe47p-5, + -0x1.420bc59c42c7cp2, + 0x1.83fffffffffffp6 + }, + { // Entry 148 + 0x1.25e3010ff1ed37fe769fa76dea43608cp1, + 0x1.494b48acbe5b0p-9, + -0x1.23da61f087530p-9 + }, + { // Entry 149 + -0x1.25e3010ff1ed37fe769fa76dea43608cp1, + -0x1.494b48acbe5b0p-9, + -0x1.23da61f087530p-9 + }, + { // Entry 150 + 0x1.6d0d1984633eb80e098b6dc91f083a06p-3, + 0x1.51ff85f2ba468p0, + 0x1.d50692986b95dp2 + }, + { // Entry 151 + -0x1.6d0d1984633eb80e098b6dc91f083a06p-3, + -0x1.51ff85f2ba468p0, + 0x1.d50692986b95dp2 + }, + { // Entry 152 + 0x1.ccadda48d08027ff92d1bd814812ce8cp-1, + 0x1.5412e00233d75p-1, + 0x1.0dff2d1714940p-1 + }, + { // Entry 153 + -0x1.ccadda48d08027ff92d1bd814812ce8cp-1, + -0x1.5412e00233d75p-1, + 0x1.0dff2d1714940p-1 + }, + { // Entry 154 + 0x1.3f2496d84ac34801117f6f830c0fb201p-90, + 0x1.5555555554c2ep8, + 0x1.11ccccccccccdp98 + }, + { // Entry 155 + -0x1.3f2496d84ac34801117f6f830c0fb201p-90, + -0x1.5555555554c2ep8, + 0x1.11ccccccccccdp98 + }, + { // Entry 156 + 0x1.555555555555aaaaaaaaaaaab5555555p-1021, + 0x1.5555555555558p-2, + 0x1.ffffffffffffcp1018 + }, + { // Entry 157 + -0x1.555555555555aaaaaaaaaaaab5555555p-1021, + -0x1.5555555555558p-2, + 0x1.ffffffffffffcp1018 + }, + { // Entry 158 + 0x1.88134cb8d04e88985007b92a62b1fd1ap-8, + 0x1.5711ef5ee1eecp-5, + 0x1.c000000000302p2 + }, + { // Entry 159 + -0x1.88134cb8d04e88985007b92a62b1fd1ap-8, + -0x1.5711ef5ee1eecp-5, + 0x1.c000000000302p2 + }, + { // Entry 160 + 0x1.94a470782907f800006a4822bc94bc23p-1, + 0x1.666666688d411p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 161 + -0x1.94a470782907f800006a4822bc94bc23p-1, + -0x1.666666688d411p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 162 + 0x1.d7d7b672ee30c85d01819b25305f3230p-10, + 0x1.6c9b26c9b26cap0, + 0x1.8ba2e8ba2e8cap9 + }, + { // Entry 163 + -0x1.d7d7b672ee30c85d01819b25305f3230p-10, + -0x1.6c9b26c9b26cap0, + 0x1.8ba2e8ba2e8cap9 + }, + { // Entry 164 + 0x1.7fffffffee0030000184c60cd2a5c008p-18, + 0x1.8p-53, + 0x1.ffffffffffffcp-36 + }, + { // Entry 165 + -0x1.7fffffffee0030000184c60cd2a5c008p-18, + -0x1.8p-53, + 0x1.ffffffffffffcp-36 + }, + { // Entry 166 + 0x1.e7c8952cb26158012b54b9a61c08f431p-2, + 0x1.8c46231188cp0, + 0x1.8p1 + }, + { // Entry 167 + -0x1.e7c8952cb26158012b54b9a61c08f431p-2, + -0x1.8c46231188cp0, + 0x1.8p1 + }, + { // Entry 168 + 0x1.2b854f022de7a93cb621cb2462f86074p0, + 0x1.8d79435e50d71p2, + 0x1.50d79435e50d9p1 + }, + { // Entry 169 + -0x1.2b854f022de7a93cb621cb2462f86074p0, + -0x1.8d79435e50d71p2, + 0x1.50d79435e50d9p1 + }, + { // Entry 170 + 0x1.42a76a164c39c800e4405027c490bdfbp-1, + 0x1.8dd3d2235ad60p-1, + 0x1.10b5d1e78459cp0 + }, + { // Entry 171 + -0x1.42a76a164c39c800e4405027c490bdfbp-1, + -0x1.8dd3d2235ad60p-1, + 0x1.10b5d1e78459cp0 + }, + { // Entry 172 + 0x1.e3240e993ab957f9d76dde4a50896826p-3, + 0x1.9p0, + 0x1.9fffffffffffbp2 + }, + { // Entry 173 + -0x1.e3240e993ab957f9d76dde4a50896826p-3, + -0x1.9p0, + 0x1.9fffffffffffbp2 + }, + { // Entry 174 + 0x1.a335efd4da90a804f7a6dad4434f5ba0p-2, + 0x1.920d799fda713p-3, + 0x1.cf4cdc48f3536p-2 + }, + { // Entry 175 + -0x1.a335efd4da90a804f7a6dad4434f5ba0p-2, + -0x1.920d799fda713p-3, + 0x1.cf4cdc48f3536p-2 + }, + { // Entry 176 + 0x1.ed87f9c729d17ffe9d2f47e2fe9ecb40p-1, + 0x1.95fad40a57ec6p9, + 0x1.19dbcc48676f6p9 + }, + { // Entry 177 + -0x1.ed87f9c729d17ffe9d2f47e2fe9ecb40p-1, + -0x1.95fad40a57ec6p9, + 0x1.19dbcc48676f6p9 + }, + { // Entry 178 + 0x1.0bfa5f3f099e68000068d82232dc4cc7p-1, + 0x1.9999999e37c24p-2, + 0x1.62e42fefa39efp-1 + }, + { // Entry 179 + -0x1.0bfa5f3f099e68000068d82232dc4cc7p-1, + -0x1.9999999e37c24p-2, + 0x1.62e42fefa39efp-1 + }, + { // Entry 180 + 0x1.1fa6ac30d066d800006a5c239e5188f2p-2, + 0x1.999999bb09140p-3, + 0x1.62e42fefa39efp-1 + }, + { // Entry 181 + -0x1.1fa6ac30d066d800006a5c239e5188f2p-2, + -0x1.999999bb09140p-3, + 0x1.62e42fefa39efp-1 + }, + { // Entry 182 + 0x1.2570742fa4989fffff9e946c986117d9p-3, + 0x1.999999c2f3b55p-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 183 + -0x1.2570742fa4989fffff9e946c986117d9p-3, + -0x1.999999c2f3b55p-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 184 + 0x1.257074378653a7ffffffb78db995aafcp-3, + 0x1.999999ce1b18ap-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 185 + -0x1.257074378653a7ffffffb78db995aafcp-3, + -0x1.999999ce1b18ap-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 186 + 0x1.25707437a1476000006169ddb5dabdd7p-3, + 0x1.999999ce413ccp-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 187 + -0x1.25707437a1476000006169ddb5dabdd7p-3, + -0x1.999999ce413ccp-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 188 + 0x1.b6a03b0f1ff0d7fd08e9f5846ec5a75bp-1, + 0x1.9c5c97530cc21p0, + 0x1.6563fa1d6f518p0 + }, + { // Entry 189 + -0x1.b6a03b0f1ff0d7fd08e9f5846ec5a75bp-1, + -0x1.9c5c97530cc21p0, + 0x1.6563fa1d6f518p0 + }, + { // Entry 190 + 0x1.b80aa068167f97558972ecfed6777774p-19, + 0x1.9f5aeae03799dp-18, + 0x1.e346d9b2ad73ep0 + }, + { // Entry 191 + -0x1.b80aa068167f97558972ecfed6777774p-19, + -0x1.9f5aeae03799dp-18, + 0x1.e346d9b2ad73ep0 + }, + { // Entry 192 + 0x1.e5ef7b22c83b27ad34bbfda6c2383d23p-2, + 0x1.a4d269349b66cp-3, + 0x1.999999999999ap-2 + }, + { // Entry 193 + -0x1.e5ef7b22c83b27ad34bbfda6c2383d23p-2, + -0x1.a4d269349b66cp-3, + 0x1.999999999999ap-2 + }, + { // Entry 194 + 0x1.5e82cb51676728011e1c6ba75f3339a7p-91, + 0x1.ad5aa6ff6335ep9, + 0x1.3995880de757ap100 + }, + { // Entry 195 + -0x1.5e82cb51676728011e1c6ba75f3339a7p-91, + -0x1.ad5aa6ff6335ep9, + 0x1.3995880de757ap100 + }, + { // Entry 196 + 0x1.95ac93504f319fefb1b5148792dab412p-1, + 0x1.b1427cd988b8cp-2, + 0x1.ab4adeaf1a3eap-2 + }, + { // Entry 197 + -0x1.95ac93504f319fefb1b5148792dab412p-1, + -0x1.b1427cd988b8cp-2, + 0x1.ab4adeaf1a3eap-2 + }, + { // Entry 198 + 0x1.921fd1f09f928801088a93fc7dbba1cap0, + 0x1.bbd49acc58d98p10, + -0x1.8db0a4ab22e7ep-9 + }, + { // Entry 199 + -0x1.921fd1f09f928801088a93fc7dbba1cap0, + -0x1.bbd49acc58d98p10, + -0x1.8db0a4ab22e7ep-9 + }, + { // Entry 200 + 0x1.43e54975fb8bc8012953e9ef023f67b3p-100, + 0x1.c37dac37dac3cp0, + 0x1.64d9364d93659p100 + }, + { // Entry 201 + -0x1.43e54975fb8bc8012953e9ef023f67b3p-100, + -0x1.c37dac37dac3cp0, + 0x1.64d9364d93659p100 + }, + { // Entry 202 + 0x1.ab78c13521cfc80117f7fae57836356ep-98, + 0x1.c9b26c9b26ca0p2, + 0x1.1219dbcc48679p100 + }, + { // Entry 203 + -0x1.ab78c13521cfc80117f7fae57836356ep-98, + -0x1.c9b26c9b26ca0p2, + 0x1.1219dbcc48679p100 + }, + { // Entry 204 + 0x1.77e467d5ff6337f84f880eb86f426f87p-1, + 0x1.ce0d5078ae3d0p0, + 0x1.0p1 + }, + { // Entry 205 + -0x1.77e467d5ff6337f84f880eb86f426f87p-1, + -0x1.ce0d5078ae3d0p0, + 0x1.0p1 + }, + { // Entry 206 + 0x1.7ccd882d8fdbe8010d0be61f023186a5p-1, + 0x1.dbcc48676f32ap7, + 0x1.0295fad40a58bp8 + }, + { // Entry 207 + -0x1.7ccd882d8fdbe8010d0be61f023186a5p-1, + -0x1.dbcc48676f32ap7, + 0x1.0295fad40a58bp8 + }, + { // Entry 208 + 0x1.2d3a87e24eb319156ef615caa7abe128p0, + 0x1.e052bf5a814b6p2, + 0x1.8f83e0f83e0f1p1 + }, + { // Entry 209 + -0x1.2d3a87e24eb319156ef615caa7abe128p0, + -0x1.e052bf5a814b6p2, + 0x1.8f83e0f83e0f1p1 + }, + { // Entry 210 + 0x1.eb0df42c36a5f7fe1df8c86bed0a28a0p-1, + 0x1.e0547e40e4cc8p-2, + 0x1.50eebc195bb24p-2 + }, + { // Entry 211 + -0x1.eb0df42c36a5f7fe1df8c86bed0a28a0p-1, + -0x1.e0547e40e4cc8p-2, + 0x1.50eebc195bb24p-2 + }, + { // Entry 212 + 0x1.c7fe1dbd95349778458697fe195e4a58p-8, + 0x1.e666666666668p1, + 0x1.111111111196dp9 + }, + { // Entry 213 + -0x1.c7fe1dbd95349778458697fe195e4a58p-8, + -0x1.e666666666668p1, + 0x1.111111111196dp9 + }, + { // Entry 214 + 0x1.38927ede67216800006a39bb49e9c0f4p0, + 0x1.e666666b987f5p0, + 0x1.62e42fefa39efp-1 + }, + { // Entry 215 + -0x1.38927ede67216800006a39bb49e9c0f4p0, + -0x1.e666666b987f5p0, + 0x1.62e42fefa39efp-1 + }, + { // Entry 216 + 0x1.39fed5699428b3b69a7339d36bb044abp-1, + 0x1.e91ee78afd1e6p-3, + 0x1.5b7c32b32bde0p-2 + }, + { // Entry 217 + -0x1.39fed5699428b3b69a7339d36bb044abp-1, + -0x1.e91ee78afd1e6p-3, + 0x1.5b7c32b32bde0p-2 + }, + { // Entry 218 + 0x1.a127224010cba803945f315e1d0ee4b5p-1, + 0x1.f166e1dc4499bp2, + 0x1.d50692986b98fp2 + }, + { // Entry 219 + -0x1.a127224010cba803945f315e1d0ee4b5p-1, + -0x1.f166e1dc4499bp2, + 0x1.d50692986b98fp2 + }, + { // Entry 220 + 0x1.f1f32aa6acb70801dd4349d43d3d4c25p-3, + 0x1.fbfffffffffffp-2, + 0x1.ffffffffe7fffp0 + }, + { // Entry 221 + -0x1.f1f32aa6acb70801dd4349d43d3d4c25p-3, + -0x1.fbfffffffffffp-2, + 0x1.ffffffffe7fffp0 + }, + { // Entry 222 + 0x1.079c41361b6ab8115015e4f32dcfe4b3p1, + 0x1.ff4b7c848cde6p-1, + -0x1.0fd6c7f44f588p-1 + }, + { // Entry 223 + -0x1.079c41361b6ab8115015e4f32dcfe4b3p1, + -0x1.ff4b7c848cde6p-1, + -0x1.0fd6c7f44f588p-1 + }, + { // Entry 224 + 0x1.da4c6912789968011f1b516f595d868ep-2, + 0x1.ff677ffffffffp-6, + 0x1.ffffffff19fffp-5 + }, + { // Entry 225 + -0x1.da4c6912789968011f1b516f595d868ep-2, + -0x1.ff677ffffffffp-6, + 0x1.ffffffff19fffp-5 + }, + { // Entry 226 + 0x1.fffc80021ffc480225fc1d822a9bc5e0p-58, + 0x1.fffc7ffffffffp-50, + 0x1.fffffffddffffp7 + }, + { // Entry 227 + -0x1.fffc80021ffc480225fc1d822a9bc5e0p-58, + -0x1.fffc7ffffffffp-50, + 0x1.fffffffddffffp7 + }, + { // Entry 228 + 0x1.66666666666617fffffffffff8b72015p-50, + 0x1.ffffffffffffcp50, + 0x1.6db6db6db6db9p100 + }, + { // Entry 229 + -0x1.66666666666617fffffffffff8b72015p-50, + -0x1.ffffffffffffcp50, + 0x1.6db6db6db6db9p100 + }, + { // Entry 230 + 0x1.ff55d35ae8e467ce77407069ad013ab5p-5, + 0x1.ffffffffffffep-3, + 0x1.ffffe7fffffffp1 + }, + { // Entry 231 + -0x1.ff55d35ae8e467ce77407069ad013ab5p-5, + -0x1.ffffffffffffep-3, + 0x1.ffffe7fffffffp1 + }, + { // Entry 232 + 0x1.b4ddd66a37b3b335a2a5b11ceb9a4c56p-2, + 0x1.ffffffffffffep-4, + 0x1.199999999999cp-2 + }, + { // Entry 233 + -0x1.b4ddd66a37b3b335a2a5b11ceb9a4c56p-2, + -0x1.ffffffffffffep-4, + 0x1.199999999999cp-2 + }, + { // Entry 234 + 0x1.90e6d4253517c8010321aeae887990a9p1, + 0x1.ffffffffffffep-7, + -0x1.a2e8ba2e97a22p0 + }, + { // Entry 235 + -0x1.90e6d4253517c8010321aeae887990a9p1, + -0x1.ffffffffffffep-7, + -0x1.a2e8ba2e97a22p0 + }, + { // Entry 236 + 0x1.b6db6db6db6d281ddaaea5b12cced2a1p-25, + 0x1.ffffffffffffep-25, + 0x1.2aaaaaaaaaaabp0 + }, + { // Entry 237 + -0x1.b6db6db6db6d281ddaaea5b12cced2a1p-25, + -0x1.ffffffffffffep-25, + 0x1.2aaaaaaaaaaabp0 + }, + { // Entry 238 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.ffffffffffffep-807, + -0x1.745d1745d173cp-3 + }, + { // Entry 239 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.ffffffffffffep-807, + -0x1.745d1745d173cp-3 + }, + { // Entry 240 + 0x1.096d05371b1c54c40f9a06c6cf2db981p1, + 0x1.ffffffffffffep0, + -0x1.199999999999ap0 + }, + { // Entry 241 + -0x1.096d05371b1c54c40f9a06c6cf2db981p1, + -0x1.ffffffffffffep0, + -0x1.199999999999ap0 + }, + { // Entry 242 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0x1.4p-1072 + }, + { // Entry 243 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0x1.4p-1072 + }, + { // Entry 244 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 245 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 246 + -0x1.f4f3b198c0f168030e9490be1ea559e8p-4, + -0x1.08de20fafe4a2p0, + 0x1.0d5ba77adf969p3 + }, + { // Entry 247 + 0x1.f4f3b198c0f168030e9490be1ea559e8p-4, + 0x1.08de20fafe4a2p0, + 0x1.0d5ba77adf969p3 + }, + { // Entry 248 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 249 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 250 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 251 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 252 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 253 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 254 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 255 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 256 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 257 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 258 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.0p0, + 0x1.0p3 + }, + { // Entry 259 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.0p0, + 0x1.0p3 + }, + { // Entry 260 + 0x1.7249faa996a216a33079d20319e727c3p0, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 261 + -0x1.7249faa996a216a33079d20319e727c3p0, + -0x1.0p3, + 0x1.0p0 + }, + { // Entry 262 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 263 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p3, + 0x1.0p3 + }, + { // Entry 264 + 0x1.ffffd5555bbbba9729ab7aac089473a3p-10, + 0x1.0p0, + 0x1.0p9 + }, + { // Entry 265 + -0x1.ffffd5555bbbba9729ab7aac089473a3p-10, + -0x1.0p0, + 0x1.0p9 + }, + { // Entry 266 + 0x1.fffff55555bbbbb72972d00cfde752f9p-11, + 0x1.0p0, + 0x1.0p10 + }, + { // Entry 267 + -0x1.fffff55555bbbbb72972d00cfde752f9p-11, + -0x1.0p0, + 0x1.0p10 + }, + { // Entry 268 + 0x1.fff555bbb729ab77cf18ac802beec090p-7, + 0x1.0p3, + 0x1.0p9 + }, + { // Entry 269 + -0x1.fff555bbb729ab77cf18ac802beec090p-7, + -0x1.0p3, + 0x1.0p9 + }, + { // Entry 270 + 0x1.fffd555bbba972d00c46a3f77cc15e8ep-8, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 271 + -0x1.fffd555bbba972d00c46a3f77cc15e8ep-8, + -0x1.0p3, + 0x1.0p10 + }, + { // Entry 272 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0p0, + 0x1.0p100 + }, + { // Entry 273 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0p0, + 0x1.0p100 + }, + { // Entry 274 + 0x1.ffffffffffffffffffffffffffffffffp-102, + 0x1.0p0, + 0x1.0p101 + }, + { // Entry 275 + -0x1.ffffffffffffffffffffffffffffffffp-102, + -0x1.0p0, + 0x1.0p101 + }, + { // Entry 276 + 0x1.ffffffffffffffffffffffffffffffffp-98, + 0x1.0p3, + 0x1.0p100 + }, + { // Entry 277 + -0x1.ffffffffffffffffffffffffffffffffp-98, + -0x1.0p3, + 0x1.0p100 + }, + { // Entry 278 + 0x1.ffffffffffffffffffffffffffffffffp-99, + 0x1.0p3, + 0x1.0p101 + }, + { // Entry 279 + -0x1.ffffffffffffffffffffffffffffffffp-99, + -0x1.0p3, + 0x1.0p101 + }, + { // Entry 280 + 0x1.919fb54eed7a957ae3c25a3856b61485p0, + 0x1.0p9, + 0x1.0p0 + }, + { // Entry 281 + -0x1.919fb54eed7a957ae3c25a3856b61485p0, + -0x1.0p9, + 0x1.0p0 + }, + { // Entry 282 + 0x1.8e1fca98cb63311299ee93be01605c21p0, + 0x1.0p9, + 0x1.0p3 + }, + { // Entry 283 + -0x1.8e1fca98cb63311299ee93be01605c21p0, + -0x1.0p9, + 0x1.0p3 + }, + { // Entry 284 + 0x1.91dfb5459826ccf212a796bd00187cb7p0, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 285 + -0x1.91dfb5459826ccf212a796bd00187cb7p0, + -0x1.0p10, + 0x1.0p0 + }, + { // Entry 286 + 0x1.901fb7eee715daf6b9807e730a3b7843p0, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 287 + -0x1.901fb7eee715daf6b9807e730a3b7843p0, + -0x1.0p10, + 0x1.0p3 + }, + { // Entry 288 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p9, + 0x1.0p9 + }, + { // Entry 289 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p9, + 0x1.0p9 + }, + { // Entry 290 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.0p9, + 0x1.0p10 + }, + { // Entry 291 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.0p9, + 0x1.0p10 + }, + { // Entry 292 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.0p10, + 0x1.0p9 + }, + { // Entry 293 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.0p10, + 0x1.0p9 + }, + { // Entry 294 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 295 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p10, + 0x1.0p10 + }, + { // Entry 296 + 0x1.ffffffffffffffffffffffffffffffffp-92, + 0x1.0p9, + 0x1.0p100 + }, + { // Entry 297 + -0x1.ffffffffffffffffffffffffffffffffp-92, + -0x1.0p9, + 0x1.0p100 + }, + { // Entry 298 + 0x1.ffffffffffffffffffffffffffffffffp-93, + 0x1.0p9, + 0x1.0p101 + }, + { // Entry 299 + -0x1.ffffffffffffffffffffffffffffffffp-93, + -0x1.0p9, + 0x1.0p101 + }, + { // Entry 300 + 0x1.ffffffffffffffffffffffffffffffffp-91, + 0x1.0p10, + 0x1.0p100 + }, + { // Entry 301 + -0x1.ffffffffffffffffffffffffffffffffp-91, + -0x1.0p10, + 0x1.0p100 + }, + { // Entry 302 + 0x1.ffffffffffffffffffffffffffffffffp-92, + 0x1.0p10, + 0x1.0p101 + }, + { // Entry 303 + -0x1.ffffffffffffffffffffffffffffffffp-92, + -0x1.0p10, + 0x1.0p101 + }, + { // Entry 304 + 0x1.921fb54442d18469898cc516f1b839a2p0, + 0x1.0p100, + 0x1.0p0 + }, + { // Entry 305 + -0x1.921fb54442d18469898cc516f1b839a2p0, + -0x1.0p100, + 0x1.0p0 + }, + { // Entry 306 + 0x1.921fb54442d18469898cc51681b839a2p0, + 0x1.0p100, + 0x1.0p3 + }, + { // Entry 307 + -0x1.921fb54442d18469898cc51681b839a2p0, + -0x1.0p100, + 0x1.0p3 + }, + { // Entry 308 + 0x1.921fb54442d18469898cc516f9b839a2p0, + 0x1.0p101, + 0x1.0p0 + }, + { // Entry 309 + -0x1.921fb54442d18469898cc516f9b839a2p0, + -0x1.0p101, + 0x1.0p0 + }, + { // Entry 310 + 0x1.921fb54442d18469898cc516c1b839a2p0, + 0x1.0p101, + 0x1.0p3 + }, + { // Entry 311 + -0x1.921fb54442d18469898cc516c1b839a2p0, + -0x1.0p101, + 0x1.0p3 + }, + { // Entry 312 + 0x1.921fb54442d18469898cc4f701b839a2p0, + 0x1.0p100, + 0x1.0p9 + }, + { // Entry 313 + -0x1.921fb54442d18469898cc4f701b839a2p0, + -0x1.0p100, + 0x1.0p9 + }, + { // Entry 314 + 0x1.921fb54442d18469898cc4d701b839a2p0, + 0x1.0p100, + 0x1.0p10 + }, + { // Entry 315 + -0x1.921fb54442d18469898cc4d701b839a2p0, + -0x1.0p100, + 0x1.0p10 + }, + { // Entry 316 + 0x1.921fb54442d18469898cc50701b839a2p0, + 0x1.0p101, + 0x1.0p9 + }, + { // Entry 317 + -0x1.921fb54442d18469898cc50701b839a2p0, + -0x1.0p101, + 0x1.0p9 + }, + { // Entry 318 + 0x1.921fb54442d18469898cc4f701b839a2p0, + 0x1.0p101, + 0x1.0p10 + }, + { // Entry 319 + -0x1.921fb54442d18469898cc4f701b839a2p0, + -0x1.0p101, + 0x1.0p10 + }, + { // Entry 320 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p100, + 0x1.0p100 + }, + { // Entry 321 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p100, + 0x1.0p100 + }, + { // Entry 322 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.0p100, + 0x1.0p101 + }, + { // Entry 323 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.0p100, + 0x1.0p101 + }, + { // Entry 324 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.0p101, + 0x1.0p100 + }, + { // Entry 325 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.0p101, + 0x1.0p100 + }, + { // Entry 326 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p101, + 0x1.0p101 + }, + { // Entry 327 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p101, + 0x1.0p101 + }, + { // Entry 328 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp0 + }, + { // Entry 329 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp0 + }, + { // Entry 330 + -0.0, + -0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 331 + 0.0, + 0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 332 + -0.0, + -0x1.0p-1074, + 0x1.0000000000001p1 + }, + { // Entry 333 + 0.0, + 0x1.0p-1074, + 0x1.0000000000001p1 + }, + { // Entry 334 + -0.0, + -0.0, + 0x1.fffffffffffffp0 + }, + { // Entry 335 + -0.0, + -0.0, + 0x1.0p1 + }, + { // Entry 336 + -0.0, + -0.0, + 0x1.0000000000001p1 + }, + { // Entry 337 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp0 + }, + { // Entry 338 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp0 + }, + { // Entry 339 + 0.0, + 0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 340 + -0.0, + -0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 341 + 0.0, + 0x1.0p-1074, + 0x1.0000000000001p1 + }, + { // Entry 342 + -0.0, + -0x1.0p-1074, + 0x1.0000000000001p1 + }, + { // Entry 343 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffffffffffp-4, + 0x1.fffffffffffffp0 + }, + { // Entry 344 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffffffffffp-4, + 0x1.fffffffffffffp0 + }, + { // Entry 345 + 0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + 0x1.fffffffffffffp-4, + 0x1.0p1 + }, + { // Entry 346 + -0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + -0x1.fffffffffffffp-4, + 0x1.0p1 + }, + { // Entry 347 + 0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + 0x1.fffffffffffffp-4, + 0x1.0000000000001p1 + }, + { // Entry 348 + -0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + -0x1.fffffffffffffp-4, + 0x1.0000000000001p1 + }, + { // Entry 349 + 0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + 0x1.0p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 350 + -0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + -0x1.0p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 351 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0p-3, + 0x1.0p1 + }, + { // Entry 352 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0p-3, + 0x1.0p1 + }, + { // Entry 353 + 0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + 0x1.0p-3, + 0x1.0000000000001p1 + }, + { // Entry 354 + -0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + -0x1.0p-3, + 0x1.0000000000001p1 + }, + { // Entry 355 + 0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + 0x1.0000000000001p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 356 + -0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + -0x1.0000000000001p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 357 + 0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + 0x1.0000000000001p-3, + 0x1.0p1 + }, + { // Entry 358 + -0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + -0x1.0000000000001p-3, + 0x1.0p1 + }, + { // Entry 359 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0000000000001p-3, + 0x1.0000000000001p1 + }, + { // Entry 360 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0000000000001p-3, + 0x1.0000000000001p1 + }, + { // Entry 361 + -0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + -0x1.0000000000001p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 362 + 0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + 0x1.0000000000001p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 363 + -0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + -0x1.0000000000001p-3, + 0x1.0p1 + }, + { // Entry 364 + 0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + 0x1.0000000000001p-3, + 0x1.0p1 + }, + { // Entry 365 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0000000000001p-3, + 0x1.0000000000001p1 + }, + { // Entry 366 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0000000000001p-3, + 0x1.0000000000001p1 + }, + { // Entry 367 + -0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + -0x1.0p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 368 + 0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + 0x1.0p-3, + 0x1.fffffffffffffp0 + }, + { // Entry 369 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0p-3, + 0x1.0p1 + }, + { // Entry 370 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0p-3, + 0x1.0p1 + }, + { // Entry 371 + -0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + -0x1.0p-3, + 0x1.0000000000001p1 + }, + { // Entry 372 + 0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + 0x1.0p-3, + 0x1.0000000000001p1 + }, + { // Entry 373 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffffffffffp-4, + 0x1.fffffffffffffp0 + }, + { // Entry 374 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffffffffffp-4, + 0x1.fffffffffffffp0 + }, + { // Entry 375 + -0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + -0x1.fffffffffffffp-4, + 0x1.0p1 + }, + { // Entry 376 + 0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + 0x1.fffffffffffffp-4, + 0x1.0p1 + }, + { // Entry 377 + -0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + -0x1.fffffffffffffp-4, + 0x1.0000000000001p1 + }, + { // Entry 378 + 0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + 0x1.fffffffffffffp-4, + 0x1.0000000000001p1 + }, + { // Entry 379 + 0x1.a271f63e34fcf65ccd6e8d4040e2778cp-2, + 0x1.bb67ae8584ca9p-1, + 0x1.fffffffffffffp0 + }, + { // Entry 380 + -0x1.a271f63e34fcf65ccd6e8d4040e2778cp-2, + -0x1.bb67ae8584ca9p-1, + 0x1.fffffffffffffp0 + }, + { // Entry 381 + 0x1.a271f63e34fceab1a727ab70d0ce3998p-2, + 0x1.bb67ae8584ca9p-1, + 0x1.0p1 + }, + { // Entry 382 + -0x1.a271f63e34fceab1a727ab70d0ce3998p-2, + -0x1.bb67ae8584ca9p-1, + 0x1.0p1 + }, + { // Entry 383 + 0x1.a271f63e34fcd35b5a99e7d1f27d656cp-2, + 0x1.bb67ae8584ca9p-1, + 0x1.0000000000001p1 + }, + { // Entry 384 + -0x1.a271f63e34fcd35b5a99e7d1f27d656cp-2, + -0x1.bb67ae8584ca9p-1, + 0x1.0000000000001p1 + }, + { // Entry 385 + 0x1.a271f63e34fd03d610ccde17d587872dp-2, + 0x1.bb67ae8584caap-1, + 0x1.fffffffffffffp0 + }, + { // Entry 386 + -0x1.a271f63e34fd03d610ccde17d587872dp-2, + -0x1.bb67ae8584caap-1, + 0x1.fffffffffffffp0 + }, + { // Entry 387 + 0x1.a271f63e34fcf82aea85fc486529890cp-2, + 0x1.bb67ae8584caap-1, + 0x1.0p1 + }, + { // Entry 388 + -0x1.a271f63e34fcf82aea85fc486529890cp-2, + -0x1.bb67ae8584caap-1, + 0x1.0p1 + }, + { // Entry 389 + 0x1.a271f63e34fce0d49df838a986453485p-2, + 0x1.bb67ae8584caap-1, + 0x1.0000000000001p1 + }, + { // Entry 390 + -0x1.a271f63e34fce0d49df838a986453485p-2, + -0x1.bb67ae8584caap-1, + 0x1.0000000000001p1 + }, + { // Entry 391 + 0x1.a271f63e34fd114f542b2eef6a0548d3p-2, + 0x1.bb67ae8584cabp-1, + 0x1.fffffffffffffp0 + }, + { // Entry 392 + -0x1.a271f63e34fd114f542b2eef6a0548d3p-2, + -0x1.bb67ae8584cabp-1, + 0x1.fffffffffffffp0 + }, + { // Entry 393 + 0x1.a271f63e34fd05a42de44d1ff95d8a85p-2, + 0x1.bb67ae8584cabp-1, + 0x1.0p1 + }, + { // Entry 394 + -0x1.a271f63e34fd05a42de44d1ff95d8a85p-2, + -0x1.bb67ae8584cabp-1, + 0x1.0p1 + }, + { // Entry 395 + 0x1.a271f63e34fcee4de156898119e5b5a4p-2, + 0x1.bb67ae8584cabp-1, + 0x1.0000000000001p1 + }, + { // Entry 396 + -0x1.a271f63e34fcee4de156898119e5b5a4p-2, + -0x1.bb67ae8584cabp-1, + 0x1.0000000000001p1 + }, + { // Entry 397 + -0x1.a271f63e34fd114f542b2eef6a0548d3p-2, + -0x1.bb67ae8584cabp-1, + 0x1.fffffffffffffp0 + }, + { // Entry 398 + 0x1.a271f63e34fd114f542b2eef6a0548d3p-2, + 0x1.bb67ae8584cabp-1, + 0x1.fffffffffffffp0 + }, + { // Entry 399 + -0x1.a271f63e34fd05a42de44d1ff95d8a85p-2, + -0x1.bb67ae8584cabp-1, + 0x1.0p1 + }, + { // Entry 400 + 0x1.a271f63e34fd05a42de44d1ff95d8a85p-2, + 0x1.bb67ae8584cabp-1, + 0x1.0p1 + }, + { // Entry 401 + -0x1.a271f63e34fcee4de156898119e5b5a4p-2, + -0x1.bb67ae8584cabp-1, + 0x1.0000000000001p1 + }, + { // Entry 402 + 0x1.a271f63e34fcee4de156898119e5b5a4p-2, + 0x1.bb67ae8584cabp-1, + 0x1.0000000000001p1 + }, + { // Entry 403 + -0x1.a271f63e34fd03d610ccde17d587872dp-2, + -0x1.bb67ae8584caap-1, + 0x1.fffffffffffffp0 + }, + { // Entry 404 + 0x1.a271f63e34fd03d610ccde17d587872dp-2, + 0x1.bb67ae8584caap-1, + 0x1.fffffffffffffp0 + }, + { // Entry 405 + -0x1.a271f63e34fcf82aea85fc486529890cp-2, + -0x1.bb67ae8584caap-1, + 0x1.0p1 + }, + { // Entry 406 + 0x1.a271f63e34fcf82aea85fc486529890cp-2, + 0x1.bb67ae8584caap-1, + 0x1.0p1 + }, + { // Entry 407 + -0x1.a271f63e34fce0d49df838a986453485p-2, + -0x1.bb67ae8584caap-1, + 0x1.0000000000001p1 + }, + { // Entry 408 + 0x1.a271f63e34fce0d49df838a986453485p-2, + 0x1.bb67ae8584caap-1, + 0x1.0000000000001p1 + }, + { // Entry 409 + -0x1.a271f63e34fcf65ccd6e8d4040e2778cp-2, + -0x1.bb67ae8584ca9p-1, + 0x1.fffffffffffffp0 + }, + { // Entry 410 + 0x1.a271f63e34fcf65ccd6e8d4040e2778cp-2, + 0x1.bb67ae8584ca9p-1, + 0x1.fffffffffffffp0 + }, + { // Entry 411 + -0x1.a271f63e34fceab1a727ab70d0ce3998p-2, + -0x1.bb67ae8584ca9p-1, + 0x1.0p1 + }, + { // Entry 412 + 0x1.a271f63e34fceab1a727ab70d0ce3998p-2, + 0x1.bb67ae8584ca9p-1, + 0x1.0p1 + }, + { // Entry 413 + -0x1.a271f63e34fcd35b5a99e7d1f27d656cp-2, + -0x1.bb67ae8584ca9p-1, + 0x1.0000000000001p1 + }, + { // Entry 414 + 0x1.a271f63e34fcd35b5a99e7d1f27d656cp-2, + 0x1.bb67ae8584ca9p-1, + 0x1.0000000000001p1 + }, + { // Entry 415 + 0x1.e1fc084cd761a3aa77e521b9a803b2f2p-1, + 0x1.5f89e11a0441cp1, + 0x1.fffffffffffffp0 + }, + { // Entry 416 + -0x1.e1fc084cd761a3aa77e521b9a803b2f2p-1, + -0x1.5f89e11a0441cp1, + 0x1.fffffffffffffp0 + }, + { // Entry 417 + 0x1.e1fc084cd7619c0d50916d35af40b669p-1, + 0x1.5f89e11a0441cp1, + 0x1.0p1 + }, + { // Entry 418 + -0x1.e1fc084cd7619c0d50916d35af40b669p-1, + -0x1.5f89e11a0441cp1, + 0x1.0p1 + }, + { // Entry 419 + 0x1.e1fc084cd7618cd301ea042dbe396361p-1, + 0x1.5f89e11a0441cp1, + 0x1.0000000000001p1 + }, + { // Entry 420 + -0x1.e1fc084cd7618cd301ea042dbe396361p-1, + -0x1.5f89e11a0441cp1, + 0x1.0000000000001p1 + }, + { // Entry 421 + 0x1.e1fc084cd761aec15275b5d29ba21a09p-1, + 0x1.5f89e11a0441dp1, + 0x1.fffffffffffffp0 + }, + { // Entry 422 + -0x1.e1fc084cd761aec15275b5d29ba21a09p-1, + -0x1.5f89e11a0441dp1, + 0x1.fffffffffffffp0 + }, + { // Entry 423 + 0x1.e1fc084cd761a7242b22014ea2fa57ebp-1, + 0x1.5f89e11a0441dp1, + 0x1.0p1 + }, + { // Entry 424 + -0x1.e1fc084cd761a7242b22014ea2fa57ebp-1, + -0x1.5f89e11a0441dp1, + 0x1.0p1 + }, + { // Entry 425 + 0x1.e1fc084cd76197e9dc7a9846b22979b9p-1, + 0x1.5f89e11a0441dp1, + 0x1.0000000000001p1 + }, + { // Entry 426 + -0x1.e1fc084cd76197e9dc7a9846b22979b9p-1, + -0x1.5f89e11a0441dp1, + 0x1.0000000000001p1 + }, + { // Entry 427 + 0x1.e1fc084cd761b9d82d0649eb8e97a3bcp-1, + 0x1.5f89e11a0441ep1, + 0x1.fffffffffffffp0 + }, + { // Entry 428 + -0x1.e1fc084cd761b9d82d0649eb8e97a3bcp-1, + -0x1.5f89e11a0441ep1, + 0x1.fffffffffffffp0 + }, + { // Entry 429 + 0x1.e1fc084cd761b23b05b29567960b1c09p-1, + 0x1.5f89e11a0441ep1, + 0x1.0p1 + }, + { // Entry 430 + -0x1.e1fc084cd761b23b05b29567960b1c09p-1, + -0x1.5f89e11a0441ep1, + 0x1.0p1 + }, + { // Entry 431 + 0x1.e1fc084cd761a300b70b2c5fa570b2aep-1, + 0x1.5f89e11a0441ep1, + 0x1.0000000000001p1 + }, + { // Entry 432 + -0x1.e1fc084cd761a300b70b2c5fa570b2aep-1, + -0x1.5f89e11a0441ep1, + 0x1.0000000000001p1 + }, + { // Entry 433 + -0x1.e1fc084cd761b9d82d0649eb8e97a3bcp-1, + -0x1.5f89e11a0441ep1, + 0x1.fffffffffffffp0 + }, + { // Entry 434 + 0x1.e1fc084cd761b9d82d0649eb8e97a3bcp-1, + 0x1.5f89e11a0441ep1, + 0x1.fffffffffffffp0 + }, + { // Entry 435 + -0x1.e1fc084cd761b23b05b29567960b1c09p-1, + -0x1.5f89e11a0441ep1, + 0x1.0p1 + }, + { // Entry 436 + 0x1.e1fc084cd761b23b05b29567960b1c09p-1, + 0x1.5f89e11a0441ep1, + 0x1.0p1 + }, + { // Entry 437 + -0x1.e1fc084cd761a300b70b2c5fa570b2aep-1, + -0x1.5f89e11a0441ep1, + 0x1.0000000000001p1 + }, + { // Entry 438 + 0x1.e1fc084cd761a300b70b2c5fa570b2aep-1, + 0x1.5f89e11a0441ep1, + 0x1.0000000000001p1 + }, + { // Entry 439 + -0x1.e1fc084cd761aec15275b5d29ba21a09p-1, + -0x1.5f89e11a0441dp1, + 0x1.fffffffffffffp0 + }, + { // Entry 440 + 0x1.e1fc084cd761aec15275b5d29ba21a09p-1, + 0x1.5f89e11a0441dp1, + 0x1.fffffffffffffp0 + }, + { // Entry 441 + -0x1.e1fc084cd761a7242b22014ea2fa57ebp-1, + -0x1.5f89e11a0441dp1, + 0x1.0p1 + }, + { // Entry 442 + 0x1.e1fc084cd761a7242b22014ea2fa57ebp-1, + 0x1.5f89e11a0441dp1, + 0x1.0p1 + }, + { // Entry 443 + -0x1.e1fc084cd76197e9dc7a9846b22979b9p-1, + -0x1.5f89e11a0441dp1, + 0x1.0000000000001p1 + }, + { // Entry 444 + 0x1.e1fc084cd76197e9dc7a9846b22979b9p-1, + 0x1.5f89e11a0441dp1, + 0x1.0000000000001p1 + }, + { // Entry 445 + -0x1.e1fc084cd761a3aa77e521b9a803b2f2p-1, + -0x1.5f89e11a0441cp1, + 0x1.fffffffffffffp0 + }, + { // Entry 446 + 0x1.e1fc084cd761a3aa77e521b9a803b2f2p-1, + 0x1.5f89e11a0441cp1, + 0x1.fffffffffffffp0 + }, + { // Entry 447 + -0x1.e1fc084cd7619c0d50916d35af40b669p-1, + -0x1.5f89e11a0441cp1, + 0x1.0p1 + }, + { // Entry 448 + 0x1.e1fc084cd7619c0d50916d35af40b669p-1, + 0x1.5f89e11a0441cp1, + 0x1.0p1 + }, + { // Entry 449 + -0x1.e1fc084cd7618cd301ea042dbe396361p-1, + -0x1.5f89e11a0441cp1, + 0x1.0000000000001p1 + }, + { // Entry 450 + 0x1.e1fc084cd7618cd301ea042dbe396361p-1, + 0x1.5f89e11a0441cp1, + 0x1.0000000000001p1 + }, + { // Entry 451 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 452 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 453 + 0x1.921fb54442d17c69898cc517019839a2p-1, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 454 + -0x1.921fb54442d17c69898cc517019839a2p-1, + -0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 455 + 0x1.921fb54442d16c69898cc517021839a2p-1, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 456 + -0x1.921fb54442d16c69898cc517021839a2p-1, + -0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 457 + 0x1.921fb54442d18c69898cc51701d839a2p-1, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 458 + -0x1.921fb54442d18c69898cc51701d839a2p-1, + -0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 459 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 460 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p1, + 0x1.0p1 + }, + { // Entry 461 + 0x1.921fb54442d17469898cc517023839a2p-1, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 462 + -0x1.921fb54442d17469898cc517023839a2p-1, + -0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 463 + 0x1.921fb54442d19c69898cc517015839a2p-1, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 464 + -0x1.921fb54442d19c69898cc517015839a2p-1, + -0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 465 + 0x1.921fb54442d19469898cc517013839a2p-1, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 466 + -0x1.921fb54442d19469898cc517013839a2p-1, + -0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 467 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 468 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 469 + 0x1.fffffffffffffd5555555555555bbbbbp-28, + 0x1.fffffffffffffp-27, + 0x1.fffffffffffffp0 + }, + { // Entry 470 + -0x1.fffffffffffffd5555555555555bbbbbp-28, + -0x1.fffffffffffffp-27, + 0x1.fffffffffffffp0 + }, + { // Entry 471 + 0x1.ffffffffffffed5555555555559bbbbbp-28, + 0x1.fffffffffffffp-27, + 0x1.0p1 + }, + { // Entry 472 + -0x1.ffffffffffffed5555555555559bbbbbp-28, + -0x1.fffffffffffffp-27, + 0x1.0p1 + }, + { // Entry 473 + 0x1.ffffffffffffcd5555555555591bbbbbp-28, + 0x1.fffffffffffffp-27, + 0x1.0000000000001p1 + }, + { // Entry 474 + -0x1.ffffffffffffcd5555555555591bbbbbp-28, + -0x1.fffffffffffffp-27, + 0x1.0000000000001p1 + }, + { // Entry 475 + 0x1.00000000000006aaaaaaaaaaaacdddddp-27, + 0x1.0p-26, + 0x1.fffffffffffffp0 + }, + { // Entry 476 + -0x1.00000000000006aaaaaaaaaaaacdddddp-27, + -0x1.0p-26, + 0x1.fffffffffffffp0 + }, + { // Entry 477 + 0x1.fffffffffffffd5555555555555bbbbbp-28, + 0x1.0p-26, + 0x1.0p1 + }, + { // Entry 478 + -0x1.fffffffffffffd5555555555555bbbbbp-28, + -0x1.0p-26, + 0x1.0p1 + }, + { // Entry 479 + 0x1.ffffffffffffdd555555555557dbbbbbp-28, + 0x1.0p-26, + 0x1.0000000000001p1 + }, + { // Entry 480 + -0x1.ffffffffffffdd555555555557dbbbbbp-28, + -0x1.0p-26, + 0x1.0000000000001p1 + }, + { // Entry 481 + 0x1.00000000000016aaaaaaaaaaab0dddddp-27, + 0x1.0000000000001p-26, + 0x1.fffffffffffffp0 + }, + { // Entry 482 + -0x1.00000000000016aaaaaaaaaaab0dddddp-27, + -0x1.0000000000001p-26, + 0x1.fffffffffffffp0 + }, + { // Entry 483 + 0x1.0000000000000eaaaaaaaaaaaa6dddddp-27, + 0x1.0000000000001p-26, + 0x1.0p1 + }, + { // Entry 484 + -0x1.0000000000000eaaaaaaaaaaaa6dddddp-27, + -0x1.0000000000001p-26, + 0x1.0p1 + }, + { // Entry 485 + 0x1.fffffffffffffd5555555555555bbbbbp-28, + 0x1.0000000000001p-26, + 0x1.0000000000001p1 + }, + { // Entry 486 + -0x1.fffffffffffffd5555555555555bbbbbp-28, + -0x1.0000000000001p-26, + 0x1.0000000000001p1 + }, + { // Entry 487 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 488 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 489 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 490 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 491 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 492 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 493 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.0p-1074 + }, + { // Entry 494 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0.0 + }, + { // Entry 495 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 496 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 497 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 498 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 499 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 500 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 501 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 502 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 503 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 504 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 505 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 506 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 507 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 508 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 509 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 510 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 511 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 512 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 513 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 514 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 515 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 516 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 517 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 518 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 519 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 520 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 521 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 522 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 523 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 524 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 525 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 526 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 527 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 528 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp56 + }, + { // Entry 529 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp56 + }, + { // Entry 530 + 0x1.ffffffffffffefffffffffffffff5555p-57, + 0x1.fffffffffffffp0, + 0x1.0p57 + }, + { // Entry 531 + -0x1.ffffffffffffefffffffffffffff5555p-57, + -0x1.fffffffffffffp0, + 0x1.0p57 + }, + { // Entry 532 + 0x1.ffffffffffffd0000000000002ff5555p-57, + 0x1.fffffffffffffp0, + 0x1.0000000000001p57 + }, + { // Entry 533 + -0x1.ffffffffffffd0000000000002ff5555p-57, + -0x1.fffffffffffffp0, + 0x1.0000000000001p57 + }, + { // Entry 534 + 0x1.000000000000080000000000003faaaap-56, + 0x1.0p1, + 0x1.fffffffffffffp56 + }, + { // Entry 535 + -0x1.000000000000080000000000003faaaap-56, + -0x1.0p1, + 0x1.fffffffffffffp56 + }, + { // Entry 536 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.0p1, + 0x1.0p57 + }, + { // Entry 537 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.0p1, + 0x1.0p57 + }, + { // Entry 538 + 0x1.ffffffffffffe0000000000001ff5555p-57, + 0x1.0p1, + 0x1.0000000000001p57 + }, + { // Entry 539 + -0x1.ffffffffffffe0000000000001ff5555p-57, + -0x1.0p1, + 0x1.0000000000001p57 + }, + { // Entry 540 + 0x1.00000000000018000000000000bfaaaap-56, + 0x1.0000000000001p1, + 0x1.fffffffffffffp56 + }, + { // Entry 541 + -0x1.00000000000018000000000000bfaaaap-56, + -0x1.0000000000001p1, + 0x1.fffffffffffffp56 + }, + { // Entry 542 + 0x1.0000000000000fffffffffffffffaaaap-56, + 0x1.0000000000001p1, + 0x1.0p57 + }, + { // Entry 543 + -0x1.0000000000000fffffffffffffffaaaap-56, + -0x1.0000000000001p1, + 0x1.0p57 + }, + { // Entry 544 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.0000000000001p1, + 0x1.0000000000001p57 + }, + { // Entry 545 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.0000000000001p1, + 0x1.0000000000001p57 + }, + { // Entry 546 + -0x1.00000000000018000000000000bfaaaap-56, + -0x1.0000000000001p1, + 0x1.fffffffffffffp56 + }, + { // Entry 547 + 0x1.00000000000018000000000000bfaaaap-56, + 0x1.0000000000001p1, + 0x1.fffffffffffffp56 + }, + { // Entry 548 + -0x1.0000000000000fffffffffffffffaaaap-56, + -0x1.0000000000001p1, + 0x1.0p57 + }, + { // Entry 549 + 0x1.0000000000000fffffffffffffffaaaap-56, + 0x1.0000000000001p1, + 0x1.0p57 + }, + { // Entry 550 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.0000000000001p1, + 0x1.0000000000001p57 + }, + { // Entry 551 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.0000000000001p1, + 0x1.0000000000001p57 + }, + { // Entry 552 + -0x1.000000000000080000000000003faaaap-56, + -0x1.0p1, + 0x1.fffffffffffffp56 + }, + { // Entry 553 + 0x1.000000000000080000000000003faaaap-56, + 0x1.0p1, + 0x1.fffffffffffffp56 + }, + { // Entry 554 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.0p1, + 0x1.0p57 + }, + { // Entry 555 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.0p1, + 0x1.0p57 + }, + { // Entry 556 + -0x1.ffffffffffffe0000000000001ff5555p-57, + -0x1.0p1, + 0x1.0000000000001p57 + }, + { // Entry 557 + 0x1.ffffffffffffe0000000000001ff5555p-57, + 0x1.0p1, + 0x1.0000000000001p57 + }, + { // Entry 558 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp56 + }, + { // Entry 559 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp56 + }, + { // Entry 560 + -0x1.ffffffffffffefffffffffffffff5555p-57, + -0x1.fffffffffffffp0, + 0x1.0p57 + }, + { // Entry 561 + 0x1.ffffffffffffefffffffffffffff5555p-57, + 0x1.fffffffffffffp0, + 0x1.0p57 + }, + { // Entry 562 + -0x1.ffffffffffffd0000000000002ff5555p-57, + -0x1.fffffffffffffp0, + 0x1.0000000000001p57 + }, + { // Entry 563 + 0x1.ffffffffffffd0000000000002ff5555p-57, + 0x1.fffffffffffffp0, + 0x1.0000000000001p57 + }, + { // Entry 564 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.fffffffffffffp1, + 0x1.fffffffffffffp31 + }, + { // Entry 565 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.fffffffffffffp1, + 0x1.fffffffffffffp31 + }, + { // Entry 566 + 0x1.ffffffffffffeff555555555555655bbp-31, + 0x1.fffffffffffffp1, + 0x1.0p32 + }, + { // Entry 567 + -0x1.ffffffffffffeff555555555555655bbp-31, + -0x1.fffffffffffffp1, + 0x1.0p32 + }, + { // Entry 568 + 0x1.ffffffffffffcff555555555585855bbp-31, + 0x1.fffffffffffffp1, + 0x1.0000000000001p32 + }, + { // Entry 569 + -0x1.ffffffffffffcff555555555585855bbp-31, + -0x1.fffffffffffffp1, + 0x1.0000000000001p32 + }, + { // Entry 570 + 0x1.00000000000007faaaaaaaaaaaea2addp-30, + 0x1.0p2, + 0x1.fffffffffffffp31 + }, + { // Entry 571 + -0x1.00000000000007faaaaaaaaaaaea2addp-30, + -0x1.0p2, + 0x1.fffffffffffffp31 + }, + { // Entry 572 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.0p2, + 0x1.0p32 + }, + { // Entry 573 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.0p2, + 0x1.0p32 + }, + { // Entry 574 + 0x1.ffffffffffffdff555555555575755bbp-31, + 0x1.0p2, + 0x1.0000000000001p32 + }, + { // Entry 575 + -0x1.ffffffffffffdff555555555575755bbp-31, + -0x1.0p2, + 0x1.0000000000001p32 + }, + { // Entry 576 + 0x1.00000000000017faaaaaaaaaab692addp-30, + 0x1.0000000000001p2, + 0x1.fffffffffffffp31 + }, + { // Entry 577 + -0x1.00000000000017faaaaaaaaaab692addp-30, + -0x1.0000000000001p2, + 0x1.fffffffffffffp31 + }, + { // Entry 578 + 0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + 0x1.0000000000001p2, + 0x1.0p32 + }, + { // Entry 579 + -0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + -0x1.0000000000001p2, + 0x1.0p32 + }, + { // Entry 580 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.0000000000001p2, + 0x1.0000000000001p32 + }, + { // Entry 581 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.0000000000001p2, + 0x1.0000000000001p32 + }, + { // Entry 582 + -0x1.00000000000017faaaaaaaaaab692addp-30, + -0x1.0000000000001p-2, + 0x1.fffffffffffffp27 + }, + { // Entry 583 + 0x1.00000000000017faaaaaaaaaab692addp-30, + 0x1.0000000000001p-2, + 0x1.fffffffffffffp27 + }, + { // Entry 584 + -0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + -0x1.0000000000001p-2, + 0x1.0p28 + }, + { // Entry 585 + 0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + 0x1.0000000000001p-2, + 0x1.0p28 + }, + { // Entry 586 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.0000000000001p-2, + 0x1.0000000000001p28 + }, + { // Entry 587 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.0000000000001p-2, + 0x1.0000000000001p28 + }, + { // Entry 588 + -0x1.00000000000007faaaaaaaaaaaea2addp-30, + -0x1.0p-2, + 0x1.fffffffffffffp27 + }, + { // Entry 589 + 0x1.00000000000007faaaaaaaaaaaea2addp-30, + 0x1.0p-2, + 0x1.fffffffffffffp27 + }, + { // Entry 590 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.0p-2, + 0x1.0p28 + }, + { // Entry 591 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.0p-2, + 0x1.0p28 + }, + { // Entry 592 + -0x1.ffffffffffffdff555555555575755bbp-31, + -0x1.0p-2, + 0x1.0000000000001p28 + }, + { // Entry 593 + 0x1.ffffffffffffdff555555555575755bbp-31, + 0x1.0p-2, + 0x1.0000000000001p28 + }, + { // Entry 594 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.fffffffffffffp-3, + 0x1.fffffffffffffp27 + }, + { // Entry 595 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.fffffffffffffp-3, + 0x1.fffffffffffffp27 + }, + { // Entry 596 + -0x1.ffffffffffffeff555555555555655bbp-31, + -0x1.fffffffffffffp-3, + 0x1.0p28 + }, + { // Entry 597 + 0x1.ffffffffffffeff555555555555655bbp-31, + 0x1.fffffffffffffp-3, + 0x1.0p28 + }, + { // Entry 598 + -0x1.ffffffffffffcff555555555585855bbp-31, + -0x1.fffffffffffffp-3, + 0x1.0000000000001p28 + }, + { // Entry 599 + 0x1.ffffffffffffcff555555555585855bbp-31, + 0x1.fffffffffffffp-3, + 0x1.0000000000001p28 + }, + { // Entry 600 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffffffffffp2, + 0x1.fffffffffffffp2 + }, + { // Entry 601 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffffffffffp2, + 0x1.fffffffffffffp2 + }, + { // Entry 602 + 0x1.921fb54442d17c69898cc517019839a2p-1, + 0x1.fffffffffffffp2, + 0x1.0p3 + }, + { // Entry 603 + -0x1.921fb54442d17c69898cc517019839a2p-1, + -0x1.fffffffffffffp2, + 0x1.0p3 + }, + { // Entry 604 + 0x1.921fb54442d16c69898cc517021839a2p-1, + 0x1.fffffffffffffp2, + 0x1.0000000000001p3 + }, + { // Entry 605 + -0x1.921fb54442d16c69898cc517021839a2p-1, + -0x1.fffffffffffffp2, + 0x1.0000000000001p3 + }, + { // Entry 606 + 0x1.921fb54442d18c69898cc51701d839a2p-1, + 0x1.0p3, + 0x1.fffffffffffffp2 + }, + { // Entry 607 + -0x1.921fb54442d18c69898cc51701d839a2p-1, + -0x1.0p3, + 0x1.fffffffffffffp2 + }, + { // Entry 608 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 609 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p3, + 0x1.0p3 + }, + { // Entry 610 + 0x1.921fb54442d17469898cc517023839a2p-1, + 0x1.0p3, + 0x1.0000000000001p3 + }, + { // Entry 611 + -0x1.921fb54442d17469898cc517023839a2p-1, + -0x1.0p3, + 0x1.0000000000001p3 + }, + { // Entry 612 + 0x1.921fb54442d19c69898cc517015839a2p-1, + 0x1.0000000000001p3, + 0x1.fffffffffffffp2 + }, + { // Entry 613 + -0x1.921fb54442d19c69898cc517015839a2p-1, + -0x1.0000000000001p3, + 0x1.fffffffffffffp2 + }, + { // Entry 614 + 0x1.921fb54442d19469898cc517013839a2p-1, + 0x1.0000000000001p3, + 0x1.0p3 + }, + { // Entry 615 + -0x1.921fb54442d19469898cc517013839a2p-1, + -0x1.0000000000001p3, + 0x1.0p3 + }, + { // Entry 616 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0000000000001p3, + 0x1.0000000000001p3 + }, + { // Entry 617 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0000000000001p3, + 0x1.0000000000001p3 + }, + { // Entry 618 + -0x1.dac670561bb51cf1462ef23fdf5661b4p-2, + -0x1.0000000000001p3, + 0x1.fffffffffffffp3 + }, + { // Entry 619 + 0x1.dac670561bb51cf1462ef23fdf5661b4p-2, + 0x1.0000000000001p3, + 0x1.fffffffffffffp3 + }, + { // Entry 620 + -0x1.dac670561bb510247962257311bcc81bp-2, + -0x1.0000000000001p3, + 0x1.0p4 + }, + { // Entry 621 + 0x1.dac670561bb510247962257311bcc81bp-2, + 0x1.0000000000001p3, + 0x1.0p4 + }, + { // Entry 622 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.0000000000001p3, + 0x1.0000000000001p4 + }, + { // Entry 623 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.0000000000001p3, + 0x1.0000000000001p4 + }, + { // Entry 624 + -0x1.dac670561bb50357ac9558a64593d258p-2, + -0x1.0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 625 + 0x1.dac670561bb50357ac9558a64593d258p-2, + 0x1.0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 626 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.0p3, + 0x1.0p4 + }, + { // Entry 627 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.0p3, + 0x1.0p4 + }, + { // Entry 628 + -0x1.dac670561bb4dcf1462ef23fe0232e81p-2, + -0x1.0p3, + 0x1.0000000000001p4 + }, + { // Entry 629 + 0x1.dac670561bb4dcf1462ef23fe0232e81p-2, + 0x1.0p3, + 0x1.0000000000001p4 + }, + { // Entry 630 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.fffffffffffffp2, + 0x1.fffffffffffffp3 + }, + { // Entry 631 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.fffffffffffffp2, + 0x1.fffffffffffffp3 + }, + { // Entry 632 + -0x1.dac670561bb4e9be12fbbf0cab93d258p-2, + -0x1.fffffffffffffp2, + 0x1.0p4 + }, + { // Entry 633 + 0x1.dac670561bb4e9be12fbbf0cab93d258p-2, + 0x1.fffffffffffffp2, + 0x1.0p4 + }, + { // Entry 634 + -0x1.dac670561bb4d0247962257313bcc81bp-2, + -0x1.fffffffffffffp2, + 0x1.0000000000001p4 + }, + { // Entry 635 + 0x1.dac670561bb4d0247962257313bcc81bp-2, + 0x1.fffffffffffffp2, + 0x1.0000000000001p4 + }, + { // Entry 636 + 0x1.72c43f4b1650a9d9aea6a40b156d98c0p1, + 0x1.fffffffffffffp2, + -0x1.0000000000001p5 + }, + { // Entry 637 + -0x1.72c43f4b1650a9d9aea6a40b156d98c0p1, + -0x1.fffffffffffffp2, + -0x1.0000000000001p5 + }, + { // Entry 638 + 0x1.72c43f4b1650a7f7ccc4c22933b558f8p1, + 0x1.fffffffffffffp2, + -0x1.0p5 + }, + { // Entry 639 + -0x1.72c43f4b1650a7f7ccc4c22933b558f8p1, + -0x1.fffffffffffffp2, + -0x1.0p5 + }, + { // Entry 640 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.fffffffffffffp2, + -0x1.fffffffffffffp4 + }, + { // Entry 641 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.fffffffffffffp2, + -0x1.fffffffffffffp4 + }, + { // Entry 642 + 0x1.72c43f4b1650a8e8bdb5b31a24897ff2p1, + 0x1.0p3, + -0x1.0000000000001p5 + }, + { // Entry 643 + -0x1.72c43f4b1650a8e8bdb5b31a24897ff2p1, + -0x1.0p3, + -0x1.0000000000001p5 + }, + { // Entry 644 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.0p3, + -0x1.0p5 + }, + { // Entry 645 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.0p3, + -0x1.0p5 + }, + { // Entry 646 + 0x1.72c43f4b1650a615eae2e04751cbef8fp1, + 0x1.0p3, + -0x1.fffffffffffffp4 + }, + { // Entry 647 + -0x1.72c43f4b1650a615eae2e04751cbef8fp1, + -0x1.0p3, + -0x1.fffffffffffffp4 + }, + { // Entry 648 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.0000000000001p3, + -0x1.0000000000001p5 + }, + { // Entry 649 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.0000000000001p3, + -0x1.0000000000001p5 + }, + { // Entry 650 + 0x1.72c43f4b1650a524f9f1ef5660e3da4dp1, + 0x1.0000000000001p3, + -0x1.0p5 + }, + { // Entry 651 + -0x1.72c43f4b1650a524f9f1ef5660e3da4dp1, + -0x1.0000000000001p3, + -0x1.0p5 + }, + { // Entry 652 + 0x1.72c43f4b1650a4340900fe656fde89b1p1, + 0x1.0000000000001p3, + -0x1.fffffffffffffp4 + }, + { // Entry 653 + -0x1.72c43f4b1650a4340900fe656fde89b1p1, + -0x1.0000000000001p3, + -0x1.fffffffffffffp4 + }, + { // Entry 654 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.fffffffffffffp2, + 0x1.fffffffffffffp5 + }, + { // Entry 655 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.fffffffffffffp2, + 0x1.fffffffffffffp5 + }, + { // Entry 656 + 0x1.fd5ba9aac2f6cca4951f70426d4e3181p-4, + 0x1.fffffffffffffp2, + 0x1.0p6 + }, + { // Entry 657 + -0x1.fd5ba9aac2f6cca4951f70426d4e3181p-4, + -0x1.fffffffffffffp2, + 0x1.0p6 + }, + { // Entry 658 + 0x1.fd5ba9aac2f6ad229cffee4a50b0e5b4p-4, + 0x1.fffffffffffffp2, + 0x1.0000000000001p6 + }, + { // Entry 659 + -0x1.fd5ba9aac2f6ad229cffee4a50b0e5b4p-4, + -0x1.fffffffffffffp2, + 0x1.0000000000001p6 + }, + { // Entry 660 + 0x1.fd5ba9aac2f6ec268d3ef23a8d4e3181p-4, + 0x1.0p3, + 0x1.fffffffffffffp5 + }, + { // Entry 661 + -0x1.fd5ba9aac2f6ec268d3ef23a8d4e3181p-4, + -0x1.0p3, + 0x1.fffffffffffffp5 + }, + { // Entry 662 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.0p3, + 0x1.0p6 + }, + { // Entry 663 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.0p3, + 0x1.0p6 + }, + { // Entry 664 + 0x1.fd5ba9aac2f6bce3990faf465f7f83d9p-4, + 0x1.0p3, + 0x1.0000000000001p6 + }, + { // Entry 665 + -0x1.fd5ba9aac2f6bce3990faf465f7f83d9p-4, + -0x1.0p3, + 0x1.0000000000001p6 + }, + { // Entry 666 + 0x1.fd5ba9aac2f70ba8855e7432adbcb671p-4, + 0x1.0000000000001p3, + 0x1.fffffffffffffp5 + }, + { // Entry 667 + -0x1.fd5ba9aac2f70ba8855e7432adbcb671p-4, + -0x1.0000000000001p3, + 0x1.fffffffffffffp5 + }, + { // Entry 668 + 0x1.fd5ba9aac2f6fbe7894eb3369c8b5496p-4, + 0x1.0000000000001p3, + 0x1.0p6 + }, + { // Entry 669 + -0x1.fd5ba9aac2f6fbe7894eb3369c8b5496p-4, + -0x1.0000000000001p3, + 0x1.0p6 + }, + { // Entry 670 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.0000000000001p3, + 0x1.0000000000001p6 + }, + { // Entry 671 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.0000000000001p3, + 0x1.0000000000001p6 + }, + { // Entry 672 + -0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + -0x1.0000000000001p3, + 0x1.fffffffffffffp6 + }, + { // Entry 673 + 0x1.ff55bb72cfdecc3dc61f55884da654e3p-5, + 0x1.0000000000001p3, + 0x1.fffffffffffffp6 + }, + { // Entry 674 + -0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + -0x1.0000000000001p3, + 0x1.0p7 + }, + { // Entry 675 + 0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + 0x1.0000000000001p3, + 0x1.0p7 + }, + { // Entry 676 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0000000000001p3, + 0x1.0000000000001p7 + }, + { // Entry 677 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0000000000001p3, + 0x1.0000000000001p7 + }, + { // Entry 678 + -0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + -0x1.0p3, + 0x1.fffffffffffffp6 + }, + { // Entry 679 + 0x1.ff55bb72cfdeac5da63f35a82ccb2c10p-5, + 0x1.0p3, + 0x1.fffffffffffffp6 + }, + { // Entry 680 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0p3, + 0x1.0p7 + }, + { // Entry 681 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0p3, + 0x1.0p7 + }, + { // Entry 682 + -0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + -0x1.0p3, + 0x1.0000000000001p7 + }, + { // Entry 683 + 0x1.ff55bb72cfde7c8d766f05d7fe7800bap-5, + 0x1.0p3, + 0x1.0000000000001p7 + }, + { // Entry 684 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffffffffffp2, + 0x1.fffffffffffffp6 + }, + { // Entry 685 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffffffffffp2, + 0x1.fffffffffffffp6 + }, + { // Entry 686 + -0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + -0x1.fffffffffffffp2, + 0x1.0p7 + }, + { // Entry 687 + 0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + 0x1.fffffffffffffp2, + 0x1.0p7 + }, + { // Entry 688 + -0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + -0x1.fffffffffffffp2, + 0x1.0000000000001p7 + }, + { // Entry 689 + 0x1.ff55bb72cfde6c9d667ef5e7ef8476c1p-5, + 0x1.fffffffffffffp2, + 0x1.0000000000001p7 + }, + { // Entry 690 + 0x1.0468a8ace4df65d2ed8c40d37cc6e907p1, + 0x1.fffffffffffffp2, + -0x1.0000000000001p2 + }, + { // Entry 691 + -0x1.0468a8ace4df65d2ed8c40d37cc6e907p1, + -0x1.fffffffffffffp2, + -0x1.0000000000001p2 + }, + { // Entry 692 + 0x1.0468a8ace4df629fba590da0498e971cp1, + 0x1.fffffffffffffp2, + -0x1.0p2 + }, + { // Entry 693 + -0x1.0468a8ace4df629fba590da0498e971cp1, + -0x1.fffffffffffffp2, + -0x1.0p2 + }, + { // Entry 694 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.fffffffffffffp2, + -0x1.fffffffffffffp1 + }, + { // Entry 695 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.fffffffffffffp2, + -0x1.fffffffffffffp1 + }, + { // Entry 696 + 0x1.0468a8ace4df643953f2a739e313b5d4p1, + 0x1.0p3, + -0x1.0000000000001p2 + }, + { // Entry 697 + -0x1.0468a8ace4df643953f2a739e313b5d4p1, + -0x1.0p3, + -0x1.0000000000001p2 + }, + { // Entry 698 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.0p3, + -0x1.0p2 + }, + { // Entry 699 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.0p3, + -0x1.0p2 + }, + { // Entry 700 + 0x1.0468a8ace4df5f6c8725da6d164e971cp1, + 0x1.0p3, + -0x1.fffffffffffffp1 + }, + { // Entry 701 + -0x1.0468a8ace4df5f6c8725da6d164e971cp1, + -0x1.0p3, + -0x1.fffffffffffffp1 + }, + { // Entry 702 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.0000000000001p3, + -0x1.0000000000001p2 + }, + { // Entry 703 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.0000000000001p3, + -0x1.0000000000001p2 + }, + { // Entry 704 + 0x1.0468a8ace4df5dd2ed8c40d37ce082a1p1, + 0x1.0000000000001p3, + -0x1.0p2 + }, + { // Entry 705 + -0x1.0468a8ace4df5dd2ed8c40d37ce082a1p1, + -0x1.0000000000001p3, + -0x1.0p2 + }, + { // Entry 706 + 0x1.0468a8ace4df5c3953f2a739e353b5d4p1, + 0x1.0000000000001p3, + -0x1.fffffffffffffp1 + }, + { // Entry 707 + -0x1.0468a8ace4df5c3953f2a739e353b5d4p1, + -0x1.0000000000001p3, + -0x1.fffffffffffffp1 + }, + { // Entry 708 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.fffffffffffffp-103, + 0x1.fffffffffffffp-3 + }, + { // Entry 709 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.fffffffffffffp-103, + 0x1.fffffffffffffp-3 + }, + { // Entry 710 + 0x1.ffffffffffffefffffffffffffffffffp-101, + 0x1.fffffffffffffp-103, + 0x1.0p-2 + }, + { // Entry 711 + -0x1.ffffffffffffefffffffffffffffffffp-101, + -0x1.fffffffffffffp-103, + 0x1.0p-2 + }, + { // Entry 712 + 0x1.ffffffffffffd0000000000002ffffffp-101, + 0x1.fffffffffffffp-103, + 0x1.0000000000001p-2 + }, + { // Entry 713 + -0x1.ffffffffffffd0000000000002ffffffp-101, + -0x1.fffffffffffffp-103, + 0x1.0000000000001p-2 + }, + { // Entry 714 + 0x1.0000000000000800000000000040p-100, + 0x1.0p-102, + 0x1.fffffffffffffp-3 + }, + { // Entry 715 + -0x1.0000000000000800000000000040p-100, + -0x1.0p-102, + 0x1.fffffffffffffp-3 + }, + { // Entry 716 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0p-102, + 0x1.0p-2 + }, + { // Entry 717 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0p-102, + 0x1.0p-2 + }, + { // Entry 718 + 0x1.ffffffffffffe0000000000001ffffffp-101, + 0x1.0p-102, + 0x1.0000000000001p-2 + }, + { // Entry 719 + -0x1.ffffffffffffe0000000000001ffffffp-101, + -0x1.0p-102, + 0x1.0000000000001p-2 + }, + { // Entry 720 + 0x1.00000000000018000000000000c0p-100, + 0x1.0000000000001p-102, + 0x1.fffffffffffffp-3 + }, + { // Entry 721 + -0x1.00000000000018000000000000c0p-100, + -0x1.0000000000001p-102, + 0x1.fffffffffffffp-3 + }, + { // Entry 722 + 0x1.0000000000000fffffffffffffffffffp-100, + 0x1.0000000000001p-102, + 0x1.0p-2 + }, + { // Entry 723 + -0x1.0000000000000fffffffffffffffffffp-100, + -0x1.0000000000001p-102, + 0x1.0p-2 + }, + { // Entry 724 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0000000000001p-102, + 0x1.0000000000001p-2 + }, + { // Entry 725 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0000000000001p-102, + 0x1.0000000000001p-2 + }, + { // Entry 726 + 0x1.ffffffffffffffffffffffffffffffffp-201, + 0x1.fffffffffffffp-203, + 0x1.fffffffffffffp-3 + }, + { // Entry 727 + -0x1.ffffffffffffffffffffffffffffffffp-201, + -0x1.fffffffffffffp-203, + 0x1.fffffffffffffp-3 + }, + { // Entry 728 + 0x1.ffffffffffffefffffffffffffffffffp-201, + 0x1.fffffffffffffp-203, + 0x1.0p-2 + }, + { // Entry 729 + -0x1.ffffffffffffefffffffffffffffffffp-201, + -0x1.fffffffffffffp-203, + 0x1.0p-2 + }, + { // Entry 730 + 0x1.ffffffffffffd0000000000002ffffffp-201, + 0x1.fffffffffffffp-203, + 0x1.0000000000001p-2 + }, + { // Entry 731 + -0x1.ffffffffffffd0000000000002ffffffp-201, + -0x1.fffffffffffffp-203, + 0x1.0000000000001p-2 + }, + { // Entry 732 + 0x1.0000000000000800000000000040p-200, + 0x1.0p-202, + 0x1.fffffffffffffp-3 + }, + { // Entry 733 + -0x1.0000000000000800000000000040p-200, + -0x1.0p-202, + 0x1.fffffffffffffp-3 + }, + { // Entry 734 + 0x1.ffffffffffffffffffffffffffffffffp-201, + 0x1.0p-202, + 0x1.0p-2 + }, + { // Entry 735 + -0x1.ffffffffffffffffffffffffffffffffp-201, + -0x1.0p-202, + 0x1.0p-2 + }, + { // Entry 736 + 0x1.ffffffffffffe0000000000001ffffffp-201, + 0x1.0p-202, + 0x1.0000000000001p-2 + }, + { // Entry 737 + -0x1.ffffffffffffe0000000000001ffffffp-201, + -0x1.0p-202, + 0x1.0000000000001p-2 + }, + { // Entry 738 + 0x1.00000000000018000000000000c0p-200, + 0x1.0000000000001p-202, + 0x1.fffffffffffffp-3 + }, + { // Entry 739 + -0x1.00000000000018000000000000c0p-200, + -0x1.0000000000001p-202, + 0x1.fffffffffffffp-3 + }, + { // Entry 740 + 0x1.0000000000000fffffffffffffffffffp-200, + 0x1.0000000000001p-202, + 0x1.0p-2 + }, + { // Entry 741 + -0x1.0000000000000fffffffffffffffffffp-200, + -0x1.0000000000001p-202, + 0x1.0p-2 + }, + { // Entry 742 + 0x1.ffffffffffffffffffffffffffffffffp-201, + 0x1.0000000000001p-202, + 0x1.0000000000001p-2 + }, + { // Entry 743 + -0x1.ffffffffffffffffffffffffffffffffp-201, + -0x1.0000000000001p-202, + 0x1.0000000000001p-2 + }, + { // Entry 744 + 0x1.ffffffffffffffffffffffffffffffffp-1001, + 0x1.fffffffffffffp-1003, + 0x1.fffffffffffffp-3 + }, + { // Entry 745 + -0x1.ffffffffffffffffffffffffffffffffp-1001, + -0x1.fffffffffffffp-1003, + 0x1.fffffffffffffp-3 + }, + { // Entry 746 + 0x1.ffffffffffffefffffffffffffffffffp-1001, + 0x1.fffffffffffffp-1003, + 0x1.0p-2 + }, + { // Entry 747 + -0x1.ffffffffffffefffffffffffffffffffp-1001, + -0x1.fffffffffffffp-1003, + 0x1.0p-2 + }, + { // Entry 748 + 0x1.ffffffffffffd0000000000002ffffffp-1001, + 0x1.fffffffffffffp-1003, + 0x1.0000000000001p-2 + }, + { // Entry 749 + -0x1.ffffffffffffd0000000000002ffffffp-1001, + -0x1.fffffffffffffp-1003, + 0x1.0000000000001p-2 + }, + { // Entry 750 + 0x1.0000000000000800000000000040p-1000, + 0x1.0p-1002, + 0x1.fffffffffffffp-3 + }, + { // Entry 751 + -0x1.0000000000000800000000000040p-1000, + -0x1.0p-1002, + 0x1.fffffffffffffp-3 + }, + { // Entry 752 + 0x1.ffffffffffffffffffffffffffffffffp-1001, + 0x1.0p-1002, + 0x1.0p-2 + }, + { // Entry 753 + -0x1.ffffffffffffffffffffffffffffffffp-1001, + -0x1.0p-1002, + 0x1.0p-2 + }, + { // Entry 754 + 0x1.ffffffffffffe0000000000001ffffffp-1001, + 0x1.0p-1002, + 0x1.0000000000001p-2 + }, + { // Entry 755 + -0x1.ffffffffffffe0000000000001ffffffp-1001, + -0x1.0p-1002, + 0x1.0000000000001p-2 + }, + { // Entry 756 + 0x1.00000000000018000000000000c0p-1000, + 0x1.0000000000001p-1002, + 0x1.fffffffffffffp-3 + }, + { // Entry 757 + -0x1.00000000000018000000000000c0p-1000, + -0x1.0000000000001p-1002, + 0x1.fffffffffffffp-3 + }, + { // Entry 758 + 0x1.0000000000000fffffffffffffffffffp-1000, + 0x1.0000000000001p-1002, + 0x1.0p-2 + }, + { // Entry 759 + -0x1.0000000000000fffffffffffffffffffp-1000, + -0x1.0000000000001p-1002, + 0x1.0p-2 + }, + { // Entry 760 + 0x1.ffffffffffffffffffffffffffffffffp-1001, + 0x1.0000000000001p-1002, + 0x1.0000000000001p-2 + }, + { // Entry 761 + -0x1.ffffffffffffffffffffffffffffffffp-1001, + -0x1.0000000000001p-1002, + 0x1.0000000000001p-2 + }, + { // Entry 762 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.ffffffffffffep2, + 0x1.ffffffffffffep102 + }, + { // Entry 763 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.ffffffffffffep2, + 0x1.ffffffffffffep102 + }, + { // Entry 764 + 0x1.ffffffffffffefffffffffffff7fffffp-101, + 0x1.ffffffffffffep2, + 0x1.fffffffffffffp102 + }, + { // Entry 765 + -0x1.ffffffffffffefffffffffffff7fffffp-101, + -0x1.ffffffffffffep2, + 0x1.fffffffffffffp102 + }, + { // Entry 766 + 0x1.ffffffffffffdfffffffffffffffffffp-101, + 0x1.ffffffffffffep2, + 0x1.0p103 + }, + { // Entry 767 + -0x1.ffffffffffffdfffffffffffffffffffp-101, + -0x1.ffffffffffffep2, + 0x1.0p103 + }, + { // Entry 768 + 0x1.ffffffffffffc0000000000003ffffffp-101, + 0x1.ffffffffffffep2, + 0x1.0000000000001p103 + }, + { // Entry 769 + -0x1.ffffffffffffc0000000000003ffffffp-101, + -0x1.ffffffffffffep2, + 0x1.0000000000001p103 + }, + { // Entry 770 + 0x1.ffffffffffffa000000000000bffffffp-101, + 0x1.ffffffffffffep2, + 0x1.0000000000002p103 + }, + { // Entry 771 + -0x1.ffffffffffffa000000000000bffffffp-101, + -0x1.ffffffffffffep2, + 0x1.0000000000002p103 + }, + { // Entry 772 + 0x1.0000000000000800000000000080p-100, + 0x1.fffffffffffffp2, + 0x1.ffffffffffffep102 + }, + { // Entry 773 + -0x1.0000000000000800000000000080p-100, + -0x1.fffffffffffffp2, + 0x1.ffffffffffffep102 + }, + { // Entry 774 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.fffffffffffffp2, + 0x1.fffffffffffffp102 + }, + { // Entry 775 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.fffffffffffffp2, + 0x1.fffffffffffffp102 + }, + { // Entry 776 + 0x1.ffffffffffffefffffffffffffffffffp-101, + 0x1.fffffffffffffp2, + 0x1.0p103 + }, + { // Entry 777 + -0x1.ffffffffffffefffffffffffffffffffp-101, + -0x1.fffffffffffffp2, + 0x1.0p103 + }, + { // Entry 778 + 0x1.ffffffffffffd0000000000002ffffffp-101, + 0x1.fffffffffffffp2, + 0x1.0000000000001p103 + }, + { // Entry 779 + -0x1.ffffffffffffd0000000000002ffffffp-101, + -0x1.fffffffffffffp2, + 0x1.0000000000001p103 + }, + { // Entry 780 + 0x1.ffffffffffffb0000000000009ffffffp-101, + 0x1.fffffffffffffp2, + 0x1.0000000000002p103 + }, + { // Entry 781 + -0x1.ffffffffffffb0000000000009ffffffp-101, + -0x1.fffffffffffffp2, + 0x1.0000000000002p103 + }, + { // Entry 782 + 0x1.00000000000010000000000001p-100, + 0x1.0p3, + 0x1.ffffffffffffep102 + }, + { // Entry 783 + -0x1.00000000000010000000000001p-100, + -0x1.0p3, + 0x1.ffffffffffffep102 + }, + { // Entry 784 + 0x1.0000000000000800000000000040p-100, + 0x1.0p3, + 0x1.fffffffffffffp102 + }, + { // Entry 785 + -0x1.0000000000000800000000000040p-100, + -0x1.0p3, + 0x1.fffffffffffffp102 + }, + { // Entry 786 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0p3, + 0x1.0p103 + }, + { // Entry 787 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0p3, + 0x1.0p103 + }, + { // Entry 788 + 0x1.ffffffffffffe0000000000001ffffffp-101, + 0x1.0p3, + 0x1.0000000000001p103 + }, + { // Entry 789 + -0x1.ffffffffffffe0000000000001ffffffp-101, + -0x1.0p3, + 0x1.0000000000001p103 + }, + { // Entry 790 + 0x1.ffffffffffffc0000000000007ffffffp-101, + 0x1.0p3, + 0x1.0000000000002p103 + }, + { // Entry 791 + -0x1.ffffffffffffc0000000000007ffffffp-101, + -0x1.0p3, + 0x1.0000000000002p103 + }, + { // Entry 792 + 0x1.00000000000020000000000002p-100, + 0x1.0000000000001p3, + 0x1.ffffffffffffep102 + }, + { // Entry 793 + -0x1.00000000000020000000000002p-100, + -0x1.0000000000001p3, + 0x1.ffffffffffffep102 + }, + { // Entry 794 + 0x1.00000000000018000000000000c0p-100, + 0x1.0000000000001p3, + 0x1.fffffffffffffp102 + }, + { // Entry 795 + -0x1.00000000000018000000000000c0p-100, + -0x1.0000000000001p3, + 0x1.fffffffffffffp102 + }, + { // Entry 796 + 0x1.0000000000000fffffffffffffffffffp-100, + 0x1.0000000000001p3, + 0x1.0p103 + }, + { // Entry 797 + -0x1.0000000000000fffffffffffffffffffp-100, + -0x1.0000000000001p3, + 0x1.0p103 + }, + { // Entry 798 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0000000000001p3, + 0x1.0000000000001p103 + }, + { // Entry 799 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0000000000001p3, + 0x1.0000000000001p103 + }, + { // Entry 800 + 0x1.ffffffffffffe0000000000003ffffffp-101, + 0x1.0000000000001p3, + 0x1.0000000000002p103 + }, + { // Entry 801 + -0x1.ffffffffffffe0000000000003ffffffp-101, + -0x1.0000000000001p3, + 0x1.0000000000002p103 + }, + { // Entry 802 + 0x1.00000000000030000000000003p-100, + 0x1.0000000000002p3, + 0x1.ffffffffffffep102 + }, + { // Entry 803 + -0x1.00000000000030000000000003p-100, + -0x1.0000000000002p3, + 0x1.ffffffffffffep102 + }, + { // Entry 804 + 0x1.0000000000002800000000000140p-100, + 0x1.0000000000002p3, + 0x1.fffffffffffffp102 + }, + { // Entry 805 + -0x1.0000000000002800000000000140p-100, + -0x1.0000000000002p3, + 0x1.fffffffffffffp102 + }, + { // Entry 806 + 0x1.0000000000001fffffffffffffffffffp-100, + 0x1.0000000000002p3, + 0x1.0p103 + }, + { // Entry 807 + -0x1.0000000000001fffffffffffffffffffp-100, + -0x1.0000000000002p3, + 0x1.0p103 + }, + { // Entry 808 + 0x1.0000000000000fffffffffffffp-100, + 0x1.0000000000002p3, + 0x1.0000000000001p103 + }, + { // Entry 809 + -0x1.0000000000000fffffffffffffp-100, + -0x1.0000000000002p3, + 0x1.0000000000001p103 + }, + { // Entry 810 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.0000000000002p3, + 0x1.0000000000002p103 + }, + { // Entry 811 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.0000000000002p3, + 0x1.0000000000002p103 + }, + { // Entry 812 + 0x1.ffffffffffffffffffffffffffffffffp-1024, + 0x1.ffffffffffffep0, + 0x1.ffffffffffffep1023 + }, + { // Entry 813 + -0x1.ffffffffffffffffffffffffffffffffp-1024, + -0x1.ffffffffffffep0, + 0x1.ffffffffffffep1023 + }, + { // Entry 814 + 0x1.ffffffffffffefffffffffffff7fffffp-1024, + 0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 815 + -0x1.ffffffffffffefffffffffffff7fffffp-1024, + -0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 816 + 0x1.ffffffffffffefffffffffffff7fffffp-1024, + 0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 817 + -0x1.ffffffffffffefffffffffffff7fffffp-1024, + -0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 818 + 0x1.ffffffffffffefffffffffffff7fffffp-1024, + 0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 819 + -0x1.ffffffffffffefffffffffffff7fffffp-1024, + -0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 820 + 0x1.ffffffffffffefffffffffffff7fffffp-1024, + 0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 821 + -0x1.ffffffffffffefffffffffffff7fffffp-1024, + -0x1.ffffffffffffep0, + 0x1.fffffffffffffp1023 + }, + { // Entry 822 + 0x1.0000000000000800000000000080p-1023, + 0x1.fffffffffffffp0, + 0x1.ffffffffffffep1023 + }, + { // Entry 823 + -0x1.0000000000000800000000000080p-1023, + -0x1.fffffffffffffp0, + 0x1.ffffffffffffep1023 + }, + { // Entry 824 + 0x1.ffffffffffffffffffffffffffffffffp-1024, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 825 + -0x1.ffffffffffffffffffffffffffffffffp-1024, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 826 + 0x1.ffffffffffffffffffffffffffffffffp-1024, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 827 + -0x1.ffffffffffffffffffffffffffffffffp-1024, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 828 + 0x1.ffffffffffffffffffffffffffffffffp-1024, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 829 + -0x1.ffffffffffffffffffffffffffffffffp-1024, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 830 + 0x1.ffffffffffffffffffffffffffffffffp-1024, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 831 + -0x1.ffffffffffffffffffffffffffffffffp-1024, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 832 + 0x1.00000000000010000000000001p-1023, + 0x1.0p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 833 + -0x1.00000000000010000000000001p-1023, + -0x1.0p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 834 + 0x1.0000000000000800000000000040p-1023, + 0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 835 + -0x1.0000000000000800000000000040p-1023, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 836 + 0x1.0000000000000800000000000040p-1023, + 0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 837 + -0x1.0000000000000800000000000040p-1023, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 838 + 0x1.0000000000000800000000000040p-1023, + 0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 839 + -0x1.0000000000000800000000000040p-1023, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 840 + 0x1.0000000000000800000000000040p-1023, + 0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 841 + -0x1.0000000000000800000000000040p-1023, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 842 + 0x1.00000000000020000000000002p-1023, + 0x1.0000000000001p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 843 + -0x1.00000000000020000000000002p-1023, + -0x1.0000000000001p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 844 + 0x1.00000000000018000000000000c0p-1023, + 0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 845 + -0x1.00000000000018000000000000c0p-1023, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 846 + 0x1.00000000000018000000000000c0p-1023, + 0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 847 + -0x1.00000000000018000000000000c0p-1023, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 848 + 0x1.00000000000018000000000000c0p-1023, + 0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 849 + -0x1.00000000000018000000000000c0p-1023, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 850 + 0x1.00000000000018000000000000c0p-1023, + 0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 851 + -0x1.00000000000018000000000000c0p-1023, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 852 + 0x1.00000000000030000000000003p-1023, + 0x1.0000000000002p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 853 + -0x1.00000000000030000000000003p-1023, + -0x1.0000000000002p1, + 0x1.ffffffffffffep1023 + }, + { // Entry 854 + 0x1.0000000000002800000000000140p-1023, + 0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 855 + -0x1.0000000000002800000000000140p-1023, + -0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 856 + 0x1.0000000000002800000000000140p-1023, + 0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 857 + -0x1.0000000000002800000000000140p-1023, + -0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 858 + 0x1.0000000000002800000000000140p-1023, + 0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 859 + -0x1.0000000000002800000000000140p-1023, + -0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 860 + 0x1.0000000000002800000000000140p-1023, + 0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 861 + -0x1.0000000000002800000000000140p-1023, + -0x1.0000000000002p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 862 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep1, + 0x1.ffffffffffffep1023 + }, + { // Entry 863 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep1, + 0x1.ffffffffffffep1023 + }, + { // Entry 864 + 0x1.ffffffffffffefffffffffffff7fffffp-1023, + 0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 865 + -0x1.ffffffffffffefffffffffffff7fffffp-1023, + -0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 866 + 0x1.ffffffffffffefffffffffffff7fffffp-1023, + 0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 867 + -0x1.ffffffffffffefffffffffffff7fffffp-1023, + -0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 868 + 0x1.ffffffffffffefffffffffffff7fffffp-1023, + 0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 869 + -0x1.ffffffffffffefffffffffffff7fffffp-1023, + -0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 870 + 0x1.ffffffffffffefffffffffffff7fffffp-1023, + 0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 871 + -0x1.ffffffffffffefffffffffffff7fffffp-1023, + -0x1.ffffffffffffep1, + 0x1.fffffffffffffp1023 + }, + { // Entry 872 + 0x1.0000000000000800000000000080p-1022, + 0x1.fffffffffffffp1, + 0x1.ffffffffffffep1023 + }, + { // Entry 873 + -0x1.0000000000000800000000000080p-1022, + -0x1.fffffffffffffp1, + 0x1.ffffffffffffep1023 + }, + { // Entry 874 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 875 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 876 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 877 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 878 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 879 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 880 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 881 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.fffffffffffffp1, + 0x1.fffffffffffffp1023 + }, + { // Entry 882 + 0x1.00000000000010000000000001p-1022, + 0x1.0p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 883 + -0x1.00000000000010000000000001p-1022, + -0x1.0p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 884 + 0x1.0000000000000800000000000040p-1022, + 0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 885 + -0x1.0000000000000800000000000040p-1022, + -0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 886 + 0x1.0000000000000800000000000040p-1022, + 0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 887 + -0x1.0000000000000800000000000040p-1022, + -0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 888 + 0x1.0000000000000800000000000040p-1022, + 0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 889 + -0x1.0000000000000800000000000040p-1022, + -0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 890 + 0x1.0000000000000800000000000040p-1022, + 0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 891 + -0x1.0000000000000800000000000040p-1022, + -0x1.0p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 892 + 0x1.00000000000020000000000002p-1022, + 0x1.0000000000001p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 893 + -0x1.00000000000020000000000002p-1022, + -0x1.0000000000001p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 894 + 0x1.00000000000018000000000000c0p-1022, + 0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 895 + -0x1.00000000000018000000000000c0p-1022, + -0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 896 + 0x1.00000000000018000000000000c0p-1022, + 0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 897 + -0x1.00000000000018000000000000c0p-1022, + -0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 898 + 0x1.00000000000018000000000000c0p-1022, + 0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 899 + -0x1.00000000000018000000000000c0p-1022, + -0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 900 + 0x1.00000000000018000000000000c0p-1022, + 0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 901 + -0x1.00000000000018000000000000c0p-1022, + -0x1.0000000000001p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 902 + 0x1.00000000000030000000000003p-1022, + 0x1.0000000000002p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 903 + -0x1.00000000000030000000000003p-1022, + -0x1.0000000000002p2, + 0x1.ffffffffffffep1023 + }, + { // Entry 904 + 0x1.0000000000002800000000000140p-1022, + 0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 905 + -0x1.0000000000002800000000000140p-1022, + -0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 906 + 0x1.0000000000002800000000000140p-1022, + 0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 907 + -0x1.0000000000002800000000000140p-1022, + -0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 908 + 0x1.0000000000002800000000000140p-1022, + 0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 909 + -0x1.0000000000002800000000000140p-1022, + -0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 910 + 0x1.0000000000002800000000000140p-1022, + 0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 911 + -0x1.0000000000002800000000000140p-1022, + -0x1.0000000000002p2, + 0x1.fffffffffffffp1023 + }, + { // Entry 912 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000002p1023, + -0x1.0000000000002p0 + }, + { // Entry 913 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000002p1023, + -0x1.0000000000002p0 + }, + { // Entry 914 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000002p1023, + -0x1.0000000000001p0 + }, + { // Entry 915 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000002p1023, + -0x1.0000000000001p0 + }, + { // Entry 916 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000002p1023, + -0x1.0p0 + }, + { // Entry 917 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000002p1023, + -0x1.0p0 + }, + { // Entry 918 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000002p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 919 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000002p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 920 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000002p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 921 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000002p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 922 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p1023, + -0x1.0000000000002p0 + }, + { // Entry 923 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p1023, + -0x1.0000000000002p0 + }, + { // Entry 924 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p1023, + -0x1.0000000000001p0 + }, + { // Entry 925 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p1023, + -0x1.0000000000001p0 + }, + { // Entry 926 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p1023, + -0x1.0p0 + }, + { // Entry 927 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p1023, + -0x1.0p0 + }, + { // Entry 928 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 929 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 930 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0000000000001p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 931 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0000000000001p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 932 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p1023, + -0x1.0000000000002p0 + }, + { // Entry 933 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p1023, + -0x1.0000000000002p0 + }, + { // Entry 934 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p1023, + -0x1.0000000000001p0 + }, + { // Entry 935 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p1023, + -0x1.0000000000001p0 + }, + { // Entry 936 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p1023, + -0x1.0p0 + }, + { // Entry 937 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p1023, + -0x1.0p0 + }, + { // Entry 938 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 939 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p1023, + -0x1.fffffffffffffp-1 + }, + { // Entry 940 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 941 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p1023, + -0x1.ffffffffffffep-1 + }, + { // Entry 942 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1022, + -0x1.0000000000002p0 + }, + { // Entry 943 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1022, + -0x1.0000000000002p0 + }, + { // Entry 944 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1022, + -0x1.0000000000001p0 + }, + { // Entry 945 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p0 + }, + { // Entry 946 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1022, + -0x1.0p0 + }, + { // Entry 947 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1022, + -0x1.0p0 + }, + { // Entry 948 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1022, + -0x1.fffffffffffffp-1 + }, + { // Entry 949 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp-1 + }, + { // Entry 950 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1022, + -0x1.ffffffffffffep-1 + }, + { // Entry 951 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1022, + -0x1.ffffffffffffep-1 + }, + { // Entry 952 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1022, + -0x1.0000000000002p0 + }, + { // Entry 953 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1022, + -0x1.0000000000002p0 + }, + { // Entry 954 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1022, + -0x1.0000000000001p0 + }, + { // Entry 955 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1022, + -0x1.0000000000001p0 + }, + { // Entry 956 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1022, + -0x1.0p0 + }, + { // Entry 957 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1022, + -0x1.0p0 + }, + { // Entry 958 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1022, + -0x1.fffffffffffffp-1 + }, + { // Entry 959 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1022, + -0x1.fffffffffffffp-1 + }, + { // Entry 960 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1022, + -0x1.ffffffffffffep-1 + }, + { // Entry 961 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1022, + -0x1.ffffffffffffep-1 + }, + { // Entry 962 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0.0 + }, + { // Entry 963 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0.0 + }, + { // Entry 964 + 0.0, + 0.0, + 0.0 + }, + { // Entry 965 + -0.0, + -0.0, + 0.0 + }, + { // Entry 966 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.0p-1074 + }, + { // Entry 967 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 968 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.0p-1022 + }, + { // Entry 969 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 970 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -HUGE_VAL + }, + { // Entry 971 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.0p-1074 + }, + { // Entry 972 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 973 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.0p-1022 + }, + { // Entry 974 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 975 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0, + -HUGE_VAL + }, + { // Entry 976 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 977 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 978 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 979 + 0.0, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 980 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 981 + -0.0, + -0.0, + HUGE_VAL + }, + { // Entry 982 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 983 + -0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 984 + -0.0, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 985 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 986 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + 0.0 + }, + { // Entry 987 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 988 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1022, + 0.0 + }, + { // Entry 989 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 990 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + -0.0 + }, + { // Entry 991 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 992 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1022, + -0.0 + }, + { // Entry 993 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 994 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + 0.0 + }, + { // Entry 995 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 996 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1022, + 0.0 + }, + { // Entry 997 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074, + 0.0 + }, + { // Entry 998 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + -0.0 + }, + { // Entry 999 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1000 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1001 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1002 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1003 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1004 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1005 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1006 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1007 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1008 + 0.0, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1009 + 0.0, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1010 + 0.0, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1011 + -0.0, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1012 + -0.0, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1013 + -0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1014 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1015 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1016 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1017 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1018 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1019 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1020 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1021 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1022 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1023 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1024 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1025 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1026 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1027 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1028 + 0x1.921fb54442d18469898cc51701b839a2p-1, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 1029 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 1030 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1031 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1032 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1033 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1034 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1035 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1036 + 0.0, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1037 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1038 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1039 + -0.0, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1040 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1041 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1042 + 0x1.921fb54442d17469898cc51701b839a2p0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1043 + 0x1.921fb54442d19469898cc51701b839a2p0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1044 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1045 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1046 + 0x1.ffffffffffffffffffffffffff555555p-53, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1047 + -0x1.ffffffffffffffffffffffffff555555p-53, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1048 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1049 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1050 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1051 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1052 + 0x1.921fb54442d17c69898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1053 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1054 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1055 + -0x1.921fb54442d17469898cc51701b839a2p0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1056 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1057 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1058 + -0x1.921fb54442d17c69898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1059 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1060 + -0x1.921fb54442d19469898cc51701b839a2p0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1061 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1062 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1063 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1064 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1065 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + } +}; diff --git a/tests/math_data/atan2f_intel_data.h b/tests/math_data/atan2f_intel_data.h new file mode 100644 index 000000000..ba9046c84 --- /dev/null +++ b/tests/math_data/atan2f_intel_data.h @@ -0,0 +1,4703 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_atan2f_intel_data[] = { + { // Entry 0 + -0x1.ffffe4000187ffea90012c1fef963e3bp-60, + -0x1.p-100, + 0x1.00000ep-41 + }, + { // Entry 1 + 0x1.ffffe4000187ffea90012c1fef963e3bp-60, + 0x1.p-100, + 0x1.00000ep-41 + }, + { // Entry 2 + -0.0f, + -0x1.p-100, + 0x1.00000ep50 + }, + { // Entry 3 + 0.0f, + 0x1.p-100, + 0x1.00000ep50 + }, + { // Entry 4 + -0x1.7ffffffffff44cccff95f13b15ee40f3p-11, + -0x1.000002p-10, + 0x1.555554p0 + }, + { // Entry 5 + 0x1.7ffffffffff44cccff95f13b15ee40f3p-11, + 0x1.000002p-10, + 0x1.555554p0 + }, + { // Entry 6 + -0x1.fffffc00000d55550555571bbbb2d111p-23, + -0x1.000004p0, + 0x1.000006p22 + }, + { // Entry 7 + 0x1.fffffc00000d55550555571bbbb2d111p-23, + 0x1.000004p0, + 0x1.000006p22 + }, + { // Entry 8 + -0x1.dad20effbd30f4310a58502b0ff3965dp-2, + -0x1.000006p3, + 0x1.fff186p3 + }, + { // Entry 9 + 0x1.dad20effbd30f4310a58502b0ff3965dp-2, + 0x1.000006p3, + 0x1.fff186p3 + }, + { // Entry 10 + -0x1.ff654bdefc197c75159e23b86a1127c1p-5, + -0x1.0008p16, + 0x1.000030p20 + }, + { // Entry 11 + 0x1.ff654bdefc197c75159e23b86a1127c1p-5, + 0x1.0008p16, + 0x1.000030p20 + }, + { // Entry 12 + -0x1.ff9b39e1a4728254bcb91f895e52abc2p-5, + -0x1.002304p3, + 0x1.000022p7 + }, + { // Entry 13 + 0x1.ff9b39e1a4728254bcb91f895e52abc2p-5, + 0x1.002304p3, + 0x1.000022p7 + }, + { // Entry 14 + -0x1.43e6bb010a022abaa97bc92c2bf92b2dp-2, + -0x1.04fd14p-4, + 0x1.8eb358p-3 + }, + { // Entry 15 + 0x1.43e6bb010a022abaa97bc92c2bf92b2dp-2, + 0x1.04fd14p-4, + 0x1.8eb358p-3 + }, + { // Entry 16 + -0x1.905827610aa194066b73a36bcafa2041p-1, + -0x1.0596bcp-3, + 0x1.0769dcp-3 + }, + { // Entry 17 + 0x1.905827610aa194066b73a36bcafa2041p-1, + 0x1.0596bcp-3, + 0x1.0769dcp-3 + }, + { // Entry 18 + -0x1.f5b7710347b9a8b79afdefc31a2185a0p-2, + -0x1.111118p-2, + 0x1.fffff8p-2 + }, + { // Entry 19 + 0x1.f5b7710347b9a8b79afdefc31a2185a0p-2, + 0x1.111118p-2, + 0x1.fffff8p-2 + }, + { // Entry 20 + -0x1.151c477cb91ad4bb4a65e8d3fd3321f4p0, + -0x1.111118p-14, + 0x1.222218p-15 + }, + { // Entry 21 + 0x1.151c477cb91ad4bb4a65e8d3fd3321f4p0, + 0x1.111118p-14, + 0x1.222218p-15 + }, + { // Entry 22 + -0x1.520acb002e18e97cf7bea2ae9290357bp0, + -0x1.199994p-1, + 0x1.20p-3 + }, + { // Entry 23 + 0x1.520acb002e18e97cf7bea2ae9290357bp0, + 0x1.199994p-1, + 0x1.20p-3 + }, + { // Entry 24 + -0x1.d1a1ebad28ca743ee543132b45980d5cp-2, + -0x1.199998p-1, + 0x1.20p0 + }, + { // Entry 25 + 0x1.d1a1ebad28ca743ee543132b45980d5cp-2, + 0x1.199998p-1, + 0x1.20p0 + }, + { // Entry 26 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.19999ap0, + 0x1.p-149 + }, + { // Entry 27 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.19999ap0, + 0x1.p-149 + }, + { // Entry 28 + -0x1.922170fe86dc56969c78b959508174d3p-1, + -0x1.2c0202p9, + 0x1.2bfffap9 + }, + { // Entry 29 + 0x1.922170fe86dc56969c78b959508174d3p-1, + 0x1.2c0202p9, + 0x1.2bfffap9 + }, + { // Entry 30 + -0x1.8ec170fc51bb0a23bd010cc82696f548p0, + -0x1.2ffff0p6, + 0x1.p0 + }, + { // Entry 31 + 0x1.8ec170fc51bb0a23bd010cc82696f548p0, + 0x1.2ffff0p6, + 0x1.p0 + }, + { // Entry 32 + -0x1.2fffffffffffffffffffffffffffffffp-146, + -0x1.30p-145, + 0x1.p1 + }, + { // Entry 33 + 0x1.2fffffffffffffffffffffffffffffffp-146, + 0x1.30p-145, + 0x1.p1 + }, + { // Entry 34 + -0x1.2a73acfced538de0e37fe6b9b0a41ebap-2, + -0x1.333338p-2, + 0x1.fffffcp-1 + }, + { // Entry 35 + 0x1.2a73acfced538de0e37fe6b9b0a41ebap-2, + 0x1.333338p-2, + 0x1.fffffcp-1 + }, + { // Entry 36 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.40p-147, + -0x1.fffffep127 + }, + { // Entry 37 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.40p-147, + -0x1.fffffep127 + }, + { // Entry 38 + -0x1.3fffffffffffffffffffffffffffffffp-148, + -0x1.40p-147, + 0x1.p1 + }, + { // Entry 39 + 0x1.3fffffffffffffffffffffffffffffffp-148, + 0x1.40p-147, + 0x1.p1 + }, + { // Entry 40 + -0x1.ffa33dcc72ce5a24fbffc472e6d8aa54p-5, + -0x1.77fffep-15, + 0x1.77c6e2p-11 + }, + { // Entry 41 + 0x1.ffa33dcc72ce5a24fbffc472e6d8aa54p-5, + 0x1.77fffep-15, + 0x1.77c6e2p-11 + }, + { // Entry 42 + -0x1.72eab640dab3ff16e57acdbe73e804d6p-2, + -0x1.7b4a16p-4, + 0x1.f474d8p-3 + }, + { // Entry 43 + 0x1.72eab640dab3ff16e57acdbe73e804d6p-2, + 0x1.7b4a16p-4, + 0x1.f474d8p-3 + }, + { // Entry 44 + -0x1.7fffad001ebebf3a599c03854b51e597p-9, + -0x1.7ffffep0, + 0x1.000006p9 + }, + { // Entry 45 + 0x1.7fffad001ebebf3a599c03854b51e597p-9, + 0x1.7ffffep0, + 0x1.000006p9 + }, + { // Entry 46 + -0x1.e3539c0f15f7f48eab208803a29a2c7dp0, + -0x1.85e85ep-1, + -0x1.fffffcp-3 + }, + { // Entry 47 + 0x1.e3539c0f15f7f48eab208803a29a2c7dp0, + 0x1.85e85ep-1, + -0x1.fffffcp-3 + }, + { // Entry 48 + -0x1.fff7a95adac43e9c9763981911f0af91p-6, + -0x1.881a4ap5, + 0x1.88p10 + }, + { // Entry 49 + 0x1.fff7a95adac43e9c9763981911f0af91p-6, + 0x1.881a4ap5, + 0x1.88p10 + }, + { // Entry 50 + -0x1.afffffffffffffffffffffffffffffffp-146, + -0x1.b0p-145, + 0x1.p1 + }, + { // Entry 51 + 0x1.afffffffffffffffffffffffffffffffp-146, + 0x1.b0p-145, + 0x1.p1 + }, + { // Entry 52 + -0x1.a5ce8d1a28d5bcb270bc016790eb423ap0, + -0x1.bbbbbcp-1, + -0x1.1179f8p-4 + }, + { // Entry 53 + 0x1.a5ce8d1a28d5bcb270bc016790eb423ap0, + 0x1.bbbbbcp-1, + -0x1.1179f8p-4 + }, + { // Entry 54 + -0x1.eafe7000a5dc264f70fe1dd7f684b160p-3, + -0x1.d55554p-1, + 0x1.dffffep1 + }, + { // Entry 55 + 0x1.eafe7000a5dc264f70fe1dd7f684b160p-3, + 0x1.d55554p-1, + 0x1.dffffep1 + }, + { // Entry 56 + -0x1.eb4a75001deee59a8f1d03f2e725b3aep-2, + -0x1.d5e926p-3, + 0x1.c38dc4p-2 + }, + { // Entry 57 + 0x1.eb4a75001deee59a8f1d03f2e725b3aep-2, + 0x1.d5e926p-3, + 0x1.c38dc4p-2 + }, + { // Entry 58 + -0x1.dfffffffffffffffffffffffffffffffp-147, + -0x1.e0p-146, + 0x1.p1 + }, + { // Entry 59 + 0x1.dfffffffffffffffffffffffffffffffp-147, + 0x1.e0p-146, + 0x1.p1 + }, + { // Entry 60 + -0x1.f12ab8f4f73d14abefa8e36cac1681p-19, + -0x1.f12a96p2, + 0x1.ffffdcp20 + }, + { // Entry 61 + 0x1.f12ab8f4f73d14abefa8e36cac1681p-19, + 0x1.f12a96p2, + 0x1.ffffdcp20 + }, + { // Entry 62 + -0x1.e42b250039e7dca1fe04ee304684c0edp-2, + -0x1.f8732ap-2, + 0x1.ed16e2p-1 + }, + { // Entry 63 + 0x1.e42b250039e7dca1fe04ee304684c0edp-2, + 0x1.f8732ap-2, + 0x1.ed16e2p-1 + }, + { // Entry 64 + -0x1.ff571a1535e84a3ed0617f7c8bd43c9dp-5, + -0x1.ffffdep-3, + 0x1.fffe7ep1 + }, + { // Entry 65 + 0x1.ff571a1535e84a3ed0617f7c8bd43c9dp-5, + 0x1.ffffdep-3, + 0x1.fffe7ep1 + }, + { // Entry 66 + 0.0, + 0.0, + 0.0 + }, + { // Entry 67 + 0.0f, + 0x1.p-149, + 0x1.p1 + }, + { // Entry 68 + -0.0f, + -0x1.p-149, + 0x1.p1 + }, + { // Entry 69 + 0x1.5ffff7c000317ffed70006f5ffd63cp-147, + 0x1.p-149, + 0x1.745d20p-3 + }, + { // Entry 70 + -0x1.5ffff7c000317ffed70006f5ffd63cp-147, + -0x1.p-149, + 0x1.745d20p-3 + }, + { // Entry 71 + 0x1.40000dc0009740067fc0477d431261e1p-146, + 0x1.p-149, + 0x1.999988p-4 + }, + { // Entry 72 + -0x1.40000dc0009740067fc0477d431261e1p-146, + -0x1.p-149, + 0x1.999988p-4 + }, + { // Entry 73 + 0.0f, + 0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 74 + -0.0f, + -0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 75 + 0x1.000001000000fffaabaa9aabaa8aabddp-30, + 0x1.p2, + 0x1.fffffep31 + }, + { // Entry 76 + -0x1.000001000000fffaabaa9aabaa8aabddp-30, + -0x1.p2, + 0x1.fffffep31 + }, + { // Entry 77 + 0x1.03a264fffa8f8262b1fabf7149142cb1p-1, + 0x1.p9, + 0x1.ccccd8p9 + }, + { // Entry 78 + -0x1.03a264fffa8f8262b1fabf7149142cb1p-1, + -0x1.p9, + 0x1.ccccd8p9 + }, + { // Entry 79 + 0x1.096d02910676c2be11dcfe9fe3175278p1, + 0x1.000002p-1, + -0x1.19998ep-2 + }, + { // Entry 80 + -0x1.096d02910676c2be11dcfe9fe3175278p1, + -0x1.000002p-1, + -0x1.19998ep-2 + }, + { // Entry 81 + 0x1.ff54b8d04e797f1463152a327d0b86c4p-2, + 0x1.000002p-1, + 0x1.d55560p-1 + }, + { // Entry 82 + -0x1.ff54b8d04e797f1463152a327d0b86c4p-2, + -0x1.000002p-1, + 0x1.d55560p-1 + }, + { // Entry 83 + 0x1.dac67522e883aedcc9c473438e936964p-2, + 0x1.000002p-1, + 0x1.fffffep-1 + }, + { // Entry 84 + -0x1.dac67522e883aedcc9c473438e936964p-2, + -0x1.000002p-1, + 0x1.fffffep-1 + }, + { // Entry 85 + 0x1.f430999672c04e0df46fd1307191a380p-4, + 0x1.000002p-3, + 0x1.04bd9cp0 + }, + { // Entry 86 + -0x1.f430999672c04e0df46fd1307191a380p-4, + -0x1.000002p-3, + 0x1.04bd9cp0 + }, + { // Entry 87 + 0x1.7fb81eff43d4f24387e27e042d6562dbp-5, + 0x1.000002p-5, + 0x1.555552p-1 + }, + { // Entry 88 + -0x1.7fb81eff43d4f24387e27e042d6562dbp-5, + -0x1.000002p-5, + 0x1.555552p-1 + }, + { // Entry 89 + 0x1.000003000001aaaaa1aaaa80dddd98ddp-23, + 0x1.000002p-23, + 0x1.fffffep-1 + }, + { // Entry 90 + -0x1.000003000001aaaaa1aaaa80dddd98ddp-23, + -0x1.000002p-23, + 0x1.fffffep-1 + }, + { // Entry 91 + 0x1.921fb4fddc6a66f8e54f012a148cac4ep1, + 0x1.000002p-25, + -0x1.d1745cp-1 + }, + { // Entry 92 + -0x1.921fb4fddc6a66f8e54f012a148cac4ep1, + -0x1.000002p-25, + -0x1.d1745cp-1 + }, + { // Entry 93 + 0x1.0468a979b1a9f0624f4c1516d96c6422p1, + 0x1.000002p0, + -0x1.000006p-1 + }, + { // Entry 94 + -0x1.0468a979b1a9f0624f4c1516d96c6422p1, + -0x1.000002p0, + -0x1.000006p-1 + }, + { // Entry 95 + 0x1.b96e57abf90140f894091838c2b8a690p-1, + 0x1.000002p0, + 0x1.b6db76p-1 + }, + { // Entry 96 + -0x1.b96e57abf90140f894091838c2b8a690p-1, + -0x1.000002p0, + 0x1.b6db76p-1 + }, + { // Entry 97 + 0x1.f01ecfda25de70c3e0bfdea229510fd3p0, + 0x1.000002p1, + -0x1.89d8a0p-1 + }, + { // Entry 98 + -0x1.f01ecfda25de70c3e0bfdea229510fd3p0, + -0x1.000002p1, + -0x1.89d8a0p-1 + }, + { // Entry 99 + 0x1.ff5625094d950db0c74144886d91c14cp-5, + 0x1.000004p-3, + 0x1.ffff9ep0 + }, + { // Entry 100 + -0x1.ff5625094d950db0c74144886d91c14cp-5, + -0x1.000004p-3, + 0x1.ffff9ep0 + }, + { // Entry 101 + 0x1.fd5bd4fd7ac8b0cf6006c4414f743ea0p-4, + 0x1.000006p3, + 0x1.ffffe0p5 + }, + { // Entry 102 + -0x1.fd5bd4fd7ac8b0cf6006c4414f743ea0p-4, + -0x1.000006p3, + 0x1.ffffe0p5 + }, + { // Entry 103 + 0x1.8c4f470003e118b76491b0c859d6c053p1, + 0x1.000008p-2, + -0x1.60p2 + }, + { // Entry 104 + -0x1.8c4f470003e118b76491b0c859d6c053p1, + -0x1.000008p-2, + -0x1.60p2 + }, + { // Entry 105 + 0x1.2834603b51b0b1b7ada51badb8c5e787p-1, + 0x1.00000ep-20, + 0x1.88p-20 + }, + { // Entry 106 + -0x1.2834603b51b0b1b7ada51badb8c5e787p-1, + -0x1.00000ep-20, + 0x1.88p-20 + }, + { // Entry 107 + 0x1.f77e7bb64eb5f42395a6d8adcffa6337p-2, + 0x1.00000ep-20, + 0x1.ddfffep-20 + }, + { // Entry 108 + -0x1.f77e7bb64eb5f42395a6d8adcffa6337p-2, + -0x1.00000ep-20, + 0x1.ddfffep-20 + }, + { // Entry 109 + 0x1.ffd87cf6fd38249fc231c5402edbc122p-6, + 0x1.000010p-3, + 0x1.fffcfep1 + }, + { // Entry 110 + -0x1.ffd87cf6fd38249fc231c5402edbc122p-6, + -0x1.000010p-3, + 0x1.fffcfep1 + }, + { // Entry 111 + 0x1.fd5bd4fd76b8efb59210712d88b6e912p-4, + 0x1.00001ep3, + 0x1.000008p6 + }, + { // Entry 112 + -0x1.fd5bd4fd76b8efb59210712d88b6e912p-4, + -0x1.00001ep3, + 0x1.000008p6 + }, + { // Entry 113 + 0x1.fd5c357b879b2fe30dedcd3135cb691bp-4, + 0x1.000038p3, + 0x1.ffffe2p5 + }, + { // Entry 114 + -0x1.fd5c357b879b2fe30dedcd3135cb691bp-4, + -0x1.000038p3, + 0x1.ffffe2p5 + }, + { // Entry 115 + 0x1.99392cffffb1e34431dc0b78592ad27cp0, + 0x1.000262p0, + -0x1.c67ffep-6 + }, + { // Entry 116 + -0x1.99392cffffb1e34431dc0b78592ad27cp0, + -0x1.000262p0, + -0x1.c67ffep-6 + }, + { // Entry 117 + 0x1.ff654bdefc197c75159e23b86a1127c1p-5, + 0x1.0008p16, + 0x1.000030p20 + }, + { // Entry 118 + -0x1.ff654bdefc197c75159e23b86a1127c1p-5, + -0x1.0008p16, + 0x1.000030p20 + }, + { // Entry 119 + 0x1.321a6aeab209211260a57ffa3329874ep-1, + 0x1.000ep-20, + 0x1.77fffep-20 + }, + { // Entry 120 + -0x1.321a6aeab209211260a57ffa3329874ep-1, + -0x1.000ep-20, + 0x1.77fffep-20 + }, + { // Entry 121 + 0x1.ff753bea780e4b6715b12898d26fada0p-5, + 0x1.0010p-3, + 0x1.000030p1 + }, + { // Entry 122 + -0x1.ff753bea780e4b6715b12898d26fada0p-5, + -0x1.0010p-3, + 0x1.000030p1 + }, + { // Entry 123 + 0x1.400ea9fffd0dcf2989a4e76f8aa5db51p-1, + 0x1.001be4p-1, + 0x1.62e42ep-1 + }, + { // Entry 124 + -0x1.400ea9fffd0dcf2989a4e76f8aa5db51p-1, + -0x1.001be4p-1, + 0x1.62e42ep-1 + }, + { // Entry 125 + 0x1.ff9b39e1a4728254bcb91f895e52abc2p-5, + 0x1.002304p3, + 0x1.000022p7 + }, + { // Entry 126 + -0x1.ff9b39e1a4728254bcb91f895e52abc2p-5, + -0x1.002304p3, + 0x1.000022p7 + }, + { // Entry 127 + 0x1.943f9a4b36eb2b8033de5110689ec228p-1, + 0x1.022228p0, + 0x1.fffffcp-1 + }, + { // Entry 128 + -0x1.943f9a4b36eb2b8033de5110689ec228p-1, + -0x1.022228p0, + 0x1.fffffcp-1 + }, + { // Entry 129 + 0x1.c66450ffe905abdcfe0531d5f14c2238p0, + 0x1.0b7778p-21, + -0x1.bb0cp-24 + }, + { // Entry 130 + -0x1.c66450ffe905abdcfe0531d5f14c2238p0, + -0x1.0b7778p-21, + -0x1.bb0cp-24 + }, + { // Entry 131 + 0x1.f759ec36e59bd61b017b6ebaaf148489p-2, + 0x1.0df6b0p9, + 0x1.f83dc0p9 + }, + { // Entry 132 + -0x1.f759ec36e59bd61b017b6ebaaf148489p-2, + -0x1.0df6b0p9, + 0x1.f83dc0p9 + }, + { // Entry 133 + 0x1.0039e2465cf8081fc9c3f6acc6017e31p-1, + 0x1.0f83dap9, + 0x1.f07bd4p9 + }, + { // Entry 134 + -0x1.0039e2465cf8081fc9c3f6acc6017e31p-1, + -0x1.0f83dap9, + 0x1.f07bd4p9 + }, + { // Entry 135 + 0x1.32c00cffff80612ac29d96e5387e4acdp-1, + 0x1.10cee0p1, + 0x1.8f83e4p1 + }, + { // Entry 136 + -0x1.32c00cffff80612ac29d96e5387e4acdp-1, + -0x1.10cee0p1, + 0x1.8f83e4p1 + }, + { // Entry 137 + 0x1.fc9d3effcf63ce3c73d32f688b7e0d3ep-2, + 0x1.133332p9, + 0x1.fbbbacp9 + }, + { // Entry 138 + -0x1.fc9d3effcf63ce3c73d32f688b7e0d3ep-2, + -0x1.133332p9, + 0x1.fbbbacp9 + }, + { // Entry 139 + 0x1.13b7ba9cbd2bde0ae99dd5b90b6a6caep-4, + 0x1.142288p-5, + 0x1.p-1 + }, + { // Entry 140 + -0x1.13b7ba9cbd2bde0ae99dd5b90b6a6caep-4, + -0x1.142288p-5, + 0x1.p-1 + }, + { // Entry 141 + 0x1.9baeb903173549a4605c13cb0ec5c997p-1, + 0x1.1a8a08p-1, + 0x1.102e88p-1 + }, + { // Entry 142 + -0x1.9baeb903173549a4605c13cb0ec5c997p-1, + -0x1.1a8a08p-1, + 0x1.102e88p-1 + }, + { // Entry 143 + 0x1.585ed10003e25039288d2a597baabb4ep-1, + 0x1.1aab0ep-1, + 0x1.62e42ep-1 + }, + { // Entry 144 + -0x1.585ed10003e25039288d2a597baabb4ep-1, + -0x1.1aab0ep-1, + 0x1.62e42ep-1 + }, + { // Entry 145 + 0x1.fd7b30fe75452129dd4d92575b1b6643p-3, + 0x1.20p0, + 0x1.1b6db6p2 + }, + { // Entry 146 + -0x1.fd7b30fe75452129dd4d92575b1b6643p-3, + -0x1.20p0, + 0x1.1b6db6p2 + }, + { // Entry 147 + 0x1.5ee2abfffc833087a8462d843d375f40p-1, + 0x1.221ffcp-1, + 0x1.62e42ep-1 + }, + { // Entry 148 + -0x1.5ee2abfffc833087a8462d843d375f40p-1, + -0x1.221ffcp-1, + 0x1.62e42ep-1 + }, + { // Entry 149 + 0x1.922dd2fea41a07a00852062680449192p-1, + 0x1.223224p9, + 0x1.222224p9 + }, + { // Entry 150 + -0x1.922dd2fea41a07a00852062680449192p-1, + -0x1.223224p9, + 0x1.222224p9 + }, + { // Entry 151 + 0x1.fd98765b7a311ad974b5861737a89126p-4, + 0x1.3024a6p-1, + 0x1.2ffffcp2 + }, + { // Entry 152 + -0x1.fd98765b7a311ad974b5861737a89126p-4, + -0x1.3024a6p-1, + 0x1.2ffffcp2 + }, + { // Entry 153 + 0x1.ff173f59cb25f4362c94ce6ab39ece70p-4, + 0x1.310b7ep-1, + 0x1.2ffffcp2 + }, + { // Entry 154 + -0x1.ff173f59cb25f4362c94ce6ab39ece70p-4, + -0x1.310b7ep-1, + 0x1.2ffffcp2 + }, + { // Entry 155 + 0x1.893661d985cfb6e78d6ed0749b2fd803p-1, + 0x1.31f564p-4, + 0x1.3ccc80p-4 + }, + { // Entry 156 + -0x1.893661d985cfb6e78d6ed0749b2fd803p-1, + -0x1.31f564p-4, + 0x1.3ccc80p-4 + }, + { // Entry 157 + 0x1.3800a6f8595ae7372b172ef6aec40af3p-28, + 0x1.38p-20, + 0x1.fffeeep7 + }, + { // Entry 158 + -0x1.3800a6f8595ae7372b172ef6aec40af3p-28, + -0x1.38p-20, + 0x1.fffeeep7 + }, + { // Entry 159 + 0x1.f51dec230b3dcdee4d4b104276bd091bp0, + 0x1.3a58f8p0, + -0x1.p-1 + }, + { // Entry 160 + -0x1.f51dec230b3dcdee4d4b104276bd091bp0, + -0x1.3a58f8p0, + -0x1.p-1 + }, + { // Entry 161 + 0x1.add4fcfffc818f75eda49eae0d8f98e2p-2, + 0x1.3cc366p-2, + 0x1.62e42ep-1 + }, + { // Entry 162 + -0x1.add4fcfffc818f75eda49eae0d8f98e2p-2, + -0x1.3cc366p-2, + 0x1.62e42ep-1 + }, + { // Entry 163 + 0x1.9d6394fffffe8990edfcf5c33f9e7bc1p0, + 0x1.3fc2e4p3, + -0x1.c28f5ep-2 + }, + { // Entry 164 + -0x1.9d6394fffffe8990edfcf5c33f9e7bc1p0, + -0x1.3fc2e4p3, + -0x1.c28f5ep-2 + }, + { // Entry 165 + 0x1.16d00513a5c2b116688fed7c9e6d7bf9p-3, + 0x1.40a050p-6, + 0x1.24924ap-3 + }, + { // Entry 166 + -0x1.16d00513a5c2b116688fed7c9e6d7bf9p-3, + -0x1.40a050p-6, + 0x1.24924ap-3 + }, + { // Entry 167 + 0x1.6d71ea27ddde729204699db97fdd037ep-1, + 0x1.41f070p2, + 0x1.73b782p2 + }, + { // Entry 168 + -0x1.6d71ea27ddde729204699db97fdd037ep-1, + -0x1.41f070p2, + 0x1.73b782p2 + }, + { // Entry 169 + 0x1.6e2ce2182a658d8450720e677f21ce61p-1, + 0x1.429ap9, + 0x1.7368e2p9 + }, + { // Entry 170 + -0x1.6e2ce2182a658d8450720e677f21ce61p-1, + -0x1.429ap9, + 0x1.7368e2p9 + }, + { // Entry 171 + 0x1.740a75f5e00f3c2a265818a8e05ccc99p-1, + 0x1.435e54p0, + 0x1.6bca20p0 + }, + { // Entry 172 + -0x1.740a75f5e00f3c2a265818a8e05ccc99p-1, + -0x1.435e54p0, + 0x1.6bca20p0 + }, + { // Entry 173 + 0x1.4eb92766fa1641bdcd6b72f3bd619251p-1, + 0x1.5baa3ap-2, + 0x1.c5c85cp-2 + }, + { // Entry 174 + -0x1.4eb92766fa1641bdcd6b72f3bd619251p-1, + -0x1.5baa3ap-2, + 0x1.c5c85cp-2 + }, + { // Entry 175 + 0x1.feb17ca8152a6f1c96ebab23e1ca4438p-4, + 0x1.5d6c50p-8, + 0x1.5c80p-5 + }, + { // Entry 176 + -0x1.feb17ca8152a6f1c96ebab23e1ca4438p-4, + -0x1.5d6c50p-8, + 0x1.5c80p-5 + }, + { // Entry 177 + 0x1.61e054ffff517564fbb75fa927e9317dp1, + 0x1.62b140p1, + -0x1.c0p2 + }, + { // Entry 178 + -0x1.61e054ffff517564fbb75fa927e9317dp1, + -0x1.62b140p1, + -0x1.c0p2 + }, + { // Entry 179 + 0x1.926064fffd342f8f129a70df92a458b3p-1, + 0x1.633de6p-1, + 0x1.62e42ep-1 + }, + { // Entry 180 + -0x1.926064fffd342f8f129a70df92a458b3p-1, + -0x1.633de6p-1, + 0x1.62e42ep-1 + }, + { // Entry 181 + 0x1.ddf15cfffeff907133df83405cf1c383p-2, + 0x1.65a3e2p-2, + 0x1.62e42ep-1 + }, + { // Entry 182 + -0x1.ddf15cfffeff907133df83405cf1c383p-2, + -0x1.65a3e2p-2, + 0x1.62e42ep-1 + }, + { // Entry 183 + 0x1.a8c692fc3efe50c92076f2cdd3f6bd92p0, + 0x1.68b44ep0, + -0x1.p-3 + }, + { // Entry 184 + -0x1.a8c692fc3efe50c92076f2cdd3f6bd92p0, + -0x1.68b44ep0, + -0x1.p-3 + }, + { // Entry 185 + 0x1.1d730dfffc0d10826bfff4268c4db210p0, + 0x1.6a0092p0, + 0x1.62e42ep-1 + }, + { // Entry 186 + -0x1.1d730dfffc0d10826bfff4268c4db210p0, + -0x1.6a0092p0, + 0x1.62e42ep-1 + }, + { // Entry 187 + 0x1.9a06c6fffcb000f0eb371998c338bdaep-1, + 0x1.6e04f2p-1, + 0x1.62e42ep-1 + }, + { // Entry 188 + -0x1.9a06c6fffcb000f0eb371998c338bdaep-1, + -0x1.6e04f2p-1, + 0x1.62e42ep-1 + }, + { // Entry 189 + 0x1.921f9f0000092b6cc81e3cd97531299cp0, + 0x1.70p-1, + 0x1.0011p-20 + }, + { // Entry 190 + -0x1.921f9f0000092b6cc81e3cd97531299cp0, + -0x1.70p-1, + 0x1.0011p-20 + }, + { // Entry 191 + 0x1.55a1f300040b007b9fcf88e0bbaa4bf9p0, + 0x1.707652p1, + 0x1.62e42ep-1 + }, + { // Entry 192 + -0x1.55a1f300040b007b9fcf88e0bbaa4bf9p0, + -0x1.707652p1, + 0x1.62e42ep-1 + }, + { // Entry 193 + 0x1.ffa33dcc72ce5a24fbffc472e6d8aa54p-5, + 0x1.77fffep-15, + 0x1.77c6e2p-11 + }, + { // Entry 194 + -0x1.ffa33dcc72ce5a24fbffc472e6d8aa54p-5, + -0x1.77fffep-15, + 0x1.77c6e2p-11 + }, + { // Entry 195 + 0x1.7702d9c0f7f4e1f5f65e806e4e9e2eb4p-3, + 0x1.7b4274p-2, + 0x1.000006p1 + }, + { // Entry 196 + -0x1.7702d9c0f7f4e1f5f65e806e4e9e2eb4p-3, + -0x1.7b4274p-2, + 0x1.000006p1 + }, + { // Entry 197 + 0x1.fac9255e2e84501d7f69135fa78a7842p-2, + 0x1.7c1570p-2, + 0x1.601e80p-1 + }, + { // Entry 198 + -0x1.fac9255e2e84501d7f69135fa78a7842p-2, + -0x1.7c1570p-2, + 0x1.601e80p-1 + }, + { // Entry 199 + 0x1.a4c2220003e9ff7184d11c11dbed790ap-1, + 0x1.7db652p-1, + 0x1.62e42ep-1 + }, + { // Entry 200 + -0x1.a4c2220003e9ff7184d11c11dbed790ap-1, + -0x1.7db652p-1, + 0x1.62e42ep-1 + }, + { // Entry 201 + 0x1.487f682022d3a5562109a0306dcb05a2p-1, + 0x1.7e7a9ap-2, + 0x1.p-1 + }, + { // Entry 202 + -0x1.487f682022d3a5562109a0306dcb05a2p-1, + -0x1.7e7a9ap-2, + 0x1.p-1 + }, + { // Entry 203 + 0x1.e48b2fddff19e1b2ad305bf85f553acfp0, + 0x1.7fbddep0, + -0x1.p-1 + }, + { // Entry 204 + -0x1.e48b2fddff19e1b2ad305bf85f553acfp0, + -0x1.7fbddep0, + -0x1.p-1 + }, + { // Entry 205 + 0x1.8000030000017ffff0ffffc44ccc87ccp-23, + 0x1.80p-23, + 0x1.fffffcp-1 + }, + { // Entry 206 + -0x1.8000030000017ffff0ffffc44ccc87ccp-23, + -0x1.80p-23, + 0x1.fffffcp-1 + }, + { // Entry 207 + 0x1.236ede000419f0232206a19dc1c9ba72p0, + 0x1.807cdcp0, + 0x1.62e42ep-1 + }, + { // Entry 208 + -0x1.236ede000419f0232206a19dc1c9ba72p0, + -0x1.807cdcp0, + 0x1.62e42ep-1 + }, + { // Entry 209 + 0x1.23af91000432ff7ca91b5869446d2677p0, + 0x1.817ccep0, + 0x1.62e42ep-1 + }, + { // Entry 210 + -0x1.23af91000432ff7ca91b5869446d2677p0, + -0x1.817ccep0, + 0x1.62e42ep-1 + }, + { // Entry 211 + 0x1.1d0d78ffde75e005ce13a48bb96c20d2p1, + 0x1.86bcf6p-9, + -0x1.2cde14p-9 + }, + { // Entry 212 + -0x1.1d0d78ffde75e005ce13a48bb96c20d2p1, + -0x1.86bcf6p-9, + -0x1.2cde14p-9 + }, + { // Entry 213 + 0x1.c40b44f7d49ec3bebbe6c143bb874988p-17, + 0x1.88p-7, + 0x1.bbfdfep9 + }, + { // Entry 214 + -0x1.c40b44f7d49ec3bebbe6c143bb874988p-17, + -0x1.88p-7, + 0x1.bbfdfep9 + }, + { // Entry 215 + 0x1.ac7dfffd2b94ebd2b4155d81fcb743c8p-1, + 0x1.8ba2bcp9, + 0x1.64d916p9 + }, + { // Entry 216 + -0x1.ac7dfffd2b94ebd2b4155d81fcb743c8p-1, + -0x1.8ba2bcp9, + 0x1.64d916p9 + }, + { // Entry 217 + 0x1.f4436c2918d5691620bddea5f0bdb99fp0, + 0x1.904a6ap9, + -0x1.42e220p8 + }, + { // Entry 218 + -0x1.f4436c2918d5691620bddea5f0bdb99fp0, + -0x1.904a6ap9, + -0x1.42e220p8 + }, + { // Entry 219 + 0x1.f280a4a85a9834808487443a22c27f9cp-4, + 0x1.90c864p-5, + 0x1.99999ap-2 + }, + { // Entry 220 + -0x1.f280a4a85a9834808487443a22c27f9cp-4, + -0x1.90c864p-5, + 0x1.99999ap-2 + }, + { // Entry 221 + 0x1.0a58d9000005f0ba9a470ce5241f1b9cp-1, + 0x1.969770p-2, + 0x1.62e42ep-1 + }, + { // Entry 222 + -0x1.0a58d9000005f0ba9a470ce5241f1b9cp-1, + -0x1.969770p-2, + 0x1.62e42ep-1 + }, + { // Entry 223 + 0x1.f730a597948e5c35433d522c24bdefa5p-1, + 0x1.9b2698p9, + 0x1.1219d6p9 + }, + { // Entry 224 + -0x1.f730a597948e5c35433d522c24bdefa5p-1, + -0x1.9b2698p9, + 0x1.1219d6p9 + }, + { // Entry 225 + 0x1.25c78f0002b5030803b34e0d3d565ec5p1, + 0x1.a99552p-9, + -0x1.788ee0p-9 + }, + { // Entry 226 + -0x1.25c78f0002b5030803b34e0d3d565ec5p1, + -0x1.a99552p-9, + -0x1.788ee0p-9 + }, + { // Entry 227 + 0x1.fec12756125a1c17f496ca7eff6b5d07p-4, + 0x1.aac766p-1, + 0x1.a99994p2 + }, + { // Entry 228 + -0x1.fec12756125a1c17f496ca7eff6b5d07p-4, + -0x1.aac766p-1, + 0x1.a99994p2 + }, + { // Entry 229 + 0x1.ff2726fffadc57a59c068daf94011a06p-2, + 0x1.acd9c8p-2, + 0x1.89469ep-1 + }, + { // Entry 230 + -0x1.ff2726fffadc57a59c068daf94011a06p-2, + -0x1.acd9c8p-2, + 0x1.89469ep-1 + }, + { // Entry 231 + 0x1.6cefa52cd49df53a19a9664ef79b5d21p-1, + 0x1.ba8cp-2, + 0x1.p-1 + }, + { // Entry 232 + -0x1.6cefa52cd49df53a19a9664ef79b5d21p-1, + -0x1.ba8cp-2, + 0x1.p-1 + }, + { // Entry 233 + 0x1.ffecd1bdfc10703be4cadb1ac64a6eacp-6, + 0x1.bf31e2p-5, + 0x1.bf1d60p0 + }, + { // Entry 234 + -0x1.ffecd1bdfc10703be4cadb1ac64a6eacp-6, + -0x1.bf31e2p-5, + 0x1.bf1d60p0 + }, + { // Entry 235 + 0x1.d93732f77c9157c16887ce5aa762f389p-6, + 0x1.c1aep-5, + 0x1.e66658p0 + }, + { // Entry 236 + -0x1.d93732f77c9157c16887ce5aa762f389p-6, + -0x1.c1aep-5, + 0x1.e66658p0 + }, + { // Entry 237 + 0x1.cea8bcf57199048990f21a209a2d2d3ep-45, + 0x1.c25c26p-44, + 0x1.f263a0p0 + }, + { // Entry 238 + -0x1.cea8bcf57199048990f21a209a2d2d3ep-45, + -0x1.c25c26p-44, + 0x1.f263a0p0 + }, + { // Entry 239 + 0x1.90004702e62bf58fd25e1cb1c208fb8bp-1, + 0x1.c8dcb8p2, + 0x1.ccaa94p2 + }, + { // Entry 240 + -0x1.90004702e62bf58fd25e1cb1c208fb8bp-1, + -0x1.c8dcb8p2, + 0x1.ccaa94p2 + }, + { // Entry 241 + 0x1.fd7c865a3e71ad0d8a724c912f6fb8b9p-4, + 0x1.d64866p-3, + 0x1.d629c0p0 + }, + { // Entry 242 + -0x1.fd7c865a3e71ad0d8a724c912f6fb8b9p-4, + -0x1.d64866p-3, + 0x1.d629c0p0 + }, + { // Entry 243 + 0x1.4aa669000170483715efe0528369e73ep-1, + 0x1.d7011cp0, + 0x1.3880c8p1 + }, + { // Entry 244 + -0x1.4aa669000170483715efe0528369e73ep-1, + -0x1.d7011cp0, + 0x1.3880c8p1 + }, + { // Entry 245 + 0x1.f420e6032da03c581c213d0cc2eacf5bp-2, + 0x1.db6e30p-2, + 0x1.bf62a4p-1 + }, + { // Entry 246 + -0x1.f420e6032da03c581c213d0cc2eacf5bp-2, + -0x1.db6e30p-2, + 0x1.bf62a4p-1 + }, + { // Entry 247 + 0x1.922dc15dd25e294f02361f0292bc0df8p-1, + 0x1.dddddcp-2, + 0x1.ddc3a4p-2 + }, + { // Entry 248 + -0x1.922dc15dd25e294f02361f0292bc0df8p-1, + -0x1.dddddcp-2, + 0x1.ddc3a4p-2 + }, + { // Entry 249 + 0x1.9d6fd902defaede7830883b7a2788da8p-1, + 0x1.de61fcp9, + 0x1.c9b22cp9 + }, + { // Entry 250 + -0x1.9d6fd902defaede7830883b7a2788da8p-1, + -0x1.de61fcp9, + 0x1.c9b22cp9 + }, + { // Entry 251 + 0x1.7ee180ca27095c5506b0fa68e94004d0p-4, + 0x1.dffffep-2, + 0x1.40p2 + }, + { // Entry 252 + -0x1.7ee180ca27095c5506b0fa68e94004d0p-4, + -0x1.dffffep-2, + 0x1.40p2 + }, + { // Entry 253 + 0x1.7d848f000bfaf243f75b3a1218dad94ep0, + 0x1.dffffep2, + 0x1.35c292p-1 + }, + { // Entry 254 + -0x1.7d848f000bfaf243f75b3a1218dad94ep0, + -0x1.dffffep2, + 0x1.35c292p-1 + }, + { // Entry 255 + 0x1.dfffe63601c1383bc54eea3773a4624fp-11, + 0x1.dffffep10, + 0x1.000008p21 + }, + { // Entry 256 + -0x1.dfffe63601c1383bc54eea3773a4624fp-11, + -0x1.dffffep10, + 0x1.000008p21 + }, + { // Entry 257 + 0x1.8f82d1b1443d17b008f18f7822175902p-4, + 0x1.e0f078p-6, + 0x1.333334p-2 + }, + { // Entry 258 + -0x1.8f82d1b1443d17b008f18f7822175902p-4, + -0x1.e0f078p-6, + 0x1.333334p-2 + }, + { // Entry 259 + 0x1.07795d7bc568d7597605f1e44388198ep1, + 0x1.e2be36p-2, + -0x1.fffffcp-3 + }, + { // Entry 260 + -0x1.07795d7bc568d7597605f1e44388198ep1, + -0x1.e2be36p-2, + -0x1.fffffcp-3 + }, + { // Entry 261 + 0x1.fff95e57a0b39bb8afc31a89674dc197p-92, + 0x1.e62448p8, + 0x1.e62a94p99 + }, + { // Entry 262 + -0x1.fff95e57a0b39bb8afc31a89674dc197p-92, + -0x1.e62448p8, + 0x1.e62a94p99 + }, + { // Entry 263 + 0x1.0e06f7000a4e54e7181ed79d635dead3p0, + 0x1.e783d4p-1, + 0x1.148cf8p-1 + }, + { // Entry 264 + -0x1.0e06f7000a4e54e7181ed79d635dead3p0, + -0x1.e783d4p-1, + 0x1.148cf8p-1 + }, + { // Entry 265 + 0x1.fea63fbd167cf3f4fa0987d1e28cd75fp-4, + 0x1.e7a55ap-1, + 0x1.e66660p2 + }, + { // Entry 266 + -0x1.fea63fbd167cf3f4fa0987d1e28cd75fp-4, + -0x1.e7a55ap-1, + 0x1.e66660p2 + }, + { // Entry 267 + 0x1.d32abcfffffee42f5ad6cc888072e445p0, + 0x1.ece6d4p0, + -0x1.p-1 + }, + { // Entry 268 + -0x1.d32abcfffffee42f5ad6cc888072e445p0, + -0x1.ece6d4p0, + -0x1.p-1 + }, + { // Entry 269 + 0x1.ecac96fad1d02ec25eecde4b7f0b97eap-4, + 0x1.ef1060p-5, + 0x1.p-1 + }, + { // Entry 270 + -0x1.ecac96fad1d02ec25eecde4b7f0b97eap-4, + -0x1.ef1060p-5, + 0x1.p-1 + }, + { // Entry 271 + 0x1.1202c2e6b84549d2bdd30f506adfa9d4p0, + 0x1.f07bd2p9, + 0x1.0f83dcp9 + }, + { // Entry 272 + -0x1.1202c2e6b84549d2bdd30f506adfa9d4p0, + -0x1.f07bd2p9, + 0x1.0f83dcp9 + }, + { // Entry 273 + 0x1.ffe7d9701b27043f401f2771fcff61aap-6, + 0x1.fddffep15, + 0x1.fdcd90p20 + }, + { // Entry 274 + -0x1.ffe7d9701b27043f401f2771fcff61aap-6, + -0x1.fddffep15, + 0x1.fdcd90p20 + }, + { // Entry 275 + 0x1.919c94434fc91fb77041e0d4eaadf614p-1, + 0x1.fefffep-10, + 0x1.0003p-9 + }, + { // Entry 276 + -0x1.919c94434fc91fb77041e0d4eaadf614p-1, + -0x1.fefffep-10, + 0x1.0003p-9 + }, + { // Entry 277 + 0x1.1b57780820085bc0391cbd61b2fd2335p0, + 0x1.ff8ffep-20, + 0x1.000088p-20 + }, + { // Entry 278 + -0x1.1b57780820085bc0391cbd61b2fd2335p0, + -0x1.ff8ffep-20, + 0x1.000088p-20 + }, + { // Entry 279 + 0x1.ff976af6e817ac0b343cc79da075b8a8p-6, + 0x1.ffc0p-139, + 0x1.fffep-134 + }, + { // Entry 280 + -0x1.ff976af6e817ac0b343cc79da075b8a8p-6, + -0x1.ffc0p-139, + 0x1.fffep-134 + }, + { // Entry 281 + 0x1.ff7fc3e4933e894c72260e0533856313p-4, + 0x1.fff77ep-5, + 0x1.fdcd2ep-2 + }, + { // Entry 282 + -0x1.ff7fc3e4933e894c72260e0533856313p-4, + -0x1.fff77ep-5, + 0x1.fdcd2ep-2 + }, + { // Entry 283 + 0x1.ff571a1535e84a3ed0617f7c8bd43c9dp-5, + 0x1.ffffdep-3, + 0x1.fffe7ep1 + }, + { // Entry 284 + -0x1.ff571a1535e84a3ed0617f7c8bd43c9dp-5, + -0x1.ffffdep-3, + 0x1.fffe7ep1 + }, + { // Entry 285 + 0x1.fffffdfffff7ffffdfffff7ffffdffffp-127, + 0x1.fffff6p0, + 0x1.fffff8p126 + }, + { // Entry 286 + -0x1.fffffdfffff7ffffdfffff7ffffdffffp-127, + -0x1.fffff6p0, + 0x1.fffff8p126 + }, + { // Entry 287 + 0x1.ffffec000077fffd05556b3554a0155bp-34, + 0x1.fffff8p-2, + 0x1.000006p32 + }, + { // Entry 288 + -0x1.ffffec000077fffd05556b3554a0155bp-34, + -0x1.fffff8p-2, + 0x1.000006p32 + }, + { // Entry 289 + 0x1.55554fffffffffffffffffffffffffffp-104, + 0x1.fffff8p-127, + 0x1.80p-23 + }, + { // Entry 290 + -0x1.55554fffffffffffffffffffffffffffp-104, + -0x1.fffff8p-127, + 0x1.80p-23 + }, + { // Entry 291 + 0x1.ff54beeda807aa4ec5698ce8cc7dcba8p-2, + 0x1.fffffcp-1, + 0x1.d55552p0 + }, + { // Entry 292 + -0x1.ff54beeda807aa4ec5698ce8cc7dcba8p-2, + -0x1.fffffcp-1, + 0x1.d55552p0 + }, + { // Entry 293 + 0x1.fffff800000fffffe000003fffff80p-129, + 0x1.fffffcp-2, + 0x1.000002p127 + }, + { // Entry 294 + -0x1.fffff800000fffffe000003fffff80p-129, + -0x1.fffffcp-2, + 0x1.000002p127 + }, + { // Entry 295 + 0x1.d7625deb9d3d113e0be1ba5dac42e6c0p-2, + 0x1.fffffcp-2, + 0x1.022228p0 + }, + { // Entry 296 + -0x1.d7625deb9d3d113e0be1ba5dac42e6c0p-2, + -0x1.fffffcp-2, + 0x1.022228p0 + }, + { // Entry 297 + 0x1.0c30b75fc8b0637fcbaf3ed21f47bbd5p-118, + 0x1.fffffcp-122, + 0x1.e8ba40p-4 + }, + { // Entry 298 + -0x1.0c30b75fc8b0637fcbaf3ed21f47bbd5p-118, + -0x1.fffffcp-122, + 0x1.e8ba40p-4 + }, + { // Entry 299 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-126, + 0x1.p1 + }, + { // Entry 300 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-126, + 0x1.p1 + }, + { // Entry 301 + 0x1.f5b748fc32492f9b0e1a9e29c7b40a45p-3, + 0x1.fffffcp20, + 0x1.00000ap23 + }, + { // Entry 302 + -0x1.f5b748fc32492f9b0e1a9e29c7b40a45p-3, + -0x1.fffffcp20, + 0x1.00000ap23 + }, + { // Entry 303 + 0x1.e8009efffc72402f56046bbb3775db7ep-2, + 0x1.6e6d52p-2, + 0x1.62e42ep-1 + }, + { // Entry 304 + -0x1.e8009efffc72402f56046bbb3775db7ep-2, + -0x1.6e6d52p-2, + 0x1.62e42ep-1 + }, + { // Entry 305 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p0, + -0x1.p0 + }, + { // Entry 306 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p0, + -0x1.p0 + }, + { // Entry 307 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 308 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p0, + 0x1.p0 + }, + { // Entry 309 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p0, + -0x1.p0 + }, + { // Entry 310 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p0, + -0x1.p0 + }, + { // Entry 311 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p0, + 0x1.p0 + }, + { // Entry 312 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 313 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p0, + 0x1.p0 + }, + { // Entry 314 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 315 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.p0, + 0x1.p3 + }, + { // Entry 316 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.p0, + 0x1.p3 + }, + { // Entry 317 + 0x1.7249faa996a216a33079d20319e727c3p0, + 0x1.p3, + 0x1.p0 + }, + { // Entry 318 + -0x1.7249faa996a216a33079d20319e727c3p0, + -0x1.p3, + 0x1.p0 + }, + { // Entry 319 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p3, + 0x1.p3 + }, + { // Entry 320 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p3, + 0x1.p3 + }, + { // Entry 321 + 0x1.ffffd5555bbbba9729ab7aac089473a3p-10, + 0x1.p0, + 0x1.p9 + }, + { // Entry 322 + -0x1.ffffd5555bbbba9729ab7aac089473a3p-10, + -0x1.p0, + 0x1.p9 + }, + { // Entry 323 + 0x1.fffff55555bbbbb72972d00cfde752f9p-11, + 0x1.p0, + 0x1.p10 + }, + { // Entry 324 + -0x1.fffff55555bbbbb72972d00cfde752f9p-11, + -0x1.p0, + 0x1.p10 + }, + { // Entry 325 + 0x1.fff555bbb729ab77cf18ac802beec090p-7, + 0x1.p3, + 0x1.p9 + }, + { // Entry 326 + -0x1.fff555bbb729ab77cf18ac802beec090p-7, + -0x1.p3, + 0x1.p9 + }, + { // Entry 327 + 0x1.fffd555bbba972d00c46a3f77cc15e8ep-8, + 0x1.p3, + 0x1.p10 + }, + { // Entry 328 + -0x1.fffd555bbba972d00c46a3f77cc15e8ep-8, + -0x1.p3, + 0x1.p10 + }, + { // Entry 329 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.p0, + 0x1.p100 + }, + { // Entry 330 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.p0, + 0x1.p100 + }, + { // Entry 331 + 0x1.ffffffffffffffffffffffffffffffffp-102, + 0x1.p0, + 0x1.p101 + }, + { // Entry 332 + -0x1.ffffffffffffffffffffffffffffffffp-102, + -0x1.p0, + 0x1.p101 + }, + { // Entry 333 + 0x1.ffffffffffffffffffffffffffffffffp-98, + 0x1.p3, + 0x1.p100 + }, + { // Entry 334 + -0x1.ffffffffffffffffffffffffffffffffp-98, + -0x1.p3, + 0x1.p100 + }, + { // Entry 335 + 0x1.ffffffffffffffffffffffffffffffffp-99, + 0x1.p3, + 0x1.p101 + }, + { // Entry 336 + -0x1.ffffffffffffffffffffffffffffffffp-99, + -0x1.p3, + 0x1.p101 + }, + { // Entry 337 + 0x1.919fb54eed7a957ae3c25a3856b61485p0, + 0x1.p9, + 0x1.p0 + }, + { // Entry 338 + -0x1.919fb54eed7a957ae3c25a3856b61485p0, + -0x1.p9, + 0x1.p0 + }, + { // Entry 339 + 0x1.8e1fca98cb63311299ee93be01605c21p0, + 0x1.p9, + 0x1.p3 + }, + { // Entry 340 + -0x1.8e1fca98cb63311299ee93be01605c21p0, + -0x1.p9, + 0x1.p3 + }, + { // Entry 341 + 0x1.91dfb5459826ccf212a796bd00187cb7p0, + 0x1.p10, + 0x1.p0 + }, + { // Entry 342 + -0x1.91dfb5459826ccf212a796bd00187cb7p0, + -0x1.p10, + 0x1.p0 + }, + { // Entry 343 + 0x1.901fb7eee715daf6b9807e730a3b7843p0, + 0x1.p10, + 0x1.p3 + }, + { // Entry 344 + -0x1.901fb7eee715daf6b9807e730a3b7843p0, + -0x1.p10, + 0x1.p3 + }, + { // Entry 345 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p9, + 0x1.p9 + }, + { // Entry 346 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p9, + 0x1.p9 + }, + { // Entry 347 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.p9, + 0x1.p10 + }, + { // Entry 348 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.p9, + 0x1.p10 + }, + { // Entry 349 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.p10, + 0x1.p9 + }, + { // Entry 350 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.p10, + 0x1.p9 + }, + { // Entry 351 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p10, + 0x1.p10 + }, + { // Entry 352 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p10, + 0x1.p10 + }, + { // Entry 353 + 0x1.ffffffffffffffffffffffffffffffffp-92, + 0x1.p9, + 0x1.p100 + }, + { // Entry 354 + -0x1.ffffffffffffffffffffffffffffffffp-92, + -0x1.p9, + 0x1.p100 + }, + { // Entry 355 + 0x1.ffffffffffffffffffffffffffffffffp-93, + 0x1.p9, + 0x1.p101 + }, + { // Entry 356 + -0x1.ffffffffffffffffffffffffffffffffp-93, + -0x1.p9, + 0x1.p101 + }, + { // Entry 357 + 0x1.ffffffffffffffffffffffffffffffffp-91, + 0x1.p10, + 0x1.p100 + }, + { // Entry 358 + -0x1.ffffffffffffffffffffffffffffffffp-91, + -0x1.p10, + 0x1.p100 + }, + { // Entry 359 + 0x1.ffffffffffffffffffffffffffffffffp-92, + 0x1.p10, + 0x1.p101 + }, + { // Entry 360 + -0x1.ffffffffffffffffffffffffffffffffp-92, + -0x1.p10, + 0x1.p101 + }, + { // Entry 361 + 0x1.921fb54442d18469898cc516f1b839a2p0, + 0x1.p100, + 0x1.p0 + }, + { // Entry 362 + -0x1.921fb54442d18469898cc516f1b839a2p0, + -0x1.p100, + 0x1.p0 + }, + { // Entry 363 + 0x1.921fb54442d18469898cc51681b839a2p0, + 0x1.p100, + 0x1.p3 + }, + { // Entry 364 + -0x1.921fb54442d18469898cc51681b839a2p0, + -0x1.p100, + 0x1.p3 + }, + { // Entry 365 + 0x1.921fb54442d18469898cc516f9b839a2p0, + 0x1.p101, + 0x1.p0 + }, + { // Entry 366 + -0x1.921fb54442d18469898cc516f9b839a2p0, + -0x1.p101, + 0x1.p0 + }, + { // Entry 367 + 0x1.921fb54442d18469898cc516c1b839a2p0, + 0x1.p101, + 0x1.p3 + }, + { // Entry 368 + -0x1.921fb54442d18469898cc516c1b839a2p0, + -0x1.p101, + 0x1.p3 + }, + { // Entry 369 + 0x1.921fb54442d18469898cc4f701b839a2p0, + 0x1.p100, + 0x1.p9 + }, + { // Entry 370 + -0x1.921fb54442d18469898cc4f701b839a2p0, + -0x1.p100, + 0x1.p9 + }, + { // Entry 371 + 0x1.921fb54442d18469898cc4d701b839a2p0, + 0x1.p100, + 0x1.p10 + }, + { // Entry 372 + -0x1.921fb54442d18469898cc4d701b839a2p0, + -0x1.p100, + 0x1.p10 + }, + { // Entry 373 + 0x1.921fb54442d18469898cc50701b839a2p0, + 0x1.p101, + 0x1.p9 + }, + { // Entry 374 + -0x1.921fb54442d18469898cc50701b839a2p0, + -0x1.p101, + 0x1.p9 + }, + { // Entry 375 + 0x1.921fb54442d18469898cc4f701b839a2p0, + 0x1.p101, + 0x1.p10 + }, + { // Entry 376 + -0x1.921fb54442d18469898cc4f701b839a2p0, + -0x1.p101, + 0x1.p10 + }, + { // Entry 377 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p100, + 0x1.p100 + }, + { // Entry 378 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p100, + 0x1.p100 + }, + { // Entry 379 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.p100, + 0x1.p101 + }, + { // Entry 380 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.p100, + 0x1.p101 + }, + { // Entry 381 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.p101, + 0x1.p100 + }, + { // Entry 382 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.p101, + 0x1.p100 + }, + { // Entry 383 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p101, + 0x1.p101 + }, + { // Entry 384 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p101, + 0x1.p101 + }, + { // Entry 385 + -0.0f, + -0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 386 + 0.0f, + 0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 387 + -0.0f, + -0x1.p-149, + 0x1.p1 + }, + { // Entry 388 + 0.0f, + 0x1.p-149, + 0x1.p1 + }, + { // Entry 389 + -0.0f, + -0x1.p-149, + 0x1.000002p1 + }, + { // Entry 390 + 0.0f, + 0x1.p-149, + 0x1.000002p1 + }, + { // Entry 391 + 0.0, + 0.0, + 0x1.fffffep0 + }, + { // Entry 392 + 0.0, + 0.0, + 0x1.p1 + }, + { // Entry 393 + 0.0, + 0.0, + 0x1.000002p1 + }, + { // Entry 394 + 0.0f, + 0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 395 + -0.0f, + -0x1.p-149, + 0x1.fffffep0 + }, + { // Entry 396 + 0.0f, + 0x1.p-149, + 0x1.p1 + }, + { // Entry 397 + -0.0f, + -0x1.p-149, + 0x1.p1 + }, + { // Entry 398 + 0.0f, + 0x1.p-149, + 0x1.000002p1 + }, + { // Entry 399 + -0.0f, + -0x1.p-149, + 0x1.000002p1 + }, + { // Entry 400 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffep-4, + 0x1.fffffep0 + }, + { // Entry 401 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffep-4, + 0x1.fffffep0 + }, + { // Entry 402 + 0x1.ff55b974cde098738e59c07aa48dd110p-5, + 0x1.fffffep-4, + 0x1.p1 + }, + { // Entry 403 + -0x1.ff55b974cde098738e59c07aa48dd110p-5, + -0x1.fffffep-4, + 0x1.p1 + }, + { // Entry 404 + 0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + 0x1.fffffep-4, + 0x1.000002p1 + }, + { // Entry 405 + -0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + -0x1.fffffep-4, + 0x1.000002p1 + }, + { // Entry 406 + 0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + 0x1.p-3, + 0x1.fffffep0 + }, + { // Entry 407 + -0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + -0x1.p-3, + 0x1.fffffep0 + }, + { // Entry 408 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.p-3, + 0x1.p1 + }, + { // Entry 409 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.p-3, + 0x1.p1 + }, + { // Entry 410 + 0x1.ff55b776cbea888962afd8276c01a25ep-5, + 0x1.p-3, + 0x1.000002p1 + }, + { // Entry 411 + -0x1.ff55b776cbea888962afd8276c01a25ep-5, + -0x1.p-3, + 0x1.000002p1 + }, + { // Entry 412 + 0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + 0x1.000002p-3, + 0x1.fffffep0 + }, + { // Entry 413 + -0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + -0x1.000002p-3, + 0x1.fffffep0 + }, + { // Entry 414 + 0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + 0x1.000002p-3, + 0x1.p1 + }, + { // Entry 415 + -0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + -0x1.000002p-3, + 0x1.p1 + }, + { // Entry 416 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.000002p-3, + 0x1.000002p1 + }, + { // Entry 417 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.000002p-3, + 0x1.000002p1 + }, + { // Entry 418 + -0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + -0x1.000002p-3, + 0x1.fffffep0 + }, + { // Entry 419 + 0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + 0x1.000002p-3, + 0x1.fffffep0 + }, + { // Entry 420 + -0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + -0x1.000002p-3, + 0x1.p1 + }, + { // Entry 421 + 0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + 0x1.000002p-3, + 0x1.p1 + }, + { // Entry 422 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.000002p-3, + 0x1.000002p1 + }, + { // Entry 423 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.000002p-3, + 0x1.000002p1 + }, + { // Entry 424 + -0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + -0x1.p-3, + 0x1.fffffep0 + }, + { // Entry 425 + 0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + 0x1.p-3, + 0x1.fffffep0 + }, + { // Entry 426 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.p-3, + 0x1.p1 + }, + { // Entry 427 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.p-3, + 0x1.p1 + }, + { // Entry 428 + -0x1.ff55b776cbea888962afd8276c01a25ep-5, + -0x1.p-3, + 0x1.000002p1 + }, + { // Entry 429 + 0x1.ff55b776cbea888962afd8276c01a25ep-5, + 0x1.p-3, + 0x1.000002p1 + }, + { // Entry 430 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffep-4, + 0x1.fffffep0 + }, + { // Entry 431 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffep-4, + 0x1.fffffep0 + }, + { // Entry 432 + -0x1.ff55b974cde098738e59c07aa48dd110p-5, + -0x1.fffffep-4, + 0x1.p1 + }, + { // Entry 433 + 0x1.ff55b974cde098738e59c07aa48dd110p-5, + 0x1.fffffep-4, + 0x1.p1 + }, + { // Entry 434 + -0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + -0x1.fffffep-4, + 0x1.000002p1 + }, + { // Entry 435 + 0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + 0x1.fffffep-4, + 0x1.000002p1 + }, + { // Entry 436 + 0x1.a271f5940186465d406645186f3ff94ap-2, + 0x1.bb67acp-1, + 0x1.fffffep0 + }, + { // Entry 437 + -0x1.a271f5940186465d406645186f3ff94ap-2, + -0x1.bb67acp-1, + 0x1.fffffep0 + }, + { // Entry 438 + 0x1.a271f41e9cbda3a2694ca4df76dc4a86p-2, + 0x1.bb67acp-1, + 0x1.p1 + }, + { // Entry 439 + -0x1.a271f41e9cbda3a2694ca4df76dc4a86p-2, + -0x1.bb67acp-1, + 0x1.p1 + }, + { // Entry 440 + 0x1.a271f133d333bccb9aba4067b1d551a2p-2, + 0x1.bb67acp-1, + 0x1.000002p1 + }, + { // Entry 441 + -0x1.a271f133d333bccb9aba4067b1d551a2p-2, + -0x1.bb67acp-1, + 0x1.000002p1 + }, + { // Entry 442 + 0x1.a271f74329f3af14ab02f72e14627e3ep-2, + 0x1.bb67aep-1, + 0x1.fffffep0 + }, + { // Entry 443 + -0x1.a271f74329f3af14ab02f72e14627e3ep-2, + -0x1.bb67aep-1, + 0x1.fffffep0 + }, + { // Entry 444 + 0x1.a271f5cdc529e5591cbe01f0dff5d436p-2, + 0x1.bb67aep-1, + 0x1.p1 + }, + { // Entry 445 + -0x1.a271f5cdc529e5591cbe01f0dff5d436p-2, + -0x1.bb67aep-1, + 0x1.p1 + }, + { // Entry 446 + 0x1.a271f2e2fb9db080e2f78cbaa7ae76dap-2, + 0x1.bb67aep-1, + 0x1.000002p1 + }, + { // Entry 447 + -0x1.a271f2e2fb9db080e2f78cbaa7ae76dap-2, + -0x1.bb67aep-1, + 0x1.000002p1 + }, + { // Entry 448 + 0x1.a271f8f252607a942b743a29251f41b3p-2, + 0x1.bb67b0p-1, + 0x1.fffffep0 + }, + { // Entry 449 + -0x1.a271f8f252607a942b743a29251f41b3p-2, + -0x1.bb67b0p-1, + 0x1.fffffep0 + }, + { // Entry 450 + 0x1.a271f77ced9589d7e7784be8c59b289ep-2, + 0x1.bb67b0p-1, + 0x1.p1 + }, + { // Entry 451 + -0x1.a271f77ced9589d7e7784be8c59b289ep-2, + -0x1.bb67b0p-1, + 0x1.p1 + }, + { // Entry 452 + 0x1.a271f492240706fe45667de97ee1051bp-2, + 0x1.bb67b0p-1, + 0x1.000002p1 + }, + { // Entry 453 + -0x1.a271f492240706fe45667de97ee1051bp-2, + -0x1.bb67b0p-1, + 0x1.000002p1 + }, + { // Entry 454 + -0x1.a271f8f252607a942b743a29251f41b3p-2, + -0x1.bb67b0p-1, + 0x1.fffffep0 + }, + { // Entry 455 + 0x1.a271f8f252607a942b743a29251f41b3p-2, + 0x1.bb67b0p-1, + 0x1.fffffep0 + }, + { // Entry 456 + -0x1.a271f77ced9589d7e7784be8c59b289ep-2, + -0x1.bb67b0p-1, + 0x1.p1 + }, + { // Entry 457 + 0x1.a271f77ced9589d7e7784be8c59b289ep-2, + 0x1.bb67b0p-1, + 0x1.p1 + }, + { // Entry 458 + -0x1.a271f492240706fe45667de97ee1051bp-2, + -0x1.bb67b0p-1, + 0x1.000002p1 + }, + { // Entry 459 + 0x1.a271f492240706fe45667de97ee1051bp-2, + 0x1.bb67b0p-1, + 0x1.000002p1 + }, + { // Entry 460 + -0x1.a271f74329f3af14ab02f72e14627e3ep-2, + -0x1.bb67aep-1, + 0x1.fffffep0 + }, + { // Entry 461 + 0x1.a271f74329f3af14ab02f72e14627e3ep-2, + 0x1.bb67aep-1, + 0x1.fffffep0 + }, + { // Entry 462 + -0x1.a271f5cdc529e5591cbe01f0dff5d436p-2, + -0x1.bb67aep-1, + 0x1.p1 + }, + { // Entry 463 + 0x1.a271f5cdc529e5591cbe01f0dff5d436p-2, + 0x1.bb67aep-1, + 0x1.p1 + }, + { // Entry 464 + -0x1.a271f2e2fb9db080e2f78cbaa7ae76dap-2, + -0x1.bb67aep-1, + 0x1.000002p1 + }, + { // Entry 465 + 0x1.a271f2e2fb9db080e2f78cbaa7ae76dap-2, + 0x1.bb67aep-1, + 0x1.000002p1 + }, + { // Entry 466 + -0x1.a271f5940186465d406645186f3ff94ap-2, + -0x1.bb67acp-1, + 0x1.fffffep0 + }, + { // Entry 467 + 0x1.a271f5940186465d406645186f3ff94ap-2, + 0x1.bb67acp-1, + 0x1.fffffep0 + }, + { // Entry 468 + -0x1.a271f41e9cbda3a2694ca4df76dc4a86p-2, + -0x1.bb67acp-1, + 0x1.p1 + }, + { // Entry 469 + 0x1.a271f41e9cbda3a2694ca4df76dc4a86p-2, + 0x1.bb67acp-1, + 0x1.p1 + }, + { // Entry 470 + -0x1.a271f133d333bccb9aba4067b1d551a2p-2, + -0x1.bb67acp-1, + 0x1.000002p1 + }, + { // Entry 471 + 0x1.a271f133d333bccb9aba4067b1d551a2p-2, + 0x1.bb67acp-1, + 0x1.000002p1 + }, + { // Entry 472 + 0x1.e1fc087d068cbfd25c64d0da9961de0dp-1, + 0x1.5f89e0p1, + 0x1.fffffep0 + }, + { // Entry 473 + -0x1.e1fc087d068cbfd25c64d0da9961de0dp-1, + -0x1.5f89e0p1, + 0x1.fffffep0 + }, + { // Entry 474 + 0x1.e1fc078961a1b8d58eff0ef3573e5ebbp-1, + 0x1.5f89e0p1, + 0x1.p1 + }, + { // Entry 475 + -0x1.e1fc078961a1b8d58eff0ef3573e5ebbp-1, + -0x1.5f89e0p1, + 0x1.p1 + }, + { // Entry 476 + 0x1.e1fc05a217cda574231fab7ef56a802ep-1, + 0x1.5f89e0p1, + 0x1.000002p1 + }, + { // Entry 477 + -0x1.e1fc05a217cda574231fab7ef56a802ep-1, + -0x1.5f89e0p1, + 0x1.000002p1 + }, + { // Entry 478 + 0x1.e1fc09dfe1de87be63d2efa76aedeef1p-1, + 0x1.5f89e2p1, + 0x1.fffffep0 + }, + { // Entry 479 + -0x1.e1fc09dfe1de87be63d2efa76aedeef1p-1, + -0x1.5f89e2p1, + 0x1.fffffep0 + }, + { // Entry 480 + 0x1.e1fc08ec3cf3edab43c88895dc8bd149p-1, + 0x1.5f89e2p1, + 0x1.p1 + }, + { // Entry 481 + -0x1.e1fc08ec3cf3edab43c88895dc8bd149p-1, + -0x1.5f89e2p1, + 0x1.p1 + }, + { // Entry 482 + 0x1.e1fc0704f320b41d2df91c8fc7a785a6p-1, + 0x1.5f89e2p1, + 0x1.000002p1 + }, + { // Entry 483 + -0x1.e1fc0704f320b41d2df91c8fc7a785a6p-1, + -0x1.5f89e2p1, + 0x1.000002p1 + }, + { // Entry 484 + 0x1.e1fc0b42bd2dac34dc336ebe1a5dd639p-1, + 0x1.5f89e4p1, + 0x1.fffffep0 + }, + { // Entry 485 + -0x1.e1fc0b42bd2dac34dc336ebe1a5dd639p-1, + -0x1.5f89e4p1, + 0x1.fffffep0 + }, + { // Entry 486 + 0x1.e1fc0a4f18437f0b6a89382bec836a03p-1, + 0x1.5f89e4p1, + 0x1.p1 + }, + { // Entry 487 + -0x1.e1fc0a4f18437f0b6a89382bec836a03p-1, + -0x1.5f89e4p1, + 0x1.p1 + }, + { // Entry 488 + 0x1.e1fc0867ce711f50acd36ef1986a9ed3p-1, + 0x1.5f89e4p1, + 0x1.000002p1 + }, + { // Entry 489 + -0x1.e1fc0867ce711f50acd36ef1986a9ed3p-1, + -0x1.5f89e4p1, + 0x1.000002p1 + }, + { // Entry 490 + -0x1.e1fc0b42bd2dac34dc336ebe1a5dd639p-1, + -0x1.5f89e4p1, + 0x1.fffffep0 + }, + { // Entry 491 + 0x1.e1fc0b42bd2dac34dc336ebe1a5dd639p-1, + 0x1.5f89e4p1, + 0x1.fffffep0 + }, + { // Entry 492 + -0x1.e1fc0a4f18437f0b6a89382bec836a03p-1, + -0x1.5f89e4p1, + 0x1.p1 + }, + { // Entry 493 + 0x1.e1fc0a4f18437f0b6a89382bec836a03p-1, + 0x1.5f89e4p1, + 0x1.p1 + }, + { // Entry 494 + -0x1.e1fc0867ce711f50acd36ef1986a9ed3p-1, + -0x1.5f89e4p1, + 0x1.000002p1 + }, + { // Entry 495 + 0x1.e1fc0867ce711f50acd36ef1986a9ed3p-1, + 0x1.5f89e4p1, + 0x1.000002p1 + }, + { // Entry 496 + -0x1.e1fc09dfe1de87be63d2efa76aedeef1p-1, + -0x1.5f89e2p1, + 0x1.fffffep0 + }, + { // Entry 497 + 0x1.e1fc09dfe1de87be63d2efa76aedeef1p-1, + 0x1.5f89e2p1, + 0x1.fffffep0 + }, + { // Entry 498 + -0x1.e1fc08ec3cf3edab43c88895dc8bd149p-1, + -0x1.5f89e2p1, + 0x1.p1 + }, + { // Entry 499 + 0x1.e1fc08ec3cf3edab43c88895dc8bd149p-1, + 0x1.5f89e2p1, + 0x1.p1 + }, + { // Entry 500 + -0x1.e1fc0704f320b41d2df91c8fc7a785a6p-1, + -0x1.5f89e2p1, + 0x1.000002p1 + }, + { // Entry 501 + 0x1.e1fc0704f320b41d2df91c8fc7a785a6p-1, + 0x1.5f89e2p1, + 0x1.000002p1 + }, + { // Entry 502 + -0x1.e1fc087d068cbfd25c64d0da9961de0dp-1, + -0x1.5f89e0p1, + 0x1.fffffep0 + }, + { // Entry 503 + 0x1.e1fc087d068cbfd25c64d0da9961de0dp-1, + 0x1.5f89e0p1, + 0x1.fffffep0 + }, + { // Entry 504 + -0x1.e1fc078961a1b8d58eff0ef3573e5ebbp-1, + -0x1.5f89e0p1, + 0x1.p1 + }, + { // Entry 505 + 0x1.e1fc078961a1b8d58eff0ef3573e5ebbp-1, + 0x1.5f89e0p1, + 0x1.p1 + }, + { // Entry 506 + -0x1.e1fc05a217cda574231fab7ef56a802ep-1, + -0x1.5f89e0p1, + 0x1.000002p1 + }, + { // Entry 507 + 0x1.e1fc05a217cda574231fab7ef56a802ep-1, + 0x1.5f89e0p1, + 0x1.000002p1 + }, + { // Entry 508 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 509 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 510 + 0x1.921fb44442d1046989621a6c570d8f04p-1, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 511 + -0x1.921fb44442d1046989621a6c570d8f04p-1, + -0x1.fffffep0, + 0x1.p1 + }, + { // Entry 512 + 0x1.921fb24442d304698b0cc51401b839c8p-1, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 513 + -0x1.921fb24442d304698b0cc51401b839c8p-1, + -0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 514 + 0x1.921fb64442d2046989b76fc1ac62e440p-1, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 515 + -0x1.921fb64442d2046989b76fc1ac62e440p-1, + -0x1.p1, + 0x1.fffffep0 + }, + { // Entry 516 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p1, + 0x1.p1 + }, + { // Entry 517 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p1, + 0x1.p1 + }, + { // Entry 518 + 0x1.921fb34442d3846988376fc1ac62e5e6p-1, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 519 + -0x1.921fb34442d3846988376fc1ac62e5e6p-1, + -0x1.p1, + 0x1.000002p1 + }, + { // Entry 520 + 0x1.921fb84442d00469880cc51a01b8397bp-1, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 521 + -0x1.921fb84442d00469880cc51a01b8397bp-1, + -0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 522 + 0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 523 + -0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + -0x1.000002p1, + 0x1.p1 + }, + { // Entry 524 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 525 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 526 + 0x1.ffffffd555555bbbbbba972972d00dp-14, + 0x1.fffffep-13, + 0x1.fffffep0 + }, + { // Entry 527 + -0x1.ffffffd555555bbbbbba972972d00dp-14, + -0x1.fffffep-13, + 0x1.fffffep0 + }, + { // Entry 528 + 0x1.fffffdd55555dbbbbb1a9729e57ab751p-14, + 0x1.fffffep-13, + 0x1.p1 + }, + { // Entry 529 + -0x1.fffffdd55555dbbbbb1a9729e57ab751p-14, + -0x1.fffffep-13, + 0x1.p1 + }, + { // Entry 530 + 0x1.fffff9d55562dbbb9bda97790acf3db2p-14, + 0x1.fffffep-13, + 0x1.000002p1 + }, + { // Entry 531 + -0x1.fffff9d55562dbbb9bda97790acf3db2p-14, + -0x1.fffffep-13, + 0x1.000002p1 + }, + { // Entry 532 + 0x1.000000eaaaab6dddde6d4b951012b14cp-13, + 0x1.p-12, + 0x1.fffffep0 + }, + { // Entry 533 + -0x1.000000eaaaab6dddde6d4b951012b14cp-13, + -0x1.p-12, + 0x1.fffffep0 + }, + { // Entry 534 + 0x1.ffffffd555555bbbbbba972972d00dp-14, + 0x1.p-12, + 0x1.p1 + }, + { // Entry 535 + -0x1.ffffffd555555bbbbbba972972d00dp-14, + -0x1.p-12, + 0x1.p1 + }, + { // Entry 536 + 0x1.fffffbd5555e5bbba77a97585824f2d2p-14, + 0x1.p-12, + 0x1.000002p1 + }, + { // Entry 537 + -0x1.fffffbd5555e5bbba77a97585824f2d2p-14, + -0x1.p-12, + 0x1.000002p1 + }, + { // Entry 538 + 0x1.000002eaaaacedddde0d4b917d68009bp-13, + 0x1.000002p-12, + 0x1.fffffep0 + }, + { // Entry 539 + -0x1.000002eaaaacedddde0d4b917d68009bp-13, + -0x1.000002p-12, + 0x1.fffffep0 + }, + { // Entry 540 + 0x1.000001eaaaaa2ddddcfd4b9486bd5ca7p-13, + 0x1.000002p-12, + 0x1.p1 + }, + { // Entry 541 + -0x1.000001eaaaaa2ddddcfd4b9486bd5ca7p-13, + -0x1.000002p-12, + 0x1.p1 + }, + { // Entry 542 + 0x1.ffffffd555555bbbbbba972972d00dp-14, + 0x1.000002p-12, + 0x1.000002p1 + }, + { // Entry 543 + -0x1.ffffffd555555bbbbbba972972d00dp-14, + -0x1.000002p-12, + 0x1.000002p1 + }, + { // Entry 544 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 545 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 546 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149, + 0.0 + }, + { // Entry 547 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149, + 0.0 + }, + { // Entry 548 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 549 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 550 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.p-149 + }, + { // Entry 551 + 0.0, + 0.0, + 0.0 + }, + { // Entry 552 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 553 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 554 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 555 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149, + 0.0 + }, + { // Entry 556 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149, + 0.0 + }, + { // Entry 557 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 558 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 559 + -0.0f, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 560 + 0.0f, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 561 + 0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 562 + 0.0f, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 563 + -0.0f, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 564 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 565 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 566 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0, + -0x1.fffffep127 + }, + { // Entry 567 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 568 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 569 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 570 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 571 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0.0 + }, + { // Entry 572 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0.0 + }, + { // Entry 573 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 574 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 575 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 576 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 577 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0.0 + }, + { // Entry 578 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0.0 + }, + { // Entry 579 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 580 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 581 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 582 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 583 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 584 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 585 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.fffffep0, + 0x1.fffffep56 + }, + { // Entry 586 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.fffffep0, + 0x1.fffffep56 + }, + { // Entry 587 + 0x1.fffffdffffffffffffffffffffff5555p-57, + 0x1.fffffep0, + 0x1.p57 + }, + { // Entry 588 + -0x1.fffffdffffffffffffffffffffff5555p-57, + -0x1.fffffep0, + 0x1.p57 + }, + { // Entry 589 + 0x1.fffffa00000bffffe800002ffffef555p-57, + 0x1.fffffep0, + 0x1.000002p57 + }, + { // Entry 590 + -0x1.fffffa00000bffffe800002ffffef555p-57, + -0x1.fffffep0, + 0x1.000002p57 + }, + { // Entry 591 + 0x1.000001000001000001000000ffffabaap-56, + 0x1.p1, + 0x1.fffffep56 + }, + { // Entry 592 + -0x1.000001000001000001000000ffffabaap-56, + -0x1.p1, + 0x1.fffffep56 + }, + { // Entry 593 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.p1, + 0x1.p57 + }, + { // Entry 594 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.p1, + 0x1.p57 + }, + { // Entry 595 + 0x1.fffffc000007fffff000001fffff1555p-57, + 0x1.p1, + 0x1.000002p57 + }, + { // Entry 596 + -0x1.fffffc000007fffff000001fffff1555p-57, + -0x1.p1, + 0x1.000002p57 + }, + { // Entry 597 + 0x1.000003000003000003000002ffffadaap-56, + 0x1.000002p1, + 0x1.fffffep56 + }, + { // Entry 598 + -0x1.000003000003000003000002ffffadaap-56, + -0x1.000002p1, + 0x1.fffffep56 + }, + { // Entry 599 + 0x1.000001ffffffffffffffffffffffaaaap-56, + 0x1.000002p1, + 0x1.p57 + }, + { // Entry 600 + -0x1.000001ffffffffffffffffffffffaaaap-56, + -0x1.000002p1, + 0x1.p57 + }, + { // Entry 601 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.000002p1, + 0x1.000002p57 + }, + { // Entry 602 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.000002p1, + 0x1.000002p57 + }, + { // Entry 603 + -0x1.000003000003000003000002ffffadaap-56, + -0x1.000002p1, + 0x1.fffffep56 + }, + { // Entry 604 + 0x1.000003000003000003000002ffffadaap-56, + 0x1.000002p1, + 0x1.fffffep56 + }, + { // Entry 605 + -0x1.000001ffffffffffffffffffffffaaaap-56, + -0x1.000002p1, + 0x1.p57 + }, + { // Entry 606 + 0x1.000001ffffffffffffffffffffffaaaap-56, + 0x1.000002p1, + 0x1.p57 + }, + { // Entry 607 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.000002p1, + 0x1.000002p57 + }, + { // Entry 608 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.000002p1, + 0x1.000002p57 + }, + { // Entry 609 + -0x1.000001000001000001000000ffffabaap-56, + -0x1.p1, + 0x1.fffffep56 + }, + { // Entry 610 + 0x1.000001000001000001000000ffffabaap-56, + 0x1.p1, + 0x1.fffffep56 + }, + { // Entry 611 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.p1, + 0x1.p57 + }, + { // Entry 612 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.p1, + 0x1.p57 + }, + { // Entry 613 + -0x1.fffffc000007fffff000001fffff1555p-57, + -0x1.p1, + 0x1.000002p57 + }, + { // Entry 614 + 0x1.fffffc000007fffff000001fffff1555p-57, + 0x1.p1, + 0x1.000002p57 + }, + { // Entry 615 + -0x1.ffffffffffffffffffffffffffff5555p-57, + -0x1.fffffep0, + 0x1.fffffep56 + }, + { // Entry 616 + 0x1.ffffffffffffffffffffffffffff5555p-57, + 0x1.fffffep0, + 0x1.fffffep56 + }, + { // Entry 617 + -0x1.fffffdffffffffffffffffffffff5555p-57, + -0x1.fffffep0, + 0x1.p57 + }, + { // Entry 618 + 0x1.fffffdffffffffffffffffffffff5555p-57, + 0x1.fffffep0, + 0x1.p57 + }, + { // Entry 619 + -0x1.fffffa00000bffffe800002ffffef555p-57, + -0x1.fffffep0, + 0x1.000002p57 + }, + { // Entry 620 + 0x1.fffffa00000bffffe800002ffffef555p-57, + 0x1.fffffep0, + 0x1.000002p57 + }, + { // Entry 621 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.fffffep1, + 0x1.fffffep31 + }, + { // Entry 622 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.fffffep1, + 0x1.fffffep31 + }, + { // Entry 623 + 0x1.fffffdfffffffff555557555553555bbp-31, + 0x1.fffffep1, + 0x1.p32 + }, + { // Entry 624 + -0x1.fffffdfffffffff555557555553555bbp-31, + -0x1.fffffep1, + 0x1.p32 + }, + { // Entry 625 + 0x1.fffffa00000bfff53d55b5855374f5c2p-31, + 0x1.fffffep1, + 0x1.000002p32 + }, + { // Entry 626 + -0x1.fffffa00000bfff53d55b5855374f5c2p-31, + -0x1.fffffep1, + 0x1.000002p32 + }, + { // Entry 627 + 0x1.000001000000fffaabaa9aabaa8aabddp-30, + 0x1.p2, + 0x1.fffffep31 + }, + { // Entry 628 + -0x1.000001000000fffaabaa9aabaa8aabddp-30, + -0x1.p2, + 0x1.fffffep31 + }, + { // Entry 629 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.p2, + 0x1.p32 + }, + { // Entry 630 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.p2, + 0x1.p32 + }, + { // Entry 631 + 0x1.fffffc000007fff545559575545515bfp-31, + 0x1.p2, + 0x1.000002p32 + }, + { // Entry 632 + -0x1.fffffc000007fff545559575545515bfp-31, + -0x1.p2, + 0x1.000002p32 + }, + { // Entry 633 + 0x1.000003000002fffaadaa7aada9eaaddbp-30, + 0x1.000002p2, + 0x1.fffffep31 + }, + { // Entry 634 + -0x1.000003000002fffaadaa7aada9eaaddbp-30, + -0x1.000002p2, + 0x1.fffffep31 + }, + { // Entry 635 + 0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + 0x1.000002p2, + 0x1.p32 + }, + { // Entry 636 + -0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + -0x1.000002p2, + 0x1.p32 + }, + { // Entry 637 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.000002p2, + 0x1.000002p32 + }, + { // Entry 638 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.000002p2, + 0x1.000002p32 + }, + { // Entry 639 + -0x1.000003000002fffaadaa7aada9eaaddbp-30, + -0x1.000002p-2, + 0x1.fffffep27 + }, + { // Entry 640 + 0x1.000003000002fffaadaa7aada9eaaddbp-30, + 0x1.000002p-2, + 0x1.fffffep27 + }, + { // Entry 641 + -0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + -0x1.000002p-2, + 0x1.p28 + }, + { // Entry 642 + 0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + 0x1.000002p-2, + 0x1.p28 + }, + { // Entry 643 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.000002p-2, + 0x1.000002p28 + }, + { // Entry 644 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.000002p-2, + 0x1.000002p28 + }, + { // Entry 645 + -0x1.000001000000fffaabaa9aabaa8aabddp-30, + -0x1.p-2, + 0x1.fffffep27 + }, + { // Entry 646 + 0x1.000001000000fffaabaa9aabaa8aabddp-30, + 0x1.p-2, + 0x1.fffffep27 + }, + { // Entry 647 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.p-2, + 0x1.p28 + }, + { // Entry 648 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.p-2, + 0x1.p28 + }, + { // Entry 649 + -0x1.fffffc000007fff545559575545515bfp-31, + -0x1.p-2, + 0x1.000002p28 + }, + { // Entry 650 + 0x1.fffffc000007fff545559575545515bfp-31, + 0x1.p-2, + 0x1.000002p28 + }, + { // Entry 651 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.fffffep-3, + 0x1.fffffep27 + }, + { // Entry 652 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.fffffep-3, + 0x1.fffffep27 + }, + { // Entry 653 + -0x1.fffffdfffffffff555557555553555bbp-31, + -0x1.fffffep-3, + 0x1.p28 + }, + { // Entry 654 + 0x1.fffffdfffffffff555557555553555bbp-31, + 0x1.fffffep-3, + 0x1.p28 + }, + { // Entry 655 + -0x1.fffffa00000bfff53d55b5855374f5c2p-31, + -0x1.fffffep-3, + 0x1.000002p28 + }, + { // Entry 656 + 0x1.fffffa00000bfff53d55b5855374f5c2p-31, + 0x1.fffffep-3, + 0x1.000002p28 + }, + { // Entry 657 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffep2, + 0x1.fffffep2 + }, + { // Entry 658 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffep2, + 0x1.fffffep2 + }, + { // Entry 659 + 0x1.921fb44442d1046989621a6c570d8f04p-1, + 0x1.fffffep2, + 0x1.p3 + }, + { // Entry 660 + -0x1.921fb44442d1046989621a6c570d8f04p-1, + -0x1.fffffep2, + 0x1.p3 + }, + { // Entry 661 + 0x1.921fb24442d304698b0cc51401b839c8p-1, + 0x1.fffffep2, + 0x1.000002p3 + }, + { // Entry 662 + -0x1.921fb24442d304698b0cc51401b839c8p-1, + -0x1.fffffep2, + 0x1.000002p3 + }, + { // Entry 663 + 0x1.921fb64442d2046989b76fc1ac62e440p-1, + 0x1.p3, + 0x1.fffffep2 + }, + { // Entry 664 + -0x1.921fb64442d2046989b76fc1ac62e440p-1, + -0x1.p3, + 0x1.fffffep2 + }, + { // Entry 665 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p3, + 0x1.p3 + }, + { // Entry 666 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p3, + 0x1.p3 + }, + { // Entry 667 + 0x1.921fb34442d3846988376fc1ac62e5e6p-1, + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 668 + -0x1.921fb34442d3846988376fc1ac62e5e6p-1, + -0x1.p3, + 0x1.000002p3 + }, + { // Entry 669 + 0x1.921fb84442d00469880cc51a01b8397bp-1, + 0x1.000002p3, + 0x1.fffffep2 + }, + { // Entry 670 + -0x1.921fb84442d00469880cc51a01b8397bp-1, + -0x1.000002p3, + 0x1.fffffep2 + }, + { // Entry 671 + 0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + 0x1.000002p3, + 0x1.p3 + }, + { // Entry 672 + -0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + -0x1.000002p3, + 0x1.p3 + }, + { // Entry 673 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.000002p3, + 0x1.000002p3 + }, + { // Entry 674 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.000002p3, + 0x1.000002p3 + }, + { // Entry 675 + -0x1.dac67522e883aedcc9c473438e936964p-2, + -0x1.000002p3, + 0x1.fffffep3 + }, + { // Entry 676 + 0x1.dac67522e883aedcc9c473438e936964p-2, + 0x1.000002p3, + 0x1.fffffep3 + }, + { // Entry 677 + -0x1.dac673894ee6e20ffe552cf613035e41p-2, + -0x1.000002p3, + 0x1.p4 + }, + { // Entry 678 + 0x1.dac673894ee6e20ffe552cf613035e41p-2, + 0x1.000002p3, + 0x1.p4 + }, + { // Entry 679 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.000002p3, + 0x1.000002p4 + }, + { // Entry 680 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.000002p3, + 0x1.000002p4 + }, + { // Entry 681 + -0x1.dac671efb54fd7d28ecd5330c89a3d73p-2, + -0x1.p3, + 0x1.fffffep3 + }, + { // Entry 682 + 0x1.dac671efb54fd7d28ecd5330c89a3d73p-2, + 0x1.p3, + 0x1.fffffep3 + }, + { // Entry 683 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.p3, + 0x1.p4 + }, + { // Entry 684 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.p3, + 0x1.p4 + }, + { // Entry 685 + -0x1.dac66d22e886e20ff6fe7a2378baf6f9p-2, + -0x1.p3, + 0x1.000002p4 + }, + { // Entry 686 + 0x1.dac66d22e886e20ff6fe7a2378baf6f9p-2, + 0x1.p3, + 0x1.000002p4 + }, + { // Entry 687 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.fffffep2, + 0x1.fffffep3 + }, + { // Entry 688 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.fffffep2, + 0x1.fffffep3 + }, + { // Entry 689 + -0x1.dac66ebc821b0b05c115b007ee262f78p-2, + -0x1.fffffep2, + 0x1.p4 + }, + { // Entry 690 + 0x1.dac66ebc821b0b05c115b007ee262f78p-2, + 0x1.fffffep2, + 0x1.p4 + }, + { // Entry 691 + -0x1.dac66b894eeee20ff7663e0a055c2460p-2, + -0x1.fffffep2, + 0x1.000002p4 + }, + { // Entry 692 + 0x1.dac66b894eeee20ff7663e0a055c2460p-2, + 0x1.fffffep2, + 0x1.000002p4 + }, + { // Entry 693 + 0x1.72c43fa570aa5c9e564c7f0a5befa484p1, + 0x1.fffffep2, + -0x1.000002p5 + }, + { // Entry 694 + -0x1.72c43fa570aa5c9e564c7f0a5befa484p1, + -0x1.fffffep2, + -0x1.000002p5 + }, + { // Entry 695 + 0x1.72c43f69346ec6ea833e8c8f811d5b23p1, + 0x1.fffffep2, + -0x1.p5 + }, + { // Entry 696 + -0x1.72c43f69346ec6ea833e8c8f811d5b23p1, + -0x1.fffffep2, + -0x1.p5 + }, + { // Entry 697 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.fffffep2, + -0x1.fffffep4 + }, + { // Entry 698 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.fffffep2, + -0x1.fffffep4 + }, + { // Entry 699 + 0x1.72c43f87528c71e0c59cd3cd4eedc91cp1, + 0x1.p3, + -0x1.000002p5 + }, + { // Entry 700 + -0x1.72c43f87528c71e0c59cd3cd4eedc91cp1, + -0x1.p3, + -0x1.000002p5 + }, + { // Entry 701 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.p3, + -0x1.p5 + }, + { // Entry 702 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.p3, + -0x1.p5 + }, + { // Entry 703 + 0x1.72c43f2cf8326c9028ca86607b667a8cp1, + 0x1.p3, + -0x1.fffffep4 + }, + { // Entry 704 + -0x1.72c43f2cf8326c9028ca86607b667a8cp1, + -0x1.p3, + -0x1.fffffep4 + }, + { // Entry 705 + 0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + 0x1.000002p3, + -0x1.000002p5 + }, + { // Entry 706 + -0x1.72c43f4b1650a706dbd3d13842c3f6a5p1, + -0x1.000002p3, + -0x1.000002p5 + }, + { // Entry 707 + 0x1.72c43f0eda1471e0c4cf752a26ca10a6p1, + 0x1.000002p3, + -0x1.p5 + }, + { // Entry 708 + -0x1.72c43f0eda1471e0c4cf752a26ca10a6p1, + -0x1.000002p3, + -0x1.p5 + }, + { // Entry 709 + 0x1.72c43ef0bbf60243faa66eaf95b8eb8ep1, + 0x1.000002p3, + -0x1.fffffep4 + }, + { // Entry 710 + -0x1.72c43ef0bbf60243faa66eaf95b8eb8ep1, + -0x1.000002p3, + -0x1.fffffep4 + }, + { // Entry 711 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.fffffep2, + 0x1.fffffep5 + }, + { // Entry 712 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.fffffep2, + 0x1.fffffep5 + }, + { // Entry 713 + 0x1.fd5ba7b2a374dc8497123b64b398aae2p-4, + 0x1.fffffep2, + 0x1.p6 + }, + { // Entry 714 + -0x1.fd5ba7b2a374dc8497123b64b398aae2p-4, + -0x1.fffffep2, + 0x1.p6 + }, + { // Entry 715 + 0x1.fd5ba3c2647c7ef6c76d6d5ea97bab75p-4, + 0x1.fffffep2, + 0x1.000002p6 + }, + { // Entry 716 + -0x1.fd5ba3c2647c7ef6c76d6d5ea97bab75p-4, + -0x1.fffffep2, + 0x1.000002p6 + }, + { // Entry 717 + 0x1.fd5baba2e27ac4e31ede5c4d3485ebacp-4, + 0x1.p3, + 0x1.fffffep5 + }, + { // Entry 718 + -0x1.fd5baba2e27ac4e31ede5c4d3485ebacp-4, + -0x1.p3, + 0x1.fffffep5 + }, + { // Entry 719 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.p3, + 0x1.p6 + }, + { // Entry 720 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.p3, + 0x1.p6 + }, + { // Entry 721 + 0x1.fd5ba5ba83faad9ea550e6d54b02d0f9p-4, + 0x1.p3, + 0x1.000002p6 + }, + { // Entry 722 + -0x1.fd5ba5ba83faad9ea550e6d54b02d0f9p-4, + -0x1.p3, + 0x1.000002p6 + }, + { // Entry 723 + 0x1.fd5baf932182675568b9d1daf2fd1727p-4, + 0x1.000002p3, + 0x1.fffffep5 + }, + { // Entry 724 + -0x1.fd5baf932182675568b9d1daf2fd1727p-4, + -0x1.000002p3, + 0x1.fffffep5 + }, + { // Entry 725 + 0x1.fd5bad9b01faad9eb46ef9bda99d4fdap-4, + 0x1.000002p3, + 0x1.p6 + }, + { // Entry 726 + -0x1.fd5bad9b01faad9eb46ef9bda99d4fdap-4, + -0x1.000002p3, + 0x1.p6 + }, + { // Entry 727 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.000002p3, + 0x1.000002p6 + }, + { // Entry 728 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.000002p3, + 0x1.000002p6 + }, + { // Entry 729 + -0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + -0x1.000002p3, + 0x1.fffffep6 + }, + { // Entry 730 + 0x1.ff55c16cd5de8a91665b84abb95e0cc7p-5, + 0x1.000002p3, + 0x1.fffffep6 + }, + { // Entry 731 + -0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + -0x1.000002p3, + 0x1.p7 + }, + { // Entry 732 + 0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + 0x1.000002p3, + 0x1.p7 + }, + { // Entry 733 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.000002p3, + 0x1.000002p7 + }, + { // Entry 734 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.000002p3, + 0x1.000002p7 + }, + { // Entry 735 + -0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + -0x1.p3, + 0x1.fffffep6 + }, + { // Entry 736 + 0x1.ff55bd70d1de9a7192507f037e5414bbp-5, + 0x1.p3, + 0x1.fffffep6 + }, + { // Entry 737 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.p3, + 0x1.p7 + }, + { // Entry 738 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.p3, + 0x1.p7 + }, + { // Entry 739 + -0x1.ff55b776cbea888962afd8276c01a25ep-5, + -0x1.p3, + 0x1.000002p7 + }, + { // Entry 740 + 0x1.ff55b776cbea888962afd8276c01a25ep-5, + 0x1.p3, + 0x1.000002p7 + }, + { // Entry 741 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.fffffep2, + 0x1.fffffep6 + }, + { // Entry 742 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.fffffep2, + 0x1.fffffep6 + }, + { // Entry 743 + -0x1.ff55b974cde098738e59c07aa48dd110p-5, + -0x1.fffffep2, + 0x1.p7 + }, + { // Entry 744 + 0x1.ff55b974cde098738e59c07aa48dd110p-5, + 0x1.fffffep2, + 0x1.p7 + }, + { // Entry 745 + -0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + -0x1.fffffep2, + 0x1.000002p7 + }, + { // Entry 746 + 0x1.ff55b578c9f078a33719a85ef29e8a20p-5, + 0x1.fffffep2, + 0x1.000002p7 + }, + { // Entry 747 + 0x1.0468a9467e7938105dfef0f3f2ae89fdp1, + 0x1.fffffep2, + -0x1.000002p2 + }, + { // Entry 748 + -0x1.0468a9467e7938105dfef0f3f2ae89fdp1, + -0x1.fffffep2, + -0x1.000002p2 + }, + { // Entry 749 + 0x1.0468a8e01812bd2f16a00cf199ef647fp1, + 0x1.fffffep2, + -0x1.p2 + }, + { // Entry 750 + -0x1.0468a8e01812bd2f16a00cf199ef647fp1, + -0x1.fffffep2, + -0x1.p2 + }, + { // Entry 751 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.fffffep2, + -0x1.fffffep1 + }, + { // Entry 752 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.fffffep2, + -0x1.fffffep1 + }, + { // Entry 753 + 0x1.0468a9134b459e76c491082a433c8899p1, + 0x1.p3, + -0x1.000002p2 + }, + { // Entry 754 + -0x1.0468a9134b459e76c491082a433c8899p1, + -0x1.p3, + -0x1.000002p2 + }, + { // Entry 755 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.p3, + -0x1.p2 + }, + { // Entry 756 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.p3, + -0x1.p2 + }, + { // Entry 757 + 0x1.0468a879b1ac23957ce9188c7ea0e2c0p1, + 0x1.p3, + -0x1.fffffep1 + }, + { // Entry 758 + -0x1.0468a879b1ac23957ce9188c7ea0e2c0p1, + -0x1.p3, + -0x1.fffffep1 + }, + { // Entry 759 + 0x1.0468a8ace4df610620bf7406afeac012p1, + 0x1.000002p3, + -0x1.000002p2 + }, + { // Entry 760 + -0x1.0468a8ace4df610620bf7406afeac012p1, + -0x1.000002p3, + -0x1.000002p2 + }, + { // Entry 761 + 0x1.0468a8467e799e76c3a631cfeff37bb0p1, + 0x1.000002p3, + -0x1.p2 + }, + { // Entry 762 + -0x1.0468a8467e799e76c3a631cfeff37bb0p1, + -0x1.000002p3, + -0x1.p2 + }, + { // Entry 763 + 0x1.0468a8134b469e76c3b32a4cc187a15dp1, + 0x1.000002p3, + -0x1.fffffep1 + }, + { // Entry 764 + -0x1.0468a8134b469e76c3b32a4cc187a15dp1, + -0x1.000002p3, + -0x1.fffffep1 + }, + { // Entry 765 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.fffffep-103, + 0x1.fffffep-3 + }, + { // Entry 766 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.fffffep-103, + 0x1.fffffep-3 + }, + { // Entry 767 + 0x1.fffffdffffffffffffffffffffffffffp-101, + 0x1.fffffep-103, + 0x1.p-2 + }, + { // Entry 768 + -0x1.fffffdffffffffffffffffffffffffffp-101, + -0x1.fffffep-103, + 0x1.p-2 + }, + { // Entry 769 + 0x1.fffffa00000bffffe800002fffffa0p-101, + 0x1.fffffep-103, + 0x1.000002p-2 + }, + { // Entry 770 + -0x1.fffffa00000bffffe800002fffffa0p-101, + -0x1.fffffep-103, + 0x1.000002p-2 + }, + { // Entry 771 + 0x1.000001000001000001000001000001p-100, + 0x1.p-102, + 0x1.fffffep-3 + }, + { // Entry 772 + -0x1.000001000001000001000001000001p-100, + -0x1.p-102, + 0x1.fffffep-3 + }, + { // Entry 773 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.p-102, + 0x1.p-2 + }, + { // Entry 774 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.p-102, + 0x1.p-2 + }, + { // Entry 775 + 0x1.fffffc000007fffff000001fffffc0p-101, + 0x1.p-102, + 0x1.000002p-2 + }, + { // Entry 776 + -0x1.fffffc000007fffff000001fffffc0p-101, + -0x1.p-102, + 0x1.000002p-2 + }, + { // Entry 777 + 0x1.000003000003000003000003000003p-100, + 0x1.000002p-102, + 0x1.fffffep-3 + }, + { // Entry 778 + -0x1.000003000003000003000003000003p-100, + -0x1.000002p-102, + 0x1.fffffep-3 + }, + { // Entry 779 + 0x1.000001ffffffffffffffffffffffffffp-100, + 0x1.000002p-102, + 0x1.p-2 + }, + { // Entry 780 + -0x1.000001ffffffffffffffffffffffffffp-100, + -0x1.000002p-102, + 0x1.p-2 + }, + { // Entry 781 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.000002p-102, + 0x1.000002p-2 + }, + { // Entry 782 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.000002p-102, + 0x1.000002p-2 + }, + { // Entry 783 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.fffffcp2, + 0x1.fffffcp102 + }, + { // Entry 784 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.fffffcp2, + 0x1.fffffcp102 + }, + { // Entry 785 + 0x1.fffffdfffffdfffffdfffffdfffffdffp-101, + 0x1.fffffcp2, + 0x1.fffffep102 + }, + { // Entry 786 + -0x1.fffffdfffffdfffffdfffffdfffffdffp-101, + -0x1.fffffcp2, + 0x1.fffffep102 + }, + { // Entry 787 + 0x1.fffffbffffffffffffffffffffffffffp-101, + 0x1.fffffcp2, + 0x1.p103 + }, + { // Entry 788 + -0x1.fffffbffffffffffffffffffffffffffp-101, + -0x1.fffffcp2, + 0x1.p103 + }, + { // Entry 789 + 0x1.fffff800000fffffe000003fffff80p-101, + 0x1.fffffcp2, + 0x1.000002p103 + }, + { // Entry 790 + -0x1.fffff800000fffffe000003fffff80p-101, + -0x1.fffffcp2, + 0x1.000002p103 + }, + { // Entry 791 + 0x1.fffff400002fffff400002fffff4p-101, + 0x1.fffffcp2, + 0x1.000004p103 + }, + { // Entry 792 + -0x1.fffff400002fffff400002fffff4p-101, + -0x1.fffffcp2, + 0x1.000004p103 + }, + { // Entry 793 + 0x1.000001000002000004000008000010p-100, + 0x1.fffffep2, + 0x1.fffffcp102 + }, + { // Entry 794 + -0x1.000001000002000004000008000010p-100, + -0x1.fffffep2, + 0x1.fffffcp102 + }, + { // Entry 795 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.fffffep2, + 0x1.fffffep102 + }, + { // Entry 796 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.fffffep2, + 0x1.fffffep102 + }, + { // Entry 797 + 0x1.fffffdffffffffffffffffffffffffffp-101, + 0x1.fffffep2, + 0x1.p103 + }, + { // Entry 798 + -0x1.fffffdffffffffffffffffffffffffffp-101, + -0x1.fffffep2, + 0x1.p103 + }, + { // Entry 799 + 0x1.fffffa00000bffffe800002fffffa0p-101, + 0x1.fffffep2, + 0x1.000002p103 + }, + { // Entry 800 + -0x1.fffffa00000bffffe800002fffffa0p-101, + -0x1.fffffep2, + 0x1.000002p103 + }, + { // Entry 801 + 0x1.fffff6000027ffff6000027ffff6p-101, + 0x1.fffffep2, + 0x1.000004p103 + }, + { // Entry 802 + -0x1.fffff6000027ffff6000027ffff6p-101, + -0x1.fffffep2, + 0x1.000004p103 + }, + { // Entry 803 + 0x1.000002000004000008000010000020p-100, + 0x1.p3, + 0x1.fffffcp102 + }, + { // Entry 804 + -0x1.000002000004000008000010000020p-100, + -0x1.p3, + 0x1.fffffcp102 + }, + { // Entry 805 + 0x1.000001000001000001000001000001p-100, + 0x1.p3, + 0x1.fffffep102 + }, + { // Entry 806 + -0x1.000001000001000001000001000001p-100, + -0x1.p3, + 0x1.fffffep102 + }, + { // Entry 807 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.p3, + 0x1.p103 + }, + { // Entry 808 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.p3, + 0x1.p103 + }, + { // Entry 809 + 0x1.fffffc000007fffff000001fffffc0p-101, + 0x1.p3, + 0x1.000002p103 + }, + { // Entry 810 + -0x1.fffffc000007fffff000001fffffc0p-101, + -0x1.p3, + 0x1.000002p103 + }, + { // Entry 811 + 0x1.fffff800001fffff800001fffff8p-101, + 0x1.p3, + 0x1.000004p103 + }, + { // Entry 812 + -0x1.fffff800001fffff800001fffff8p-101, + -0x1.p3, + 0x1.000004p103 + }, + { // Entry 813 + 0x1.000004000008000010000020000040p-100, + 0x1.000002p3, + 0x1.fffffcp102 + }, + { // Entry 814 + -0x1.000004000008000010000020000040p-100, + -0x1.000002p3, + 0x1.fffffcp102 + }, + { // Entry 815 + 0x1.000003000003000003000003000003p-100, + 0x1.000002p3, + 0x1.fffffep102 + }, + { // Entry 816 + -0x1.000003000003000003000003000003p-100, + -0x1.000002p3, + 0x1.fffffep102 + }, + { // Entry 817 + 0x1.000001ffffffffffffffffffffffffffp-100, + 0x1.000002p3, + 0x1.p103 + }, + { // Entry 818 + -0x1.000001ffffffffffffffffffffffffffp-100, + -0x1.000002p3, + 0x1.p103 + }, + { // Entry 819 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.000002p3, + 0x1.000002p103 + }, + { // Entry 820 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.000002p3, + 0x1.000002p103 + }, + { // Entry 821 + 0x1.fffffc00000fffffc00000fffffcp-101, + 0x1.000002p3, + 0x1.000004p103 + }, + { // Entry 822 + -0x1.fffffc00000fffffc00000fffffcp-101, + -0x1.000002p3, + 0x1.000004p103 + }, + { // Entry 823 + 0x1.00000600000c000018000030000060p-100, + 0x1.000004p3, + 0x1.fffffcp102 + }, + { // Entry 824 + -0x1.00000600000c000018000030000060p-100, + -0x1.000004p3, + 0x1.fffffcp102 + }, + { // Entry 825 + 0x1.000005000005000005000005000005p-100, + 0x1.000004p3, + 0x1.fffffep102 + }, + { // Entry 826 + -0x1.000005000005000005000005000005p-100, + -0x1.000004p3, + 0x1.fffffep102 + }, + { // Entry 827 + 0x1.000003ffffffffffffffffffffffffffp-100, + 0x1.000004p3, + 0x1.p103 + }, + { // Entry 828 + -0x1.000003ffffffffffffffffffffffffffp-100, + -0x1.000004p3, + 0x1.p103 + }, + { // Entry 829 + 0x1.000001fffffc000007fffff000001fffp-100, + 0x1.000004p3, + 0x1.000002p103 + }, + { // Entry 830 + -0x1.000001fffffc000007fffff000001fffp-100, + -0x1.000004p3, + 0x1.000002p103 + }, + { // Entry 831 + 0x1.ffffffffffffffffffffffffffffffffp-101, + 0x1.000004p3, + 0x1.000004p103 + }, + { // Entry 832 + -0x1.ffffffffffffffffffffffffffffffffp-101, + -0x1.000004p3, + 0x1.000004p103 + }, + { // Entry 833 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -0.0f + }, + { // Entry 834 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -0.0f + }, + { // Entry 835 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 836 + -0.0, + -0.0f, + 0.0f + }, + { // Entry 837 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -0x1.p-149 + }, + { // Entry 838 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 839 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -0x1.p-126 + }, + { // Entry 840 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 841 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0.0f, + -HUGE_VALF + }, + { // Entry 842 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -0x1.p-149 + }, + { // Entry 843 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 844 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -0x1.p-126 + }, + { // Entry 845 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 846 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0.0f, + -HUGE_VALF + }, + { // Entry 847 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 848 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 849 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 850 + 0.0, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 851 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 852 + -0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 853 + -0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 854 + -0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 855 + -0.0, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 856 + -0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 857 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + 0.0f + }, + { // Entry 858 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0.0f + }, + { // Entry 859 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-126, + 0.0f + }, + { // Entry 860 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149, + 0.0f + }, + { // Entry 861 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + -0.0f + }, + { // Entry 862 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + -0.0f + }, + { // Entry 863 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-126, + -0.0f + }, + { // Entry 864 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.p-149, + -0.0f + }, + { // Entry 865 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + 0.0f + }, + { // Entry 866 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0.0f + }, + { // Entry 867 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-126, + 0.0f + }, + { // Entry 868 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149, + 0.0f + }, + { // Entry 869 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + -0.0f + }, + { // Entry 870 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + -0.0f + }, + { // Entry 871 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-126, + -0.0f + }, + { // Entry 872 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.p-149, + -0.0f + }, + { // Entry 873 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 874 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 875 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 876 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 877 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 878 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 879 + 0.0, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 880 + 0.0, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 881 + 0.0, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 882 + -0.0, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 883 + -0.0, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 884 + -0.0, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 885 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 886 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 887 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 888 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 889 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 890 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 891 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 892 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 893 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 894 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 895 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 896 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 897 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 898 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 899 + 0x1.921fb54442d18469898cc51701b839a2p-1, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 900 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 901 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 902 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 903 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 904 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 905 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 906 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 907 + 0.0f, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 908 + 0.0f, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 909 + -0.0f, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 910 + -0.0f, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 911 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 912 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 913 + 0x1.921fb34442d184698c376fc1ac62dde6p0, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 914 + 0x1.921fb74442d1846986e21a6c570d955ep0, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 915 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 916 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 917 + 0x1.fffffffffffd55555555555bbbbbbbbbp-24, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 918 + -0x1.fffffffffffd55555555555bbbbbbbbbp-24, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 919 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 920 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 921 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 922 + 0x1.2d97c7f3321d234f272993d1414a2b39p1, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 923 + 0x1.921fb44442d184698ae21a6c570d8bc4p1, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 924 + 0x1.921fb54442d18469898cc51701b839a2p1, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 925 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 926 + -0x1.921fb34442d184698c376fc1ac62dde6p0, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 927 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 928 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 929 + -0x1.921fb44442d184698ae21a6c570d8bc4p1, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 930 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 931 + -0x1.921fb74442d1846986e21a6c570d955ep0, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 932 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 933 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 934 + -0x1.921fb54442d18469898cc51701b839a2p1, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 935 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 936 + -0x1.2d97c7f3321d234f272993d1414a2b39p1, + -0x1.fffffep127, + -0x1.fffffep127 + } +}; diff --git a/tests/math_data/atan_intel_data.h b/tests/math_data/atan_intel_data.h new file mode 100644 index 000000000..64bd6074a --- /dev/null +++ b/tests/math_data/atan_intel_data.h @@ -0,0 +1,4646 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_atan_intel_data[] = { + { // Entry 0 + 0x1.0fb06ede9973a00000000000007cc060p-5, + 0x1.0fc9f1fabe658p-5 + }, + { // Entry 1 + -0x1.0fb06ede9973a00000000000007cc060p-5, + -0x1.0fc9f1fabe658p-5 + }, + { // Entry 2 + 0x1.1ba1951db1d6dfffffffffffffb8f174p-5, + 0x1.1bbe9c255698dp-5 + }, + { // Entry 3 + -0x1.1ba1951db1d6dfffffffffffffb8f174p-5, + -0x1.1bbe9c255698dp-5 + }, + { // Entry 4 + 0x1.8d8d2d4bd6fa2fffffffffffffb52a01p-5, + 0x1.8ddd25ab90ca1p-5 + }, + { // Entry 5 + -0x1.8d8d2d4bd6fa2fffffffffffffb52a01p-5, + -0x1.8ddd25ab90ca1p-5 + }, + { // Entry 6 + 0x1.52c39ef070cad0000000000000397b8dp-4, + 0x1.5389e6df41979p-4 + }, + { // Entry 7 + -0x1.52c39ef070cad0000000000000397b8dp-4, + -0x1.5389e6df41979p-4 + }, + { // Entry 8 + 0x1.a33f32ac5ceb4ffffffffffffff62c0ep-3, + 0x1.a933fe176b375p-3 + }, + { // Entry 9 + -0x1.a33f32ac5ceb4ffffffffffffff62c0ep-3, + -0x1.a933fe176b375p-3 + }, + { // Entry 10 + 0x1.09544b71ad4a6800000000000013a8d4p-2, + 0x1.0f6e5d9960397p-2 + }, + { // Entry 11 + -0x1.09544b71ad4a6800000000000013a8d4p-2, + -0x1.0f6e5d9960397p-2 + }, + { // Entry 12 + 0x1.46ac37224353600000000000000f8ab8p-1, + 0x1.7ba49f739829fp-1 + }, + { // Entry 13 + -0x1.46ac37224353600000000000000f8ab8p-1, + -0x1.7ba49f739829fp-1 + }, + { // Entry 14 + -0x1.93d0d4b4b1dee82cea5b0c37054b40e2p-1, + -0x1.01b28f7519ab5p0 + }, + { // Entry 15 + 0x1.93d0d4b4b1dee82cea5b0c37054b40e2p-1, + 0x1.01b28f7519ab5p0 + }, + { // Entry 16 + -0x1.8e373c766a9cb7fff0093d26a3e96fdcp0, + -0x1.05ffffffff0p6 + }, + { // Entry 17 + 0x1.8e373c766a9cb7fff0093d26a3e96fdcp0, + 0x1.05ffffffff0p6 + }, + { // Entry 18 + -0x1.9a66b77f370938283db745fa4d8f6929p-1, + -0x1.086a05172c159p0 + }, + { // Entry 19 + 0x1.9a66b77f370938283db745fa4d8f6929p-1, + 0x1.086a05172c159p0 + }, + { // Entry 20 + -0x1.a1f29496a63eb7fed7941742ac25c0bcp-1, + -0x1.10556f1497661p0 + }, + { // Entry 21 + 0x1.a1f29496a63eb7fed7941742ac25c0bcp-1, + 0x1.10556f1497661p0 + }, + { // Entry 22 + -0x1.a46a24d34e9b282810adb188827a9af1p-1, + -0x1.12fa0d6901526p0 + }, + { // Entry 23 + 0x1.a46a24d34e9b282810adb188827a9af1p-1, + 0x1.12fa0d6901526p0 + }, + { // Entry 24 + -0x1.fd7343117fa575c550dcdff0fd642410p-2, + -0x1.160dc317bf87cp-1 + }, + { // Entry 25 + 0x1.fd7343117fa575c550dcdff0fd642410p-2, + 0x1.160dc317bf87cp-1 + }, + { // Entry 26 + -0x1.abdcc74821485ffb3dce2c471f1d9ccdp-1, + -0x1.1b2p0 + }, + { // Entry 27 + 0x1.abdcc74821485ffb3dce2c471f1d9ccdp-1, + 0x1.1b2p0 + }, + { // Entry 28 + -0x1.1b6b00f64692b8157a322d05add170c4p-2, + -0x1.22e245c48b894p-2 + }, + { // Entry 29 + 0x1.1b6b00f64692b8157a322d05add170c4p-2, + 0x1.22e245c48b894p-2 + }, + { // Entry 30 + -0x1.76f5ddc3a8b508ed9f137dea6b81e90fp0, + -0x1.2c72f995b1d2ep3 + }, + { // Entry 31 + 0x1.76f5ddc3a8b508ed9f137dea6b81e90fp0, + 0x1.2c72f995b1d2ep3 + }, + { // Entry 32 + -0x1.1e00babdefd447d7cd293fd8818ded16p-1, + -0x1.3fffffffffe01p-1 + }, + { // Entry 33 + 0x1.1e00babdefd447d7cd293fd8818ded16p-1, + 0x1.3fffffffffe01p-1 + }, + { // Entry 34 + -0x1.257cf8f86aae37fd89007cddd9fbedadp-1, + -0x1.4a818adf4d00cp-1 + }, + { // Entry 35 + 0x1.257cf8f86aae37fd89007cddd9fbedadp-1, + 0x1.4a818adf4d00cp-1 + }, + { // Entry 36 + -0x1.30ac945137336cee6dcf73db648cfcb8p-1, + -0x1.5a95192041f9ep-1 + }, + { // Entry 37 + 0x1.30ac945137336cee6dcf73db648cfcb8p-1, + 0x1.5a95192041f9ep-1 + }, + { // Entry 38 + -0x1.dfc9b7f9ab42d803453edb4156b22fe0p-1, + -0x1.5c634cb1dfe6bp0 + }, + { // Entry 39 + 0x1.dfc9b7f9ab42d803453edb4156b22fe0p-1, + 0x1.5c634cb1dfe6bp0 + }, + { // Entry 40 + -0x1.6bf3302a984a8a006c4478c0e763fab9p-2, + -0x1.7c1756ec12b23p-2 + }, + { // Entry 41 + 0x1.6bf3302a984a8a006c4478c0e763fab9p-2, + 0x1.7c1756ec12b23p-2 + }, + { // Entry 42 + -0x1.7f747c370c0727fccfb9495ede110579p-5, + -0x1.7fbc3df2ed276p-5 + }, + { // Entry 43 + 0x1.7f747c370c0727fccfb9495ede110579p-5, + 0x1.7fbc3df2ed276p-5 + }, + { // Entry 44 + -0x1.fdda4aef81e8e7fffd547e56ce08f36dp-1, + -0x1.8b0adc528bce4p0 + }, + { // Entry 45 + 0x1.fdda4aef81e8e7fffd547e56ce08f36dp-1, + 0x1.8b0adc528bce4p0 + }, + { // Entry 46 + -0x1.91cf060a572547ff8e8e829b167593fcp0, + -0x1.962000000000bp9 + }, + { // Entry 47 + 0x1.91cf060a572547ff8e8e829b167593fcp0, + 0x1.962000000000bp9 + }, + { // Entry 48 + -0x1.47c28e8c40ec280000020808fdc90264p0, + -0x1.ac2e0862e543ep1 + }, + { // Entry 49 + 0x1.47c28e8c40ec280000020808fdc90264p0, + 0x1.ac2e0862e543ep1 + }, + { // Entry 50 + -0x1.921fb54442d18469898cc516ef921439p0, + -0x1.c35fe0cc9d0e4p99 + }, + { // Entry 51 + 0x1.921fb54442d18469898cc516ef921439p0, + 0x1.c35fe0cc9d0e4p99 + }, + { // Entry 52 + -0x1.fee2431215606f9db22d52fc7e731b98p-6, + -0x1.ff0caaae31790p-6 + }, + { // Entry 53 + 0x1.fee2431215606f9db22d52fc7e731b98p-6, + 0x1.ff0caaae31790p-6 + }, + { // Entry 54 + -0x1.1b6ae5e70d57a0024825b0cee86fd415p0, + -0x1.ffeffffffffffp0 + }, + { // Entry 55 + 0x1.1b6ae5e70d57a0024825b0cee86fd415p0, + 0x1.ffeffffffffffp0 + }, + { // Entry 56 + -0x1.f5aa32d8a6d177fffad61b5dca0be8bfp-3, + -0x1.fff2007ffffffp-3 + }, + { // Entry 57 + 0x1.f5aa32d8a6d177fffad61b5dca0be8bfp-3, + 0x1.fff2007ffffffp-3 + }, + { // Entry 58 + -0x1.f5b39f92578e003ce025445d5448c723p-3, + -0x1.fffc03fffffffp-3 + }, + { // Entry 59 + 0x1.f5b39f92578e003ce025445d5448c723p-3, + 0x1.fffc03fffffffp-3 + }, + { // Entry 60 + 0x1.fd5ba9aac2f7f7f74a4ac2f7962ea006p-4, + 0x1.0000000000009p-3 + }, + { // Entry 61 + -0x1.fd5ba9aac2f7f7f74a4ac2f7962ea006p-4, + -0x1.0000000000009p-3 + }, + { // Entry 62 + 0x1.1b6e192ebbe4b3939e676eed13ecdea5p0, + 0x1.0000000000011p1 + }, + { // Entry 63 + -0x1.1b6e192ebbe4b3939e676eed13ecdea5p0, + -0x1.0000000000011p1 + }, + { // Entry 64 + 0x1.fd5ba9aac3301779426a44d6216c0127p-4, + 0x1.00000000001d1p-3 + }, + { // Entry 65 + -0x1.fd5ba9aac3301779426a44d6216c0127p-4, + -0x1.00000000001d1p-3 + }, + { // Entry 66 + 0x1.f5b75f92c8e0a8fdae620b51cd9aff12p-3, + 0x1.00000000007p-2 + }, + { // Entry 67 + -0x1.f5b75f92c8e0a8fdae620b51cd9aff12p-3, + -0x1.00000000007p-2 + }, + { // Entry 68 + 0x1.ffd55bba9d69a8ad651d71aec988dad0p-6, + 0x1.0000000003047p-5 + }, + { // Entry 69 + -0x1.ffd55bba9d69a8ad651d71aec988dad0p-6, + -0x1.0000000003047p-5 + }, + { // Entry 70 + 0x1.911fb5999813a8003c879b1793966ea1p0, + 0x1.0000000020017p8 + }, + { // Entry 71 + -0x1.911fb5999813a8003c879b1793966ea1p0, + -0x1.0000000020017p8 + }, + { // Entry 72 + 0x1.921fb54472d18469850cc517020039a2p-1, + 0x1.000000003p0 + }, + { // Entry 73 + -0x1.921fb54472d18469850cc517020039a2p-1, + -0x1.000000003p0 + }, + { // Entry 74 + 0x1.f5b75f959ae0a8fd6e9ac1e84bceca57p-3, + 0x1.000000018p-2 + }, + { // Entry 75 + -0x1.f5b75f959ae0a8fd6e9ac1e84bceca57p-3, + -0x1.000000018p-2 + }, + { // Entry 76 + 0x1.f5b7671a4f939829143782fc6e124ccap-3, + 0x1.0000040p-2 + }, + { // Entry 77 + -0x1.f5b7671a4f939829143782fc6e124ccap-3, + -0x1.0000040p-2 + }, + { // Entry 78 + 0x1.fd5bb18b417c48ac848521bb0772d9a1p-4, + 0x1.00000400004p-3 + }, + { // Entry 79 + -0x1.fd5bb18b417c48ac848521bb0772d9a1p-4, + -0x1.00000400004p-3 + }, + { // Entry 80 + 0x1.921fc4440248282d290a616b8bd2a40fp-1, + 0x1.00000effbfe72p0 + }, + { // Entry 81 + -0x1.921fc4440248282d290a616b8bd2a40fp-1, + -0x1.00000effbfe72p0 + }, + { // Entry 82 + 0x1.921fcb4efe8b9800001979c3c14ae647p-1, + 0x1.0000160abcad0p0 + }, + { // Entry 83 + -0x1.921fcb4efe8b9800001979c3c14ae647p-1, + -0x1.0000160abcad0p0 + }, + { // Entry 84 + 0x1.fd5d9dd9fe4877fd578f460dcb83a068p-4, + 0x1.0000fe0p-3 + }, + { // Entry 85 + -0x1.fd5d9dd9fe4877fd578f460dcb83a068p-4, + -0x1.0000fe0p-3 + }, + { // Entry 86 + 0x1.1b6fb2c336d49314eac9f9c98fd7e33cp0, + 0x1.00040p1 + }, + { // Entry 87 + -0x1.1b6fb2c336d49314eac9f9c98fd7e33cp0, + -0x1.00040p1 + }, + { // Entry 88 + 0x1.8e200a90cc63080337bb5f472303d0cbp0, + 0x1.000ffffffffe1p6 + }, + { // Entry 89 + -0x1.8e200a90cc63080337bb5f472303d0cbp0, + -0x1.000ffffffffe1p6 + }, + { // Entry 90 + 0x1.924fb0c48ad183a74183edd5362486dfp-1, + 0x1.003p0 + }, + { // Entry 91 + -0x1.924fb0c48ad183a74183edd5362486dfp-1, + -0x1.003p0 + }, + { // Entry 92 + 0x1.fedc5f6aeb98186a3b0d3b954d70911cp-4, + 0x1.00c35e9758e2cp-3 + }, + { // Entry 93 + -0x1.fedc5f6aeb98186a3b0d3b954d70911cp-4, + -0x1.00c35e9758e2cp-3 + }, + { // Entry 94 + 0x1.921fb3466091e7ffbc9b8e5c6d88ce22p0, + 0x1.011p23 + }, + { // Entry 95 + -0x1.921fb3466091e7ffbc9b8e5c6d88ce22p0, + -0x1.011p23 + }, + { // Entry 96 + 0x1.1c2100958558dfff915395a5bfb4e4f7p0, + 0x1.01c1b75a29198p1 + }, + { // Entry 97 + -0x1.1c2100958558dfff915395a5bfb4e4f7p0, + -0x1.01c1b75a29198p1 + }, + { // Entry 98 + 0x1.941da6b976112800ae50a79244b2f00fp-1, + 0x1.01fffp0 + }, + { // Entry 99 + -0x1.941da6b976112800ae50a79244b2f00fp-1, + -0x1.01fffp0 + }, + { // Entry 100 + 0x1.95412c14caec68368d2352262e205e29p-1, + 0x1.032667b38fd63p0 + }, + { // Entry 101 + -0x1.95412c14caec68368d2352262e205e29p-1, + -0x1.032667b38fd63p0 + }, + { // Entry 102 + 0x1.954797156907ffe8d43c56fed8806cbap-1, + 0x1.032ce7209e936p0 + }, + { // Entry 103 + -0x1.954797156907ffe8d43c56fed8806cbap-1, + -0x1.032ce7209e936p0 + }, + { // Entry 104 + 0x1.03fe926deb87dea036ae0e5000a78179p-7, + 0x1.03fff80p-7 + }, + { // Entry 105 + -0x1.03fe926deb87dea036ae0e5000a78179p-7, + -0x1.03fff80p-7 + }, + { // Entry 106 + 0x1.fd61e4326c1e17f9be5c0e96b9e245b5p-3, + 0x1.041391b4f6773p-2 + }, + { // Entry 107 + -0x1.fd61e4326c1e17f9be5c0e96b9e245b5p-3, + -0x1.041391b4f6773p-2 + }, + { // Entry 108 + 0x1.9690e7465847a7ddc153bc6798d1b82bp-1, + 0x1.047b2d5ac8ccbp0 + }, + { // Entry 109 + -0x1.9690e7465847a7ddc153bc6798d1b82bp-1, + -0x1.047b2d5ac8ccbp0 + }, + { // Entry 110 + 0x1.96c8ea639f68cc09d44584196295df93p-1, + 0x1.04b43403953b0p0 + }, + { // Entry 111 + -0x1.96c8ea639f68cc09d44584196295df93p-1, + -0x1.04b43403953b0p0 + }, + { // Entry 112 + 0x1.96c95ba7df84f7fecf841f04a5386a95p-1, + 0x1.04b4a761a073bp0 + }, + { // Entry 113 + -0x1.96c95ba7df84f7fecf841f04a5386a95p-1, + -0x1.04b4a761a073bp0 + }, + { // Entry 114 + 0x1.ff956a68e5f5d7fa26829ba0a3287227p-3, + 0x1.053f96b868b40p-2 + }, + { // Entry 115 + -0x1.ff956a68e5f5d7fa26829ba0a3287227p-3, + -0x1.053f96b868b40p-2 + }, + { // Entry 116 + 0x1.98b0c3c0dd8917febe21b582e45bf32ap-1, + 0x1.06a6fdd8c9be8p0 + }, + { // Entry 117 + -0x1.98b0c3c0dd8917febe21b582e45bf32ap-1, + -0x1.06a6fdd8c9be8p0 + }, + { // Entry 118 + 0x1.e7e3d0910807efff992c7a274fdbed8cp-2, + 0x1.084p-1 + }, + { // Entry 119 + -0x1.e7e3d0910807efff992c7a274fdbed8cp-2, + -0x1.084p-1 + }, + { // Entry 120 + 0x1.09882f0fd878b7fc750c23c0417aa352p-5, + 0x1.09ap-5 + }, + { // Entry 121 + -0x1.09882f0fd878b7fc750c23c0417aa352p-5, + -0x1.09ap-5 + }, + { // Entry 122 + 0x1.a057e3cb74245802b71c5786bd3bf5a9p-1, + 0x1.0ea1281786681p0 + }, + { // Entry 123 + -0x1.a057e3cb74245802b71c5786bd3bf5a9p-1, + -0x1.0ea1281786681p0 + }, + { // Entry 124 + 0x1.a057e3cb7428100cde6242b3bf2d75e7p-1, + 0x1.0ea12817866c0p0 + }, + { // Entry 125 + -0x1.a057e3cb7428100cde6242b3bf2d75e7p-1, + -0x1.0ea12817866c0p0 + }, + { // Entry 126 + 0x1.09544b71ad4a6800000000000013a8d4p-2, + 0x1.0f6e5d9960397p-2 + }, + { // Entry 127 + -0x1.09544b71ad4a6800000000000013a8d4p-2, + -0x1.0f6e5d9960397p-2 + }, + { // Entry 128 + 0x1.921fb4cd9c6767fffffe6051bf1c3fecp0, + 0x1.142c69b7200b4p25 + }, + { // Entry 129 + -0x1.921fb4cd9c6767fffffe6051bf1c3fecp0, + -0x1.142c69b7200b4p25 + }, + { // Entry 130 + 0x1.a908afa5b1d49d450834540fee9c3c24p-1, + 0x1.180p0 + }, + { // Entry 131 + -0x1.a908afa5b1d49d450834540fee9c3c24p-1, + -0x1.180p0 + }, + { // Entry 132 + 0x1.abdcc74821485ffb3dce2c471f1d9ccdp-1, + 0x1.1b2p0 + }, + { // Entry 133 + -0x1.abdcc74821485ffb3dce2c471f1d9ccdp-1, + -0x1.1b2p0 + }, + { // Entry 134 + 0x1.1ffffffffff868000000005c43999999p-22, + 0x1.2p-22 + }, + { // Entry 135 + -0x1.1ffffffffff868000000005c43999999p-22, + -0x1.2p-22 + }, + { // Entry 136 + 0x1.1231f3cf3b64080110ff41eaf08e7f52p-1, + 0x1.2fcf7444bde76p-1 + }, + { // Entry 137 + -0x1.1231f3cf3b64080110ff41eaf08e7f52p-1, + -0x1.2fcf7444bde76p-1 + }, + { // Entry 138 + 0x1.14e89198860627ffffe8602275519490p-1, + 0x1.337d9db6d7c12p-1 + }, + { // Entry 139 + -0x1.14e89198860627ffffe8602275519490p-1, + -0x1.337d9db6d7c12p-1 + }, + { // Entry 140 + 0x1.91eae7e474234800ffed4579e939b69ep0, + 0x1.364a2f134fcc8p10 + }, + { // Entry 141 + -0x1.91eae7e474234800ffed4579e939b69ep0, + -0x1.364a2f134fcc8p10 + }, + { // Entry 142 + 0x1.921fb53da9afc7ff8a7b36e49887a88cp0, + 0x1.3663986f82220p29 + }, + { // Entry 143 + -0x1.921fb53da9afc7ff8a7b36e49887a88cp0, + -0x1.3663986f82220p29 + }, + { // Entry 144 + 0x1.78c56b92f190e84a323bd5804a1c5ba6p0, + 0x1.4210842108420p3 + }, + { // Entry 145 + -0x1.78c56b92f190e84a323bd5804a1c5ba6p0, + -0x1.4210842108420p3 + }, + { // Entry 146 + 0x1.78d751494898372d0fe3af3a7837ff8fp0, + 0x1.42f5ff15ddc08p3 + }, + { // Entry 147 + -0x1.78d751494898372d0fe3af3a7837ff8fp0, + -0x1.42f5ff15ddc08p3 + }, + { // Entry 148 + 0x1.31ce4da037f1542340ee4c61421bba5ap0, + 0x1.43fff80p1 + }, + { // Entry 149 + -0x1.31ce4da037f1542340ee4c61421bba5ap0, + -0x1.43fff80p1 + }, + { // Entry 150 + 0x1.31ce4fc9313474e69b41306d82deceb0p0, + 0x1.440p1 + }, + { // Entry 151 + -0x1.31ce4fc9313474e69b41306d82deceb0p0, + -0x1.440p1 + }, + { // Entry 152 + 0x1.26b3d211bc3faaf8f037dd3421d9f962p-1, + 0x1.4c3a987530ea6p-1 + }, + { // Entry 153 + -0x1.26b3d211bc3faaf8f037dd3421d9f962p-1, + -0x1.4c3a987530ea6p-1 + }, + { // Entry 154 + 0x1.351779f072846800a9bb18d72a79814ep0, + 0x1.5094250942508p1 + }, + { // Entry 155 + -0x1.351779f072846800a9bb18d72a79814ep0, + -0x1.5094250942508p1 + }, + { // Entry 156 + 0x1.58fcecb696d827ec66c4a7bfd8ed327bp-8, + 0x1.58fdbd8ddbbf8p-8 + }, + { // Entry 157 + -0x1.58fcecb696d827ec66c4a7bfd8ed327bp-8, + -0x1.58fdbd8ddbbf8p-8 + }, + { // Entry 158 + 0x1.63398f6da2f1a7fffff2d311886948c5p0, + 0x1.596de8ca11ae6p2 + }, + { // Entry 159 + -0x1.63398f6da2f1a7fffff2d311886948c5p0, + -0x1.596de8ca11ae6p2 + }, + { // Entry 160 + 0x1.3424a0066e6a8d6e3d6901f99034cde1p-1, + 0x1.5faa0cbf48e56p-1 + }, + { // Entry 161 + -0x1.3424a0066e6a8d6e3d6901f99034cde1p-1, + -0x1.5faa0cbf48e56p-1 + }, + { // Entry 162 + 0x1.5ff223a639d5bfce7ae1cfb7516d26adp-6, + 0x1.6p-6 + }, + { // Entry 163 + -0x1.5ff223a639d5bfce7ae1cfb7516d26adp-6, + -0x1.6p-6 + }, + { // Entry 164 + 0x1.345f01cce38c8d8be40cc12c58240e15p-1, + 0x1.600000000018dp-1 + }, + { // Entry 165 + -0x1.345f01cce38c8d8be40cc12c58240e15p-1, + -0x1.600000000018dp-1 + }, + { // Entry 166 + 0x1.367cb24fdff2146a3c6863d233ff09fep-1, + 0x1.632p-1 + }, + { // Entry 167 + -0x1.367cb24fdff2146a3c6863d233ff09fep-1, + -0x1.632p-1 + }, + { // Entry 168 + 0x1.57baeb9c51db490f8249f6679768741fp-2, + 0x1.654p-2 + }, + { // Entry 169 + -0x1.57baeb9c51db490f8249f6679768741fp-2, + -0x1.654p-2 + }, + { // Entry 170 + 0x1.395006b0fd682d86f4a40f69e4dad1f3p-1, + 0x1.675370cc217f1p-1 + }, + { // Entry 171 + -0x1.395006b0fd682d86f4a40f69e4dad1f3p-1, + -0x1.675370cc217f1p-1 + }, + { // Entry 172 + 0x1.695a2c268e1e57ffee0cb8c88986dfefp-12, + 0x1.695a2d168b440p-12 + }, + { // Entry 173 + -0x1.695a2c268e1e57ffee0cb8c88986dfefp-12, + -0x1.695a2d168b440p-12 + }, + { // Entry 174 + 0x1.90b6fc0474fec7fe12f524f1b420b184p0, + 0x1.6b5ad6b5aceb4p7 + }, + { // Entry 175 + -0x1.90b6fc0474fec7fe12f524f1b420b184p0, + -0x1.6b5ad6b5aceb4p7 + }, + { // Entry 176 + 0x1.3b8f3306167a8baa368daae0bf08e86cp0, + 0x1.6c0p1 + }, + { // Entry 177 + -0x1.3b8f3306167a8baa368daae0bf08e86cp0, + -0x1.6c0p1 + }, + { // Entry 178 + 0x1.5f6bae189b51098a86d90c98da4cc877p-2, + 0x1.6de63b148cf0bp-2 + }, + { // Entry 179 + -0x1.5f6bae189b51098a86d90c98da4cc877p-2, + -0x1.6de63b148cf0bp-2 + }, + { // Entry 180 + 0x1.3de18703d42d69f55b3e6c4d1fe5629dp-1, + 0x1.6e30022cb4501p-1 + }, + { // Entry 181 + -0x1.3de18703d42d69f55b3e6c4d1fe5629dp-1, + -0x1.6e30022cb4501p-1 + }, + { // Entry 182 + 0x1.ebe5401364d0c802b6d52ee2cdf2086ep-1, + 0x1.6e3b1e21b27ddp0 + }, + { // Entry 183 + -0x1.ebe5401364d0c802b6d52ee2cdf2086ep-1, + -0x1.6e3b1e21b27ddp0 + }, + { // Entry 184 + 0x1.6310721e8d7bc04e2ae4e8cce87a1ec0p-2, + 0x1.72036f889e86fp-2 + }, + { // Entry 185 + -0x1.6310721e8d7bc04e2ae4e8cce87a1ec0p-2, + -0x1.72036f889e86fp-2 + }, + { // Entry 186 + 0x1.685c82be1d6fa902b238e87716c3bbfbp-2, + 0x1.7803718434620p-2 + }, + { // Entry 187 + -0x1.685c82be1d6fa902b238e87716c3bbfbp-2, + -0x1.7803718434620p-2 + }, + { // Entry 188 + 0x1.68c3b08c20af09be807f598cbca32cb9p-2, + 0x1.78788d320d639p-2 + }, + { // Entry 189 + -0x1.68c3b08c20af09be807f598cbca32cb9p-2, + -0x1.78788d320d639p-2 + }, + { // Entry 190 + 0x1.6b35cbad026009f12d00003f84c29caep-2, + 0x1.7b3fe92e2fd63p-2 + }, + { // Entry 191 + -0x1.6b35cbad026009f12d00003f84c29caep-2, + -0x1.7b3fe92e2fd63p-2 + }, + { // Entry 192 + 0x1.6c4b3610c42b29eabeaa35cc1b8067ecp-2, + 0x1.7c7b80a9d788bp-2 + }, + { // Entry 193 + -0x1.6c4b3610c42b29eabeaa35cc1b8067ecp-2, + -0x1.7c7b80a9d788bp-2 + }, + { // Entry 194 + 0x1.6eed6ff6cd99ca02c4d88c9aa595d5cfp-2, + 0x1.7f7b8c648a650p-2 + }, + { // Entry 195 + -0x1.6eed6ff6cd99ca02c4d88c9aa595d5cfp-2, + -0x1.7f7b8c648a650p-2 + }, + { // Entry 196 + 0x1.7fffffffffffb80000000000184cccccp-25, + 0x1.8p-25 + }, + { // Entry 197 + -0x1.7fffffffffffb80000000000184cccccp-25, + -0x1.8p-25 + }, + { // Entry 198 + 0x1.7fffffffffffc800000000000f4cccccp-25, + 0x1.8000000000001p-25 + }, + { // Entry 199 + -0x1.7fffffffffffc800000000000f4cccccp-25, + -0x1.8000000000001p-25 + }, + { // Entry 200 + 0x1.7fffffffffffd80000000000064cccccp-25, + 0x1.8000000000002p-25 + }, + { // Entry 201 + -0x1.7fffffffffffd80000000000064cccccp-25, + -0x1.8000000000002p-25 + }, + { // Entry 202 + 0x1.f7b9ef3dc65408000005e3f91e816063p-1, + 0x1.80df4b28b5a84p0 + }, + { // Entry 203 + -0x1.f7b9ef3dc65408000005e3f91e816063p-1, + -0x1.80df4b28b5a84p0 + }, + { // Entry 204 + 0x1.90ce0249811008006638702db8ae59e2p0, + 0x1.8421084210846p7 + }, + { // Entry 205 + -0x1.90ce0249811008006638702db8ae59e2p0, + -0x1.8421084210846p7 + }, + { // Entry 206 + 0x1.fb3c57dab5afa80a506e91f92e6a8df9p-1, + 0x1.86a71395bc9b5p0 + }, + { // Entry 207 + -0x1.fb3c57dab5afa80a506e91f92e6a8df9p-1, + -0x1.86a71395bc9b5p0 + }, + { // Entry 208 + 0x1.68d94312ca7f17ffeed1dd16ec2d35e6p0, + 0x1.898p2 + }, + { // Entry 209 + -0x1.68d94312ca7f17ffeed1dd16ec2d35e6p0, + -0x1.898p2 + }, + { // Entry 210 + 0x1.ff69d0cefa8a27ebf8cbf5ec1cc78342p-1, + 0x1.8db18047c8944p0 + }, + { // Entry 211 + -0x1.ff69d0cefa8a27ebf8cbf5ec1cc78342p-1, + -0x1.8db18047c8944p0 + }, + { // Entry 212 + 0x1.983e285453b3f000002efc9d654c6a32p-4, + 0x1.999999c022342p-4 + }, + { // Entry 213 + -0x1.983e285453b3f000002efc9d654c6a32p-4, + -0x1.999999c022342p-4 + }, + { // Entry 214 + 0x1.94441feb7be7180000005c46362b16d8p-3, + 0x1.999999f951960p-3 + }, + { // Entry 215 + -0x1.94441feb7be7180000005c46362b16d8p-3, + -0x1.999999f951960p-3 + }, + { // Entry 216 + 0x1.9a6a8e96c86047fffe94ba49799c011fp-3, + 0x1.9ffffffffffddp-3 + }, + { // Entry 217 + -0x1.9a6a8e96c86047fffe94ba49799c011fp-3, + -0x1.9ffffffffffddp-3 + }, + { // Entry 218 + 0x1.9e94153cfe4dc80036c037e172b7cee9p-4, + 0x1.a0000000008p-4 + }, + { // Entry 219 + -0x1.9e94153cfe4dc80036c037e172b7cee9p-4, + -0x1.a0000000008p-4 + }, + { // Entry 220 + 0x1.9fd8a4d9973e57fc465de41ddc4cbae2p-4, + 0x1.a147eb4c17006p-4 + }, + { // Entry 221 + -0x1.9fd8a4d9973e57fc465de41ddc4cbae2p-4, + -0x1.a147eb4c17006p-4 + }, + { // Entry 222 + 0x1.62e23d7da5f6d8010d5496a08573e188p-1, + 0x1.a94678821f0e9p-1 + }, + { // Entry 223 + -0x1.62e23d7da5f6d8010d5496a08573e188p-1, + -0x1.a94678821f0e9p-1 + }, + { // Entry 224 + 0x1.096fe22081e2b800007e36c682109058p0, + 0x1.b102342163952p0 + }, + { // Entry 225 + -0x1.096fe22081e2b800007e36c682109058p0, + -0x1.b102342163952p0 + }, + { // Entry 226 + 0x1.0a471736b923b1f18885a17308e12beep0, + 0x1.b445c1ad3cad1p0 + }, + { // Entry 227 + -0x1.0a471736b923b1f18885a17308e12beep0, + -0x1.b445c1ad3cad1p0 + }, + { // Entry 228 + 0x1.0a66d6f646e8d37662253bd9155a84dep0, + 0x1.b4c1d0c10cca9p0 + }, + { // Entry 229 + -0x1.0a66d6f646e8d37662253bd9155a84dep0, + -0x1.b4c1d0c10cca9p0 + }, + { // Entry 230 + 0x1.a3ad60e89da8b6f1dd20c69213b7612ap-2, + 0x1.bcde6f379bcdep-2 + }, + { // Entry 231 + -0x1.a3ad60e89da8b6f1dd20c69213b7612ap-2, + -0x1.bcde6f379bcdep-2 + }, + { // Entry 232 + 0x1.0e04a23e7337930371d81f0cf4d7e9dcp0, + 0x1.c34p0 + }, + { // Entry 233 + -0x1.0e04a23e7337930371d81f0cf4d7e9dcp0, + -0x1.c34p0 + }, + { // Entry 234 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.c77250c52a4c4p994 + }, + { // Entry 235 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.c77250c52a4c4p994 + }, + { // Entry 236 + 0x1.ad00f5422058b7f130ce2474b9fbbdf8p-2, + 0x1.c80p-2 + }, + { // Entry 237 + -0x1.ad00f5422058b7f130ce2474b9fbbdf8p-2, + -0x1.c80p-2 + }, + { // Entry 238 + 0x1.4c50697afe3227fd6af96ad804191fc4p0, + 0x1.c9b26c9b26cb2p1 + }, + { // Entry 239 + -0x1.4c50697afe3227fd6af96ad804191fc4p0, + -0x1.c9b26c9b26cb2p1 + }, + { // Entry 240 + 0x1.c287b5672b66d828ebaf4756e4f60ad1p-3, + 0x1.c9f0f1fe648bfp-3 + }, + { // Entry 241 + -0x1.c287b5672b66d828ebaf4756e4f60ad1p-3, + -0x1.c9f0f1fe648bfp-3 + }, + { // Entry 242 + 0x1.ce35e40b0af2980007f47f44f1179e69p-5, + 0x1.ceb39ce739ce2p-5 + }, + { // Entry 243 + -0x1.ce35e40b0af2980007f47f44f1179e69p-5, + -0x1.ceb39ce739ce2p-5 + }, + { // Entry 244 + 0x1.ca5072830899e807a46fd46deed06c13p-3, + 0x1.d21f1bc07ff10p-3 + }, + { // Entry 245 + -0x1.ca5072830899e807a46fd46deed06c13p-3, + -0x1.d21f1bc07ff10p-3 + }, + { // Entry 246 + 0x1.d757ad6321e1b7ff10e2bc2deea40152p-7, + 0x1.d76p-7 + }, + { // Entry 247 + -0x1.d757ad6321e1b7ff10e2bc2deea40152p-7, + -0x1.d76p-7 + }, + { // Entry 248 + 0x1.bc568fd6eb58f751409b945717d9554ap-2, + 0x1.da8p-2 + }, + { // Entry 249 + -0x1.bc568fd6eb58f751409b945717d9554ap-2, + -0x1.da8p-2 + }, + { // Entry 250 + 0x1.dcb58cdb206477fea2ac612eafe90af0p-6, + 0x1.dcd80p-6 + }, + { // Entry 251 + -0x1.dcb58cdb206477fea2ac612eafe90af0p-6, + -0x1.dcd80p-6 + }, + { // Entry 252 + 0x1.4fefc9638a79f51094053a972023f6c2p0, + 0x1.e3fffffffffffp1 + }, + { // Entry 253 + -0x1.4fefc9638a79f51094053a972023f6c2p0, + -0x1.e3fffffffffffp1 + }, + { // Entry 254 + 0x1.e559f77b3d1bc7fe0f0af62001c4d64ap-4, + 0x1.e7a2c68ca3bbep-4 + }, + { // Entry 255 + -0x1.e559f77b3d1bc7fe0f0af62001c4d64ap-4, + -0x1.e7a2c68ca3bbep-4 + }, + { // Entry 256 + 0x1.507316595911cbbe475d6a0d0c879007p0, + 0x1.e7f3f9fcfe780p1 + }, + { // Entry 257 + -0x1.507316595911cbbe475d6a0d0c879007p0, + -0x1.e7f3f9fcfe780p1 + }, + { // Entry 258 + 0x1.df110864c9d9d03004ee274a70c0ae22p-3, + 0x1.e7fffffffffffp-3 + }, + { // Entry 259 + -0x1.df110864c9d9d03004ee274a70c0ae22p-3, + -0x1.e7fffffffffffp-3 + }, + { // Entry 260 + 0x1.7145eac2088a38096a1a13357d2f5f02p0, + 0x1.fp2 + }, + { // Entry 261 + -0x1.7145eac2088a38096a1a13357d2f5f02p0, + -0x1.fp2 + }, + { // Entry 262 + 0x1.f2d88602d915b7a920d38c9f9cff16e8p-6, + 0x1.f30p-6 + }, + { // Entry 263 + -0x1.f2d88602d915b7a920d38c9f9cff16e8p-6, + -0x1.f30p-6 + }, + { // Entry 264 + 0x1.f8cda64a08edafa2039d9d8a93546545p-6, + 0x1.f8f68ec9e17eep-6 + }, + { // Entry 265 + -0x1.f8cda64a08edafa2039d9d8a93546545p-6, + -0x1.f8f68ec9e17eep-6 + }, + { // Entry 266 + 0x1.8e1199d0ffd197fffe93ecafbc7df2e1p0, + 0x1.f8ffffeffffaep5 + }, + { // Entry 267 + -0x1.8e1199d0ffd197fffe93ecafbc7df2e1p0, + -0x1.f8ffffeffffaep5 + }, + { // Entry 268 + 0x1.efc20ff0ea4347fb09f751f06225cf3ep-3, + 0x1.f9ac87c22c381p-3 + }, + { // Entry 269 + -0x1.efc20ff0ea4347fb09f751f06225cf3ep-3, + -0x1.f9ac87c22c381p-3 + }, + { // Entry 270 + 0x1.fa55579e0ba577fe929dc83eb7995abcp-6, + 0x1.fa7e9fa7e9f89p-6 + }, + { // Entry 271 + -0x1.fa55579e0ba577fe929dc83eb7995abcp-6, + -0x1.fa7e9fa7e9f89p-6 + }, + { // Entry 272 + 0x1.fa55579e0ba6f7a0b740d8dad80c76dep-6, + 0x1.fa7e9fa7e9fa1p-6 + }, + { // Entry 273 + -0x1.fa55579e0ba6f7a0b740d8dad80c76dep-6, + -0x1.fa7e9fa7e9fa1p-6 + }, + { // Entry 274 + 0x1.fdb067638eb577993194616b1f02253ep-6, + 0x1.fdda82fef66eep-6 + }, + { // Entry 275 + -0x1.fdb067638eb577993194616b1f02253ep-6, + -0x1.fdda82fef66eep-6 + }, + { // Entry 276 + 0x1.f58a3225d517f7b85d014640f929635dp-3, + 0x1.ffcffffffffffp-3 + }, + { // Entry 277 + -0x1.f58a3225d517f7b85d014640f929635dp-3, + -0x1.ffcffffffffffp-3 + }, + { // Entry 278 + 0x1.f5a8507ca2e7f74fe8389718208bcb16p-3, + 0x1.ffeffffffffffp-3 + }, + { // Entry 279 + -0x1.f5a8507ca2e7f74fe8389718208bcb16p-3, + -0x1.ffeffffffffffp-3 + }, + { // Entry 280 + 0x1.1b6ae5e70d57a0024825b0cee86fd415p0, + 0x1.ffeffffffffffp0 + }, + { // Entry 281 + -0x1.1b6ae5e70d57a0024825b0cee86fd415p0, + -0x1.ffeffffffffffp0 + }, + { // Entry 282 + 0x1.822487e434a688433f85f4d9d59f5c91p0, + 0x1.ffeffffffffffp3 + }, + { // Entry 283 + -0x1.822487e434a688433f85f4d9d59f5c91p0, + -0x1.ffeffffffffffp3 + }, + { // Entry 284 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fff8e61eadcf7p1021 + }, + { // Entry 285 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fff8e61eadcf7p1021 + }, + { // Entry 286 + 0x1.f5b39f92578e003ce025445d5448c723p-3, + 0x1.fffc03fffffffp-3 + }, + { // Entry 287 + -0x1.f5b39f92578e003ce025445d5448c723p-3, + -0x1.fffc03fffffffp-3 + }, + { // Entry 288 + 0x1.1b6e0f9521925801d32b4375d240e5b1p0, + 0x1.ffffcffffffffp0 + }, + { // Entry 289 + -0x1.1b6e0f9521925801d32b4375d240e5b1p0, + -0x1.ffffcffffffffp0 + }, + { // Entry 290 + 0x1.f5b75ded226447fe90c6cb904987f275p-3, + 0x1.fffffe3ffffbfp-3 + }, + { // Entry 291 + -0x1.f5b75ded226447fe90c6cb904987f275p-3, + -0x1.fffffe3ffffbfp-3 + }, + { // Entry 292 + 0x1.8a205fd5287ff7ff262bad6513207543p0, + 0x1.fffffff3fffffp4 + }, + { // Entry 293 + -0x1.8a205fd5287ff7ff262bad6513207543p0, + -0x1.fffffff3fffffp4 + }, + { // Entry 294 + 0x1.ffd55bba962df799aa0c3a5a5edf7631p-6, + 0x1.fffffffffecb6p-6 + }, + { // Entry 295 + -0x1.ffd55bba962df799aa0c3a5a5edf7631p-6, + -0x1.fffffffffecb6p-6 + }, + { // Entry 296 + 0x1.ffd55bba972df799aa0c3a87739a477dp-6, + 0x1.ffffffffffcbap-6 + }, + { // Entry 297 + -0x1.ffd55bba972df799aa0c3a87739a477dp-6, + -0x1.ffffffffffcbap-6 + }, + { // Entry 298 + 0x1.dac670561bb3768adfc88bd930751a06p-2, + 0x1.fffffffffffe2p-2 + }, + { // Entry 299 + -0x1.dac670561bb3768adfc88bd930751a06p-2, + -0x1.fffffffffffe2p-2 + }, + { // Entry 300 + 0x1.8a205fd55873f800459be65852624b5fp0, + 0x1.ffffffffffff3p4 + }, + { // Entry 301 + -0x1.8a205fd55873f800459be65852624b5fp0, + -0x1.ffffffffffff3p4 + }, + { // Entry 302 + 0x1.fffff55555bb3bb73172cf8cfdef50f9p-11, + 0x1.ffffffffffff8p-11 + }, + { // Entry 303 + -0x1.fffff55555bb3bb73172cf8cfdef50f9p-11, + -0x1.ffffffffffff8p-11 + }, + { // Entry 304 + 0x1.f5b75f92c80db80cbd711fcdd109b918p-3, + 0x1.ffffffffffffep-3 + }, + { // Entry 305 + -0x1.f5b75f92c80db80cbd711fcdd109b918p-3, + -0x1.ffffffffffffep-3 + }, + { // Entry 306 + 0x1.ffffffffffffb5555555555563bbbbbbp-26, + 0x1.ffffffffffffep-26 + }, + { // Entry 307 + -0x1.ffffffffffffb5555555555563bbbbbbp-26, + -0x1.ffffffffffffep-26 + }, + { // Entry 308 + -0.0, + -0x1.0p-1074 + }, + { // Entry 309 + 0.0, + 0x1.0p-1074 + }, + { // Entry 310 + -0.0, + -0.0 + }, + { // Entry 311 + 0.0, + 0x1.0p-1074 + }, + { // Entry 312 + -0.0, + -0x1.0p-1074 + }, + { // Entry 313 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 314 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 315 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 316 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 317 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 318 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 319 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 320 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 321 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 322 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 323 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 324 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 325 + 0x1.9999994237fab1da64992a310312505ep-13, + 0x1.999999999999ap-13 + }, + { // Entry 326 + -0x1.9999994237fab1da64992a310312505ep-13, + -0x1.999999999999ap-13 + }, + { // Entry 327 + 0x1.9999983c131f7a10c5dd5d6e7ce3cb81p-12, + 0x1.999999999999ap-12 + }, + { // Entry 328 + -0x1.9999983c131f7a10c5dd5d6e7ce3cb81p-12, + -0x1.999999999999ap-12 + }, + { // Entry 329 + 0x1.333330e560498c727e4d6265bd2ffec8p-11, + 0x1.3333333333334p-11 + }, + { // Entry 330 + -0x1.333330e560498c727e4d6265bd2ffec8p-11, + -0x1.3333333333334p-11 + }, + { // Entry 331 + 0x1.999994237fca32b5a26ff8f7d9bd8d35p-11, + 0x1.999999999999ap-11 + }, + { // Entry 332 + -0x1.999994237fca32b5a26ff8f7d9bd8d35p-11, + -0x1.999999999999ap-11 + }, + { // Entry 333 + 0x1.fffff55555bbbbb72972d00cfde752f9p-11, + 0x1.0p-10 + }, + { // Entry 334 + -0x1.fffff55555bbbbb72972d00cfde752f9p-11, + -0x1.0p-10 + }, + { // Entry 335 + 0x1.333329fbe7ebeef09e51711b44f86539p-10, + 0x1.3333333333333p-10 + }, + { // Entry 336 + -0x1.333329fbe7ebeef09e51711b44f86539p-10, + -0x1.3333333333333p-10 + }, + { // Entry 337 + 0x1.666657c3edf5fc60e8ee22a4cfe0569cp-10, + 0x1.6666666666666p-10 + }, + { // Entry 338 + -0x1.666657c3edf5fc60e8ee22a4cfe0569cp-10, + -0x1.6666666666666p-10 + }, + { // Entry 339 + 0x1.999983c133ee81d417cae21e440492ffp-10, + 0x1.9999999999999p-10 + }, + { // Entry 340 + -0x1.999983c133ee81d417cae21e440492ffp-10, + -0x1.9999999999999p-10 + }, + { // Entry 341 + 0x1.ccccadb230d5be2055f8f3b668d57c61p-10, + 0x1.cccccccccccccp-10 + }, + { // Entry 342 + -0x1.ccccadb230d5be2055f8f3b668d57c61p-10, + -0x1.cccccccccccccp-10 + }, + { // Entry 343 + 0x1.0664f6d5e1b55939fa39d3978354fb08p-7, + 0x1.0666666666666p-7 + }, + { // Entry 344 + -0x1.0664f6d5e1b55939fa39d3978354fb08p-7, + -0x1.0666666666666p-7 + }, + { // Entry 345 + 0x1.ccc506615256b4d660acbe5536614bc0p-7, + 0x1.cccccccccccccp-7 + }, + { // Entry 346 + -0x1.ccc506615256b4d660acbe5536614bc0p-7, + -0x1.cccccccccccccp-7 + }, + { // Entry 347 + 0x1.498e385e62b42d40708322b65b9a92a2p-6, + 0x1.4999999999999p-6 + }, + { // Entry 348 + -0x1.498e385e62b42d40708322b65b9a92a2p-6, + -0x1.4999999999999p-6 + }, + { // Entry 349 + 0x1.acb3bf2888fd253cde72a65ff6b5a5edp-6, + 0x1.accccccccccccp-6 + }, + { // Entry 350 + -0x1.acb3bf2888fd253cde72a65ff6b5a5edp-6, + -0x1.accccccccccccp-6 + }, + { // Entry 351 + 0x1.07e89e3abee7df5bc22b883856e5d802p-5, + 0x1.080p-5 + }, + { // Entry 352 + -0x1.07e89e3abee7df5bc22b883856e5d802p-5, + -0x1.080p-5 + }, + { // Entry 353 + 0x1.39726b096afb5657f037d44ceabacfdep-5, + 0x1.399999999999ap-5 + }, + { // Entry 354 + -0x1.39726b096afb5657f037d44ceabacfdep-5, + -0x1.399999999999ap-5 + }, + { // Entry 355 + 0x1.6af659752a8e90e79823616d18922d06p-5, + 0x1.6b33333333334p-5 + }, + { // Entry 356 + -0x1.6af659752a8e90e79823616d18922d06p-5, + -0x1.6b33333333334p-5 + }, + { // Entry 357 + 0x1.9c737d9b4d07092c295584951a1f5a71p-5, + 0x1.9cccccccccccep-5 + }, + { // Entry 358 + -0x1.9c737d9b4d07092c295584951a1f5a71p-5, + -0x1.9cccccccccccep-5 + }, + { // Entry 359 + 0x1.cde8ec5bb65f0e742405e56b5ae426e2p-5, + 0x1.ce66666666666p-5 + }, + { // Entry 360 + -0x1.cde8ec5bb65f0e742405e56b5ae426e2p-5, + -0x1.ce66666666666p-5 + }, + { // Entry 361 + 0x1.3359bce85d4c0edf062a316ac9a3b035p-1, + 0x1.5e7fc4369bdadp-1 + }, + { // Entry 362 + -0x1.3359bce85d4c0edf062a316ac9a3b035p-1, + -0x1.5e7fc4369bdadp-1 + }, + { // Entry 363 + 0x1.d5ca708561450bec8cd54cd06ef71588p-1, + 0x1.4e7fc4369bdadp0 + }, + { // Entry 364 + -0x1.d5ca708561450bec8cd54cd06ef71588p-1, + -0x1.4e7fc4369bdadp0 + }, + { // Entry 365 + 0x1.17ac441eeac2e0e131633d5dbda1192dp0, + 0x1.edbfa651e9c84p0 + }, + { // Entry 366 + -0x1.17ac441eeac2e0e131633d5dbda1192dp0, + -0x1.edbfa651e9c84p0 + }, + { // Entry 367 + 0x1.3279e85590bed5c0a7d465c70e9312dbp0, + 0x1.467fc4369bdadp1 + }, + { // Entry 368 + -0x1.3279e85590bed5c0a7d465c70e9312dbp0, + -0x1.467fc4369bdadp1 + }, + { // Entry 369 + 0x1.43f644a23f11312b0baeda6469939df1p0, + 0x1.961fb54442d18p1 + }, + { // Entry 370 + -0x1.43f644a23f11312b0baeda6469939df1p0, + -0x1.961fb54442d18p1 + }, + { // Entry 371 + 0x1.502a1d3da2b62cdafdfc8df896fb781ep0, + 0x1.e5bfa651e9c83p1 + }, + { // Entry 372 + -0x1.502a1d3da2b62cdafdfc8df896fb781ep0, + -0x1.e5bfa651e9c83p1 + }, + { // Entry 373 + 0x1.592066aa733e56535ef23487f1ba45abp0, + 0x1.1aafcbafc85f7p2 + }, + { // Entry 374 + -0x1.592066aa733e56535ef23487f1ba45abp0, + -0x1.1aafcbafc85f7p2 + }, + { // Entry 375 + 0x1.5ff8e2755165d95ef4dfa238b69035c3p0, + 0x1.427fc4369bdadp2 + }, + { // Entry 376 + -0x1.5ff8e2755165d95ef4dfa238b69035c3p0, + -0x1.427fc4369bdadp2 + }, + { // Entry 377 + 0x1.655d65485dc172ad1da5d376106987dep0, + 0x1.6a4fbcbd6f562p2 + }, + { // Entry 378 + -0x1.655d65485dc172ad1da5d376106987dep0, + -0x1.6a4fbcbd6f562p2 + }, + { // Entry 379 + 0x1.65711d6bfd5303b266e1f766916353c0p0, + 0x1.6af2eff0a2896p2 + }, + { // Entry 380 + -0x1.65711d6bfd5303b266e1f766916353c0p0, + -0x1.6af2eff0a2896p2 + }, + { // Entry 381 + 0x1.602a2aaa59041e73fe9cbe5018d9258bp0, + 0x1.43c62a9d02414p2 + }, + { // Entry 382 + -0x1.602a2aaa59041e73fe9cbe5018d9258bp0, + -0x1.43c62a9d02414p2 + }, + { // Entry 383 + 0x1.597f46e10aa0ef6e7b79babd52218e41p0, + 0x1.1c99654961f92p2 + }, + { // Entry 384 + -0x1.597f46e10aa0ef6e7b79babd52218e41p0, + -0x1.1c99654961f92p2 + }, + { // Entry 385 + 0x1.50d20254a2ff42dab732523958fa024cp0, + 0x1.ead93feb8361fp1 + }, + { // Entry 386 + -0x1.50d20254a2ff42dab732523958fa024cp0, + -0x1.ead93feb8361fp1 + }, + { // Entry 387 + 0x1.45190c030df0f68611f816a36d10b59ap0, + 0x1.9c7fb54442d1ap1 + }, + { // Entry 388 + -0x1.45190c030df0f68611f816a36d10b59ap0, + -0x1.9c7fb54442d1ap1 + }, + { // Entry 389 + 0x1.34794d6993e603dc236dc9700bc984e9p0, + 0x1.4e262a9d02415p1 + }, + { // Entry 390 + -0x1.34794d6993e603dc236dc9700bc984e9p0, + -0x1.4e262a9d02415p1 + }, + { // Entry 391 + 0x1.1b598910bd9bdfeeb608b6b41a96f287p0, + 0x1.ff993feb83620p0 + }, + { // Entry 392 + -0x1.1b598910bd9bdfeeb608b6b41a96f287p0, + -0x1.ff993feb83620p0 + }, + { // Entry 393 + 0x1.e44c9309197c4f98392215a424630bb4p-1, + 0x1.62e62a9d02416p0 + }, + { // Entry 394 + -0x1.e44c9309197c4f98392215a424630bb4p-1, + -0x1.62e62a9d02416p0 + }, + { // Entry 395 + 0x1.5150f1acfb0190aa9794ba0211b4eb4bp-1, + 0x1.8c662a9d02419p-1 + }, + { // Entry 396 + -0x1.5150f1acfb0190aa9794ba0211b4eb4bp-1, + -0x1.8c662a9d02419p-1 + }, + { // Entry 397 + -0x1.073ea15c614e11668ba9fe75888fee13p0, + -0x1.a8aa1d11c44ffp0 + }, + { // Entry 398 + 0x1.073ea15c614e11668ba9fe75888fee13p0, + 0x1.a8aa1d11c44ffp0 + }, + { // Entry 399 + -0x1.0215495ceb1806c15504264e9f1be222p0, + -0x1.95ec8b9e03d54p0 + }, + { // Entry 400 + 0x1.0215495ceb1806c15504264e9f1be222p0, + 0x1.95ec8b9e03d54p0 + }, + { // Entry 401 + -0x1.f923661b52647e658c1f9707f87d1606p-1, + -0x1.832efa2a435a9p0 + }, + { // Entry 402 + 0x1.f923661b52647e658c1f9707f87d1606p-1, + 0x1.832efa2a435a9p0 + }, + { // Entry 403 + -0x1.ed57806b9090def7310604bffed0093dp-1, + -0x1.707168b682dfep0 + }, + { // Entry 404 + 0x1.ed57806b9090def7310604bffed0093dp-1, + 0x1.707168b682dfep0 + }, + { // Entry 405 + -0x1.e0b524b578b4212100f5f78ecd69a1ddp-1, + -0x1.5db3d742c2653p0 + }, + { // Entry 406 + 0x1.e0b524b578b4212100f5f78ecd69a1ddp-1, + 0x1.5db3d742c2653p0 + }, + { // Entry 407 + -0x1.d3290701e8ac987ea5732b16701a05fcp-1, + -0x1.4af645cf01ea8p0 + }, + { // Entry 408 + 0x1.d3290701e8ac987ea5732b16701a05fcp-1, + 0x1.4af645cf01ea8p0 + }, + { // Entry 409 + -0x1.c49e488683ace4d5fd4683f7caab7e9fp-1, + -0x1.3838b45b416fdp0 + }, + { // Entry 410 + 0x1.c49e488683ace4d5fd4683f7caab7e9fp-1, + 0x1.3838b45b416fdp0 + }, + { // Entry 411 + -0x1.b4fe843e9e803b2349ffd384aab807f3p-1, + -0x1.257b22e780f52p0 + }, + { // Entry 412 + 0x1.b4fe843e9e803b2349ffd384aab807f3p-1, + 0x1.257b22e780f52p0 + }, + { // Entry 413 + -0x1.a431f39bc6f4fc2f533fb8b685f7fa56p-1, + -0x1.12bd9173c07abp0 + }, + { // Entry 414 + 0x1.a431f39bc6f4fc2f533fb8b685f7fa56p-1, + 0x1.12bd9173c07abp0 + }, + { // Entry 415 + -0x1.871278e2b0226c7be314f39e634cb866p-1, + -0x1.ea5c3ed5b3850p-1 + }, + { // Entry 416 + 0x1.871278e2b0226c7be314f39e634cb866p-1, + 0x1.ea5c3ed5b3850p-1 + }, + { // Entry 417 + -0x1.7b8b3be13fca614c858af0d2c2879b7ap-1, + -0x1.d4b87dab670a0p-1 + }, + { // Entry 418 + 0x1.7b8b3be13fca614c858af0d2c2879b7ap-1, + 0x1.d4b87dab670a0p-1 + }, + { // Entry 419 + -0x1.6f851ed60f1e0ce1ff2d5577433c5ab2p-1, + -0x1.bf14bc811a8f0p-1 + }, + { // Entry 420 + 0x1.6f851ed60f1e0ce1ff2d5577433c5ab2p-1, + 0x1.bf14bc811a8f0p-1 + }, + { // Entry 421 + -0x1.62fb644de198ccbb0b7e0d32484d4ec0p-1, + -0x1.a970fb56ce140p-1 + }, + { // Entry 422 + 0x1.62fb644de198ccbb0b7e0d32484d4ec0p-1, + 0x1.a970fb56ce140p-1 + }, + { // Entry 423 + -0x1.55e986b4afe0cfdcf0138634c7c95b2bp-1, + -0x1.93cd3a2c81990p-1 + }, + { // Entry 424 + 0x1.55e986b4afe0cfdcf0138634c7c95b2bp-1, + 0x1.93cd3a2c81990p-1 + }, + { // Entry 425 + -0x1.484b52126a2735deb224632c4c2e4042p-1, + -0x1.7e297902351e0p-1 + }, + { // Entry 426 + 0x1.484b52126a2735deb224632c4c2e4042p-1, + 0x1.7e297902351e0p-1 + }, + { // Entry 427 + -0x1.3a1d01c9f4b1e99685e3fe739fdcffdap-1, + -0x1.6885b7d7e8a30p-1 + }, + { // Entry 428 + 0x1.3a1d01c9f4b1e99685e3fe739fdcffdap-1, + 0x1.6885b7d7e8a30p-1 + }, + { // Entry 429 + -0x1.2b5b626353bb47148742f9c053cd45c3p-1, + -0x1.52e1f6ad9c280p-1 + }, + { // Entry 430 + 0x1.2b5b626353bb47148742f9c053cd45c3p-1, + 0x1.52e1f6ad9c280p-1 + }, + { // Entry 431 + -0x1.1c03f735e818163698043ffa524dd5f7p-1, + -0x1.3d3e35834fad0p-1 + }, + { // Entry 432 + 0x1.1c03f735e818163698043ffa524dd5f7p-1, + 0x1.3d3e35834fad0p-1 + }, + { // Entry 433 + -0x1.eab7b2edbe26eb1b5fb149357f51d6c9p-2, + -0x1.0a0b02501c799p-1 + }, + { // Entry 434 + 0x1.eab7b2edbe26eb1b5fb149357f51d6c9p-2, + 0x1.0a0b02501c799p-1 + }, + { // Entry 435 + -0x1.bb12f34bbefd630026b351ba15c3d256p-2, + -0x1.d8f7208e6b82cp-2 + }, + { // Entry 436 + 0x1.bb12f34bbefd630026b351ba15c3d256p-2, + 0x1.d8f7208e6b82cp-2 + }, + { // Entry 437 + -0x1.894ae0cb0ee2f00789eee093998b4a9bp-2, + -0x1.9dd83c7c9e126p-2 + }, + { // Entry 438 + 0x1.894ae0cb0ee2f00789eee093998b4a9bp-2, + 0x1.9dd83c7c9e126p-2 + }, + { // Entry 439 + -0x1.5579fdc3a8f3f9cf3f863dc6aa9b7198p-2, + -0x1.62b9586ad0a20p-2 + }, + { // Entry 440 + 0x1.5579fdc3a8f3f9cf3f863dc6aa9b7198p-2, + 0x1.62b9586ad0a20p-2 + }, + { // Entry 441 + -0x1.1fc79cfbf4e7b55f4dc25f1890fecd53p-2, + -0x1.279a74590331ap-2 + }, + { // Entry 442 + 0x1.1fc79cfbf4e7b55f4dc25f1890fecd53p-2, + 0x1.279a74590331ap-2 + }, + { // Entry 443 + -0x1.d0d0f85f973cce547bb0dc0a38708bffp-3, + -0x1.d8f7208e6b829p-3 + }, + { // Entry 444 + 0x1.d0d0f85f973cce547bb0dc0a38708bffp-3, + 0x1.d8f7208e6b829p-3 + }, + { // Entry 445 + -0x1.5f3d415cb47fed760072dbaeb268ceefp-3, + -0x1.62b9586ad0a1ep-3 + }, + { // Entry 446 + 0x1.5f3d415cb47fed760072dbaeb268ceefp-3, + 0x1.62b9586ad0a1ep-3 + }, + { // Entry 447 + -0x1.d6e1431de5be5630dec33d31fb926cbfp-4, + -0x1.d8f7208e6b826p-4 + }, + { // Entry 448 + 0x1.d6e1431de5be5630dec33d31fb926cbfp-4, + 0x1.d8f7208e6b826p-4 + }, + { // Entry 449 + -0x1.d870dcfcfe7d4ce3742c7268f8f5e0e8p-5, + -0x1.d8f7208e6b82dp-5 + }, + { // Entry 450 + 0x1.d870dcfcfe7d4ce3742c7268f8f5e0e8p-5, + 0x1.d8f7208e6b82dp-5 + }, + { // Entry 451 + 0x1.d870dcfcfe7d4ce3742c7268f8f5e0e8p-5, + 0x1.d8f7208e6b82dp-5 + }, + { // Entry 452 + -0x1.d870dcfcfe7d4ce3742c7268f8f5e0e8p-5, + -0x1.d8f7208e6b82dp-5 + }, + { // Entry 453 + 0x1.d6e1431de5bec4b79b64ec5a67bbcc08p-4, + 0x1.d8f7208e6b82dp-4 + }, + { // Entry 454 + -0x1.d6e1431de5bec4b79b64ec5a67bbcc08p-4, + -0x1.d8f7208e6b82dp-4 + }, + { // Entry 455 + 0x1.5f3d415cb4802b98cc41263eda7f242ap-3, + 0x1.62b9586ad0a22p-3 + }, + { // Entry 456 + -0x1.5f3d415cb4802b98cc41263eda7f242ap-3, + -0x1.62b9586ad0a22p-3 + }, + { // Entry 457 + 0x1.d0d0f85f973d0b16e9de3a03bdc6808bp-3, + 0x1.d8f7208e6b82dp-3 + }, + { // Entry 458 + -0x1.d0d0f85f973d0b16e9de3a03bdc6808bp-3, + -0x1.d8f7208e6b82dp-3 + }, + { // Entry 459 + 0x1.1fc79cfbf4e7d2e9265fe8f12eda96cap-2, + 0x1.279a74590331cp-2 + }, + { // Entry 460 + -0x1.1fc79cfbf4e7d2e9265fe8f12eda96cap-2, + -0x1.279a74590331cp-2 + }, + { // Entry 461 + 0x1.5579fdc3a8f4166188aad00fcf71b510p-2, + 0x1.62b9586ad0a22p-2 + }, + { // Entry 462 + -0x1.5579fdc3a8f4166188aad00fcf71b510p-2, + -0x1.62b9586ad0a22p-2 + }, + { // Entry 463 + 0x1.894ae0cb0ee30b895f6381f3b133dc04p-2, + 0x1.9dd83c7c9e128p-2 + }, + { // Entry 464 + -0x1.894ae0cb0ee30b895f6381f3b133dc04p-2, + -0x1.9dd83c7c9e128p-2 + }, + { // Entry 465 + 0x1.bb12f34bbefd7d5fccadb160103a2001p-2, + 0x1.d8f7208e6b82ep-2 + }, + { // Entry 466 + -0x1.bb12f34bbefd7d5fccadb160103a2001p-2, + -0x1.d8f7208e6b82ep-2 + }, + { // Entry 467 + 0x1.eab7b2edbe26eb1b5fb149357f51d6c9p-2, + 0x1.0a0b02501c799p-1 + }, + { // Entry 468 + -0x1.eab7b2edbe26eb1b5fb149357f51d6c9p-2, + -0x1.0a0b02501c799p-1 + }, + { // Entry 469 + 0x1.1c03f735e817e7f7c907ff3c4e54650dp-1, + 0x1.3d3e35834faccp-1 + }, + { // Entry 470 + -0x1.1c03f735e817e7f7c907ff3c4e54650dp-1, + -0x1.3d3e35834faccp-1 + }, + { // Entry 471 + 0x1.2b5b626353bb1a939a57893481fc6efep-1, + 0x1.52e1f6ad9c27cp-1 + }, + { // Entry 472 + -0x1.2b5b626353bb1a939a57893481fc6efep-1, + -0x1.52e1f6ad9c27cp-1 + }, + { // Entry 473 + 0x1.3a1d01c9f4b1becd56338b2ff004552cp-1, + 0x1.6885b7d7e8a2cp-1 + }, + { // Entry 474 + -0x1.3a1d01c9f4b1becd56338b2ff004552cp-1, + -0x1.6885b7d7e8a2cp-1 + }, + { // Entry 475 + 0x1.484b52126a270cc4c2f0b9b8d5749c23p-1, + 0x1.7e297902351dcp-1 + }, + { // Entry 476 + -0x1.484b52126a270cc4c2f0b9b8d5749c23p-1, + -0x1.7e297902351dcp-1 + }, + { // Entry 477 + 0x1.55e986b4afe0a867e17b875f8892133ep-1, + 0x1.93cd3a2c8198cp-1 + }, + { // Entry 478 + -0x1.55e986b4afe0a867e17b875f8892133ep-1, + -0x1.93cd3a2c8198cp-1 + }, + { // Entry 479 + 0x1.62fb644de198a6df044c5f206ab189e5p-1, + 0x1.a970fb56ce13cp-1 + }, + { // Entry 480 + -0x1.62fb644de198a6df044c5f206ab189e5p-1, + -0x1.a970fb56ce13cp-1 + }, + { // Entry 481 + 0x1.6f851ed60f1de8920ad396732d80e630p-1, + 0x1.bf14bc811a8ecp-1 + }, + { // Entry 482 + -0x1.6f851ed60f1de8920ad396732d80e630p-1, + -0x1.bf14bc811a8ecp-1 + }, + { // Entry 483 + 0x1.7b8b3be13fca3e7ae61ece393dc20351p-1, + 0x1.d4b87dab6709cp-1 + }, + { // Entry 484 + -0x1.7b8b3be13fca3e7ae61ece393dc20351p-1, + -0x1.d4b87dab6709cp-1 + }, + { // Entry 485 + 0x1.871278e2b0224b1a57a7517aa6080561p-1, + 0x1.ea5c3ed5b384cp-1 + }, + { // Entry 486 + -0x1.871278e2b0224b1a57a7517aa6080561p-1, + -0x1.ea5c3ed5b384cp-1 + }, + { // Entry 487 + 0x1.a431f39bc6f4fc2f533fb8b685f7fa56p-1, + 0x1.12bd9173c07abp0 + }, + { // Entry 488 + -0x1.a431f39bc6f4fc2f533fb8b685f7fa56p-1, + -0x1.12bd9173c07abp0 + }, + { // Entry 489 + 0x1.b4fe843e9e8072727b4b8be7730dc9f5p-1, + 0x1.257b22e780f56p0 + }, + { // Entry 490 + -0x1.b4fe843e9e8072727b4b8be7730dc9f5p-1, + -0x1.257b22e780f56p0 + }, + { // Entry 491 + 0x1.c49e488683ad184b42699159db8963c3p-1, + 0x1.3838b45b41701p0 + }, + { // Entry 492 + -0x1.c49e488683ad184b42699159db8963c3p-1, + -0x1.3838b45b41701p0 + }, + { // Entry 493 + 0x1.d3290701e8acc868f20733059c0c608ep-1, + 0x1.4af645cf01eacp0 + }, + { // Entry 494 + -0x1.d3290701e8acc868f20733059c0c608ep-1, + -0x1.4af645cf01eacp0 + }, + { // Entry 495 + 0x1.e0b524b578b44dca424e286b8612b332p-1, + 0x1.5db3d742c2657p0 + }, + { // Entry 496 + -0x1.e0b524b578b44dca424e286b8612b332p-1, + -0x1.5db3d742c2657p0 + }, + { // Entry 497 + 0x1.ed57806b909108a3ff02c70a568bf594p-1, + 0x1.707168b682e02p0 + }, + { // Entry 498 + -0x1.ed57806b909108a3ff02c70a568bf594p-1, + -0x1.707168b682e02p0 + }, + { // Entry 499 + 0x1.f923661b5264a5551df6c3d4c279e2c6p-1, + 0x1.832efa2a435adp0 + }, + { // Entry 500 + -0x1.f923661b5264a5551df6c3d4c279e2c6p-1, + -0x1.832efa2a435adp0 + }, + { // Entry 501 + 0x1.0215495ceb1818f77c287b62995eeddbp0, + 0x1.95ec8b9e03d58p0 + }, + { // Entry 502 + -0x1.0215495ceb1818f77c287b62995eeddbp0, + -0x1.95ec8b9e03d58p0 + }, + { // Entry 503 + 0x1.073ea15c614e11668ba9fe75888fee13p0, + 0x1.a8aa1d11c44ffp0 + }, + { // Entry 504 + -0x1.073ea15c614e11668ba9fe75888fee13p0, + -0x1.a8aa1d11c44ffp0 + }, + { // Entry 505 + 0x1.96c4c0ec290ebef92ab936700e7d3f1bp-1, + 0x1.04aff6d330942p0 + }, + { // Entry 506 + -0x1.96c4c0ec290ebef92ab936700e7d3f1bp-1, + -0x1.04aff6d330942p0 + }, + { // Entry 507 + 0x1.96c565a66992e578d5536359e24d1cffp-1, + 0x1.04b09e98dcdb4p0 + }, + { // Entry 508 + -0x1.96c565a66992e578d5536359e24d1cffp-1, + -0x1.04b09e98dcdb4p0 + }, + { // Entry 509 + 0x1.96c60a603e270ac6f5547fd0c1f8f8ecp-1, + 0x1.04b1465e89226p0 + }, + { // Entry 510 + -0x1.96c60a603e270ac6f5547fd0c1f8f8ecp-1, + -0x1.04b1465e89226p0 + }, + { // Entry 511 + 0x1.96c6af19a6cb76e043213a66372fc856p-1, + 0x1.04b1ee2435698p0 + }, + { // Entry 512 + -0x1.96c6af19a6cb76e043213a66372fc856p-1, + -0x1.04b1ee2435698p0 + }, + { // Entry 513 + 0x1.96c753d2a38071c172287dd0e901a28ep-1, + 0x1.04b295e9e1b0ap0 + }, + { // Entry 514 + -0x1.96c753d2a38071c172287dd0e901a28ep-1, + -0x1.04b295e9e1b0ap0 + }, + { // Entry 515 + 0x1.96c7f88b3446436730e2c7c9e49c64fap-1, + 0x1.04b33daf8df7cp0 + }, + { // Entry 516 + -0x1.96c7f88b3446436730e2c7c9e49c64fap-1, + -0x1.04b33daf8df7cp0 + }, + { // Entry 517 + 0x1.96c89d43591d33ce28d17fec2513bfcbp-1, + 0x1.04b3e5753a3eep0 + }, + { // Entry 518 + -0x1.96c89d43591d33ce28d17fec2513bfcbp-1, + -0x1.04b3e5753a3eep0 + }, + { // Entry 519 + 0x1.96c941fb12058af2fe7e4e965a300441p-1, + 0x1.04b48d3ae6860p0 + }, + { // Entry 520 + -0x1.96c941fb12058af2fe7e4e965a300441p-1, + -0x1.04b48d3ae6860p0 + }, + { // Entry 521 + 0x1.96c9e6b25eff61b237930a7d05a731ebp-1, + 0x1.04b5350092ccfp0 + }, + { // Entry 522 + -0x1.96c9e6b25eff61b237930a7d05a731ebp-1, + -0x1.04b5350092ccfp0 + }, + { // Entry 523 + -0.0, + -0x1.0p-1074 + }, + { // Entry 524 + 0.0, + 0x1.0p-1074 + }, + { // Entry 525 + -0.0, + -0.0 + }, + { // Entry 526 + 0.0, + 0x1.0p-1074 + }, + { // Entry 527 + -0.0, + -0x1.0p-1074 + }, + { // Entry 528 + 0x1.0c152382d73648a8c8f9175719d84f03p-1, + 0x1.279a74590331bp-1 + }, + { // Entry 529 + -0x1.0c152382d73648a8c8f9175719d84f03p-1, + -0x1.279a74590331bp-1 + }, + { // Entry 530 + 0x1.0c152382d73654a8c8f917571a1aed4ap-1, + 0x1.279a74590331cp-1 + }, + { // Entry 531 + -0x1.0c152382d73654a8c8f917571a1aed4ap-1, + -0x1.279a74590331cp-1 + }, + { // Entry 532 + 0x1.0c152382d73660a8c8f917571a0a6821p-1, + 0x1.279a74590331dp-1 + }, + { // Entry 533 + -0x1.0c152382d73660a8c8f917571a0a6821p-1, + -0x1.279a74590331dp-1 + }, + { // Entry 534 + 0x1.0c152382d7365277925622b33812561ep0, + 0x1.bb67ae8584ca9p0 + }, + { // Entry 535 + -0x1.0c152382d7365277925622b33812561ep0, + -0x1.bb67ae8584ca9p0 + }, + { // Entry 536 + 0x1.0c152382d7365677925622b338471928p0, + 0x1.bb67ae8584caap0 + }, + { // Entry 537 + -0x1.0c152382d7365677925622b338471928p0, + -0x1.bb67ae8584caap0 + }, + { // Entry 538 + 0x1.0c152382d7365a77925622b338446f3cp0, + 0x1.bb67ae8584cabp0 + }, + { // Entry 539 + -0x1.0c152382d7365a77925622b338446f3cp0, + -0x1.bb67ae8584cabp0 + }, + { // Entry 540 + 0x1.a64eec3cc23fbdfe90b96189d12851b4p-2, + 0x1.bffffffffffffp-2 + }, + { // Entry 541 + -0x1.a64eec3cc23fbdfe90b96189d12851b4p-2, + -0x1.bffffffffffffp-2 + }, + { // Entry 542 + 0x1.a64eec3cc23fcb6c84f92bd2003ce26cp-2, + 0x1.cp-2 + }, + { // Entry 543 + -0x1.a64eec3cc23fcb6c84f92bd2003ce26cp-2, + -0x1.cp-2 + }, + { // Entry 544 + 0x1.a64eec3cc23fd8da7938f61a2f29ff73p-2, + 0x1.c000000000001p-2 + }, + { // Entry 545 + -0x1.a64eec3cc23fd8da7938f61a2f29ff73p-2, + -0x1.c000000000001p-2 + }, + { // Entry 546 + 0x1.345f01cce37ba96325eacdc6f7ceec8cp-1, + 0x1.5ffffffffffffp-1 + }, + { // Entry 547 + -0x1.345f01cce37ba96325eacdc6f7ceec8cp-1, + -0x1.5ffffffffffffp-1 + }, + { // Entry 548 + 0x1.345f01cce37bb440844df1c4409fe779p-1, + 0x1.6p-1 + }, + { // Entry 549 + -0x1.345f01cce37bb440844df1c4409fe779p-1, + -0x1.6p-1 + }, + { // Entry 550 + 0x1.345f01cce37bbf1de2b115c1891fbafap-1, + 0x1.6000000000001p-1 + }, + { // Entry 551 + -0x1.345f01cce37bbf1de2b115c1891fbafap-1, + -0x1.6000000000001p-1 + }, + { // Entry 552 + 0x1.bde70ed439fe5f73a215d6096c04b42bp-1, + 0x1.2ffffffffffffp0 + }, + { // Entry 553 + -0x1.bde70ed439fe5f73a215d6096c04b42bp-1, + -0x1.2ffffffffffffp0 + }, + { // Entry 554 + 0x1.bde70ed439fe6cba95391a7f421b3821p-1, + 0x1.3p0 + }, + { // Entry 555 + -0x1.bde70ed439fe6cba95391a7f421b3821p-1, + -0x1.3p0 + }, + { // Entry 556 + 0x1.bde70ed439fe7a01885c5ef51760662ap-1, + 0x1.3000000000001p0 + }, + { // Entry 557 + -0x1.bde70ed439fe7a01885c5ef51760662ap-1, + -0x1.3000000000001p0 + }, + { // Entry 558 + 0x1.2e75728833a53c7ab9de734b9eb4f397p0, + 0x1.37fffffffffffp1 + }, + { // Entry 559 + -0x1.2e75728833a53c7ab9de734b9eb4f397p0, + -0x1.37fffffffffffp1 + }, + { // Entry 560 + 0x1.2e75728833a54116e3ef7326bd9839p0, + 0x1.380p1 + }, + { // Entry 561 + -0x1.2e75728833a54116e3ef7326bd9839p0, + -0x1.380p1 + }, + { // Entry 562 + 0x1.2e75728833a545b30e007301dc13e399p0, + 0x1.3800000000001p1 + }, + { // Entry 563 + -0x1.2e75728833a545b30e007301dc13e399p0, + -0x1.3800000000001p1 + }, + { // Entry 564 + 0x1.0640a74d6105ee338c5bcc6c7348c123p-4, + 0x1.069c8b46b3792p-4 + }, + { // Entry 565 + -0x1.0640a74d6105ee338c5bcc6c7348c123p-4, + -0x1.069c8b46b3792p-4 + }, + { // Entry 566 + 0x1.052fab368e062e72fbf2d39fe9d18888p-3, + 0x1.069c8b46b3792p-3 + }, + { // Entry 567 + -0x1.052fab368e062e72fbf2d39fe9d18888p-3, + -0x1.069c8b46b3792p-3 + }, + { // Entry 568 + 0x1.852a21876f242e8b182abd42c41ee89dp-3, + 0x1.89ead0ea0d35bp-3 + }, + { // Entry 569 + -0x1.852a21876f242e8b182abd42c41ee89dp-3, + -0x1.89ead0ea0d35bp-3 + }, + { // Entry 570 + 0x1.01123bc10a64bf0ab62d6ef7f32651aap-2, + 0x1.069c8b46b3792p-2 + }, + { // Entry 571 + -0x1.01123bc10a64bf0ab62d6ef7f32651aap-2, + -0x1.069c8b46b3792p-2 + }, + { // Entry 572 + 0x1.3daa733ee5357808e68aee008972c828p-2, + 0x1.4843ae1860576p-2 + }, + { // Entry 573 + -0x1.3daa733ee5357808e68aee008972c828p-2, + -0x1.4843ae1860576p-2 + }, + { // Entry 574 + 0x1.780c45b9736a9089f2fe1f8efa60bf44p-2, + 0x1.89ead0ea0d35ap-2 + }, + { // Entry 575 + -0x1.780c45b9736a9089f2fe1f8efa60bf44p-2, + -0x1.89ead0ea0d35ap-2 + }, + { // Entry 576 + 0x1.affaac96d797029e0b8ab4083d980b68p-2, + 0x1.cb91f3bbba13ep-2 + }, + { // Entry 577 + -0x1.affaac96d797029e0b8ab4083d980b68p-2, + -0x1.cb91f3bbba13ep-2 + }, + { // Entry 578 + 0x1.e54c7f9dac6708f315d38c8a8c2ce4d3p-2, + 0x1.069c8b46b3791p-1 + }, + { // Entry 579 + -0x1.e54c7f9dac6708f315d38c8a8c2ce4d3p-2, + -0x1.069c8b46b3791p-1 + }, + { // Entry 580 + 0x1.0bf560a09b924073e473cb0d5c32501ep-1, + 0x1.27701caf89e83p-1 + }, + { // Entry 581 + -0x1.0bf560a09b924073e473cb0d5c32501ep-1, + -0x1.27701caf89e83p-1 + }, + { // Entry 582 + 0x1.23e717d0fa7b0b8bf45d2cd120f6d29ep-1, + 0x1.4843ae1860575p-1 + }, + { // Entry 583 + -0x1.23e717d0fa7b0b8bf45d2cd120f6d29ep-1, + -0x1.4843ae1860575p-1 + }, + { // Entry 584 + 0x1.3a7e3f4793afa9a24b0112ea83035c7ep-1, + 0x1.69173f8136c67p-1 + }, + { // Entry 585 + -0x1.3a7e3f4793afa9a24b0112ea83035c7ep-1, + -0x1.69173f8136c67p-1 + }, + { // Entry 586 + 0x1.4fc2c55f7154871c8daa35843857b7ffp-1, + 0x1.89ead0ea0d359p-1 + }, + { // Entry 587 + -0x1.4fc2c55f7154871c8daa35843857b7ffp-1, + -0x1.89ead0ea0d359p-1 + }, + { // Entry 588 + 0x1.63c05ef8a353c6d1360ead977c2adb94p-1, + 0x1.aabe6252e3a4bp-1 + }, + { // Entry 589 + -0x1.63c05ef8a353c6d1360ead977c2adb94p-1, + -0x1.aabe6252e3a4bp-1 + }, + { // Entry 590 + 0x1.7685624cb374ad8950ee302aee748ad9p-1, + 0x1.cb91f3bbba13dp-1 + }, + { // Entry 591 + -0x1.7685624cb374ad8950ee302aee748ad9p-1, + -0x1.cb91f3bbba13dp-1 + }, + { // Entry 592 + 0x1.8821d1878dcb0371d2ed00f8bad7755ep-1, + 0x1.ec6585249082fp-1 + }, + { // Entry 593 + -0x1.8821d1878dcb0371d2ed00f8bad7755ep-1, + -0x1.ec6585249082fp-1 + }, + { // Entry 594 + 0x1.98a69592999488465c8b6185dd58b38ap-1, + 0x1.069c8b46b3791p0 + }, + { // Entry 595 + -0x1.98a69592999488465c8b6185dd58b38ap-1, + -0x1.069c8b46b3791p0 + }, + { // Entry 596 + 0x1.a824e56beafb17efb9ed12695185cc5bp-1, + 0x1.170653fb1eb0ap0 + }, + { // Entry 597 + -0x1.a824e56beafb17efb9ed12695185cc5bp-1, + -0x1.170653fb1eb0ap0 + }, + { // Entry 598 + 0x1.b6add448714e627e74ee9ce6911993e6p-1, + 0x1.27701caf89e83p0 + }, + { // Entry 599 + -0x1.b6add448714e627e74ee9ce6911993e6p-1, + -0x1.27701caf89e83p0 + }, + { // Entry 600 + 0x1.c4520007344f8b36a1c610e27f4bb57ep-1, + 0x1.37d9e563f51fcp0 + }, + { // Entry 601 + -0x1.c4520007344f8b36a1c610e27f4bb57ep-1, + -0x1.37d9e563f51fcp0 + }, + { // Entry 602 + 0x1.d12159a144ff3c88e549b6c7fe977a6bp-1, + 0x1.4843ae1860575p0 + }, + { // Entry 603 + -0x1.d12159a144ff3c88e549b6c7fe977a6bp-1, + -0x1.4843ae1860575p0 + }, + { // Entry 604 + 0x1.dd2b01e17c4270caa5ead83118478c99p-1, + 0x1.58ad76cccb8eep0 + }, + { // Entry 605 + -0x1.dd2b01e17c4270caa5ead83118478c99p-1, + -0x1.58ad76cccb8eep0 + }, + { // Entry 606 + 0x1.e87d358361bd4751c472fe76608804f7p-1, + 0x1.69173f8136c67p0 + }, + { // Entry 607 + -0x1.e87d358361bd4751c472fe76608804f7p-1, + -0x1.69173f8136c67p0 + }, + { // Entry 608 + 0x1.f32544b66aa5dfd1d5c551c7b435f099p-1, + 0x1.79810835a1fe0p0 + }, + { // Entry 609 + -0x1.f32544b66aa5dfd1d5c551c7b435f099p-1, + -0x1.79810835a1fe0p0 + }, + { // Entry 610 + 0x1.fd2f92d1f51f1d323eacb60983a6f40dp-1, + 0x1.89ead0ea0d359p0 + }, + { // Entry 611 + -0x1.fd2f92d1f51f1d323eacb60983a6f40dp-1, + -0x1.89ead0ea0d359p0 + }, + { // Entry 612 + 0x1.0353cdddc16607e33b1f4c9d55ff1784p0, + 0x1.9a54999e786d2p0 + }, + { // Entry 613 + -0x1.0353cdddc16607e33b1f4c9d55ff1784p0, + -0x1.9a54999e786d2p0 + }, + { // Entry 614 + 0x1.07cbfe8c14dd9ae6823776b5a4d81ba9p0, + 0x1.aabe6252e3a4bp0 + }, + { // Entry 615 + -0x1.07cbfe8c14dd9ae6823776b5a4d81ba9p0, + -0x1.aabe6252e3a4bp0 + }, + { // Entry 616 + 0x1.0c0540ee6eff5cb8c83f0e7e225652c0p0, + 0x1.bb282b074edc4p0 + }, + { // Entry 617 + -0x1.0c0540ee6eff5cb8c83f0e7e225652c0p0, + -0x1.bb282b074edc4p0 + }, + { // Entry 618 + 0x1.1004179915f3bd7827be1c9d557de4b1p0, + 0x1.cb91f3bbba13dp0 + }, + { // Entry 619 + -0x1.1004179915f3bd7827be1c9d557de4b1p0, + -0x1.cb91f3bbba13dp0 + }, + { // Entry 620 + 0x1.13cca8f590cdd610776bb232694ba1c1p0, + 0x1.dbfbbc70254b6p0 + }, + { // Entry 621 + -0x1.13cca8f590cdd610776bb232694ba1c1p0, + -0x1.dbfbbc70254b6p0 + }, + { // Entry 622 + 0x1.1762c60438ce2cf59a91a21864529016p0, + 0x1.ec6585249082fp0 + }, + { // Entry 623 + -0x1.1762c60438ce2cf59a91a21864529016p0, + -0x1.ec6585249082fp0 + }, + { // Entry 624 + 0x1.1ac9f0f5f0ac59ef468d0e8c13eecc94p0, + 0x1.fccf4dd8fbba8p0 + }, + { // Entry 625 + -0x1.1ac9f0f5f0ac59ef468d0e8c13eecc94p0, + -0x1.fccf4dd8fbba8p0 + }, + { // Entry 626 + 0x1.1e05637ffc0a8a6d0a7e22324ebefacfp0, + 0x1.069c8b46b3791p1 + }, + { // Entry 627 + -0x1.1e05637ffc0a8a6d0a7e22324ebefacfp0, + -0x1.069c8b46b3791p1 + }, + { // Entry 628 + 0x1.211814d79540eebd6dda8be7ed197d84p0, + 0x1.0ed16fa0e914ep1 + }, + { // Entry 629 + -0x1.211814d79540eebd6dda8be7ed197d84p0, + -0x1.0ed16fa0e914ep1 + }, + { // Entry 630 + 0x1.2404bf4b3ead000faf892c3f4eb4bfa9p0, + 0x1.170653fb1eb0bp1 + }, + { // Entry 631 + -0x1.2404bf4b3ead000faf892c3f4eb4bfa9p0, + -0x1.170653fb1eb0bp1 + }, + { // Entry 632 + 0x1.26cde575b64162e9e462d564797a5dd7p0, + 0x1.1f3b3855544c8p1 + }, + { // Entry 633 + -0x1.26cde575b64162e9e462d564797a5dd7p0, + -0x1.1f3b3855544c8p1 + }, + { // Entry 634 + 0x1.2975d70a874ee2c0fbc4d32b9997edb4p0, + 0x1.27701caf89e85p1 + }, + { // Entry 635 + -0x1.2975d70a874ee2c0fbc4d32b9997edb4p0, + -0x1.27701caf89e85p1 + }, + { // Entry 636 + 0x1.2bfeb53ef2d629fd2ec3bbe0988ec127p0, + 0x1.2fa50109bf842p1 + }, + { // Entry 637 + -0x1.2bfeb53ef2d629fd2ec3bbe0988ec127p0, + -0x1.2fa50109bf842p1 + }, + { // Entry 638 + 0x1.2e6a76d3a7c4daa88cd0858debcbfd55p0, + 0x1.37d9e563f51ffp1 + }, + { // Entry 639 + -0x1.2e6a76d3a7c4daa88cd0858debcbfd55p0, + -0x1.37d9e563f51ffp1 + }, + { // Entry 640 + 0x1.30baebc4d0b12279c4c6a70a83ec7404p0, + 0x1.400ec9be2abbcp1 + }, + { // Entry 641 + -0x1.30baebc4d0b12279c4c6a70a83ec7404p0, + -0x1.400ec9be2abbcp1 + }, + { // Entry 642 + 0x1.32f1c0a688709db9016d269725c02a4fp0, + 0x1.4843ae1860579p1 + }, + { // Entry 643 + -0x1.32f1c0a688709db9016d269725c02a4fp0, + -0x1.4843ae1860579p1 + }, + { // Entry 644 + 0x1.351081b3f9205c658eef3c57bcc8acb2p0, + 0x1.5078927295f36p1 + }, + { // Entry 645 + -0x1.351081b3f9205c658eef3c57bcc8acb2p0, + -0x1.5078927295f36p1 + }, + { // Entry 646 + 0x1.37189d975e5f9cb962f7bf8cf038ccc8p0, + 0x1.58ad76cccb8f3p1 + }, + { // Entry 647 + -0x1.37189d975e5f9cb962f7bf8cf038ccc8p0, + -0x1.58ad76cccb8f3p1 + }, + { // Entry 648 + 0x1.390b67f0f05fe3c31d028790ff0ff571p0, + 0x1.60e25b27012b0p1 + }, + { // Entry 649 + -0x1.390b67f0f05fe3c31d028790ff0ff571p0, + -0x1.60e25b27012b0p1 + }, + { // Entry 650 + 0x1.3aea1ba270fc7663f575c66a2dbf5ff8p0, + 0x1.69173f8136c6dp1 + }, + { // Entry 651 + -0x1.3aea1ba270fc7663f575c66a2dbf5ff8p0, + -0x1.69173f8136c6dp1 + }, + { // Entry 652 + 0x1.3cb5dce4b8f630b629d722f5ae3dc757p0, + 0x1.714c23db6c62ap1 + }, + { // Entry 653 + -0x1.3cb5dce4b8f630b629d722f5ae3dc757p0, + -0x1.714c23db6c62ap1 + }, + { // Entry 654 + 0x1.3e6fbb2c41396ce4aeff19d97552d217p0, + 0x1.79810835a1fe7p1 + }, + { // Entry 655 + -0x1.3e6fbb2c41396ce4aeff19d97552d217p0, + -0x1.79810835a1fe7p1 + }, + { // Entry 656 + 0x1.4018b2e13fe932bca7539dacbfa4d09ep0, + 0x1.81b5ec8fd79a4p1 + }, + { // Entry 657 + -0x1.4018b2e13fe932bca7539dacbfa4d09ep0, + -0x1.81b5ec8fd79a4p1 + }, + { // Entry 658 + 0x1.41b1aeef8e4ae6bd8723cc148d6caf10p0, + 0x1.89ead0ea0d35bp1 + }, + { // Entry 659 + -0x1.41b1aeef8e4ae6bd8723cc148d6caf10p0, + -0x1.89ead0ea0d35bp1 + }, + { // Entry 660 + -0x1.6807a9c540dd353125463348a685edc8p0, + -0x1.81b5ec8fd799fp2 + }, + { // Entry 661 + 0x1.6807a9c540dd353125463348a685edc8p0, + 0x1.81b5ec8fd799fp2 + }, + { // Entry 662 + -0x1.6631e1a59590376d984470d99cc8df7bp0, + -0x1.714c23db6c626p2 + }, + { // Entry 663 + 0x1.6631e1a59590376d984470d99cc8df7bp0, + 0x1.714c23db6c626p2 + }, + { // Entry 664 + -0x1.6431bb7edf2bb723008b3c51ca448a76p0, + -0x1.60e25b27012adp2 + }, + { // Entry 665 + 0x1.6431bb7edf2bb723008b3c51ca448a76p0, + 0x1.60e25b27012adp2 + }, + { // Entry 666 + -0x1.6201493b022361bd3c406520761b65cfp0, + -0x1.5078927295f34p2 + }, + { // Entry 667 + 0x1.6201493b022361bd3c406520761b65cfp0, + 0x1.5078927295f34p2 + }, + { // Entry 668 + -0x1.5f9977a47aee17d0f12c193a7dd62259p0, + -0x1.400ec9be2abbbp2 + }, + { // Entry 669 + 0x1.5f9977a47aee17d0f12c193a7dd62259p0, + 0x1.400ec9be2abbbp2 + }, + { // Entry 670 + -0x1.5cf1c53dd9ca9fa29b3bb04ec56e073fp0, + -0x1.2fa50109bf842p2 + }, + { // Entry 671 + 0x1.5cf1c53dd9ca9fa29b3bb04ec56e073fp0, + 0x1.2fa50109bf842p2 + }, + { // Entry 672 + -0x1.59ffe278fb5d0fd66d3a875f34e955b9p0, + -0x1.1f3b3855544c9p2 + }, + { // Entry 673 + 0x1.59ffe278fb5d0fd66d3a875f34e955b9p0, + 0x1.1f3b3855544c9p2 + }, + { // Entry 674 + -0x1.56b732e5cd9e7665c855c33ec7ba86a3p0, + -0x1.0ed16fa0e9150p2 + }, + { // Entry 675 + 0x1.56b732e5cd9e7665c855c33ec7ba86a3p0, + 0x1.0ed16fa0e9150p2 + }, + { // Entry 676 + -0x1.530823483d3605b2bd96ffaf2c4679c9p0, + -0x1.fccf4dd8fbbaep1 + }, + { // Entry 677 + 0x1.530823483d3605b2bd96ffaf2c4679c9p0, + 0x1.fccf4dd8fbbaep1 + }, + { // Entry 678 + -0x1.4edf430c0024477cefffec364da85c1dp0, + -0x1.dbfbbc70254bcp1 + }, + { // Entry 679 + 0x1.4edf430c0024477cefffec364da85c1dp0, + 0x1.dbfbbc70254bcp1 + }, + { // Entry 680 + -0x1.4a2407447a81c7dc1121259e08565d3ep0, + -0x1.bb282b074edcap1 + }, + { // Entry 681 + 0x1.4a2407447a81c7dc1121259e08565d3ep0, + 0x1.bb282b074edcap1 + }, + { // Entry 682 + -0x1.44b710bde944f5b73d2380913fb96b93p0, + -0x1.9a54999e786d8p1 + }, + { // Entry 683 + 0x1.44b710bde944f5b73d2380913fb96b93p0, + 0x1.9a54999e786d8p1 + }, + { // Entry 684 + -0x1.3e6fbb2c41396997fae3ce7cb202ab3cp0, + -0x1.79810835a1fe6p1 + }, + { // Entry 685 + 0x1.3e6fbb2c41396997fae3ce7cb202ab3cp0, + 0x1.79810835a1fe6p1 + }, + { // Entry 686 + -0x1.37189d975e5fa09a38272d7f560e0da4p0, + -0x1.58ad76cccb8f4p1 + }, + { // Entry 687 + 0x1.37189d975e5fa09a38272d7f560e0da4p0, + 0x1.58ad76cccb8f4p1 + }, + { // Entry 688 + -0x1.2e6a76d3a7c4e87fefa518c326ab6156p0, + -0x1.37d9e563f5202p1 + }, + { // Entry 689 + 0x1.2e6a76d3a7c4e87fefa518c326ab6156p0, + 0x1.37d9e563f5202p1 + }, + { // Entry 690 + -0x1.2404bf4b3ead1be0d614e16bd1916f4dp0, + -0x1.170653fb1eb10p1 + }, + { // Entry 691 + 0x1.2404bf4b3ead1be0d614e16bd1916f4dp0, + 0x1.170653fb1eb10p1 + }, + { // Entry 692 + -0x1.1762c60438ce5938069b20cf6314944ap0, + -0x1.ec6585249083cp0 + }, + { // Entry 693 + 0x1.1762c60438ce5938069b20cf6314944ap0, + 0x1.ec6585249083cp0 + }, + { // Entry 694 + -0x1.07cbfe8c14ddd1f1d38ba981b0996a1ap0, + -0x1.aabe6252e3a58p0 + }, + { // Entry 695 + 0x1.07cbfe8c14ddd1f1d38ba981b0996a1ap0, + 0x1.aabe6252e3a58p0 + }, + { // Entry 696 + -0x1.e87d358361bdd2789fd13900549104c2p-1, + -0x1.69173f8136c74p0 + }, + { // Entry 697 + 0x1.e87d358361bdd2789fd13900549104c2p-1, + 0x1.69173f8136c74p0 + }, + { // Entry 698 + -0x1.b6add448714f14e4cbd045740116f534p-1, + -0x1.27701caf89e90p0 + }, + { // Entry 699 + 0x1.b6add448714f14e4cbd045740116f534p-1, + 0x1.27701caf89e90p0 + }, + { // Entry 700 + -0x1.7685624cb37593eb960af368aeea2616p-1, + -0x1.cb91f3bbba157p-1 + }, + { // Entry 701 + 0x1.7685624cb37593eb960af368aeea2616p-1, + 0x1.cb91f3bbba157p-1 + }, + { // Entry 702 + -0x1.23e717d0fa7c2705659e11ed85e6dac4p-1, + -0x1.4843ae186058ep-1 + }, + { // Entry 703 + 0x1.23e717d0fa7c2705659e11ed85e6dac4p-1, + 0x1.4843ae186058ep-1 + }, + { // Entry 704 + -0x1.780c45b9736d2d89e5dbc5fe7167a786p-2, + -0x1.89ead0ea0d38ap-2 + }, + { // Entry 705 + 0x1.780c45b9736d2d89e5dbc5fe7167a786p-2, + 0x1.89ead0ea0d38ap-2 + }, + { // Entry 706 + -0x1.052fab368e0bf61ea3f942bd2601e1bap-3, + -0x1.069c8b46b37f0p-3 + }, + { // Entry 707 + 0x1.052fab368e0bf61ea3f942bd2601e1bap-3, + 0x1.069c8b46b37f0p-3 + }, + { // Entry 708 + 0x1.052fab368e0066c753ec64819b76a489p-3, + 0x1.069c8b46b3734p-3 + }, + { // Entry 709 + -0x1.052fab368e0066c753ec64819b76a489p-3, + -0x1.069c8b46b3734p-3 + }, + { // Entry 710 + 0x1.780c45b973680f69ff94600d976ecca3p-2, + 0x1.89ead0ea0d32cp-2 + }, + { // Entry 711 + -0x1.780c45b973680f69ff94600d976ecca3p-2, + -0x1.89ead0ea0d32cp-2 + }, + { // Entry 712 + 0x1.23e717d0fa7a1216d86181eab105dcf9p-1, + 0x1.4843ae186055fp-1 + }, + { // Entry 713 + -0x1.23e717d0fa7a1216d86181eab105dcf9p-1, + -0x1.4843ae186055fp-1 + }, + { // Entry 714 + 0x1.7685624cb373f375056aa629c14d7f7ep-1, + 0x1.cb91f3bbba128p-1 + }, + { // Entry 715 + -0x1.7685624cb373f375056aa629c14d7f7ep-1, + -0x1.cb91f3bbba128p-1 + }, + { // Entry 716 + 0x1.b6add448714dcb8a52cd35a987330f71p-1, + 0x1.27701caf89e78p0 + }, + { // Entry 717 + -0x1.b6add448714dcb8a52cd35a987330f71p-1, + -0x1.27701caf89e78p0 + }, + { // Entry 718 + 0x1.e87d358361bcd19359996a7779c977a2p-1, + 0x1.69173f8136c5cp0 + }, + { // Entry 719 + -0x1.e87d358361bcd19359996a7779c977a2p-1, + -0x1.69173f8136c5cp0 + }, + { // Entry 720 + 0x1.07cbfe8c14dd6c531603e943f23b5395p0, + 0x1.aabe6252e3a40p0 + }, + { // Entry 721 + -0x1.07cbfe8c14dd6c531603e943f23b5395p0, + -0x1.aabe6252e3a40p0 + }, + { // Entry 722 + 0x1.1762c60438ce078252d85e42621311efp0, + 0x1.ec65852490824p0 + }, + { // Entry 723 + -0x1.1762c60438ce078252d85e42621311efp0, + -0x1.ec65852490824p0 + }, + { // Entry 724 + 0x1.2404bf4b3eacd91e132bfb674e2913adp0, + 0x1.170653fb1eb04p1 + }, + { // Entry 725 + -0x1.2404bf4b3eacd91e132bfb674e2913adp0, + -0x1.170653fb1eb04p1 + }, + { // Entry 726 + 0x1.2e6a76d3a7c4b1226452cbee254cb00ep0, + 0x1.37d9e563f51f6p1 + }, + { // Entry 727 + -0x1.2e6a76d3a7c4b1226452cbee254cb00ep0, + -0x1.37d9e563f51f6p1 + }, + { // Entry 728 + 0x1.37189d975e5f721039ee06227b2cc34ep0, + 0x1.58ad76cccb8e8p1 + }, + { // Entry 729 + -0x1.37189d975e5f721039ee06227b2cc34ep0, + -0x1.58ad76cccb8e8p1 + }, + { // Entry 730 + 0x1.3e6fbb2c413941ff899c462376afaff3p0, + 0x1.79810835a1fdap1 + }, + { // Entry 731 + -0x1.3e6fbb2c413941ff899c462376afaff3p0, + -0x1.79810835a1fdap1 + }, + { // Entry 732 + 0x1.44b710bde944d3a9aeff63d91fa1f037p0, + 0x1.9a54999e786ccp1 + }, + { // Entry 733 + -0x1.44b710bde944d3a9aeff63d91fa1f037p0, + -0x1.9a54999e786ccp1 + }, + { // Entry 734 + 0x1.4a2407447a81aa4a6751ba1c00ad16b4p0, + 0x1.bb282b074edbep1 + }, + { // Entry 735 + -0x1.4a2407447a81aa4a6751ba1c00ad16b4p0, + -0x1.bb282b074edbep1 + }, + { // Entry 736 + 0x1.4edf430c00242d9760af2ba3d134ee30p0, + 0x1.dbfbbc70254b0p1 + }, + { // Entry 737 + -0x1.4edf430c00242d9760af2ba3d134ee30p0, + -0x1.dbfbbc70254b0p1 + }, + { // Entry 738 + 0x1.530823483d35eed7bdc41c7d43d4d1bep0, + 0x1.fccf4dd8fbba2p1 + }, + { // Entry 739 + -0x1.530823483d35eed7bdc41c7d43d4d1bep0, + -0x1.fccf4dd8fbba2p1 + }, + { // Entry 740 + 0x1.56b732e5cd9e621620c292f21c370a65p0, + 0x1.0ed16fa0e914ap2 + }, + { // Entry 741 + -0x1.56b732e5cd9e621620c292f21c370a65p0, + -0x1.0ed16fa0e914ap2 + }, + { // Entry 742 + 0x1.59ffe278fb5cfdacbc51061667641320p0, + 0x1.1f3b3855544c3p2 + }, + { // Entry 743 + -0x1.59ffe278fb5cfdacbc51061667641320p0, + -0x1.1f3b3855544c3p2 + }, + { // Entry 744 + 0x1.5cf1c53dd9ca8f4d320efaf2bed238dep0, + 0x1.2fa50109bf83cp2 + }, + { // Entry 745 + -0x1.5cf1c53dd9ca8f4d320efaf2bed238dep0, + -0x1.2fa50109bf83cp2 + }, + { // Entry 746 + 0x1.5f9977a47aee090d54ca7b763af2b8f6p0, + 0x1.400ec9be2abb5p2 + }, + { // Entry 747 + -0x1.5f9977a47aee090d54ca7b763af2b8f6p0, + -0x1.400ec9be2abb5p2 + }, + { // Entry 748 + 0x1.6201493b02235454cfe997849b56e6a4p0, + 0x1.5078927295f2ep2 + }, + { // Entry 749 + -0x1.6201493b02235454cfe997849b56e6a4p0, + -0x1.5078927295f2ep2 + }, + { // Entry 750 + 0x1.6431bb7edf2baae88464ead12ab4619ep0, + 0x1.60e25b27012a7p2 + }, + { // Entry 751 + -0x1.6431bb7edf2baae88464ead12ab4619ep0, + -0x1.60e25b27012a7p2 + }, + { // Entry 752 + 0x1.6631e1a595902c3b42171a76898ec8fbp0, + 0x1.714c23db6c620p2 + }, + { // Entry 753 + -0x1.6631e1a595902c3b42171a76898ec8fbp0, + -0x1.714c23db6c620p2 + }, + { // Entry 754 + 0x1.6807a9c540dd2ae72a3e8ad8c9147867p0, + 0x1.81b5ec8fd7999p2 + }, + { // Entry 755 + -0x1.6807a9c540dd2ae72a3e8ad8c9147867p0, + -0x1.81b5ec8fd7999p2 + }, + { // Entry 756 + 0x1.ef652dceca4daec044deb346c4b08d48p-5, + 0x1.effffffffffffp-5 + }, + { // Entry 757 + -0x1.ef652dceca4daec044deb346c4b08d48p-5, + -0x1.effffffffffffp-5 + }, + { // Entry 758 + 0x1.ef652dceca4dbeb14ee907159dd1c369p-5, + 0x1.fp-5 + }, + { // Entry 759 + -0x1.ef652dceca4dbeb14ee907159dd1c369p-5, + -0x1.fp-5 + }, + { // Entry 760 + 0x1.ef652dceca4dcea258f35ae476f20359p-5, + 0x1.f000000000001p-5 + }, + { // Entry 761 + -0x1.ef652dceca4dcea258f35ae476f20359p-5, + -0x1.f000000000001p-5 + }, + { // Entry 762 + 0x1.f57ab026c3a8ecb83ec0ccdd10add49ep-4, + 0x1.f7fffffffffffp-4 + }, + { // Entry 763 + -0x1.f57ab026c3a8ecb83ec0ccdd10add49ep-4, + -0x1.f7fffffffffffp-4 + }, + { // Entry 764 + 0x1.f57ab026c3a8fc7b278a06e9d0c43e3ap-4, + 0x1.f80p-4 + }, + { // Entry 765 + -0x1.f57ab026c3a8fc7b278a06e9d0c43e3ap-4, + -0x1.f80p-4 + }, + { // Entry 766 + 0x1.f57ab026c3a90c3e105340f690d6d5afp-4, + 0x1.f800000000001p-4 + }, + { // Entry 767 + -0x1.f57ab026c3a90c3e105340f690d6d5afp-4, + -0x1.f800000000001p-4 + }, + { // Entry 768 + 0x1.4923024ccb77ffc36091a6f234051783p-3, + 0x1.4bfffffffffffp-3 + }, + { // Entry 769 + -0x1.4923024ccb77ffc36091a6f234051783p-3, + -0x1.4bfffffffffffp-3 + }, + { // Entry 770 + 0x1.4923024ccb780f5a7e2ead4e2bd24d33p-3, + 0x1.4c0p-3 + }, + { // Entry 771 + -0x1.4923024ccb780f5a7e2ead4e2bd24d33p-3, + -0x1.4c0p-3 + }, + { // Entry 772 + 0x1.4923024ccb781ef19bcbb3aa2395a92bp-3, + 0x1.4c00000000001p-3 + }, + { // Entry 773 + -0x1.4923024ccb781ef19bcbb3aa2395a92bp-3, + -0x1.4c00000000001p-3 + }, + { // Entry 774 + 0x1.2a73a661eaf04c94833e0199180e931dp-2, + 0x1.3333333333332p-2 + }, + { // Entry 775 + -0x1.2a73a661eaf04c94833e0199180e931dp-2, + -0x1.3333333333332p-2 + }, + { // Entry 776 + 0x1.2a73a661eaf05b424f928e83f4ea7bc2p-2, + 0x1.3333333333333p-2 + }, + { // Entry 777 + -0x1.2a73a661eaf05b424f928e83f4ea7bc2p-2, + -0x1.3333333333333p-2 + }, + { // Entry 778 + 0x1.2a73a661eaf069f01be71b6ed1a61259p-2, + 0x1.3333333333334p-2 + }, + { // Entry 779 + -0x1.2a73a661eaf069f01be71b6ed1a61259p-2, + -0x1.3333333333334p-2 + }, + { // Entry 780 + 0x1.2fc48220cc1fce7fc93a77a07e48b002p-1, + 0x1.594317acc4ef8p-1 + }, + { // Entry 781 + -0x1.2fc48220cc1fce7fc93a77a07e48b002p-1, + -0x1.594317acc4ef8p-1 + }, + { // Entry 782 + 0x1.2fc48220cc1fd97f6b9419f2cefa0646p-1, + 0x1.594317acc4ef9p-1 + }, + { // Entry 783 + -0x1.2fc48220cc1fd97f6b9419f2cefa0646p-1, + -0x1.594317acc4ef9p-1 + }, + { // Entry 784 + 0x1.2fc48220cc1fe47f0dedbc451f59c99cp-1, + 0x1.594317acc4efap-1 + }, + { // Entry 785 + -0x1.2fc48220cc1fe47f0dedbc451f59c99cp-1, + -0x1.594317acc4efap-1 + }, + { // Entry 786 + 0x1.538f57b89061e1a19793adab72dc4cd0p-1, + 0x1.8ffffffffffffp-1 + }, + { // Entry 787 + -0x1.538f57b89061e1a19793adab72dc4cd0p-1, + -0x1.8ffffffffffffp-1 + }, + { // Entry 788 + 0x1.538f57b89061eb9122d5096b7cf267ebp-1, + 0x1.9p-1 + }, + { // Entry 789 + -0x1.538f57b89061eb9122d5096b7cf267ebp-1, + -0x1.9p-1 + }, + { // Entry 790 + 0x1.538f57b89061f580ae16652b86bb6353p-1, + 0x1.9000000000001p-1 + }, + { // Entry 791 + -0x1.538f57b89061f580ae16652b86bb6353p-1, + -0x1.9000000000001p-1 + }, + { // Entry 792 + -0.0, + -0x1.0p-1074 + }, + { // Entry 793 + 0.0, + 0x1.0p-1074 + }, + { // Entry 794 + -0.0, + -0.0 + }, + { // Entry 795 + 0.0, + 0x1.0p-1074 + }, + { // Entry 796 + -0.0, + -0x1.0p-1074 + }, + { // Entry 797 + 0x1.91cd24dd4f86f3abcfa4276d83a13d73p-5, + 0x1.921fb54442d17p-5 + }, + { // Entry 798 + -0x1.91cd24dd4f86f3abcfa4276d83a13d73p-5, + -0x1.921fb54442d17p-5 + }, + { // Entry 799 + 0x1.91cd24dd4f8703a1f7188f1d645421b1p-5, + 0x1.921fb54442d18p-5 + }, + { // Entry 800 + -0x1.91cd24dd4f8703a1f7188f1d645421b1p-5, + -0x1.921fb54442d18p-5 + }, + { // Entry 801 + 0x1.91cd24dd4f8713981e8cf6cd45063dd6p-5, + 0x1.921fb54442d19p-5 + }, + { // Entry 802 + -0x1.91cd24dd4f8713981e8cf6cd45063dd6p-5, + -0x1.921fb54442d19p-5 + }, + { // Entry 803 + 0x1.90d6dfbf0463be2efc3d3ae995b9e240p-4, + 0x1.921fb54442d17p-4 + }, + { // Entry 804 + -0x1.90d6dfbf0463be2efc3d3ae995b9e240p-4, + -0x1.921fb54442d17p-4 + }, + { // Entry 805 + 0x1.90d6dfbf0463ce07e23e541458c4aa07p-4, + 0x1.921fb54442d18p-4 + }, + { // Entry 806 + -0x1.90d6dfbf0463ce07e23e541458c4aa07p-4, + -0x1.921fb54442d18p-4 + }, + { // Entry 807 + 0x1.90d6dfbf0463dde0c83f6d3f1bcc5cd7p-4, + 0x1.921fb54442d19p-4 + }, + { // Entry 808 + -0x1.90d6dfbf0463dde0c83f6d3f1bcc5cd7p-4, + -0x1.921fb54442d19p-4 + }, + { // Entry 809 + 0x1.8d128eae9561353a88062ef0a34b4e80p-3, + 0x1.921fb54442d17p-3 + }, + { // Entry 810 + -0x1.8d128eae9561353a88062ef0a34b4e80p-3, + -0x1.921fb54442d17p-3 + }, + { // Entry 811 + 0x1.8d128eae956144a27ad04eaa5b924d06p-3, + 0x1.921fb54442d18p-3 + }, + { // Entry 812 + -0x1.8d128eae956144a27ad04eaa5b924d06p-3, + -0x1.921fb54442d18p-3 + }, + { // Entry 813 + 0x1.8d128eae9561540a6d9a6e6413cda4f7p-3, + 0x1.921fb54442d19p-3 + }, + { // Entry 814 + -0x1.8d128eae9561540a6d9a6e6413cda4f7p-3, + -0x1.921fb54442d19p-3 + }, + { // Entry 815 + 0x1.7f2d6a24777e099c2376cf0898b3c360p-2, + 0x1.921fb54442d17p-2 + }, + { // Entry 816 + -0x1.7f2d6a24777e099c2376cf0898b3c360p-2, + -0x1.921fb54442d17p-2 + }, + { // Entry 817 + 0x1.7f2d6a24777e1778e0d5c62102085610p-2, + 0x1.921fb54442d18p-2 + }, + { // Entry 818 + -0x1.7f2d6a24777e1778e0d5c62102085610p-2, + -0x1.921fb54442d18p-2 + }, + { // Entry 819 + 0x1.7f2d6a24777e25559e34bd396b372d9ep-2, + 0x1.921fb54442d19p-2 + }, + { // Entry 820 + -0x1.7f2d6a24777e25559e34bd396b372d9ep-2, + -0x1.921fb54442d19p-2 + }, + { // Entry 821 + 0x1.54e04c05d069fa1ecac0c3f5d7fae70fp-1, + 0x1.921fb54442d17p-1 + }, + { // Entry 822 + -0x1.54e04c05d069fa1ecac0c3f5d7fae70fp-1, + -0x1.921fb54442d17p-1 + }, + { // Entry 823 + 0x1.54e04c05d06a04041ccf30f00110c0f6p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 824 + -0x1.54e04c05d06a04041ccf30f00110c0f6p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 825 + 0x1.54e04c05d06a0de96edd9dea29d9b191p-1, + 0x1.921fb54442d19p-1 + }, + { // Entry 826 + -0x1.54e04c05d06a0de96edd9dea29d9b191p-1, + -0x1.921fb54442d19p-1 + }, + { // Entry 827 + 0x1.00fe987ed02fed962e123a7e12a6d283p0, + 0x1.921fb54442d17p0 + }, + { // Entry 828 + -0x1.00fe987ed02fed962e123a7e12a6d283p0, + -0x1.921fb54442d17p0 + }, + { // Entry 829 + 0x1.00fe987ed02ff23377d99ec36db533fep0, + 0x1.921fb54442d18p0 + }, + { // Entry 830 + -0x1.00fe987ed02ff23377d99ec36db533fep0, + -0x1.921fb54442d18p0 + }, + { // Entry 831 + 0x1.00fe987ed02ff6d0c1a10308c880b0d3p0, + 0x1.921fb54442d19p0 + }, + { // Entry 832 + -0x1.00fe987ed02ff6d0c1a10308c880b0d3p0, + -0x1.921fb54442d19p0 + }, + { // Entry 833 + 0x1.433b8a322ddd266fd81ec843d7c92a7ap0, + 0x1.921fb54442d17p1 + }, + { // Entry 834 + -0x1.433b8a322ddd266fd81ec843d7c92a7ap0, + -0x1.921fb54442d17p1 + }, + { // Entry 835 + 0x1.433b8a322ddd29618168a21c962c68bcp0, + 0x1.921fb54442d18p1 + }, + { // Entry 836 + -0x1.433b8a322ddd29618168a21c962c68bcp0, + -0x1.921fb54442d18p1 + }, + { // Entry 837 + 0x1.433b8a322ddd2c532ab27bf55459320bp0, + 0x1.921fb54442d19p1 + }, + { // Entry 838 + -0x1.433b8a322ddd2c532ab27bf55459320bp0, + -0x1.921fb54442d19p1 + }, + { // Entry 839 + 0x1.69b8154baf42e0f527ff3f4df7a4633ep0, + 0x1.921fb54442d17p2 + }, + { // Entry 840 + -0x1.69b8154baf42e0f527ff3f4df7a4633ep0, + -0x1.921fb54442d17p2 + }, + { // Entry 841 + 0x1.69b8154baf42e289ea46de59f75a7b90p0, + 0x1.921fb54442d18p2 + }, + { // Entry 842 + -0x1.69b8154baf42e289ea46de59f75a7b90p0, + -0x1.921fb54442d18p2 + }, + { // Entry 843 + 0x1.69b8154baf42e41eac8e7d65f6f129e7p0, + 0x1.921fb54442d19p2 + }, + { // Entry 844 + -0x1.69b8154baf42e41eac8e7d65f6f129e7p0, + -0x1.921fb54442d19p2 + }, + { // Entry 845 + 0x1.7dcb7c5c399ec04ad5c1eabbb0cccf9fp0, + 0x1.921fb54442d17p3 + }, + { // Entry 846 + -0x1.7dcb7c5c399ec04ad5c1eabbb0cccf9fp0, + -0x1.921fb54442d17p3 + }, + { // Entry 847 + 0x1.7dcb7c5c399ec11908f5986443f30bdap0, + 0x1.921fb54442d18p3 + }, + { // Entry 848 + -0x1.7dcb7c5c399ec11908f5986443f30bdap0, + -0x1.921fb54442d18p3 + }, + { // Entry 849 + 0x1.7dcb7c5c399ec1e73c29460cd708f9d8p0, + 0x1.921fb54442d19p3 + }, + { // Entry 850 + -0x1.7dcb7c5c399ec1e73c29460cd708f9d8p0, + -0x1.921fb54442d19p3 + }, + { // Entry 851 + 0x1.87f17cfda0b5caf7b170dd86f8287b63p0, + 0x1.921fb54442d17p4 + }, + { // Entry 852 + -0x1.87f17cfda0b5caf7b170dd86f8287b63p0, + -0x1.921fb54442d17p4 + }, + { // Entry 853 + 0x1.87f17cfda0b5cb5f4832c04cdf736f84p0, + 0x1.921fb54442d18p4 + }, + { // Entry 854 + -0x1.87f17cfda0b5cb5f4832c04cdf736f84p0, + -0x1.921fb54442d18p4 + }, + { // Entry 855 + 0x1.87f17cfda0b5cbc6def4a312c6b628b0p0, + 0x1.921fb54442d19p4 + }, + { // Entry 856 + -0x1.87f17cfda0b5cbc6def4a312c6b628b0p0, + -0x1.921fb54442d19p4 + }, + { // Entry 857 + 0x1.8d08152eddb7a3b8c976d7e120ba1197p0, + 0x1.921fb54442d17p5 + }, + { // Entry 858 + -0x1.8d08152eddb7a3b8c976d7e120ba1197p0, + -0x1.921fb54442d17p5 + }, + { // Entry 859 + 0x1.8d08152eddb7a3eca4948f3acff50864p0, + 0x1.921fb54442d18p5 + }, + { // Entry 860 + -0x1.8d08152eddb7a3eca4948f3acff50864p0, + -0x1.921fb54442d18p5 + }, + { // Entry 861 + 0x1.8d08152eddb7a4207fb246947f2bdf35p0, + 0x1.921fb54442d19p5 + }, + { // Entry 862 + -0x1.8d08152eddb7a4207fb246947f2bdf35p0, + -0x1.921fb54442d19p5 + }, + { // Entry 863 + 0x1.8f93d4b78b7cddf446e36e538b980193p0, + 0x1.921fb54442d17p6 + }, + { // Entry 864 + -0x1.8f93d4b78b7cddf446e36e538b980193p0, + -0x1.921fb54442d17p6 + }, + { // Entry 865 + 0x1.8f93d4b78b7cde0e366aa212646d3cb6p0, + 0x1.921fb54442d18p6 + }, + { // Entry 866 + -0x1.8f93d4b78b7cde0e366aa212646d3cb6p0, + -0x1.921fb54442d18p6 + }, + { // Entry 867 + 0x1.8f93d4b78b7cde2825f1d5d13d40678bp0, + 0x1.921fb54442d19p6 + }, + { // Entry 868 + -0x1.8f93d4b78b7cde2825f1d5d13d40678bp0, + -0x1.921fb54442d19p6 + }, + { // Entry 869 + 0x1.90d9c2ed8873775a4f6e3fe4c3a5982bp0, + 0x1.921fb54442d17p7 + }, + { // Entry 870 + -0x1.90d9c2ed8873775a4f6e3fe4c3a5982bp0, + -0x1.921fb54442d17p7 + }, + { // Entry 871 + 0x1.90d9c2ed887377674770eac36c2436b5p0, + 0x1.921fb54442d18p7 + }, + { // Entry 872 + -0x1.90d9c2ed887377674770eac36c2436b5p0, + -0x1.921fb54442d18p7 + }, + { // Entry 873 + 0x1.90d9c2ed887377743f7395a214a1cd0ep0, + 0x1.921fb54442d19p7 + }, + { // Entry 874 + -0x1.90d9c2ed887377743f7395a214a1cd0ep0, + -0x1.921fb54442d19p7 + }, + { // Entry 875 + 0x1.2b5f4b53c7948df5568782d0a75b8459p0, + 0x1.2d97c7f3321d1p1 + }, + { // Entry 876 + -0x1.2b5f4b53c7948df5568782d0a75b8459p0, + -0x1.2d97c7f3321d1p1 + }, + { // Entry 877 + 0x1.2b5f4b53c79492d7b5a6cd6203c9aae2p0, + 0x1.2d97c7f3321d2p1 + }, + { // Entry 878 + -0x1.2b5f4b53c79492d7b5a6cd6203c9aae2p0, + -0x1.2d97c7f3321d2p1 + }, + { // Entry 879 + 0x1.2b5f4b53c79497ba14c617f35fc7662ep0, + 0x1.2d97c7f3321d3p1 + }, + { // Entry 880 + -0x1.2b5f4b53c79497ba14c617f35fc7662ep0, + -0x1.2d97c7f3321d3p1 + }, + { // Entry 881 + 0x1.524a69fcff2af09f5f140df341a455ddp0, + 0x1.f6a7a2955385dp1 + }, + { // Entry 882 + -0x1.524a69fcff2af09f5f140df341a455ddp0, + -0x1.f6a7a2955385dp1 + }, + { // Entry 883 + 0x1.524a69fcff2af2923cab5c00b660c55fp0, + 0x1.f6a7a2955385ep1 + }, + { // Entry 884 + -0x1.524a69fcff2af2923cab5c00b660c55fp0, + -0x1.f6a7a2955385ep1 + }, + { // Entry 885 + 0x1.524a69fcff2af4851a42aa0e2aff61bcp0, + 0x1.f6a7a2955385fp1 + }, + { // Entry 886 + -0x1.524a69fcff2af4851a42aa0e2aff61bcp0, + -0x1.f6a7a2955385fp1 + }, + { // Entry 887 + 0x1.5c97d37d98aa37af1a1b75a619098288p0, + 0x1.2d97c7f3321d1p2 + }, + { // Entry 888 + -0x1.5c97d37d98aa37af1a1b75a619098288p0, + -0x1.2d97c7f3321d1p2 + }, + { // Entry 889 + 0x1.5c97d37d98aa3a711b94359371aaf903p0, + 0x1.2d97c7f3321d2p2 + }, + { // Entry 890 + -0x1.5c97d37d98aa3a711b94359371aaf903p0, + -0x1.2d97c7f3321d2p2 + }, + { // Entry 891 + 0x1.5c97d37d98aa3d331d0cf580ca04c102p0, + 0x1.2d97c7f3321d3p2 + }, + { // Entry 892 + -0x1.5c97d37d98aa3d331d0cf580ca04c102p0, + -0x1.2d97c7f3321d3p2 + }, + { // Entry 893 + 0x1.64102fc571c7422b6ad0ed05fd24e652p0, + 0x1.5fdbbe9bba774p2 + }, + { // Entry 894 + -0x1.64102fc571c7422b6ad0ed05fd24e652p0, + -0x1.5fdbbe9bba774p2 + }, + { // Entry 895 + 0x1.64102fc571c744381d266feb08ddfcc4p0, + 0x1.5fdbbe9bba775p2 + }, + { // Entry 896 + -0x1.64102fc571c744381d266feb08ddfcc4p0, + -0x1.5fdbbe9bba775p2 + }, + { // Entry 897 + 0x1.64102fc571c74644cf7bf2d01468e265p0, + 0x1.5fdbbe9bba776p2 + }, + { // Entry 898 + -0x1.64102fc571c74644cf7bf2d01468e265p0, + -0x1.5fdbbe9bba776p2 + }, + { // Entry 899 + 0x1.6e2561a6cd2181c009d7d863e666c437p0, + 0x1.c463abeccb2bap2 + }, + { // Entry 900 + -0x1.6e2561a6cd2181c009d7d863e666c437p0, + -0x1.c463abeccb2bap2 + }, + { // Entry 901 + 0x1.6e2561a6cd21830183c87ae1761354b0p0, + 0x1.c463abeccb2bbp2 + }, + { // Entry 902 + -0x1.6e2561a6cd21830183c87ae1761354b0p0, + -0x1.c463abeccb2bbp2 + }, + { // Entry 903 + 0x1.6e2561a6cd218442fdb91d5f05a99ap0, + 0x1.c463abeccb2bcp2 + }, + { // Entry 904 + -0x1.6e2561a6cd218442fdb91d5f05a99ap0, + -0x1.c463abeccb2bcp2 + }, + { // Entry 905 + 0x1.71b4100f0956769d1c64ae4d729107a5p0, + 0x1.f6a7a2955385dp2 + }, + { // Entry 906 + -0x1.71b4100f0956769d1c64ae4d729107a5p0, + -0x1.f6a7a2955385dp2 + }, + { // Entry 907 + 0x1.71b4100f095677a27b2c03b940d5e613p0, + 0x1.f6a7a2955385ep2 + }, + { // Entry 908 + -0x1.71b4100f095677a27b2c03b940d5e613p0, + -0x1.f6a7a2955385ep2 + }, + { // Entry 909 + 0x1.71b4100f095678a7d9f359250f0a64c8p0, + 0x1.f6a7a2955385fp2 + }, + { // Entry 910 + -0x1.71b4100f095678a7d9f359250f0a64c8p0, + -0x1.f6a7a2955385fp2 + }, + { // Entry 911 + 0x1.749f96097c7015073733e2e3659a844bp0, + 0x1.1475cc9eedeffp3 + }, + { // Entry 912 + -0x1.749f96097c7015073733e2e3659a844bp0, + -0x1.1475cc9eedeffp3 + }, + { // Entry 913 + 0x1.749f96097c7016b86e95ca64b3f1546fp0, + 0x1.1475cc9eedfp3 + }, + { // Entry 914 + -0x1.749f96097c7016b86e95ca64b3f1546fp0, + -0x1.1475cc9eedfp3 + }, + { // Entry 915 + 0x1.749f96097c701869a5f7b1e60216a952p0, + 0x1.1475cc9eedf01p3 + }, + { // Entry 916 + -0x1.749f96097c701869a5f7b1e60216a952p0, + -0x1.1475cc9eedf01p3 + }, + { // Entry 917 + 0x1.77100abbdfe4f88c42b76a1a44ccb487p0, + 0x1.2d97c7f3321d1p3 + }, + { // Entry 918 + -0x1.77100abbdfe4f88c42b76a1a44ccb487p0, + -0x1.2d97c7f3321d1p3 + }, + { // Entry 919 + 0x1.77100abbdfe4f9f90d90533c02b3964ep0, + 0x1.2d97c7f3321d2p3 + }, + { // Entry 920 + -0x1.77100abbdfe4f9f90d90533c02b3964ep0, + -0x1.2d97c7f3321d2p3 + }, + { // Entry 921 + 0x1.77100abbdfe4fb65d8693c5dc07431bdp0, + 0x1.2d97c7f3321d3p3 + }, + { // Entry 922 + -0x1.77100abbdfe4fb65d8693c5dc07431bdp0, + -0x1.2d97c7f3321d3p3 + }, + { // Entry 923 + 0x1.79216b94b662deb07e2d6de7f1804507p0, + 0x1.46b9c347764a2p3 + }, + { // Entry 924 + -0x1.79216b94b662deb07e2d6de7f1804507p0, + -0x1.46b9c347764a2p3 + }, + { // Entry 925 + 0x1.79216b94b662dfe7d5a91b73c06086ebp0, + 0x1.46b9c347764a3p3 + }, + { // Entry 926 + -0x1.79216b94b662dfe7d5a91b73c06086ebp0, + -0x1.46b9c347764a3p3 + }, + { // Entry 927 + 0x1.79216b94b662e11f2d24c8ff8f2294b3p0, + 0x1.46b9c347764a4p3 + }, + { // Entry 928 + -0x1.79216b94b662e11f2d24c8ff8f2294b3p0, + -0x1.46b9c347764a4p3 + }, + { // Entry 929 + 0x1.7ae7d7e5d1f9ee2a0e89a2289062ad74p0, + 0x1.5fdbbe9bba774p3 + }, + { // Entry 930 + -0x1.7ae7d7e5d1f9ee2a0e89a2289062ad74p0, + -0x1.5fdbbe9bba774p3 + }, + { // Entry 931 + 0x1.7ae7d7e5d1f9ef36dc870ed6964fa9dfp0, + 0x1.5fdbbe9bba775p3 + }, + { // Entry 932 + -0x1.7ae7d7e5d1f9ef36dc870ed6964fa9dfp0, + -0x1.5fdbbe9bba775p3 + }, + { // Entry 933 + 0x1.7ae7d7e5d1f9f043aa847b849c24674ap0, + 0x1.5fdbbe9bba776p3 + }, + { // Entry 934 + -0x1.7ae7d7e5d1f9f043aa847b849c24674ap0, + -0x1.5fdbbe9bba776p3 + }, + { // Entry 935 + 0x1.7c722476319a280dab0b4cf4c187f8abp0, + 0x1.78fdb9effea45p3 + }, + { // Entry 936 + -0x1.7c722476319a280dab0b4cf4c187f8abp0, + -0x1.78fdb9effea45p3 + }, + { // Entry 937 + 0x1.7c722476319a28f8131f5d500f0f03e6p0, + 0x1.78fdb9effea46p3 + }, + { // Entry 938 + -0x1.7c722476319a28f8131f5d500f0f03e6p0, + -0x1.78fdb9effea46p3 + }, + { // Entry 939 + 0x1.7c722476319a29e27b336dab5c824dedp0, + 0x1.78fdb9effea47p3 + }, + { // Entry 940 + -0x1.7c722476319a29e27b336dab5c824dedp0, + -0x1.78fdb9effea47p3 + }, + { // Entry 941 + 0x1.7efc711c97aca34b1628231d4f4fabe2p0, + 0x1.ab41b09886fe8p3 + }, + { // Entry 942 + -0x1.7efc711c97aca34b1628231d4f4fabe2p0, + -0x1.ab41b09886fe8p3 + }, + { // Entry 943 + 0x1.7efc711c97aca401df609cab03bab68cp0, + 0x1.ab41b09886fe9p3 + }, + { // Entry 944 + -0x1.7efc711c97aca401df609cab03bab68cp0, + -0x1.ab41b09886fe9p3 + }, + { // Entry 945 + 0x1.7efc711c97aca4b8a8991638b818241cp0, + 0x1.ab41b09886feap3 + }, + { // Entry 946 + -0x1.7efc711c97aca4b8a8991638b818241cp0, + -0x1.ab41b09886feap3 + }, + { // Entry 947 + 0x1.800bb15ffe80dd150b83506ecafcd897p0, + 0x1.c463abeccb2bap3 + }, + { // Entry 948 + -0x1.800bb15ffe80dd150b83506ecafcd897p0, + -0x1.c463abeccb2bap3 + }, + { // Entry 949 + 0x1.800bb15ffe80ddb82f1388a941a8215cp0, + 0x1.c463abeccb2bbp3 + }, + { // Entry 950 + -0x1.800bb15ffe80ddb82f1388a941a8215cp0, + -0x1.c463abeccb2bbp3 + }, + { // Entry 951 + 0x1.800bb15ffe80de5b52a3c0e3b847eeaap0, + 0x1.c463abeccb2bcp3 + }, + { // Entry 952 + -0x1.800bb15ffe80de5b52a3c0e3b847eeaap0, + -0x1.c463abeccb2bcp3 + }, + { // Entry 953 + 0x1.80fe86b132e8f8618de08cf337993ca3p0, + 0x1.dd85a7410f58bp3 + }, + { // Entry 954 + -0x1.80fe86b132e8f8618de08cf337993ca3p0, + -0x1.dd85a7410f58bp3 + }, + { // Entry 955 + 0x1.80fe86b132e8f8f40c19d09e489d38e1p0, + 0x1.dd85a7410f58cp3 + }, + { // Entry 956 + -0x1.80fe86b132e8f8f40c19d09e489d38e1p0, + -0x1.dd85a7410f58cp3 + }, + { // Entry 957 + 0x1.80fe86b132e8f9868a53144959976f3cp0, + 0x1.dd85a7410f58dp3 + }, + { // Entry 958 + -0x1.80fe86b132e8f9868a53144959976f3cp0, + -0x1.dd85a7410f58dp3 + }, + { // Entry 959 + 0x1.81d92def25f25718c6829a063fb81fd7p0, + 0x1.f6a7a2955385dp3 + }, + { // Entry 960 + -0x1.81d92def25f25718c6829a063fb81fd7p0, + -0x1.f6a7a2955385dp3 + }, + { // Entry 961 + 0x1.81d92def25f2579d0b06bd55e5dd10d1p0, + 0x1.f6a7a2955385ep3 + }, + { // Entry 962 + -0x1.81d92def25f2579d0b06bd55e5dd10d1p0, + -0x1.f6a7a2955385ep3 + }, + { // Entry 963 + 0x1.81d92def25f258214f8ae0a58bf99edep0, + 0x1.f6a7a2955385fp3 + }, + { // Entry 964 + -0x1.81d92def25f258214f8ae0a58bf99edep0, + -0x1.f6a7a2955385fp3 + }, + { // Entry 965 + 0x1.829f16bb7d95108c0eb21238a0c53f5ep0, + 0x1.07e4cef4cbd96p4 + }, + { // Entry 966 + -0x1.829f16bb7d95108c0eb21238a0c53f5ep0, + -0x1.07e4cef4cbd96p4 + }, + { // Entry 967 + 0x1.829f16bb7d95117c16ba648f3486d718p0, + 0x1.07e4cef4cbd97p4 + }, + { // Entry 968 + -0x1.829f16bb7d95117c16ba648f3486d718p0, + -0x1.07e4cef4cbd97p4 + }, + { // Entry 969 + 0x1.829f16bb7d95126c1ec2b6e5c82b6edep0, + 0x1.07e4cef4cbd98p4 + }, + { // Entry 970 + -0x1.829f16bb7d95126c1ec2b6e5c82b6edep0, + -0x1.07e4cef4cbd98p4 + }, + { // Entry 971 + 0x1.835311c4fa5d7c37c557b7a5a3338324p0, + 0x1.1475cc9eedeffp4 + }, + { // Entry 972 + -0x1.835311c4fa5d7c37c557b7a5a3338324p0, + -0x1.1475cc9eedeffp4 + }, + { // Entry 973 + 0x1.835311c4fa5d7d128c5fa09cc922483dp0, + 0x1.1475cc9eedfp4 + }, + { // Entry 974 + -0x1.835311c4fa5d7d128c5fa09cc922483dp0, + -0x1.1475cc9eedfp4 + }, + { // Entry 975 + 0x1.835311c4fa5d7ded53678993eef7d037p0, + 0x1.1475cc9eedf01p4 + }, + { // Entry 976 + -0x1.835311c4fa5d7ded53678993eef7d037p0, + -0x1.1475cc9eedf01p4 + }, + { // Entry 977 + 0x1.83f7731825dc9d8ff5737093bb3540dep0, + 0x1.2106ca4910068p4 + }, + { // Entry 978 + -0x1.83f7731825dc9d8ff5737093bb3540dep0, + -0x1.2106ca4910068p4 + }, + { // Entry 979 + 0x1.83f7731825dc9e582ebc020978ee1a95p0, + 0x1.2106ca4910069p4 + }, + { // Entry 980 + -0x1.83f7731825dc9e582ebc020978ee1a95p0, + -0x1.2106ca4910069p4 + }, + { // Entry 981 + 0x1.83f7731825dc9f206804937f3690da9bp0, + 0x1.2106ca491006ap4 + }, + { // Entry 982 + -0x1.83f7731825dc9f206804937f3690da9bp0, + -0x1.2106ca491006ap4 + }, + { // Entry 983 + 0x1.848e2bec799ece48230ea9b4de60cfb7p0, + 0x1.2d97c7f3321d1p4 + }, + { // Entry 984 + -0x1.848e2bec799ece48230ea9b4de60cfb7p0, + -0x1.2d97c7f3321d1p4 + }, + { // Entry 985 + 0x1.848e2bec799ecf0011a08e93bfcbf6bap0, + 0x1.2d97c7f3321d2p4 + }, + { // Entry 986 + -0x1.848e2bec799ecf0011a08e93bfcbf6bap0, + -0x1.2d97c7f3321d2p4 + }, + { // Entry 987 + 0x1.848e2bec799ecfb800327372a123a7b7p0, + 0x1.2d97c7f3321d3p4 + }, + { // Entry 988 + -0x1.848e2bec799ecfb800327372a123a7b7p0, + -0x1.2d97c7f3321d3p4 + }, + { // Entry 989 + 0x1.8518de4b48e76e411ea1cdeeb59cbf77p0, + 0x1.3a28c59d54339p4 + }, + { // Entry 990 + -0x1.8518de4b48e76e411ea1cdeeb59cbf77p0, + -0x1.3a28c59d54339p4 + }, + { // Entry 991 + 0x1.8518de4b48e76eeaab2a58ab739c30cbp0, + 0x1.3a28c59d5433ap4 + }, + { // Entry 992 + -0x1.8518de4b48e76eeaab2a58ab739c30cbp0, + -0x1.3a28c59d5433ap4 + }, + { // Entry 993 + 0x1.8518de4b48e76f9437b2e368318a6869p0, + 0x1.3a28c59d5433bp4 + }, + { // Entry 994 + -0x1.8518de4b48e76f9437b2e368318a6869p0, + -0x1.3a28c59d5433bp4 + }, + { // Entry 995 + 0x1.8598ec35167127ce203d29cce66b685bp0, + 0x1.46b9c347764a2p4 + }, + { // Entry 996 + -0x1.8598ec35167127ce203d29cce66b685bp0, + -0x1.46b9c347764a2p4 + }, + { // Entry 997 + 0x1.8598ec351671286aea010a7cf15304a4p0, + 0x1.46b9c347764a3p4 + }, + { // Entry 998 + -0x1.8598ec351671286aea010a7cf15304a4p0, + -0x1.46b9c347764a3p4 + }, + { // Entry 999 + 0x1.8598ec3516712907b3c4eb2cfc2b4f2dp0, + 0x1.46b9c347764a4p4 + }, + { // Entry 1000 + -0x1.8598ec3516712907b3c4eb2cfc2b4f2dp0, + -0x1.46b9c347764a4p4 + }, + { // Entry 1001 + 0x1.860f836e59cf533a5f5acd977fb3bd1bp0, + 0x1.534ac0f19860bp4 + }, + { // Entry 1002 + -0x1.860f836e59cf533a5f5acd977fb3bd1bp0, + -0x1.534ac0f19860bp4 + }, + { // Entry 1003 + 0x1.860f836e59cf53cbc97c4e327874fe3fp0, + 0x1.534ac0f19860cp4 + }, + { // Entry 1004 + -0x1.860f836e59cf53cbc97c4e327874fe3fp0, + -0x1.534ac0f19860cp4 + }, + { // Entry 1005 + 0x1.860f836e59cf545d339dcecd7128903ap0, + 0x1.534ac0f19860dp4 + }, + { // Entry 1006 + -0x1.860f836e59cf545d339dcecd7128903ap0, + -0x1.534ac0f19860dp4 + }, + { // Entry 1007 + 0x1.867da6c87b57e8adf8990014ae6c012fp0, + 0x1.5fdbbe9bba774p4 + }, + { // Entry 1008 + -0x1.867da6c87b57e8adf8990014ae6c012fp0, + -0x1.5fdbbe9bba774p4 + }, + { // Entry 1009 + 0x1.867da6c87b57e935349724e0cc37b311p0, + 0x1.5fdbbe9bba775p4 + }, + { // Entry 1010 + -0x1.867da6c87b57e935349724e0cc37b311p0, + -0x1.5fdbbe9bba775p4 + }, + { // Entry 1011 + 0x1.867da6c87b57e9bc709549ace9f71ee9p0, + 0x1.5fdbbe9bba776p4 + }, + { // Entry 1012 + -0x1.867da6c87b57e9bc709549ace9f71ee9p0, + -0x1.5fdbbe9bba776p4 + }, + { // Entry 1013 + 0x1.86e435818151b84fe25834c19a7e2e5fp0, + 0x1.6c6cbc45dc8dcp4 + }, + { // Entry 1014 + -0x1.86e435818151b84fe25834c19a7e2e5fp0, + -0x1.6c6cbc45dc8dcp4 + }, + { // Entry 1015 + 0x1.86e435818151b8cdf86e6345f58c69fap0, + 0x1.6c6cbc45dc8ddp4 + }, + { // Entry 1016 + -0x1.86e435818151b8cdf86e6345f58c69fap0, + -0x1.6c6cbc45dc8ddp4 + }, + { // Entry 1017 + 0x1.86e435818151b94c0e8491ca508f98b5p0, + 0x1.6c6cbc45dc8dep4 + }, + { // Entry 1018 + -0x1.86e435818151b94c0e8491ca508f98b5p0, + -0x1.6c6cbc45dc8dep4 + }, + { // Entry 1019 + 0x1.8743f12bf9fc92a7f65de8d6cd3df59dp0, + 0x1.78fdb9effea45p4 + }, + { // Entry 1020 + -0x1.8743f12bf9fc92a7f65de8d6cd3df59dp0, + -0x1.78fdb9effea45p4 + }, + { // Entry 1021 + 0x1.8743f12bf9fc931dcc400e45f1cbfd18p0, + 0x1.78fdb9effea46p4 + }, + { // Entry 1022 + -0x1.8743f12bf9fc931dcc400e45f1cbfd18p0, + -0x1.78fdb9effea46p4 + }, + { // Entry 1023 + 0x1.8743f12bf9fc9393a22233b51650089fp0, + 0x1.78fdb9effea47p4 + }, + { // Entry 1024 + -0x1.8743f12bf9fc9393a22233b51650089fp0, + -0x1.78fdb9effea47p4 + }, + { // Entry 1025 + 0x1.879d82738cdb0715c7e50907e7a87c80p0, + 0x1.858eb79a20baep4 + }, + { // Entry 1026 + -0x1.879d82738cdb0715c7e50907e7a87c80p0, + -0x1.858eb79a20baep4 + }, + { // Entry 1027 + 0x1.879d82738cdb07842634f187eb77dddcp0, + 0x1.858eb79a20bafp4 + }, + { // Entry 1028 + -0x1.879d82738cdb07842634f187eb77dddcp0, + -0x1.858eb79a20bafp4 + }, + { // Entry 1029 + 0x1.879d82738cdb07f28484da07ef3e3230p0, + 0x1.858eb79a20bb0p4 + }, + { // Entry 1030 + -0x1.879d82738cdb07f28484da07ef3e3230p0, + -0x1.858eb79a20bb0p4 + }, + { // Entry 1031 + 0x1.921fb54442d18467898cc51701b829a2p0, + 0x1.fffffffffffffp62 + }, + { // Entry 1032 + -0x1.921fb54442d18467898cc51701b829a2p0, + -0x1.fffffffffffffp62 + }, + { // Entry 1033 + 0x1.921fb54442d18467898cc51701b839a2p0, + 0x1.0p63 + }, + { // Entry 1034 + -0x1.921fb54442d18467898cc51701b839a2p0, + -0x1.0p63 + }, + { // Entry 1035 + 0x1.921fb54442d18467898cc51701b859a2p0, + 0x1.0000000000001p63 + }, + { // Entry 1036 + -0x1.921fb54442d18467898cc51701b859a2p0, + -0x1.0000000000001p63 + }, + { // Entry 1037 + 0x1.921fb52442d18469898befc1ac62e44cp0, + 0x1.fffffffffffffp26 + }, + { // Entry 1038 + -0x1.921fb52442d18469898befc1ac62e44cp0, + -0x1.fffffffffffffp26 + }, + { // Entry 1039 + 0x1.921fb52442d18469898cefc1ac62e44cp0, + 0x1.0p27 + }, + { // Entry 1040 + -0x1.921fb52442d18469898cefc1ac62e44cp0, + -0x1.0p27 + }, + { // Entry 1041 + 0x1.921fb52442d18469898eefc1ac62e44cp0, + 0x1.0000000000001p27 + }, + { // Entry 1042 + -0x1.921fb52442d18469898eefc1ac62e44cp0, + -0x1.0000000000001p27 + }, + { // Entry 1043 + 0x1.921fb44442d1846989da1a6c570d8eccp0, + 0x1.fffffffffffffp23 + }, + { // Entry 1044 + -0x1.921fb44442d1846989da1a6c570d8eccp0, + -0x1.fffffffffffffp23 + }, + { // Entry 1045 + 0x1.921fb44442d1846989e21a6c570d8ec4p0, + 0x1.0p24 + }, + { // Entry 1046 + -0x1.921fb44442d1846989e21a6c570d8ec4p0, + -0x1.0p24 + }, + { // Entry 1047 + 0x1.921fb44442d1846989f21a6c570d8eb3p0, + 0x1.0000000000001p24 + }, + { // Entry 1048 + -0x1.921fb44442d1846989f21a6c570d8eb3p0, + -0x1.0000000000001p24 + }, + { // Entry 1049 + 0x1.5368c951e9cfc7c24c38fb77a1dfa57cp0, + 0x1.fffffffffffffp1 + }, + { // Entry 1050 + -0x1.5368c951e9cfc7c24c38fb77a1dfa57cp0, + -0x1.fffffffffffffp1 + }, + { // Entry 1051 + 0x1.5368c951e9cfc9a42e1add5983cfb3a8p0, + 0x1.0p2 + }, + { // Entry 1052 + -0x1.5368c951e9cfc9a42e1add5983cfb3a8p0, + -0x1.0p2 + }, + { // Entry 1053 + 0x1.5368c951e9cfcd67f1dea11d475ac643p0, + 0x1.0000000000001p2 + }, + { // Entry 1054 + -0x1.5368c951e9cfcd67f1dea11d475ac643p0, + -0x1.0000000000001p2 + }, + { // Entry 1055 + 0x1.1b6e192ebbe443939e676eed7053450cp0, + 0x1.fffffffffffffp0 + }, + { // Entry 1056 + -0x1.1b6e192ebbe443939e676eed7053450cp0, + -0x1.fffffffffffffp0 + }, + { // Entry 1057 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.0p1 + }, + { // Entry 1058 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.0p1 + }, + { // Entry 1059 + 0x1.1b6e192ebbe44d2d3801088709af6e01p0, + 0x1.0000000000001p1 + }, + { // Entry 1060 + -0x1.1b6e192ebbe44d2d3801088709af6e01p0, + -0x1.0000000000001p1 + }, + { // Entry 1061 + 0x1.921fb54442d17c69898cc517019839a2p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 1062 + -0x1.921fb54442d17c69898cc517019839a2p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 1063 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p0 + }, + { // Entry 1064 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p0 + }, + { // Entry 1065 + 0x1.921fb54442d19469898cc517013839a2p-1, + 0x1.0000000000001p0 + }, + { // Entry 1066 + -0x1.921fb54442d19469898cc517013839a2p-1, + -0x1.0000000000001p0 + }, + { // Entry 1067 + 0x1.dac670561bb4e9be12fbbf0cab93d258p-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 1068 + -0x1.dac670561bb4e9be12fbbf0cab93d258p-2, + -0x1.fffffffffffffp-2 + }, + { // Entry 1069 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.0p-1 + }, + { // Entry 1070 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.0p-1 + }, + { // Entry 1071 + 0x1.dac670561bb510247962257311bcc81bp-2, + 0x1.0000000000001p-1 + }, + { // Entry 1072 + -0x1.dac670561bb510247962257311bcc81bp-2, + -0x1.0000000000001p-1 + }, + { // Entry 1073 + 0x1.f5b75f92c80dc71bcc802edce02e0a97p-3, + 0x1.fffffffffffffp-3 + }, + { // Entry 1074 + -0x1.f5b75f92c80dc71bcc802edce02e0a97p-3, + -0x1.fffffffffffffp-3 + }, + { // Entry 1075 + 0x1.f5b75f92c80dd62adb8f3debef442fcbp-3, + 0x1.0p-2 + }, + { // Entry 1076 + -0x1.f5b75f92c80dd62adb8f3debef442fcbp-3, + -0x1.0p-2 + }, + { // Entry 1077 + 0x1.f5b75f92c80df448f9ad5c0a0d45f554p-3, + 0x1.0000000000001p-2 + }, + { // Entry 1078 + -0x1.f5b75f92c80df448f9ad5c0a0d45f554p-3, + -0x1.0000000000001p-2 + }, + { // Entry 1079 + 0x1.fd5ba9aac2f6cca4951f70426d4e3181p-4, + 0x1.fffffffffffffp-4 + }, + { // Entry 1080 + -0x1.fd5ba9aac2f6cca4951f70426d4e3181p-4, + -0x1.fffffffffffffp-4 + }, + { // Entry 1081 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.0p-3 + }, + { // Entry 1082 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.0p-3 + }, + { // Entry 1083 + 0x1.fd5ba9aac2f6fbe7894eb3369c8b5496p-4, + 0x1.0000000000001p-3 + }, + { // Entry 1084 + -0x1.fd5ba9aac2f6fbe7894eb3369c8b5496p-4, + -0x1.0000000000001p-3 + }, + { // Entry 1085 + 0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + 0x1.fffffffffffffp-5 + }, + { // Entry 1086 + -0x1.ff55bb72cfde8c7d865f15c80c6b8bb0p-5, + -0x1.fffffffffffffp-5 + }, + { // Entry 1087 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.0p-4 + }, + { // Entry 1088 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.0p-4 + }, + { // Entry 1089 + 0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + 0x1.0000000000001p-4 + }, + { // Entry 1090 + -0x1.ff55bb72cfdebc4db62f45983c3a3e7cp-5, + -0x1.0000000000001p-4 + }, + { // Entry 1091 + 0x1.ffd55bba97623a88ee3b2ecbb917a476p-6, + 0x1.fffffffffffffp-6 + }, + { // Entry 1092 + -0x1.ffd55bba97623a88ee3b2ecbb917a476p-6, + -0x1.fffffffffffffp-6 + }, + { // Entry 1093 + 0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + 0x1.0p-5 + }, + { // Entry 1094 + -0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + -0x1.0p-5 + }, + { // Entry 1095 + 0x1.ffd55bba97626a7cf13a6efbad1a43e7p-6, + 0x1.0000000000001p-5 + }, + { // Entry 1096 + -0x1.ffd55bba97626a7cf13a6efbad1a43e7p-6, + -0x1.0000000000001p-5 + }, + { // Entry 1097 + 0x1.fff555bbb7299b78cf08ad801befb881p-7, + 0x1.fffffffffffffp-7 + }, + { // Entry 1098 + -0x1.fff555bbb7299b78cf08ad801befb881p-7, + -0x1.fffffffffffffp-7 + }, + { // Entry 1099 + 0x1.fff555bbb729ab77cf18ac802beec090p-7, + 0x1.0p-6 + }, + { // Entry 1100 + -0x1.fff555bbb729ab77cf18ac802beec090p-7, + -0x1.0p-6 + }, + { // Entry 1101 + 0x1.fff555bbb729cb75cf38aa804beca0b4p-7, + 0x1.0000000000001p-6 + }, + { // Entry 1102 + -0x1.fff555bbb729cb75cf38aa804beca0b4p-7, + -0x1.0000000000001p-6 + }, + { // Entry 1103 + 0x1.fffffff5555545bbbbbcb72972876256p-15, + 0x1.fffffffffffffp-15 + }, + { // Entry 1104 + -0x1.fffffff5555545bbbbbcb72972876256p-15, + -0x1.fffffffffffffp-15 + }, + { // Entry 1105 + 0x1.fffffff5555555bbbbbbb72972976256p-15, + 0x1.0p-14 + }, + { // Entry 1106 + -0x1.fffffff5555555bbbbbbb72972976256p-15, + -0x1.0p-14 + }, + { // Entry 1107 + 0x1.fffffff5555575bbbbb9b72972b76256p-15, + 0x1.0000000000001p-14 + }, + { // Entry 1108 + -0x1.fffffff5555575bbbbb9b72972b76256p-15, + -0x1.0000000000001p-14 + }, + { // Entry 1109 + 0x1.ffffffffffffed5555555555559bbbbbp-28, + 0x1.fffffffffffffp-28 + }, + { // Entry 1110 + -0x1.ffffffffffffed5555555555559bbbbbp-28, + -0x1.fffffffffffffp-28 + }, + { // Entry 1111 + 0x1.fffffffffffffd5555555555555bbbbbp-28, + 0x1.0p-27 + }, + { // Entry 1112 + -0x1.fffffffffffffd5555555555555bbbbbp-28, + -0x1.0p-27 + }, + { // Entry 1113 + 0x1.0000000000000eaaaaaaaaaaaa6dddddp-27, + 0x1.0000000000001p-27 + }, + { // Entry 1114 + -0x1.0000000000000eaaaaaaaaaaaa6dddddp-27, + -0x1.0000000000001p-27 + }, + { // Entry 1115 + 0x1.ffffffffffffeff555555555555655bbp-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 1116 + -0x1.ffffffffffffeff555555555555655bbp-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 1117 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.0p-30 + }, + { // Entry 1118 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.0p-30 + }, + { // Entry 1119 + 0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + 0x1.0000000000001p-30 + }, + { // Entry 1120 + -0x1.0000000000000ffaaaaaaaaaaaa9aaddp-30, + -0x1.0000000000001p-30 + }, + { // Entry 1121 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1122 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1123 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1124 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1125 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VAL + }, + { // Entry 1126 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VAL + }, + { // Entry 1127 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1128 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1129 + 0x1.921fb54442d18469898cc51701b839a2p0, + 0x1.ffffffffffffep1023 + }, + { // Entry 1130 + -0x1.921fb54442d18469898cc51701b839a2p0, + -0x1.ffffffffffffep1023 + }, + { // Entry 1131 + 0x1.433b8a322ddd29618168a21c962c68bcp0, + 0x1.921fb54442d18p1 + }, + { // Entry 1132 + -0x1.433b8a322ddd29618168a21c962c68bcp0, + -0x1.921fb54442d18p1 + }, + { // Entry 1133 + 0x1.00fe987ed02ff23377d99ec36db533fep0, + 0x1.921fb54442d18p0 + }, + { // Entry 1134 + -0x1.00fe987ed02ff23377d99ec36db533fep0, + -0x1.921fb54442d18p0 + }, + { // Entry 1135 + 0x1.921fb54442d19469898cc517013839a2p-1, + 0x1.0000000000001p0 + }, + { // Entry 1136 + -0x1.921fb54442d19469898cc517013839a2p-1, + -0x1.0000000000001p0 + }, + { // Entry 1137 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.0p0 + }, + { // Entry 1138 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.0p0 + }, + { // Entry 1139 + 0x1.921fb54442d17c69898cc517019839a2p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 1140 + -0x1.921fb54442d17c69898cc517019839a2p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 1141 + 0x1.54e04c05d06a04041ccf30f00110c0f6p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 1142 + -0x1.54e04c05d06a04041ccf30f00110c0f6p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 1143 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 1144 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 1145 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 1146 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 1147 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1148 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1149 + 0x1.ffffffffffffbfffffffffffffffffffp-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 1150 + -0x1.ffffffffffffbfffffffffffffffffffp-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 1151 + 0x1.ffffffffffffffffffffffffffffffffp-1074, + 0x1.0p-1073 + }, + { // Entry 1152 + -0x1.ffffffffffffffffffffffffffffffffp-1074, + -0x1.0p-1073 + }, + { // Entry 1153 + 0.0, + 0x1.0p-1074 + }, + { // Entry 1154 + -0.0, + -0x1.0p-1074 + }, + { // Entry 1155 + 0.0, + 0.0 + }, + { // Entry 1156 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/atanf_intel_data.h b/tests/math_data/atanf_intel_data.h new file mode 100644 index 000000000..85f996222 --- /dev/null +++ b/tests/math_data/atanf_intel_data.h @@ -0,0 +1,4350 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_atanf_intel_data[] = { + { // Entry 0 + -0x1.dc2c98008d535c517dd9d371c44a6151p-2, + -0x1.00e0p-1 + }, + { // Entry 1 + 0x1.dc2c98008d535c517dd9d371c44a6151p-2, + 0x1.00e0p-1 + }, + { // Entry 2 + -0x1.93d63bfce467ef12745bcaf164c988cdp-1, + -0x1.01b8p0 + }, + { // Entry 3 + 0x1.93d63bfce467ef12745bcaf164c988cdp-1, + 0x1.01b8p0 + }, + { // Entry 4 + -0x1.93e6bcfcbf2868bf3d227ad52cc06775p-1, + -0x1.01c89ep0 + }, + { // Entry 5 + 0x1.93e6bcfcbf2868bf3d227ad52cc06775p-1, + 0x1.01c89ep0 + }, + { // Entry 6 + -0x1.e4353f004481a69e0d97136cd8302508p-2, + -0x1.05ec48p-1 + }, + { // Entry 7 + 0x1.e4353f004481a69e0d97136cd8302508p-2, + 0x1.05ec48p-1 + }, + { // Entry 8 + -0x1.980dd942c58931ccfa88aa5714d9589bp-1, + -0x1.06p0 + }, + { // Entry 9 + 0x1.980dd942c58931ccfa88aa5714d9589bp-1, + 0x1.06p0 + }, + { // Entry 10 + -0x1.e4e7050041fea5e474bc42bb3e9598edp-2, + -0x1.065c78p-1 + }, + { // Entry 11 + 0x1.e4e7050041fea5e474bc42bb3e9598edp-2, + 0x1.065c78p-1 + }, + { // Entry 12 + -0x1.fd08daffe290e806775f8df4ed63331fp-2, + -0x1.15c8e2p-1 + }, + { // Entry 13 + 0x1.fd08daffe290e806775f8df4ed63331fp-2, + 0x1.15c8e2p-1 + }, + { // Entry 14 + -0x1.12d0910000acd3796043ce397dc0aaf0p-1, + -0x1.30a612p-1 + }, + { // Entry 15 + 0x1.12d0910000acd3796043ce397dc0aaf0p-1, + 0x1.30a612p-1 + }, + { // Entry 16 + -0x1.8501defc40a94bd69a326f6f4efc3cabp0, + -0x1.3801p4 + }, + { // Entry 17 + 0x1.8501defc40a94bd69a326f6f4efc3cabp0, + 0x1.3801p4 + }, + { // Entry 18 + -0x1.1dbfdb002aafa34d56d4efdeb875d7ccp-1, + -0x1.3fa5d0p-1 + }, + { // Entry 19 + 0x1.1dbfdb002aafa34d56d4efdeb875d7ccp-1, + 0x1.3fa5d0p-1 + }, + { // Entry 20 + -0x1.91c7f6fffff6a5eef58d32a20cb76586p0, + -0x1.7573fep9 + }, + { // Entry 21 + 0x1.91c7f6fffff6a5eef58d32a20cb76586p0, + 0x1.7573fep9 + }, + { // Entry 22 + -0x1.f31d35b81259f5f45badc8b774241b15p-1, + -0x1.79743ep0 + }, + { // Entry 23 + 0x1.f31d35b81259f5f45badc8b774241b15p-1, + 0x1.79743ep0 + }, + { // Entry 24 + -0x1.f54b76ff8c8f4020ccc4dfba5f1dcfc4p-1, + -0x1.7cefc8p0 + }, + { // Entry 25 + 0x1.f54b76ff8c8f4020ccc4dfba5f1dcfc4p-1, + 0x1.7cefc8p0 + }, + { // Entry 26 + -0x1.921fa2ffefea1a475fc6364331e98c0fp0, + -0x1.c07630p19 + }, + { // Entry 27 + 0x1.921fa2ffefea1a475fc6364331e98c0fp0, + 0x1.c07630p19 + }, + { // Entry 28 + -0x1.c8d37cfff9732aae565e96c9ab1ae3p-4, + -0x1.cabad0p-4 + }, + { // Entry 29 + 0x1.c8d37cfff9732aae565e96c9ab1ae3p-4, + 0x1.cabad0p-4 + }, + { // Entry 30 + -0x1.8455816cd8b17910d5fb42c54a7a3f6ap-1, + -0x1.e52326p-1 + }, + { // Entry 31 + 0x1.8455816cd8b17910d5fb42c54a7a3f6ap-1, + 0x1.e52326p-1 + }, + { // Entry 32 + -0x1.87ce6ca38f66951f7d176d27e4cc7114p-1, + -0x1.ebc518p-1 + }, + { // Entry 33 + 0x1.87ce6ca38f66951f7d176d27e4cc7114p-1, + 0x1.ebc518p-1 + }, + { // Entry 34 + 0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + 0x1.p-5 + }, + { // Entry 35 + -0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + -0x1.p-5 + }, + { // Entry 36 + 0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + 0x1.000002p-4 + }, + { // Entry 37 + -0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + -0x1.000002p-4 + }, + { // Entry 38 + 0x1.ff5632fb474b2bdff859ee6421a12d48p-5, + 0x1.00003cp-4 + }, + { // Entry 39 + -0x1.ff5632fb474b2bdff859ee6421a12d48p-5, + -0x1.00003cp-4 + }, + { // Entry 40 + 0x1.9220654406519246dee218750f6118e0p-1, + 0x1.0000b0p0 + }, + { // Entry 41 + -0x1.9220654406519246dee218750f6118e0p-1, + -0x1.0000b0p0 + }, + { // Entry 42 + 0x1.f5b8c8fc218568d2548c390de7a3dfcep-3, + 0x1.0000c0p-2 + }, + { // Entry 43 + -0x1.f5b8c8fc218568d2548c390de7a3dfcep-3, + -0x1.0000c0p-2 + }, + { // Entry 44 + 0x1.fd64d4fccffaeeedba9c9564a6730d18p-4, + 0x1.0004a8p-3 + }, + { // Entry 45 + -0x1.fd64d4fccffaeeedba9c9564a6730d18p-4, + -0x1.0004a8p-3 + }, + { // Entry 46 + 0x1.9227b5244326d9bed87bdeb00908aeb7p-1, + 0x1.0008p0 + }, + { // Entry 47 + -0x1.9227b5244326d9bed87bdeb00908aeb7p-1, + -0x1.0008p0 + }, + { // Entry 48 + 0x1.922b76ff245e6de6345559ddb2fcf536p-1, + 0x1.000bc2p0 + }, + { // Entry 49 + -0x1.922b76ff245e6de6345559ddb2fcf536p-1, + -0x1.000bc2p0 + }, + { // Entry 50 + 0x1.922b82fe9701aeaffb73a1443c0c83d0p-1, + 0x1.000bcep0 + }, + { // Entry 51 + -0x1.922b82fe9701aeaffb73a1443c0c83d0p-1, + -0x1.000bcep0 + }, + { // Entry 52 + 0x1.923faf44d816daa54d425d8045e2887dp-1, + 0x1.001ffcp0 + }, + { // Entry 53 + -0x1.923faf44d816daa54d425d8045e2887dp-1, + -0x1.001ffcp0 + }, + { // Entry 54 + 0x1.fe2484fd31d3cf098219a2af1d986eedp-4, + 0x1.0066p-3 + }, + { // Entry 55 + -0x1.fe2484fd31d3cf098219a2af1d986eedp-4, + -0x1.0066p-3 + }, + { // Entry 56 + 0x1.92939b003b069b3e275950af80cd63fcp-1, + 0x1.0074p0 + }, + { // Entry 57 + -0x1.92939b003b069b3e275950af80cd63fcp-1, + -0x1.0074p0 + }, + { // Entry 58 + 0x1.1b9d3b002159e2945b595dab6488de5bp0, + 0x1.0076p1 + }, + { // Entry 59 + -0x1.1b9d3b002159e2945b595dab6488de5bp0, + -0x1.0076p1 + }, + { // Entry 60 + 0x1.dc2c98008d535c517dd9d371c44a6151p-2, + 0x1.00e0p-1 + }, + { // Entry 61 + -0x1.dc2c98008d535c517dd9d371c44a6151p-2, + -0x1.00e0p-1 + }, + { // Entry 62 + 0x1.93d63bfce467ef12745bcaf164c988cdp-1, + 0x1.01b8p0 + }, + { // Entry 63 + -0x1.93d63bfce467ef12745bcaf164c988cdp-1, + -0x1.01b8p0 + }, + { // Entry 64 + 0x1.94167efccbc0fa6d4577f69f61e031d2p-1, + 0x1.01f8bap0 + }, + { // Entry 65 + -0x1.94167efccbc0fa6d4577f69f61e031d2p-1, + -0x1.01f8bap0 + }, + { // Entry 66 + 0x1.9672428abad4ced3d0a6e349e9bf2b3ep-1, + 0x1.045cp0 + }, + { // Entry 67 + -0x1.9672428abad4ced3d0a6e349e9bf2b3ep-1, + -0x1.045cp0 + }, + { // Entry 68 + 0x1.fe8abeff0d857adea735e07cdc25f45cp-3, + 0x1.04b198p-2 + }, + { // Entry 69 + -0x1.fe8abeff0d857adea735e07cdc25f45cp-3, + -0x1.04b198p-2 + }, + { // Entry 70 + 0x1.e3ee99003632acbd63018dcd998b0a66p-2, + 0x1.05bfb8p-1 + }, + { // Entry 71 + -0x1.e3ee99003632acbd63018dcd998b0a66p-2, + -0x1.05bfb8p-1 + }, + { // Entry 72 + 0x1.980dd942c58931ccfa88aa5714d9589bp-1, + 0x1.06p0 + }, + { // Entry 73 + -0x1.980dd942c58931ccfa88aa5714d9589bp-1, + -0x1.06p0 + }, + { // Entry 74 + 0x1.e4c00f0040fd5558135d221fc95d855ep-2, + 0x1.0643e0p-1 + }, + { // Entry 75 + -0x1.e4c00f0040fd5558135d221fc95d855ep-2, + -0x1.0643e0p-1 + }, + { // Entry 76 + 0x1.e4e7050041fea5e474bc42bb3e9598edp-2, + 0x1.065c78p-1 + }, + { // Entry 77 + -0x1.e4e7050041fea5e474bc42bb3e9598edp-2, + -0x1.065c78p-1 + }, + { // Entry 78 + 0x1.067fe90007689d48fb39791c0a809723p-9, + 0x1.0680p-9 + }, + { // Entry 79 + -0x1.067fe90007689d48fb39791c0a809723p-9, + -0x1.0680p-9 + }, + { // Entry 80 + 0x1.e5f6450041f31d7a1b1ffc6626e3a3a9p-2, + 0x1.0707ccp-1 + }, + { // Entry 81 + -0x1.e5f6450041f31d7a1b1ffc6626e3a3a9p-2, + -0x1.0707ccp-1 + }, + { // Entry 82 + 0x1.9a000a935bd8e2b2823be1b99de9aa6dp-1, + 0x1.08p0 + }, + { // Entry 83 + -0x1.9a000a935bd8e2b2823be1b99de9aa6dp-1, + -0x1.08p0 + }, + { // Entry 84 + 0x1.e7e095003c972c47c7b484d1174ef8f1p-2, + 0x1.083df4p-1 + }, + { // Entry 85 + -0x1.e7e095003c972c47c7b484d1174ef8f1p-2, + -0x1.083df4p-1 + }, + { // Entry 86 + 0x1.9b95d2027f3b51c408badd232447fca7p-1, + 0x1.09a4p0 + }, + { // Entry 87 + -0x1.9b95d2027f3b51c408badd232447fca7p-1, + -0x1.09a4p0 + }, + { // Entry 88 + 0x1.9bf2349c2fe1915b2ba951f4d90c2346p-1, + 0x1.0a04p0 + }, + { // Entry 89 + -0x1.9bf2349c2fe1915b2ba951f4d90c2346p-1, + -0x1.0a04p0 + }, + { // Entry 90 + 0x1.9c0d202ee6cadb3368d0bc3bc61620f7p-1, + 0x1.0a20p0 + }, + { // Entry 91 + -0x1.9c0d202ee6cadb3368d0bc3bc61620f7p-1, + -0x1.0a20p0 + }, + { // Entry 92 + 0x1.9c0e9ebf9ee6f339b8d4eb3e3659c70ep-1, + 0x1.0a218ep0 + }, + { // Entry 93 + -0x1.9c0e9ebf9ee6f339b8d4eb3e3659c70ep-1, + -0x1.0a218ep0 + }, + { // Entry 94 + 0x1.9d252e659267619beef68e8773dc6ec3p-1, + 0x1.0b44p0 + }, + { // Entry 95 + -0x1.9d252e659267619beef68e8773dc6ec3p-1, + -0x1.0b44p0 + }, + { // Entry 96 + 0x1.ee39fb000821b1a9c00089e135f069d2p-2, + 0x1.0c4670p-1 + }, + { // Entry 97 + -0x1.ee39fb000821b1a9c00089e135f069d2p-2, + -0x1.0c4670p-1 + }, + { // Entry 98 + 0x1.eff285034b3ca346fbed2f996a1534f1p-2, + 0x1.0d5f6ep-1 + }, + { // Entry 99 + -0x1.eff285034b3ca346fbed2f996a1534f1p-2, + -0x1.0d5f6ep-1 + }, + { // Entry 100 + 0x1.f33837034c37141c6ee6c4c215ebe879p-2, + 0x1.0f771ep-1 + }, + { // Entry 101 + -0x1.f33837034c37141c6ee6c4c215ebe879p-2, + -0x1.0f771ep-1 + }, + { // Entry 102 + 0x1.a169ad8725b3aa57831d5cea9cf84a45p-1, + 0x1.0fc3aep0 + }, + { // Entry 103 + -0x1.a169ad8725b3aa57831d5cea9cf84a45p-1, + -0x1.0fc3aep0 + }, + { // Entry 104 + 0x1.a199a5013b67a3668024b5fdba537ffbp-1, + 0x1.0ff6b6p0 + }, + { // Entry 105 + -0x1.a199a5013b67a3668024b5fdba537ffbp-1, + -0x1.0ff6b6p0 + }, + { // Entry 106 + 0x1.f9ef110001fb3099dbc032baff8a7c9cp-2, + 0x1.13c8p-1 + }, + { // Entry 107 + -0x1.f9ef110001fb3099dbc032baff8a7c9cp-2, + -0x1.13c8p-1 + }, + { // Entry 108 + 0x1.fb05f2d09a4dc6b31f91eaed3651aa0fp-2, + 0x1.147cp-1 + }, + { // Entry 109 + -0x1.fb05f2d09a4dc6b31f91eaed3651aa0fp-2, + -0x1.147cp-1 + }, + { // Entry 110 + 0x1.166210ff1f27419bd56d7ad58a532203p-4, + 0x1.16d0p-4 + }, + { // Entry 111 + -0x1.166210ff1f27419bd56d7ad58a532203p-4, + -0x1.16d0p-4 + }, + { // Entry 112 + 0x1.ff14479ea0d08b305667ea1e6b71efa9p-2, + 0x1.171cp-1 + }, + { // Entry 113 + -0x1.ff14479ea0d08b305667ea1e6b71efa9p-2, + -0x1.171cp-1 + }, + { // Entry 114 + 0x1.aa655941c2ed237529659b26a6d40360p-1, + 0x1.1980p0 + }, + { // Entry 115 + -0x1.aa655941c2ed237529659b26a6d40360p-1, + -0x1.1980p0 + }, + { // Entry 116 + 0x1.1ac3c9559802914487a1a7e1b563dc42p-4, + 0x1.1b37p-4 + }, + { // Entry 117 + -0x1.1ac3c9559802914487a1a7e1b563dc42p-4, + -0x1.1b37p-4 + }, + { // Entry 118 + 0x1.ace31afd63c618792d7f004a5f20bf53p-1, + 0x1.1c443ep0 + }, + { // Entry 119 + -0x1.ace31afd63c618792d7f004a5f20bf53p-1, + -0x1.1c443ep0 + }, + { // Entry 120 + 0x1.aefd63ceeeba596e1d377ed9501f9f2dp-1, + 0x1.1ea0p0 + }, + { // Entry 121 + -0x1.aefd63ceeeba596e1d377ed9501f9f2dp-1, + -0x1.1ea0p0 + }, + { // Entry 122 + 0x1.31e3ddfffbe9c81c178270bc759875e9p-3, + 0x1.342f6cp-3 + }, + { // Entry 123 + -0x1.31e3ddfffbe9c81c178270bc759875e9p-3, + -0x1.342f6cp-3 + }, + { // Entry 124 + 0x1.30f588fffee141782f61de3b913cc344p-2, + 0x1.3a4e82p-2 + }, + { // Entry 125 + -0x1.30f588fffee141782f61de3b913cc344p-2, + -0x1.3a4e82p-2 + }, + { // Entry 126 + 0x1.26c384fe95d5e24c9c60adf93f531182p-1, + 0x1.4c50e8p-1 + }, + { // Entry 127 + -0x1.26c384fe95d5e24c9c60adf93f531182p-1, + -0x1.4c50e8p-1 + }, + { // Entry 128 + 0x1.e42856fffdaf1e270f502c72bfe272b0p-1, + 0x1.62b140p0 + }, + { // Entry 129 + -0x1.e42856fffdaf1e270f502c72bfe272b0p-1, + -0x1.62b140p0 + }, + { // Entry 130 + 0x1.6703fefed06b914b99e3124ca0c2cb58p-2, + 0x1.767caap-2 + }, + { // Entry 131 + -0x1.6703fefed06b914b99e3124ca0c2cb58p-2, + -0x1.767caap-2 + }, + { // Entry 132 + 0x1.75cb06fffffebc09be37493223d1436ap-4, + 0x1.76d58ep-4 + }, + { // Entry 133 + -0x1.75cb06fffffebc09be37493223d1436ap-4, + -0x1.76d58ep-4 + }, + { // Entry 134 + 0x1.43fdd1a6959aa989f50575cf45455d64p-1, + 0x1.7780f2p-1 + }, + { // Entry 135 + -0x1.43fdd1a6959aa989f50575cf45455d64p-1, + -0x1.7780f2p-1 + }, + { // Entry 136 + 0x1.481bba0215fb04f66252d5b8f4a0299ap-1, + 0x1.7ddf62p-1 + }, + { // Entry 137 + -0x1.481bba0215fb04f66252d5b8f4a0299ap-1, + -0x1.7ddf62p-1 + }, + { // Entry 138 + 0x1.6f946595578bf7edcadbbe6e816838dap-2, + 0x1.8039f8p-2 + }, + { // Entry 139 + -0x1.6f946595578bf7edcadbbe6e816838dap-2, + -0x1.8039f8p-2 + }, + { // Entry 140 + 0x1.6f9d299cc53084feaeb4a89dd538984cp-2, + 0x1.8043f8p-2 + }, + { // Entry 141 + -0x1.6f9d299cc53084feaeb4a89dd538984cp-2, + -0x1.8043f8p-2 + }, + { // Entry 142 + 0x1.6fa461634385621a7b4a1f3f39e69e88p-2, + 0x1.804c34p-2 + }, + { // Entry 143 + -0x1.6fa461634385621a7b4a1f3f39e69e88p-2, + -0x1.804c34p-2 + }, + { // Entry 144 + 0x1.6fedbe03cf0b00cdb648f3f58822f3c8p-2, + 0x1.809fe8p-2 + }, + { // Entry 145 + -0x1.6fedbe03cf0b00cdb648f3f58822f3c8p-2, + -0x1.809fe8p-2 + }, + { // Entry 146 + 0x1.738c297a78e8c603048015fdc8bcf4c9p-2, + 0x1.84c270p-2 + }, + { // Entry 147 + -0x1.738c297a78e8c603048015fdc8bcf4c9p-2, + -0x1.84c270p-2 + }, + { // Entry 148 + 0x1.98f0340002c61b1d33f8d1e2c1af5581p-4, + 0x1.9a4d6ep-4 + }, + { // Entry 149 + -0x1.98f0340002c61b1d33f8d1e2c1af5581p-4, + -0x1.9a4d6ep-4 + }, + { // Entry 150 + 0x1.9f8b4300038b239eb63e7be822591b5fp-4, + 0x1.a0f9bcp-4 + }, + { // Entry 151 + -0x1.9f8b4300038b239eb63e7be822591b5fp-4, + -0x1.a0f9bcp-4 + }, + { // Entry 152 + 0x1.a0fd9d00039a60bddbfddc10b05c56a3p-4, + 0x1.a26ff0p-4 + }, + { // Entry 153 + -0x1.a0fd9d00039a60bddbfddc10b05c56a3p-4, + -0x1.a26ff0p-4 + }, + { // Entry 154 + 0x1.a4728900556fc2b8a5a530e3d999b1d7p-4, + 0x1.a5ee2cp-4 + }, + { // Entry 155 + -0x1.a4728900556fc2b8a5a530e3d999b1d7p-4, + -0x1.a5ee2cp-4 + }, + { // Entry 156 + 0x1.a4728afaf537b57369dd1613673f2757p-4, + 0x1.a5ee2ep-4 + }, + { // Entry 157 + -0x1.a4728afaf537b57369dd1613673f2757p-4, + -0x1.a5ee2ep-4 + }, + { // Entry 158 + 0x1.915e19aa098cba6ef178411ea4174f67p-2, + 0x1.a744d8p-2 + }, + { // Entry 159 + -0x1.915e19aa098cba6ef178411ea4174f67p-2, + -0x1.a744d8p-2 + }, + { // Entry 160 + 0x1.a95d5effffee8dfa2a44af912ff5c6bdp-4, + 0x1.aae686p-4 + }, + { // Entry 161 + -0x1.a95d5effffee8dfa2a44af912ff5c6bdp-4, + -0x1.aae686p-4 + }, + { // Entry 162 + 0x1.b0f897fdea5769efb43b734c6f5d38fdp-4, + 0x1.b29748p-4 + }, + { // Entry 163 + -0x1.b0f897fdea5769efb43b734c6f5d38fdp-4, + -0x1.b29748p-4 + }, + { // Entry 164 + 0x1.b6fd68fffbf33784a8e129606c5a3fd4p-4, + 0x1.b8adb0p-4 + }, + { // Entry 165 + -0x1.b6fd68fffbf33784a8e129606c5a3fd4p-4, + -0x1.b8adb0p-4 + }, + { // Entry 166 + 0x1.a205342c457ac3a056abcfe7527a4453p-2, + 0x1.bae68ep-2 + }, + { // Entry 167 + -0x1.a205342c457ac3a056abcfe7527a4453p-2, + -0x1.bae68ep-2 + }, + { // Entry 168 + 0x1.a64efd063370b5e3a708b2a37ddab223p-2, + 0x1.c00014p-2 + }, + { // Entry 169 + -0x1.a64efd063370b5e3a708b2a37ddab223p-2, + -0x1.c00014p-2 + }, + { // Entry 170 + 0x1.ad00f396db03faa7f9d7e3221d4552adp-2, + 0x1.c7fffep-2 + }, + { // Entry 171 + -0x1.ad00f396db03faa7f9d7e3221d4552adp-2, + -0x1.c7fffep-2 + }, + { // Entry 172 + 0x1.6e6d5d27bd08154a6349dd2d9a311e10p0, + 0x1.c7fffep2 + }, + { // Entry 173 + -0x1.6e6d5d27bd08154a6349dd2d9a311e10p0, + -0x1.c7fffep2 + }, + { // Entry 174 + 0x1.769885e484d0999ef07a0c7cc0ce73f5p-1, + 0x1.cbb484p-1 + }, + { // Entry 175 + -0x1.769885e484d0999ef07a0c7cc0ce73f5p-1, + -0x1.cbb484p-1 + }, + { // Entry 176 + 0x1.7805f5ed5a7d34cf922043471c74eecfp-1, + 0x1.ce4a36p-1 + }, + { // Entry 177 + -0x1.7805f5ed5a7d34cf922043471c74eecfp-1, + -0x1.ce4a36p-1 + }, + { // Entry 178 + 0x1.c85b2ebda13e4f781ea65e5aa1b8b9e1p-3, + 0x1.d00ffep-3 + }, + { // Entry 179 + -0x1.c85b2ebda13e4f781ea65e5aa1b8b9e1p-3, + -0x1.d00ffep-3 + }, + { // Entry 180 + 0x1.c8df373eebdbd7d2983d9c074687b3b1p-3, + 0x1.d09ad0p-3 + }, + { // Entry 181 + -0x1.c8df373eebdbd7d2983d9c074687b3b1p-3, + -0x1.d09ad0p-3 + }, + { // Entry 182 + 0x1.8108f7001b7ce9d26ea2a770acd41044p0, + 0x1.deaa38p3 + }, + { // Entry 183 + -0x1.8108f7001b7ce9d26ea2a770acd41044p0, + -0x1.deaa38p3 + }, + { // Entry 184 + 0x1.82d6b687d8692e9aefc611be6b1d44a8p-1, + 0x1.e24eaep-1 + }, + { // Entry 185 + -0x1.82d6b687d8692e9aefc611be6b1d44a8p-1, + -0x1.e24eaep-1 + }, + { // Entry 186 + 0x1.921fb5011d0bff02f51322a08f435689p0, + 0x1.e7fffep25 + }, + { // Entry 187 + -0x1.921fb5011d0bff02f51322a08f435689p0, + -0x1.e7fffep25 + }, + { // Entry 188 + 0x1.8755f7204b35fedd69304c014ba9193ap-1, + 0x1.eaddb6p-1 + }, + { // Entry 189 + -0x1.8755f7204b35fedd69304c014ba9193ap-1, + -0x1.eaddb6p-1 + }, + { // Entry 190 + 0x1.921facfffe4d525869adf36453ac0045p0, + 0x1.ef7bd0p20 + }, + { // Entry 191 + -0x1.921facfffe4d525869adf36453ac0045p0, + -0x1.ef7bd0p20 + }, + { // Entry 192 + 0x1.f14041fffc6f93742ff15942783907eep-4, + 0x1.f3b552p-4 + }, + { // Entry 193 + -0x1.f14041fffc6f93742ff15942783907eep-4, + -0x1.f3b552p-4 + }, + { // Entry 194 + 0x1.f4bb0afed7559483e5805dd4879465bcp-6, + 0x1.f4e2f8p-6 + }, + { // Entry 195 + -0x1.f4bb0afed7559483e5805dd4879465bcp-6, + -0x1.f4e2f8p-6 + }, + { // Entry 196 + 0x1.d45aeb02a07ca4b711c2193329425c78p-2, + 0x1.f7fffep-2 + }, + { // Entry 197 + -0x1.d45aeb02a07ca4b711c2193329425c78p-2, + -0x1.f7fffep-2 + }, + { // Entry 198 + 0x1.d539bcffd5888dca7deceba8a3f2d041p-2, + 0x1.f914e8p-2 + }, + { // Entry 199 + -0x1.d539bcffd5888dca7deceba8a3f2d041p-2, + -0x1.f914e8p-2 + }, + { // Entry 200 + 0x1.8ee84f1478a25b9bfacdabb49fcea6d5p-1, + 0x1.f99b76p-1 + }, + { // Entry 201 + -0x1.8ee84f1478a25b9bfacdabb49fcea6d5p-1, + -0x1.f99b76p-1 + }, + { // Entry 202 + 0x1.fadbf0ff486b15e264c02ca39b8e6e46p-6, + 0x1.fb055ap-6 + }, + { // Entry 203 + -0x1.fadbf0ff486b15e264c02ca39b8e6e46p-6, + -0x1.fb055ap-6 + }, + { // Entry 204 + 0x1.9044df034b8d943327bee5c633b3f31cp-1, + 0x1.fc4dc0p-1 + }, + { // Entry 205 + -0x1.9044df034b8d943327bee5c633b3f31cp-1, + -0x1.fc4dc0p-1 + }, + { // Entry 206 + 0x1.921f74fffa03e701accc9d1ee3bd2f43p0, + 0x1.fddffep17 + }, + { // Entry 207 + -0x1.921f74fffa03e701accc9d1ee3bd2f43p0, + -0x1.fddffep17 + }, + { // Entry 208 + 0x1.91af9bc0400e0e21fb44692a41829c5dp-1, + 0x1.ff1ffep-1 + }, + { // Entry 209 + -0x1.91af9bc0400e0e21fb44692a41829c5dp-1, + -0x1.ff1ffep-1 + }, + { // Entry 210 + 0x1.91bfa241a2bf1c8f33e7aee3a38362fap-1, + 0x1.ff3ffep-1 + }, + { // Entry 211 + -0x1.91bfa241a2bf1c8f33e7aee3a38362fap-1, + -0x1.ff3ffep-1 + }, + { // Entry 212 + 0x1.f502a50008dcfa3d1252e8256297aa16p-3, + 0x1.ff3ffep-3 + }, + { // Entry 213 + -0x1.f502a50008dcfa3d1252e8256297aa16p-3, + -0x1.ff3ffep-3 + }, + { // Entry 214 + 0x1.1b6c658f57d1e4435c946530e7d0415cp0, + 0x1.fff77ep0 + }, + { // Entry 215 + -0x1.1b6c658f57d1e4435c946530e7d0415cp0, + -0x1.fff77ep0 + }, + { // Entry 216 + 0x1.f5b0a8fac8ee3b2a0997552183bbaf86p-3, + 0x1.fff8dep-3 + }, + { // Entry 217 + -0x1.f5b0a8fac8ee3b2a0997552183bbaf86p-3, + -0x1.fff8dep-3 + }, + { // Entry 218 + 0x1.f5b0c8fad63b565edaa4205b5787d234p-3, + 0x1.fff9p-3 + }, + { // Entry 219 + -0x1.f5b0c8fad63b565edaa4205b5787d234p-3, + -0x1.fff9p-3 + }, + { // Entry 220 + 0x1.ffd048ff42ff02270154618cac768f98p-6, + 0x1.fffaecp-6 + }, + { // Entry 221 + -0x1.ffd048ff42ff02270154618cac768f98p-6, + -0x1.fffaecp-6 + }, + { // Entry 222 + 0x1.921de5429e50865c34386a247dc4ee4ep-1, + 0x1.fffc60p-1 + }, + { // Entry 223 + -0x1.921de5429e50865c34386a247dc4ee4ep-1, + -0x1.fffc60p-1 + }, + { // Entry 224 + 0x1.921f84443e21041cf1621a6d2e90a3cap-1, + 0x1.ffff9ep-1 + }, + { // Entry 225 + -0x1.921f84443e21041cf1621a6d2e90a3cap-1, + -0x1.ffff9ep-1 + }, + { // Entry 226 + 0x1.1b6e0d95213d8e5e8acacf6ee3b5dda1p0, + 0x1.ffffc6p0 + }, + { // Entry 227 + -0x1.1b6e0d95213d8e5e8acacf6ee3b5dda1p0, + -0x1.ffffc6p0 + }, + { // Entry 228 + 0x1.5368c551e98fc9a0436ff6aed5a43bfep0, + 0x1.ffffdep1 + }, + { // Entry 229 + -0x1.5368c551e98fc9a0436ff6aed5a43bfep0, + -0x1.ffffdep1 + }, + { // Entry 230 + 0x1.1b6e15952230c1a76e364414327ae250p0, + 0x1.ffffeep0 + }, + { // Entry 231 + -0x1.1b6e15952230c1a76e364414327ae250p0, + -0x1.ffffeep0 + }, + { // Entry 232 + 0x1.921fb14442c984697ee21a6c570dc22ap-1, + 0x1.fffff8p-1 + }, + { // Entry 233 + -0x1.921fb14442c984697ee21a6c570dc22ap-1, + -0x1.fffff8p-1 + }, + { // Entry 234 + -0.0f, + -0x1.p-149 + }, + { // Entry 235 + 0.0f, + 0x1.p-149 + }, + { // Entry 236 + 0.0, + 0.0 + }, + { // Entry 237 + 0.0f, + 0x1.p-149 + }, + { // Entry 238 + -0.0f, + -0x1.p-149 + }, + { // Entry 239 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 240 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 241 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126 + }, + { // Entry 242 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126 + }, + { // Entry 243 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127 + }, + { // Entry 244 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127 + }, + { // Entry 245 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127 + }, + { // Entry 246 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127 + }, + { // Entry 247 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126 + }, + { // Entry 248 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126 + }, + { // Entry 249 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 250 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 251 + 0x1.999999a89e60d0512d6b0b39bd2a565ap-13, + 0x1.99999ap-13 + }, + { // Entry 252 + -0x1.999999a89e60d0512d6b0b39bd2a565ap-13, + -0x1.99999ap-13 + }, + { // Entry 253 + 0x1.999998a27984d3ebeb1c3290cc2c5caap-12, + 0x1.99999ap-12 + }, + { // Entry 254 + -0x1.999998a27984d3ebeb1c3290cc2c5caap-12, + -0x1.99999ap-12 + }, + { // Entry 255 + 0x1.333331b22d11b0ccb2bb7ba6f63b4d3cp-11, + 0x1.333334p-11 + }, + { // Entry 256 + -0x1.333331b22d11b0ccb2bb7ba6f63b4d3cp-11, + -0x1.333334p-11 + }, + { // Entry 257 + 0x1.99999489e62c7a2256e05c49880d23d9p-11, + 0x1.99999ap-11 + }, + { // Entry 258 + -0x1.99999489e62c7a2256e05c49880d23d9p-11, + -0x1.99999ap-11 + }, + { // Entry 259 + 0x1.fffff55555bbbbb72972d00cfde752f9p-11, + 0x1.p-10 + }, + { // Entry 260 + -0x1.fffff55555bbbbb72972d00cfde752f9p-11, + -0x1.p-10 + }, + { // Entry 261 + 0x1.33332ac8b4a6505aad1a5539202df4f4p-10, + 0x1.333334p-10 + }, + { // Entry 262 + -0x1.33332ac8b4a6505aad1a5539202df4f4p-10, + -0x1.333334p-10 + }, + { // Entry 263 + 0x1.6666595d875d6f587e4d878a7b492f47p-10, + 0x1.666668p-10 + }, + { // Entry 264 + -0x1.6666595d875d6f587e4d878a7b492f47p-10, + -0x1.666668p-10 + }, + { // Entry 265 + 0x1.9999862799f2a4104ba8c411863e71f7p-10, + 0x1.99999cp-10 + }, + { // Entry 266 + -0x1.9999862799f2a4104ba8c411863e71f7p-10, + -0x1.99999cp-10 + }, + { // Entry 267 + 0x1.ccccace5643276ecd8ffae54b28b87ffp-10, + 0x1.ccccccp-10 + }, + { // Entry 268 + -0x1.ccccace5643276ecd8ffae54b28b87ffp-10, + -0x1.ccccccp-10 + }, + { // Entry 269 + 0x1.0664f66f7cfd482cf0ff4582bbeef478p-7, + 0x1.066666p-7 + }, + { // Entry 270 + -0x1.0664f66f7cfd482cf0ff4582bbeef478p-7, + -0x1.066666p-7 + }, + { // Entry 271 + 0x1.ccc505948fe7a3b8e0837445c2136897p-7, + 0x1.ccccccp-7 + }, + { // Entry 272 + -0x1.ccc505948fe7a3b8e0837445c2136897p-7, + -0x1.ccccccp-7 + }, + { // Entry 273 + 0x1.498e36c4f385d5af3b6b6480a8ebfe14p-6, + 0x1.499998p-6 + }, + { // Entry 274 + -0x1.498e36c4f385d5af3b6b6480a8ebfe14p-6, + -0x1.499998p-6 + }, + { // Entry 275 + 0x1.acb3be5be013930205335e91f230ec8bp-6, + 0x1.acccccp-6 + }, + { // Entry 276 + -0x1.acb3be5be013930205335e91f230ec8bp-6, + -0x1.acccccp-6 + }, + { // Entry 277 + 0x1.07e89e3abee7df5bc22b883856e5d802p-5, + 0x1.08p-5 + }, + { // Entry 278 + -0x1.07e89e3abee7df5bc22b883856e5d802p-5, + -0x1.08p-5 + }, + { // Entry 279 + 0x1.39726b6fab059b66dd740ae83fb565b7p-5, + 0x1.39999ap-5 + }, + { // Entry 280 + -0x1.39726b6fab059b66dd740ae83fb565b7p-5, + -0x1.39999ap-5 + }, + { // Entry 281 + 0x1.6af65a41908039c267674f356f997d4dp-5, + 0x1.6b3334p-5 + }, + { // Entry 282 + -0x1.6af65a41908039c267674f356f997d4dp-5, + -0x1.6b3334p-5 + }, + { // Entry 283 + 0x1.9c737ecdb90a7c4f9d8682bc2815635bp-5, + 0x1.9ccccep-5 + }, + { // Entry 284 + -0x1.9c737ecdb90a7c4f9d8682bc2815635bp-5, + -0x1.9ccccep-5 + }, + { // Entry 285 + 0x1.cde8ebf5a33a269c5529c53e853ce492p-5, + 0x1.ce6666p-5 + }, + { // Entry 286 + -0x1.cde8ebf5a33a269c5529c53e853ce492p-5, + -0x1.ce6666p-5 + }, + { // Entry 287 + 0x1.3359bcc32e58c6de203f8b6c19fa5ff9p-1, + 0x1.5e7fc4p-1 + }, + { // Entry 288 + -0x1.3359bcc32e58c6de203f8b6c19fa5ff9p-1, + -0x1.5e7fc4p-1 + }, + { // Entry 289 + 0x1.d5ca705d09beeec558a5b8db2d657192p-1, + 0x1.4e7fc4p0 + }, + { // Entry 290 + -0x1.d5ca705d09beeec558a5b8db2d657192p-1, + -0x1.4e7fc4p0 + }, + { // Entry 291 + 0x1.17ac440d8febeb7a1d19a5ae8faa7d7ep0, + 0x1.edbfa6p0 + }, + { // Entry 292 + -0x1.17ac440d8febeb7a1d19a5ae8faa7d7ep0, + -0x1.edbfa6p0 + }, + { // Entry 293 + 0x1.3279e84703fc9c8f702a678693102c47p0, + 0x1.467fc4p1 + }, + { // Entry 294 + -0x1.3279e84703fc9c8f702a678693102c47p0, + -0x1.467fc4p1 + }, + { // Entry 295 + 0x1.43f64467a5781271582ce61ccc6b0199p0, + 0x1.961fb4p1 + }, + { // Entry 296 + -0x1.43f64467a5781271582ce61ccc6b0199p0, + -0x1.961fb4p1 + }, + { // Entry 297 + 0x1.502a1cf082c199f85892b1763efa6c61p0, + 0x1.e5bfa4p1 + }, + { // Entry 298 + -0x1.502a1cf082c199f85892b1763efa6c61p0, + -0x1.e5bfa4p1 + }, + { // Entry 299 + 0x1.592066563d61378c65a8ef7d091bdc95p0, + 0x1.1aafcap2 + }, + { // Entry 300 + -0x1.592066563d61378c65a8ef7d091bdc95p0, + -0x1.1aafcap2 + }, + { // Entry 301 + 0x1.5ff8e21f712f9ee4424bbc711e1ef6f3p0, + 0x1.427fc2p2 + }, + { // Entry 302 + -0x1.5ff8e21f712f9ee4424bbc711e1ef6f3p0, + -0x1.427fc2p2 + }, + { // Entry 303 + 0x1.655d64f377c9e58e727f460133ed97a3p0, + 0x1.6a4fbap2 + }, + { // Entry 304 + -0x1.655d64f377c9e58e727f460133ed97a3p0, + -0x1.6a4fbap2 + }, + { // Entry 305 + 0x1.65711d6dd7ca878481fcb2ec4f9f9341p0, + 0x1.6af2f0p2 + }, + { // Entry 306 + -0x1.65711d6dd7ca878481fcb2ec4f9f9341p0, + -0x1.6af2f0p2 + }, + { // Entry 307 + 0x1.602a2a92bb3778489bbc165a7d25fb68p0, + 0x1.43c62ap2 + }, + { // Entry 308 + -0x1.602a2a92bb3778489bbc165a7d25fb68p0, + -0x1.43c62ap2 + }, + { // Entry 309 + 0x1.597f46a19f06d53bf1df42bfaedc5c4dp0, + 0x1.1c9964p2 + }, + { // Entry 310 + -0x1.597f46a19f06d53bf1df42bfaedc5c4dp0, + -0x1.1c9964p2 + }, + { // Entry 311 + 0x1.50d201d4d8188bc950ce239cd4991bb9p0, + 0x1.ead93cp1 + }, + { // Entry 312 + -0x1.50d201d4d8188bc950ce239cd4991bb9p0, + -0x1.ead93cp1 + }, + { // Entry 313 + 0x1.45190b163719c828307d6a3d0cf0b54cp0, + 0x1.9c7fb0p1 + }, + { // Entry 314 + -0x1.45190b163719c828307d6a3d0cf0b54cp0, + -0x1.9c7fb0p1 + }, + { // Entry 315 + 0x1.34794bb84d2baa02953a0a72b717f0ebp0, + 0x1.4e2624p1 + }, + { // Entry 316 + -0x1.34794bb84d2baa02953a0a72b717f0ebp0, + -0x1.4e2624p1 + }, + { // Entry 317 + 0x1.1b59864724a10efac8597e77461bc3f1p0, + 0x1.ff9932p0 + }, + { // Entry 318 + -0x1.1b59864724a10efac8597e77461bc3f1p0, + -0x1.ff9932p0 + }, + { // Entry 319 + 0x1.e44c89086d1aecac1cbe2b3941c67a0fp-1, + 0x1.62e61cp0 + }, + { // Entry 320 + -0x1.e44c89086d1aecac1cbe2b3941c67a0fp-1, + -0x1.62e61cp0 + }, + { // Entry 321 + 0x1.5150f28aee7aa819cb475b4a85ae7569p-1, + 0x1.8c662cp-1 + }, + { // Entry 322 + -0x1.5150f28aee7aa819cb475b4a85ae7569p-1, + -0x1.8c662cp-1 + }, + { // Entry 323 + -0x1.073ea11368f7a47972c7a90fc77e3c33p0, + -0x1.a8aa1cp0 + }, + { // Entry 324 + 0x1.073ea11368f7a47972c7a90fc77e3c33p0, + 0x1.a8aa1cp0 + }, + { // Entry 325 + -0x1.021548e71bb3457d648c1924de4f5d65p0, + -0x1.95ec8ap0 + }, + { // Entry 326 + 0x1.021548e71bb3457d648c1924de4f5d65p0, + 0x1.95ec8ap0 + }, + { // Entry 327 + -0x1.f92364ca1fa2dabc63ba7f6e8a68d3f6p-1, + -0x1.832ef8p0 + }, + { // Entry 328 + 0x1.f92364ca1fa2dabc63ba7f6e8a68d3f6p-1, + 0x1.832ef8p0 + }, + { // Entry 329 + -0x1.ed577ea7517c28cbc891c018438dac11p-1, + -0x1.707166p0 + }, + { // Entry 330 + 0x1.ed577ea7517c28cbc891c018438dac11p-1, + 0x1.707166p0 + }, + { // Entry 331 + -0x1.e0b5226ef36d67e005a0eb9cfdb9b51ap-1, + -0x1.5db3d4p0 + }, + { // Entry 332 + 0x1.e0b5226ef36d67e005a0eb9cfdb9b51ap-1, + 0x1.5db3d4p0 + }, + { // Entry 333 + -0x1.d3290427f1d17e30a6993fbe96cc1fdfp-1, + -0x1.4af642p0 + }, + { // Entry 334 + 0x1.d3290427f1d17e30a6993fbe96cc1fdfp-1, + 0x1.4af642p0 + }, + { // Entry 335 + -0x1.c49e4505cff7e9f58be9c60ef08b794dp-1, + -0x1.3838b0p0 + }, + { // Entry 336 + 0x1.c49e4505cff7e9f58be9c60ef08b794dp-1, + 0x1.3838b0p0 + }, + { // Entry 337 + -0x1.b4fe80019a190ceb39c7cce2f0847082p-1, + -0x1.257b1ep0 + }, + { // Entry 338 + 0x1.b4fe80019a190ceb39c7cce2f0847082p-1, + 0x1.257b1ep0 + }, + { // Entry 339 + -0x1.a431f41e221ee2993e28481f34f7c822p-1, + -0x1.12bd92p0 + }, + { // Entry 340 + 0x1.a431f41e221ee2993e28481f34f7c822p-1, + 0x1.12bd92p0 + }, + { // Entry 341 + -0x1.8712787339dc1bb28aacdbb75d0eda49p-1, + -0x1.ea5c3ep-1 + }, + { // Entry 342 + 0x1.8712787339dc1bb28aacdbb75d0eda49p-1, + 0x1.ea5c3ep-1 + }, + { // Entry 343 + -0x1.7b8b3af8b9278dd5c80bf4f386dc5503p-1, + -0x1.d4b87cp-1 + }, + { // Entry 344 + 0x1.7b8b3af8b9278dd5c80bf4f386dc5503p-1, + 0x1.d4b87cp-1 + }, + { // Entry 345 + -0x1.6f851d6a4f403a71ef874dcc9ed9d59ap-1, + -0x1.bf14bap-1 + }, + { // Entry 346 + 0x1.6f851d6a4f403a71ef874dcc9ed9d59ap-1, + 0x1.bf14bap-1 + }, + { // Entry 347 + -0x1.62fb625437af22ec34ce96b17c5ac9ecp-1, + -0x1.a970f8p-1 + }, + { // Entry 348 + 0x1.62fb625437af22ec34ce96b17c5ac9ecp-1, + 0x1.a970f8p-1 + }, + { // Entry 349 + -0x1.55e98421ee9465b922d19e78004b9e96p-1, + -0x1.93cd36p-1 + }, + { // Entry 350 + 0x1.55e98421ee9465b922d19e78004b9e96p-1, + 0x1.93cd36p-1 + }, + { // Entry 351 + -0x1.484b4edaf8871846261a76bd33d9f049p-1, + -0x1.7e2974p-1 + }, + { // Entry 352 + 0x1.484b4edaf8871846261a76bd33d9f049p-1, + 0x1.7e2974p-1 + }, + { // Entry 353 + -0x1.3a1cfde1e590471ac2ff5eefe745a249p-1, + -0x1.6885b2p-1 + }, + { // Entry 354 + 0x1.3a1cfde1e590471ac2ff5eefe745a249p-1, + 0x1.6885b2p-1 + }, + { // Entry 355 + -0x1.2b5b5dbe8467930df24be6b9046ddfaep-1, + -0x1.52e1f0p-1 + }, + { // Entry 356 + 0x1.2b5b5dbe8467930df24be6b9046ddfaep-1, + 0x1.52e1f0p-1 + }, + { // Entry 357 + -0x1.1c03f7900131c7cb3fbfbb5e6c5115eap-1, + -0x1.3d3e36p-1 + }, + { // Entry 358 + 0x1.1c03f7900131c7cb3fbfbb5e6c5115eap-1, + 0x1.3d3e36p-1 + }, + { // Entry 359 + -0x1.eab7b26f955752e78c062cb6087064d9p-2, + -0x1.0a0b02p-1 + }, + { // Entry 360 + 0x1.eab7b26f955752e78c062cb6087064d9p-2, + 0x1.0a0b02p-1 + }, + { // Entry 361 + -0x1.bb12f2d65df13ff36b74e12066022236p-2, + -0x1.d8f720p-2 + }, + { // Entry 362 + 0x1.bb12f2d65df13ff36b74e12066022236p-2, + 0x1.d8f720p-2 + }, + { // Entry 363 + -0x1.894ae05fefe6ee1164c3e769b2b1a84ep-2, + -0x1.9dd83cp-2 + }, + { // Entry 364 + 0x1.894ae05fefe6ee1164c3e769b2b1a84ep-2, + 0x1.9dd83cp-2 + }, + { // Entry 365 + -0x1.5579fd644a1a2d96faf5bb8844656d0cp-2, + -0x1.62b958p-2 + }, + { // Entry 366 + 0x1.5579fd644a1a2d96faf5bb8844656d0cp-2, + 0x1.62b958p-2 + }, + { // Entry 367 + -0x1.1fc79ca9ca92823d01375328ac472eedp-2, + -0x1.279a74p-2 + }, + { // Entry 368 + 0x1.1fc79ca9ca92823d01375328ac472eedp-2, + 0x1.279a74p-2 + }, + { // Entry 369 + -0x1.d0d0f7d861c753c31fa29e74145dc127p-3, + -0x1.d8f720p-3 + }, + { // Entry 370 + 0x1.d0d0f7d861c753c31fa29e74145dc127p-3, + 0x1.d8f720p-3 + }, + { // Entry 371 + -0x1.5f3d40f500501f80bba7a781b1619b85p-3, + -0x1.62b958p-3 + }, + { // Entry 372 + 0x1.5f3d40f500501f80bba7a781b1619b85p-3, + 0x1.62b958p-3 + }, + { // Entry 373 + -0x1.d6e1429159f6f0290cf9f2fb24bc26bdp-4, + -0x1.d8f720p-4 + }, + { // Entry 374 + 0x1.d6e1429159f6f0290cf9f2fb24bc26bdp-4, + 0x1.d8f720p-4 + }, + { // Entry 375 + -0x1.d870dc6f0c1b3da66fb282eb78c47134p-5, + -0x1.d8f720p-5 + }, + { // Entry 376 + 0x1.d870dc6f0c1b3da66fb282eb78c47134p-5, + 0x1.d8f720p-5 + }, + { // Entry 377 + 0x1.d870dc6f0c1b3da66fb282eb78c47134p-5, + 0x1.d8f720p-5 + }, + { // Entry 378 + -0x1.d870dc6f0c1b3da66fb282eb78c47134p-5, + -0x1.d8f720p-5 + }, + { // Entry 379 + 0x1.d6e1429159f6f0290cf9f2fb24bc26bdp-4, + 0x1.d8f720p-4 + }, + { // Entry 380 + -0x1.d6e1429159f6f0290cf9f2fb24bc26bdp-4, + -0x1.d8f720p-4 + }, + { // Entry 381 + 0x1.5f3d40f500501f80bba7a781b1619b85p-3, + 0x1.62b958p-3 + }, + { // Entry 382 + -0x1.5f3d40f500501f80bba7a781b1619b85p-3, + -0x1.62b958p-3 + }, + { // Entry 383 + 0x1.d0d0f7d861c753c31fa29e74145dc127p-3, + 0x1.d8f720p-3 + }, + { // Entry 384 + -0x1.d0d0f7d861c753c31fa29e74145dc127p-3, + -0x1.d8f720p-3 + }, + { // Entry 385 + 0x1.1fc79ca9ca92823d01375328ac472eedp-2, + 0x1.279a74p-2 + }, + { // Entry 386 + -0x1.1fc79ca9ca92823d01375328ac472eedp-2, + -0x1.279a74p-2 + }, + { // Entry 387 + 0x1.5579fd644a1a2d96faf5bb8844656d0cp-2, + 0x1.62b958p-2 + }, + { // Entry 388 + -0x1.5579fd644a1a2d96faf5bb8844656d0cp-2, + -0x1.62b958p-2 + }, + { // Entry 389 + 0x1.894ae05fefe6ee1164c3e769b2b1a84ep-2, + 0x1.9dd83cp-2 + }, + { // Entry 390 + -0x1.894ae05fefe6ee1164c3e769b2b1a84ep-2, + -0x1.9dd83cp-2 + }, + { // Entry 391 + 0x1.bb12f2d65df13ff36b74e12066022236p-2, + 0x1.d8f720p-2 + }, + { // Entry 392 + -0x1.bb12f2d65df13ff36b74e12066022236p-2, + -0x1.d8f720p-2 + }, + { // Entry 393 + 0x1.eab7b26f955752e78c062cb6087064d9p-2, + 0x1.0a0b02p-1 + }, + { // Entry 394 + -0x1.eab7b26f955752e78c062cb6087064d9p-2, + -0x1.0a0b02p-1 + }, + { // Entry 395 + 0x1.1c03f7900131c7cb3fbfbb5e6c5115eap-1, + 0x1.3d3e36p-1 + }, + { // Entry 396 + -0x1.1c03f7900131c7cb3fbfbb5e6c5115eap-1, + -0x1.3d3e36p-1 + }, + { // Entry 397 + 0x1.2b5b634ea20bdc86ee2a005916e6440ap-1, + 0x1.52e1f8p-1 + }, + { // Entry 398 + -0x1.2b5b634ea20bdc86ee2a005916e6440ap-1, + -0x1.52e1f8p-1 + }, + { // Entry 399 + 0x1.3a1d033b0b8af99ba311a5b2b61923fdp-1, + 0x1.6885bap-1 + }, + { // Entry 400 + -0x1.3a1d033b0b8af99ba311a5b2b61923fdp-1, + -0x1.6885bap-1 + }, + { // Entry 401 + 0x1.484b53fe3670095a8de580bd37b09834p-1, + 0x1.7e297cp-1 + }, + { // Entry 402 + -0x1.484b53fe3670095a8de580bd37b09834p-1, + -0x1.7e297cp-1 + }, + { // Entry 403 + 0x1.55e989109067d04fb47f38831112284ep-1, + 0x1.93cd3ep-1 + }, + { // Entry 404 + -0x1.55e989109067d04fb47f38831112284ep-1, + -0x1.93cd3ep-1 + }, + { // Entry 405 + 0x1.62fb670fb893cf191d38ab2f1067b2dep-1, + 0x1.a971p-1 + }, + { // Entry 406 + -0x1.62fb670fb893cf191d38ab2f1067b2dep-1, + -0x1.a971p-1 + }, + { // Entry 407 + 0x1.6f8521f44dc815420fa612edb64cbde6p-1, + 0x1.bf14c2p-1 + }, + { // Entry 408 + -0x1.6f8521f44dc815420fa612edb64cbde6p-1, + -0x1.bf14c2p-1 + }, + { // Entry 409 + 0x1.7b8b3f52ed1004e7b2fde26964f1ce72p-1, + 0x1.d4b884p-1 + }, + { // Entry 410 + -0x1.7b8b3f52ed1004e7b2fde26964f1ce72p-1, + -0x1.d4b884p-1 + }, + { // Entry 411 + 0x1.8712787339dc1bb28aacdbb75d0eda49p-1, + 0x1.ea5c3ep-1 + }, + { // Entry 412 + -0x1.8712787339dc1bb28aacdbb75d0eda49p-1, + -0x1.ea5c3ep-1 + }, + { // Entry 413 + 0x1.a431f41e221ee2993e28481f34f7c822p-1, + 0x1.12bd92p0 + }, + { // Entry 414 + -0x1.a431f41e221ee2993e28481f34f7c822p-1, + -0x1.12bd92p0 + }, + { // Entry 415 + 0x1.b4fe853106c1ee9ed92061a86abea8fbp-1, + 0x1.257b24p0 + }, + { // Entry 416 + -0x1.b4fe853106c1ee9ed92061a86abea8fbp-1, + -0x1.257b24p0 + }, + { // Entry 417 + 0x1.c49e49d8ce799df605c0c3754f12c804p-1, + 0x1.3838b6p0 + }, + { // Entry 418 + -0x1.c49e49d8ce799df605c0c3754f12c804p-1, + -0x1.3838b6p0 + }, + { // Entry 419 + 0x1.d32908a5e902e2f9d1bdd644edec4fecp-1, + 0x1.4af648p0 + }, + { // Entry 420 + -0x1.d32908a5e902e2f9d1bdd644edec4fecp-1, + -0x1.4af648p0 + }, + { // Entry 421 + 0x1.e0b5269ed18eb6e8f1b485483f950e69p-1, + 0x1.5db3dap0 + }, + { // Entry 422 + -0x1.e0b5269ed18eb6e8f1b485483f950e69p-1, + -0x1.5db3dap0 + }, + { // Entry 423 + 0x1.ed57828f84cacdec44b29eaeb9138ae7p-1, + 0x1.70716cp0 + }, + { // Entry 424 + -0x1.ed57828f84cacdec44b29eaeb9138ae7p-1, + -0x1.70716cp0 + }, + { // Entry 425 + 0x1.f9236870954c3910ae46db78e8dab4a1p-1, + 0x1.832efep0 + }, + { // Entry 426 + -0x1.f9236870954c3910ae46db78e8dab4a1p-1, + -0x1.832efep0 + }, + { // Entry 427 + 0x1.02154a9c2f5c8c14720789b394a8d71ep0, + 0x1.95ec90p0 + }, + { // Entry 428 + -0x1.02154a9c2f5c8c14720789b394a8d71ep0, + -0x1.95ec90p0 + }, + { // Entry 429 + 0x1.073ea11368f7a47972c7a90fc77e3c33p0, + 0x1.a8aa1cp0 + }, + { // Entry 430 + -0x1.073ea11368f7a47972c7a90fc77e3c33p0, + -0x1.a8aa1cp0 + }, + { // Entry 431 + 0x1.96c4c21383607ec90510b32aa175fe13p-1, + 0x1.04aff8p0 + }, + { // Entry 432 + -0x1.96c4c21383607ec90510b32aa175fe13p-1, + -0x1.04aff8p0 + }, + { // Entry 433 + 0x1.96c5670707d079f967bde56724a1508cp-1, + 0x1.04b0a0p0 + }, + { // Entry 434 + -0x1.96c5670707d079f967bde56724a1508cp-1, + -0x1.04b0a0p0 + }, + { // Entry 435 + 0x1.96c60bfa20055aa638999dba9d5b9ba4p-1, + 0x1.04b148p0 + }, + { // Entry 436 + -0x1.96c60bfa20055aa638999dba9d5b9ba4p-1, + -0x1.04b148p0 + }, + { // Entry 437 + 0x1.96c6b0eccbff69175eae7d730f2d63c8p-1, + 0x1.04b1f0p0 + }, + { // Entry 438 + -0x1.96c6b0eccbff69175eae7d730f2d63c8p-1, + -0x1.04b1f0p0 + }, + { // Entry 439 + 0x1.96c755df0bbeed94bc0a76fe6f6efe03p-1, + 0x1.04b298p0 + }, + { // Entry 440 + -0x1.96c755df0bbeed94bc0a76fe6f6efe03p-1, + -0x1.04b298p0 + }, + { // Entry 441 + 0x1.96c7fad0df4430662dbe23a125fdf4dcp-1, + 0x1.04b340p0 + }, + { // Entry 442 + -0x1.96c7fad0df4430662dbe23a125fdf4dcp-1, + -0x1.04b340p0 + }, + { // Entry 443 + 0x1.96c89fc2468f79d38bdc192ed1b15eadp-1, + 0x1.04b3e8p0 + }, + { // Entry 444 + -0x1.96c89fc2468f79d38bdc192ed1b15eadp-1, + -0x1.04b3e8p0 + }, + { // Entry 445 + 0x1.96c944b341a11224a9783fc55088730ap-1, + 0x1.04b490p0 + }, + { // Entry 446 + -0x1.96c944b341a11224a9783fc55088730ap-1, + -0x1.04b490p0 + }, + { // Entry 447 + 0x1.96c9e5b678ff391c2d3fa2849c0a25d4p-1, + 0x1.04b534p0 + }, + { // Entry 448 + -0x1.96c9e5b678ff391c2d3fa2849c0a25d4p-1, + -0x1.04b534p0 + }, + { // Entry 449 + -0.0f, + -0x1.p-149 + }, + { // Entry 450 + 0.0f, + 0x1.p-149 + }, + { // Entry 451 + 0.0, + 0.0 + }, + { // Entry 452 + 0.0f, + 0x1.p-149 + }, + { // Entry 453 + -0.0f, + -0x1.p-149 + }, + { // Entry 454 + 0x1.0c1521c014d01f8a9ddecc36f1430940p-1, + 0x1.279a72p-1 + }, + { // Entry 455 + -0x1.0c1521c014d01f8a9ddecc36f1430940p-1, + -0x1.279a72p-1 + }, + { // Entry 456 + 0x1.0c15234014d0ffa236d9926a680fd817p-1, + 0x1.279a74p-1 + }, + { // Entry 457 + -0x1.0c15234014d0ffa236d9926a680fd817p-1, + -0x1.279a74p-1 + }, + { // Entry 458 + 0x1.0c1524c014d0932c0cf0350674c305cap-1, + 0x1.279a76p-1 + }, + { // Entry 459 + -0x1.0c1524c014d0932c0cf0350674c305cap-1, + -0x1.279a76p-1 + }, + { // Entry 460 + 0x1.0c1522e17602fe431351c1c08ae51ff7p0, + 0x1.bb67acp0 + }, + { // Entry 461 + -0x1.0c1522e17602fe431351c1c08ae51ff7p0, + -0x1.bb67acp0 + }, + { // Entry 462 + 0x1.0c1523617603a6edb72557e634b4b8e0p0, + 0x1.bb67aep0 + }, + { // Entry 463 + -0x1.0c1523617603a6edb72557e634b4b8e0p0, + -0x1.bb67aep0 + }, + { // Entry 464 + 0x1.0c1523e1760371e48330a6db47968a93p0, + 0x1.bb67b0p0 + }, + { // Entry 465 + -0x1.0c1523e1760371e48330a6db47968a93p0, + -0x1.bb67b0p0 + }, + { // Entry 466 + 0x1.a64eea8f03b7833c1b78f9cef282cf0fp-2, + 0x1.bffffep-2 + }, + { // Entry 467 + -0x1.a64eea8f03b7833c1b78f9cef282cf0fp-2, + -0x1.bffffep-2 + }, + { // Entry 468 + 0x1.a64eec3cc23fcb6c84f92bd2003ce26cp-2, + 0x1.c0p-2 + }, + { // Entry 469 + -0x1.a64eec3cc23fcb6c84f92bd2003ce26cp-2, + -0x1.c0p-2 + }, + { // Entry 470 + 0x1.a64eedea80c775ce2723b37d5f27788dp-2, + 0x1.c00002p-2 + }, + { // Entry 471 + -0x1.a64eedea80c775ce2723b37d5f27788dp-2, + -0x1.c00002p-2 + }, + { // Entry 472 + 0x1.345f007137aead7202d87adc5e70e53ep-1, + 0x1.5ffffep-1 + }, + { // Entry 473 + -0x1.345f007137aead7202d87adc5e70e53ep-1, + -0x1.5ffffep-1 + }, + { // Entry 474 + 0x1.345f01cce37bb440844df1c4409fe779p-1, + 0x1.60p-1 + }, + { // Entry 475 + -0x1.345f01cce37bb440844df1c4409fe779p-1, + -0x1.60p-1 + }, + { // Entry 476 + 0x1.345f03288f477671552f403f77363c6ep-1, + 0x1.600002p-1 + }, + { // Entry 477 + -0x1.345f03288f477671552f403f77363c6ep-1, + -0x1.600002p-1 + }, + { // Entry 478 + 0x1.bde70d2b5b9861800016d24f37e1f182p-1, + 0x1.2ffffep0 + }, + { // Entry 479 + -0x1.bde70d2b5b9861800016d24f37e1f182p-1, + -0x1.2ffffep0 + }, + { // Entry 480 + 0x1.bde70ed439fe6cba95391a7f421b3821p-1, + 0x1.30p0 + }, + { // Entry 481 + -0x1.bde70ed439fe6cba95391a7f421b3821p-1, + -0x1.30p0 + }, + { // Entry 482 + 0x1.bde7107d1861329d77f85e21c5cf991dp-1, + 0x1.300002p0 + }, + { // Entry 483 + -0x1.bde7107d1861329d77f85e21c5cf991dp-1, + -0x1.300002p0 + }, + { // Entry 484 + 0x1.2e7571f4ae6251e5ddb771325105495ep0, + 0x1.37fffep1 + }, + { // Entry 485 + -0x1.2e7571f4ae6251e5ddb771325105495ep0, + -0x1.37fffep1 + }, + { // Entry 486 + 0x1.2e75728833a54116e3ef7326bd9839p0, + 0x1.38p1 + }, + { // Entry 487 + -0x1.2e75728833a54116e3ef7326bd9839p0, + -0x1.38p1 + }, + { // Entry 488 + 0x1.2e75731bb8e691dca788c02332d288f0p0, + 0x1.380002p1 + }, + { // Entry 489 + -0x1.2e75731bb8e691dca788c02332d288f0p0, + -0x1.380002p1 + }, + { // Entry 490 + 0x1.0640a805eb5ac8d45f6e626469cfd37cp-4, + 0x1.069c8cp-4 + }, + { // Entry 491 + -0x1.0640a805eb5ac8d45f6e626469cfd37cp-4, + -0x1.069c8cp-4 + }, + { // Entry 492 + 0x1.052fabecdb3192006601da57b9f185bbp-3, + 0x1.069c8cp-3 + }, + { // Entry 493 + -0x1.052fabecdb3192006601da57b9f185bbp-3, + -0x1.069c8cp-3 + }, + { // Entry 494 + 0x1.852a2293776e3c2cf4b7a237dfbcac9cp-3, + 0x1.89ead2p-3 + }, + { // Entry 495 + -0x1.852a2293776e3c2cf4b7a237dfbcac9cp-3, + -0x1.89ead2p-3 + }, + { // Entry 496 + 0x1.01123c6ee78df9fddeaeaac0f651fffdp-2, + 0x1.069c8cp-2 + }, + { // Entry 497 + -0x1.01123c6ee78df9fddeaeaac0f651fffdp-2, + -0x1.069c8cp-2 + }, + { // Entry 498 + 0x1.3daa74f913ef98bebdaf6ff5fe9ed93ep-2, + 0x1.4843b0p-2 + }, + { // Entry 499 + -0x1.3daa74f913ef98bebdaf6ff5fe9ed93ep-2, + -0x1.4843b0p-2 + }, + { // Entry 500 + 0x1.780c486991daa5d72fdda5ce57d44289p-2, + 0x1.89ead4p-2 + }, + { // Entry 501 + -0x1.780c486991daa5d72fdda5ce57d44289p-2, + -0x1.89ead4p-2 + }, + { // Entry 502 + 0x1.affab023fe5819ab1f4cad60051a8345p-2, + 0x1.cb91f8p-2 + }, + { // Entry 503 + -0x1.affab023fe5819ab1f4cad60051a8345p-2, + -0x1.cb91f8p-2 + }, + { // Entry 504 + 0x1.e54c83edcc5caaa7a074644b3d2183a2p-2, + 0x1.069c8ep-1 + }, + { // Entry 505 + -0x1.e54c83edcc5caaa7a074644b3d2183a2p-2, + -0x1.069c8ep-1 + }, + { // Entry 506 + 0x1.0bf5631d21b59bea6037065bd184c7fdp-1, + 0x1.277020p-1 + }, + { // Entry 507 + -0x1.0bf5631d21b59bea6037065bd184c7fdp-1, + -0x1.277020p-1 + }, + { // Entry 508 + 0x1.23e71a9565cd2e40ee391514bdb4e6d5p-1, + 0x1.4843b2p-1 + }, + { // Entry 509 + -0x1.23e71a9565cd2e40ee391514bdb4e6d5p-1, + -0x1.4843b2p-1 + }, + { // Entry 510 + 0x1.3a7e42481b7080ceeca06ac375e2af5bp-1, + 0x1.691744p-1 + }, + { // Entry 511 + -0x1.3a7e42481b7080ceeca06ac375e2af5bp-1, + -0x1.691744p-1 + }, + { // Entry 512 + 0x1.4fc2c891491b52874ce2931f24e4b619p-1, + 0x1.89ead6p-1 + }, + { // Entry 513 + -0x1.4fc2c891491b52874ce2931f24e4b619p-1, + -0x1.89ead6p-1 + }, + { // Entry 514 + 0x1.63c0625215a8fafdacb65eebcc76d090p-1, + 0x1.aabe68p-1 + }, + { // Entry 515 + -0x1.63c0625215a8fafdacb65eebcc76d090p-1, + -0x1.aabe68p-1 + }, + { // Entry 516 + 0x1.768565c528c1c7512181ef021a9befe5p-1, + 0x1.cb91fap-1 + }, + { // Entry 517 + -0x1.768565c528c1c7512181ef021a9befe5p-1, + -0x1.cb91fap-1 + }, + { // Entry 518 + 0x1.8821d517853a9293101e345ad74f6492p-1, + 0x1.ec658cp-1 + }, + { // Entry 519 + -0x1.8821d517853a9293101e345ad74f6492p-1, + -0x1.ec658cp-1 + }, + { // Entry 520 + 0x1.98a6983a1f69e2ba7830d45b9caa2847p-1, + 0x1.069c8ep0 + }, + { // Entry 521 + -0x1.98a6983a1f69e2ba7830d45b9caa2847p-1, + -0x1.069c8ep0 + }, + { // Entry 522 + 0x1.a824e7446479e89c28c3c93afc5c60a3p-1, + 0x1.170656p0 + }, + { // Entry 523 + -0x1.a824e7446479e89c28c3c93afc5c60a3p-1, + -0x1.170656p0 + }, + { // Entry 524 + 0x1.b6add56905c11877985184b1ee5d353ap-1, + 0x1.27701ep0 + }, + { // Entry 525 + -0x1.b6add56905c11877985184b1ee5d353ap-1, + -0x1.27701ep0 + }, + { // Entry 526 + 0x1.c4520084d880847dda367ba8b7a8b21dp-1, + 0x1.37d9e6p0 + }, + { // Entry 527 + -0x1.c4520084d880847dda367ba8b7a8b21dp-1, + -0x1.37d9e6p0 + }, + { // Entry 528 + 0x1.d121598ed50fface6324aa1c21a74d23p-1, + 0x1.4843aep0 + }, + { // Entry 529 + -0x1.d121598ed50fface6324aa1c21a74d23p-1, + -0x1.4843aep0 + }, + { // Entry 530 + 0x1.dd2b014fde35d165c474a1122825802dp-1, + 0x1.58ad76p0 + }, + { // Entry 531 + -0x1.dd2b014fde35d165c474a1122825802dp-1, + -0x1.58ad76p0 + }, + { // Entry 532 + 0x1.e87d3481ac8dd5621a3b3c4f921c44fap-1, + 0x1.69173ep0 + }, + { // Entry 533 + -0x1.e87d3481ac8dd5621a3b3c4f921c44fap-1, + -0x1.69173ep0 + }, + { // Entry 534 + 0x1.f32543520ef9c5f5810f6db85d7aaf28p-1, + 0x1.798106p0 + }, + { // Entry 535 + -0x1.f32543520ef9c5f5810f6db85d7aaf28p-1, + -0x1.798106p0 + }, + { // Entry 536 + 0x1.fd2f9116e59cee8a040e62d4b5243e1ap-1, + 0x1.89eacep0 + }, + { // Entry 537 + -0x1.fd2f9116e59cee8a040e62d4b5243e1ap-1, + -0x1.89eacep0 + }, + { // Entry 538 + 0x1.0353ccda2d644d7938c482410bb91bb1p0, + 0x1.9a5496p0 + }, + { // Entry 539 + -0x1.0353ccda2d644d7938c482410bb91bb1p0, + -0x1.9a5496p0 + }, + { // Entry 540 + 0x1.07cbfd6728be1d728e6efaa566962a31p0, + 0x1.aabe5ep0 + }, + { // Entry 541 + -0x1.07cbfd6728be1d728e6efaa566962a31p0, + -0x1.aabe5ep0 + }, + { // Entry 542 + 0x1.0c053fac5615bd33ea669091fc7a90bcp0, + 0x1.bb2826p0 + }, + { // Entry 543 + -0x1.0c053fac5615bd33ea669091fc7a90bcp0, + -0x1.bb2826p0 + }, + { // Entry 544 + 0x1.1004163d82000593e7df6bce3d8cab10p0, + 0x1.cb91eep0 + }, + { // Entry 545 + -0x1.1004163d82000593e7df6bce3d8cab10p0, + -0x1.cb91eep0 + }, + { // Entry 546 + 0x1.13cca783c7bd2088b900b4113ba87852p0, + 0x1.dbfbb6p0 + }, + { // Entry 547 + -0x1.13cca783c7bd2088b900b4113ba87852p0, + -0x1.dbfbb6p0 + }, + { // Entry 548 + 0x1.1762c47f210f545ac9a8a7e0241e7259p0, + 0x1.ec657ep0 + }, + { // Entry 549 + -0x1.1762c47f210f545ac9a8a7e0241e7259p0, + -0x1.ec657ep0 + }, + { // Entry 550 + 0x1.1ac9ef601c2f97f7b0f0a6d93dd834eep0, + 0x1.fccf46p0 + }, + { // Entry 551 + -0x1.1ac9ef601c2f97f7b0f0a6d93dd834eep0, + -0x1.fccf46p0 + }, + { // Entry 552 + 0x1.1e05623dfb4cc3c6baa62e4bc279a9a4p0, + 0x1.069c88p1 + }, + { // Entry 553 + -0x1.1e05623dfb4cc3c6baa62e4bc279a9a4p0, + -0x1.069c88p1 + }, + { // Entry 554 + 0x1.21181384588be60732d01848bc71700bp0, + 0x1.0ed16cp1 + }, + { // Entry 555 + -0x1.21181384588be60732d01848bc71700bp0, + -0x1.0ed16cp1 + }, + { // Entry 556 + 0x1.2404bde8e2552de3cc50334d78b5dc4ap0, + 0x1.170650p1 + }, + { // Entry 557 + -0x1.2404bde8e2552de3cc50334d78b5dc4ap0, + -0x1.170650p1 + }, + { // Entry 558 + 0x1.26cde4061c757738e2ce7f21522b89dap0, + 0x1.1f3b34p1 + }, + { // Entry 559 + -0x1.26cde4061c757738e2ce7f21522b89dap0, + -0x1.1f3b34p1 + }, + { // Entry 560 + 0x1.2975d58f5e9bdfe1899ef21d99c49b2bp0, + 0x1.277018p1 + }, + { // Entry 561 + -0x1.2975d58f5e9bdfe1899ef21d99c49b2bp0, + -0x1.277018p1 + }, + { // Entry 562 + 0x1.2bfeb3b9bbea83cde56fbf951e871487p0, + 0x1.2fa4fcp1 + }, + { // Entry 563 + -0x1.2bfeb3b9bbea83cde56fbf951e871487p0, + -0x1.2fa4fcp1 + }, + { // Entry 564 + 0x1.2e6a7545ba88692a48d56e5581873211p0, + 0x1.37d9e0p1 + }, + { // Entry 565 + -0x1.2e6a7545ba88692a48d56e5581873211p0, + -0x1.37d9e0p1 + }, + { // Entry 566 + 0x1.30baea2f60c5a59cc6d2e94130f95768p0, + 0x1.400ec4p1 + }, + { // Entry 567 + -0x1.30baea2f60c5a59cc6d2e94130f95768p0, + -0x1.400ec4p1 + }, + { // Entry 568 + 0x1.32f1bf0aa92c8a65a6948643fdcfd255p0, + 0x1.4843a8p1 + }, + { // Entry 569 + -0x1.32f1bf0aa92c8a65a6948643fdcfd255p0, + -0x1.4843a8p1 + }, + { // Entry 570 + 0x1.35108012a113c05aaab2d146f1393f5cp0, + 0x1.50788cp1 + }, + { // Entry 571 + -0x1.35108012a113c05aaab2d146f1393f5cp0, + -0x1.50788cp1 + }, + { // Entry 572 + 0x1.37189bf16a71201adaf5b8708459828ep0, + 0x1.58ad70p1 + }, + { // Entry 573 + -0x1.37189bf16a71201adaf5b8708459828ep0, + -0x1.58ad70p1 + }, + { // Entry 574 + 0x1.390b6647268e4ff7a7fc9ad3d315ca68p0, + 0x1.60e254p1 + }, + { // Entry 575 + -0x1.390b6647268e4ff7a7fc9ad3d315ca68p0, + -0x1.60e254p1 + }, + { // Entry 576 + 0x1.3aea19f582cfb2fc7f01e690b9e61c32p0, + 0x1.691738p1 + }, + { // Entry 577 + -0x1.3aea19f582cfb2fc7f01e690b9e61c32p0, + -0x1.691738p1 + }, + { // Entry 578 + 0x1.3cb5db3545a9577b9d057ce82dc608c6p0, + 0x1.714c1cp1 + }, + { // Entry 579 + -0x1.3cb5db3545a9577b9d057ce82dc608c6p0, + -0x1.714c1cp1 + }, + { // Entry 580 + 0x1.3e6fb97ad7a66ba04c7b01d1646602e1p0, + 0x1.7981p1 + }, + { // Entry 581 + -0x1.3e6fb97ad7a66ba04c7b01d1646602e1p0, + -0x1.7981p1 + }, + { // Entry 582 + 0x1.4018b12e603d690dfd89144ca355ad7cp0, + 0x1.81b5e4p1 + }, + { // Entry 583 + -0x1.4018b12e603d690dfd89144ca355ad7cp0, + -0x1.81b5e4p1 + }, + { // Entry 584 + 0x1.41b1ad3bab8b579c71ceb89cb23a4191p0, + 0x1.89eac8p1 + }, + { // Entry 585 + -0x1.41b1ad3bab8b579c71ceb89cb23a4191p0, + -0x1.89eac8p1 + }, + { // Entry 586 + -0x1.6807a9ecb61e7179d47b86a3d7d89614p0, + -0x1.81b5eep2 + }, + { // Entry 587 + 0x1.6807a9ecb61e7179d47b86a3d7d89614p0, + 0x1.81b5eep2 + }, + { // Entry 588 + -0x1.6631e1e590c8943bb980827585841401p0, + -0x1.714c26p2 + }, + { // Entry 589 + 0x1.6631e1e590c8943bb980827585841401p0, + 0x1.714c26p2 + }, + { // Entry 590 + -0x1.6431bbdbbb23b05a6294690cc8fe4afbp0, + -0x1.60e25ep2 + }, + { // Entry 591 + 0x1.6431bbdbbb23b05a6294690cc8fe4afbp0, + 0x1.60e25ep2 + }, + { // Entry 592 + -0x1.620149ba05b3abd7c744898b395ff078p0, + -0x1.507896p2 + }, + { // Entry 593 + 0x1.620149ba05b3abd7c744898b395ff078p0, + 0x1.507896p2 + }, + { // Entry 594 + -0x1.5f99784c16ae6ade09784989de90f9cep0, + -0x1.400ecep2 + }, + { // Entry 595 + 0x1.5f99784c16ae6ade09784989de90f9cep0, + 0x1.400ecep2 + }, + { // Entry 596 + -0x1.5cf1c615f954a1c183fa9df874538ee9p0, + -0x1.2fa506p2 + }, + { // Entry 597 + 0x1.5cf1c615f954a1c183fa9df874538ee9p0, + 0x1.2fa506p2 + }, + { // Entry 598 + -0x1.59ffe38b71898ed7998b335085e65964p0, + -0x1.1f3b3ep2 + }, + { // Entry 599 + 0x1.59ffe38b71898ed7998b335085e65964p0, + 0x1.1f3b3ep2 + }, + { // Entry 600 + -0x1.56b7343ee6671bf137c3060d6bbac90bp0, + -0x1.0ed176p2 + }, + { // Entry 601 + 0x1.56b7343ee6671bf137c3060d6bbac90bp0, + 0x1.0ed176p2 + }, + { // Entry 602 + -0x1.530824ba9228f906cf6fbbb114073212p0, + -0x1.fccf5ap1 + }, + { // Entry 603 + 0x1.530824ba9228f906cf6fbbb114073212p0, + 0x1.fccf5ap1 + }, + { // Entry 604 + -0x1.4edf449b38ca3a22476f62c7349bb773p0, + -0x1.dbfbc8p1 + }, + { // Entry 605 + 0x1.4edf449b38ca3a22476f62c7349bb773p0, + 0x1.dbfbc8p1 + }, + { // Entry 606 + -0x1.4a2408f508131a351e75bd65a563180ap0, + -0x1.bb2836p1 + }, + { // Entry 607 + 0x1.4a2408f508131a351e75bd65a563180ap0, + 0x1.bb2836p1 + }, + { // Entry 608 + -0x1.44b712953f85f723e8b9348c9f600a8cp0, + -0x1.9a54a4p1 + }, + { // Entry 609 + 0x1.44b712953f85f723e8b9348c9f600a8cp0, + 0x1.9a54a4p1 + }, + { // Entry 610 + -0x1.3e6fbd3122418ea0ac307a2ed17c0d28p0, + -0x1.798112p1 + }, + { // Entry 611 + 0x1.3e6fbd3122418ea0ac307a2ed17c0d28p0, + 0x1.798112p1 + }, + { // Entry 612 + -0x1.37189fd23f9a7ac18ff4e4c5821e80bfp0, + -0x1.58ad80p1 + }, + { // Entry 613 + 0x1.37189fd23f9a7ac18ff4e4c5821e80bfp0, + 0x1.58ad80p1 + }, + { // Entry 614 + -0x1.2e6a794f37529d7b8c78438094df8560p0, + -0x1.37d9eep1 + }, + { // Entry 615 + 0x1.2e6a794f37529d7b8c78438094df8560p0, + 0x1.37d9eep1 + }, + { // Entry 616 + -0x1.2404c2150e76f6d23e4a514c77839926p0, + -0x1.17065cp1 + }, + { // Entry 617 + 0x1.2404c2150e76f6d23e4a514c77839926p0, + 0x1.17065cp1 + }, + { // Entry 618 + -0x1.1762c92d89f7b516e38b1fadbc7c1725p0, + -0x1.ec6594p0 + }, + { // Entry 619 + 0x1.1762c92d89f7b516e38b1fadbc7c1725p0, + 0x1.ec6594p0 + }, + { // Entry 620 + -0x1.07cc022a998cd36350736775629f7411p0, + -0x1.aabe70p0 + }, + { // Entry 621 + 0x1.07cc022a998cd36350736775629f7411p0, + 0x1.aabe70p0 + }, + { // Entry 622 + -0x1.e87d3ddf5d974d08f4dd58fe2cb62a75p-1, + -0x1.69174cp0 + }, + { // Entry 623 + 0x1.e87d3ddf5d974d08f4dd58fe2cb62a75p-1, + 0x1.69174cp0 + }, + { // Entry 624 + -0x1.b6adddfcb60791bdfa29e43ae237526cp-1, + -0x1.277028p0 + }, + { // Entry 625 + 0x1.b6adddfcb60791bdfa29e43ae237526cp-1, + 0x1.277028p0 + }, + { // Entry 626 + -0x1.76856ea18da195176e0ece2cba9470a9p-1, + -0x1.cb920ap-1 + }, + { // Entry 627 + 0x1.76856ea18da195176e0ece2cba9470a9p-1, + 0x1.cb920ap-1 + }, + { // Entry 628 + -0x1.23e72757057c5809379a3139ba87791dp-1, + -0x1.4843c4p-1 + }, + { // Entry 629 + 0x1.23e72757057c5809379a3139ba87791dp-1, + 0x1.4843c4p-1 + }, + { // Entry 630 + -0x1.780c6b4190a4c02ec686d865d59869c8p-2, + -0x1.89eafcp-2 + }, + { // Entry 631 + 0x1.780c6b4190a4c02ec686d865d59869c8p-2, + 0x1.89eafcp-2 + }, + { // Entry 632 + -0x1.052ffe90feb23c1016d89c3f01bc9e1fp-3, + -0x1.069ce0p-3 + }, + { // Entry 633 + 0x1.052ffe90feb23c1016d89c3f01bc9e1fp-3, + 0x1.069ce0p-3 + }, + { // Entry 634 + 0x1.052f5948b6d5f860bd33815fb4292679p-3, + 0x1.069c38p-3 + }, + { // Entry 635 + -0x1.052f5948b6d5f860bd33815fb4292679p-3, + -0x1.069c38p-3 + }, + { // Entry 636 + 0x1.780c22159221d1976cc58c067c712c12p-2, + 0x1.89eaa8p-2 + }, + { // Entry 637 + -0x1.780c22159221d1976cc58c067c712c12p-2, + -0x1.89eaa8p-2 + }, + { // Entry 638 + 0x1.23e709933aec019daf9a653afa37bd56p-1, + 0x1.48439ap-1 + }, + { // Entry 639 + -0x1.23e709933aec019daf9a653afa37bd56p-1, + -0x1.48439ap-1 + }, + { // Entry 640 + 0x1.7685575f043fc937570fbcd679218a9ep-1, + 0x1.cb91e0p-1 + }, + { // Entry 641 + -0x1.7685575f043fc937570fbcd679218a9ep-1, + -0x1.cb91e0p-1 + }, + { // Entry 642 + 0x1.b6adccd55525b9c5503e0cdc8d37e90ep-1, + 0x1.277014p0 + }, + { // Entry 643 + -0x1.b6adccd55525b9c5503e0cdc8d37e90ep-1, + -0x1.277014p0 + }, + { // Entry 644 + 0x1.e87d307e1763e6189f33adfb0e8068c9p-1, + 0x1.691738p0 + }, + { // Entry 645 + -0x1.e87d307e1763e6189f33adfb0e8068c9p-1, + -0x1.691738p0 + }, + { // Entry 646 + 0x1.07cbfcdfaa6996b12b44434dca3635e9p0, + 0x1.aabe5cp0 + }, + { // Entry 647 + -0x1.07cbfcdfaa6996b12b44434dca3635e9p0, + -0x1.aabe5cp0 + }, + { // Entry 648 + 0x1.1762c4ec13567bd7f5f799b650139ef2p0, + 0x1.ec6580p0 + }, + { // Entry 649 + -0x1.1762c4ec13567bd7f5f799b650139ef2p0, + -0x1.ec6580p0 + }, + { // Entry 650 + 0x1.2404be9ae9b56a1e7b93aab429a437dcp0, + 0x1.170652p1 + }, + { // Entry 651 + -0x1.2404be9ae9b56a1e7b93aab429a437dcp0, + -0x1.170652p1 + }, + { // Entry 652 + 0x1.2e6a766d02ca49766b8c5e064edd330ap0, + 0x1.37d9e4p1 + }, + { // Entry 653 + -0x1.2e6a766d02ca49766b8c5e064edd330ap0, + -0x1.37d9e4p1 + }, + { // Entry 654 + 0x1.37189d65ba6a203671b78263ea59150ep0, + 0x1.58ad76p1 + }, + { // Entry 655 + -0x1.37189d65ba6a203671b78263ea59150ep0, + -0x1.58ad76p1 + }, + { // Entry 656 + 0x1.3e6fbb2131bc83fb7bb1680528d88125p0, + 0x1.798108p1 + }, + { // Entry 657 + -0x1.3e6fbb2131bc83fb7bb1680528d88125p0, + -0x1.798108p1 + }, + { // Entry 658 + 0x1.44b710cf357eefd513350249454692fep0, + 0x1.9a549ap1 + }, + { // Entry 659 + -0x1.44b710cf357eefd513350249454692fep0, + -0x1.9a549ap1 + }, + { // Entry 660 + 0x1.4a24076ac744c5d206c4362f0a81c539p0, + 0x1.bb282cp1 + }, + { // Entry 661 + -0x1.4a24076ac744c5d206c4362f0a81c539p0, + -0x1.bb282cp1 + }, + { // Entry 662 + 0x1.4edf4341eeb190f38d0f628df7c0f39cp0, + 0x1.dbfbbep1 + }, + { // Entry 663 + -0x1.4edf4341eeb190f38d0f628df7c0f39cp0, + -0x1.dbfbbep1 + }, + { // Entry 664 + 0x1.53082389d4de0bf0033c96e02e4ce915p0, + 0x1.fccf50p1 + }, + { // Entry 665 + -0x1.53082389d4de0bf0033c96e02e4ce915p0, + -0x1.fccf50p1 + }, + { // Entry 666 + 0x1.56b732f9ebf592c0c94096bc1ed28a6bp0, + 0x1.0ed170p2 + }, + { // Entry 667 + -0x1.56b732f9ebf592c0c94096bc1ed28a6bp0, + -0x1.0ed170p2 + }, + { // Entry 668 + 0x1.59ffe268d6801ace03f3d195dcfe7b03p0, + 0x1.1f3b38p2 + }, + { // Entry 669 + -0x1.59ffe268d6801ace03f3d195dcfe7b03p0, + -0x1.1f3b38p2 + }, + { // Entry 670 + 0x1.5cf1c510a2c51231c77aeb5bcfdb18f6p0, + 0x1.2fa5p2 + }, + { // Entry 671 + -0x1.5cf1c510a2c51231c77aeb5bcfdb18f6p0, + -0x1.2fa5p2 + }, + { // Entry 672 + 0x1.5f99775fdcea19d02889374d890664b5p0, + 0x1.400ec8p2 + }, + { // Entry 673 + -0x1.5f99775fdcea19d02889374d890664b5p0, + -0x1.400ec8p2 + }, + { // Entry 674 + 0x1.620148e37eeeed056aad41e79a62c2c1p0, + 0x1.507890p2 + }, + { // Entry 675 + -0x1.620148e37eeeed056aad41e79a62c2c1p0, + -0x1.507890p2 + }, + { // Entry 676 + 0x1.6431bb181361216275b0d203a9331c13p0, + 0x1.60e258p2 + }, + { // Entry 677 + -0x1.6431bb181361216275b0d203a9331c13p0, + -0x1.60e258p2 + }, + { // Entry 678 + 0x1.6631e1326b64f0282c465af90d9d3bd9p0, + 0x1.714c20p2 + }, + { // Entry 679 + -0x1.6631e1326b64f0282c465af90d9d3bd9p0, + -0x1.714c20p2 + }, + { // Entry 680 + 0x1.6807a948166caac881ad676127631903p0, + 0x1.81b5e8p2 + }, + { // Entry 681 + -0x1.6807a948166caac881ad676127631903p0, + -0x1.81b5e8p2 + }, + { // Entry 682 + 0x1.ef652bd0a90c724b11a56d2fd671af31p-5, + 0x1.effffep-5 + }, + { // Entry 683 + -0x1.ef652bd0a90c724b11a56d2fd671af31p-5, + -0x1.effffep-5 + }, + { // Entry 684 + 0x1.ef652dceca4dbeb14ee907159dd1c369p-5, + 0x1.f0p-5 + }, + { // Entry 685 + -0x1.ef652dceca4dbeb14ee907159dd1c369p-5, + -0x1.f0p-5 + }, + { // Entry 686 + 0x1.ef652fcceb8f073ec7ec4e0d20bb7bfbp-5, + 0x1.f00002p-5 + }, + { // Entry 687 + -0x1.ef652fcceb8f073ec7ec4e0d20bb7bfbp-5, + -0x1.f00002p-5 + }, + { // Entry 688 + 0x1.f57aae2e668fcd953f95c1400b66f69ap-4, + 0x1.f7fffep-4 + }, + { // Entry 689 + -0x1.f57aae2e668fcd953f95c1400b66f69ap-4, + -0x1.f7fffep-4 + }, + { // Entry 690 + 0x1.f57ab026c3a8fc7b278a06e9d0c43e3ap-4, + 0x1.f8p-4 + }, + { // Entry 691 + -0x1.f57ab026c3a8fc7b278a06e9d0c43e3ap-4, + -0x1.f8p-4 + }, + { // Entry 692 + 0x1.f57ab21f20c21c186f960384371cb174p-4, + 0x1.f80002p-4 + }, + { // Entry 693 + -0x1.f57ab21f20c21c186f960384371cb174p-4, + -0x1.f80002p-4 + }, + { // Entry 694 + 0x1.49230059e7c45adb8ec67bfb8e8a656bp-3, + 0x1.4bfffep-3 + }, + { // Entry 695 + -0x1.49230059e7c45adb8ec67bfb8e8a656bp-3, + -0x1.4bfffep-3 + }, + { // Entry 696 + 0x1.4923024ccb780f5a7e2ead4e2bd24d33p-3, + 0x1.4cp-3 + }, + { // Entry 697 + -0x1.4923024ccb780f5a7e2ead4e2bd24d33p-3, + -0x1.4cp-3 + }, + { // Entry 698 + 0x1.4923043faf2b9c728ca66011aefa5d95p-3, + 0x1.4c0002p-3 + }, + { // Entry 699 + -0x1.4923043faf2b9c728ca66011aefa5d95p-3, + -0x1.4c0002p-3 + }, + { // Entry 700 + 0x1.2a73a5481536bc5af06b6df4531f2c45p-2, + 0x1.333332p-2 + }, + { // Entry 701 + -0x1.2a73a5481536bc5af06b6df4531f2c45p-2, + -0x1.333332p-2 + }, + { // Entry 702 + 0x1.2a73a71dcec15ae5ead00add4294e754p-2, + 0x1.333334p-2 + }, + { // Entry 703 + -0x1.2a73a71dcec15ae5ead00add4294e754p-2, + -0x1.333334p-2 + }, + { // Entry 704 + 0x1.2a73a8f3884b7828b0c0111255103dc3p-2, + 0x1.333336p-2 + }, + { // Entry 705 + -0x1.2a73a8f3884b7828b0c0111255103dc3p-2, + -0x1.333336p-2 + }, + { // Entry 706 + 0x1.2fc480fa0e88570eda20090113e29e36p-1, + 0x1.594316p-1 + }, + { // Entry 707 + -0x1.2fc480fa0e88570eda20090113e29e36p-1, + -0x1.594316p-1 + }, + { // Entry 708 + 0x1.2fc4825a02d3f974157fe3c500a7defbp-1, + 0x1.594318p-1 + }, + { // Entry 709 + -0x1.2fc4825a02d3f974157fe3c500a7defbp-1, + -0x1.594318p-1 + }, + { // Entry 710 + 0x1.2fc483b9f71e558d99929cc8e5da29dfp-1, + 0x1.59431ap-1 + }, + { // Entry 711 + -0x1.2fc483b9f71e558d99929cc8e5da29dfp-1, + -0x1.59431ap-1 + }, + { // Entry 712 + 0x1.538f567a9ef925d9ba9a4231046e7f2cp-1, + 0x1.8ffffep-1 + }, + { // Entry 713 + -0x1.538f567a9ef925d9ba9a4231046e7f2cp-1, + -0x1.8ffffep-1 + }, + { // Entry 714 + 0x1.538f57b89061eb9122d5096b7cf267ebp-1, + 0x1.90p-1 + }, + { // Entry 715 + -0x1.538f57b89061eb9122d5096b7cf267ebp-1, + -0x1.90p-1 + }, + { // Entry 716 + 0x1.538f58f681c97cc9bd5a1277e9e2f0fbp-1, + 0x1.900002p-1 + }, + { // Entry 717 + -0x1.538f58f681c97cc9bd5a1277e9e2f0fbp-1, + -0x1.900002p-1 + }, + { // Entry 718 + -0.0f, + -0x1.p-149 + }, + { // Entry 719 + 0.0f, + 0x1.p-149 + }, + { // Entry 720 + 0.0, + 0.0 + }, + { // Entry 721 + 0.0f, + 0x1.p-149 + }, + { // Entry 722 + -0.0f, + -0x1.p-149 + }, + { // Entry 723 + 0x1.91cd2399d43fabf90187544276a9fdd6p-5, + 0x1.921fb4p-5 + }, + { // Entry 724 + -0x1.91cd2399d43fabf90187544276a9fdd6p-5, + -0x1.921fb4p-5 + }, + { // Entry 725 + 0x1.91cd2598992e3959b33089adc931af1bp-5, + 0x1.921fb6p-5 + }, + { // Entry 726 + -0x1.91cd2598992e3959b33089adc931af1bp-5, + -0x1.921fb6p-5 + }, + { // Entry 727 + 0x1.91cd27975e1cc39a020e1155956c974ep-5, + 0x1.921fb8p-5 + }, + { // Entry 728 + -0x1.91cd27975e1cc39a020e1155956c974ep-5, + -0x1.921fb8p-5 + }, + { // Entry 729 + 0x1.90d6de7dda04008932bb9dc6d6663dffp-4, + 0x1.921fb4p-4 + }, + { // Entry 730 + -0x1.90d6de7dda04008932bb9dc6d6663dffp-4, + -0x1.921fb4p-4 + }, + { // Entry 731 + 0x1.90d6e078f6c425534a52900d55c07c08p-4, + 0x1.921fb6p-4 + }, + { // Entry 732 + -0x1.90d6e078f6c425534a52900d55c07c08p-4, + -0x1.921fb6p-4 + }, + { // Entry 733 + 0x1.90d6e27413843dc984d6d696c18f157ap-4, + 0x1.921fb8p-4 + }, + { // Entry 734 + -0x1.90d6e27413843dc984d6d696c18f157ap-4, + -0x1.921fb8p-4 + }, + { // Entry 735 + 0x1.8d128d765c163bb2a4684b359bc37b4ap-3, + 0x1.921fb4p-3 + }, + { // Entry 736 + -0x1.8d128d765c163bb2a4684b359bc37b4ap-3, + -0x1.921fb4p-3 + }, + { // Entry 737 + 0x1.8d128f635a6f85e06f888e0887f9908fp-3, + 0x1.921fb6p-3 + }, + { // Entry 738 + -0x1.8d128f635a6f85e06f888e0887f9908fp-3, + -0x1.921fb6p-3 + }, + { // Entry 739 + 0x1.8d12915058c8a173e6b2d7c8cf5f012ap-3, + 0x1.921fb8p-3 + }, + { // Entry 740 + -0x1.8d12915058c8a173e6b2d7c8cf5f012ap-3, + -0x1.921fb8p-3 + }, + { // Entry 741 + 0x1.7f2d690b879f26b1634350104478a209p-2, + 0x1.921fb4p-2 + }, + { // Entry 742 + -0x1.7f2d690b879f26b1634350104478a209p-2, + -0x1.921fb4p-2 + }, + { // Entry 743 + 0x1.7f2d6ac71f4b19b38cf78bbadec1435ap-2, + 0x1.921fb6p-2 + }, + { // Entry 744 + -0x1.7f2d6ac71f4b19b38cf78bbadec1435ap-2, + -0x1.921fb6p-2 + }, + { // Entry 745 + 0x1.7f2d6c82b6f675c92c9dfa635f318ed7p-2, + 0x1.921fb8p-2 + }, + { // Entry 746 + -0x1.7f2d6c82b6f675c92c9dfa635f318ed7p-2, + -0x1.921fb8p-2 + }, + { // Entry 747 + 0x1.54e04b3d43589d0cc0bd332c6a822ecfp-1, + 0x1.921fb4p-1 + }, + { // Entry 748 + -0x1.54e04b3d43589d0cc0bd332c6a822ecfp-1, + -0x1.921fb4p-1 + }, + { // Entry 749 + 0x1.54e04c79ed9a93b01c6a9062dbd8e0ffp-1, + 0x1.921fb6p-1 + }, + { // Entry 750 + -0x1.54e04c79ed9a93b01c6a9062dbd8e0ffp-1, + -0x1.921fb6p-1 + }, + { // Entry 751 + 0x1.54e04db697db56ae489f89986a14a1b7p-1, + 0x1.921fb8p-1 + }, + { // Entry 752 + -0x1.54e04db697db56ae489f89986a14a1b7p-1, + -0x1.921fb8p-1 + }, + { // Entry 753 + 0x1.00fe98214bd47b0727cef70af68aceeep0, + 0x1.921fb4p0 + }, + { // Entry 754 + -0x1.00fe98214bd47b0727cef70af68aceeep0, + -0x1.921fb4p0 + }, + { // Entry 755 + 0x1.00fe98b4f50d8b3c36b9e2a180d97eeap0, + 0x1.921fb6p0 + }, + { // Entry 756 + -0x1.00fe98b4f50d8b3c36b9e2a180d97eeap0, + -0x1.921fb6p0 + }, + { // Entry 757 + 0x1.00fe99489e458fdeaf9be968cab6da63p0, + 0x1.921fb8p0 + }, + { // Entry 758 + -0x1.00fe99489e458fdeaf9be968cab6da63p0, + -0x1.921fb8p0 + }, + { // Entry 759 + 0x1.433b89f683ed7fa5817d865f4f40b772p0, + 0x1.921fb4p1 + }, + { // Entry 760 + -0x1.433b89f683ed7fa5817d865f4f40b772p0, + -0x1.921fb4p1 + }, + { // Entry 761 + 0x1.433b8a54b916d7eb27cee6293066e9f6p0, + 0x1.921fb6p1 + }, + { // Entry 762 + -0x1.433b8a54b916d7eb27cee6293066e9f6p0, + -0x1.921fb6p1 + }, + { // Entry 763 + 0x1.433b8ab2ee3f565d04344459852fbcf4p0, + 0x1.921fb8p1 + }, + { // Entry 764 + -0x1.433b8ab2ee3f565d04344459852fbcf4p0, + -0x1.921fb8p1 + }, + { // Entry 765 + 0x1.69b8152ba44a49cab381a82d3efbf702p0, + 0x1.921fb4p2 + }, + { // Entry 766 + -0x1.69b8152ba44a49cab381a82d3efbf702p0, + -0x1.921fb4p2 + }, + { // Entry 767 + 0x1.69b8155e3c934e6ce63a344b2956ab50p0, + 0x1.921fb6p2 + }, + { // Entry 768 + -0x1.69b8155e3c934e6ce63a344b2956ab50p0, + -0x1.921fb6p2 + }, + { // Entry 769 + 0x1.69b81590d4dbd567331c0dc4b7fd047bp0, + 0x1.921fb8p2 + }, + { // Entry 770 + -0x1.69b81590d4dbd567331c0dc4b7fd047bp0, + -0x1.921fb8p2 + }, + { // Entry 771 + 0x1.7dcb7c4be6b4be644d7db098c68e6e5ep0, + 0x1.921fb4p3 + }, + { // Entry 772 + -0x1.7dcb7c4be6b4be644d7db098c68e6e5ep0, + -0x1.921fb4p3 + }, + { // Entry 773 + 0x1.7dcb7c65ad1b3ccb7360f1b9b77bc510p0, + 0x1.921fb6p3 + }, + { // Entry 774 + -0x1.7dcb7c65ad1b3ccb7360f1b9b77bc510p0, + -0x1.921fb6p3 + }, + { // Entry 775 + 0x1.7dcb7c7f738179f9a5848bd2f6ea74p0, + 0x1.921fb8p3 + }, + { // Entry 776 + -0x1.7dcb7c7f738179f9a5848bd2f6ea74p0, + -0x1.921fb8p3 + }, + { // Entry 777 + 0x1.87f17cf56d5854572d8ed4b6d7629cb7p0, + 0x1.921fb4p4 + }, + { // Entry 778 + -0x1.87f17cf56d5854572d8ed4b6d7629cb7p0, + -0x1.921fb4p4 + }, + { // Entry 779 + 0x1.87f17d026030951388edff604c5b31acp0, + 0x1.921fb6p4 + }, + { // Entry 780 + -0x1.87f17d026030951388edff604c5b31acp0, + -0x1.921fb6p4 + }, + { // Entry 781 + 0x1.87f17d0f5308b4e40d66884bfda71f16p0, + 0x1.921fb8p4 + }, + { // Entry 782 + -0x1.87f17d0f5308b4e40d66884bfda71f16p0, + -0x1.921fb8p4 + }, + { // Entry 783 + 0x1.8d08152ac2c9f80510b67fe8688fe00bp0, + 0x1.921fb4p5 + }, + { // Entry 784 + -0x1.8d08152ac2c9f80510b67fe8688fe00bp0, + -0x1.921fb4p5 + }, + { // Entry 785 + 0x1.8d0815313e2db1236b7416aaf31784edp0, + 0x1.921fb6p5 + }, + { // Entry 786 + -0x1.8d0815313e2db1236b7416aaf31784edp0, + -0x1.921fb6p5 + }, + { // Entry 787 + 0x1.8d081537b99159c1d87b49089b46259bp0, + 0x1.921fb8p5 + }, + { // Entry 788 + -0x1.8d081537b99159c1d87b49089b46259bp0, + -0x1.921fb8p5 + }, + { // Entry 789 + 0x1.8f93d4b57dde1ae888776df959240a29p0, + 0x1.921fb4p6 + }, + { // Entry 790 + -0x1.8f93d4b57dde1ae888776df959240a29p0, + -0x1.921fb4p6 + }, + { // Entry 791 + 0x1.8f93d4b8bbcf027a20c8f2f1496ed581p0, + 0x1.921fb6p6 + }, + { // Entry 792 + -0x1.8f93d4b8bbcf027a20c8f2f1496ed581p0, + -0x1.921fb6p6 + }, + { // Entry 793 + 0x1.8f93d4bbf9bfe1ca81404ffb114601efp0, + 0x1.921fb8p6 + }, + { // Entry 794 + -0x1.8f93d4bbf9bfe1ca81404ffb114601efp0, + -0x1.921fb8p6 + }, + { // Entry 795 + 0x1.90d9c2ec819f17b4d8062df65c79686ep0, + 0x1.921fb4p7 + }, + { // Entry 796 + -0x1.90d9c2ec819f17b4d8062df65c79686ep0, + -0x1.921fb4p7 + }, + { // Entry 797 + 0x1.90d9c2ee209f6d9d910babe7f62e7a71p0, + 0x1.921fb6p7 + }, + { // Entry 798 + -0x1.90d9c2ee209f6d9d910babe7f62e7a71p0, + -0x1.921fb6p7 + }, + { // Entry 799 + 0x1.90d9c2efbf9fbf6585fe7f879e30cb27p0, + 0x1.921fb8p7 + }, + { // Entry 800 + -0x1.90d9c2efbf9fbf6585fe7f879e30cb27p0, + -0x1.921fb8p7 + }, + { // Entry 801 + 0x1.2b5f4a1f186a4f4cce84633d4e88c6e3p0, + 0x1.2d97c4p1 + }, + { // Entry 802 + -0x1.2b5f4a1f186a4f4cce84633d4e88c6e3p0, + -0x1.2d97c4p1 + }, + { // Entry 803 + 0x1.2b5f4abb6450cfe394b11d0190b012a2p0, + 0x1.2d97c6p1 + }, + { // Entry 804 + -0x1.2b5f4abb6450cfe394b11d0190b012a2p0, + -0x1.2d97c6p1 + }, + { // Entry 805 + 0x1.2b5f4b57b0358ecd5c4ef2cf8eeca8b5p0, + 0x1.2d97c8p1 + }, + { // Entry 806 + -0x1.2b5f4b57b0358ecd5c4ef2cf8eeca8b5p0, + -0x1.2d97c8p1 + }, + { // Entry 807 + 0x1.524a69ac739be8aa44819da2c46ddeffp0, + 0x1.f6a7a0p1 + }, + { // Entry 808 + -0x1.524a69ac739be8aa44819da2c46ddeffp0, + -0x1.f6a7a0p1 + }, + { // Entry 809 + 0x1.524a69eacf4f30dd7930094c2c5422fap0, + 0x1.f6a7a2p1 + }, + { // Entry 810 + -0x1.524a69eacf4f30dd7930094c2c5422fap0, + -0x1.f6a7a2p1 + }, + { // Entry 811 + 0x1.524a6a292b0201c41df76f9856ea793ep0, + 0x1.f6a7a4p1 + }, + { // Entry 812 + -0x1.524a6a292b0201c41df76f9856ea793ep0, + -0x1.f6a7a4p1 + }, + { // Entry 813 + 0x1.5c97d2cf4d47c39e1d3362c5c6cb465ep0, + 0x1.2d97c4p2 + }, + { // Entry 814 + -0x1.5c97d2cf4d47c39e1d3362c5c6cb465ep0, + -0x1.2d97c4p2 + }, + { // Entry 815 + 0x1.5c97d3278d78828714e1db373c01c428p0, + 0x1.2d97c6p2 + }, + { // Entry 816 + -0x1.5c97d3278d78828714e1db373c01c428p0, + -0x1.2d97c6p2 + }, + { // Entry 817 + 0x1.5c97d37fcda822b612cc305acdb3719ap0, + 0x1.2d97c8p2 + }, + { // Entry 818 + -0x1.5c97d37fcda822b612cc305acdb3719ap0, + -0x1.2d97c8p2 + }, + { // Entry 819 + 0x1.64102f6fe89978879ec1eb938127f347p0, + 0x1.5fdbbcp2 + }, + { // Entry 820 + -0x1.64102f6fe89978879ec1eb938127f347p0, + -0x1.5fdbbcp2 + }, + { // Entry 821 + 0x1.64102fb17ee4bd784c0bc3c4b87b12dbp0, + 0x1.5fdbbep2 + }, + { // Entry 822 + -0x1.64102fb17ee4bd784c0bc3c4b87b12dbp0, + -0x1.5fdbbep2 + }, + { // Entry 823 + 0x1.64102ff3152f49a5b25bbbed0e298789p0, + 0x1.5fdbc0p2 + }, + { // Entry 824 + -0x1.64102ff3152f49a5b25bbbed0e298789p0, + -0x1.5fdbc0p2 + }, + { // Entry 825 + 0x1.6e256157f08af28f8fbcb2f100b427b2p0, + 0x1.c463a8p2 + }, + { // Entry 826 + -0x1.6e256157f08af28f8fbcb2f100b427b2p0, + -0x1.c463a8p2 + }, + { // Entry 827 + 0x1.6e2561801fc98949e471b87dd9e165adp0, + 0x1.c463aap2 + }, + { // Entry 828 + -0x1.6e2561801fc98949e471b87dd9e165adp0, + -0x1.c463aap2 + }, + { // Entry 829 + 0x1.6e2561a84f07c6d78f351f778ca48ee1p0, + 0x1.c463acp2 + }, + { // Entry 830 + -0x1.6e2561a84f07c6d78f351f778ca48ee1p0, + -0x1.c463acp2 + }, + { // Entry 831 + 0x1.71b40fe4d6264f6dcb5aa93d81eee334p0, + 0x1.f6a7a0p2 + }, + { // Entry 832 + -0x1.71b40fe4d6264f6dcb5aa93d81eee334p0, + -0x1.f6a7a0p2 + }, + { // Entry 833 + 0x1.71b4100581ff6df4d0e43adc1c6df394p0, + 0x1.f6a7a2p2 + }, + { // Entry 834 + -0x1.71b4100581ff6df4d0e43adc1c6df394p0, + -0x1.f6a7a2p2 + }, + { // Entry 835 + 0x1.71b410262dd84afcf6128b00223864d4p0, + 0x1.f6a7a4p2 + }, + { // Entry 836 + -0x1.71b410262dd84afcf6128b00223864d4p0, + -0x1.f6a7a4p2 + }, + { // Entry 837 + 0x1.749f95c28655e27185bdf7611bf6dabap0, + 0x1.1475cap3 + }, + { // Entry 838 + -0x1.749f95c28655e27185bdf7611bf6dabap0, + -0x1.1475cap3 + }, + { // Entry 839 + 0x1.749f95f8ad42bfc84cd821638d05272ep0, + 0x1.1475ccp3 + }, + { // Entry 840 + -0x1.749f95f8ad42bfc84cd821638d05272ep0, + -0x1.1475ccp3 + }, + { // Entry 841 + 0x1.749f962ed42ed732156103090043fe20p0, + 0x1.1475cep3 + }, + { // Entry 842 + -0x1.749f962ed42ed732156103090043fe20p0, + -0x1.1475cep3 + }, + { // Entry 843 + 0x1.77100a61d11bd3683ef7f13e0e2d3714p0, + 0x1.2d97c4p3 + }, + { // Entry 844 + -0x1.77100a61d11bd3683ef7f13e0e2d3714p0, + -0x1.2d97c4p3 + }, + { // Entry 845 + 0x1.77100a8f6a77d25e60c8ac6b368ced7cp0, + 0x1.2d97c6p3 + }, + { // Entry 846 + -0x1.77100a8f6a77d25e60c8ac6b368ced7cp0, + -0x1.2d97c6p3 + }, + { // Entry 847 + 0x1.77100abd03d3383b200c349a288d0858p0, + 0x1.2d97c8p3 + }, + { // Entry 848 + -0x1.77100abd03d3383b200c349a288d0858p0, + -0x1.2d97c8p3 + }, + { // Entry 849 + 0x1.79216b54e7690f5dc60c9f9ad18c2fe4p0, + 0x1.46b9c0p3 + }, + { // Entry 850 + -0x1.79216b54e7690f5dc60c9f9ad18c2fe4p0, + -0x1.46b9c0p3 + }, + { // Entry 851 + 0x1.79216b7bd2590ebc8160a2e2288b213cp0, + 0x1.46b9c2p3 + }, + { // Entry 852 + -0x1.79216b7bd2590ebc8160a2e2288b213cp0, + -0x1.46b9c2p3 + }, + { // Entry 853 + 0x1.79216ba2bd48954acc47fb24366389dcp0, + 0x1.46b9c4p3 + }, + { // Entry 854 + -0x1.79216ba2bd48954acc47fb24366389dcp0, + -0x1.46b9c4p3 + }, + { // Entry 855 + 0x1.7ae7d7b9fff1b8fc1a190cb09ec19212p0, + 0x1.5fdbbcp3 + }, + { // Entry 856 + -0x1.7ae7d7b9fff1b8fc1a190cb09ec19212p0, + -0x1.5fdbbcp3 + }, + { // Entry 857 + 0x1.7ae7d7db99b1b48f74a47550dd2775fbp0, + 0x1.5fdbbep3 + }, + { // Entry 858 + -0x1.7ae7d7db99b1b48f74a47550dd2775fbp0, + -0x1.5fdbbep3 + }, + { // Entry 859 + 0x1.7ae7d7fd33714f26d256bae7b8da269cp0, + 0x1.5fdbc0p3 + }, + { // Entry 860 + -0x1.7ae7d7fd33714f26d256bae7b8da269cp0, + -0x1.5fdbc0p3 + }, + { // Entry 861 + 0x1.7c72243c821084a80ce5911f6e3dea5dp0, + 0x1.78fdb6p3 + }, + { // Entry 862 + -0x1.7c72243c821084a80ce5911f6e3dea5dp0, + -0x1.78fdb6p3 + }, + { // Entry 863 + 0x1.7c722459cf137ac258c3b7237604e08ep0, + 0x1.78fdb8p3 + }, + { // Entry 864 + -0x1.7c722459cf137ac258c3b7237604e08ep0, + -0x1.78fdb8p3 + }, + { // Entry 865 + 0x1.7c7224771c1621d7d010891cc6cbd91ep0, + 0x1.78fdbap3 + }, + { // Entry 866 + -0x1.7c7224771c1621d7d010891cc6cbd91ep0, + -0x1.78fdbap3 + }, + { // Entry 867 + 0x1.7efc70fef0079d0f48b6d9402b26d905p0, + 0x1.ab41aep3 + }, + { // Entry 868 + -0x1.7efc70fef0079d0f48b6d9402b26d905p0, + -0x1.ab41aep3 + }, + { // Entry 869 + 0x1.7efc7115c92ed7b4199c4707127cb54bp0, + 0x1.ab41b0p3 + }, + { // Entry 870 + -0x1.7efc7115c92ed7b4199c4707127cb54bp0, + -0x1.ab41b0p3 + }, + { // Entry 871 + 0x1.7efc712ca255dbe487b8a2707e7c0319p0, + 0x1.ab41b2p3 + }, + { // Entry 872 + -0x1.7efc712ca255dbe487b8a2707e7c0319p0, + -0x1.ab41b2p3 + }, + { // Entry 873 + 0x1.800bb137f9715ad622aff2aea130dce0p0, + 0x1.c463a8p3 + }, + { // Entry 874 + -0x1.800bb137f9715ad622aff2aea130dce0p0, + -0x1.c463a8p3 + }, + { // Entry 875 + 0x1.800bb14c5de3a50924516807a2acf3fep0, + 0x1.c463aap3 + }, + { // Entry 876 + -0x1.800bb14c5de3a50924516807a2acf3fep0, + -0x1.c463aap3 + }, + { // Entry 877 + 0x1.800bb160c255c14e4e27ff1409d422e3p0, + 0x1.c463acp3 + }, + { // Entry 878 + -0x1.800bb160c255c14e4e27ff1409d422e3p0, + -0x1.c463acp3 + }, + { // Entry 879 + 0x1.80fe86936790bcf875c5fe2fb547d565p0, + 0x1.dd85a4p3 + }, + { // Entry 880 + -0x1.80fe86936790bcf875c5fe2fb547d565p0, + -0x1.dd85a4p3 + }, + { // Entry 881 + 0x1.80fe86a5b758117d0d5619d06ab27318p0, + 0x1.dd85a6p3 + }, + { // Entry 882 + -0x1.80fe86a5b758117d0d5619d06ab27318p0, + -0x1.dd85a6p3 + }, + { // Entry 883 + 0x1.80fe86b8071f3eea18b5b73ff7f2e4a9p0, + 0x1.dd85a8p3 + }, + { // Entry 884 + -0x1.80fe86b8071f3eea18b5b73ff7f2e4a9p0, + -0x1.dd85a8p3 + }, + { // Entry 885 + 0x1.81d92dd9caf1328bc6b375143237cb0fp0, + 0x1.f6a7a0p3 + }, + { // Entry 886 + -0x1.81d92dd9caf1328bc6b375143237cb0fp0, + -0x1.f6a7a0p3 + }, + { // Entry 887 + 0x1.81d92dea5381d18436c91dc15fbc646dp0, + 0x1.f6a7a2p3 + }, + { // Entry 888 + -0x1.81d92dea5381d18436c91dc15fbc646dp0, + -0x1.f6a7a2p3 + }, + { // Entry 889 + 0x1.81d92dfadc124ef0f2477e36e6f68f74p0, + 0x1.f6a7a4p3 + }, + { // Entry 890 + -0x1.81d92dfadc124ef0f2477e36e6f68f74p0, + -0x1.f6a7a4p3 + }, + { // Entry 891 + 0x1.829f168f2426e5aaade6af4c5fde890ap0, + 0x1.07e4ccp4 + }, + { // Entry 892 + -0x1.829f168f2426e5aaade6af4c5fde890ap0, + -0x1.07e4ccp4 + }, + { // Entry 893 + 0x1.829f16ad2528616b825b97261b82b069p0, + 0x1.07e4cep4 + }, + { // Entry 894 + -0x1.829f16ad2528616b825b97261b82b069p0, + -0x1.07e4cep4 + }, + { // Entry 895 + 0x1.829f16cb2629692c853c96842a0be987p0, + 0x1.07e4d0p4 + }, + { // Entry 896 + -0x1.829f16cb2629692c853c96842a0be987p0, + -0x1.07e4d0p4 + }, + { // Entry 897 + 0x1.835311a12459455ac82eb15660927ea8p0, + 0x1.1475cap4 + }, + { // Entry 898 + -0x1.835311a12459455ac82eb15660927ea8p0, + -0x1.1475cap4 + }, + { // Entry 899 + 0x1.835311bc7d3a944a470489a7e4d79c89p0, + 0x1.1475ccp4 + }, + { // Entry 900 + -0x1.835311bc7d3a944a470489a7e4d79c89p0, + -0x1.1475ccp4 + }, + { // Entry 901 + 0x1.835311d7d61b7e454afbda6fc3780f9bp0, + 0x1.1475cep4 + }, + { // Entry 902 + -0x1.835311d7d61b7e454afbda6fc3780f9bp0, + -0x1.1475cep4 + }, + { // Entry 903 + 0x1.83f772fb8c656bf286bfb98e1b6c2297p0, + 0x1.2106c8p4 + }, + { // Entry 904 + -0x1.83f772fb8c656bf286bfb98e1b6c2297p0, + -0x1.2106c8p4 + }, + { // Entry 905 + 0x1.83f77314938eb6f209e9d6f162ceb218p0, + 0x1.2106cap4 + }, + { // Entry 906 + -0x1.83f77314938eb6f209e9d6f162ceb218p0, + -0x1.2106cap4 + }, + { // Entry 907 + 0x1.83f7732d9ab7a98acc60db819db81050p0, + 0x1.2106ccp4 + }, + { // Entry 908 + -0x1.83f7732d9ab7a98acc60db819db81050p0, + -0x1.2106ccp4 + }, + { // Entry 909 + 0x1.848e2bbf112b7c2876657a2a86df9912p0, + 0x1.2d97c4p4 + }, + { // Entry 910 + -0x1.848e2bbf112b7c2876657a2a86df9912p0, + -0x1.2d97c4p4 + }, + { // Entry 911 + 0x1.848e2bd60efe2b9612b5fc806fd418d9p0, + 0x1.2d97c6p4 + }, + { // Entry 912 + -0x1.848e2bd60efe2b9612b5fc806fd418d9p0, + -0x1.2d97c6p4 + }, + { // Entry 913 + 0x1.848e2bed0cd08d2b9a9efc0954153c48p0, + 0x1.2d97c8p4 + }, + { // Entry 914 + -0x1.848e2bed0cd08d2b9a9efc0954153c48p0, + -0x1.2d97c8p4 + }, + { // Entry 915 + 0x1.8518de24fb5e23b2ff0cc417b338f410p0, + 0x1.3a28c2p4 + }, + { // Entry 916 + -0x1.8518de24fb5e23b2ff0cc417b338f410p0, + -0x1.3a28c2p4 + }, + { // Entry 917 + 0x1.8518de3a2cef8f1d8eb840c195f7aec6p0, + 0x1.3a28c4p4 + }, + { // Entry 918 + -0x1.8518de3a2cef8f1d8eb840c195f7aec6p0, + -0x1.3a28c4p4 + }, + { // Entry 919 + 0x1.8518de4f5e80b5a144ccb442286993f2p0, + 0x1.3a28c6p4 + }, + { // Entry 920 + -0x1.8518de4f5e80b5a144ccb442286993f2p0, + -0x1.3a28c6p4 + }, + { // Entry 921 + 0x1.8598ec14f4559fb7ce6f97f8b0ce9772p0, + 0x1.46b9c0p4 + }, + { // Entry 922 + -0x1.8598ec14f4559fb7ce6f97f8b0ce9772p0, + -0x1.46b9c0p4 + }, + { // Entry 923 + 0x1.8598ec288d8e61a24f31637379503fc5p0, + 0x1.46b9c2p4 + }, + { // Entry 924 + -0x1.8598ec288d8e61a24f31637379503fc5p0, + -0x1.46b9c2p4 + }, + { // Entry 925 + 0x1.8598ec3c26c6e645d117b0b4d0b90716p0, + 0x1.46b9c4p4 + }, + { // Entry 926 + -0x1.8598ec3c26c6e645d117b0b4d0b90716p0, + -0x1.46b9c4p4 + }, + { // Entry 927 + 0x1.860f835398d37040ddc2d7017bf92099p0, + 0x1.534abep4 + }, + { // Entry 928 + -0x1.860f835398d37040ddc2d7017bf92099p0, + -0x1.534abep4 + }, + { // Entry 929 + 0x1.860f8365c617d586a14b44930af2704ap0, + 0x1.534ac0p4 + }, + { // Entry 930 + -0x1.860f8365c617d586a14b44930af2704ap0, + -0x1.534ac0p4 + }, + { // Entry 931 + 0x1.860f8377f35c040fc41230db2834a379p0, + 0x1.534ac2p4 + }, + { // Entry 932 + -0x1.860f8377f35c040fc41230db2834a379p0, + -0x1.534ac2p4 + }, + { // Entry 933 + 0x1.867da6b26f9ac2fa4c1d70b7532cb6aep0, + 0x1.5fdbbcp4 + }, + { // Entry 934 + -0x1.867da6b26f9ac2fa4c1d70b7532cb6aep0, + -0x1.5fdbbcp4 + }, + { // Entry 935 + 0x1.867da6c3571aaf0e97b75fd8102e312ap0, + 0x1.5fdbbep4 + }, + { // Entry 936 + -0x1.867da6c3571aaf0e97b75fd8102e312ap0, + -0x1.5fdbbep4 + }, + { // Entry 937 + 0x1.867da6d43e9a6a0ab844221559e0ca4ep0, + 0x1.5fdbc0p4 + }, + { // Entry 938 + -0x1.867da6d43e9a6a0ab844221559e0ca4ep0, + -0x1.5fdbc0p4 + }, + { // Entry 939 + 0x1.86e4356f9805898eff739bee09b0eb2bp0, + 0x1.6c6cbap4 + }, + { // Entry 940 + -0x1.86e4356f9805898eff739bee09b0eb2bp0, + -0x1.6c6cbap4 + }, + { // Entry 941 + 0x1.86e4357f5ac86b81453a4b9f1ab42ac2p0, + 0x1.6c6cbcp4 + }, + { // Entry 942 + -0x1.86e4357f5ac86b81453a4b9f1ab42ac2p0, + -0x1.6c6cbcp4 + }, + { // Entry 943 + 0x1.86e4358f1d8b21400c5273ab23322cc4p0, + 0x1.6c6cbep4 + }, + { // Entry 944 + -0x1.86e4358f1d8b21400c5273ab23322cc4p0, + -0x1.6c6cbep4 + }, + { // Entry 945 + 0x1.8743f10efa639eaaf405e83f84a991bbp0, + 0x1.78fdb6p4 + }, + { // Entry 946 + -0x1.8743f10efa639eaaf405e83f84a991bbp0, + -0x1.78fdb6p4 + }, + { // Entry 947 + 0x1.8743f11db5201e00fba3693129ceaaadp0, + 0x1.78fdb8p4 + }, + { // Entry 948 + -0x1.8743f11db5201e00fba3693129ceaaadp0, + -0x1.78fdb8p4 + }, + { // Entry 949 + 0x1.8743f12c6fdc75672ff29ccd6d6423ccp0, + 0x1.78fdbap4 + }, + { // Entry 950 + -0x1.8743f12c6fdc75672ff29ccd6d6423ccp0, + -0x1.78fdbap4 + }, + { // Entry 951 + 0x1.879d825ab3fe49f711b2fa09df2c5726p0, + 0x1.858eb4p4 + }, + { // Entry 952 + -0x1.879d825ab3fe49f711b2fa09df2c5726p0, + -0x1.858eb4p4 + }, + { // Entry 953 + 0x1.879d82687fc876212b8475e64de596a4p0, + 0x1.858eb6p4 + }, + { // Entry 954 + -0x1.879d82687fc876212b8475e64de596a4p0, + -0x1.858eb6p4 + }, + { // Entry 955 + 0x1.879d82764b927e1728ed144f2db217ebp0, + 0x1.858eb8p4 + }, + { // Entry 956 + -0x1.879d82764b927e1728ed144f2db217ebp0, + -0x1.858eb8p4 + }, + { // Entry 957 + 0x1.921fb54442d18467898cc31701b639a2p0, + 0x1.fffffep62 + }, + { // Entry 958 + -0x1.921fb54442d18467898cc31701b639a2p0, + -0x1.fffffep62 + }, + { // Entry 959 + 0x1.921fb54442d18467898cc51701b839a2p0, + 0x1.p63 + }, + { // Entry 960 + -0x1.921fb54442d18467898cc51701b839a2p0, + -0x1.p63 + }, + { // Entry 961 + 0x1.921fb54442d18467898cc91701b039a2p0, + 0x1.000002p63 + }, + { // Entry 962 + -0x1.921fb54442d18467898cc91701b039a2p0, + -0x1.000002p63 + }, + { // Entry 963 + 0x1.921fb52442d16469896cefc18ce2e42dp0, + 0x1.fffffep26 + }, + { // Entry 964 + -0x1.921fb52442d16469896cefc18ce2e42dp0, + -0x1.fffffep26 + }, + { // Entry 965 + 0x1.921fb52442d18469898cefc1ac62e44cp0, + 0x1.p27 + }, + { // Entry 966 + -0x1.921fb52442d18469898cefc1ac62e44cp0, + -0x1.p27 + }, + { // Entry 967 + 0x1.921fb52442d1c469890cefc2ab62e250p0, + 0x1.000002p27 + }, + { // Entry 968 + -0x1.921fb52442d1c469890cefc2ab62e250p0, + -0x1.000002p27 + }, + { // Entry 969 + 0x1.921fb44442d0846988e21a6c570d8fc4p0, + 0x1.fffffep23 + }, + { // Entry 970 + -0x1.921fb44442d0846988e21a6c570d8fc4p0, + -0x1.fffffep23 + }, + { // Entry 971 + 0x1.921fb44442d1846989e21a6c570d8ec4p0, + 0x1.p24 + }, + { // Entry 972 + -0x1.921fb44442d1846989e21a6c570d8ec4p0, + -0x1.p24 + }, + { // Entry 973 + 0x1.921fb44442d3846985e21a72570d86c4p0, + 0x1.000002p24 + }, + { // Entry 974 + -0x1.921fb44442d3846985e21a72570d86c4p0, + -0x1.000002p24 + }, + { // Entry 975 + 0x1.5368c915ad9354b6c80847a9f514bb75p0, + 0x1.fffffep1 + }, + { // Entry 976 + -0x1.5368c915ad9354b6c80847a9f514bb75p0, + -0x1.fffffep1 + }, + { // Entry 977 + 0x1.5368c951e9cfc9a42e1add5983cfb3a8p0, + 0x1.p2 + }, + { // Entry 978 + -0x1.5368c951e9cfc9a42e1add5983cfb3a8p0, + -0x1.p2 + }, + { // Entry 979 + 0x1.5368c9ca62475f5801ace2839c235895p0, + 0x1.000002p2 + }, + { // Entry 980 + -0x1.5368c9ca62475f5801ace2839c235895p0, + -0x1.000002p2 + }, + { // Entry 981 + 0x1.1b6e18c8557d8e74e5d9704acf91aa45p0, + 0x1.fffffep0 + }, + { // Entry 982 + -0x1.1b6e18c8557d8e74e5d9704acf91aa45p0, + -0x1.fffffep0 + }, + { // Entry 983 + 0x1.1b6e192ebbe446c6d19aa220a39af320p0, + 0x1.p1 + }, + { // Entry 984 + -0x1.1b6e192ebbe446c6d19aa220a39af320p0, + -0x1.p1 + }, + { // Entry 985 + 0x1.1b6e19fb88afcbe58bcd268e23897be3p0, + 0x1.000002p1 + }, + { // Entry 986 + -0x1.1b6e19fb88afcbe58bcd268e23897be3p0, + -0x1.000002p1 + }, + { // Entry 987 + 0x1.921fb44442d1046989621a6c570d8f04p-1, + 0x1.fffffep-1 + }, + { // Entry 988 + -0x1.921fb44442d1046989621a6c570d8f04p-1, + -0x1.fffffep-1 + }, + { // Entry 989 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p0 + }, + { // Entry 990 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p0 + }, + { // Entry 991 + 0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + 0x1.000002p0 + }, + { // Entry 992 + -0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + -0x1.000002p0 + }, + { // Entry 993 + 0x1.dac66ebc821b0b05c115b007ee262f78p-2, + 0x1.fffffep-2 + }, + { // Entry 994 + -0x1.dac66ebc821b0b05c115b007ee262f78p-2, + -0x1.fffffep-2 + }, + { // Entry 995 + 0x1.dac670561bb4f68adfc88bd978751a06p-2, + 0x1.p-1 + }, + { // Entry 996 + -0x1.dac670561bb4f68adfc88bd978751a06p-2, + -0x1.p-1 + }, + { // Entry 997 + 0x1.dac673894ee6e20ffe552cf613035e41p-2, + 0x1.000002p-1 + }, + { // Entry 998 + -0x1.dac673894ee6e20ffe552cf613035e41p-2, + -0x1.000002p-1 + }, + { // Entry 999 + 0x1.f5b75db0e62bd7f064e3887809ade7efp-3, + 0x1.fffffep-3 + }, + { // Entry 1000 + -0x1.f5b75db0e62bd7f064e3887809ade7efp-3, + -0x1.fffffep-3 + }, + { // Entry 1001 + 0x1.f5b75f92c80dd62adb8f3debef442fcbp-3, + 0x1.p-2 + }, + { // Entry 1002 + -0x1.f5b75f92c80dd62adb8f3debef442fcbp-3, + -0x1.p-2 + }, + { // Entry 1003 + 0x1.f5b763568bd1288c4bd4fecdaee28fb5p-3, + 0x1.000002p-2 + }, + { // Entry 1004 + -0x1.f5b763568bd1288c4bd4fecdaee28fb5p-3, + -0x1.000002p-2 + }, + { // Entry 1005 + 0x1.fd5ba7b2a374dc8497123b64b398aae2p-4, + 0x1.fffffep-4 + }, + { // Entry 1006 + -0x1.fd5ba7b2a374dc8497123b64b398aae2p-4, + -0x1.fffffep-4 + }, + { // Entry 1007 + 0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + 0x1.p-3 + }, + { // Entry 1008 + -0x1.fd5ba9aac2f6dc65912f313e7d111defp-4, + -0x1.p-3 + }, + { // Entry 1009 + 0x1.fd5bad9b01faad9eb46ef9bda99d4fdap-4, + 0x1.000002p-3 + }, + { // Entry 1010 + -0x1.fd5bad9b01faad9eb46ef9bda99d4fdap-4, + -0x1.000002p-3 + }, + { // Entry 1011 + 0x1.ff55b974cde098738e59c07aa48dd110p-5, + 0x1.fffffep-5 + }, + { // Entry 1012 + -0x1.ff55b974cde098738e59c07aa48dd110p-5, + -0x1.fffffep-5 + }, + { // Entry 1013 + 0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + 0x1.p-4 + }, + { // Entry 1014 + -0x1.ff55bb72cfde9c6d964f25b81c5c1aa2p-5, + -0x1.p-4 + }, + { // Entry 1015 + 0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + 0x1.000002p-4 + }, + { // Entry 1016 + -0x1.ff55bf6ed3da98798265cc3f27c896c7p-5, + -0x1.000002p-4 + }, + { // Entry 1017 + 0x1.ffd559bb174252032fa3014c0671336cp-6, + 0x1.fffffep-6 + }, + { // Entry 1018 + -0x1.ffd559bb174252032fa3014c0671336cp-6, + -0x1.fffffep-6 + }, + { // Entry 1019 + 0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + 0x1.p-5 + }, + { // Entry 1020 + -0x1.ffd55bba97624a84ef3aeedbb518c427p-6, + -0x1.p-5 + }, + { // Entry 1021 + 0x1.ffd55fb997a23889edd9fb6b2758a63ep-6, + 0x1.000002p-5 + }, + { // Entry 1022 + -0x1.ffd55fb997a23889edd9fb6b2758a63ep-6, + -0x1.000002p-5 + }, + { // Entry 1023 + 0x1.fff553bbd727ab77d118772cd6b96490p-7, + 0x1.fffffep-7 + }, + { // Entry 1024 + -0x1.fff553bbd727ab77d118772cd6b96490p-7, + -0x1.fffffep-7 + }, + { // Entry 1025 + 0x1.fff555bbb729ab77cf18ac802beec090p-7, + 0x1.p-6 + }, + { // Entry 1026 + -0x1.fff555bbb729ab77cf18ac802beec090p-7, + -0x1.p-6 + }, + { // Entry 1027 + 0x1.fff559bb772daab7e316976eceda5473p-7, + 0x1.000002p-6 + }, + { // Entry 1028 + -0x1.fff559bb772daab7e316976eceda5473p-7, + -0x1.000002p-6 + }, + { // Entry 1029 + 0x1.fffffdf5555575bbbb99b72981620cfcp-15, + 0x1.fffffep-15 + }, + { // Entry 1030 + -0x1.fffffdf5555575bbbb99b72981620cfcp-15, + -0x1.fffffep-15 + }, + { // Entry 1031 + 0x1.fffffff5555555bbbbbbb72972976256p-15, + 0x1.p-14 + }, + { // Entry 1032 + -0x1.fffffff5555555bbbbbbb72972976256p-15, + -0x1.p-14 + }, + { // Entry 1033 + 0x1.000001faaaaa8adddd9fdb949681068fp-14, + 0x1.000002p-14 + }, + { // Entry 1034 + -0x1.000001faaaaa8adddd9fdb949681068fp-14, + -0x1.000002p-14 + }, + { // Entry 1035 + 0x1.fffffdfffffffd55555d55554d5bbbbep-28, + 0x1.fffffep-28 + }, + { // Entry 1036 + -0x1.fffffdfffffffd55555d55554d5bbbbep-28, + -0x1.fffffep-28 + }, + { // Entry 1037 + 0x1.fffffffffffffd5555555555555bbbbbp-28, + 0x1.p-27 + }, + { // Entry 1038 + -0x1.fffffffffffffd5555555555555bbbbbp-28, + -0x1.p-27 + }, + { // Entry 1039 + 0x1.000001fffffffeaaaaa2aaaa9aadddd3p-27, + 0x1.000002p-27 + }, + { // Entry 1040 + -0x1.000001fffffffeaaaaa2aaaa9aadddd3p-27, + -0x1.000002p-27 + }, + { // Entry 1041 + 0x1.fffffdfffffffff555557555553555bbp-31, + 0x1.fffffep-31 + }, + { // Entry 1042 + -0x1.fffffdfffffffff555557555553555bbp-31, + -0x1.fffffep-31 + }, + { // Entry 1043 + 0x1.fffffffffffffff555555555555555bbp-31, + 0x1.p-30 + }, + { // Entry 1044 + -0x1.fffffffffffffff555555555555555bbp-31, + -0x1.p-30 + }, + { // Entry 1045 + 0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + 0x1.000002p-30 + }, + { // Entry 1046 + -0x1.000001fffffffffaaaaa8aaaaa6aaaddp-30, + -0x1.000002p-30 + }, + { // Entry 1047 + -0x1.921fb54442d18469898cc51701b839a1p0, + -0x1.fffffep127 + }, + { // Entry 1048 + 0x1.921fb54442d18469898cc51701b839a1p0, + 0x1.fffffep127 + }, + { // Entry 1049 + 0x1.921fb54442d18469898cc51701b839a1p0, + 0x1.fffffep127 + }, + { // Entry 1050 + -0x1.921fb54442d18469898cc51701b839a1p0, + -0x1.fffffep127 + }, + { // Entry 1051 + 0x1.921fb54442d18469898cc51701b839a2p0, + HUGE_VALF + }, + { // Entry 1052 + -0x1.921fb54442d18469898cc51701b839a2p0, + -HUGE_VALF + }, + { // Entry 1053 + 0x1.921fb54442d18469898cc51701b839a1p0, + 0x1.fffffep127 + }, + { // Entry 1054 + -0x1.921fb54442d18469898cc51701b839a1p0, + -0x1.fffffep127 + }, + { // Entry 1055 + 0x1.921fb54442d18469898cc51701b839a1p0, + 0x1.fffffcp127 + }, + { // Entry 1056 + -0x1.921fb54442d18469898cc51701b839a1p0, + -0x1.fffffcp127 + }, + { // Entry 1057 + 0x1.433b8a54b916d7eb27cee6293066e9f6p0, + 0x1.921fb6p1 + }, + { // Entry 1058 + -0x1.433b8a54b916d7eb27cee6293066e9f6p0, + -0x1.921fb6p1 + }, + { // Entry 1059 + 0x1.00fe98b4f50d8b3c36b9e2a180d97eeap0, + 0x1.921fb6p0 + }, + { // Entry 1060 + -0x1.00fe98b4f50d8b3c36b9e2a180d97eeap0, + -0x1.921fb6p0 + }, + { // Entry 1061 + 0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + 0x1.000002p0 + }, + { // Entry 1062 + -0x1.921fb74442cf84698ae21a6c570d8d5ep-1, + -0x1.000002p0 + }, + { // Entry 1063 + 0x1.921fb54442d18469898cc51701b839a2p-1, + 0x1.p0 + }, + { // Entry 1064 + -0x1.921fb54442d18469898cc51701b839a2p-1, + -0x1.p0 + }, + { // Entry 1065 + 0x1.921fb44442d1046989621a6c570d8f04p-1, + 0x1.fffffep-1 + }, + { // Entry 1066 + -0x1.921fb44442d1046989621a6c570d8f04p-1, + -0x1.fffffep-1 + }, + { // Entry 1067 + 0x1.54e04c79ed9a93b01c6a9062dbd8e0ffp-1, + 0x1.921fb6p-1 + }, + { // Entry 1068 + -0x1.54e04c79ed9a93b01c6a9062dbd8e0ffp-1, + -0x1.921fb6p-1 + }, + { // Entry 1069 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 1070 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 1071 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126 + }, + { // Entry 1072 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126 + }, + { // Entry 1073 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127 + }, + { // Entry 1074 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127 + }, + { // Entry 1075 + 0x1.fffff7ffffffffffffffffffffffffffp-127, + 0x1.fffff8p-127 + }, + { // Entry 1076 + -0x1.fffff7ffffffffffffffffffffffffffp-127, + -0x1.fffff8p-127 + }, + { // Entry 1077 + 0x1.ffffffffffffffffffffffffffffffffp-149, + 0x1.p-148 + }, + { // Entry 1078 + -0x1.ffffffffffffffffffffffffffffffffp-149, + -0x1.p-148 + }, + { // Entry 1079 + 0.0f, + 0x1.p-149 + }, + { // Entry 1080 + -0.0f, + -0x1.p-149 + }, + { // Entry 1081 + 0.0, + 0.0f + }, + { // Entry 1082 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/atanh_intel_data.h b/tests/math_data/atanh_intel_data.h new file mode 100644 index 000000000..6b6808b3f --- /dev/null +++ b/tests/math_data/atanh_intel_data.h @@ -0,0 +1,2458 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_atanh_intel_data[] = { + { // Entry 0 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 1 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 2 + -0x1.33c537256ac26ea1b8865a026e72c752p-1, + -0x1.136p-1 + }, + { // Entry 3 + 0x1.33c537256ac26ea1b8865a026e72c752p-1, + 0x1.136p-1 + }, + { // Entry 4 + -0x1.44767fdc853773ecd65b43b0efd1f8d6p-1, + -0x1.1f07c1f07c1f4p-1 + }, + { // Entry 5 + 0x1.44767fdc853773ecd65b43b0efd1f8d6p-1, + 0x1.1f07c1f07c1f4p-1 + }, + { // Entry 6 + -0x1.7761ddbd0573b7ff1d51e300bdb439bep-1, + -0x1.400000010p-1 + }, + { // Entry 7 + 0x1.7761ddbd0573b7ff1d51e300bdb439bep-1, + 0x1.400000010p-1 + }, + { // Entry 8 + -0x1.6259494a4bb397ff89dd84b74e230f31p-2, + -0x1.54d9d811468c2p-2 + }, + { // Entry 9 + 0x1.6259494a4bb397ff89dd84b74e230f31p-2, + 0x1.54d9d811468c2p-2 + }, + { // Entry 10 + -0x1.6719a6fbfef1d7fc326d067903183cddp-2, + -0x1.5911c3a70cebdp-2 + }, + { // Entry 11 + 0x1.6719a6fbfef1d7fc326d067903183cddp-2, + 0x1.5911c3a70cebdp-2 + }, + { // Entry 12 + -0x1.ad75b9841b24e264875483def1610c01p-1, + -0x1.5ece354ff80a2p-1 + }, + { // Entry 13 + 0x1.ad75b9841b24e264875483def1610c01p-1, + 0x1.5ece354ff80a2p-1 + }, + { // Entry 14 + -0x1.c08e6aa55e4172db4c413132b24283edp-1, + -0x1.68ae1ca8f6ad6p-1 + }, + { // Entry 15 + 0x1.c08e6aa55e4172db4c413132b24283edp-1, + 0x1.68ae1ca8f6ad6p-1 + }, + { // Entry 16 + -0x1.d6f10a7081e7ecc4a2d3d9e2371d1cb0p-1, + -0x1.739ce739ce73cp-1 + }, + { // Entry 17 + 0x1.d6f10a7081e7ecc4a2d3d9e2371d1cb0p-1, + 0x1.739ce739ce73cp-1 + }, + { // Entry 18 + -0x1.862796317ed3d7fcb8bec742b2ea5c0bp-2, + -0x1.744f8613c514bp-2 + }, + { // Entry 19 + 0x1.862796317ed3d7fcb8bec742b2ea5c0bp-2, + 0x1.744f8613c514bp-2 + }, + { // Entry 20 + -0x1.8027fe496eaad0006a3df4a7cfc399bap-5, + -0x1.7fdff7fffffffp-5 + }, + { // Entry 21 + 0x1.8027fe496eaad0006a3df4a7cfc399bap-5, + 0x1.7fdff7fffffffp-5 + }, + { // Entry 22 + -0x1.80602a138a48e581b7bf0a1d1f84769fp-10, + -0x1.8060180601ff6p-10 + }, + { // Entry 23 + 0x1.80602a138a48e581b7bf0a1d1f84769fp-10, + 0x1.8060180601ff6p-10 + }, + { // Entry 24 + -0x1.9f323ecbf984c5d61382119eafcddf36p-3, + -0x1.999999999999ap-3 + }, + { // Entry 25 + 0x1.9f323ecbf984c5d61382119eafcddf36p-3, + 0x1.999999999999ap-3 + }, + { // Entry 26 + -0x1.b7c54f4582a8f52cb0434b624cb3140bp-2, + -0x1.9e9703735f652p-2 + }, + { // Entry 27 + 0x1.b7c54f4582a8f52cb0434b624cb3140bp-2, + 0x1.9e9703735f652p-2 + }, + { // Entry 28 + -0x1.ac44a1f923250f86e06d88e6919a1a4fp-24, + -0x1.ac44a1f923238p-24 + }, + { // Entry 29 + 0x1.ac44a1f923250f86e06d88e6919a1a4fp-24, + 0x1.ac44a1f923238p-24 + }, + { // Entry 30 + -0x1.cee62c51688218abca36efcf5f6add63p-2, + -0x1.b1bfa1c2ff5c8p-2 + }, + { // Entry 31 + 0x1.cee62c51688218abca36efcf5f6add63p-2, + 0x1.b1bfa1c2ff5c8p-2 + }, + { // Entry 32 + -0x1.b4c1183827d4a805d64de6f870cd6888p-5, + -0x1.b45746fb45980p-5 + }, + { // Entry 33 + 0x1.b4c1183827d4a805d64de6f870cd6888p-5, + 0x1.b45746fb45980p-5 + }, + { // Entry 34 + -0x1.cd1ce8658f1e27f929bb26f71cf39ep-3, + -0x1.c579d4043e054p-3 + }, + { // Entry 35 + 0x1.cd1ce8658f1e27f929bb26f71cf39ep-3, + 0x1.c579d4043e054p-3 + }, + { // Entry 36 + -0x1.f4b9755f2c26e7fc906b87927f3076ecp-2, + -0x1.d04b9bb0bda28p-2 + }, + { // Entry 37 + 0x1.f4b9755f2c26e7fc906b87927f3076ecp-2, + 0x1.d04b9bb0bda28p-2 + }, + { // Entry 38 + -0x1.d49dd5cd8086d7fe196df1da63aadaf9p-4, + -0x1.d29523bb69328p-4 + }, + { // Entry 39 + 0x1.d49dd5cd8086d7fe196df1da63aadaf9p-4, + 0x1.d29523bb69328p-4 + }, + { // Entry 40 + -0x1.f7f60ac95611e75a2a085f35a7c508dcp-2, + -0x1.d2dce780a7304p-2 + }, + { // Entry 41 + 0x1.f7f60ac95611e75a2a085f35a7c508dcp-2, + 0x1.d2dce780a7304p-2 + }, + { // Entry 42 + -0x1.df875eb326b209b9c9a00f82e3dbc3bap-3, + -0x1.d6f41e3ea643ap-3 + }, + { // Entry 43 + 0x1.df875eb326b209b9c9a00f82e3dbc3bap-3, + 0x1.d6f41e3ea643ap-3 + }, + { // Entry 44 + -0x1.fe0dc4fabe81f72d042d459cdb17f7c5p-2, + -0x1.d7ad1055ed587p-2 + }, + { // Entry 45 + 0x1.fe0dc4fabe81f72d042d459cdb17f7c5p-2, + 0x1.d7ad1055ed587p-2 + }, + { // Entry 46 + -0x1.ede7fef85615d5762723a4bc9071bcfcp-4, + -0x1.eb86b85bf65d8p-4 + }, + { // Entry 47 + 0x1.ede7fef85615d5762723a4bc9071bcfcp-4, + 0x1.eb86b85bf65d8p-4 + }, + { // Entry 48 + -0x1.ffff0f05db419e0562a8a13e0c88ec0cp-3, + -0x1.f59707e3f49d0p-3 + }, + { // Entry 49 + 0x1.ffff0f05db419e0562a8a13e0c88ec0cp-3, + 0x1.f59707e3f49d0p-3 + }, + { // Entry 50 + -0x1.340af764783edfffac199b0ebf01c362p1, + -0x1.f7cp-1 + }, + { // Entry 51 + 0x1.340af764783edfffac199b0ebf01c362p1, + 0x1.f7cp-1 + }, + { // Entry 52 + -0x1.fc0000000000000000000000029aca95p-52, + -0x1.fc0p-52 + }, + { // Entry 53 + 0x1.fc0000000000000000000000029aca95p-52, + 0x1.fc0p-52 + }, + { // Entry 54 + -0x1.fdc93ea04e6030021bf3b7f1b7274addp-5, + -0x1.fd210af77856cp-5 + }, + { // Entry 55 + 0x1.fdc93ea04e6030021bf3b7f1b7274addp-5, + 0x1.fd210af77856cp-5 + }, + { // Entry 56 + -0x1.ffeaa91115a4e8716dc9f09be20a9364p-7, + -0x1.ffep-7 + }, + { // Entry 57 + 0x1.ffeaa91115a4e8716dc9f09be20a9364p-7, + 0x1.ffep-7 + }, + { // Entry 58 + -0x1.9a775e687850d877587114f931f61369p3, + -0x1.ffffffffe03edp-1 + }, + { // Entry 59 + 0x1.9a775e687850d877587114f931f61369p3, + 0x1.ffffffffe03edp-1 + }, + { // Entry 60 + -0x1.9ba863fb6bf8e791c8099e55cff570c3p3, + -0x1.ffffffffe2863p-1 + }, + { // Entry 61 + 0x1.9ba863fb6bf8e791c8099e55cff570c3p3, + 0x1.ffffffffe2863p-1 + }, + { // Entry 62 + -0x1.f369d8eedfbb384b0ee31be424423ec2p3, + -0x1.ffffffffffe0bp-1 + }, + { // Entry 63 + 0x1.f369d8eedfbb384b0ee31be424423ec2p3, + 0x1.ffffffffffe0bp-1 + }, + { // Entry 64 + -0x1.02bd22bd19797815b1ddefc90c41f8fbp4, + -0x1.fffffffffff5ep-1 + }, + { // Entry 65 + 0x1.02bd22bd19797815b1ddefc90c41f8fbp4, + 0x1.fffffffffff5ep-1 + }, + { // Entry 66 + -0x1.1841a4bab2d6d03a28537f43de9e90a4p4, + -0x1.ffffffffffff5p-1 + }, + { // Entry 67 + 0x1.1841a4bab2d6d03a28537f43de9e90a4p4, + 0x1.ffffffffffff5p-1 + }, + { // Entry 68 + 0x1.p-99, + 0x1.0p-99 + }, + { // Entry 69 + -0x1.p-99, + -0x1.0p-99 + }, + { // Entry 70 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 71 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 72 + 0x1.00000000000010000000155555555555p-41, + 0x1.0000000000001p-41 + }, + { // Entry 73 + -0x1.00000000000010000000155555555555p-41, + -0x1.0000000000001p-41 + }, + { // Entry 74 + 0x1.015891c9eaefd81f5edb9583f3871889p-3, + 0x1.0000000000006p-3 + }, + { // Entry 75 + -0x1.015891c9eaefd81f5edb9583f3871889p-3, + -0x1.0000000000006p-3 + }, + { // Entry 76 + 0x1.193ea7aad0313ecbf96ee2aa7057ee7cp-1, + 0x1.0000000000007p-1 + }, + { // Entry 77 + -0x1.193ea7aad0313ecbf96ee2aa7057ee7cp-1, + -0x1.0000000000007p-1 + }, + { // Entry 78 + 0x1.000555888ad4c9be103a862dcf933db6p-6, + 0x1.0000000000030p-6 + }, + { // Entry 79 + -0x1.000555888ad4c9be103a862dcf933db6p-6, + -0x1.0000000000030p-6 + }, + { // Entry 80 + 0x1.0000055555a8988cd2ad575377ece0d7p-10, + 0x1.0000000000201p-10 + }, + { // Entry 81 + -0x1.0000055555a8988cd2ad575377ece0d7p-10, + -0x1.0000000000201p-10 + }, + { // Entry 82 + 0x1.015891c9f107d81f5edc2a1f85d03e57p-3, + 0x1.00000000060p-3 + }, + { // Entry 83 + -0x1.015891c9f107d81f5edc2a1f85d03e57p-3, + -0x1.00000000060p-3 + }, + { // Entry 84 + 0x1.005588ad597cefed3539549b86ce2b1bp-4, + 0x1.00000000220p-4 + }, + { // Entry 85 + -0x1.005588ad597cefed3539549b86ce2b1bp-4, + -0x1.00000000220p-4 + }, + { // Entry 86 + 0x1.0000055577888aaad1cf378dd5b4caa3p-10, + 0x1.00000000220p-10 + }, + { // Entry 87 + -0x1.0000055577888aaad1cf378dd5b4caa3p-10, + -0x1.00000000220p-10 + }, + { // Entry 88 + 0x1.193ea7fca06d7000000fd6e3e45036c3p-1, + 0x1.0000003d5c2d9p-1 + }, + { // Entry 89 + -0x1.193ea7fca06d7000000fd6e3e45036c3p-1, + -0x1.0000003d5c2d9p-1 + }, + { // Entry 90 + 0x1.0158920aeeffb7df62fc5f72d05afc8ap-3, + 0x1.0000004p-3 + }, + { // Entry 91 + -0x1.0158920aeeffb7df62fc5f72d05afc8ap-3, + -0x1.0000004p-3 + }, + { // Entry 92 + 0x1.015894d61bb2a7f0ee6532fa66c13887p-3, + 0x1.0000030p-3 + }, + { // Entry 93 + -0x1.015894d61bb2a7f0ee6532fa66c13887p-3, + -0x1.0000030p-3 + }, + { // Entry 94 + 0x1.00255c8a5b4f98134613c6ae100b17d2p-5, + 0x1.001p-5 + }, + { // Entry 95 + -0x1.00255c8a5b4f98134613c6ae100b17d2p-5, + -0x1.001p-5 + }, + { // Entry 96 + 0x1.199403c895f3b2fbd6e04ef63e5e0b99p-1, + 0x1.003fffcp-1 + }, + { // Entry 97 + -0x1.199403c895f3b2fbd6e04ef63e5e0b99p-1, + -0x1.003fffcp-1 + }, + { // Entry 98 + 0x1.00401004000480000000000005595756p-50, + 0x1.0040100400048p-50 + }, + { // Entry 99 + -0x1.00401004000480000000000005595756p-50, + -0x1.0040100400048p-50 + }, + { // Entry 100 + 0x1.00b5e931e4c3080916948fa283902fa8p-4, + 0x1.006p-4 + }, + { // Entry 101 + -0x1.00b5e931e4c3080916948fa283902fa8p-4, + -0x1.006p-4 + }, + { // Entry 102 + 0x1.021c8577650fa41d24281561edcb1273p-10, + 0x1.021c8p-10 + }, + { // Entry 103 + -0x1.021c8577650fa41d24281561edcb1273p-10, + -0x1.021c8p-10 + }, + { // Entry 104 + 0x1.03858e51088d27f9df83774139563f2cp-6, + 0x1.038p-6 + }, + { // Entry 105 + -0x1.03858e51088d27f9df83774139563f2cp-6, + -0x1.038p-6 + }, + { // Entry 106 + 0x1.1e9b2fd18d91b42e390d13e9beb6978cp-1, + 0x1.040p-1 + }, + { // Entry 107 + -0x1.1e9b2fd18d91b42e390d13e9beb6978cp-1, + -0x1.040p-1 + }, + { // Entry 108 + 0x1.0841776c420d4707689f45329a9bf2cep-7, + 0x1.084p-7 + }, + { // Entry 109 + -0x1.0841776c420d4707689f45329a9bf2cep-7, + -0x1.084p-7 + }, + { // Entry 110 + 0x1.37ed416dfaf6747b307bee589157fe93p-1, + 0x1.1650efedb9eb2p-1 + }, + { // Entry 111 + -0x1.37ed416dfaf6747b307bee589157fe93p-1, + -0x1.1650efedb9eb2p-1 + }, + { // Entry 112 + 0x1.45e1141a8c00e0b0eb767eb3382f20b8p-1, + 0x1.1ffffffffffffp-1 + }, + { // Entry 113 + -0x1.45e1141a8c00e0b0eb767eb3382f20b8p-1, + -0x1.1ffffffffffffp-1 + }, + { // Entry 114 + 0x1.45e1141a8c00f818c85ab35ce89683a2p-1, + 0x1.2p-1 + }, + { // Entry 115 + -0x1.45e1141a8c00f818c85ab35ce89683a2p-1, + -0x1.2p-1 + }, + { // Entry 116 + 0x1.2e223119d32f870a129b78a196ee4c8dp-7, + 0x1.2e2p-7 + }, + { // Entry 117 + -0x1.2e223119d32f870a129b78a196ee4c8dp-7, + -0x1.2e2p-7 + }, + { // Entry 118 + 0x1.600c9c6f70efcd85cd16189ee688ead0p-1, + 0x1.316p-1 + }, + { // Entry 119 + -0x1.600c9c6f70efcd85cd16189ee688ead0p-1, + -0x1.316p-1 + }, + { // Entry 120 + 0x1.3b5afc2b8cfd87f655c91414c5969d60p-2, + 0x1.31cp-2 + }, + { // Entry 121 + -0x1.3b5afc2b8cfd87f655c91414c5969d60p-2, + -0x1.31cp-2 + }, + { // Entry 122 + 0x1.62e4307128100800001f7881babc44f3p-1, + 0x1.3333338617529p-1 + }, + { // Entry 123 + -0x1.62e4307128100800001f7881babc44f3p-1, + -0x1.3333338617529p-1 + }, + { // Entry 124 + 0x1.33aef545bb20968537b09375e6d5c60ap-7, + 0x1.33aca4ae2b081p-7 + }, + { // Entry 125 + -0x1.33aef545bb20968537b09375e6d5c60ap-7, + -0x1.33aca4ae2b081p-7 + }, + { // Entry 126 + 0x1.9c5cfbb889a7419fe7705e893b99fbb5p-1, + 0x1.5586ad8669418p-1 + }, + { // Entry 127 + -0x1.9c5cfbb889a7419fe7705e893b99fbb5p-1, + -0x1.5586ad8669418p-1 + }, + { // Entry 128 + 0x1.9d5e0765d3182e417e4d91808f30b95fp-1, + 0x1.56152a51dda72p-1 + }, + { // Entry 129 + -0x1.9d5e0765d3182e417e4d91808f30b95fp-1, + -0x1.56152a51dda72p-1 + }, + { // Entry 130 + 0x1.9d783af9f97bce33bd221a9954befb0cp-1, + 0x1.5623ab271fa52p-1 + }, + { // Entry 131 + -0x1.9d783af9f97bce33bd221a9954befb0cp-1, + -0x1.5623ab271fa52p-1 + }, + { // Entry 132 + 0x1.56a0f0b4476de80270a6332ff4450533p-5, + 0x1.566dd4892fab9p-5 + }, + { // Entry 133 + -0x1.56a0f0b4476de80270a6332ff4450533p-5, + -0x1.566dd4892fab9p-5 + }, + { // Entry 134 + 0x1.5db43aa0e3e55fffa5ad9886e8f22cb8p-3, + 0x1.5a582cdc4e9d4p-3 + }, + { // Entry 135 + -0x1.5db43aa0e3e55fffa5ad9886e8f22cb8p-3, + -0x1.5a582cdc4e9d4p-3 + }, + { // Entry 136 + 0x1.ab9dfa0ec89b8247c03f70d6fccdfd66p-1, + 0x1.5dd34e7af8d61p-1 + }, + { // Entry 137 + -0x1.ab9dfa0ec89b8247c03f70d6fccdfd66p-1, + -0x1.5dd34e7af8d61p-1 + }, + { // Entry 138 + 0x1.67a648e5b16c6a6999d9665a8c288d27p-8, + 0x1.67a55c49aa5d6p-8 + }, + { // Entry 139 + -0x1.67a648e5b16c6a6999d9665a8c288d27p-8, + -0x1.67a55c49aa5d6p-8 + }, + { // Entry 140 + 0x1.7b57ee7bea57a7fcebaaea6f557706c2p-2, + 0x1.6ae491f70c7cbp-2 + }, + { // Entry 141 + -0x1.7b57ee7bea57a7fcebaaea6f557706c2p-2, + -0x1.6ae491f70c7cbp-2 + }, + { // Entry 142 + 0x1.7222b50fd4f8ce0954e89313933bded3p-3, + 0x1.6e2856e2856f5p-3 + }, + { // Entry 143 + -0x1.7222b50fd4f8ce0954e89313933bded3p-3, + -0x1.6e2856e2856f5p-3 + }, + { // Entry 144 + 0x1.cf6347191f5b5aba22dc8400fa882ceep-1, + 0x1.7p-1 + }, + { // Entry 145 + -0x1.cf6347191f5b5aba22dc8400fa882ceep-1, + -0x1.7p-1 + }, + { // Entry 146 + 0x1.83916f868284f882ad9463d174a59d97p-2, + 0x1.721060c1a73cep-2 + }, + { // Entry 147 + -0x1.83916f868284f882ad9463d174a59d97p-2, + -0x1.721060c1a73cep-2 + }, + { // Entry 148 + 0x1.85e0806e8e13b7fcc08479529c8104e6p-2, + 0x1.7411d463bfe90p-2 + }, + { // Entry 149 + -0x1.85e0806e8e13b7fcc08479529c8104e6p-2, + -0x1.7411d463bfe90p-2 + }, + { // Entry 150 + 0x1.f2272af46bbe08000012b87d08e7932fp-1, + 0x1.800000078eaacp-1 + }, + { // Entry 151 + -0x1.f2272af46bbe08000012b87d08e7932fp-1, + -0x1.800000078eaacp-1 + }, + { // Entry 152 + 0x1.f2272af46bbf0800001fad0fd766e8cfp-1, + 0x1.800000078eab3p-1 + }, + { // Entry 153 + -0x1.f2272af46bbf0800001fad0fd766e8cfp-1, + -0x1.800000078eab3p-1 + }, + { // Entry 154 + 0x1.83e4a353f34f3562d9d23f45dc8b2e29p-7, + 0x1.83ep-7 + }, + { // Entry 155 + -0x1.83e4a353f34f3562d9d23f45dc8b2e29p-7, + -0x1.83ep-7 + }, + { // Entry 156 + 0x1.89b541d1b39fa30a054d69c38ffbdb5ep-4, + 0x1.888p-4 + }, + { // Entry 157 + -0x1.89b541d1b39fa30a054d69c38ffbdb5ep-4, + -0x1.888p-4 + }, + { // Entry 158 + 0x1.8a08c32ee13cd9422b9ad12f398f50bbp-8, + 0x1.8a078c03f8dcep-8 + }, + { // Entry 159 + -0x1.8a08c32ee13cd9422b9ad12f398f50bbp-8, + -0x1.8a078c03f8dcep-8 + }, + { // Entry 160 + 0x1.946669a6bba909c4bc5da852e75a3d66p-8, + 0x1.9465194651941p-8 + }, + { // Entry 161 + -0x1.946669a6bba909c4bc5da852e75a3d66p-8, + -0x1.9465194651941p-8 + }, + { // Entry 162 + 0x1.9c7d184ac6505eee21ace6732a52730cp-3, + 0x1.970p-3 + }, + { // Entry 163 + -0x1.9c7d184ac6505eee21ace6732a52730cp-3, + -0x1.970p-3 + }, + { // Entry 164 + 0x1.98da3c40000e9801ec829a13899425ecp-4, + 0x1.978p-4 + }, + { // Entry 165 + -0x1.98da3c40000e9801ec829a13899425ecp-4, + -0x1.978p-4 + }, + { // Entry 166 + 0x1.9af93cdc56240000000fff41a04220ffp-4, + 0x1.999999a3a18c2p-4 + }, + { // Entry 167 + -0x1.9af93cdc56240000000fff41a04220ffp-4, + -0x1.999999a3a18c2p-4 + }, + { // Entry 168 + 0x1.9af93cdc566f000000197f297a13895cp-4, + 0x1.999999a3a1d66p-4 + }, + { // Entry 169 + -0x1.9af93cdc566f000000197f297a13895cp-4, + -0x1.999999a3a1d66p-4 + }, + { // Entry 170 + 0x1.193ea7fa8d771fffffe6de660aab4045p0, + 0x1.999999d303287p-1 + }, + { // Entry 171 + -0x1.193ea7fa8d771fffffe6de660aab4045p0, + -0x1.999999d303287p-1 + }, + { // Entry 172 + 0x1.9af93d0c9ef7d80000017b97c0c0930cp-4, + 0x1.999999d36ec44p-4 + }, + { // Entry 173 + -0x1.9af93d0c9ef7d80000017b97c0c0930cp-4, + -0x1.999999d36ec44p-4 + }, + { // Entry 174 + 0x1.9f323f7638726800001eda3701a5c338p-3, + 0x1.99999a3d09361p-3 + }, + { // Entry 175 + -0x1.9f323f7638726800001eda3701a5c338p-3, + -0x1.99999a3d09361p-3 + }, + { // Entry 176 + 0x1.9f323fd47175b7ffffe05fbf960efc6ap-3, + 0x1.99999a977d623p-3 + }, + { // Entry 177 + -0x1.9f323fd47175b7ffffe05fbf960efc6ap-3, + -0x1.99999a977d623p-3 + }, + { // Entry 178 + 0x1.9f323fe10c9a1800001efbbe0bb48ebbp-3, + 0x1.99999aa39770ap-3 + }, + { // Entry 179 + -0x1.9f323fe10c9a1800001efbbe0bb48ebbp-3, + -0x1.99999aa39770ap-3 + }, + { // Entry 180 + 0x1.9a179be1e7a6e801a0cbc1770ccc0691p-5, + 0x1.99cp-5 + }, + { // Entry 181 + -0x1.9a179be1e7a6e801a0cbc1770ccc0691p-5, + -0x1.99cp-5 + }, + { // Entry 182 + 0x1.a5256971dc6e440698f25410f9a508ffp-10, + 0x1.a52551b31353cp-10 + }, + { // Entry 183 + -0x1.a5256971dc6e440698f25410f9a508ffp-10, + -0x1.a52551b31353cp-10 + }, + { // Entry 184 + 0x1.ad6df00c82cd92c93177514dd245567bp-24, + 0x1.ad6df00c82cc0p-24 + }, + { // Entry 185 + -0x1.ad6df00c82cd92c93177514dd245567bp-24, + -0x1.ad6df00c82cc0p-24 + }, + { // Entry 186 + 0x1.aec648950aa9b6160bf45bf45b2ce0bep-8, + 0x1.aec4b201aa53bp-8 + }, + { // Entry 187 + -0x1.aec648950aa9b6160bf45bf45b2ce0bep-8, + -0x1.aec4b201aa53bp-8 + }, + { // Entry 188 + 0x1.b6cabb35f338f7fb83223470c9fbfb09p-3, + 0x1.b032e138a539dp-3 + }, + { // Entry 189 + -0x1.b6cabb35f338f7fb83223470c9fbfb09p-3, + -0x1.b032e138a539dp-3 + }, + { // Entry 190 + 0x1.d6f4c64bee95d884b07a53fe12d571f4p-2, + 0x1.b85680001c332p-2 + }, + { // Entry 191 + -0x1.d6f4c64bee95d884b07a53fe12d571f4p-2, + -0x1.b85680001c332p-2 + }, + { // Entry 192 + 0x1.c184b5fbed8192fa453d4d9c1577a9e3p-10, + 0x1.c184991bf2fp-10 + }, + { // Entry 193 + -0x1.c184b5fbed8192fa453d4d9c1577a9e3p-10, + -0x1.c184991bf2fp-10 + }, + { // Entry 194 + 0x1.e71d3517d3e01b42d5dae4c3aaf70503p-2, + 0x1.c56b0b96cdf91p-2 + }, + { // Entry 195 + -0x1.e71d3517d3e01b42d5dae4c3aaf70503p-2, + -0x1.c56b0b96cdf91p-2 + }, + { // Entry 196 + 0x1.c5e0000001db8fffed2e2b94fd54870dp-20, + 0x1.c5ep-20 + }, + { // Entry 197 + -0x1.c5e0000001db8fffed2e2b94fd54870dp-20, + -0x1.c5ep-20 + }, + { // Entry 198 + 0x1.f055451fb359e7fffffbe5195d4377e8p-2, + 0x1.ccccccd660083p-2 + }, + { // Entry 199 + -0x1.f055451fb359e7fffffbe5195d4377e8p-2, + -0x1.ccccccd660083p-2 + }, + { // Entry 200 + 0x1.f1c704e1f3c8a800b71131c90e193596p-2, + 0x1.cdf37cdf37cd9p-2 + }, + { // Entry 201 + -0x1.f1c704e1f3c8a800b71131c90e193596p-2, + -0x1.cdf37cdf37cd9p-2 + }, + { // Entry 202 + 0x1.d00a0587151948029cb1fb36b2a24903p-5, + 0x1.cf8b2052bbb11p-5 + }, + { // Entry 203 + -0x1.d00a0587151948029cb1fb36b2a24903p-5, + -0x1.cf8b2052bbb11p-5 + }, + { // Entry 204 + 0x1.f4656a69bea6d733e8f3dfaec12111c3p-2, + 0x1.d008d55f75360p-2 + }, + { // Entry 205 + -0x1.f4656a69bea6d733e8f3dfaec12111c3p-2, + -0x1.d008d55f75360p-2 + }, + { // Entry 206 + 0x1.d0cad6adc9a0c837bbecea984e9019d7p-5, + 0x1.d04b532bd5b41p-5 + }, + { // Entry 207 + -0x1.d0cad6adc9a0c837bbecea984e9019d7p-5, + -0x1.d04b532bd5b41p-5 + }, + { // Entry 208 + 0x1.f62f40794a7b089973231ae614553eb0p-2, + 0x1.d1745d1745d11p-2 + }, + { // Entry 209 + -0x1.f62f40794a7b089973231ae614553eb0p-2, + -0x1.d1745d1745d11p-2 + }, + { // Entry 210 + 0x1.d1c00000008077fe5d003fc8ce63e4a4p-21, + 0x1.d1cp-21 + }, + { // Entry 211 + -0x1.d1c00000008077fe5d003fc8ce63e4a4p-21, + -0x1.d1cp-21 + }, + { // Entry 212 + 0x1.f6beddb6ec29b749a9e4a3f67a36b414p-2, + 0x1.d1e646f156570p-2 + }, + { // Entry 213 + -0x1.f6beddb6ec29b749a9e4a3f67a36b414p-2, + -0x1.d1e646f156570p-2 + }, + { // Entry 214 + 0x1.fabc7c84166033eb57a453fd83585dc8p-2, + 0x1.d50efa205a174p-2 + }, + { // Entry 215 + -0x1.fabc7c84166033eb57a453fd83585dc8p-2, + -0x1.d50efa205a174p-2 + }, + { // Entry 216 + 0x1.d62f43b4c2c737fdd232cf2e299076f7p-11, + 0x1.d62f3b71fca8cp-11 + }, + { // Entry 217 + -0x1.d62f43b4c2c737fdd232cf2e299076f7p-11, + -0x1.d62f3b71fca8cp-11 + }, + { // Entry 218 + 0x1.e3a4b468f251480a6049e3fe17b89646p-5, + 0x1.e3150daedb476p-5 + }, + { // Entry 219 + -0x1.e3a4b468f251480a6049e3fe17b89646p-5, + -0x1.e3150daedb476p-5 + }, + { // Entry 220 + 0x1.e68e0c2de6d2280c8a117c4d61d8f42fp-5, + 0x1.e5fbc9eecbdaep-5 + }, + { // Entry 221 + -0x1.e68e0c2de6d2280c8a117c4d61d8f42fp-5, + -0x1.e5fbc9eecbdaep-5 + }, + { // Entry 222 + 0x1.e9de86e8fd3be801a9f830844ba5e501p-5, + 0x1.e9494303cd80fp-5 + }, + { // Entry 223 + -0x1.e9de86e8fd3be801a9f830844ba5e501p-5, + -0x1.e9494303cd80fp-5 + }, + { // Entry 224 + 0x1.edbcc82a00a4c001e7ac01891849800ep-5, + 0x1.ed23f4c89da70p-5 + }, + { // Entry 225 + -0x1.edbcc82a00a4c001e7ac01891849800ep-5, + -0x1.ed23f4c89da70p-5 + }, + { // Entry 226 + 0x1.fa0dc9d7131fee2b38ba993a65f82a06p-3, + 0x1.effffffffffffp-3 + }, + { // Entry 227 + -0x1.fa0dc9d7131fee2b38ba993a65f82a06p-3, + -0x1.effffffffffffp-3 + }, + { // Entry 228 + 0x1.f37429af961a9824754b77a1b593d39ap-4, + 0x1.f0fe3530f7239p-4 + }, + { // Entry 229 + -0x1.f37429af961a9824754b77a1b593d39ap-4, + -0x1.f0fe3530f7239p-4 + }, + { // Entry 230 + 0x1.f37429af961ab89edde6f4ae74375a06p-4, + 0x1.f0fe3530f723bp-4 + }, + { // Entry 231 + -0x1.f37429af961ab89edde6f4ae74375a06p-4, + -0x1.f0fe3530f723bp-4 + }, + { // Entry 232 + 0x1.f37429af961ac8dc1234b334d38f1d1bp-4, + 0x1.f0fe3530f723cp-4 + }, + { // Entry 233 + -0x1.f37429af961ac8dc1234b334d38f1d1bp-4, + -0x1.f0fe3530f723cp-4 + }, + { // Entry 234 + 0x1.f37429af962b268ac88eb6a2f4026151p-4, + 0x1.f0fe3530f733ep-4 + }, + { // Entry 235 + -0x1.f37429af962b268ac88eb6a2f4026151p-4, + -0x1.f0fe3530f733ep-4 + }, + { // Entry 236 + 0x1.f1e9c43b21348857c7e465e46799dce1p-5, + 0x1.f14d08c7109aap-5 + }, + { // Entry 237 + -0x1.f1e9c43b21348857c7e465e46799dce1p-5, + -0x1.f14d08c7109aap-5 + }, + { // Entry 238 + 0x1.f90b42375a486a39cdf9b2ccf2824fecp-4, + 0x1.f68p-4 + }, + { // Entry 239 + -0x1.f90b42375a486a39cdf9b2ccf2824fecp-4, + -0x1.f68p-4 + }, + { // Entry 240 + 0x1.f72a153ff7688808c896dd6ffe6516d4p-5, + 0x1.f688582bdf450p-5 + }, + { // Entry 241 + -0x1.f72a153ff7688808c896dd6ffe6516d4p-5, + -0x1.f688582bdf450p-5 + }, + { // Entry 242 + 0x1.f7e703f1db06e802f9321fd5e2394e07p-5, + 0x1.f744909706414p-5 + }, + { // Entry 243 + -0x1.f7e703f1db06e802f9321fd5e2394e07p-5, + -0x1.f744909706414p-5 + }, + { // Entry 244 + 0x1.340af764783edfffac199b0ebf01c362p1, + 0x1.f7cp-1 + }, + { // Entry 245 + -0x1.340af764783edfffac199b0ebf01c362p1, + -0x1.f7cp-1 + }, + { // Entry 246 + 0x1.fa24a006fb7277fe99107e535f1488d7p-5, + 0x1.f98p-5 + }, + { // Entry 247 + -0x1.fa24a006fb7277fe99107e535f1488d7p-5, + -0x1.f98p-5 + }, + { // Entry 248 + 0x1.fabe9384d8eb28030d5306c1d38ffe3cp-5, + 0x1.fa195d3f2824ap-5 + }, + { // Entry 249 + -0x1.fabe9384d8eb28030d5306c1d38ffe3cp-5, + -0x1.fa195d3f2824ap-5 + }, + { // Entry 250 + 0x1.fac53cc7f51a2825f03615ff2011a3f4p-5, + 0x1.fa2p-5 + }, + { // Entry 251 + -0x1.fac53cc7f51a2825f03615ff2011a3f4p-5, + -0x1.fa2p-5 + }, + { // Entry 252 + 0x1.fca715610d4c584a721b2c19e6223c63p-5, + 0x1.fbfffffffffffp-5 + }, + { // Entry 253 + -0x1.fca715610d4c584a721b2c19e6223c63p-5, + -0x1.fbfffffffffffp-5 + }, + { // Entry 254 + 0x1.ff2303e94a6fa776b99fdcdac342443dp-4, + 0x1.fc7ffffffffffp-4 + }, + { // Entry 255 + -0x1.ff2303e94a6fa776b99fdcdac342443dp-4, + -0x1.fc7ffffffffffp-4 + }, + { // Entry 256 + 0x1.fcca7762322a195ec28591033e93e55bp-7, + 0x1.fccp-7 + }, + { // Entry 257 + -0x1.fcca7762322a195ec28591033e93e55bp-7, + -0x1.fccp-7 + }, + { // Entry 258 + 0x1.fde34e5e71112802cd5dc4e1fb2d0640p-5, + 0x1.fd3b00ef28dc9p-5 + }, + { // Entry 259 + -0x1.fde34e5e71112802cd5dc4e1fb2d0640p-5, + -0x1.fd3b00ef28dc9p-5 + }, + { // Entry 260 + 0x1.fd5da51e6bee9b019e62cd796699df5cp-8, + 0x1.fd5b04f37a8adp-8 + }, + { // Entry 261 + -0x1.fd5da51e6bee9b019e62cd796699df5cp-8, + -0x1.fd5b04f37a8adp-8 + }, + { // Entry 262 + 0x1.ff08b9b3981768022e66dd42cd419f4cp-9, + 0x1.ff080ffffffffp-9 + }, + { // Entry 263 + -0x1.ff08b9b3981768022e66dd42cd419f4cp-9, + -0x1.ff080ffffffffp-9 + }, + { // Entry 264 + 0x1.ff782a88ba0fba00f908e16f051a1810p-10, + 0x1.ff77fffffffffp-10 + }, + { // Entry 265 + -0x1.ff782a88ba0fba00f908e16f051a1810p-10, + -0x1.ff77fffffffffp-10 + }, + { // Entry 266 + 0x1.0154818928eb11132905352501826af5p-3, + 0x1.fff7fffffffffp-4 + }, + { // Entry 267 + -0x1.0154818928eb11132905352501826af5p-3, + -0x1.fff7fffffffffp-4 + }, + { // Entry 268 + 0x1.fffca6a70d15564482dc93a139764e2dp-9, + 0x1.fffbfbfffffffp-9 + }, + { // Entry 269 + -0x1.fffca6a70d15564482dc93a139764e2dp-9, + -0x1.fffbfbfffffffp-9 + }, + { // Entry 270 + 0x1.0157cebdbc7ecff56d936def2dc90848p-3, + 0x1.fffe7ffffffffp-4 + }, + { // Entry 271 + -0x1.0157cebdbc7ecff56d936def2dc90848p-3, + -0x1.fffe7ffffffffp-4 + }, + { // Entry 272 + 0x1.ffff2aaa70e11229a646c3ea214d5c6bp-10, + 0x1.fffeffffffcffp-10 + }, + { // Entry 273 + -0x1.ffff2aaa70e11229a646c3ea214d5c6bp-10, + -0x1.fffeffffffcffp-10 + }, + { // Entry 274 + 0x1.fe849ae4ae0948fc35cd560fe0f7a64fp2, + 0x1.fffff8170432cp-1 + }, + { // Entry 275 + -0x1.fe849ae4ae0948fc35cd560fe0f7a64fp2, + -0x1.fffff8170432cp-1 + }, + { // Entry 276 + 0x1.fe8636119def0727f0b21ad8da17b705p2, + 0x1.fffff81769d3bp-1 + }, + { // Entry 277 + -0x1.fe8636119def0727f0b21ad8da17b705p2, + -0x1.fffff81769d3bp-1 + }, + { // Entry 278 + 0x1.feab0f8d089237326f5246ce7822ddcap2, + 0x1.fffff8207ffffp-1 + }, + { // Entry 279 + -0x1.feab0f8d089237326f5246ce7822ddcap2, + -0x1.fffff8207ffffp-1 + }, + { // Entry 280 + 0x1.fffffbc002aa9a99aab134f0ccf89dcfp-20, + 0x1.fffffbbffffffp-20 + }, + { // Entry 281 + -0x1.fffffbc002aa9a99aab134f0ccf89dcfp-20, + -0x1.fffffbbffffffp-20 + }, + { // Entry 282 + 0x1.38aa9bbc81de80372da066273e181f3dp3, + 0x1.ffffffc7fffffp-1 + }, + { // Entry 283 + -0x1.38aa9bbc81de80372da066273e181f3dp3, + -0x1.ffffffc7fffffp-1 + }, + { // Entry 284 + 0x1.a791d873bcf1ef6cc589b55be94c11ccp3, + 0x1.fffffffff1fffp-1 + }, + { // Entry 285 + -0x1.a791d873bcf1ef6cc589b55be94c11ccp3, + -0x1.fffffffff1fffp-1 + }, + { // Entry 286 + 0x1.048fa31ec6a076cfd26abb456c9e863ap4, + 0x1.fffffffffff7fp-1 + }, + { // Entry 287 + -0x1.048fa31ec6a076cfd26abb456c9e863ap4, + -0x1.fffffffffff7fp-1 + }, + { // Entry 288 + 0x1.ffffffffffff8aaaaaaaaaa9f1111111p-25, + 0x1.fffffffffffeep-25 + }, + { // Entry 289 + -0x1.ffffffffffff8aaaaaaaaaa9f1111111p-25, + -0x1.fffffffffffeep-25 + }, + { // Entry 290 + -0x1.31dd28c89d64f3513ea98f014ae7630cp1, + -0x1.f777777777777p-1 + }, + { // Entry 291 + 0x1.31dd28c89d64f3513ea98f014ae7630cp1, + 0x1.f777777777777p-1 + }, + { // Entry 292 + -0x1.04f65f9c7297527749382883b8e88e33p1, + -0x1.eeeeeeeeeeeeep-1 + }, + { // Entry 293 + 0x1.04f65f9c7297527749382883b8e88e33p1, + 0x1.eeeeeeeeeeeeep-1 + }, + { // Entry 294 + -0x1.d4ef968880dcf1c48bf6d707008e71a0p0, + -0x1.e666666666665p-1 + }, + { // Entry 295 + 0x1.d4ef968880dcf1c48bf6d707008e71a0p0, + 0x1.e666666666665p-1 + }, + { // Entry 296 + -0x1.af038cbcdfe177f9b97cb13acb6a1d56p0, + -0x1.ddddddddddddcp-1 + }, + { // Entry 297 + 0x1.af038cbcdfe177f9b97cb13acb6a1d56p0, + 0x1.ddddddddddddcp-1 + }, + { // Entry 298 + -0x1.9157dfdd1b3e8bb2bc8c94b692c36c8bp0, + -0x1.d555555555553p-1 + }, + { // Entry 299 + 0x1.9157dfdd1b3e8bb2bc8c94b692c36c8bp0, + 0x1.d555555555553p-1 + }, + { // Entry 300 + -0x1.78e360604b32513afa302dd9090f54afp0, + -0x1.ccccccccccccap-1 + }, + { // Entry 301 + 0x1.78e360604b32513afa302dd9090f54afp0, + 0x1.ccccccccccccap-1 + }, + { // Entry 302 + -0x1.640775d4dd98457b36fb7ce98ec43308p0, + -0x1.c444444444441p-1 + }, + { // Entry 303 + 0x1.640775d4dd98457b36fb7ce98ec43308p0, + 0x1.c444444444441p-1 + }, + { // Entry 304 + -0x1.51cca16d7bb9ff79603c2533c5c76b7ap0, + -0x1.bbbbbbbbbbbb8p-1 + }, + { // Entry 305 + 0x1.51cca16d7bb9ff79603c2533c5c76b7ap0, + 0x1.bbbbbbbbbbbb8p-1 + }, + { // Entry 306 + -0x1.41933b0e446305a96ace1bc262cdee99p0, + -0x1.b33333333332fp-1 + }, + { // Entry 307 + 0x1.41933b0e446305a96ace1bc262cdee99p0, + 0x1.b33333333332fp-1 + }, + { // Entry 308 + -0x1.32ee3b77f374414d3a29141080dfabeap0, + -0x1.aaaaaaaaaaaa6p-1 + }, + { // Entry 309 + 0x1.32ee3b77f374414d3a29141080dfabeap0, + 0x1.aaaaaaaaaaaa6p-1 + }, + { // Entry 310 + -0x1.258fdae8372b9231a664ea76c9d6586fp0, + -0x1.a22222222221dp-1 + }, + { // Entry 311 + 0x1.258fdae8372b9231a664ea76c9d6586fp0, + 0x1.a22222222221dp-1 + }, + { // Entry 312 + -0x1.193ea7aad0302d04dcfd1b8e192ed85dp0, + -0x1.9999999999994p-1 + }, + { // Entry 313 + 0x1.193ea7aad0302d04dcfd1b8e192ed85dp0, + 0x1.9999999999994p-1 + }, + { // Entry 314 + -0x1.0dcefea4d025e0b8d09052e46fdf4f2ep0, + -0x1.911111111110bp-1 + }, + { // Entry 315 + 0x1.0dcefea4d025e0b8d09052e46fdf4f2ep0, + 0x1.911111111110bp-1 + }, + { // Entry 316 + -0x1.031ef11090f771d990e41e47d30913d6p0, + -0x1.8888888888882p-1 + }, + { // Entry 317 + 0x1.031ef11090f771d990e41e47d30913d6p0, + 0x1.8888888888882p-1 + }, + { // Entry 318 + -0x1.f2272ae325a47546f69496cf861be046p-1, + -0x1.7fffffffffff9p-1 + }, + { // Entry 319 + 0x1.f2272ae325a47546f69496cf861be046p-1, + 0x1.7fffffffffff9p-1 + }, + { // Entry 320 + -0x1.df2e6d6e5fb9a3aede73b55578f55672p-1, + -0x1.7777777777770p-1 + }, + { // Entry 321 + 0x1.df2e6d6e5fb9a3aede73b55578f55672p-1, + 0x1.7777777777770p-1 + }, + { // Entry 322 + -0x1.cd302116f50ababc40c132419e1dab2ap-1, + -0x1.6eeeeeeeeeee7p-1 + }, + { // Entry 323 + 0x1.cd302116f50ababc40c132419e1dab2ap-1, + 0x1.6eeeeeeeeeee7p-1 + }, + { // Entry 324 + -0x1.bc0ed0947fbd88e1ba52723b57950592p-1, + -0x1.666666666665ep-1 + }, + { // Entry 325 + 0x1.bc0ed0947fbd88e1ba52723b57950592p-1, + 0x1.666666666665ep-1 + }, + { // Entry 326 + -0x1.abb1c9065825972aaaf3d164ca1f5323p-1, + -0x1.5ddddddddddd5p-1 + }, + { // Entry 327 + 0x1.abb1c9065825972aaaf3d164ca1f5323p-1, + 0x1.5ddddddddddd5p-1 + }, + { // Entry 328 + -0x1.9c041f7ed8d229e312aad84998a0e008p-1, + -0x1.555555555554cp-1 + }, + { // Entry 329 + 0x1.9c041f7ed8d229e312aad84998a0e008p-1, + 0x1.555555555554cp-1 + }, + { // Entry 330 + -0x1.8cf3f3b791739ba35824b20bb67bc051p-1, + -0x1.4ccccccccccc3p-1 + }, + { // Entry 331 + 0x1.8cf3f3b791739ba35824b20bb67bc051p-1, + 0x1.4ccccccccccc3p-1 + }, + { // Entry 332 + -0x1.7e71ded66460614d3cfeeae5195853fdp-1, + -0x1.444444444443ap-1 + }, + { // Entry 333 + 0x1.7e71ded66460614d3cfeeae5195853fdp-1, + 0x1.444444444443ap-1 + }, + { // Entry 334 + -0x1.7070827f1c7ee9fc23eb09099495f760p-1, + -0x1.3bbbbbbbbbbb1p-1 + }, + { // Entry 335 + 0x1.7070827f1c7ee9fc23eb09099495f760p-1, + 0x1.3bbbbbbbbbbb1p-1 + }, + { // Entry 336 + -0x1.62e42fefa39ddb5793c7673063c5ed5ep-1, + -0x1.3333333333328p-1 + }, + { // Entry 337 + 0x1.62e42fefa39ddb5793c7673063c5ed5ep-1, + 0x1.3333333333328p-1 + }, + { // Entry 338 + -0x1.55c2a141bd913c9da91e9ba97d84ef42p-1, + -0x1.2aaaaaaaaaa9fp-1 + }, + { // Entry 339 + 0x1.55c2a141bd913c9da91e9ba97d84ef42p-1, + 0x1.2aaaaaaaaaa9fp-1 + }, + { // Entry 340 + -0x1.4902c08bec8b8d6ba2debcee67107aa5p-1, + -0x1.2222222222216p-1 + }, + { // Entry 341 + 0x1.4902c08bec8b8d6ba2debcee67107aa5p-1, + 0x1.2222222222216p-1 + }, + { // Entry 342 + -0x1.3c9c79bc8508ca2d5b90a842ee7edfa3p-1, + -0x1.199999999998dp-1 + }, + { // Entry 343 + 0x1.3c9c79bc8508ca2d5b90a842ee7edfa3p-1, + 0x1.199999999998dp-1 + }, + { // Entry 344 + -0x1.308894d710d767af349ad5664f91afbcp-1, + -0x1.1111111111104p-1 + }, + { // Entry 345 + 0x1.308894d710d767af349ad5664f91afbcp-1, + 0x1.1111111111104p-1 + }, + { // Entry 346 + -0x1.24c096cf976a96087c1335628fdc0098p-1, + -0x1.088888888887bp-1 + }, + { // Entry 347 + 0x1.24c096cf976a96087c1335628fdc0098p-1, + 0x1.088888888887bp-1 + }, + { // Entry 348 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.0p-1 + }, + { // Entry 349 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.0p-1 + }, + { // Entry 350 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.0p-1 + }, + { // Entry 351 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.0p-1 + }, + { // Entry 352 + 0x1.24c096cf976bc79a7ab78995d36b066bp-1, + 0x1.0888888888889p-1 + }, + { // Entry 353 + -0x1.24c096cf976bc79a7ab78995d36b066bp-1, + -0x1.0888888888889p-1 + }, + { // Entry 354 + 0x1.308894d710d8a0ba55ff01eb87cbc220p-1, + 0x1.1111111111112p-1 + }, + { // Entry 355 + -0x1.308894d710d8a0ba55ff01eb87cbc220p-1, + -0x1.1111111111112p-1 + }, + { // Entry 356 + 0x1.3c9c79bc850a0b52fa4dacd910d12a32p-1, + 0x1.199999999999bp-1 + }, + { // Entry 357 + -0x1.3c9c79bc850a0b52fa4dacd910d12a32p-1, + -0x1.199999999999bp-1 + }, + { // Entry 358 + 0x1.4902c08bec8cd75f11102da30f1f78d7p-1, + 0x1.2222222222224p-1 + }, + { // Entry 359 + -0x1.4902c08bec8cd75f11102da30f1f78d7p-1, + -0x1.2222222222224p-1 + }, + { // Entry 360 + 0x1.55c2a141bd929027179a90e1bcdc1a2dp-1, + 0x1.2aaaaaaaaaaadp-1 + }, + { // Entry 361 + -0x1.55c2a141bd929027179a90e1bcdc1a2dp-1, + -0x1.2aaaaaaaaaaadp-1 + }, + { // Entry 362 + 0x1.62e42fefa39f395793c767300da3ed5ep-1, + 0x1.3333333333336p-1 + }, + { // Entry 363 + -0x1.62e42fefa39f395793c767300da3ed5ep-1, + -0x1.3333333333336p-1 + }, + { // Entry 364 + 0x1.7070827f1c80536feb7673dd88b946ecp-1, + 0x1.3bbbbbbbbbbbfp-1 + }, + { // Entry 365 + -0x1.7070827f1c80536feb7673dd88b946ecp-1, + -0x1.3bbbbbbbbbbbfp-1 + }, + { // Entry 366 + 0x1.7e71ded66461d753e33ac2ff618644e0p-1, + 0x1.4444444444448p-1 + }, + { // Entry 367 + -0x1.7e71ded66461d753e33ac2ff618644e0p-1, + -0x1.4444444444448p-1 + }, + { // Entry 368 + 0x1.8cf3f3b791751f845062c18f4b0d7fe7p-1, + 0x1.4ccccccccccd1p-1 + }, + { // Entry 369 + -0x1.8cf3f3b791751f845062c18f4b0d7fe7p-1, + -0x1.4ccccccccccd1p-1 + }, + { // Entry 370 + 0x1.9c041f7ed8d3bd1645de0b7c8544b713p-1, + 0x1.555555555555ap-1 + }, + { // Entry 371 + -0x1.9c041f7ed8d3bd1645de0b7c8544b713p-1, + -0x1.555555555555ap-1 + }, + { // Entry 372 + 0x1.abb1c90658273b62b26c47dabd2b16cap-1, + 0x1.5dddddddddde3p-1 + }, + { // Entry 373 + -0x1.abb1c90658273b62b26c47dabd2b16cap-1, + -0x1.5dddddddddde3p-1 + }, + { // Entry 374 + 0x1.bc0ed0947fbf4018f189a9725a0c8214p-1, + 0x1.666666666666cp-1 + }, + { // Entry 375 + -0x1.bc0ed0947fbf4018f189a9725a0c8214p-1, + -0x1.666666666666cp-1 + }, + { // Entry 376 + 0x1.cd302116f50c8745aed84bd751fb575cp-1, + 0x1.6eeeeeeeeeef5p-1 + }, + { // Entry 377 + -0x1.cd302116f50c8745aed84bd751fb575cp-1, + -0x1.6eeeeeeeeeef5p-1 + }, + { // Entry 378 + 0x1.df2e6d6e5fbb884c684c52df3b260c38p-1, + 0x1.777777777777ep-1 + }, + { // Entry 379 + -0x1.df2e6d6e5fbb884c684c52df3b260c38p-1, + -0x1.777777777777ep-1 + }, + { // Entry 380 + 0x1.f2272ae325a67546f69496cf861be046p-1, + 0x1.8000000000007p-1 + }, + { // Entry 381 + -0x1.f2272ae325a67546f69496cf861be046p-1, + -0x1.8000000000007p-1 + }, + { // Entry 382 + 0x1.031ef11090f8818c48703199fec1433ap0, + 0x1.8888888888890p-1 + }, + { // Entry 383 + -0x1.031ef11090f8818c48703199fec1433ap0, + -0x1.8888888888890p-1 + }, + { // Entry 384 + 0x1.0dcefea4d0270295d8d877b36ea1c0e3p0, + 0x1.9111111111119p-1 + }, + { // Entry 385 + -0x1.0dcefea4d0270295d8d877b36ea1c0e3p0, + -0x1.9111111111119p-1 + }, + { // Entry 386 + 0x1.193ea7aad03164214ec438001cc9b599p0, + 0x1.99999999999a2p-1 + }, + { // Entry 387 + -0x1.193ea7aad03164214ec438001cc9b599p0, + -0x1.99999999999a2p-1 + }, + { // Entry 388 + 0x1.258fdae8372ce27963c75835d46b66e6p0, + 0x1.a22222222222bp-1 + }, + { // Entry 389 + -0x1.258fdae8372ce27963c75835d46b66e6p0, + -0x1.a22222222222bp-1 + }, + { // Entry 390 + 0x1.32ee3b77f375afd8dd11ce3f9e4b9287p0, + 0x1.aaaaaaaaaaab4p-1 + }, + { // Entry 391 + -0x1.32ee3b77f375afd8dd11ce3f9e4b9287p0, + -0x1.aaaaaaaaaaab4p-1 + }, + { // Entry 392 + 0x1.41933b0e44649943f09224fce382c799p0, + 0x1.b33333333333dp-1 + }, + { // Entry 393 + -0x1.41933b0e44649943f09224fce382c799p0, + -0x1.b33333333333dp-1 + }, + { // Entry 394 + 0x1.51cca16d7bbbc179603c253505b36b7ap0, + 0x1.bbbbbbbbbbbc6p-1 + }, + { // Entry 395 + -0x1.51cca16d7bbbc179603c253505b36b7ap0, + -0x1.bbbbbbbbbbbc6p-1 + }, + { // Entry 396 + 0x1.640775d4dd9a4337400b58abfdea644fp0, + 0x1.c44444444444fp-1 + }, + { // Entry 397 + -0x1.640775d4dd9a4337400b58abfdea644fp0, + -0x1.c44444444444fp-1 + }, + { // Entry 398 + 0x1.78e360604b349eb43d8e7eb37a3c01b6p0, + 0x1.cccccccccccd8p-1 + }, + { // Entry 399 + -0x1.78e360604b349eb43d8e7eb37a3c01b6p0, + -0x1.cccccccccccd8p-1 + }, + { // Entry 400 + 0x1.9157dfdd1b4148ea63817356fc04c13bp0, + 0x1.d555555555561p-1 + }, + { // Entry 401 + -0x1.9157dfdd1b4148ea63817356fc04c13bp0, + -0x1.d555555555561p-1 + }, + { // Entry 402 + 0x1.af038cbcdfe4dcf0e5a000b57077d005p0, + 0x1.dddddddddddeap-1 + }, + { // Entry 403 + -0x1.af038cbcdfe4dcf0e5a000b57077d005p0, + -0x1.dddddddddddeap-1 + }, + { // Entry 404 + 0x1.d4ef968880e16e7c57738ee1cab27657p0, + 0x1.e666666666673p-1 + }, + { // Entry 405 + -0x1.d4ef968880e16e7c57738ee1cab27657p0, + -0x1.e666666666673p-1 + }, + { // Entry 406 + 0x1.04f65f9c729aa8b4082276b069b6c479p1, + 0x1.eeeeeeeeeeefcp-1 + }, + { // Entry 407 + -0x1.04f65f9c729aa8b4082276b069b6c479p1, + -0x1.eeeeeeeeeeefcp-1 + }, + { // Entry 408 + 0x1.31dd28c89d64f3513ea98f014ae7630cp1, + 0x1.f777777777777p-1 + }, + { // Entry 409 + -0x1.31dd28c89d64f3513ea98f014ae7630cp1, + -0x1.f777777777777p-1 + }, + { // Entry 410 + -0x1.2b708872320e1d31e4b03f1086a9c047p4, + -0x1.fffffffffffffp-1 + }, + { // Entry 411 + 0x1.2b708872320e1d31e4b03f1086a9c047p4, + 0x1.fffffffffffffp-1 + }, + { // Entry 412 + -0x1.25e4f7b2737fa14486612173c6896892p4, + -0x1.ffffffffffffep-1 + }, + { // Entry 413 + 0x1.25e4f7b2737fa14486612173c6896892p4, + 0x1.ffffffffffffep-1 + }, + { // Entry 414 + -0x1.22a69334db8c97a62f8f72a5de7de462p4, + -0x1.ffffffffffffdp-1 + }, + { // Entry 415 + 0x1.22a69334db8c97a62f8f72a5de7de462p4, + 0x1.ffffffffffffdp-1 + }, + { // Entry 416 + 0x1.2b708872320e1d31e4b03f1086a9c047p4, + 0x1.fffffffffffffp-1 + }, + { // Entry 417 + -0x1.2b708872320e1d31e4b03f1086a9c047p4, + -0x1.fffffffffffffp-1 + }, + { // Entry 418 + 0x1.25e4f7b2737fa14486612173c6896892p4, + 0x1.ffffffffffffep-1 + }, + { // Entry 419 + -0x1.25e4f7b2737fa14486612173c6896892p4, + -0x1.ffffffffffffep-1 + }, + { // Entry 420 + 0x1.22a69334db8c97a62f8f72a5de7de462p4, + 0x1.ffffffffffffdp-1 + }, + { // Entry 421 + -0x1.22a69334db8c97a62f8f72a5de7de462p4, + -0x1.ffffffffffffdp-1 + }, + { // Entry 422 + 0x1.4a851baf27b6d549b7c524fbd91644b2p-3, + 0x1.47ae147ae147ap-3 + }, + { // Entry 423 + -0x1.4a851baf27b6d549b7c524fbd91644b2p-3, + -0x1.47ae147ae147ap-3 + }, + { // Entry 424 + 0x1.4a851baf27b6e5b55490996c8137296ap-3, + 0x1.47ae147ae147bp-3 + }, + { // Entry 425 + -0x1.4a851baf27b6e5b55490996c8137296ap-3, + -0x1.47ae147ae147bp-3 + }, + { // Entry 426 + 0x1.4a851baf27b6f620f15c0ddd2962d721p-3, + 0x1.47ae147ae147cp-3 + }, + { // Entry 427 + -0x1.4a851baf27b6f620f15c0ddd2962d721p-3, + -0x1.47ae147ae147cp-3 + }, + { // Entry 428 + -0x1.4a851baf27b6f620f15c0ddd2962d721p-3, + -0x1.47ae147ae147cp-3 + }, + { // Entry 429 + 0x1.4a851baf27b6f620f15c0ddd2962d721p-3, + 0x1.47ae147ae147cp-3 + }, + { // Entry 430 + -0x1.4a851baf27b6e5b55490996c8137296ap-3, + -0x1.47ae147ae147bp-3 + }, + { // Entry 431 + 0x1.4a851baf27b6e5b55490996c8137296ap-3, + 0x1.47ae147ae147bp-3 + }, + { // Entry 432 + -0x1.4a851baf27b6d549b7c524fbd91644b2p-3, + -0x1.47ae147ae147ap-3 + }, + { // Entry 433 + 0x1.4a851baf27b6d549b7c524fbd91644b2p-3, + 0x1.47ae147ae147ap-3 + }, + { // Entry 434 + 0x1.193ea7aad0309ecbf96ee2aa5aad43d2p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 435 + -0x1.193ea7aad0309ecbf96ee2aa5aad43d2p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 436 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.0p-1 + }, + { // Entry 437 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.0p-1 + }, + { // Entry 438 + 0x1.193ea7aad030becbf96ee2aa5b029927p-1, + 0x1.0000000000001p-1 + }, + { // Entry 439 + -0x1.193ea7aad030becbf96ee2aa5b029927p-1, + -0x1.0000000000001p-1 + }, + { // Entry 440 + 0x1.058aefa8114511e9ee33a6f97bb76f0ap-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 441 + -0x1.058aefa8114511e9ee33a6f97bb76f0ap-2, + -0x1.fffffffffffffp-3 + }, + { // Entry 442 + 0x1.058aefa811451a7276bc2f82043b6a7dp-2, + 0x1.0p-2 + }, + { // Entry 443 + -0x1.058aefa811451a7276bc2f82043b6a7dp-2, + -0x1.0p-2 + }, + { // Entry 444 + 0x1.058aefa811452b8387cd4093155eafe4p-2, + 0x1.0000000000001p-2 + }, + { // Entry 445 + -0x1.058aefa811452b8387cd4093155eafe4p-2, + -0x1.0000000000001p-2 + }, + { // Entry 446 + 0x1.015891c9eaef6e78c471eee9894ceabdp-3, + 0x1.fffffffffffffp-4 + }, + { // Entry 447 + -0x1.015891c9eaef6e78c471eee9894ceabdp-3, + -0x1.fffffffffffffp-4 + }, + { // Entry 448 + 0x1.015891c9eaef7699467a0f6b916c6494p-3, + 0x1.0p-3 + }, + { // Entry 449 + -0x1.015891c9eaef7699467a0f6b916c6494p-3, + -0x1.0p-3 + }, + { // Entry 450 + 0x1.015891c9eaef86da4a8a506fa1b18969p-3, + 0x1.0000000000001p-3 + }, + { // Entry 451 + -0x1.015891c9eaef86da4a8a506fa1b18969p-3, + -0x1.0000000000001p-3 + }, + { // Entry 452 + 0x1.005588ad375ac5c30b0a9d5bbe7d5dd7p-4, + 0x1.fffffffffffffp-5 + }, + { // Entry 453 + -0x1.005588ad375ac5c30b0a9d5bbe7d5dd7p-4, + -0x1.fffffffffffffp-5 + }, + { // Entry 454 + 0x1.005588ad375acdcb1312a563c685255ep-4, + 0x1.0p-4 + }, + { // Entry 455 + -0x1.005588ad375acdcb1312a563c685255ep-4, + -0x1.0p-4 + }, + { // Entry 456 + 0x1.005588ad375adddb2322b573d6963771p-4, + 0x1.0000000000001p-4 + }, + { // Entry 457 + -0x1.005588ad375adddb2322b573d6963771p-4, + -0x1.0000000000001p-4 + }, + { // Entry 458 + 0x1.001558891aee1cb29d53ddbdb46e79d9p-5, + 0x1.fffffffffffffp-6 + }, + { // Entry 459 + -0x1.001558891aee1cb29d53ddbdb46e79d9p-5, + -0x1.fffffffffffffp-6 + }, + { // Entry 460 + 0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + 0x1.0p-5 + }, + { // Entry 461 + -0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + -0x1.0p-5 + }, + { // Entry 462 + 0x1.001558891aee34b89ed43dd5ba702a52p-5, + 0x1.0000000000001p-5 + }, + { // Entry 463 + -0x1.001558891aee34b89ed43dd5ba702a52p-5, + -0x1.0000000000001p-5 + }, + { // Entry 464 + 0x1.000555888ad1c18d8d3255aac6d2acadp-6, + 0x1.fffffffffffffp-7 + }, + { // Entry 465 + -0x1.000555888ad1c18d8d3255aac6d2acadp-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 466 + 0x1.000555888ad1c98e0d3a562aced328b5p-6, + 0x1.0p-6 + }, + { // Entry 467 + -0x1.000555888ad1c98e0d3a562aced328b5p-6, + -0x1.0p-6 + }, + { // Entry 468 + 0x1.000555888ad1d98f0d4a572aded438c7p-6, + 0x1.0000000000001p-6 + }, + { // Entry 469 + -0x1.000555888ad1d98f0d4a572aded438c7p-6, + -0x1.0000000000001p-6 + }, + { // Entry 470 + 0x1.000155588891a53723d0cfc25d992fd2p-7, + 0x1.fffffffffffffp-8 + }, + { // Entry 471 + -0x1.000155588891a53723d0cfc25d992fd2p-7, + -0x1.fffffffffffffp-8 + }, + { // Entry 472 + 0x1.000155588891ad3743d14fc45da12ef2p-7, + 0x1.0p-7 + }, + { // Entry 473 + -0x1.000155588891ad3743d14fc45da12ef2p-7, + -0x1.0p-7 + }, + { // Entry 474 + 0x1.000155588891bd3783d24fc85db13332p-7, + 0x1.0000000000001p-7 + }, + { // Entry 475 + -0x1.000155588891bd3783d24fc85db13332p-7, + -0x1.0000000000001p-7 + }, + { // Entry 476 + 0x1.000055558888a51ae61ef133fc078f9ap-8, + 0x1.fffffffffffffp-9 + }, + { // Entry 477 + -0x1.000055558888a51ae61ef133fc078f9ap-8, + -0x1.fffffffffffffp-9 + }, + { // Entry 478 + 0x1.000055558888ad1aee1ef9340407975ap-8, + 0x1.0p-8 + }, + { // Entry 479 + -0x1.000055558888ad1aee1ef9340407975ap-8, + -0x1.0p-8 + }, + { // Entry 480 + 0x1.000055558888bd1afe1f09341407a85bp-8, + 0x1.0000000000001p-8 + }, + { // Entry 481 + -0x1.000055558888bd1afe1f09341407a85bp-8, + -0x1.0000000000001p-8 + }, + { // Entry 482 + 0x1.000015555888811acfc98c1e9ae230fcp-9, + 0x1.fffffffffffffp-10 + }, + { // Entry 483 + -0x1.000015555888811acfc98c1e9ae230fcp-9, + -0x1.fffffffffffffp-10 + }, + { // Entry 484 + 0x1.000015555888891ad1c98c9e9b0230f4p-9, + 0x1.0p-9 + }, + { // Entry 485 + -0x1.000015555888891ad1c98c9e9b0230f4p-9, + -0x1.0p-9 + }, + { // Entry 486 + 0x1.000015555888991ad5c98d9e9b423144p-9, + 0x1.0000000000001p-9 + }, + { // Entry 487 + -0x1.000015555888991ad5c98d9e9b423144p-9, + -0x1.0000000000001p-9 + }, + { // Entry 488 + 0x1.000005555588808ad12d373b75ab20a3p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 489 + -0x1.000005555588808ad12d373b75ab20a3p-10, + -0x1.fffffffffffffp-11 + }, + { // Entry 490 + 0x1.000005555588888ad1ad374375aba09fp-10, + 0x1.0p-10 + }, + { // Entry 491 + -0x1.000005555588888ad1ad374375aba09fp-10, + -0x1.0p-10 + }, + { // Entry 492 + 0x1.000005555588988ad2ad375375aca0afp-10, + 0x1.0000000000001p-10 + }, + { // Entry 493 + -0x1.000005555588988ad2ad375375aca0afp-10, + -0x1.0000000000001p-10 + }, + { // Entry 494 + 0x1.0000000555554d8888880ad1ad12ee1ep-14, + 0x1.fffffffffffffp-15 + }, + { // Entry 495 + -0x1.0000000555554d8888880ad1ad12ee1ep-14, + -0x1.fffffffffffffp-15 + }, + { // Entry 496 + 0x1.000000055555558888888ad1ad1aee1ep-14, + 0x1.0p-14 + }, + { // Entry 497 + -0x1.000000055555558888888ad1ad1aee1ep-14, + -0x1.0p-14 + }, + { // Entry 498 + 0x1.000000055555658888898ad1ad2aee1ep-14, + 0x1.0000000000001p-14 + }, + { // Entry 499 + -0x1.000000055555658888898ad1ad2aee1ep-14, + -0x1.0000000000001p-14 + }, + { // Entry 500 + 0x1.fffffffffffff0aaaaaaaaaaaa9b1111p-29, + 0x1.fffffffffffffp-29 + }, + { // Entry 501 + -0x1.fffffffffffff0aaaaaaaaaaaa9b1111p-29, + -0x1.fffffffffffffp-29 + }, + { // Entry 502 + 0x1.00000000000000555555555555558888p-28, + 0x1.0p-28 + }, + { // Entry 503 + -0x1.00000000000000555555555555558888p-28, + -0x1.0p-28 + }, + { // Entry 504 + 0x1.00000000000010555555555555658888p-28, + 0x1.0000000000001p-28 + }, + { // Entry 505 + -0x1.00000000000010555555555555658888p-28, + -0x1.0000000000001p-28 + }, + { // Entry 506 + 0x1.fffffffffffff00aaaaaaaaaaaa9ab11p-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 507 + -0x1.fffffffffffff00aaaaaaaaaaaa9ab11p-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 508 + 0x1.00000000000000055555555555555588p-30, + 0x1.0p-30 + }, + { // Entry 509 + -0x1.00000000000000055555555555555588p-30, + -0x1.0p-30 + }, + { // Entry 510 + 0x1.00000000000010055555555555565588p-30, + 0x1.0000000000001p-30 + }, + { // Entry 511 + -0x1.00000000000010055555555555565588p-30, + -0x1.0000000000001p-30 + }, + { // Entry 512 + -0x1.193ea7aad030becbf96ee2aa5b029927p-1, + -0x1.0000000000001p-1 + }, + { // Entry 513 + 0x1.193ea7aad030becbf96ee2aa5b029927p-1, + 0x1.0000000000001p-1 + }, + { // Entry 514 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.0p-1 + }, + { // Entry 515 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.0p-1 + }, + { // Entry 516 + -0x1.193ea7aad0309ecbf96ee2aa5aad43d2p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 517 + 0x1.193ea7aad0309ecbf96ee2aa5aad43d2p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 518 + -0x1.058aefa811452b8387cd4093155eafe4p-2, + -0x1.0000000000001p-2 + }, + { // Entry 519 + 0x1.058aefa811452b8387cd4093155eafe4p-2, + 0x1.0000000000001p-2 + }, + { // Entry 520 + -0x1.058aefa811451a7276bc2f82043b6a7dp-2, + -0x1.0p-2 + }, + { // Entry 521 + 0x1.058aefa811451a7276bc2f82043b6a7dp-2, + 0x1.0p-2 + }, + { // Entry 522 + -0x1.058aefa8114511e9ee33a6f97bb76f0ap-2, + -0x1.fffffffffffffp-3 + }, + { // Entry 523 + 0x1.058aefa8114511e9ee33a6f97bb76f0ap-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 524 + -0x1.015891c9eaef86da4a8a506fa1b18969p-3, + -0x1.0000000000001p-3 + }, + { // Entry 525 + 0x1.015891c9eaef86da4a8a506fa1b18969p-3, + 0x1.0000000000001p-3 + }, + { // Entry 526 + -0x1.015891c9eaef7699467a0f6b916c6494p-3, + -0x1.0p-3 + }, + { // Entry 527 + 0x1.015891c9eaef7699467a0f6b916c6494p-3, + 0x1.0p-3 + }, + { // Entry 528 + -0x1.015891c9eaef6e78c471eee9894ceabdp-3, + -0x1.fffffffffffffp-4 + }, + { // Entry 529 + 0x1.015891c9eaef6e78c471eee9894ceabdp-3, + 0x1.fffffffffffffp-4 + }, + { // Entry 530 + -0x1.005588ad375adddb2322b573d6963771p-4, + -0x1.0000000000001p-4 + }, + { // Entry 531 + 0x1.005588ad375adddb2322b573d6963771p-4, + 0x1.0000000000001p-4 + }, + { // Entry 532 + -0x1.005588ad375acdcb1312a563c685255ep-4, + -0x1.0p-4 + }, + { // Entry 533 + 0x1.005588ad375acdcb1312a563c685255ep-4, + 0x1.0p-4 + }, + { // Entry 534 + -0x1.005588ad375ac5c30b0a9d5bbe7d5dd7p-4, + -0x1.fffffffffffffp-5 + }, + { // Entry 535 + 0x1.005588ad375ac5c30b0a9d5bbe7d5dd7p-4, + 0x1.fffffffffffffp-5 + }, + { // Entry 536 + -0x1.001558891aee34b89ed43dd5ba702a52p-5, + -0x1.0000000000001p-5 + }, + { // Entry 537 + 0x1.001558891aee34b89ed43dd5ba702a52p-5, + 0x1.0000000000001p-5 + }, + { // Entry 538 + -0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + -0x1.0p-5 + }, + { // Entry 539 + 0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + 0x1.0p-5 + }, + { // Entry 540 + -0x1.001558891aee1cb29d53ddbdb46e79d9p-5, + -0x1.fffffffffffffp-6 + }, + { // Entry 541 + 0x1.001558891aee1cb29d53ddbdb46e79d9p-5, + 0x1.fffffffffffffp-6 + }, + { // Entry 542 + -0x1.000555888ad1d98f0d4a572aded438c7p-6, + -0x1.0000000000001p-6 + }, + { // Entry 543 + 0x1.000555888ad1d98f0d4a572aded438c7p-6, + 0x1.0000000000001p-6 + }, + { // Entry 544 + -0x1.000555888ad1c98e0d3a562aced328b5p-6, + -0x1.0p-6 + }, + { // Entry 545 + 0x1.000555888ad1c98e0d3a562aced328b5p-6, + 0x1.0p-6 + }, + { // Entry 546 + -0x1.000555888ad1c18d8d3255aac6d2acadp-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 547 + 0x1.000555888ad1c18d8d3255aac6d2acadp-6, + 0x1.fffffffffffffp-7 + }, + { // Entry 548 + -0x1.000155588891bd3783d24fc85db13332p-7, + -0x1.0000000000001p-7 + }, + { // Entry 549 + 0x1.000155588891bd3783d24fc85db13332p-7, + 0x1.0000000000001p-7 + }, + { // Entry 550 + -0x1.000155588891ad3743d14fc45da12ef2p-7, + -0x1.0p-7 + }, + { // Entry 551 + 0x1.000155588891ad3743d14fc45da12ef2p-7, + 0x1.0p-7 + }, + { // Entry 552 + -0x1.000155588891a53723d0cfc25d992fd2p-7, + -0x1.fffffffffffffp-8 + }, + { // Entry 553 + 0x1.000155588891a53723d0cfc25d992fd2p-7, + 0x1.fffffffffffffp-8 + }, + { // Entry 554 + -0x1.000055558888bd1afe1f09341407a85bp-8, + -0x1.0000000000001p-8 + }, + { // Entry 555 + 0x1.000055558888bd1afe1f09341407a85bp-8, + 0x1.0000000000001p-8 + }, + { // Entry 556 + -0x1.000055558888ad1aee1ef9340407975ap-8, + -0x1.0p-8 + }, + { // Entry 557 + 0x1.000055558888ad1aee1ef9340407975ap-8, + 0x1.0p-8 + }, + { // Entry 558 + -0x1.000055558888a51ae61ef133fc078f9ap-8, + -0x1.fffffffffffffp-9 + }, + { // Entry 559 + 0x1.000055558888a51ae61ef133fc078f9ap-8, + 0x1.fffffffffffffp-9 + }, + { // Entry 560 + -0x1.000015555888991ad5c98d9e9b423144p-9, + -0x1.0000000000001p-9 + }, + { // Entry 561 + 0x1.000015555888991ad5c98d9e9b423144p-9, + 0x1.0000000000001p-9 + }, + { // Entry 562 + -0x1.000015555888891ad1c98c9e9b0230f4p-9, + -0x1.0p-9 + }, + { // Entry 563 + 0x1.000015555888891ad1c98c9e9b0230f4p-9, + 0x1.0p-9 + }, + { // Entry 564 + -0x1.000015555888811acfc98c1e9ae230fcp-9, + -0x1.fffffffffffffp-10 + }, + { // Entry 565 + 0x1.000015555888811acfc98c1e9ae230fcp-9, + 0x1.fffffffffffffp-10 + }, + { // Entry 566 + -0x1.000005555588988ad2ad375375aca0afp-10, + -0x1.0000000000001p-10 + }, + { // Entry 567 + 0x1.000005555588988ad2ad375375aca0afp-10, + 0x1.0000000000001p-10 + }, + { // Entry 568 + -0x1.000005555588888ad1ad374375aba09fp-10, + -0x1.0p-10 + }, + { // Entry 569 + 0x1.000005555588888ad1ad374375aba09fp-10, + 0x1.0p-10 + }, + { // Entry 570 + -0x1.000005555588808ad12d373b75ab20a3p-10, + -0x1.fffffffffffffp-11 + }, + { // Entry 571 + 0x1.000005555588808ad12d373b75ab20a3p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 572 + -0x1.000000055555658888898ad1ad2aee1ep-14, + -0x1.0000000000001p-14 + }, + { // Entry 573 + 0x1.000000055555658888898ad1ad2aee1ep-14, + 0x1.0000000000001p-14 + }, + { // Entry 574 + -0x1.000000055555558888888ad1ad1aee1ep-14, + -0x1.0p-14 + }, + { // Entry 575 + 0x1.000000055555558888888ad1ad1aee1ep-14, + 0x1.0p-14 + }, + { // Entry 576 + -0x1.0000000555554d8888880ad1ad12ee1ep-14, + -0x1.fffffffffffffp-15 + }, + { // Entry 577 + 0x1.0000000555554d8888880ad1ad12ee1ep-14, + 0x1.fffffffffffffp-15 + }, + { // Entry 578 + -0x1.00000000000010555555555555658888p-28, + -0x1.0000000000001p-28 + }, + { // Entry 579 + 0x1.00000000000010555555555555658888p-28, + 0x1.0000000000001p-28 + }, + { // Entry 580 + -0x1.00000000000000555555555555558888p-28, + -0x1.0p-28 + }, + { // Entry 581 + 0x1.00000000000000555555555555558888p-28, + 0x1.0p-28 + }, + { // Entry 582 + -0x1.fffffffffffff0aaaaaaaaaaaa9b1111p-29, + -0x1.fffffffffffffp-29 + }, + { // Entry 583 + 0x1.fffffffffffff0aaaaaaaaaaaa9b1111p-29, + 0x1.fffffffffffffp-29 + }, + { // Entry 584 + -0x1.00000000000010055555555555565588p-30, + -0x1.0000000000001p-30 + }, + { // Entry 585 + 0x1.00000000000010055555555555565588p-30, + 0x1.0000000000001p-30 + }, + { // Entry 586 + -0x1.00000000000000055555555555555588p-30, + -0x1.0p-30 + }, + { // Entry 587 + 0x1.00000000000000055555555555555588p-30, + 0x1.0p-30 + }, + { // Entry 588 + -0x1.fffffffffffff00aaaaaaaaaaaa9ab11p-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 589 + 0x1.fffffffffffff00aaaaaaaaaaaa9ab11p-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 590 + HUGE_VAL, + 0x1.0p0 + }, + { // Entry 591 + -HUGE_VAL, + -0x1.0p0 + }, + { // Entry 592 + 0x1.2b708872320e1d31e4b03f1086a9c047p4, + 0x1.fffffffffffffp-1 + }, + { // Entry 593 + -0x1.2b708872320e1d31e4b03f1086a9c047p4, + -0x1.fffffffffffffp-1 + }, + { // Entry 594 + 0x1.0f2eb070230688149a25318fd8d4ea0fp0, + 0x1.921fb54442d18p-1 + }, + { // Entry 595 + -0x1.0f2eb070230688149a25318fd8d4ea0fp0, + -0x1.921fb54442d18p-1 + }, + { // Entry 596 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 597 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 598 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 599 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 600 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 601 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 602 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 603 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 604 + 0x1.p-1073, + 0x1.0p-1073 + }, + { // Entry 605 + -0x1.p-1073, + -0x1.0p-1073 + }, + { // Entry 606 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 607 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 608 + 0.0, + 0.0 + }, + { // Entry 609 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/atanhf_intel_data.h b/tests/math_data/atanhf_intel_data.h new file mode 100644 index 000000000..9d8025a1c --- /dev/null +++ b/tests/math_data/atanhf_intel_data.h @@ -0,0 +1,2090 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_atanhf_intel_data[] = { + { // Entry 0 + -0x1.1ffc000000797af0120046e7dc31d3f5p-20, + -0x1.1ffcp-20 + }, + { // Entry 1 + 0x1.1ffc000000797af0120046e7dc31d3f5p-20, + 0x1.1ffcp-20 + }, + { // Entry 2 + -0x1.5f3287f902075197c786c1cf696101b4p-1, + -0x1.30d35cp-1 + }, + { // Entry 3 + 0x1.5f3287f902075197c786c1cf696101b4p-1, + 0x1.30d35cp-1 + }, + { // Entry 4 + -0x1.8a0ca6ffdb34c70bb4a5b23fb6e19d01p-1, + -0x1.4b1df6p-1 + }, + { // Entry 5 + 0x1.8a0ca6ffdb34c70bb4a5b23fb6e19d01p-1, + 0x1.4b1df6p-1 + }, + { // Entry 6 + -0x1.6d46ff0031931d74cbb9c2cfd9429d8cp-3, + -0x1.6973e0p-3 + }, + { // Entry 7 + 0x1.6d46ff0031931d74cbb9c2cfd9429d8cp-3, + 0x1.6973e0p-3 + }, + { // Entry 8 + -0x1.713f610010deb18ee2e239f1963a1405p-12, + -0x1.713f60p-12 + }, + { // Entry 9 + 0x1.713f610010deb18ee2e239f1963a1405p-12, + 0x1.713f60p-12 + }, + { // Entry 10 + -0x1.7141490014d5f81f903df4950464cda8p-12, + -0x1.714148p-12 + }, + { // Entry 11 + 0x1.7141490014d5f81f903df4950464cda8p-12, + 0x1.714148p-12 + }, + { // Entry 12 + -0x1.714177001535ac6e291f246ad5579b0ep-12, + -0x1.714176p-12 + }, + { // Entry 13 + 0x1.714177001535ac6e291f246ad5579b0ep-12, + 0x1.714176p-12 + }, + { // Entry 14 + -0x1.15963da938a6c10a74aafac840a012a1p0, + -0x1.96efa2p-1 + }, + { // Entry 15 + 0x1.15963da938a6c10a74aafac840a012a1p0, + 0x1.96efa2p-1 + }, + { // Entry 16 + -0x1.17f6e9a62565d644cd0022d91487ef7bp0, + -0x1.98acaep-1 + }, + { // Entry 17 + 0x1.17f6e9a62565d644cd0022d91487ef7bp0, + 0x1.98acaep-1 + }, + { // Entry 18 + -0x1.1ba0f2fffc8e369353caacfa549acbf2p0, + -0x1.9b4dc0p-1 + }, + { // Entry 19 + 0x1.1ba0f2fffc8e369353caacfa549acbf2p0, + 0x1.9b4dc0p-1 + }, + { // Entry 20 + -0x1.2dd9b663e5ae06cd47d4cca1f6139598p0, + -0x1.a782a6p-1 + }, + { // Entry 21 + 0x1.2dd9b663e5ae06cd47d4cca1f6139598p0, + 0x1.a782a6p-1 + }, + { // Entry 22 + -0x1.cd2af1003fb97ed31a696564871fd18ap-4, + -0x1.cb3a9ap-4 + }, + { // Entry 23 + 0x1.cd2af1003fb97ed31a696564871fd18ap-4, + 0x1.cb3a9ap-4 + }, + { // Entry 24 + -0x1.d077fc01fda53b80967d942b1ffe2193p-16, + -0x1.d077fcp-16 + }, + { // Entry 25 + 0x1.d077fc01fda53b80967d942b1ffe2193p-16, + 0x1.d077fcp-16 + }, + { // Entry 26 + -0x1.fb0335b41665a445bad16a5da2454d1ap-3, + -0x1.f0e7p-3 + }, + { // Entry 27 + 0x1.fb0335b41665a445bad16a5da2454d1ap-3, + 0x1.f0e7p-3 + }, + { // Entry 28 + -0x1.fbbbe9001627e7188cb48f38c4820e35p-3, + -0x1.f194d0p-3 + }, + { // Entry 29 + 0x1.fbbbe9001627e7188cb48f38c4820e35p-3, + 0x1.f194d0p-3 + }, + { // Entry 30 + -0x1.193d550095876f79105e76c75ca58b2fp-1, + -0x1.fffe04p-2 + }, + { // Entry 31 + 0x1.193d550095876f79105e76c75ca58b2fp-1, + 0x1.fffe04p-2 + }, + { // Entry 32 + -0x1.193ea5002587c5e868720bc46d87505bp-1, + -0x1.fffffcp-2 + }, + { // Entry 33 + 0x1.193ea5002587c5e868720bc46d87505bp-1, + 0x1.fffffcp-2 + }, + { // Entry 34 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.p-1 + }, + { // Entry 35 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.p-1 + }, + { // Entry 36 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 37 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 38 + 0x1.00000200000000000000155555d55556p-41, + 0x1.000002p-41 + }, + { // Entry 39 + -0x1.00000200000000000000155555d55556p-41, + -0x1.000002p-41 + }, + { // Entry 40 + 0x1.193ebd0025f7c5edf31cf5a0e285059ep-1, + 0x1.000010p-1 + }, + { // Entry 41 + -0x1.193ebd0025f7c5edf31cf5a0e285059ep-1, + -0x1.000010p-1 + }, + { // Entry 42 + 0x1.05901c768a92c5a23c8e8531ffe01945p-2, + 0x1.0004dap-2 + }, + { // Entry 43 + -0x1.05901c768a92c5a23c8e8531ffe01945p-2, + -0x1.0004dap-2 + }, + { // Entry 44 + 0x1.01d972ffff40cd1cf377322d5faca975p-6, + 0x1.01d4p-6 + }, + { // Entry 45 + -0x1.01d972ffff40cd1cf377322d5faca975p-6, + -0x1.01d4p-6 + }, + { // Entry 46 + 0x1.0b4d0560a980ef9bc645b2c29563e89fp-2, + 0x1.0564p-2 + }, + { // Entry 47 + -0x1.0b4d0560a980ef9bc645b2c29563e89fp-2, + -0x1.0564p-2 + }, + { // Entry 48 + 0x1.0616e1ffd00766707c845454688ac285p-5, + 0x1.06p-5 + }, + { // Entry 49 + -0x1.0616e1ffd00766707c845454688ac285p-5, + -0x1.06p-5 + }, + { // Entry 50 + 0x1.0c1a71e0f243aaabf988a086b92d8098p-2, + 0x1.0624p-2 + }, + { // Entry 51 + -0x1.0c1a71e0f243aaabf988a086b92d8098p-2, + -0x1.0624p-2 + }, + { // Entry 52 + 0x1.068016ffffd89ea5af86d140cc4499acp-9, + 0x1.0680p-9 + }, + { // Entry 53 + -0x1.068016ffffd89ea5af86d140cc4499acp-9, + -0x1.0680p-9 + }, + { // Entry 54 + 0x1.10f99a58d073173f64d078d1921d0abdp-2, + 0x1.0ab0p-2 + }, + { // Entry 55 + -0x1.10f99a58d073173f64d078d1921d0abdp-2, + -0x1.0ab0p-2 + }, + { // Entry 56 + 0x1.10022efcd204975cd5de2eb798c5a366p-4, + 0x1.0f9cp-4 + }, + { // Entry 57 + -0x1.10022efcd204975cd5de2eb798c5a366p-4, + -0x1.0f9cp-4 + }, + { // Entry 58 + 0x1.384c7bbb40817a713670eda9b1b1aacdp-1, + 0x1.1694p-1 + }, + { // Entry 59 + -0x1.384c7bbb40817a713670eda9b1b1aacdp-1, + -0x1.1694p-1 + }, + { // Entry 60 + 0x1.189a2700033273251e12d5eba90e4465p-3, + 0x1.16dcp-3 + }, + { // Entry 61 + -0x1.189a2700033273251e12d5eba90e4465p-3, + -0x1.16dcp-3 + }, + { // Entry 62 + 0x1.3a52accbc786f237ffb73633c18324fbp-1, + 0x1.18p-1 + }, + { // Entry 63 + -0x1.3a52accbc786f237ffb73633c18324fbp-1, + -0x1.18p-1 + }, + { // Entry 64 + 0x1.19c3b0fa86d540072c08c5d6b394b165p-3, + 0x1.18p-3 + }, + { // Entry 65 + -0x1.19c3b0fa86d540072c08c5d6b394b165p-3, + -0x1.18p-3 + }, + { // Entry 66 + 0x1.1c8f7300000b7dc0ff5b03e64623dec6p-4, + 0x1.1c1a7ap-4 + }, + { // Entry 67 + -0x1.1c8f7300000b7dc0ff5b03e64623dec6p-4, + -0x1.1c1a7ap-4 + }, + { // Entry 68 + 0x1.44f16a9bea7f03af529b037b235f31b5p-1, + 0x1.1f5cp-1 + }, + { // Entry 69 + -0x1.44f16a9bea7f03af529b037b235f31b5p-1, + -0x1.1f5cp-1 + }, + { // Entry 70 + 0x1.1ffc000000797af0120046e7dc31d3f5p-20, + 0x1.1ffcp-20 + }, + { // Entry 71 + -0x1.1ffc000000797af0120046e7dc31d3f5p-20, + -0x1.1ffcp-20 + }, + { // Entry 72 + 0x1.27f9cfc34385aff96fa7a25c9010711bp-2, + 0x1.1ffffep-2 + }, + { // Entry 73 + -0x1.27f9cfc34385aff96fa7a25c9010711bp-2, + -0x1.1ffffep-2 + }, + { // Entry 74 + 0x1.5deb9a83ee95c385ba5335580af08f08p-1, + 0x1.30p-1 + }, + { // Entry 75 + -0x1.5deb9a83ee95c385ba5335580af08f08p-1, + -0x1.30p-1 + }, + { // Entry 76 + 0x1.5e0e0298d9eec3ab8b4f4e1b8d295ac3p-1, + 0x1.301646p-1 + }, + { // Entry 77 + -0x1.5e0e0298d9eec3ab8b4f4e1b8d295ac3p-1, + -0x1.301646p-1 + }, + { // Entry 78 + 0x1.5e60e400006f52cb7692b6e8a51da384p-1, + 0x1.304be6p-1 + }, + { // Entry 79 + -0x1.5e60e400006f52cb7692b6e8a51da384p-1, + -0x1.304be6p-1 + }, + { // Entry 80 + 0x1.47f5170000024233854b6203d98d324fp-5, + 0x1.47c844p-5 + }, + { // Entry 81 + -0x1.47f5170000024233854b6203d98d324fp-5, + -0x1.47c844p-5 + }, + { // Entry 82 + 0x1.48ae1cfffeff307b13c17eb56fdcf7c2p-5, + 0x1.4880fep-5 + }, + { // Entry 83 + -0x1.48ae1cfffeff307b13c17eb56fdcf7c2p-5, + -0x1.4880fep-5 + }, + { // Entry 84 + 0x1.79d4c40000354d83f4c26c097b0e75fdp-2, + 0x1.6991dap-2 + }, + { // Entry 85 + -0x1.79d4c40000354d83f4c26c097b0e75fdp-2, + -0x1.6991dap-2 + }, + { // Entry 86 + 0x1.c7139f215feb3a72cf1b5e192f938ea4p-1, + 0x1.6bef72p-1 + }, + { // Entry 87 + -0x1.c7139f215feb3a72cf1b5e192f938ea4p-1, + -0x1.6bef72p-1 + }, + { // Entry 88 + 0x1.7140e3001401c1b014172d6fd91711aep-12, + 0x1.7140e2p-12 + }, + { // Entry 89 + -0x1.7140e3001401c1b014172d6fd91711aep-12, + -0x1.7140e2p-12 + }, + { // Entry 90 + 0x1.e05648db7af67a5476dcef31c7834740p-1, + 0x1.77fffep-1 + }, + { // Entry 91 + -0x1.e05648db7af67a5476dcef31c7834740p-1, + -0x1.77fffep-1 + }, + { // Entry 92 + 0x1.77fffe0000000010e5f5104d55b356b3p-30, + 0x1.77fffep-30 + }, + { // Entry 93 + -0x1.77fffe0000000010e5f5104d55b356b3p-30, + -0x1.77fffep-30 + }, + { // Entry 94 + 0x1.93b0aee21c2c808f5840a8fdec9984e1p-2, + 0x1.80p-2 + }, + { // Entry 95 + -0x1.93b0aee21c2c808f5840a8fdec9984e1p-2, + -0x1.80p-2 + }, + { // Entry 96 + 0x1.f22781be9e69629e565cb27d7e8be241p-1, + 0x1.800026p-1 + }, + { // Entry 97 + -0x1.f22781be9e69629e565cb27d7e8be241p-1, + -0x1.800026p-1 + }, + { // Entry 98 + 0x1.f22a81c2c1df6e290a34d78c0e42165fp-1, + 0x1.800176p-1 + }, + { // Entry 99 + -0x1.f22a81c2c1df6e290a34d78c0e42165fp-1, + -0x1.800176p-1 + }, + { // Entry 100 + 0x1.f4d9b1f449f9637049f465ad813677cdp-1, + 0x1.812ceap-1 + }, + { // Entry 101 + -0x1.f4d9b1f449f9637049f465ad813677cdp-1, + -0x1.812ceap-1 + }, + { // Entry 102 + 0x1.f6a98a347aefdfbfdfc26e6c5fd39d63p-1, + 0x1.81f5b6p-1 + }, + { // Entry 103 + -0x1.f6a98a347aefdfbfdfc26e6c5fd39d63p-1, + -0x1.81f5b6p-1 + }, + { // Entry 104 + 0x1.f6b16e036a1228e2d7592b99921a73fdp-1, + 0x1.81f91ep-1 + }, + { // Entry 105 + -0x1.f6b16e036a1228e2d7592b99921a73fdp-1, + -0x1.81f91ep-1 + }, + { // Entry 106 + 0x1.879115ffff8980f9da1405781afd63e0p-3, + 0x1.82dd3cp-3 + }, + { // Entry 107 + -0x1.879115ffff8980f9da1405781afd63e0p-3, + -0x1.82dd3cp-3 + }, + { // Entry 108 + 0x1.87f3fb0000ab210be606ca39761681bdp-7, + 0x1.87ef32p-7 + }, + { // Entry 109 + -0x1.87f3fb0000ab210be606ca39761681bdp-7, + -0x1.87ef32p-7 + }, + { // Entry 110 + 0x1.8c680b3adda5a66ad6d8da856236ff97p-7, + 0x1.8c6318p-7 + }, + { // Entry 111 + -0x1.8c680b3adda5a66ad6d8da856236ff97p-7, + -0x1.8c6318p-7 + }, + { // Entry 112 + 0x1.9aa64d00181abc40f45d08711a8a0e2dp-3, + 0x1.953bb8p-3 + }, + { // Entry 113 + -0x1.9aa64d00181abc40f45d08711a8a0e2dp-3, + -0x1.953bb8p-3 + }, + { // Entry 114 + 0x1.99ba390011821eb8ba2f398e3ec3cbd2p-4, + 0x1.985dc4p-4 + }, + { // Entry 115 + -0x1.99ba390011821eb8ba2f398e3ec3cbd2p-4, + -0x1.985dc4p-4 + }, + { // Entry 116 + 0x1.a05bacfcccc788b02291ff2a73385befp-5, + 0x1.9ffffep-5 + }, + { // Entry 117 + -0x1.a05bacfcccc788b02291ff2a73385befp-5, + -0x1.9ffffep-5 + }, + { // Entry 118 + 0x1.a64fb7002d9b9b7248958431d95f77ebp-4, + 0x1.a4d240p-4 + }, + { // Entry 119 + -0x1.a64fb7002d9b9b7248958431d95f77ebp-4, + -0x1.a4d240p-4 + }, + { // Entry 120 + 0x1.a64908fbec59b6b02d326674ded2f9f2p-5, + 0x1.a5e962p-5 + }, + { // Entry 121 + -0x1.a64908fbec59b6b02d326674ded2f9f2p-5, + -0x1.a5e962p-5 + }, + { // Entry 122 + 0x1.b192470000fb2118da687cc4160f98c6p-6, + 0x1.b17860p-6 + }, + { // Entry 123 + -0x1.b192470000fb2118da687cc4160f98c6p-6, + -0x1.b17860p-6 + }, + { // Entry 124 + 0x1.d6f45cc922663f64dfff1989368eafd0p-2, + 0x1.b8562ap-2 + }, + { // Entry 125 + -0x1.d6f45cc922663f64dfff1989368eafd0p-2, + -0x1.b8562ap-2 + }, + { // Entry 126 + 0x1.dad882760031b0b207eec53f2bad3a56p-2, + 0x1.bb80c8p-2 + }, + { // Entry 127 + -0x1.dad882760031b0b207eec53f2bad3a56p-2, + -0x1.bb80c8p-2 + }, + { // Entry 128 + 0x1.bcef0900070bb4d60dba7d7916e44f1cp-11, + 0x1.bcef02p-11 + }, + { // Entry 129 + -0x1.bcef0900070bb4d60dba7d7916e44f1cp-11, + -0x1.bcef02p-11 + }, + { // Entry 130 + 0x1.e0648f29a5cb8fa830357eb28463b371p-2, + 0x1.bfffbep-2 + }, + { // Entry 131 + -0x1.e0648f29a5cb8fa830357eb28463b371p-2, + -0x1.bfffbep-2 + }, + { // Entry 132 + 0x1.c2e5e80000474fca411deeabc2d871b2p-6, + 0x1.c2c8c6p-6 + }, + { // Entry 133 + -0x1.c2e5e80000474fca411deeabc2d871b2p-6, + -0x1.c2c8c6p-6 + }, + { // Entry 134 + 0x1.c997430019b045d79984044543bd4322p-4, + 0x1.c7b258p-4 + }, + { // Entry 135 + -0x1.c997430019b045d79984044543bd4322p-4, + -0x1.c7b258p-4 + }, + { // Entry 136 + 0x1.6cc8dca857314e6901156d00f8a3b682p0, + 0x1.c7fffep-1 + }, + { // Entry 137 + -0x1.6cc8dca857314e6901156d00f8a3b682p0, + -0x1.c7fffep-1 + }, + { // Entry 138 + 0x1.c7fffe01e245f9ab162301990550caa9p-16, + 0x1.c7fffep-16 + }, + { // Entry 139 + -0x1.c7fffe01e245f9ab162301990550caa9p-16, + -0x1.c7fffep-16 + }, + { // Entry 140 + 0x1.ed65267d01a1db540b37753c51d66426p-2, + 0x1.ca7436p-2 + }, + { // Entry 141 + -0x1.ed65267d01a1db540b37753c51d66426p-2, + -0x1.ca7436p-2 + }, + { // Entry 142 + 0x1.d48af32968fa3b34457bcff03db0622dp-3, + 0x1.cc8928p-3 + }, + { // Entry 143 + -0x1.d48af32968fa3b34457bcff03db0622dp-3, + -0x1.cc8928p-3 + }, + { // Entry 144 + 0x1.f0c2d8fffefca01290c2ef36330c9115p-2, + 0x1.cd242cp-2 + }, + { // Entry 145 + -0x1.f0c2d8fffefca01290c2ef36330c9115p-2, + -0x1.cd242cp-2 + }, + { // Entry 146 + 0x1.ce535efa32f0cec15b3bccf05c079f19p-5, + 0x1.cdd5e0p-5 + }, + { // Entry 147 + -0x1.ce535efa32f0cec15b3bccf05c079f19p-5, + -0x1.cdd5e0p-5 + }, + { // Entry 148 + 0x1.d0703e01fd8bbf96395ed2f62f54fdcap-16, + 0x1.d0703ep-16 + }, + { // Entry 149 + -0x1.d0703e01fd8bbf96395ed2f62f54fdcap-16, + -0x1.d0703ep-16 + }, + { // Entry 150 + 0x1.f84fd66cf58e3da9e2d75ce683cca2d0p-2, + 0x1.d32406p-2 + }, + { // Entry 151 + -0x1.f84fd66cf58e3da9e2d75ce683cca2d0p-2, + -0x1.d32406p-2 + }, + { // Entry 152 + 0x1.dca60100427d4d26515dcb19009e0fe7p-4, + 0x1.da822cp-4 + }, + { // Entry 153 + -0x1.dca60100427d4d26515dcb19009e0fe7p-4, + -0x1.da822cp-4 + }, + { // Entry 154 + 0x1.f19057907b6a6fe84ba8e4830b7a0799p-3, + 0x1.e7fffep-3 + }, + { // Entry 155 + -0x1.f19057907b6a6fe84ba8e4830b7a0799p-3, + -0x1.e7fffep-3 + }, + { // Entry 156 + 0x1.ef311b0049dc13b5b0e01b868b4cfc92p-4, + 0x1.eccb14p-4 + }, + { // Entry 157 + -0x1.ef311b0049dc13b5b0e01b868b4cfc92p-4, + -0x1.eccb14p-4 + }, + { // Entry 158 + 0x1.ee703b40bad448188d321c9cf1c77c2fp-6, + 0x1.ee49d2p-6 + }, + { // Entry 159 + -0x1.ee703b40bad448188d321c9cf1c77c2fp-6, + -0x1.ee49d2p-6 + }, + { // Entry 160 + 0x1.efa28ecceba94af00baf6a70399b27c5p-6, + 0x1.ef7bdep-6 + }, + { // Entry 161 + -0x1.efa28ecceba94af00baf6a70399b27c5p-6, + -0x1.ef7bdep-6 + }, + { // Entry 162 + 0x1.fa0dc7b72c16fcd1b16623d79ed72b48p-3, + 0x1.effffep-3 + }, + { // Entry 163 + -0x1.fa0dc7b72c16fcd1b16623d79ed72b48p-3, + -0x1.effffep-3 + }, + { // Entry 164 + 0x1.f479ce9e62f1de793e626c5e4cd483bfp-4, + 0x1.f1fffep-4 + }, + { // Entry 165 + -0x1.f479ce9e62f1de793e626c5e4cd483bfp-4, + -0x1.f1fffep-4 + }, + { // Entry 166 + 0x1.f48dfd004492424a2242a7f1b84fde43p-4, + 0x1.f213e0p-4 + }, + { // Entry 167 + -0x1.f48dfd004492424a2242a7f1b84fde43p-4, + -0x1.f213e0p-4 + }, + { // Entry 168 + 0x1.f55565004e1ba77f8c68954d58ad9522p-4, + 0x1.f2d854p-4 + }, + { // Entry 169 + -0x1.f55565004e1ba77f8c68954d58ad9522p-4, + -0x1.f2d854p-4 + }, + { // Entry 170 + 0x1.fec794ffff80de6f133ff791c5439d8ep-3, + 0x1.f47232p-3 + }, + { // Entry 171 + -0x1.fec794ffff80de6f133ff791c5439d8ep-3, + -0x1.f47232p-3 + }, + { // Entry 172 + 0x1.f813e9004d5cdfb063728666fb66e97fp-4, + 0x1.f58c5ep-4 + }, + { // Entry 173 + -0x1.f813e9004d5cdfb063728666fb66e97fp-4, + -0x1.f58c5ep-4 + }, + { // Entry 174 + 0x1.f7b721ffff991c706d90945105ec030fp-7, + 0x1.f7acfap-7 + }, + { // Entry 175 + -0x1.f7b721ffff991c706d90945105ec030fp-7, + -0x1.f7acfap-7 + }, + { // Entry 176 + 0x1.fbd5f50051fbc9e55c8b2be9e9e21851p-4, + 0x1.f93fe2p-4 + }, + { // Entry 177 + -0x1.fbd5f50051fbc9e55c8b2be9e9e21851p-4, + -0x1.f93fe2p-4 + }, + { // Entry 178 + 0x1.fcfaff0050f8ca3009ab7b1e46b4ec9dp-4, + 0x1.fa6074p-4 + }, + { // Entry 179 + -0x1.fcfaff0050f8ca3009ab7b1e46b4ec9dp-4, + -0x1.fa6074p-4 + }, + { // Entry 180 + 0x1.03a8a30006385ed65d745b5dec7c194ep-2, + 0x1.fc7746p-3 + }, + { // Entry 181 + -0x1.03a8a30006385ed65d745b5dec7c194ep-2, + -0x1.fc7746p-3 + }, + { // Entry 182 + 0x1.fe2a317243079e4fdd1cb855c975cdf1p-6, + 0x1.fep-6 + }, + { // Entry 183 + -0x1.fe2a317243079e4fdd1cb855c975cdf1p-6, + -0x1.fep-6 + }, + { // Entry 184 + 0x1.fe82db7456cf5b9b9edf1b4b77c994bdp-6, + 0x1.fe5894p-6 + }, + { // Entry 185 + -0x1.fe82db7456cf5b9b9edf1b4b77c994bdp-6, + -0x1.fe5894p-6 + }, + { // Entry 186 + 0x1.ffeaa710f5a6e8d16dc905e338c0200fp-7, + 0x1.ffdffep-7 + }, + { // Entry 187 + -0x1.ffeaa710f5a6e8d16dc905e338c0200fp-7, + -0x1.ffdffep-7 + }, + { // Entry 188 + 0x1.7d33cb0c02505f47778ae337ae72ec1fp2, + 0x1.fffe3ep-1 + }, + { // Entry 189 + -0x1.7d33cb0c02505f47778ae337ae72ec1fp2, + -0x1.fffe3ep-1 + }, + { // Entry 190 + 0x1.193e51002cdbc475975ff766fbd1f6b5p-1, + 0x1.ffff7ep-2 + }, + { // Entry 191 + -0x1.193e51002cdbc475975ff766fbd1f6b5p-1, + -0x1.ffff7ep-2 + }, + { // Entry 192 + 0x1.000514847a91cdaebaecfa77f6111dd9p-6, + 0x1.ffff7ep-7 + }, + { // Entry 193 + -0x1.000514847a91cdaebaecfa77f6111dd9p-6, + -0x1.ffff7ep-7 + }, + { // Entry 194 + 0x1.193ea5002587c5e868720bc46d87505bp-1, + 0x1.fffffcp-2 + }, + { // Entry 195 + -0x1.193ea5002587c5e868720bc46d87505bp-1, + -0x1.fffffcp-2 + }, + { // Entry 196 + 0x1.fffffcaaaaa71111155a35aa3dc3d06cp-13, + 0x1.fffffcp-13 + }, + { // Entry 197 + -0x1.fffffcaaaaa71111155a35aa3dc3d06cp-13, + -0x1.fffffcp-13 + }, + { // Entry 198 + -0x1.31dd2cd1386933d1d890b6a9703c16adp1, + -0x1.f77778p-1 + }, + { // Entry 199 + 0x1.31dd2cd1386933d1d890b6a9703c16adp1, + 0x1.f77778p-1 + }, + { // Entry 200 + -0x1.04f663adcdd5e8864c55a5751a0b17b7p1, + -0x1.eeeef0p-1 + }, + { // Entry 201 + 0x1.04f663adcdd5e8864c55a5751a0b17b7p1, + 0x1.eeeef0p-1 + }, + { // Entry 202 + -0x1.d4ef9ebd04658e641423a6ed3defe0dap0, + -0x1.e66668p-1 + }, + { // Entry 203 + 0x1.d4ef9ebd04658e641423a6ed3defe0dap0, + 0x1.e66668p-1 + }, + { // Entry 204 + -0x1.af0395037f075cc7baefa38ef81f508fp0, + -0x1.dddde0p-1 + }, + { // Entry 205 + 0x1.af0395037f075cc7baefa38ef81f508fp0, + 0x1.dddde0p-1 + }, + { // Entry 206 + -0x1.9157e83626a045c7caf65f13d23b0dd3p0, + -0x1.d55558p-1 + }, + { // Entry 207 + 0x1.9157e83626a045c7caf65f13d23b0dd3p0, + 0x1.d55558p-1 + }, + { // Entry 208 + -0x1.78e368cc158d8c46dcfa1f8a88963aa4p0, + -0x1.ccccd0p-1 + }, + { // Entry 209 + 0x1.78e368cc158d8c46dcfa1f8a88963aa4p0, + 0x1.ccccd0p-1 + }, + { // Entry 210 + -0x1.64077e53bbdd057c995616b489d53cf4p0, + -0x1.c44448p-1 + }, + { // Entry 211 + 0x1.64077e53bbdd057c995616b489d53cf4p0, + 0x1.c44448p-1 + }, + { // Entry 212 + -0x1.51cca9ffc51eb62dad1c2d513ab87a52p0, + -0x1.bbbbc0p-1 + }, + { // Entry 213 + 0x1.51cca9ffc51eb62dad1c2d513ab87a52p0, + 0x1.bbbbc0p-1 + }, + { // Entry 214 + -0x1.419343b452798f95458545b3a8e5c365p0, + -0x1.b33338p-1 + }, + { // Entry 215 + 0x1.419343b452798f95458545b3a8e5c365p0, + 0x1.b33338p-1 + }, + { // Entry 216 + -0x1.32ee4432223fd6ff7fc96b745a339d15p0, + -0x1.aaaab0p-1 + }, + { // Entry 217 + 0x1.32ee4432223fd6ff7fc96b745a339d15p0, + 0x1.aaaab0p-1 + }, + { // Entry 218 + -0x1.258fe3b6e537bb3292f6d7e4afbb9d07p0, + -0x1.a22228p-1 + }, + { // Entry 219 + 0x1.258fe3b6e537bb3292f6d7e4afbb9d07p0, + 0x1.a22228p-1 + }, + { // Entry 220 + -0x1.193eb08e5ea8c2c200b0e99c5a36fddep0, + -0x1.9999a0p-1 + }, + { // Entry 221 + 0x1.193eb08e5ea8c2c200b0e99c5a36fddep0, + 0x1.9999a0p-1 + }, + { // Entry 222 + -0x1.0dcf079da2f030ae3fbf6b6f92a2a743p0, + -0x1.911118p-1 + }, + { // Entry 223 + 0x1.0dcf079da2f030ae3fbf6b6f92a2a743p0, + 0x1.911118p-1 + }, + { // Entry 224 + -0x1.031efa1f0ecc8f3a906dd42d8c2123cbp0, + -0x1.888890p-1 + }, + { // Entry 225 + 0x1.031efa1f0ecc8f3a906dd42d8c2123cbp0, + 0x1.888890p-1 + }, + { // Entry 226 + -0x1.f2273d2c4ab521b4cd487640ff959135p-1, + -0x1.800008p-1 + }, + { // Entry 227 + 0x1.f2273d2c4ab521b4cd487640ff959135p-1, + 0x1.800008p-1 + }, + { // Entry 228 + -0x1.df2e7fe4879a14bed3444cebeb14e17ap-1, + -0x1.777780p-1 + }, + { // Entry 229 + 0x1.df2e7fe4879a14bed3444cebeb14e17ap-1, + 0x1.777780p-1 + }, + { // Entry 230 + -0x1.cd3033baff79597658ed84a70792b418p-1, + -0x1.6eeef8p-1 + }, + { // Entry 231 + 0x1.cd3033baff79597658ed84a70792b418p-1, + 0x1.6eeef8p-1 + }, + { // Entry 232 + -0x1.bc0ee367530d66cc841d5f9d30c2b886p-1, + -0x1.666670p-1 + }, + { // Entry 233 + 0x1.bc0ee367530d66cc841d5f9d30c2b886p-1, + 0x1.666670p-1 + }, + { // Entry 234 + -0x1.abb1dc08e18126620d575aabc793b2a9p-1, + -0x1.5ddde8p-1 + }, + { // Entry 235 + 0x1.abb1dc08e18126620d575aabc793b2a9p-1, + 0x1.5ddde8p-1 + }, + { // Entry 236 + -0x1.9c0432b20c814b3021011c479a51acefp-1, + -0x1.555560p-1 + }, + { // Entry 237 + 0x1.9c0432b20c814b3021011c479a51acefp-1, + 0x1.555560p-1 + }, + { // Entry 238 + -0x1.8cf4071c6b253657280e30019b42b6cbp-1, + -0x1.4cccd8p-1 + }, + { // Entry 239 + 0x1.8cf4071c6b253657280e30019b42b6cbp-1, + 0x1.4cccd8p-1 + }, + { // Entry 240 + -0x1.7e71f26de777bc532a40c40569e80be7p-1, + -0x1.444450p-1 + }, + { // Entry 241 + 0x1.7e71f26de777bc532a40c40569e80be7p-1, + 0x1.444450p-1 + }, + { // Entry 242 + -0x1.7070964a5465019869be4292807243adp-1, + -0x1.3bbbc8p-1 + }, + { // Entry 243 + 0x1.7070964a5465019869be4292807243adp-1, + 0x1.3bbbc8p-1 + }, + { // Entry 244 + -0x1.62e443efa416f35cfe72519ab5c49833p-1, + -0x1.333340p-1 + }, + { // Entry 245 + 0x1.62e443efa416f35cfe72519ab5c49833p-1, + 0x1.333340p-1 + }, + { // Entry 246 + -0x1.55c2b577a316f398743bc84818a8366dp-1, + -0x1.2aaab8p-1 + }, + { // Entry 247 + 0x1.55c2b577a316f398743bc84818a8366dp-1, + 0x1.2aaab8p-1 + }, + { // Entry 248 + -0x1.4902d4f8dcabba59533687adf378fc3bp-1, + -0x1.222230p-1 + }, + { // Entry 249 + 0x1.4902d4f8dcabba59533687adf378fc3bp-1, + 0x1.222230p-1 + }, + { // Entry 250 + -0x1.3c9c8e61aec973e370031a7719321089p-1, + -0x1.1999a8p-1 + }, + { // Entry 251 + 0x1.3c9c8e61aec973e370031a7719321089p-1, + 0x1.1999a8p-1 + }, + { // Entry 252 + -0x1.3088a9b5ad202b17e52d8601513662b0p-1, + -0x1.111120p-1 + }, + { // Entry 253 + 0x1.3088a9b5ad202b17e52d8601513662b0p-1, + 0x1.111120p-1 + }, + { // Entry 254 + -0x1.24c0abe8e973d6e99acbd15484fd64f1p-1, + -0x1.088898p-1 + }, + { // Entry 255 + 0x1.24c0abe8e973d6e99acbd15484fd64f1p-1, + 0x1.088898p-1 + }, + { // Entry 256 + -0x1.193ebd0025f7c5edf31cf5a0e285059ep-1, + -0x1.000010p-1 + }, + { // Entry 257 + 0x1.193ebd0025f7c5edf31cf5a0e285059ep-1, + 0x1.000010p-1 + }, + { // Entry 258 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.p-1 + }, + { // Entry 259 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.p-1 + }, + { // Entry 260 + 0x1.24c0961556d0aa95d6fb6c106b236048p-1, + 0x1.088888p-1 + }, + { // Entry 261 + -0x1.24c0961556d0aa95d6fb6c106b236048p-1, + -0x1.088888p-1 + }, + { // Entry 262 + 0x1.30889359736e9acf9152fe43f28f7dcdp-1, + 0x1.111110p-1 + }, + { // Entry 263 + -0x1.30889359736e9acf9152fe43f28f7dcdp-1, + -0x1.111110p-1 + }, + { // Entry 264 + 0x1.3c9c77714791547aab37a433668ebfb8p-1, + 0x1.199998p-1 + }, + { // Entry 265 + -0x1.3c9c77714791547aab37a433668ebfb8p-1, + -0x1.199998p-1 + }, + { // Entry 266 + 0x1.4902bd6778eba4dde3659bd4e4b3b796p-1, + 0x1.222220p-1 + }, + { // Entry 267 + -0x1.4902bd6778eba4dde3659bd4e4b3b796p-1, + -0x1.222220p-1 + }, + { // Entry 268 + 0x1.55c29d36f62e0342a6067b58817783bep-1, + 0x1.2aaaa8p-1 + }, + { // Entry 269 + -0x1.55c29d36f62e0342a6067b58817783bep-1, + -0x1.2aaaa8p-1 + }, + { // Entry 270 + 0x1.62e42aefa3a673577e1cbcc51d3a75b3p-1, + 0x1.333330p-1 + }, + { // Entry 271 + -0x1.62e42aefa3a673577e1cbcc51d3a75b3p-1, + -0x1.333330p-1 + }, + { // Entry 272 + 0x1.70707c78ea48dcd2be90243420138634p-1, + 0x1.3bbbb8p-1 + }, + { // Entry 273 + -0x1.70707c78ea48dcd2be90243420138634p-1, + -0x1.3bbbb8p-1 + }, + { // Entry 274 + 0x1.7e71d7b69209fbf8a31f61e28fb38405p-1, + 0x1.444440p-1 + }, + { // Entry 275 + -0x1.7e71d7b69209fbf8a31f61e28fb38405p-1, + -0x1.444440p-1 + }, + { // Entry 276 + 0x1.8cf3eb67c6bcfdb506baa6ecb5f2d950p-1, + 0x1.4cccc8p-1 + }, + { // Entry 277 + -0x1.8cf3eb67c6bcfdb506baa6ecb5f2d950p-1, + -0x1.4cccc8p-1 + }, + { // Entry 278 + 0x1.9c0415e53f585567855afd0c32aa7e17p-1, + 0x1.555550p-1 + }, + { // Entry 279 + -0x1.9c0415e53f585567855afd0c32aa7e17p-1, + -0x1.555550p-1 + }, + { // Entry 280 + 0x1.abb1be04e0a675ba1948b8fb1841584cp-1, + 0x1.5dddd8p-1 + }, + { // Entry 281 + -0x1.abb1be04e0a675ba1948b8fb1841584cp-1, + -0x1.5dddd8p-1 + }, + { // Entry 282 + 0x1.bc0ec407f36921e00a5bfee526dd0834p-1, + 0x1.666660p-1 + }, + { // Entry 283 + -0x1.bc0ec407f36921e00a5bfee526dd0834p-1, + -0x1.666660p-1 + }, + { // Entry 284 + 0x1.cd3012d5c08d242886fcc0f61668a3d5p-1, + 0x1.6eeee8p-1 + }, + { // Entry 285 + -0x1.cd3012d5c08d242886fcc0f61668a3d5p-1, + -0x1.6eeee8p-1 + }, + { // Entry 286 + 0x1.df2e5d46fda42cf27a71863b4cf7c7e6p-1, + 0x1.777770p-1 + }, + { // Entry 287 + -0x1.df2e5d46fda42cf27a71863b4cf7c7e6p-1, + -0x1.777770p-1 + }, + { // Entry 288 + 0x1.f227189a01908f60f615760148cb8e3fp-1, + 0x1.7ffff8p-1 + }, + { // Entry 289 + -0x1.f227189a01908f60f615760148cb8e3fp-1, + -0x1.7ffff8p-1 + }, + { // Entry 290 + 0x1.031ee6b6dd313b8e955cf0deb74b13d5p0, + 0x1.888880p-1 + }, + { // Entry 291 + -0x1.031ee6b6dd313b8e955cf0deb74b13d5p0, + -0x1.888880p-1 + }, + { // Entry 292 + 0x1.0dcef2e94717cf54ab5e3d4ae7c6ab03p0, + 0x1.911108p-1 + }, + { // Entry 293 + -0x1.0dcef2e94717cf54ab5e3d4ae7c6ab03p0, + -0x1.911108p-1 + }, + { // Entry 294 + 0x1.193e9a557b698cfbd9d4a767ef99c767p0, + 0x1.999990p-1 + }, + { // Entry 295 + -0x1.193e9a557b698cfbd9d4a767ef99c767p0, + -0x1.999990p-1 + }, + { // Entry 296 + 0x1.258fcbb1c5e534f37ad64a1e99a869e8p0, + 0x1.a22218p-1 + }, + { // Entry 297 + -0x1.258fcbb1c5e534f37ad64a1e99a869e8p0, + -0x1.a22218p-1 + }, + { // Entry 298 + 0x1.32ee2a03975b57f64a84528990be1f9ap0, + 0x1.aaaaa0p-1 + }, + { // Entry 299 + -0x1.32ee2a03975b57f64a84528990be1f9ap0, + -0x1.aaaaa0p-1 + }, + { // Entry 300 + 0x1.419326e02573d8b3acc7cbf76968fe33p0, + 0x1.b33328p-1 + }, + { // Entry 301 + -0x1.419326e02573d8b3acc7cbf76968fe33p0, + -0x1.b33328p-1 + }, + { // Entry 302 + 0x1.51cc89db34776ccef56dd618e02f1da6p0, + 0x1.bbbbb0p-1 + }, + { // Entry 303 + -0x1.51cc89db34776ccef56dd618e02f1da6p0, + -0x1.bbbbb0p-1 + }, + { // Entry 304 + 0x1.640759eae23a226a9d7c3926242da006p0, + 0x1.c44438p-1 + }, + { // Entry 305 + -0x1.640759eae23a226a9d7c3926242da006p0, + -0x1.c44438p-1 + }, + { // Entry 306 + 0x1.78e33eb126c4263142e4f9584dfaa238p0, + 0x1.ccccc0p-1 + }, + { // Entry 307 + -0x1.78e33eb126c4263142e4f9584dfaa238p0, + -0x1.ccccc0p-1 + }, + { // Entry 308 + 0x1.9157b61fe9d5041ad9f9720e3ae0d7c0p0, + 0x1.d55548p-1 + }, + { // Entry 309 + -0x1.9157b61fe9d5041ad9f9720e3ae0d7c0p0, + -0x1.d55548p-1 + }, + { // Entry 310 + 0x1.af0356f1e19ad530d89ec545995495b6p0, + 0x1.ddddd0p-1 + }, + { // Entry 311 + -0x1.af0356f1e19ad530d89ec545995495b6p0, + -0x1.ddddd0p-1 + }, + { // Entry 312 + 0x1.d4ef4caff7901be8dda0560383f995f5p0, + 0x1.e66658p-1 + }, + { // Entry 313 + -0x1.d4ef4caff7901be8dda0560383f995f5p0, + -0x1.e66658p-1 + }, + { // Entry 314 + 0x1.04f626a98f6c7775f5aa272dfa30aa0cp1, + 0x1.eeeee0p-1 + }, + { // Entry 315 + -0x1.04f626a98f6c7775f5aa272dfa30aa0cp1, + -0x1.eeeee0p-1 + }, + { // Entry 316 + 0x1.31dcb3cf7aadccb53ddc6ab3e5f44cf1p1, + 0x1.f77768p-1 + }, + { // Entry 317 + -0x1.31dcb3cf7aadccb53ddc6ab3e5f44cf1p1, + -0x1.f77768p-1 + }, + { // Entry 318 + -0x1.1542456b37d42c1c6b731df2db40f6c7p3, + -0x1.fffffep-1 + }, + { // Entry 319 + 0x1.1542456b37d42c1c6b731df2db40f6c7p3, + 0x1.fffffep-1 + }, + { // Entry 320 + -0x1.0a2b23e3bab72e81aed0380eac971caep3, + -0x1.fffffcp-1 + }, + { // Entry 321 + 0x1.0a2b23e3bab72e81aed0380eac971caep3, + 0x1.fffffcp-1 + }, + { // Entry 322 + -0x1.03ae5ae08ad1118501202fc82197e98ep3, + -0x1.fffffap-1 + }, + { // Entry 323 + 0x1.03ae5ae08ad1118501202fc82197e98ep3, + 0x1.fffffap-1 + }, + { // Entry 324 + 0x1.1542456b37d42c1c6b731df2db40f6c7p3, + 0x1.fffffep-1 + }, + { // Entry 325 + -0x1.1542456b37d42c1c6b731df2db40f6c7p3, + -0x1.fffffep-1 + }, + { // Entry 326 + 0x1.0a2b23e3bab72e81aed0380eac971caep3, + 0x1.fffffcp-1 + }, + { // Entry 327 + -0x1.0a2b23e3bab72e81aed0380eac971caep3, + -0x1.fffffcp-1 + }, + { // Entry 328 + 0x1.03ae5ae08ad1118501202fc82197e98ep3, + 0x1.fffffap-1 + }, + { // Entry 329 + -0x1.03ae5ae08ad1118501202fc82197e98ep3, + -0x1.fffffap-1 + }, + { // Entry 330 + 0x1.4a851923985f29e566d100aa672e9ae3p-3, + 0x1.47ae12p-3 + }, + { // Entry 331 + -0x1.4a851923985f29e566d100aa672e9ae3p-3, + -0x1.47ae12p-3 + }, + { // Entry 332 + 0x1.4a851b310bf87886f18db6831c7dbb5bp-3, + 0x1.47ae14p-3 + }, + { // Entry 333 + -0x1.4a851b310bf87886f18db6831c7dbb5bp-3, + -0x1.47ae14p-3 + }, + { // Entry 334 + 0x1.4a851d3e7f91f24c757b36332a215cb4p-3, + 0x1.47ae16p-3 + }, + { // Entry 335 + -0x1.4a851d3e7f91f24c757b36332a215cb4p-3, + -0x1.47ae16p-3 + }, + { // Entry 336 + -0x1.4a851d3e7f91f24c757b36332a215cb4p-3, + -0x1.47ae16p-3 + }, + { // Entry 337 + 0x1.4a851d3e7f91f24c757b36332a215cb4p-3, + 0x1.47ae16p-3 + }, + { // Entry 338 + -0x1.4a851b310bf87886f18db6831c7dbb5bp-3, + -0x1.47ae14p-3 + }, + { // Entry 339 + 0x1.4a851b310bf87886f18db6831c7dbb5bp-3, + 0x1.47ae14p-3 + }, + { // Entry 340 + -0x1.4a851923985f29e566d100aa672e9ae3p-3, + -0x1.47ae12p-3 + }, + { // Entry 341 + 0x1.4a851923985f29e566d100aa672e9ae3p-3, + 0x1.47ae12p-3 + }, + { // Entry 342 + 0x1.193ea6557adbc5e86add80b0ebf2cb85p-1, + 0x1.fffffep-2 + }, + { // Entry 343 + -0x1.193ea6557adbc5e86add80b0ebf2cb85p-1, + -0x1.fffffep-2 + }, + { // Entry 344 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.p-1 + }, + { // Entry 345 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.p-1 + }, + { // Entry 346 + 0x1.193eaa557add1b3dc34f47d111dfdba1p-1, + 0x1.000002p-1 + }, + { // Entry 347 + -0x1.193eaa557add1b3dc34f47d111dfdba1p-1, + -0x1.000002p-1 + }, + { // Entry 348 + 0x1.058aee9700341b95bc1c097b18171158p-2, + 0x1.fffffep-3 + }, + { // Entry 349 + -0x1.058aee9700341b95bc1c097b18171158p-2, + -0x1.fffffep-3 + }, + { // Entry 350 + 0x1.058aefa811451a7276bc2f82043b6a7dp-2, + 0x1.p-2 + }, + { // Entry 351 + -0x1.058aefa811451a7276bc2f82043b6a7dp-2, + -0x1.p-2 + }, + { // Entry 352 + 0x1.058af1ca33678565f2fe3a2d94083376p-2, + 0x1.000002p-2 + }, + { // Entry 353 + -0x1.058af1ca33678565f2fe3a2d94083376p-2, + -0x1.000002p-2 + }, + { // Entry 354 + 0x1.015890c5daae76a9c988ea53c9fdd571p-3, + 0x1.fffffep-4 + }, + { // Entry 355 + -0x1.015890c5daae76a9c988ea53c9fdd571p-3, + -0x1.fffffep-4 + }, + { // Entry 356 + 0x1.015891c9eaef7699467a0f6b916c6494p-3, + 0x1.p-3 + }, + { // Entry 357 + -0x1.015891c9eaef7699467a0f6b916c6494p-3, + -0x1.p-3 + }, + { // Entry 358 + 0x1.015893d20b718f3cd8df6c056dc045a9p-3, + 0x1.000002p-3 + }, + { // Entry 359 + -0x1.015893d20b718f3cd8df6c056dc045a9p-3, + -0x1.000002p-3 + }, + { // Entry 360 + 0x1.005587ac3659cdcc1515520e6dd371acp-4, + 0x1.fffffep-5 + }, + { // Entry 361 + -0x1.005587ac3659cdcc1515520e6dd371acp-4, + -0x1.fffffep-5 + }, + { // Entry 362 + 0x1.005588ad375acdcb1312a563c685255ep-4, + 0x1.p-4 + }, + { // Entry 363 + -0x1.005588ad375acdcb1312a563c685255ep-4, + -0x1.p-4 + }, + { // Entry 364 + 0x1.00558aaf395cd3d521277650da85a2b3p-4, + 0x1.000002p-4 + }, + { // Entry 365 + -0x1.00558aaf395cd3d521277650da85a2b3p-4, + -0x1.000002p-4 + }, + { // Entry 366 + 0x1.00155788dade20f3bd9fdc4d8c702791p-5, + 0x1.fffffep-6 + }, + { // Entry 367 + -0x1.00155788dade20f3bd9fdc4d8c702791p-5, + -0x1.fffffep-6 + }, + { // Entry 368 + 0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + 0x1.p-5 + }, + { // Entry 369 + -0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + -0x1.p-5 + }, + { // Entry 370 + 0x1.00155a899b0e2db71e84d97e04e64ed3p-5, + 0x1.000002p-5 + }, + { // Entry 371 + -0x1.00155a899b0e2db71e84d97e04e64ed3p-5, + -0x1.000002p-5 + }, + { // Entry 372 + 0x1.000554887ad0c98e0e3a70d6796dd00ap-6, + 0x1.fffffep-7 + }, + { // Entry 373 + -0x1.000554887ad0c98e0e3a70d6796dd00ap-6, + -0x1.fffffep-7 + }, + { // Entry 374 + 0x1.000555888ad1c98e0d3a562aced328b5p-6, + 0x1.p-6 + }, + { // Entry 375 + -0x1.000555888ad1c98e0d3a562aced328b5p-6, + -0x1.p-6 + }, + { // Entry 376 + 0x1.00055788aad3c9ee173b60f77d5e4818p-6, + 0x1.000002p-6 + }, + { // Entry 377 + -0x1.00055788aad3c9ee173b60f77d5e4818p-6, + -0x1.000002p-6 + }, + { // Entry 378 + 0x1.0001545884919d3b03f04f2aec3aad64p-7, + 0x1.fffffep-8 + }, + { // Entry 379 + -0x1.0001545884919d3b03f04f2aec3aad64p-7, + -0x1.fffffep-8 + }, + { // Entry 380 + 0x1.000155588891ad3743d14fc45da12ef2p-7, + 0x1.p-7 + }, + { // Entry 381 + -0x1.000155588891ad3743d14fc45da12ef2p-7, + -0x1.p-7 + }, + { // Entry 382 + 0x1.000157589091cd47c4535d7818762b69p-7, + 0x1.000002p-7 + }, + { // Entry 383 + -0x1.000157589091cd47c4535d7818762b69p-7, + -0x1.000002p-7 + }, + { // Entry 384 + 0x1.000054558788ac1bed20f7e1abb63c0bp-8, + 0x1.fffffep-9 + }, + { // Entry 385 + -0x1.000054558788ac1bed20f7e1abb63c0bp-8, + -0x1.fffffep-9 + }, + { // Entry 386 + 0x1.000055558888ad1aee1ef9340407975ap-8, + 0x1.p-8 + }, + { // Entry 387 + -0x1.000055558888ad1aee1ef9340407975ap-8, + -0x1.p-8 + }, + { // Entry 388 + 0x1.000057558a88af1ef026fdeac0c26c29p-8, + 0x1.000002p-8 + }, + { // Entry 389 + -0x1.000057558a88af1ef026fdeac0c26c29p-8, + -0x1.000002p-8 + }, + { // Entry 390 + 0x1.000014555848890b11c5ac88518c9f8bp-9, + 0x1.fffffep-10 + }, + { // Entry 391 + -0x1.000014555848890b11c5ac88518c9f8bp-9, + -0x1.fffffep-10 + }, + { // Entry 392 + 0x1.000015555888891ad1c98c9e9b0230f4p-9, + 0x1.p-9 + }, + { // Entry 393 + -0x1.000015555888891ad1c98c9e9b0230f4p-9, + -0x1.p-9 + }, + { // Entry 394 + 0x1.000017555908893bd1d20d4b76ad6c40p-9, + 0x1.000002p-9 + }, + { // Entry 395 + -0x1.000017555908893bd1d20d4b76ad6c40p-9, + -0x1.000002p-9 + }, + { // Entry 396 + 0x1.0000045555788889e1ad293e1f844b3dp-10, + 0x1.fffffep-11 + }, + { // Entry 397 + -0x1.0000045555788889e1ad293e1f844b3dp-10, + -0x1.fffffep-11 + }, + { // Entry 398 + 0x1.000005555588888ad1ad374375aba09fp-10, + 0x1.p-10 + }, + { // Entry 399 + -0x1.000005555588888ad1ad374375aba09fp-10, + -0x1.p-10 + }, + { // Entry 400 + 0x1.0000075555a8888d11ad5f6e23264b7cp-10, + 0x1.000002p-10 + }, + { // Entry 401 + -0x1.0000075555a8888d11ad5f6e23264b7cp-10, + -0x1.000002p-10 + }, + { // Entry 402 + 0x1.fffffe0aaaaa8b11112f15a3536b318fp-15, + 0x1.fffffep-15 + }, + { // Entry 403 + -0x1.fffffe0aaaaa8b11112f15a3536b318fp-15, + -0x1.fffffep-15 + }, + { // Entry 404 + 0x1.000000055555558888888ad1ad1aee1ep-14, + 0x1.p-14 + }, + { // Entry 405 + -0x1.000000055555558888888ad1ad1aee1ep-14, + -0x1.p-14 + }, + { // Entry 406 + 0x1.000002055555758888ca8ad1dfe598dap-14, + 0x1.000002p-14 + }, + { // Entry 407 + -0x1.000002055555758888ca8ad1dfe598dap-14, + -0x1.000002p-14 + }, + { // Entry 408 + 0x1.fffffe00000000aaaaa8aaaaacab1110p-29, + 0x1.fffffep-29 + }, + { // Entry 409 + -0x1.fffffe00000000aaaaa8aaaaacab1110p-29, + -0x1.fffffep-29 + }, + { // Entry 410 + 0x1.00000000000000555555555555558888p-28, + 0x1.p-28 + }, + { // Entry 411 + -0x1.00000000000000555555555555558888p-28, + -0x1.p-28 + }, + { // Entry 412 + 0x1.0000020000000055555755555955888bp-28, + 0x1.000002p-28 + }, + { // Entry 413 + -0x1.0000020000000055555755555955888bp-28, + -0x1.000002p-28 + }, + { // Entry 414 + 0x1.fffffe000000000aaaaa8aaaaacaab11p-31, + 0x1.fffffep-31 + }, + { // Entry 415 + -0x1.fffffe000000000aaaaa8aaaaacaab11p-31, + -0x1.fffffep-31 + }, + { // Entry 416 + 0x1.00000000000000055555555555555588p-30, + 0x1.p-30 + }, + { // Entry 417 + -0x1.00000000000000055555555555555588p-30, + -0x1.p-30 + }, + { // Entry 418 + 0x1.00000200000000055555755555955588p-30, + 0x1.000002p-30 + }, + { // Entry 419 + -0x1.00000200000000055555755555955588p-30, + -0x1.000002p-30 + }, + { // Entry 420 + -0x1.193eaa557add1b3dc34f47d111dfdba1p-1, + -0x1.000002p-1 + }, + { // Entry 421 + 0x1.193eaa557add1b3dc34f47d111dfdba1p-1, + 0x1.000002p-1 + }, + { // Entry 422 + -0x1.193ea7aad030a976a4198d55053b7cb5p-1, + -0x1.p-1 + }, + { // Entry 423 + 0x1.193ea7aad030a976a4198d55053b7cb5p-1, + 0x1.p-1 + }, + { // Entry 424 + -0x1.193ea6557adbc5e86add80b0ebf2cb85p-1, + -0x1.fffffep-2 + }, + { // Entry 425 + 0x1.193ea6557adbc5e86add80b0ebf2cb85p-1, + 0x1.fffffep-2 + }, + { // Entry 426 + -0x1.058af1ca33678565f2fe3a2d94083376p-2, + -0x1.000002p-2 + }, + { // Entry 427 + 0x1.058af1ca33678565f2fe3a2d94083376p-2, + 0x1.000002p-2 + }, + { // Entry 428 + -0x1.058aefa811451a7276bc2f82043b6a7dp-2, + -0x1.p-2 + }, + { // Entry 429 + 0x1.058aefa811451a7276bc2f82043b6a7dp-2, + 0x1.p-2 + }, + { // Entry 430 + -0x1.058aee9700341b95bc1c097b18171158p-2, + -0x1.fffffep-3 + }, + { // Entry 431 + 0x1.058aee9700341b95bc1c097b18171158p-2, + 0x1.fffffep-3 + }, + { // Entry 432 + -0x1.015893d20b718f3cd8df6c056dc045a9p-3, + -0x1.000002p-3 + }, + { // Entry 433 + 0x1.015893d20b718f3cd8df6c056dc045a9p-3, + 0x1.000002p-3 + }, + { // Entry 434 + -0x1.015891c9eaef7699467a0f6b916c6494p-3, + -0x1.p-3 + }, + { // Entry 435 + 0x1.015891c9eaef7699467a0f6b916c6494p-3, + 0x1.p-3 + }, + { // Entry 436 + -0x1.015890c5daae76a9c988ea53c9fdd571p-3, + -0x1.fffffep-4 + }, + { // Entry 437 + 0x1.015890c5daae76a9c988ea53c9fdd571p-3, + 0x1.fffffep-4 + }, + { // Entry 438 + -0x1.00558aaf395cd3d521277650da85a2b3p-4, + -0x1.000002p-4 + }, + { // Entry 439 + 0x1.00558aaf395cd3d521277650da85a2b3p-4, + 0x1.000002p-4 + }, + { // Entry 440 + -0x1.005588ad375acdcb1312a563c685255ep-4, + -0x1.p-4 + }, + { // Entry 441 + 0x1.005588ad375acdcb1312a563c685255ep-4, + 0x1.p-4 + }, + { // Entry 442 + -0x1.005587ac3659cdcc1515520e6dd371acp-4, + -0x1.fffffep-5 + }, + { // Entry 443 + 0x1.005587ac3659cdcc1515520e6dd371acp-4, + 0x1.fffffep-5 + }, + { // Entry 444 + -0x1.00155a899b0e2db71e84d97e04e64ed3p-5, + -0x1.000002p-5 + }, + { // Entry 445 + 0x1.00155a899b0e2db71e84d97e04e64ed3p-5, + 0x1.000002p-5 + }, + { // Entry 446 + -0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + -0x1.p-5 + }, + { // Entry 447 + 0x1.001558891aee24b49dd3fdc5b66ee9f1p-5, + 0x1.p-5 + }, + { // Entry 448 + -0x1.00155788dade20f3bd9fdc4d8c702791p-5, + -0x1.fffffep-6 + }, + { // Entry 449 + 0x1.00155788dade20f3bd9fdc4d8c702791p-5, + 0x1.fffffep-6 + }, + { // Entry 450 + -0x1.00055788aad3c9ee173b60f77d5e4818p-6, + -0x1.000002p-6 + }, + { // Entry 451 + 0x1.00055788aad3c9ee173b60f77d5e4818p-6, + 0x1.000002p-6 + }, + { // Entry 452 + -0x1.000555888ad1c98e0d3a562aced328b5p-6, + -0x1.p-6 + }, + { // Entry 453 + 0x1.000555888ad1c98e0d3a562aced328b5p-6, + 0x1.p-6 + }, + { // Entry 454 + -0x1.000554887ad0c98e0e3a70d6796dd00ap-6, + -0x1.fffffep-7 + }, + { // Entry 455 + 0x1.000554887ad0c98e0e3a70d6796dd00ap-6, + 0x1.fffffep-7 + }, + { // Entry 456 + -0x1.000157589091cd47c4535d7818762b69p-7, + -0x1.000002p-7 + }, + { // Entry 457 + 0x1.000157589091cd47c4535d7818762b69p-7, + 0x1.000002p-7 + }, + { // Entry 458 + -0x1.000155588891ad3743d14fc45da12ef2p-7, + -0x1.p-7 + }, + { // Entry 459 + 0x1.000155588891ad3743d14fc45da12ef2p-7, + 0x1.p-7 + }, + { // Entry 460 + -0x1.0001545884919d3b03f04f2aec3aad64p-7, + -0x1.fffffep-8 + }, + { // Entry 461 + 0x1.0001545884919d3b03f04f2aec3aad64p-7, + 0x1.fffffep-8 + }, + { // Entry 462 + -0x1.000057558a88af1ef026fdeac0c26c29p-8, + -0x1.000002p-8 + }, + { // Entry 463 + 0x1.000057558a88af1ef026fdeac0c26c29p-8, + 0x1.000002p-8 + }, + { // Entry 464 + -0x1.000055558888ad1aee1ef9340407975ap-8, + -0x1.p-8 + }, + { // Entry 465 + 0x1.000055558888ad1aee1ef9340407975ap-8, + 0x1.p-8 + }, + { // Entry 466 + -0x1.000054558788ac1bed20f7e1abb63c0bp-8, + -0x1.fffffep-9 + }, + { // Entry 467 + 0x1.000054558788ac1bed20f7e1abb63c0bp-8, + 0x1.fffffep-9 + }, + { // Entry 468 + -0x1.000017555908893bd1d20d4b76ad6c40p-9, + -0x1.000002p-9 + }, + { // Entry 469 + 0x1.000017555908893bd1d20d4b76ad6c40p-9, + 0x1.000002p-9 + }, + { // Entry 470 + -0x1.000015555888891ad1c98c9e9b0230f4p-9, + -0x1.p-9 + }, + { // Entry 471 + 0x1.000015555888891ad1c98c9e9b0230f4p-9, + 0x1.p-9 + }, + { // Entry 472 + -0x1.000014555848890b11c5ac88518c9f8bp-9, + -0x1.fffffep-10 + }, + { // Entry 473 + 0x1.000014555848890b11c5ac88518c9f8bp-9, + 0x1.fffffep-10 + }, + { // Entry 474 + -0x1.0000075555a8888d11ad5f6e23264b7cp-10, + -0x1.000002p-10 + }, + { // Entry 475 + 0x1.0000075555a8888d11ad5f6e23264b7cp-10, + 0x1.000002p-10 + }, + { // Entry 476 + -0x1.000005555588888ad1ad374375aba09fp-10, + -0x1.p-10 + }, + { // Entry 477 + 0x1.000005555588888ad1ad374375aba09fp-10, + 0x1.p-10 + }, + { // Entry 478 + -0x1.0000045555788889e1ad293e1f844b3dp-10, + -0x1.fffffep-11 + }, + { // Entry 479 + 0x1.0000045555788889e1ad293e1f844b3dp-10, + 0x1.fffffep-11 + }, + { // Entry 480 + -0x1.000002055555758888ca8ad1dfe598dap-14, + -0x1.000002p-14 + }, + { // Entry 481 + 0x1.000002055555758888ca8ad1dfe598dap-14, + 0x1.000002p-14 + }, + { // Entry 482 + -0x1.000000055555558888888ad1ad1aee1ep-14, + -0x1.p-14 + }, + { // Entry 483 + 0x1.000000055555558888888ad1ad1aee1ep-14, + 0x1.p-14 + }, + { // Entry 484 + -0x1.fffffe0aaaaa8b11112f15a3536b318fp-15, + -0x1.fffffep-15 + }, + { // Entry 485 + 0x1.fffffe0aaaaa8b11112f15a3536b318fp-15, + 0x1.fffffep-15 + }, + { // Entry 486 + -0x1.0000020000000055555755555955888bp-28, + -0x1.000002p-28 + }, + { // Entry 487 + 0x1.0000020000000055555755555955888bp-28, + 0x1.000002p-28 + }, + { // Entry 488 + -0x1.00000000000000555555555555558888p-28, + -0x1.p-28 + }, + { // Entry 489 + 0x1.00000000000000555555555555558888p-28, + 0x1.p-28 + }, + { // Entry 490 + -0x1.fffffe00000000aaaaa8aaaaacab1110p-29, + -0x1.fffffep-29 + }, + { // Entry 491 + 0x1.fffffe00000000aaaaa8aaaaacab1110p-29, + 0x1.fffffep-29 + }, + { // Entry 492 + -0x1.00000200000000055555755555955588p-30, + -0x1.000002p-30 + }, + { // Entry 493 + 0x1.00000200000000055555755555955588p-30, + 0x1.000002p-30 + }, + { // Entry 494 + -0x1.00000000000000055555555555555588p-30, + -0x1.p-30 + }, + { // Entry 495 + 0x1.00000000000000055555555555555588p-30, + 0x1.p-30 + }, + { // Entry 496 + -0x1.fffffe000000000aaaaa8aaaaacaab11p-31, + -0x1.fffffep-31 + }, + { // Entry 497 + 0x1.fffffe000000000aaaaa8aaaaacaab11p-31, + 0x1.fffffep-31 + }, + { // Entry 498 + HUGE_VALF, + 0x1.p0 + }, + { // Entry 499 + -HUGE_VALF, + -0x1.p0 + }, + { // Entry 500 + 0x1.1542456b37d42c1c6b731df2db40f6c7p3, + 0x1.fffffep-1 + }, + { // Entry 501 + -0x1.1542456b37d42c1c6b731df2db40f6c7p3, + -0x1.fffffep-1 + }, + { // Entry 502 + 0x1.0f2eb16521912336da989907b42e8493p0, + 0x1.921fb6p-1 + }, + { // Entry 503 + -0x1.0f2eb16521912336da989907b42e8493p0, + -0x1.921fb6p-1 + }, + { // Entry 504 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 505 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 506 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 507 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 508 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 509 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 510 + 0x1.fffff8p-127, + 0x1.fffff8p-127 + }, + { // Entry 511 + -0x1.fffff8p-127, + -0x1.fffff8p-127 + }, + { // Entry 512 + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 513 + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 514 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 515 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 516 + 0.0, + 0.0f + }, + { // Entry 517 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/cbrt_intel_data.h b/tests/math_data/cbrt_intel_data.h new file mode 100644 index 000000000..9bb47089c --- /dev/null +++ b/tests/math_data/cbrt_intel_data.h @@ -0,0 +1,2274 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_cbrt_intel_data[] = { + { // Entry 0 + -0x1.p-10, + -0x1.0p-30 + }, + { // Entry 1 + 0x1.p-10, + 0x1.0p-30 + }, + { // Entry 2 + -0x1.00000000007fffffffffc00000000035p-3, + -0x1.00000000018p-9 + }, + { // Entry 3 + 0x1.00000000007fffffffffc00000000035p-3, + 0x1.00000000018p-9 + }, + { // Entry 4 + -0x1.0000000007ffffffffc0000000035555p-340, + -0x1.00000000180p-1020 + }, + { // Entry 5 + 0x1.0000000007ffffffffc0000000035555p-340, + 0x1.00000000180p-1020 + }, + { // Entry 6 + -0x1.9986657fedfe4fd36e533ebb59e96ee6p-14, + -0x1.060p-40 + }, + { // Entry 7 + 0x1.9986657fedfe4fd36e533ebb59e96ee6p-14, + 0x1.060p-40 + }, + { // Entry 8 + -0x1.45abfb7ef7189911ba894c45eca1ddcap-1, + -0x1.0787c1fa77ce0p-2 + }, + { // Entry 9 + 0x1.45abfb7ef7189911ba894c45eca1ddcap-1, + 0x1.0787c1fa77ce0p-2 + }, + { // Entry 10 + -0x1.9e9ee2bee69fe80c4f73cb59ccb7f3d1p5, + -0x1.0fe6fc05ac8c0p17 + }, + { // Entry 11 + 0x1.9e9ee2bee69fe80c4f73cb59ccb7f3d1p5, + 0x1.0fe6fc05ac8c0p17 + }, + { // Entry 12 + -0x1.493b33358f83ff197c29192baacf2763p-9, + -0x1.10441104412p-26 + }, + { // Entry 13 + 0x1.493b33358f83ff197c29192baacf2763p-9, + 0x1.10441104412p-26 + }, + { // Entry 14 + -0x1.9f187bb994b4e822d4c29f84eda66145p-1, + -0x1.10d67c062d7e0p-1 + }, + { // Entry 15 + 0x1.9f187bb994b4e822d4c29f84eda66145p-1, + 0x1.10d67c062d7e0p-1 + }, + { // Entry 16 + -0x1.0af6562f82937800f6aaeb59ca8be923p-2, + -0x1.2250ab3726b08p-6 + }, + { // Entry 17 + 0x1.0af6562f82937800f6aaeb59ca8be923p-2, + 0x1.2250ab3726b08p-6 + }, + { // Entry 18 + -0x1.a9cd919402f48820501d0a16e616a1efp30, + -0x1.268029abf1585p92 + }, + { // Entry 19 + 0x1.a9cd919402f48820501d0a16e616a1efp30, + 0x1.268029abf1585p92 + }, + { // Entry 20 + -0x1.aa74fb53ace248137ec2a68f4e2c0e6ap-11, + -0x1.27dc102fbaaecp-31 + }, + { // Entry 21 + 0x1.aa74fb53ace248137ec2a68f4e2c0e6ap-11, + 0x1.27dc102fbaaecp-31 + }, + { // Entry 22 + -0x1.bfb5c1cdaa6ddfd032c8a87db7a19ca2p-5, + -0x1.5655956559580p-13 + }, + { // Entry 23 + 0x1.bfb5c1cdaa6ddfd032c8a87db7a19ca2p-5, + 0x1.5655956559580p-13 + }, + { // Entry 24 + -0x1.cb8a75541abed81fa799464451a558d3p30, + -0x1.7232560b9ccc6p92 + }, + { // Entry 25 + 0x1.cb8a75541abed81fa799464451a558d3p30, + 0x1.7232560b9ccc6p92 + }, + { // Entry 26 + -0x1.7d038d6155dc480a9f29e86566a5f43dp-356, + -0x1.a60p-1067 + }, + { // Entry 27 + 0x1.7d038d6155dc480a9f29e86566a5f43dp-356, + 0x1.a60p-1067 + }, + { // Entry 28 + -0x1.e3b9dfbcafcda8395331b22320212c4cp7, + -0x1.afc6abf5d0ce0p23 + }, + { // Entry 29 + 0x1.e3b9dfbcafcda8395331b22320212c4cp7, + 0x1.afc6abf5d0ce0p23 + }, + { // Entry 30 + -0x1.84ad603727a0508cbedd2bca0ec48725p0, + -0x1.bffa90d87aa98p1 + }, + { // Entry 31 + 0x1.84ad603727a0508cbedd2bca0ec48725p0, + 0x1.bffa90d87aa98p1 + }, + { // Entry 32 + -0x1.947c09fa258151cfeee85175bc41fb81p-3, + -0x1.f8e38e38e38e4p-8 + }, + { // Entry 33 + 0x1.947c09fa258151cfeee85175bc41fb81p-3, + 0x1.f8e38e38e38e4p-8 + }, + { // Entry 34 + -0x1.ffffffffffff9fffffffffffedffffffp-341, + -0x1.fffffffffffeep-1021 + }, + { // Entry 35 + 0x1.ffffffffffff9fffffffffffedffffffp-341, + 0x1.fffffffffffeep-1021 + }, + { // Entry 36 + 0x1.428a2f98d728c24ae0d4448847c4a6bap-341, + 0x1.0000000000003p-1022 + }, + { // Entry 37 + -0x1.428a2f98d728c24ae0d4448847c4a6bap-341, + -0x1.0000000000003p-1022 + }, + { // Entry 38 + 0x1.965fea53d6e3faf702e41590b070bffbp-14, + 0x1.0000000000006p-40 + }, + { // Entry 39 + -0x1.965fea53d6e3faf702e41590b070bffbp-14, + -0x1.0000000000006p-40 + }, + { // Entry 40 + 0x1.965fea53d6e3faf702e41590b070bffbp0, + 0x1.0000000000006p2 + }, + { // Entry 41 + -0x1.965fea53d6e3faf702e41590b070bffbp0, + -0x1.0000000000006p2 + }, + { // Entry 42 + 0x1.965fea53d6e607dd91906073bf1a35edp0, + 0x1.0000000000044p2 + }, + { // Entry 43 + -0x1.965fea53d6e607dd91906073bf1a35edp0, + -0x1.0000000000044p2 + }, + { // Entry 44 + 0x1.965fea53d6e697ca348e11e2a091d5b6p0, + 0x1.0000000000055p2 + }, + { // Entry 45 + -0x1.965fea53d6e697ca348e11e2a091d5b6p0, + -0x1.0000000000055p2 + }, + { // Entry 46 + 0x1.00000000000cbfffffffff5d70p1, + 0x1.0000000000264p3 + }, + { // Entry 47 + -0x1.00000000000cbfffffffff5d70p1, + -0x1.0000000000264p3 + }, + { // Entry 48 + 0x1.965fea53d702f7bcb128b0aa890997e0p0, + 0x1.00000000003afp2 + }, + { // Entry 49 + -0x1.965fea53d702f7bcb128b0aa890997e0p0, + -0x1.00000000003afp2 + }, + { // Entry 50 + 0x1.428a2f98d75e6fd4d753df927b6b1d4fp-14, + 0x1.00000000008p-41 + }, + { // Entry 51 + -0x1.428a2f98d75e6fd4d753df927b6b1d4fp-14, + -0x1.00000000008p-41 + }, + { // Entry 52 + 0x1.00000000007fffffffffc00000000035p-3, + 0x1.00000000018p-9 + }, + { // Entry 53 + -0x1.00000000007fffffffffc00000000035p-3, + -0x1.00000000018p-9 + }, + { // Entry 54 + 0x1.965fea53da1087ffad4108c4ea80cbc2p-14, + 0x1.00000000060p-40 + }, + { // Entry 55 + -0x1.965fea53da1087ffad4108c4ea80cbc2p-14, + -0x1.00000000060p-40 + }, + { // Entry 56 + 0x1.965fea53da4af7aa8f6e6d4048e52f2bp1, + 0x1.00000000066e7p5 + }, + { // Entry 57 + -0x1.965fea53da4af7aa8f6e6d4048e52f2bp1, + -0x1.00000000066e7p5 + }, + { // Entry 58 + 0x1.0000000007ffffffffc0000000035555p-340, + 0x1.00000000180p-1020 + }, + { // Entry 59 + -0x1.0000000007ffffffffc0000000035555p-340, + -0x1.00000000180p-1020 + }, + { // Entry 60 + 0x1.965fea55f54097c36a6737d85dd006dcp-40, + 0x1.0000000401004p-118 + }, + { // Entry 61 + -0x1.965fea55f54097c36a6737d85dd006dcp-40, + -0x1.0000000401004p-118 + }, + { // Entry 62 + 0x1.428a2fa15995e7ffff68534daa2646edp0, + 0x1.00000014430e2p1 + }, + { // Entry 63 + -0x1.428a2fa15995e7ffff68534daa2646edp0, + -0x1.00000014430e2p1 + }, + { // Entry 64 + 0x1.428a2fbea35a3d9d86d0a73d050d1379p-348, + 0x1.0000005a0p-1043 + }, + { // Entry 65 + -0x1.428a2fbea35a3d9d86d0a73d050d1379p-348, + -0x1.0000005a0p-1043 + }, + { // Entry 66 + 0x1.965ff2caa42317c00ffd791c040fb91dp-34, + 0x1.00000fff0p-100 + }, + { // Entry 67 + -0x1.965ff2caa42317c00ffd791c040fb91dp-34, + -0x1.00000fff0p-100 + }, + { // Entry 68 + 0x1.965ff2cb2b9860374c7a92e3bf79265dp-14, + 0x1.00001p-40 + }, + { // Entry 69 + -0x1.965ff2cb2b9860374c7a92e3bf79265dp-14, + -0x1.00001p-40 + }, + { // Entry 70 + 0x1.9660b58366b9c81443c564c8519c1649p-341, + 0x1.00018000008p-1021 + }, + { // Entry 71 + -0x1.9660b58366b9c81443c564c8519c1649p-341, + -0x1.00018000008p-1021 + }, + { // Entry 72 + 0x1.96639e80554d07f44482ed4edeb69024p-14, + 0x1.00070p-40 + }, + { // Entry 73 + -0x1.96639e80554d07f44482ed4edeb69024p-14, + -0x1.00070p-40 + }, + { // Entry 74 + 0x1.9665b2342f8d97ab827cc907bea6a6a0p-2, + 0x1.000aecf24b8bbp-4 + }, + { // Entry 75 + -0x1.9665b2342f8d97ab827cc907bea6a6a0p-2, + -0x1.000aecf24b8bbp-4 + }, + { // Entry 76 + 0x1.96664e51470857ba927fd8c83e4a668fp-2, + 0x1.000c14046c27cp-4 + }, + { // Entry 77 + -0x1.96664e51470857ba927fd8c83e4a668fp-2, + -0x1.000c14046c27cp-4 + }, + { // Entry 78 + 0x1.9681cd4d59cf3c49d09a44a6e5a71a0bp-4, + 0x1.00401004000dep-10 + }, + { // Entry 79 + -0x1.9681cd4d59cf3c49d09a44a6e5a71a0bp-4, + -0x1.00401004000dep-10 + }, + { // Entry 80 + 0x1.00254fe4e09a28161b19a150ed679c38p-340, + 0x1.007p-1020 + }, + { // Entry 81 + -0x1.00254fe4e09a28161b19a150ed679c38p-340, + -0x1.007p-1020 + }, + { // Entry 82 + 0x1.42b9323abafd78d0666f2ca1fbd9f8b9p-341, + 0x1.007p-1022 + }, + { // Entry 83 + -0x1.42b9323abafd78d0666f2ca1fbd9f8b9p-341, + -0x1.007p-1022 + }, + { // Entry 84 + 0x1.005a8aa11fd96610f475d13eb6f8247fp-340, + 0x1.011p-1020 + }, + { // Entry 85 + -0x1.005a8aa11fd96610f475d13eb6f8247fp-340, + -0x1.011p-1020 + }, + { // Entry 86 + 0x1.976e211b4a5fda2f3d9110f59316298ap-14, + 0x1.020p-40 + }, + { // Entry 87 + -0x1.976e211b4a5fda2f3d9110f59316298ap-14, + -0x1.020p-40 + }, + { // Entry 88 + 0x1.97f4c72a4cc937c8ec5808f7e0f23f1dp334, + 0x1.03001fc0eb6f0p1004 + }, + { // Entry 89 + -0x1.97f4c72a4cc937c8ec5808f7e0f23f1dp334, + -0x1.03001fc0eb6f0p1004 + }, + { // Entry 90 + 0x1.97f5f8160b8917c80d38a6af1f6f152bp0, + 0x1.03026484c3994p2 + }, + { // Entry 91 + -0x1.97f5f8160b8917c80d38a6af1f6f152bp0, + -0x1.03026484c3994p2 + }, + { // Entry 92 + 0x1.446c1fbe1a821a88b3a25b8549559d1cp-81, + 0x1.0482412090482p-242 + }, + { // Entry 93 + -0x1.446c1fbe1a821a88b3a25b8549559d1cp-81, + -0x1.0482412090482p-242 + }, + { // Entry 94 + 0x1.9986657fedfe4fd36e533ebb59e96ee6p-14, + 0x1.060p-40 + }, + { // Entry 95 + -0x1.9986657fedfe4fd36e533ebb59e96ee6p-14, + -0x1.060p-40 + }, + { // Entry 96 + 0x1.454088d15010f7f343422c761e601e61p-1, + 0x1.068341a0d0680p-2 + }, + { // Entry 97 + -0x1.454088d15010f7f343422c761e601e61p-1, + -0x1.068341a0d0680p-2 + }, + { // Entry 98 + 0x1.9a92c607cfd737e7521bc7f98770b170p2, + 0x1.08046a3c709e3p8 + }, + { // Entry 99 + -0x1.9a92c607cfd737e7521bc7f98770b170p2, + -0x1.08046a3c709e3p8 + }, + { // Entry 100 + 0x1.9a93cde71ba557e6218528c1cb0d6e32p-1, + 0x1.08066749584ddp-1 + }, + { // Entry 101 + -0x1.9a93cde71ba557e6218528c1cb0d6e32p-1, + -0x1.08066749584ddp-1 + }, + { // Entry 102 + 0x1.9a952773d350c7e97b4223564fd73be7p-347, + 0x1.080901ebap-1039 + }, + { // Entry 103 + -0x1.9a952773d350c7e97b4223564fd73be7p-347, + -0x1.080901ebap-1039 + }, + { // Entry 104 + 0x1.032ee63c56e3b55628c6400c742d93edp1, + 0x1.09ab38ed184bap3 + }, + { // Entry 105 + -0x1.032ee63c56e3b55628c6400c742d93edp1, + -0x1.09ab38ed184bap3 + }, + { // Entry 106 + 0x1.9b9968457c86a7d7dbb54f5a02fc037bp4, + 0x1.0a0056960e368p14 + }, + { // Entry 107 + -0x1.9b9968457c86a7d7dbb54f5a02fc037bp4, + -0x1.0a0056960e368p14 + }, + { // Entry 108 + 0x1.9e9f1f2d0855881624b60f77c042b78dp0, + 0x1.0fe772e9039f5p2 + }, + { // Entry 109 + -0x1.9e9f1f2d0855881624b60f77c042b78dp0, + -0x1.0fe772e9039f5p2 + }, + { // Entry 110 + 0x1.9ea753cde1bd0855df2edf015f707a04p1, + 0x1.0ff797ef1a3c3p5 + }, + { // Entry 111 + -0x1.9ea753cde1bd0855df2edf015f707a04p1, + -0x1.0ff797ef1a3c3p5 + }, + { // Entry 112 + 0x1.491fc152578ca7cdd8078fdafcb33036p-357, + 0x1.1p-1070 + }, + { // Entry 113 + -0x1.491fc152578ca7cdd8078fdafcb33036p-357, + -0x1.1p-1070 + }, + { // Entry 114 + 0x1.9eac9efc6e88d7c312cafbfcbd94b5b4p0, + 0x1.1002029e1aaddp2 + }, + { // Entry 115 + -0x1.9eac9efc6e88d7c312cafbfcbd94b5b4p0, + -0x1.1002029e1aaddp2 + }, + { // Entry 116 + 0x1.9f1445f47beb881feb8cc6da6423f1fap0, + 0x1.10ce2ee39f71bp2 + }, + { // Entry 117 + -0x1.9f1445f47beb881feb8cc6da6423f1fap0, + -0x1.10ce2ee39f71bp2 + }, + { // Entry 118 + 0x1.9f16f1b3849098203460c5bf7946e9ddp-1, + 0x1.10d37312af8fap-1 + }, + { // Entry 119 + -0x1.9f16f1b3849098203460c5bf7946e9ddp-1, + -0x1.10d37312af8fap-1 + }, + { // Entry 120 + 0x1.9f22b8991664081f68f99db9a1cc0b73p0, + 0x1.10eaac892a245p2 + }, + { // Entry 121 + -0x1.9f22b8991664081f68f99db9a1cc0b73p0, + -0x1.10eaac892a245p2 + }, + { // Entry 122 + 0x1.9f458921d52a281fafef2e225aaab6c6p0, + 0x1.112f5c03ecec0p2 + }, + { // Entry 123 + -0x1.9f458921d52a281fafef2e225aaab6c6p0, + -0x1.112f5c03ecec0p2 + }, + { // Entry 124 + 0x1.4c4c991ac651a84e0ff0656285977047p1, + 0x1.17f2cafabb46ap4 + }, + { // Entry 125 + -0x1.4c4c991ac651a84e0ff0656285977047p1, + -0x1.17f2cafabb46ap4 + }, + { // Entry 126 + 0x1.a430ecfcf44ee7dc4e735762947d3dc3p0, + 0x1.1b02602c908bfp2 + }, + { // Entry 127 + -0x1.a430ecfcf44ee7dc4e735762947d3dc3p0, + -0x1.1b02602c908bfp2 + }, + { // Entry 128 + 0x1.a6a556b95dffa828a9a81a921f87fa85p-4, + 0x1.1fff905c3adbcp-10 + }, + { // Entry 129 + -0x1.a6a556b95dffa828a9a81a921f87fa85p-4, + -0x1.1fff905c3adbcp-10 + }, + { // Entry 130 + 0x1.a6a58d55e307bdded6f0c26447e14afap-14, + 0x1.2p-40 + }, + { // Entry 131 + -0x1.a6a58d55e307bdded6f0c26447e14afap-14, + -0x1.2p-40 + }, + { // Entry 132 + 0x1.a741dcaa85c507f8f476871a86c8f2fbp-14, + 0x1.214p-40 + }, + { // Entry 133 + -0x1.a741dcaa85c507f8f476871a86c8f2fbp-14, + -0x1.214p-40 + }, + { // Entry 134 + 0x1.a9b9a98cfc11381defe6253a98938775p-4, + 0x1.2656ddd0ef9a9p-10 + }, + { // Entry 135 + -0x1.a9b9a98cfc11381defe6253a98938775p-4, + -0x1.2656ddd0ef9a9p-10 + }, + { // Entry 136 + 0x1.a9ce86294341981ffbd04f46339b7ca3p0, + 0x1.26822529cb997p2 + }, + { // Entry 137 + -0x1.a9ce86294341981ffbd04f46339b7ca3p0, + -0x1.26822529cb997p2 + }, + { // Entry 138 + 0x1.aa3393610111800c773e492ba03c0bc0p-4, + 0x1.2754041e0bd58p-10 + }, + { // Entry 139 + -0x1.aa3393610111800c773e492ba03c0bc0p-4, + -0x1.2754041e0bd58p-10 + }, + { // Entry 140 + 0x1.aa6eaf149711081267d4d3bcfb21576ap-1, + 0x1.27cef4d58fa06p-1 + }, + { // Entry 141 + -0x1.aa6eaf149711081267d4d3bcfb21576ap-1, + -0x1.27cef4d58fa06p-1 + }, + { // Entry 142 + 0x1.ab0111c4f67687eab45b47dba3899345p-14, + 0x1.290p-40 + }, + { // Entry 143 + -0x1.ab0111c4f67687eab45b47dba3899345p-14, + -0x1.290p-40 + }, + { // Entry 144 + 0x1.ab7d23f59ed937e12fad7075ab2a34f5p66, + 0x1.2a032f360b141p200 + }, + { // Entry 145 + -0x1.ab7d23f59ed937e12fad7075ab2a34f5p66, + -0x1.2a032f360b141p200 + }, + { // Entry 146 + 0x1.0e7fe920f31d3746275027b3282172eep-340, + 0x1.2e025c04b85fcp-1020 + }, + { // Entry 147 + -0x1.0e7fe920f31d3746275027b3282172eep-340, + -0x1.2e025c04b85fcp-1020 + }, + { // Entry 148 + 0x1.55aaaaae387217d53fbba423cebb1a2ep-2, + 0x1.304c1304c1304p-5 + }, + { // Entry 149 + -0x1.55aaaaae387217d53fbba423cebb1a2ep-2, + -0x1.304c1304c1304p-5 + }, + { // Entry 150 + 0x1.b3dd56a2b132e7fdf10074b0924288f1p32, + 0x1.3bdfee33b02f8p98 + }, + { // Entry 151 + -0x1.b3dd56a2b132e7fdf10074b0924288f1p32, + -0x1.3bdfee33b02f8p98 + }, + { // Entry 152 + 0x1.b439df3c2659081df6a3085c877c7cffp0, + 0x1.3ca946e736845p2 + }, + { // Entry 153 + -0x1.b439df3c2659081df6a3085c877c7cffp0, + -0x1.3ca946e736845p2 + }, + { // Entry 154 + 0x1.138291eabb92efba9fe0d9849a897aa5p-340, + 0x1.3f1aa4d984256p-1020 + }, + { // Entry 155 + -0x1.138291eabb92efba9fe0d9849a897aa5p-340, + -0x1.3f1aa4d984256p-1020 + }, + { // Entry 156 + 0x1.b5695d4850bf002f93a8951840fdbdc1p-14, + 0x1.3f4p-40 + }, + { // Entry 157 + -0x1.b5695d4850bf002f93a8951840fdbdc1p-14, + -0x1.3f4p-40 + }, + { // Entry 158 + 0x1.13c484138704e8100660522ff714d063p-2, + 0x1.3ffffffffffffp-6 + }, + { // Entry 159 + -0x1.13c484138704e8100660522ff714d063p-2, + -0x1.3ffffffffffffp-6 + }, + { // Entry 160 + 0x1.b67bc3075e4107fa3e70de5d4fa75b20p0, + 0x1.419a4a4598f5ap2 + }, + { // Entry 161 + -0x1.b67bc3075e4107fa3e70de5d4fa75b20p0, + -0x1.419a4a4598f5ap2 + }, + { // Entry 162 + 0x1.b94a867d7d37304bf35180360c8f26bap-11, + 0x1.47d1f47d1f471p-31 + }, + { // Entry 163 + -0x1.b94a867d7d37304bf35180360c8f26bap-11, + -0x1.47d1f47d1f471p-31 + }, + { // Entry 164 + 0x1.ba6940f949a5f802cb51c7c838c7308dp-2, + 0x1.4a5294a5294a5p-4 + }, + { // Entry 165 + -0x1.ba6940f949a5f802cb51c7c838c7308dp-2, + -0x1.4a5294a5294a5p-4 + }, + { // Entry 166 + 0x1.1765862491b577ffff674fac52ee428ep0, + 0x1.4ccccccf6cc89p0 + }, + { // Entry 167 + -0x1.1765862491b577ffff674fac52ee428ep0, + -0x1.4ccccccf6cc89p0 + }, + { // Entry 168 + 0x1.17658624b3b6a7ffff67369ed724b90ap0, + 0x1.4ccccccfe64bdp0 + }, + { // Entry 169 + -0x1.17658624b3b6a7ffff67369ed724b90ap0, + -0x1.4ccccccfe64bdp0 + }, + { // Entry 170 + 0x1.1765862ca9ee78000097306b13e0ad9bp0, + 0x1.4cccccec59b21p0 + }, + { // Entry 171 + -0x1.1765862ca9ee78000097306b13e0ad9bp0, + -0x1.4cccccec59b21p0 + }, + { // Entry 172 + 0x1.c04d1376c37e4817e18315bd6a9e85e3p-8, + 0x1.57b1272bb8441p-22 + }, + { // Entry 173 + -0x1.c04d1376c37e4817e18315bd6a9e85e3p-8, + -0x1.57b1272bb8441p-22 + }, + { // Entry 174 + 0x1.c06ebba26ccd500a0de09b79cc640f3dp-1, + 0x1.57fe95dbd7d28p-1 + }, + { // Entry 175 + -0x1.c06ebba26ccd500a0de09b79cc640f3dp-1, + -0x1.57fe95dbd7d28p-1 + }, + { // Entry 176 + 0x1.c0e29e3b4a9e87f43c4eb9d13de23aefp0, + 0x1.59098ae904084p2 + }, + { // Entry 177 + -0x1.c0e29e3b4a9e87f43c4eb9d13de23aefp0, + -0x1.59098ae904084p2 + }, + { // Entry 178 + 0x1.c3db07e1a14ac838412532030d4d4d78p0, + 0x1.5feea74303d38p2 + }, + { // Entry 179 + -0x1.c3db07e1a14ac838412532030d4d4d78p0, + -0x1.5feea74303d38p2 + }, + { // Entry 180 + 0x1.6d73ab7df4e47b07582a3ea009214428p-14, + 0x1.746p-41 + }, + { // Entry 181 + -0x1.6d73ab7df4e47b07582a3ea009214428p-14, + -0x1.746p-41 + }, + { // Entry 182 + 0x1.22622dd15ed89a9f922c42a1b1289769p-2, + 0x1.75ap-6 + }, + { // Entry 183 + -0x1.22622dd15ed89a9f922c42a1b1289769p-2, + -0x1.75ap-6 + }, + { // Entry 184 + 0x1.cd8515b56ceb3f41561edc76c9bf01b0p-14, + 0x1.770p-40 + }, + { // Entry 185 + -0x1.cd8515b56ceb3f41561edc76c9bf01b0p-14, + -0x1.770p-40 + }, + { // Entry 186 + 0x1.d449b6dbbc459812bdd21f77ccdfd045p-4, + 0x1.87bdb17ed3d1fp-10 + }, + { // Entry 187 + -0x1.d449b6dbbc459812bdd21f77ccdfd045p-4, + -0x1.87bdb17ed3d1fp-10 + }, + { // Entry 188 + 0x1.280a36cf6379ea8fdfafc89cc9d77091p-7, + 0x1.8be2f8be2f8b1p-21 + }, + { // Entry 189 + -0x1.280a36cf6379ea8fdfafc89cc9d77091p-7, + -0x1.8be2f8be2f8b1p-21 + }, + { // Entry 190 + 0x1.75460639f871b7ffff679bb948d1e585p0, + 0x1.8cccccd41928ap1 + }, + { // Entry 191 + -0x1.75460639f871b7ffff679bb948d1e585p0, + -0x1.8cccccd41928ap1 + }, + { // Entry 192 + 0x1.d7bd00808f8337d9a59ba78f7f1d6790p-1, + 0x1.9076c775b5273p-1 + }, + { // Entry 193 + -0x1.d7bd00808f8337d9a59ba78f7f1d6790p-1, + -0x1.9076c775b5273p-1 + }, + { // Entry 194 + 0x1.d7e64dc80f7097f1129998d4da209031p-14, + 0x1.90ep-40 + }, + { // Entry 195 + -0x1.d7e64dc80f7097f1129998d4da209031p-14, + -0x1.90ep-40 + }, + { // Entry 196 + 0x1.da7c2ab04f88d7e99ecbfecf1a524bcbp-14, + 0x1.978p-40 + }, + { // Entry 197 + -0x1.da7c2ab04f88d7e99ecbfecf1a524bcbp-14, + -0x1.978p-40 + }, + { // Entry 198 + 0x1.dad49d2409c36ff2d4c9b994a1547f79p-4, + 0x1.98640c41ec378p-10 + }, + { // Entry 199 + -0x1.dad49d2409c36ff2d4c9b994a1547f79p-4, + -0x1.98640c41ec378p-10 + }, + { // Entry 200 + 0x1.79eafa03cd0c9b7054cf5184f3432188p-1, + 0x1.9bcbd6d204234p-2 + }, + { // Entry 201 + -0x1.79eafa03cd0c9b7054cf5184f3432188p-1, + -0x1.9bcbd6d204234p-2 + }, + { // Entry 202 + 0x1.7a41970365eebffe84779d36e5b55ff9p-4, + 0x1.9ce739ce739c1p-11 + }, + { // Entry 203 + -0x1.7a41970365eebffe84779d36e5b55ff9p-4, + -0x1.9ce739ce739c1p-11 + }, + { // Entry 204 + 0x1.dd182f9eccd338154df52c8068d21c58p-4, + 0x1.9e429e92b01aap-10 + }, + { // Entry 205 + -0x1.dd182f9eccd338154df52c8068d21c58p-4, + -0x1.9e429e92b01aap-10 + }, + { // Entry 206 + 0x1.7b184c99eafd98080039f19cdaba9566p-2, + 0x1.9fa7e9fa7e9f8p-5 + }, + { // Entry 207 + -0x1.7b184c99eafd98080039f19cdaba9566p-2, + -0x1.9fa7e9fa7e9f8p-5 + }, + { // Entry 208 + 0x1.2cf888f8db02e80cf78a32d60db9310ep-1, + 0x1.ap-3 + }, + { // Entry 209 + -0x1.2cf888f8db02e80cf78a32d60db9310ep-1, + -0x1.ap-3 + }, + { // Entry 210 + 0x1.7d9d668054af70ab308f4cce4f06da18p-12, + 0x1.a80p-35 + }, + { // Entry 211 + -0x1.7d9d668054af70ab308f4cce4f06da18p-12, + -0x1.a80p-35 + }, + { // Entry 212 + 0x1.7f867ca5bf7fd8000095d700659c419bp1, + 0x1.ae666667ef215p4 + }, + { // Entry 213 + -0x1.7f867ca5bf7fd8000095d700659c419bp1, + -0x1.ae666667ef215p4 + }, + { // Entry 214 + 0x1.e3ce44a1a91cb00d803d37f957814cd0p-1, + 0x1.affd4ad81d672p-1 + }, + { // Entry 215 + -0x1.e3ce44a1a91cb00d803d37f957814cd0p-1, + -0x1.affd4ad81d672p-1 + }, + { // Entry 216 + 0x1.807936a48a0f47ffff8f15d7f7433972p1, + 0x1.b199999b7b95cp4 + }, + { // Entry 217 + -0x1.807936a48a0f47ffff8f15d7f7433972p1, + -0x1.b199999b7b95cp4 + }, + { // Entry 218 + 0x1.e59391f23400e00084dca80338a86267p-14, + 0x1.b4cp-40 + }, + { // Entry 219 + -0x1.e59391f23400e00084dca80338a86267p-14, + -0x1.b4cp-40 + }, + { // Entry 220 + 0x1.32e4d254e0dc255221323a5c06838a1ap0, + 0x1.b90bf360408b6p0 + }, + { // Entry 221 + -0x1.32e4d254e0dc255221323a5c06838a1ap0, + -0x1.b90bf360408b6p0 + }, + { // Entry 222 + 0x1.e86c9f7f43066f552417904aa615b9a0p3, + 0x1.bc7acad8dd5acp11 + }, + { // Entry 223 + -0x1.e86c9f7f43066f552417904aa615b9a0p3, + -0x1.bc7acad8dd5acp11 + }, + { // Entry 224 + 0x1.e9b5dba58189dbbca0a6d76e870ebb59p-348, + 0x1.cp-1042 + }, + { // Entry 225 + -0x1.e9b5dba58189dbbca0a6d76e870ebb59p-348, + -0x1.cp-1042 + }, + { // Entry 226 + 0x1.eac78857bf50afff5f93dd134572416dp-11, + 0x1.c2f0bc2f0bc21p-31 + }, + { // Entry 227 + -0x1.eac78857bf50afff5f93dd134572416dp-11, + -0x1.c2f0bc2f0bc21p-31 + }, + { // Entry 228 + 0x1.ec05b532dfa5c62bee423818abe2bee1p-14, + 0x1.c66p-40 + }, + { // Entry 229 + -0x1.ec05b532dfa5c62bee423818abe2bee1p-14, + -0x1.c66p-40 + }, + { // Entry 230 + 0x1.ee6a99864dfff7f9fa4d2ad7424eaa16p0, + 0x1.cd0a43a2eeb58p2 + }, + { // Entry 231 + -0x1.ee6a99864dfff7f9fa4d2ad7424eaa16p0, + -0x1.cd0a43a2eeb58p2 + }, + { // Entry 232 + 0x1.3943209755b3d556bbdf7b713db939cbp0, + 0x1.d513b4b6d224dp0 + }, + { // Entry 233 + -0x1.3943209755b3d556bbdf7b713db939cbp0, + -0x1.d513b4b6d224dp0 + }, + { // Entry 234 + 0x1.396bdc60bdb41f01722a27e291122a02p0, + 0x1.d5cac80757178p0 + }, + { // Entry 235 + -0x1.396bdc60bdb41f01722a27e291122a02p0, + -0x1.d5cac80757178p0 + }, + { // Entry 236 + 0x1.8ae2d99c67b21d4a107cd7180cb6047cp0, + 0x1.d5cac80757234p1 + }, + { // Entry 237 + -0x1.8ae2d99c67b21d4a107cd7180cb6047cp0, + -0x1.d5cac80757234p1 + }, + { // Entry 238 + 0x1.8ae2d99c67b3b0c177f3b4d020019db3p0, + 0x1.d5cac8075728ep1 + }, + { // Entry 239 + -0x1.8ae2d99c67b3b0c177f3b4d020019db3p0, + -0x1.d5cac8075728ep1 + }, + { // Entry 240 + 0x1.f51a62037e9555df224a09e8431605ecp-348, + 0x1.ep-1042 + }, + { // Entry 241 + -0x1.f51a62037e9555df224a09e8431605ecp-348, + -0x1.ep-1042 + }, + { // Entry 242 + 0x1.8f1aa664697648005040ca059dec2aa7p1, + 0x1.e501f9914b497p4 + }, + { // Entry 243 + -0x1.8f1aa664697648005040ca059dec2aa7p1, + -0x1.e501f9914b497p4 + }, + { // Entry 244 + 0x1.91d389680d252578c71bd969e9e5df7cp-12, + 0x1.ef0p-35 + }, + { // Entry 245 + -0x1.91d389680d252578c71bd969e9e5df7cp-12, + -0x1.ef0p-35 + }, + { // Entry 246 + 0x1.fa9c3138585675b633ac519bbe7eb6cap-1, + 0x1.fp-1 + }, + { // Entry 247 + -0x1.fa9c3138585675b633ac519bbe7eb6cap-1, + -0x1.fp-1 + }, + { // Entry 248 + 0x1.92a20771ff112584a4790389196565d1p0, + 0x1.f1fca6c583c30p1 + }, + { // Entry 249 + -0x1.92a20771ff112584a4790389196565d1p0, + -0x1.f1fca6c583c30p1 + }, + { // Entry 250 + 0x1.fd7cd96ce16437fdae1d4bfb787b426fp-14, + 0x1.f88p-40 + }, + { // Entry 251 + -0x1.fd7cd96ce16437fdae1d4bfb787b426fp-14, + -0x1.f88p-40 + }, + { // Entry 252 + 0x1.fe9c895bb318681d0b5408d96d1beae5p-1, + 0x1.fbd87fc327a2dp-1 + }, + { // Entry 253 + -0x1.fe9c895bb318681d0b5408d96d1beae5p-1, + -0x1.fbd87fc327a2dp-1 + }, + { // Entry 254 + 0x1.feb271deb951f820004e9934bbbf7e43p-1, + 0x1.fc19e0f734ee1p-1 + }, + { // Entry 255 + -0x1.feb271deb951f820004e9934bbbf7e43p-1, + -0x1.fc19e0f734ee1p-1 + }, + { // Entry 256 + 0x1.9583540d8fdae068f8c9ddb6ceab0c37p-14, + 0x1.fccp-41 + }, + { // Entry 257 + -0x1.9583540d8fdae068f8c9ddb6ceab0c37p-14, + -0x1.fccp-41 + }, + { // Entry 258 + 0x1.feee5cca3c43bff6182abd6ea83a6125p-1, + 0x1.fcccccccccccdp-1 + }, + { // Entry 259 + -0x1.feee5cca3c43bff6182abd6ea83a6125p-1, + -0x1.fcccccccccccdp-1 + }, + { // Entry 260 + 0x1.96143e1178b6a02e01899e1296e91759p-2, + 0x1.fee22eb294d1cp-5 + }, + { // Entry 261 + -0x1.96143e1178b6a02e01899e1296e91759p-2, + -0x1.fee22eb294d1cp-5 + }, + { // Entry 262 + 0x1.ffa545425dad5803a4c5925748cce2a0p-341, + 0x1.feeffffffffffp-1021 + }, + { // Entry 263 + -0x1.ffa545425dad5803a4c5925748cce2a0p-341, + -0x1.feeffffffffffp-1021 + }, + { // Entry 264 + 0x1.ffb49f9263cfa814d8ba77ebbb974678p-4, + 0x1.ff1e000000070p-10 + }, + { // Entry 265 + -0x1.ffb49f9263cfa814d8ba77ebbb974678p-4, + -0x1.ff1e000000070p-10 + }, + { // Entry 266 + 0x1.ffc5b3203ea9282e4a10ace3963e1fbbp1, + 0x1.ff512d4a5d2dcp5 + }, + { // Entry 267 + -0x1.ffc5b3203ea9282e4a10ace3963e1fbbp1, + -0x1.ff512d4a5d2dcp5 + }, + { // Entry 268 + 0x1.965207315dc4902bd076fcf408a70902p-1, + 0x1.ffcb843a0a6cbp-2 + }, + { // Entry 269 + -0x1.965207315dc4902bd076fcf408a70902p-1, + -0x1.ffcb843a0a6cbp-2 + }, + { // Entry 270 + 0x1.965316982580502bb83c58cdaeb3a369p0, + 0x1.ffcf85cbf1176p1 + }, + { // Entry 271 + -0x1.965316982580502bb83c58cdaeb3a369p0, + -0x1.ffcf85cbf1176p1 + }, + { // Entry 272 + 0x1.42801af6b3a2a61ff5fa71d0a6845a9bp-340, + 0x1.ffcffffffffffp-1020 + }, + { // Entry 273 + -0x1.42801af6b3a2a61ff5fa71d0a6845a9bp-340, + -0x1.ffcffffffffffp-1020 + }, + { // Entry 274 + 0x1.965fea101c3caaac6eab292aa5769bcap-14, + 0x1.fffffefffffffp-41 + }, + { // Entry 275 + -0x1.965fea101c3caaac6eab292aa5769bcap-14, + -0x1.fffffefffffffp-41 + }, + { // Entry 276 + 0x1.fffffff555554fc71c718c3f35a9339fp-14, + 0x1.ffffffdffffffp-40 + }, + { // Entry 277 + -0x1.fffffff555554fc71c718c3f35a9339fp-14, + -0x1.ffffffdffffffp-40 + }, + { // Entry 278 + 0x1.965fea4d7d641a86999ad2b1b38192d3p-14, + 0x1.ffffffe7fffffp-41 + }, + { // Entry 279 + -0x1.965fea4d7d641a86999ad2b1b38192d3p-14, + -0x1.ffffffe7fffffp-41 + }, + { // Entry 280 + 0x1.965fea4d7d641a86999ad2b1b38192d3p0, + 0x1.ffffffe7fffffp1 + }, + { // Entry 281 + -0x1.965fea4d7d641a86999ad2b1b38192d3p0, + -0x1.ffffffe7fffffp1 + }, + { // Entry 282 + 0x1.965fea4d7d641a86999ad2b1b38192d3p13, + 0x1.ffffffe7fffffp40 + }, + { // Entry 283 + -0x1.965fea4d7d641a86999ad2b1b38192d3p13, + -0x1.ffffffe7fffffp40 + }, + { // Entry 284 + 0x1.fffffffd55554ffc71c70e30fcc8817fp-14, + 0x1.fffffff7fffffp-40 + }, + { // Entry 285 + -0x1.fffffffd55554ffc71c70e30fcc8817fp-14, + -0x1.fffffff7fffffp-40 + }, + { // Entry 286 + 0x1.fffffffffff34fffffffffaf837fffffp-1, + 0x1.ffffffffffd9fp-1 + }, + { // Entry 287 + -0x1.fffffffffff34fffffffffaf837fffffp-1, + -0x1.ffffffffffd9fp-1 + }, + { // Entry 288 + 0x1.fffffffffff9ffffffffffedffffffffp-341, + 0x1.ffffffffffee0p-1021 + }, + { // Entry 289 + -0x1.fffffffffff9ffffffffffedffffffffp-341, + -0x1.ffffffffffee0p-1021 + }, + { // Entry 290 + 0x1.ffffffffffff9fffffffffffedffffffp-341, + 0x1.fffffffffffeep-1021 + }, + { // Entry 291 + -0x1.ffffffffffff9fffffffffffedffffffp-341, + -0x1.fffffffffffeep-1021 + }, + { // Entry 292 + 0x1.965fea53d6e38034b41ac1fbdae9a22fp-14, + 0x1.fffffffffffefp-41 + }, + { // Entry 293 + -0x1.965fea53d6e38034b41ac1fbdae9a22fp-14, + -0x1.fffffffffffefp-41 + }, + { // Entry 294 + 0x1.965fea53d6e38034b41ac1fbdae9a22fp0, + 0x1.fffffffffffefp1 + }, + { // Entry 295 + -0x1.965fea53d6e38034b41ac1fbdae9a22fp0, + -0x1.fffffffffffefp1 + }, + { // Entry 296 + 0x1.965fea53d6e38034b41ac1fbdae9a22fp13, + 0x1.fffffffffffefp40 + }, + { // Entry 297 + -0x1.965fea53d6e38034b41ac1fbdae9a22fp13, + -0x1.fffffffffffefp40 + }, + { // Entry 298 + 0x1.ffffffffffffeaaaaaaaaaaaa9c71c71p-14, + 0x1.ffffffffffffcp-40 + }, + { // Entry 299 + -0x1.ffffffffffffeaaaaaaaaaaaa9c71c71p-14, + -0x1.ffffffffffffcp-40 + }, + { // Entry 300 + 0x1.ffffffffffffeaaaaaaaaaaaa9c71c71p-341, + 0x1.ffffffffffffcp-1021 + }, + { // Entry 301 + -0x1.ffffffffffffeaaaaaaaaaaaa9c71c71p-341, + -0x1.ffffffffffffcp-1021 + }, + { // Entry 302 + 0x1.428a2f98d728a76a078787ef8fb5d54bp-340, + 0x1.ffffffffffffep-1020 + }, + { // Entry 303 + -0x1.428a2f98d728a76a078787ef8fb5d54bp-340, + -0x1.ffffffffffffep-1020 + }, + { // Entry 304 + 0x1.965fea53d6e3bfb3b0b7db8f7ec17d0fp-341, + 0x1.ffffffffffffep-1022 + }, + { // Entry 305 + -0x1.965fea53d6e3bfb3b0b7db8f7ec17d0fp-341, + -0x1.ffffffffffffep-1022 + }, + { // Entry 306 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 307 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 308 + 0x1.0ce9d573f43b4429b89ec57945e5d434p0, + 0x1.28ba2e8ba2e8cp0 + }, + { // Entry 309 + -0x1.0ce9d573f43b4429b89ec57945e5d434p0, + -0x1.28ba2e8ba2e8cp0 + }, + { // Entry 310 + 0x1.18b16f086288d6f00ce5c5780fcb86f0p0, + 0x1.51745d1745d18p0 + }, + { // Entry 311 + -0x1.18b16f086288d6f00ce5c5780fcb86f0p0, + -0x1.51745d1745d18p0 + }, + { // Entry 312 + 0x1.238f2c8477adc049b515c7f78f3ae422p0, + 0x1.7a2e8ba2e8ba4p0 + }, + { // Entry 313 + -0x1.238f2c8477adc049b515c7f78f3ae422p0, + -0x1.7a2e8ba2e8ba4p0 + }, + { // Entry 314 + 0x1.2dabb7e49e39ff2a10deddc33bc81fccp0, + 0x1.a2e8ba2e8ba30p0 + }, + { // Entry 315 + -0x1.2dabb7e49e39ff2a10deddc33bc81fccp0, + -0x1.a2e8ba2e8ba30p0 + }, + { // Entry 316 + 0x1.372579fd08bf3f740d425e125a1352ffp0, + 0x1.cba2e8ba2e8bcp0 + }, + { // Entry 317 + -0x1.372579fd08bf3f740d425e125a1352ffp0, + -0x1.cba2e8ba2e8bcp0 + }, + { // Entry 318 + 0x1.4013dac5da2a703e1c77ca4721acee1cp0, + 0x1.f45d1745d1748p0 + }, + { // Entry 319 + -0x1.4013dac5da2a703e1c77ca4721acee1cp0, + -0x1.f45d1745d1748p0 + }, + { // Entry 320 + 0x1.48894c52b3445f6f84012f405de32fa2p0, + 0x1.0e8ba2e8ba2eap1 + }, + { // Entry 321 + -0x1.48894c52b3445f6f84012f405de32fa2p0, + -0x1.0e8ba2e8ba2eap1 + }, + { // Entry 322 + 0x1.5094a1d6e6b639229cdb3810b410cd5cp0, + 0x1.22e8ba2e8ba30p1 + }, + { // Entry 323 + -0x1.5094a1d6e6b639229cdb3810b410cd5cp0, + -0x1.22e8ba2e8ba30p1 + }, + { // Entry 324 + 0x1.5841f8c61fd58c8dad04fdec3cf0af73p0, + 0x1.3745d1745d176p1 + }, + { // Entry 325 + -0x1.5841f8c61fd58c8dad04fdec3cf0af73p0, + -0x1.3745d1745d176p1 + }, + { // Entry 326 + 0x1.5f9b5c16910ae69ed06d3e621a09f184p0, + 0x1.4ba2e8ba2e8bcp1 + }, + { // Entry 327 + -0x1.5f9b5c16910ae69ed06d3e621a09f184p0, + -0x1.4ba2e8ba2e8bcp1 + }, + { // Entry 328 + 0x1.66a9398ba2a3a698c051df109f770e88p0, + 0x1.6000000000002p1 + }, + { // Entry 329 + -0x1.66a9398ba2a3a698c051df109f770e88p0, + -0x1.6000000000002p1 + }, + { // Entry 330 + 0x1.6d72b7dcc7672cfcef1093936e2afe79p0, + 0x1.745d1745d1748p1 + }, + { // Entry 331 + -0x1.6d72b7dcc7672cfcef1093936e2afe79p0, + -0x1.745d1745d1748p1 + }, + { // Entry 332 + 0x1.73fdf738e55e14736c80bd51b7812f30p0, + 0x1.88ba2e8ba2e8ep1 + }, + { // Entry 333 + -0x1.73fdf738e55e14736c80bd51b7812f30p0, + -0x1.88ba2e8ba2e8ep1 + }, + { // Entry 334 + 0x1.7a504269f3f8eaacfe698899d72d5624p0, + 0x1.9d1745d1745d4p1 + }, + { // Entry 335 + -0x1.7a504269f3f8eaacfe698899d72d5624p0, + -0x1.9d1745d1745d4p1 + }, + { // Entry 336 + 0x1.806e34d4af571a8ec04858e9296e6f3bp0, + 0x1.b1745d1745d1ap1 + }, + { // Entry 337 + -0x1.806e34d4af571a8ec04858e9296e6f3bp0, + -0x1.b1745d1745d1ap1 + }, + { // Entry 338 + 0x1.865bd841493085e78103debe7c1f93c8p0, + 0x1.c5d1745d17460p1 + }, + { // Entry 339 + -0x1.865bd841493085e78103debe7c1f93c8p0, + -0x1.c5d1745d17460p1 + }, + { // Entry 340 + 0x1.8c1cbc7cd4e55e886cb4a94f63941b44p0, + 0x1.da2e8ba2e8ba6p1 + }, + { // Entry 341 + -0x1.8c1cbc7cd4e55e886cb4a94f63941b44p0, + -0x1.da2e8ba2e8ba6p1 + }, + { // Entry 342 + 0x1.91b40a4df21132c467d86553807600cdp0, + 0x1.ee8ba2e8ba2ecp1 + }, + { // Entry 343 + -0x1.91b40a4df21132c467d86553807600cdp0, + -0x1.ee8ba2e8ba2ecp1 + }, + { // Entry 344 + 0x1.972492d08e2c99d904b83bd8d8b5b7b7p0, + 0x1.01745d1745d19p2 + }, + { // Entry 345 + -0x1.972492d08e2c99d904b83bd8d8b5b7b7p0, + -0x1.01745d1745d19p2 + }, + { // Entry 346 + 0x1.9c70dc04b206ec6b858fbed95865bda0p0, + 0x1.0ba2e8ba2e8bcp2 + }, + { // Entry 347 + -0x1.9c70dc04b206ec6b858fbed95865bda0p0, + -0x1.0ba2e8ba2e8bcp2 + }, + { // Entry 348 + 0x1.a19b2b2929306e418bc85ca14b471159p0, + 0x1.15d1745d1745fp2 + }, + { // Entry 349 + -0x1.a19b2b2929306e418bc85ca14b471159p0, + -0x1.15d1745d1745fp2 + }, + { // Entry 350 + 0x1.a6a58d55e307cd862806e73ea3aa75dcp0, + 0x1.2000000000002p2 + }, + { // Entry 351 + -0x1.a6a58d55e307cd862806e73ea3aa75dcp0, + -0x1.2000000000002p2 + }, + { // Entry 352 + 0x1.ab91deaee6e7398a4db8d908e1d20b42p0, + 0x1.2a2e8ba2e8ba5p2 + }, + { // Entry 353 + -0x1.ab91deaee6e7398a4db8d908e1d20b42p0, + -0x1.2a2e8ba2e8ba5p2 + }, + { // Entry 354 + 0x1.b061d074afb8809398fc89026fd75a85p0, + 0x1.345d1745d1748p2 + }, + { // Entry 355 + -0x1.b061d074afb8809398fc89026fd75a85p0, + -0x1.345d1745d1748p2 + }, + { // Entry 356 + 0x1.b516ee27c2d35cf59a75730f88f173e0p0, + 0x1.3e8ba2e8ba2ebp2 + }, + { // Entry 357 + -0x1.b516ee27c2d35cf59a75730f88f173e0p0, + -0x1.3e8ba2e8ba2ebp2 + }, + { // Entry 358 + 0x1.b9b2a1e9f9da334490d48cb02cb4bf58p0, + 0x1.48ba2e8ba2e8ep2 + }, + { // Entry 359 + -0x1.b9b2a1e9f9da334490d48cb02cb4bf58p0, + -0x1.48ba2e8ba2e8ep2 + }, + { // Entry 360 + 0x1.be36383f4756f16d777bfee1465b907ep0, + 0x1.52e8ba2e8ba31p2 + }, + { // Entry 361 + -0x1.be36383f4756f16d777bfee1465b907ep0, + -0x1.52e8ba2e8ba31p2 + }, + { // Entry 362 + 0x1.c2a2e349098e1ce3cf090c892ec047cap0, + 0x1.5d1745d1745d4p2 + }, + { // Entry 363 + -0x1.c2a2e349098e1ce3cf090c892ec047cap0, + -0x1.5d1745d1745d4p2 + }, + { // Entry 364 + 0x1.c6f9bd91c721629d7d05a54a3b34c8fep0, + 0x1.6745d1745d177p2 + }, + { // Entry 365 + -0x1.c6f9bd91c721629d7d05a54a3b34c8fep0, + -0x1.6745d1745d177p2 + }, + { // Entry 366 + 0x1.cb3bcc7b190568ede2e1277438cb7dc0p0, + 0x1.71745d1745d1ap2 + }, + { // Entry 367 + -0x1.cb3bcc7b190568ede2e1277438cb7dc0p0, + -0x1.71745d1745d1ap2 + }, + { // Entry 368 + 0x1.cf6a025c48d470136550753b069eb686p0, + 0x1.7ba2e8ba2e8bdp2 + }, + { // Entry 369 + -0x1.cf6a025c48d470136550753b069eb686p0, + -0x1.7ba2e8ba2e8bdp2 + }, + { // Entry 370 + 0x1.d385405d97057c2d90e63f01cb80587dp0, + 0x1.85d1745d17460p2 + }, + { // Entry 371 + -0x1.d385405d97057c2d90e63f01cb80587dp0, + -0x1.85d1745d17460p2 + }, + { // Entry 372 + 0x1.d78e581a0c130b55a8fe17e4c041698cp0, + 0x1.9000000000003p2 + }, + { // Entry 373 + -0x1.d78e581a0c130b55a8fe17e4c041698cp0, + -0x1.9000000000003p2 + }, + { // Entry 374 + 0x1.db860d100d75f2cb69726e75e5a5a9a0p0, + 0x1.9a2e8ba2e8ba6p2 + }, + { // Entry 375 + -0x1.db860d100d75f2cb69726e75e5a5a9a0p0, + -0x1.9a2e8ba2e8ba6p2 + }, + { // Entry 376 + 0x1.df6d15e795af02a9c5484050b847db7dp0, + 0x1.a45d1745d1749p2 + }, + { // Entry 377 + -0x1.df6d15e795af02a9c5484050b847db7dp0, + -0x1.a45d1745d1749p2 + }, + { // Entry 378 + 0x1.e3441d93d4a6e4350c223c240878382cp0, + 0x1.ae8ba2e8ba2ecp2 + }, + { // Entry 379 + -0x1.e3441d93d4a6e4350c223c240878382cp0, + -0x1.ae8ba2e8ba2ecp2 + }, + { // Entry 380 + 0x1.e70bc455167843aff629b746acfdb954p0, + 0x1.b8ba2e8ba2e8fp2 + }, + { // Entry 381 + -0x1.e70bc455167843aff629b746acfdb954p0, + -0x1.b8ba2e8ba2e8fp2 + }, + { // Entry 382 + 0x1.eac4a09f102dc54392e2d4473d85908cp0, + 0x1.c2e8ba2e8ba32p2 + }, + { // Entry 383 + -0x1.eac4a09f102dc54392e2d4473d85908cp0, + -0x1.c2e8ba2e8ba32p2 + }, + { // Entry 384 + 0x1.ee6f3fe7143487345a5bdd055002660cp0, + 0x1.cd1745d1745d5p2 + }, + { // Entry 385 + -0x1.ee6f3fe7143487345a5bdd055002660cp0, + -0x1.cd1745d1745d5p2 + }, + { // Entry 386 + 0x1.f20c275d2d02fed5358f1cbf6bde21f6p0, + 0x1.d745d1745d178p2 + }, + { // Entry 387 + -0x1.f20c275d2d02fed5358f1cbf6bde21f6p0, + -0x1.d745d1745d178p2 + }, + { // Entry 388 + 0x1.f59bd492aecb81e8f922dfb0a070b22cp0, + 0x1.e1745d1745d1bp2 + }, + { // Entry 389 + -0x1.f59bd492aecb81e8f922dfb0a070b22cp0, + -0x1.e1745d1745d1bp2 + }, + { // Entry 390 + 0x1.f91ebe1075131607e1dbc3ce239d00d2p0, + 0x1.eba2e8ba2e8bep2 + }, + { // Entry 391 + -0x1.f91ebe1075131607e1dbc3ce239d00d2p0, + -0x1.eba2e8ba2e8bep2 + }, + { // Entry 392 + 0x1.fc9553deb389bb042ac0e43d2dcb675dp0, + 0x1.f5d1745d17461p2 + }, + { // Entry 393 + -0x1.fc9553deb389bb042ac0e43d2dcb675dp0, + -0x1.f5d1745d17461p2 + }, + { // Entry 394 + 0x1.p1, + 0x1.0p3 + }, + { // Entry 395 + -0x1.p1, + -0x1.0p3 + }, + { // Entry 396 + 0x1.428a2f98d728ae223ddab715be250d0cp33, + 0x1.0p100 + }, + { // Entry 397 + -0x1.428a2f98d728ae223ddab715be250d0cp33, + -0x1.0p100 + }, + { // Entry 398 + 0x1.4cf38fa1af1c8e60b99ab1c90a701828p33, + 0x1.199999999999ap100 + }, + { // Entry 399 + -0x1.4cf38fa1af1c8e60b99ab1c90a701828p33, + -0x1.199999999999ap100 + }, + { // Entry 400 + 0x1.56bfea66ef78d5074657b3dee42b5e0cp33, + 0x1.3333333333334p100 + }, + { // Entry 401 + -0x1.56bfea66ef78d5074657b3dee42b5e0cp33, + -0x1.3333333333334p100 + }, + { // Entry 402 + 0x1.60048365d4c9ff9b67f93498f33785eap33, + 0x1.4cccccccccccep100 + }, + { // Entry 403 + -0x1.60048365d4c9ff9b67f93498f33785eap33, + -0x1.4cccccccccccep100 + }, + { // Entry 404 + 0x1.68d25a9bdf483c622a268591832b9e0cp33, + 0x1.6666666666668p100 + }, + { // Entry 405 + -0x1.68d25a9bdf483c622a268591832b9e0cp33, + -0x1.6666666666668p100 + }, + { // Entry 406 + 0x1.7137449123ef700f67831ee169a0f859p33, + 0x1.8000000000002p100 + }, + { // Entry 407 + -0x1.7137449123ef700f67831ee169a0f859p33, + -0x1.8000000000002p100 + }, + { // Entry 408 + 0x1.793eace1a3426c2ab31f0f7242cbda04p33, + 0x1.999999999999cp100 + }, + { // Entry 409 + -0x1.793eace1a3426c2ab31f0f7242cbda04p33, + -0x1.999999999999cp100 + }, + { // Entry 410 + 0x1.80f22109df4e9aabf15aa42b09a56fe4p33, + 0x1.b333333333336p100 + }, + { // Entry 411 + -0x1.80f22109df4e9aabf15aa42b09a56fe4p33, + -0x1.b333333333336p100 + }, + { // Entry 412 + 0x1.8859b5bd7e46d0b16729348cdc72c851p33, + 0x1.cccccccccccd0p100 + }, + { // Entry 413 + -0x1.8859b5bd7e46d0b16729348cdc72c851p33, + -0x1.cccccccccccd0p100 + }, + { // Entry 414 + 0x1.8f7c5264003808599b16e8bbfa290ef6p33, + 0x1.e66666666666ap100 + }, + { // Entry 415 + -0x1.8f7c5264003808599b16e8bbfa290ef6p33, + -0x1.e66666666666ap100 + }, + { // Entry 416 + 0x1.965fea53d6e3c82b05999ab43dc4def1p33, + 0x1.0p101 + }, + { // Entry 417 + -0x1.965fea53d6e3c82b05999ab43dc4def1p33, + -0x1.0p101 + }, + { // Entry 418 + 0x1.965fea53d6e3c82b05999ab43dc4def1p66, + 0x1.0p200 + }, + { // Entry 419 + -0x1.965fea53d6e3c82b05999ab43dc4def1p66, + -0x1.0p200 + }, + { // Entry 420 + 0x1.a37e13dc4b3bbdc9f070bbccaee9e708p66, + 0x1.199999999999ap200 + }, + { // Entry 421 + -0x1.a37e13dc4b3bbdc9f070bbccaee9e708p66, + -0x1.199999999999ap200 + }, + { // Entry 422 + 0x1.afd66803b2c0cb28b8149b63f2e5b8e9p66, + 0x1.3333333333334p200 + }, + { // Entry 423 + -0x1.afd66803b2c0cb28b8149b63f2e5b8e9p66, + -0x1.3333333333334p200 + }, + { // Entry 424 + 0x1.bb83b127e934396de5002f26845693c2p66, + 0x1.4cccccccccccep200 + }, + { // Entry 425 + -0x1.bb83b127e934396de5002f26845693c2p66, + -0x1.4cccccccccccep200 + }, + { // Entry 426 + 0x1.c69b5a72f1a9a3d5297dfa071329d303p66, + 0x1.6666666666668p200 + }, + { // Entry 427 + -0x1.c69b5a72f1a9a3d5297dfa071329d303p66, + -0x1.6666666666668p200 + }, + { // Entry 428 + 0x1.d12ed0af1a27fc29a341295b82254417p66, + 0x1.8000000000002p200 + }, + { // Entry 429 + -0x1.d12ed0af1a27fc29a341295b82254417p66, + -0x1.8000000000002p200 + }, + { // Entry 430 + 0x1.db4c7760bcff3665b7f68aed854e789bp66, + 0x1.999999999999cp200 + }, + { // Entry 431 + -0x1.db4c7760bcff3665b7f68aed854e789bp66, + -0x1.999999999999cp200 + }, + { // Entry 432 + 0x1.e50057a6819032342f0b19647f70fc87p66, + 0x1.b333333333336p200 + }, + { // Entry 433 + -0x1.e50057a6819032342f0b19647f70fc87p66, + -0x1.b333333333336p200 + }, + { // Entry 434 + 0x1.ee549fe7085e87e59ca6a43631166ee4p66, + 0x1.cccccccccccd0p200 + }, + { // Entry 435 + -0x1.ee549fe7085e87e59ca6a43631166ee4p66, + -0x1.cccccccccccd0p200 + }, + { // Entry 436 + 0x1.f75202ec86e0c47a6b05c229a6b58c64p66, + 0x1.e66666666666ap200 + }, + { // Entry 437 + -0x1.f75202ec86e0c47a6b05c229a6b58c64p66, + -0x1.e66666666666ap200 + }, + { // Entry 438 + 0x1.p67, + 0x1.0p201 + }, + { // Entry 439 + -0x1.p67, + -0x1.0p201 + }, + { // Entry 440 + 0x1.428a2f98d728ae223ddab715be250d0cp333, + 0x1.0p1000 + }, + { // Entry 441 + -0x1.428a2f98d728ae223ddab715be250d0cp333, + -0x1.0p1000 + }, + { // Entry 442 + 0x1.4cf38fa1af1c8e60b99ab1c90a701828p333, + 0x1.199999999999ap1000 + }, + { // Entry 443 + -0x1.4cf38fa1af1c8e60b99ab1c90a701828p333, + -0x1.199999999999ap1000 + }, + { // Entry 444 + 0x1.56bfea66ef78d5074657b3dee42b5e0cp333, + 0x1.3333333333334p1000 + }, + { // Entry 445 + -0x1.56bfea66ef78d5074657b3dee42b5e0cp333, + -0x1.3333333333334p1000 + }, + { // Entry 446 + 0x1.60048365d4c9ff9b67f93498f33785eap333, + 0x1.4cccccccccccep1000 + }, + { // Entry 447 + -0x1.60048365d4c9ff9b67f93498f33785eap333, + -0x1.4cccccccccccep1000 + }, + { // Entry 448 + 0x1.68d25a9bdf483c622a268591832b9e0cp333, + 0x1.6666666666668p1000 + }, + { // Entry 449 + -0x1.68d25a9bdf483c622a268591832b9e0cp333, + -0x1.6666666666668p1000 + }, + { // Entry 450 + 0x1.7137449123ef700f67831ee169a0f859p333, + 0x1.8000000000002p1000 + }, + { // Entry 451 + -0x1.7137449123ef700f67831ee169a0f859p333, + -0x1.8000000000002p1000 + }, + { // Entry 452 + 0x1.793eace1a3426c2ab31f0f7242cbda04p333, + 0x1.999999999999cp1000 + }, + { // Entry 453 + -0x1.793eace1a3426c2ab31f0f7242cbda04p333, + -0x1.999999999999cp1000 + }, + { // Entry 454 + 0x1.80f22109df4e9aabf15aa42b09a56fe4p333, + 0x1.b333333333336p1000 + }, + { // Entry 455 + -0x1.80f22109df4e9aabf15aa42b09a56fe4p333, + -0x1.b333333333336p1000 + }, + { // Entry 456 + 0x1.8859b5bd7e46d0b16729348cdc72c851p333, + 0x1.cccccccccccd0p1000 + }, + { // Entry 457 + -0x1.8859b5bd7e46d0b16729348cdc72c851p333, + -0x1.cccccccccccd0p1000 + }, + { // Entry 458 + 0x1.8f7c5264003808599b16e8bbfa290ef6p333, + 0x1.e66666666666ap1000 + }, + { // Entry 459 + -0x1.8f7c5264003808599b16e8bbfa290ef6p333, + -0x1.e66666666666ap1000 + }, + { // Entry 460 + 0x1.965fea53d6e3c82b05999ab43dc4def1p333, + 0x1.0p1001 + }, + { // Entry 461 + -0x1.965fea53d6e3c82b05999ab43dc4def1p333, + -0x1.0p1001 + }, + { // Entry 462 + 0x1.965fea53d6e3c3ef5b28bb21de4e77c6p0, + 0x1.fffffffffffffp1 + }, + { // Entry 463 + -0x1.965fea53d6e3c3ef5b28bb21de4e77c6p0, + -0x1.fffffffffffffp1 + }, + { // Entry 464 + 0x1.965fea53d6e3c82b05999ab43dc4def1p0, + 0x1.0p2 + }, + { // Entry 465 + -0x1.965fea53d6e3c82b05999ab43dc4def1p0, + -0x1.0p2 + }, + { // Entry 466 + 0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p0, + 0x1.0000000000001p2 + }, + { // Entry 467 + -0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p0, + -0x1.0000000000001p2 + }, + { // Entry 468 + 0x1.428a2f98d728aac622b11f82a6f666c9p0, + 0x1.fffffffffffffp0 + }, + { // Entry 469 + -0x1.428a2f98d728aac622b11f82a6f666c9p0, + -0x1.fffffffffffffp0 + }, + { // Entry 470 + 0x1.428a2f98d728ae223ddab715be250d0cp0, + 0x1.0p1 + }, + { // Entry 471 + -0x1.428a2f98d728ae223ddab715be250d0cp0, + -0x1.0p1 + }, + { // Entry 472 + 0x1.428a2f98d728b4da742de63bec4c97dep0, + 0x1.0000000000001p1 + }, + { // Entry 473 + -0x1.428a2f98d728b4da742de63bec4c97dep0, + -0x1.0000000000001p1 + }, + { // Entry 474 + 0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 475 + -0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 476 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 477 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 478 + 0x1.0000000000000555555555555538e38ep0, + 0x1.0000000000001p0 + }, + { // Entry 479 + -0x1.0000000000000555555555555538e38ep0, + -0x1.0000000000001p0 + }, + { // Entry 480 + 0x1.965fea53d6e3c3ef5b28bb21de4e77c6p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 481 + -0x1.965fea53d6e3c3ef5b28bb21de4e77c6p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 482 + 0x1.965fea53d6e3c82b05999ab43dc4def1p-1, + 0x1.0p-1 + }, + { // Entry 483 + -0x1.965fea53d6e3c82b05999ab43dc4def1p-1, + -0x1.0p-1 + }, + { // Entry 484 + 0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p-1, + 0x1.0000000000001p-1 + }, + { // Entry 485 + -0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p-1, + -0x1.0000000000001p-1 + }, + { // Entry 486 + 0x1.428a2f98d728aac622b11f82a6f666c9p-1, + 0x1.fffffffffffffp-3 + }, + { // Entry 487 + -0x1.428a2f98d728aac622b11f82a6f666c9p-1, + -0x1.fffffffffffffp-3 + }, + { // Entry 488 + 0x1.428a2f98d728ae223ddab715be250d0cp-1, + 0x1.0p-2 + }, + { // Entry 489 + -0x1.428a2f98d728ae223ddab715be250d0cp-1, + -0x1.0p-2 + }, + { // Entry 490 + 0x1.428a2f98d728b4da742de63bec4c97dep-1, + 0x1.0000000000001p-2 + }, + { // Entry 491 + -0x1.428a2f98d728b4da742de63bec4c97dep-1, + -0x1.0000000000001p-2 + }, + { // Entry 492 + 0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-2, + 0x1.fffffffffffffp-4 + }, + { // Entry 493 + -0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-2, + -0x1.fffffffffffffp-4 + }, + { // Entry 494 + 0x1.p-1, + 0x1.0p-3 + }, + { // Entry 495 + -0x1.p-1, + -0x1.0p-3 + }, + { // Entry 496 + 0x1.0000000000000555555555555538e38ep-1, + 0x1.0000000000001p-3 + }, + { // Entry 497 + -0x1.0000000000000555555555555538e38ep-1, + -0x1.0000000000001p-3 + }, + { // Entry 498 + 0x1.965fea53d6e3c3ef5b28bb21de4e77c6p-2, + 0x1.fffffffffffffp-5 + }, + { // Entry 499 + -0x1.965fea53d6e3c3ef5b28bb21de4e77c6p-2, + -0x1.fffffffffffffp-5 + }, + { // Entry 500 + 0x1.965fea53d6e3c82b05999ab43dc4def1p-2, + 0x1.0p-4 + }, + { // Entry 501 + -0x1.965fea53d6e3c82b05999ab43dc4def1p-2, + -0x1.0p-4 + }, + { // Entry 502 + 0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p-2, + 0x1.0000000000001p-4 + }, + { // Entry 503 + -0x1.965fea53d6e3d0a25a7b59d8fc6df2a0p-2, + -0x1.0000000000001p-4 + }, + { // Entry 504 + 0x1.428a2f98d728aac622b11f82a6f666c9p-2, + 0x1.fffffffffffffp-6 + }, + { // Entry 505 + -0x1.428a2f98d728aac622b11f82a6f666c9p-2, + -0x1.fffffffffffffp-6 + }, + { // Entry 506 + 0x1.428a2f98d728ae223ddab715be250d0cp-2, + 0x1.0p-5 + }, + { // Entry 507 + -0x1.428a2f98d728ae223ddab715be250d0cp-2, + -0x1.0p-5 + }, + { // Entry 508 + 0x1.428a2f98d728b4da742de63bec4c97dep-2, + 0x1.0000000000001p-5 + }, + { // Entry 509 + -0x1.428a2f98d728b4da742de63bec4c97dep-2, + -0x1.0000000000001p-5 + }, + { // Entry 510 + 0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-3, + 0x1.fffffffffffffp-7 + }, + { // Entry 511 + -0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-3, + -0x1.fffffffffffffp-7 + }, + { // Entry 512 + 0x1.p-2, + 0x1.0p-6 + }, + { // Entry 513 + -0x1.p-2, + -0x1.0p-6 + }, + { // Entry 514 + 0x1.0000000000000555555555555538e38ep-2, + 0x1.0000000000001p-6 + }, + { // Entry 515 + -0x1.0000000000000555555555555538e38ep-2, + -0x1.0000000000001p-6 + }, + { // Entry 516 + 0x1.p-358, + 0x1.0p-1074 + }, + { // Entry 517 + -0x1.p-358, + -0x1.0p-1074 + }, + { // Entry 518 + -0x1.p-358, + -0x1.0p-1074 + }, + { // Entry 519 + 0x1.p-358, + 0x1.0p-1074 + }, + { // Entry 520 + 0x1.428a2f98d728aac622b11f82a6f666c9p341, + 0x1.fffffffffffffp1023 + }, + { // Entry 521 + -0x1.428a2f98d728aac622b11f82a6f666c9p341, + -0x1.fffffffffffffp1023 + }, + { // Entry 522 + -0x1.428a2f98d728aac622b11f82a6f666c9p341, + -0x1.fffffffffffffp1023 + }, + { // Entry 523 + 0x1.428a2f98d728aac622b11f82a6f666c9p341, + 0x1.fffffffffffffp1023 + }, + { // Entry 524 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 525 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 526 + 0x1.428a2f98d728aac622b11f82a6f666c9p341, + 0x1.fffffffffffffp1023 + }, + { // Entry 527 + -0x1.428a2f98d728aac622b11f82a6f666c9p341, + -0x1.fffffffffffffp1023 + }, + { // Entry 528 + 0x1.428a2f98d728a76a078787ef8fb5d54bp341, + 0x1.ffffffffffffep1023 + }, + { // Entry 529 + -0x1.428a2f98d728a76a078787ef8fb5d54bp341, + -0x1.ffffffffffffep1023 + }, + { // Entry 530 + 0x1.76ef7e73104b77508331312871c1baeap0, + 0x1.921fb54442d18p1 + }, + { // Entry 531 + -0x1.76ef7e73104b77508331312871c1baeap0, + -0x1.921fb54442d18p1 + }, + { // Entry 532 + 0x1.2996264e0e3fdb54d3ab251146a24027p0, + 0x1.921fb54442d18p0 + }, + { // Entry 533 + -0x1.2996264e0e3fdb54d3ab251146a24027p0, + -0x1.921fb54442d18p0 + }, + { // Entry 534 + 0x1.d8639fdcb60ea0b871238ad028637d9fp-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 535 + -0x1.d8639fdcb60ea0b871238ad028637d9fp-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 536 + 0x1.p1, + 0x1.0p3 + }, + { // Entry 537 + -0x1.p1, + -0x1.0p3 + }, + { // Entry 538 + 0x1.428a2f98d728ae223ddab715be250d0cp0, + 0x1.0p1 + }, + { // Entry 539 + -0x1.428a2f98d728ae223ddab715be250d0cp0, + -0x1.0p1 + }, + { // Entry 540 + 0x1.0000000000000555555555555538e38ep0, + 0x1.0000000000001p0 + }, + { // Entry 541 + -0x1.0000000000000555555555555538e38ep0, + -0x1.0000000000001p0 + }, + { // Entry 542 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 543 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 544 + 0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 545 + -0x1.fffffffffffffaaaaaaaaaaaaa9c71c7p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 546 + 0x1.428a2f98d728b4da742de63bec4c97dep-341, + 0x1.0000000000001p-1022 + }, + { // Entry 547 + -0x1.428a2f98d728b4da742de63bec4c97dep-341, + -0x1.0000000000001p-1022 + }, + { // Entry 548 + 0x1.428a2f98d728ae223ddab715be250d0cp-341, + 0x1.0p-1022 + }, + { // Entry 549 + -0x1.428a2f98d728ae223ddab715be250d0cp-341, + -0x1.0p-1022 + }, + { // Entry 550 + 0x1.428a2f98d728a76a078787ef8fb5d54bp-341, + 0x1.ffffffffffffep-1023 + }, + { // Entry 551 + -0x1.428a2f98d728a76a078787ef8fb5d54bp-341, + -0x1.ffffffffffffep-1023 + }, + { // Entry 552 + 0x1.428a2f98d728a0b1d13458c960fef09cp-341, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 553 + -0x1.428a2f98d728a0b1d13458c960fef09cp-341, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 554 + 0x1.428a2f98d728ae223ddab715be250d0cp-358, + 0x1.0p-1073 + }, + { // Entry 555 + -0x1.428a2f98d728ae223ddab715be250d0cp-358, + -0x1.0p-1073 + }, + { // Entry 556 + 0x1.p-358, + 0x1.0p-1074 + }, + { // Entry 557 + -0x1.p-358, + -0x1.0p-1074 + }, + { // Entry 558 + 0.0, + 0.0 + }, + { // Entry 559 + -0.0, + -0.0 + }, + { // Entry 560 + 0x1.80p1, + 0x1.bp4 + }, + { // Entry 561 + -0x1.80p1, + -0x1.bp4 + }, + { // Entry 562 + 0x1.40p2, + 0x1.f40p6 + }, + { // Entry 563 + -0x1.40p2, + -0x1.f40p6 + } +}; diff --git a/tests/math_data/cbrtf_intel_data.h b/tests/math_data/cbrtf_intel_data.h new file mode 100644 index 000000000..5ce73dfa7 --- /dev/null +++ b/tests/math_data/cbrtf_intel_data.h @@ -0,0 +1,1754 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_cbrtf_intel_data[] = { + { // Entry 0 + -0x1.00007fffc000355520003aaa663936aap-42, + -0x1.000180p-126 + }, + { // Entry 1 + 0x1.00007fffc000355520003aaa663936aap-42, + 0x1.000180p-126 + }, + { // Entry 2 + -0x1.0000ffff0001aaa7555caa998e62715fp-2, + -0x1.0003p-6 + }, + { // Entry 3 + 0x1.0000ffff0001aaa7555caa998e62715fp-2, + 0x1.0003p-6 + }, + { // Entry 4 + -0x1.007c2715b6911795158a4d4cc45b8d59p2, + -0x1.01752ap6 + }, + { // Entry 5 + 0x1.007c2715b6911795158a4d4cc45b8d59p2, + 0x1.01752ap6 + }, + { // Entry 6 + -0x1.0b9ccd06011fce363b7a50a0a3b8e26cp1, + -0x1.247112p3 + }, + { // Entry 7 + 0x1.0b9ccd06011fce363b7a50a0a3b8e26cp1, + 0x1.247112p3 + }, + { // Entry 8 + -0x1.aa863b0a38d00e125cbd173f60ddbb68p1, + -0x1.27fff8p5 + }, + { // Entry 9 + 0x1.aa863b0a38d00e125cbd173f60ddbb68p1, + 0x1.27fff8p5 + }, + { // Entry 10 + -0x1.b0ff4b0cf530be2de450549f985f42afp-3, + -0x1.35ae80p-7 + }, + { // Entry 11 + 0x1.b0ff4b0cf530be2de450549f985f42afp-3, + 0x1.35ae80p-7 + }, + { // Entry 12 + -0x1.d30d4d0027a339e3355b6acc1d16b858p-11, + -0x1.84a5b6p-31 + }, + { // Entry 13 + 0x1.d30d4d0027a339e3355b6acc1d16b858p-11, + 0x1.84a5b6p-31 + }, + { // Entry 14 + -0x1.7bc7460098a24fb469f60dedd0c113cep-4, + -0x1.a1e880p-11 + }, + { // Entry 15 + 0x1.7bc7460098a24fb469f60dedd0c113cep-4, + 0x1.a1e880p-11 + }, + { // Entry 16 + -0x1.e18718fd2b5e5307048d4417449467b6p-11, + -0x1.a9ea80p-31 + }, + { // Entry 17 + 0x1.e18718fd2b5e5307048d4417449467b6p-11, + 0x1.a9ea80p-31 + }, + { // Entry 18 + -0x1.e3082be3326da6c23ae338a3f121dd1fp-11, + -0x1.adeb80p-31 + }, + { // Entry 19 + 0x1.e3082be3326da6c23ae338a3f121dd1fp-11, + 0x1.adeb80p-31 + }, + { // Entry 20 + 0x1.965ff706d5d0ceecd979f25d2bd0f2dcp-14, + 0x1.000018p-40 + }, + { // Entry 21 + -0x1.965ff706d5d0ceecd979f25d2bd0f2dcp-14, + -0x1.000018p-40 + }, + { // Entry 22 + 0x1.96602e0e72a7fdf15e33145af6f263d8p0, + 0x1.000080p2 + }, + { // Entry 23 + -0x1.96602e0e72a7fdf15e33145af6f263d8p0, + -0x1.000080p2 + }, + { // Entry 24 + 0x1.96603efd1611ff8ea190cefd028f4506p-14, + 0x1.0000a0p-40 + }, + { // Entry 25 + -0x1.96603efd1611ff8ea190cefd028f4506p-14, + -0x1.0000a0p-40 + }, + { // Entry 26 + 0x1.00003ffff00006aaa755572aa998e434p-2, + 0x1.0000c0p-6 + }, + { // Entry 27 + -0x1.00003ffff00006aaa755572aa998e434p-2, + -0x1.0000c0p-6 + }, + { // Entry 28 + 0x1.966060da58aa5d0c57334a9a680c3e14p-14, + 0x1.0000e0p-40 + }, + { // Entry 29 + -0x1.966060da58aa5d0c57334a9a680c3e14p-14, + -0x1.0000e0p-40 + }, + { // Entry 30 + 0x1.428ad0dd9e52d1023b2faca281049d23p-42, + 0x1.000180p-125 + }, + { // Entry 31 + -0x1.428ad0dd9e52d1023b2faca281049d23p-42, + -0x1.000180p-125 + }, + { // Entry 32 + 0x1.00007fffc000355520003aaa663936aap-42, + 0x1.000180p-126 + }, + { // Entry 33 + -0x1.00007fffc000355520003aaa663936aap-42, + -0x1.000180p-126 + }, + { // Entry 34 + 0x1.966118fd0fff4af1016786c52473d739p0, + 0x1.00023cp2 + }, + { // Entry 35 + -0x1.966118fd0fff4af1016786c52473d739p0, + -0x1.00023cp2 + }, + { // Entry 36 + 0x1.0000ffff0001aaa7555caa998e62715fp-2, + 0x1.0003p-6 + }, + { // Entry 37 + -0x1.0000ffff0001aaa7555caa998e62715fp-2, + -0x1.0003p-6 + }, + { // Entry 38 + 0x1.9661c46c3f2accbc3b2879ecc64c5563p-42, + 0x1.000380p-124 + }, + { // Entry 39 + -0x1.9661c46c3f2accbc3b2879ecc64c5563p-42, + -0x1.000380p-124 + }, + { // Entry 40 + 0x1.000954fe3e2e3b3fc203c0f1122ef525p-2, + 0x1.001cp-6 + }, + { // Entry 41 + -0x1.000954fe3e2e3b3fc203c0f1122ef525p-2, + -0x1.001cp-6 + }, + { // Entry 42 + 0x1.000fff001aa755ca9990d15f4978c319p-1, + 0x1.0030p-3 + }, + { // Entry 43 + -0x1.000fff001aa755ca9990d15f4978c319p-1, + -0x1.0030p-3 + }, + { // Entry 44 + 0x1.000fff001aa755ca9990d15f4978c319p-2, + 0x1.0030p-6 + }, + { // Entry 45 + -0x1.000fff001aa755ca9990d15f4978c319p-2, + -0x1.0030p-6 + }, + { // Entry 46 + 0x1.96e94efe3bb4f031f6fd29764c187ba9p-14, + 0x1.0104p-40 + }, + { // Entry 47 + -0x1.96e94efe3bb4f031f6fd29764c187ba9p-14, + -0x1.0104p-40 + }, + { // Entry 48 + 0x1.4354f47046b122c8269cefa33f6945e0p-12, + 0x1.01e4p-35 + }, + { // Entry 49 + -0x1.4354f47046b122c8269cefa33f6945e0p-12, + -0x1.01e4p-35 + }, + { // Entry 50 + 0x1.435ce4ffe5df0ed6186f37c8cd55dfcdp-14, + 0x1.01f7p-41 + }, + { // Entry 51 + -0x1.435ce4ffe5df0ed6186f37c8cd55dfcdp-14, + -0x1.01f7p-41 + }, + { // Entry 52 + 0x1.43da6b00005c39b0e6c7c4cec8063f45p0, + 0x1.0323dep1 + }, + { // Entry 53 + -0x1.43da6b00005c39b0e6c7c4cec8063f45p0, + -0x1.0323dep1 + }, + { // Entry 54 + 0x1.998ca5fd9079c0acf8d0c470551815c4p-14, + 0x1.060cp-40 + }, + { // Entry 55 + -0x1.998ca5fd9079c0acf8d0c470551815c4p-14, + -0x1.060cp-40 + }, + { // Entry 56 + 0x1.998ebb71eaf54f2b63663678acd9c1b0p-14, + 0x1.0610p-40 + }, + { // Entry 57 + -0x1.998ebb71eaf54f2b63663678acd9c1b0p-14, + -0x1.0610p-40 + }, + { // Entry 58 + 0x1.454f770000009a77b66758620294365fp-1, + 0x1.06a76ap-2 + }, + { // Entry 59 + -0x1.454f770000009a77b66758620294365fp-1, + -0x1.06a76ap-2 + }, + { // Entry 60 + 0x1.9ap-4, + 0x1.06e9aap-10 + }, + { // Entry 61 + -0x1.9ap-4, + -0x1.06e9aap-10 + }, + { // Entry 62 + 0x1.9a2dc6da8c05f5e76488d08a9d68aab3p0, + 0x1.0741c4p2 + }, + { // Entry 63 + -0x1.9a2dc6da8c05f5e76488d08a9d68aab3p0, + -0x1.0741c4p2 + }, + { // Entry 64 + 0x1.9b67b1a6ed6fd1c14e0973d1bbdffc44p-14, + 0x1.09a0p-40 + }, + { // Entry 65 + -0x1.9b67b1a6ed6fd1c14e0973d1bbdffc44p-14, + -0x1.09a0p-40 + }, + { // Entry 66 + 0x1.46ffc700366b1255b7648b4899b98d5ap-14, + 0x1.0ac4p-41 + }, + { // Entry 67 + -0x1.46ffc700366b1255b7648b4899b98d5ap-14, + -0x1.0ac4p-41 + }, + { // Entry 68 + 0x1.9c1f2ad69d37542ebe215ede37325f7dp-14, + 0x1.0b04p-40 + }, + { // Entry 69 + -0x1.9c1f2ad69d37542ebe215ede37325f7dp-14, + -0x1.0b04p-40 + }, + { // Entry 70 + 0x1.9c8148004106b29bacdfd646ccb890bbp-2, + 0x1.0bc2e2p-4 + }, + { // Entry 71 + -0x1.9c8148004106b29bacdfd646ccb890bbp-2, + -0x1.0bc2e2p-4 + }, + { // Entry 72 + 0x1.478a7bb572cc90cef3596fd852b532cdp0, + 0x1.0c1808p1 + }, + { // Entry 73 + -0x1.478a7bb572cc90cef3596fd852b532cdp0, + -0x1.0c1808p1 + }, + { // Entry 74 + 0x1.9d2397032cef4ebe8a2c5c889a8876a1p-1, + 0x1.0cff70p-1 + }, + { // Entry 75 + -0x1.9d2397032cef4ebe8a2c5c889a8876a1p-1, + -0x1.0cff70p-1 + }, + { // Entry 76 + 0x1.9e20b8d6240f02f0eaf930fdf441789ep0, + 0x1.0eef12p2 + }, + { // Entry 77 + -0x1.9e20b8d6240f02f0eaf930fdf441789ep0, + -0x1.0eef12p2 + }, + { // Entry 78 + 0x1.9ead3105d958ea7ec76503944303ef7dp2, + 0x1.100322p8 + }, + { // Entry 79 + -0x1.9ead3105d958ea7ec76503944303ef7dp2, + -0x1.100322p8 + }, + { // Entry 80 + 0x1.9f2faffdef6461c09455448fa928b9c3p-1, + 0x1.110440p-1 + }, + { // Entry 81 + -0x1.9f2faffdef6461c09455448fa928b9c3p-1, + -0x1.110440p-1 + }, + { // Entry 82 + 0x1.a0dfb8137c3e91c3f3e838645b454f05p-14, + 0x1.145cp-40 + }, + { // Entry 83 + -0x1.a0dfb8137c3e91c3f3e838645b454f05p-14, + -0x1.145cp-40 + }, + { // Entry 84 + 0x1.a2311b035270313c9ca7f92e42644378p-1, + 0x1.16fd1ep-1 + }, + { // Entry 85 + -0x1.a2311b035270313c9ca7f92e42644378p-1, + -0x1.16fd1ep-1 + }, + { // Entry 86 + 0x1.a25e7efd01b4c7f69f01fe96f643494fp-14, + 0x1.1758p-40 + }, + { // Entry 87 + -0x1.a25e7efd01b4c7f69f01fe96f643494fp-14, + -0x1.1758p-40 + }, + { // Entry 88 + 0x1.a28a68ffbdfb7eb6667d2cdd341cd234p-14, + 0x1.17b0p-40 + }, + { // Entry 89 + -0x1.a28a68ffbdfb7eb6667d2cdd341cd234p-14, + -0x1.17b0p-40 + }, + { // Entry 90 + 0x1.a2b24d04a7585fdde607a7f42d370876p-42, + 0x1.18p-124 + }, + { // Entry 91 + -0x1.a2b24d04a7585fdde607a7f42d370876p-42, + -0x1.18p-124 + }, + { // Entry 92 + 0x1.a480db076345638b28d0b5d97e216402p-14, + 0x1.1ba4p-40 + }, + { // Entry 93 + -0x1.a480db076345638b28d0b5d97e216402p-14, + -0x1.1ba4p-40 + }, + { // Entry 94 + 0x1.4e11970614cfe9395e7c524b2922ed62p-14, + 0x1.1c71c8p-41 + }, + { // Entry 95 + -0x1.4e11970614cfe9395e7c524b2922ed62p-14, + -0x1.1c71c8p-41 + }, + { // Entry 96 + 0x1.a524ac009e9723d4018859285260a132p-14, + 0x1.1cf0p-40 + }, + { // Entry 97 + -0x1.a524ac009e9723d4018859285260a132p-14, + -0x1.1cf0p-40 + }, + { // Entry 98 + 0x1.a5b64e6d1ad233a593368ac2163d6b7dp-14, + 0x1.1e18p-40 + }, + { // Entry 99 + -0x1.a5b64e6d1ad233a593368ac2163d6b7dp-14, + -0x1.1e18p-40 + }, + { // Entry 100 + 0x1.a6a58c5b6df5c725e3ec4ab187301586p-14, + 0x1.1ffffep-40 + }, + { // Entry 101 + -0x1.a6a58c5b6df5c725e3ec4ab187301586p-14, + -0x1.1ffffep-40 + }, + { // Entry 102 + 0x1.acp-4, + 0x1.2b1530p-10 + }, + { // Entry 103 + -0x1.acp-4, + -0x1.2b1530p-10 + }, + { // Entry 104 + 0x1.5500563b025a26e6cde7846c60dd1a63p0, + 0x1.2e85dcp1 + }, + { // Entry 105 + -0x1.5500563b025a26e6cde7846c60dd1a63p0, + -0x1.2e85dcp1 + }, + { // Entry 106 + 0x1.57bfb300c89d535ddc61f9b3d999dc1ep0, + 0x1.35e4f8p1 + }, + { // Entry 107 + -0x1.57bfb300c89d535ddc61f9b3d999dc1ep0, + -0x1.35e4f8p1 + }, + { // Entry 108 + 0x1.b2e9430bd21aae846599fdf68e51e1e6p-1, + 0x1.39ce70p-1 + }, + { // Entry 109 + -0x1.b2e9430bd21aae846599fdf68e51e1e6p-1, + -0x1.39ce70p-1 + }, + { // Entry 110 + 0x1.b40a010c84eac96d410f8ba21fda3f22p0, + 0x1.3c4114p2 + }, + { // Entry 111 + -0x1.b40a010c84eac96d410f8ba21fda3f22p0, + -0x1.3c4114p2 + }, + { // Entry 112 + 0x1.c5d8590ca543fcb1c0bfb46e90e419bep0, + 0x1.6499f6p2 + }, + { // Entry 113 + -0x1.c5d8590ca543fcb1c0bfb46e90e419bep0, + -0x1.6499f6p2 + }, + { // Entry 114 + 0x1.c6791f0cb47f19f16d083c211d10420bp0, + 0x1.661576p2 + }, + { // Entry 115 + -0x1.c6791f0cb47f19f16d083c211d10420bp0, + -0x1.661576p2 + }, + { // Entry 116 + 0x1.c71f7f0cd5c51d6bb49a93023a9a652dp-1, + 0x1.679f4ap-1 + }, + { // Entry 117 + -0x1.c71f7f0cd5c51d6bb49a93023a9a652dp-1, + -0x1.679f4ap-1 + }, + { // Entry 118 + 0x1.c728c50c9eca36360c22256e33e42dc2p0, + 0x1.67b546p2 + }, + { // Entry 119 + -0x1.c728c50c9eca36360c22256e33e42dc2p0, + -0x1.67b546p2 + }, + { // Entry 120 + 0x1.1fb2b50224020b9a31b5e09844e1348dp-1, + 0x1.6b5ad6p-3 + }, + { // Entry 121 + -0x1.1fb2b50224020b9a31b5e09844e1348dp-1, + -0x1.6b5ad6p-3 + }, + { // Entry 122 + 0x1.6ab560ffff8428b4d453bae089599bbap-1, + 0x1.6c0d4ap-2 + }, + { // Entry 123 + -0x1.6ab560ffff8428b4d453bae089599bbap-1, + -0x1.6c0d4ap-2 + }, + { // Entry 124 + 0x1.cdee0281e74e9710c68918089b9a62f2p-42, + 0x1.77fffep-124 + }, + { // Entry 125 + -0x1.cdee0281e74e9710c68918089b9a62f2p-42, + -0x1.77fffep-124 + }, + { // Entry 126 + 0x1.d11fb6f9f76e1fd19de47cbe7090dffbp-43, + 0x1.7fda9cp-127 + }, + { // Entry 127 + -0x1.d11fb6f9f76e1fd19de47cbe7090dffbp-43, + -0x1.7fda9cp-127 + }, + { // Entry 128 + 0x1.7ad659001595cf1b272d5984d8001451p-2, + 0x1.9ecf20p-5 + }, + { // Entry 129 + -0x1.7ad659001595cf1b272d5984d8001451p-2, + -0x1.9ecf20p-5 + }, + { // Entry 130 + 0x1.7ad659001595cf1b272d5984d8001451p-41, + 0x1.9ecf20p-122 + }, + { // Entry 131 + -0x1.7ad659001595cf1b272d5984d8001451p-41, + -0x1.9ecf20p-122 + }, + { // Entry 132 + 0x1.df1025ff8b1feb85afffe8b0cce5c6c1p-1, + 0x1.a368d0p-1 + }, + { // Entry 133 + -0x1.df1025ff8b1feb85afffe8b0cce5c6c1p-1, + -0x1.a368d0p-1 + }, + { // Entry 134 + 0x1.dfa5d2ff7b31fa9b073558a718dd7beap-3, + 0x1.a4f268p-7 + }, + { // Entry 135 + -0x1.dfa5d2ff7b31fa9b073558a718dd7beap-3, + -0x1.a4f268p-7 + }, + { // Entry 136 + 0x1.e14d56805a724bfafe4ad3bdbf27694fp0, + 0x1.a9514ep2 + }, + { // Entry 137 + -0x1.e14d56805a724bfafe4ad3bdbf27694fp0, + -0x1.a9514ep2 + }, + { // Entry 138 + 0x1.e2df53063263dd47f4e3b4be5d8acd20p-2, + 0x1.ad7e78p-4 + }, + { // Entry 139 + -0x1.e2df53063263dd47f4e3b4be5d8acd20p-2, + -0x1.ad7e78p-4 + }, + { // Entry 140 + 0x1.eb5752ff94df0f59dec8df36f4cc1b31p-41, + 0x1.c47d8cp-121 + }, + { // Entry 141 + -0x1.eb5752ff94df0f59dec8df36f4cc1b31p-41, + -0x1.c47d8cp-121 + }, + { // Entry 142 + 0x1.ebe5df03d9d653e93e8fd07e1190dca7p-2, + 0x1.c607d2p-4 + }, + { // Entry 143 + -0x1.ebe5df03d9d653e93e8fd07e1190dca7p-2, + -0x1.c607d2p-4 + }, + { // Entry 144 + 0x1.ecp-3, + 0x1.c65030p-7 + }, + { // Entry 145 + -0x1.ecp-3, + -0x1.c65030p-7 + }, + { // Entry 146 + 0x1.ed53c2fed7938cfe7d57506934d72ep-43, + 0x1.c9fff0p-127 + }, + { // Entry 147 + -0x1.ed53c2fed7938cfe7d57506934d72ep-43, + -0x1.c9fff0p-127 + }, + { // Entry 148 + 0x1.87d30f000003670b89545d5765e0e462p-2, + 0x1.caf302p-5 + }, + { // Entry 149 + -0x1.87d30f000003670b89545d5765e0e462p-2, + -0x1.caf302p-5 + }, + { // Entry 150 + 0x1.37964effff778957b16b4208af77a9b9p-1, + 0x1.cd97a8p-3 + }, + { // Entry 151 + -0x1.37964effff778957b16b4208af77a9b9p-1, + -0x1.cd97a8p-3 + }, + { // Entry 152 + 0x1.ef78e20aee43030728af06495ee66d87p-14, + 0x1.cffffep-40 + }, + { // Entry 153 + -0x1.ef78e20aee43030728af06495ee66d87p-14, + -0x1.cffffep-40 + }, + { // Entry 154 + 0x1.f060ceff8db83f2f87077b938a0de67fp-1, + 0x1.d28cc4p-1 + }, + { // Entry 155 + -0x1.f060ceff8db83f2f87077b938a0de67fp-1, + -0x1.d28cc4p-1 + }, + { // Entry 156 + 0x1.f0d282ff86ba2828aff1098a7563fc5bp-1, + 0x1.d3cdaap-1 + }, + { // Entry 157 + -0x1.f0d282ff86ba2828aff1098a7563fc5bp-1, + -0x1.d3cdaap-1 + }, + { // Entry 158 + 0x1.f1a89236719cd91fce63ecac19a53d56p0, + 0x1.d62b5ap2 + }, + { // Entry 159 + -0x1.f1a89236719cd91fce63ecac19a53d56p0, + -0x1.d62b5ap2 + }, + { // Entry 160 + 0x1.f1c2bfc0386315c501e39e3ac19c4279p-1, + 0x1.d67590p-1 + }, + { // Entry 161 + -0x1.f1c2bfc0386315c501e39e3ac19c4279p-1, + -0x1.d67590p-1 + }, + { // Entry 162 + 0x1.f2p-4, + 0x1.d72352p-10 + }, + { // Entry 163 + -0x1.f2p-4, + -0x1.d72352p-10 + }, + { // Entry 164 + 0x1.f21c203557858a7f1c78b0cb14718fa0p0, + 0x1.d7732ap2 + }, + { // Entry 165 + -0x1.f21c203557858a7f1c78b0cb14718fa0p0, + -0x1.d7732ap2 + }, + { // Entry 166 + 0x1.f21cf4389d599ec5022b876e9dab8142p-8, + 0x1.d77584p-22 + }, + { // Entry 167 + -0x1.f21cf4389d599ec5022b876e9dab8142p-8, + -0x1.d77584p-22 + }, + { // Entry 168 + 0x1.f250a10528fd3cf7552e65df7a4956f7p2, + 0x1.d8084ep8 + }, + { // Entry 169 + -0x1.f250a10528fd3cf7552e65df7a4956f7p2, + -0x1.d8084ep8 + }, + { // Entry 170 + 0x1.8be60f000087a7c285d12416d0b0cb96p-5, + 0x1.d96a4ap-14 + }, + { // Entry 171 + -0x1.8be60f000087a7c285d12416d0b0cb96p-5, + -0x1.d96a4ap-14 + }, + { // Entry 172 + 0x1.3a7bb8ffff77ce75cfe33eca149a6a50p-1, + 0x1.da956cp-3 + }, + { // Entry 173 + -0x1.3a7bb8ffff77ce75cfe33eca149a6a50p-1, + -0x1.da956cp-3 + }, + { // Entry 174 + 0x1.f5477afcf320bd46a28a22db0896968ep0, + 0x1.e081a4p2 + }, + { // Entry 175 + -0x1.f5477afcf320bd46a28a22db0896968ep0, + -0x1.e081a4p2 + }, + { // Entry 176 + 0x1.f63e0aff87cf1648687fec920f40ac1ap-3, + 0x1.e3480ap-7 + }, + { // Entry 177 + -0x1.f63e0aff87cf1648687fec920f40ac1ap-3, + -0x1.e3480ap-7 + }, + { // Entry 178 + 0x1.f64d78ff83bdecdd6abbbb5c278476c2p2, + 0x1.e37496p8 + }, + { // Entry 179 + -0x1.f64d78ff83bdecdd6abbbb5c278476c2p2, + -0x1.e37496p8 + }, + { // Entry 180 + 0x1.f67dbc1e6250897b0e90aa1d01d222c7p-14, + 0x1.e3fffep-40 + }, + { // Entry 181 + -0x1.f67dbc1e6250897b0e90aa1d01d222c7p-14, + -0x1.e3fffep-40 + }, + { // Entry 182 + 0x1.f696a6ff9280045087896842b6ed5614p0, + 0x1.e44802p2 + }, + { // Entry 183 + -0x1.f696a6ff9280045087896842b6ed5614p0, + -0x1.e44802p2 + }, + { // Entry 184 + 0x1.f6b6e4ff4a938651705569091603de15p0, + 0x1.e4a53cp2 + }, + { // Entry 185 + -0x1.f6b6e4ff4a938651705569091603de15p0, + -0x1.e4a53cp2 + }, + { // Entry 186 + 0x1.3de6d50029c5bbf888e67bae14879833p-1, + 0x1.ea3a80p-3 + }, + { // Entry 187 + -0x1.3de6d50029c5bbf888e67bae14879833p-1, + -0x1.ea3a80p-3 + }, + { // Entry 188 + 0x1.fc5fc5d0ad07f38ec9b17b1f7d4e1717p0, + 0x1.f532fep2 + }, + { // Entry 189 + -0x1.fc5fc5d0ad07f38ec9b17b1f7d4e1717p0, + -0x1.f532fep2 + }, + { // Entry 190 + 0x1.fc7d65d0f6b174adf860b9de60ce7b24p-1, + 0x1.f58aa2p-1 + }, + { // Entry 191 + -0x1.fc7d65d0f6b174adf860b9de60ce7b24p-1, + -0x1.f58aa2p-1 + }, + { // Entry 192 + 0x1.40d9df284bdbddbc87772703bfc95645p-42, + 0x1.f7fffep-126 + }, + { // Entry 193 + -0x1.40d9df284bdbddbc87772703bfc95645p-42, + -0x1.f7fffep-126 + }, + { // Entry 194 + 0x1.945120ffff77f4d7e68f17a43da19205p-1, + 0x1.f842f0p-2 + }, + { // Entry 195 + -0x1.945120ffff77f4d7e68f17a43da19205p-1, + -0x1.f842f0p-2 + }, + { // Entry 196 + 0x1.fd92627ea97689afac4039869f00e4aep-43, + 0x1.f8bffcp-127 + }, + { // Entry 197 + -0x1.fd92627ea97689afac4039869f00e4aep-43, + -0x1.f8bffcp-127 + }, + { // Entry 198 + 0x1.feff7ee99408c9b222d85d44d72d687fp-14, + 0x1.fcfffep-40 + }, + { // Entry 199 + -0x1.feff7ee99408c9b222d85d44d72d687fp-14, + -0x1.fcfffep-40 + }, + { // Entry 200 + 0x1.4217cb047241feeb78c9a78591f7bc72p-42, + 0x1.fddffep-126 + }, + { // Entry 201 + -0x1.4217cb047241feeb78c9a78591f7bc72p-42, + -0x1.fddffep-126 + }, + { // Entry 202 + 0x1.fffa53efe9ebf75d6e114db81461dc7ep-43, + 0x1.ffeefcp-127 + }, + { // Entry 203 + -0x1.fffa53efe9ebf75d6e114db81461dc7ep-43, + -0x1.ffeefcp-127 + }, + { // Entry 204 + 0x1.965cbd06313b1d823e96d5c4737221fbp13, + 0x1.fff3fep40 + }, + { // Entry 205 + -0x1.965cbd06313b1d823e96d5c4737221fbp13, + -0x1.fff3fep40 + }, + { // Entry 206 + 0x1.42897306f46b887b6eb89d9b502e1782p-2, + 0x1.fffc7ep-6 + }, + { // Entry 207 + -0x1.42897306f46b887b6eb89d9b502e1782p-2, + -0x1.fffc7ep-6 + }, + { // Entry 208 + 0x1.42897306f46b887b6eb89d9b502e1782p-42, + 0x1.fffc7ep-126 + }, + { // Entry 209 + -0x1.42897306f46b887b6eb89d9b502e1782p-42, + -0x1.fffc7ep-126 + }, + { // Entry 210 + 0x1.965fb7005dcfa5daf92e3ebc255183c2p13, + 0x1.ffff3ep40 + }, + { // Entry 211 + -0x1.965fb7005dcfa5daf92e3ebc255183c2p13, + -0x1.ffff3ep40 + }, + { // Entry 212 + 0x1.fffff3ffffb7fffd2fffde3ffe427fe7p-42, + 0x1.ffffdcp-124 + }, + { // Entry 213 + -0x1.fffff3ffffb7fffd2fffde3ffe427fe7p-42, + -0x1.ffffdcp-124 + }, + { // Entry 214 + 0x1.fffffdfffffdfffffcaaaaa3fffff155p-14, + 0x1.fffffap-40 + }, + { // Entry 215 + -0x1.fffffdfffffdfffffcaaaaa3fffff155p-14, + -0x1.fffffap-40 + }, + { // Entry 216 + 0x1.965fe944ec46dbaa04d0e2812cfbefb0p-42, + 0x1.fffffcp-125 + }, + { // Entry 217 + -0x1.965fe944ec46dbaa04d0e2812cfbefb0p-42, + -0x1.fffffcp-125 + }, + { // Entry 218 + 0x1.55984b0000856675bab5f168f2e53b1ap-1, + 0x1.301afep-2 + }, + { // Entry 219 + -0x1.55984b0000856675bab5f168f2e53b1ap-1, + -0x1.301afep-2 + }, + { // Entry 220 + 0x1.p0, + 0x1.p0 + }, + { // Entry 221 + -0x1.p0, + -0x1.p0 + }, + { // Entry 222 + 0x1.0ce9d549c583299981fd71ff4fb99542p0, + 0x1.28ba2ep0 + }, + { // Entry 223 + -0x1.0ce9d549c583299981fd71ff4fb99542p0, + -0x1.28ba2ep0 + }, + { // Entry 224 + 0x1.18b16ebaf3cb379fae9ca7124ed79cffp0, + 0x1.51745cp0 + }, + { // Entry 225 + -0x1.18b16ebaf3cb379fae9ca7124ed79cffp0, + -0x1.51745cp0 + }, + { // Entry 226 + 0x1.238f2c18d09933e19014663c566270fcp0, + 0x1.7a2e8ap0 + }, + { // Entry 227 + -0x1.238f2c18d09933e19014663c566270fcp0, + -0x1.7a2e8ap0 + }, + { // Entry 228 + 0x1.2dabb75e8acb9144f6b52cda420fefaap0, + 0x1.a2e8b8p0 + }, + { // Entry 229 + -0x1.2dabb75e8acb9144f6b52cda420fefaap0, + -0x1.a2e8b8p0 + }, + { // Entry 230 + 0x1.3725795f7ddf1e78729e44a17e53d61ep0, + 0x1.cba2e6p0 + }, + { // Entry 231 + -0x1.3725795f7ddf1e78729e44a17e53d61ep0, + -0x1.cba2e6p0 + }, + { // Entry 232 + 0x1.4013da13344ab46d4137da308b33cf09p0, + 0x1.f45d14p0 + }, + { // Entry 233 + -0x1.4013da13344ab46d4137da308b33cf09p0, + -0x1.f45d14p0 + }, + { // Entry 234 + 0x1.48894bf47f0d516d9880c85daea2ba0ep0, + 0x1.0e8ba2p1 + }, + { // Entry 235 + -0x1.48894bf47f0d516d9880c85daea2ba0ep0, + -0x1.0e8ba2p1 + }, + { // Entry 236 + 0x1.5094a1c4f343bd5747ddd428a2e21726p0, + 0x1.22e8bap1 + }, + { // Entry 237 + -0x1.5094a1c4f343bd5747ddd428a2e21726p0, + -0x1.22e8bap1 + }, + { // Entry 238 + 0x1.5841f8f99a25bf1c33fed0059f449f12p0, + 0x1.3745d2p1 + }, + { // Entry 239 + -0x1.5841f8f99a25bf1c33fed0059f449f12p0, + -0x1.3745d2p1 + }, + { // Entry 240 + 0x1.5f9b5c89b6723a4740b02d00e63ed8c5p0, + 0x1.4ba2eap1 + }, + { // Entry 241 + -0x1.5f9b5c89b6723a4740b02d00e63ed8c5p0, + -0x1.4ba2eap1 + }, + { // Entry 242 + 0x1.66a93a398814835bf64bd954530c2e24p0, + 0x1.600002p1 + }, + { // Entry 243 + -0x1.66a93a398814835bf64bd954530c2e24p0, + -0x1.600002p1 + }, + { // Entry 244 + 0x1.6d72b8c12f197ccd2a891dce2b3420ccp0, + 0x1.745d1ap1 + }, + { // Entry 245 + -0x1.6d72b8c12f197ccd2a891dce2b3420ccp0, + -0x1.745d1ap1 + }, + { // Entry 246 + 0x1.73fdf8501e9f51315cd9208aeb0df5fdp0, + 0x1.88ba32p1 + }, + { // Entry 247 + -0x1.73fdf8501e9f51315cd9208aeb0df5fdp0, + -0x1.88ba32p1 + }, + { // Entry 248 + 0x1.7a5043b0c25062c3a77f012041ed0dd3p0, + 0x1.9d174ap1 + }, + { // Entry 249 + -0x1.7a5043b0c25062c3a77f012041ed0dd3p0, + -0x1.9d174ap1 + }, + { // Entry 250 + 0x1.806e3648370d0107430e69be51ba6181p0, + 0x1.b17462p1 + }, + { // Entry 251 + -0x1.806e3648370d0107430e69be51ba6181p0, + -0x1.b17462p1 + }, + { // Entry 252 + 0x1.865bd9deffdb100981101a7bb371c6b8p0, + 0x1.c5d17ap1 + }, + { // Entry 253 + -0x1.865bd9deffdb100981101a7bb371c6b8p0, + -0x1.c5d17ap1 + }, + { // Entry 254 + 0x1.8c1cbe427502dcf0e5ddaa6cde822e1fp0, + 0x1.da2e92p1 + }, + { // Entry 255 + -0x1.8c1cbe427502dcf0e5ddaa6cde822e1fp0, + -0x1.da2e92p1 + }, + { // Entry 256 + 0x1.91b40c3970fa45b45e1ec4f180366a63p0, + 0x1.ee8baap1 + }, + { // Entry 257 + -0x1.91b40c3970fa45b45e1ec4f180366a63p0, + -0x1.ee8baap1 + }, + { // Entry 258 + 0x1.9724945921484b9f5eb5ded43b84d0a6p0, + 0x1.017460p2 + }, + { // Entry 259 + -0x1.9724945921484b9f5eb5ded43b84d0a6p0, + -0x1.017460p2 + }, + { // Entry 260 + 0x1.9c70ddb3118685770f9b9f2ed474a9d0p0, + 0x1.0ba2ecp2 + }, + { // Entry 261 + -0x1.9c70ddb3118685770f9b9f2ed474a9d0p0, + -0x1.0ba2ecp2 + }, + { // Entry 262 + 0x1.a19b2cfb98d6b98fca487b40078f60f8p0, + 0x1.15d178p2 + }, + { // Entry 263 + -0x1.a19b2cfb98d6b98fca487b40078f60f8p0, + -0x1.15d178p2 + }, + { // Entry 264 + 0x1.a6a58f4acd2830ccf461068bd78b43dfp0, + 0x1.200004p2 + }, + { // Entry 265 + -0x1.a6a58f4acd2830ccf461068bd78b43dfp0, + -0x1.200004p2 + }, + { // Entry 266 + 0x1.ab91e0c4d7beb2de033eb06c97ff2623p0, + 0x1.2a2e90p2 + }, + { // Entry 267 + -0x1.ab91e0c4d7beb2de033eb06c97ff2623p0, + -0x1.2a2e90p2 + }, + { // Entry 268 + 0x1.b061d2aa517a9271e11f29270be275c2p0, + 0x1.345d1cp2 + }, + { // Entry 269 + -0x1.b061d2aa517a9271e11f29270be275c2p0, + -0x1.345d1cp2 + }, + { // Entry 270 + 0x1.b516f07bda4aaf3cbb849ded81335246p0, + 0x1.3e8ba8p2 + }, + { // Entry 271 + -0x1.b516f07bda4aaf3cbb849ded81335246p0, + -0x1.3e8ba8p2 + }, + { // Entry 272 + 0x1.b9b2a45b63834be7e92068f4eff7d21fp0, + 0x1.48ba34p2 + }, + { // Entry 273 + -0x1.b9b2a45b63834be7e92068f4eff7d21fp0, + -0x1.48ba34p2 + }, + { // Entry 274 + 0x1.be363accf4e07fa728c35cb0445f056bp0, + 0x1.52e8c0p2 + }, + { // Entry 275 + -0x1.be363accf4e07fa728c35cb0445f056bp0, + -0x1.52e8c0p2 + }, + { // Entry 276 + 0x1.c2a2e5f1ffae47369528dd6baf39165dp0, + 0x1.5d174cp2 + }, + { // Entry 277 + -0x1.c2a2e5f1ffae47369528dd6baf39165dp0, + -0x1.5d174cp2 + }, + { // Entry 278 + 0x1.c6f9c0551bb2a258d6a396ca52615749p0, + 0x1.6745d8p2 + }, + { // Entry 279 + -0x1.c6f9c0551bb2a258d6a396ca52615749p0, + -0x1.6745d8p2 + }, + { // Entry 280 + 0x1.cb3bcf57f15ff14a02f69b42213ee5c6p0, + 0x1.717464p2 + }, + { // Entry 281 + -0x1.cb3bcf57f15ff14a02f69b42213ee5c6p0, + -0x1.717464p2 + }, + { // Entry 282 + 0x1.cf6a0551d85b12144ae1377a6a9b72b2p0, + 0x1.7ba2f0p2 + }, + { // Entry 283 + -0x1.cf6a0551d85b12144ae1377a6a9b72b2p0, + -0x1.7ba2f0p2 + }, + { // Entry 284 + 0x1.d385436b1dde883e39c480d710236941p0, + 0x1.85d17cp2 + }, + { // Entry 285 + -0x1.d385436b1dde883e39c480d710236941p0, + -0x1.85d17cp2 + }, + { // Entry 286 + 0x1.d78e5b3ed606f3cb13a91f1357f91657p0, + 0x1.900008p2 + }, + { // Entry 287 + -0x1.d78e5b3ed606f3cb13a91f1357f91657p0, + -0x1.900008p2 + }, + { // Entry 288 + 0x1.db86104b70ee77d6387ad03f5a44c6b3p0, + 0x1.9a2e94p2 + }, + { // Entry 289 + -0x1.db86104b70ee77d6387ad03f5a44c6b3p0, + -0x1.9a2e94p2 + }, + { // Entry 290 + 0x1.df6d1938f2d285672ba023837c7650a3p0, + 0x1.a45d20p2 + }, + { // Entry 291 + -0x1.df6d1938f2d285672ba023837c7650a3p0, + -0x1.a45d20p2 + }, + { // Entry 292 + 0x1.e34420fa948c2d5fc8ce30e75343315bp0, + 0x1.ae8bacp2 + }, + { // Entry 293 + -0x1.e34420fa948c2d5fc8ce30e75343315bp0, + -0x1.ae8bacp2 + }, + { // Entry 294 + 0x1.e70bc7d0aa6f9a8c1a90bdfd23944160p0, + 0x1.b8ba38p2 + }, + { // Entry 295 + -0x1.e70bc7d0aa6f9a8c1a90bdfd23944160p0, + -0x1.b8ba38p2 + }, + { // Entry 296 + 0x1.eac4a42ef11caabdbf485346bb85dca9p0, + 0x1.c2e8c4p2 + }, + { // Entry 297 + -0x1.eac4a42ef11caabdbf485346bb85dca9p0, + -0x1.c2e8c4p2 + }, + { // Entry 298 + 0x1.ee6f438ac201cc83c3551ec3ec88f765p0, + 0x1.cd1750p2 + }, + { // Entry 299 + -0x1.ee6f438ac201cc83c3551ec3ec88f765p0, + -0x1.cd1750p2 + }, + { // Entry 300 + 0x1.f20c2b142e1141f944a5bd436f899fd8p0, + 0x1.d745dcp2 + }, + { // Entry 301 + -0x1.f20c2b142e1141f944a5bd436f899fd8p0, + -0x1.d745dcp2 + }, + { // Entry 302 + 0x1.f59bd85c8f80600f9a9091ac4ae69b2bp0, + 0x1.e17468p2 + }, + { // Entry 303 + -0x1.f59bd85c8f80600f9a9091ac4ae69b2bp0, + -0x1.e17468p2 + }, + { // Entry 304 + 0x1.f91ec1ecc7699ea908b3dc91bb2117d7p0, + 0x1.eba2f4p2 + }, + { // Entry 305 + -0x1.f91ec1ecc7699ea908b3dc91bb2117d7p0, + -0x1.eba2f4p2 + }, + { // Entry 306 + 0x1.fc9557cd0eaee03376a0df6d1ba5d501p0, + 0x1.f5d180p2 + }, + { // Entry 307 + -0x1.fc9557cd0eaee03376a0df6d1ba5d501p0, + -0x1.f5d180p2 + }, + { // Entry 308 + 0x1.p1, + 0x1.p3 + }, + { // Entry 309 + -0x1.p1, + -0x1.p3 + }, + { // Entry 310 + 0x1.428a2f98d728ae223ddab715be250d0cp33, + 0x1.p100 + }, + { // Entry 311 + -0x1.428a2f98d728ae223ddab715be250d0cp33, + -0x1.p100 + }, + { // Entry 312 + 0x1.4cf38fca0ab1d0dd5e3f8b10df7de89dp33, + 0x1.19999ap100 + }, + { // Entry 313 + -0x1.4cf38fca0ab1d0dd5e3f8b10df7de89dp33, + -0x1.19999ap100 + }, + { // Entry 314 + 0x1.56bfeab31a1e9d53e75261e0f714927bp33, + 0x1.333334p100 + }, + { // Entry 315 + -0x1.56bfeab31a1e9d53e75261e0f714927bp33, + -0x1.333334p100 + }, + { // Entry 316 + 0x1.600483d224f2459cbe9a69151151c908p33, + 0x1.4ccccep100 + }, + { // Entry 317 + -0x1.600483d224f2459cbe9a69151151c908p33, + -0x1.4ccccep100 + }, + { // Entry 318 + 0x1.68d25b2553fccd180af10eec660ead4dp33, + 0x1.666668p100 + }, + { // Entry 319 + -0x1.68d25b2553fccd180af10eec660ead4dp33, + -0x1.666668p100 + }, + { // Entry 320 + 0x1.713745353c7f5d6125705b069ec452b8p33, + 0x1.800002p100 + }, + { // Entry 321 + -0x1.713745353c7f5d6125705b069ec452b8p33, + -0x1.800002p100 + }, + { // Entry 322 + 0x1.793ead9e429872e2b3fe619f7f25153cp33, + 0x1.99999cp100 + }, + { // Entry 323 + -0x1.793ead9e429872e2b3fe619f7f25153cp33, + -0x1.99999cp100 + }, + { // Entry 324 + 0x1.80f221dd370feca7c7efbe496a84ee22p33, + 0x1.b33336p100 + }, + { // Entry 325 + -0x1.80f221dd370feca7c7efbe496a84ee22p33, + -0x1.b33336p100 + }, + { // Entry 326 + 0x1.8859b6a5ff499f31338b11076fb457bap33, + 0x1.ccccd0p100 + }, + { // Entry 327 + -0x1.8859b6a5ff499f31338b11076fb457bap33, + -0x1.ccccd0p100 + }, + { // Entry 328 + 0x1.8f7c53604ebc3a1267eb6083464ac3a6p33, + 0x1.e6666ap100 + }, + { // Entry 329 + -0x1.8f7c53604ebc3a1267eb6083464ac3a6p33, + -0x1.e6666ap100 + }, + { // Entry 330 + 0x1.965fea53d6e3c82b05999ab43dc4def1p33, + 0x1.p101 + }, + { // Entry 331 + -0x1.965fea53d6e3c82b05999ab43dc4def1p33, + -0x1.p101 + }, + { // Entry 332 + 0x1.965fe9cc61957f119f89d08a8918481ep0, + 0x1.fffffep1 + }, + { // Entry 333 + -0x1.965fe9cc61957f119f89d08a8918481ep0, + -0x1.fffffep1 + }, + { // Entry 334 + 0x1.965fea53d6e3c82b05999ab43dc4def1p0, + 0x1.p2 + }, + { // Entry 335 + -0x1.965fea53d6e3c82b05999ab43dc4def1p0, + -0x1.p2 + }, + { // Entry 336 + 0x1.965feb62c17f4b733617ccc56909e9f9p0, + 0x1.000002p2 + }, + { // Entry 337 + -0x1.965feb62c17f4b733617ccc56909e9f9p0, + -0x1.000002p2 + }, + { // Entry 338 + 0x1.428a2f2d53c3575963d11c9df5d9ad83p0, + 0x1.fffffep0 + }, + { // Entry 339 + -0x1.428a2f2d53c3575963d11c9df5d9ad83p0, + -0x1.fffffep0 + }, + { // Entry 340 + 0x1.428a2f98d728ae223ddab715be250d0cp0, + 0x1.p1 + }, + { // Entry 341 + -0x1.428a2f98d728ae223ddab715be250d0cp0, + -0x1.p1 + }, + { // Entry 342 + 0x1.428a306fddf284ad27ff7ccb79aabf3cp0, + 0x1.000002p1 + }, + { // Entry 343 + -0x1.428a306fddf284ad27ff7ccb79aabf3cp0, + -0x1.000002p1 + }, + { // Entry 344 + 0x1.ffffff5555551c71c6fcd6e9cb5339e1p-1, + 0x1.fffffep-1 + }, + { // Entry 345 + -0x1.ffffff5555551c71c6fcd6e9cb5339e1p-1, + -0x1.fffffep-1 + }, + { // Entry 346 + 0x1.p0, + 0x1.p0 + }, + { // Entry 347 + -0x1.p0, + -0x1.p0 + }, + { // Entry 348 + 0x1.000000aaaaaa38e38eb74f028086d9fcp0, + 0x1.000002p0 + }, + { // Entry 349 + -0x1.000000aaaaaa38e38eb74f028086d9fcp0, + -0x1.000002p0 + }, + { // Entry 350 + 0x1.965fe9cc61957f119f89d08a8918481ep-1, + 0x1.fffffep-2 + }, + { // Entry 351 + -0x1.965fe9cc61957f119f89d08a8918481ep-1, + -0x1.fffffep-2 + }, + { // Entry 352 + 0x1.965fea53d6e3c82b05999ab43dc4def1p-1, + 0x1.p-1 + }, + { // Entry 353 + -0x1.965fea53d6e3c82b05999ab43dc4def1p-1, + -0x1.p-1 + }, + { // Entry 354 + 0x1.965feb62c17f4b733617ccc56909e9f9p-1, + 0x1.000002p-1 + }, + { // Entry 355 + -0x1.965feb62c17f4b733617ccc56909e9f9p-1, + -0x1.000002p-1 + }, + { // Entry 356 + 0x1.428a2f2d53c3575963d11c9df5d9ad83p-1, + 0x1.fffffep-3 + }, + { // Entry 357 + -0x1.428a2f2d53c3575963d11c9df5d9ad83p-1, + -0x1.fffffep-3 + }, + { // Entry 358 + 0x1.428a2f98d728ae223ddab715be250d0cp-1, + 0x1.p-2 + }, + { // Entry 359 + -0x1.428a2f98d728ae223ddab715be250d0cp-1, + -0x1.p-2 + }, + { // Entry 360 + 0x1.428a306fddf284ad27ff7ccb79aabf3cp-1, + 0x1.000002p-2 + }, + { // Entry 361 + -0x1.428a306fddf284ad27ff7ccb79aabf3cp-1, + -0x1.000002p-2 + }, + { // Entry 362 + 0x1.ffffff5555551c71c6fcd6e9cb5339e1p-2, + 0x1.fffffep-4 + }, + { // Entry 363 + -0x1.ffffff5555551c71c6fcd6e9cb5339e1p-2, + -0x1.fffffep-4 + }, + { // Entry 364 + 0x1.p-1, + 0x1.p-3 + }, + { // Entry 365 + -0x1.p-1, + -0x1.p-3 + }, + { // Entry 366 + 0x1.000000aaaaaa38e38eb74f028086d9fcp-1, + 0x1.000002p-3 + }, + { // Entry 367 + -0x1.000000aaaaaa38e38eb74f028086d9fcp-1, + -0x1.000002p-3 + }, + { // Entry 368 + 0x1.965fe9cc61957f119f89d08a8918481ep-2, + 0x1.fffffep-5 + }, + { // Entry 369 + -0x1.965fe9cc61957f119f89d08a8918481ep-2, + -0x1.fffffep-5 + }, + { // Entry 370 + 0x1.965fea53d6e3c82b05999ab43dc4def1p-2, + 0x1.p-4 + }, + { // Entry 371 + -0x1.965fea53d6e3c82b05999ab43dc4def1p-2, + -0x1.p-4 + }, + { // Entry 372 + 0x1.965feb62c17f4b733617ccc56909e9f9p-2, + 0x1.000002p-4 + }, + { // Entry 373 + -0x1.965feb62c17f4b733617ccc56909e9f9p-2, + -0x1.000002p-4 + }, + { // Entry 374 + 0x1.428a2f2d53c3575963d11c9df5d9ad83p-2, + 0x1.fffffep-6 + }, + { // Entry 375 + -0x1.428a2f2d53c3575963d11c9df5d9ad83p-2, + -0x1.fffffep-6 + }, + { // Entry 376 + 0x1.428a2f98d728ae223ddab715be250d0cp-2, + 0x1.p-5 + }, + { // Entry 377 + -0x1.428a2f98d728ae223ddab715be250d0cp-2, + -0x1.p-5 + }, + { // Entry 378 + 0x1.428a306fddf284ad27ff7ccb79aabf3cp-2, + 0x1.000002p-5 + }, + { // Entry 379 + -0x1.428a306fddf284ad27ff7ccb79aabf3cp-2, + -0x1.000002p-5 + }, + { // Entry 380 + 0x1.ffffff5555551c71c6fcd6e9cb5339e1p-3, + 0x1.fffffep-7 + }, + { // Entry 381 + -0x1.ffffff5555551c71c6fcd6e9cb5339e1p-3, + -0x1.fffffep-7 + }, + { // Entry 382 + 0x1.p-2, + 0x1.p-6 + }, + { // Entry 383 + -0x1.p-2, + -0x1.p-6 + }, + { // Entry 384 + 0x1.000000aaaaaa38e38eb74f028086d9fcp-2, + 0x1.000002p-6 + }, + { // Entry 385 + -0x1.000000aaaaaa38e38eb74f028086d9fcp-2, + -0x1.000002p-6 + }, + { // Entry 386 + 0x1.428a2f98d728ae223ddab715be250d0cp-50, + 0x1.p-149 + }, + { // Entry 387 + -0x1.428a2f98d728ae223ddab715be250d0cp-50, + -0x1.p-149 + }, + { // Entry 388 + -0x1.428a2f98d728ae223ddab715be250d0cp-50, + -0x1.p-149 + }, + { // Entry 389 + 0x1.428a2f98d728ae223ddab715be250d0cp-50, + 0x1.p-149 + }, + { // Entry 390 + 0x1.965fe9cc61957f119f89d08a8918481ep42, + 0x1.fffffep127 + }, + { // Entry 391 + -0x1.965fe9cc61957f119f89d08a8918481ep42, + -0x1.fffffep127 + }, + { // Entry 392 + -0x1.965fe9cc61957f119f89d08a8918481ep42, + -0x1.fffffep127 + }, + { // Entry 393 + 0x1.965fe9cc61957f119f89d08a8918481ep42, + 0x1.fffffep127 + }, + { // Entry 394 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 395 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 396 + 0x1.965fe9cc61957f119f89d08a8918481ep42, + 0x1.fffffep127 + }, + { // Entry 397 + -0x1.965fe9cc61957f119f89d08a8918481ep42, + -0x1.fffffep127 + }, + { // Entry 398 + 0x1.965fe944ec46dbaa04d0e2812cfbefb0p42, + 0x1.fffffcp127 + }, + { // Entry 399 + -0x1.965fe944ec46dbaa04d0e2812cfbefb0p42, + -0x1.fffffcp127 + }, + { // Entry 400 + 0x1.76ef7ead6985271fe7617b1da5065543p0, + 0x1.921fb6p1 + }, + { // Entry 401 + -0x1.76ef7ead6985271fe7617b1da5065543p0, + -0x1.921fb6p1 + }, + { // Entry 402 + 0x1.2996267c5deedc47b88ccae60aa2742ap0, + 0x1.921fb6p0 + }, + { // Entry 403 + -0x1.2996267c5deedc47b88ccae60aa2742ap0, + -0x1.921fb6p0 + }, + { // Entry 404 + 0x1.d863a02639c8222baeb0d484991e52cdp-1, + 0x1.921fb6p-1 + }, + { // Entry 405 + -0x1.d863a02639c8222baeb0d484991e52cdp-1, + -0x1.921fb6p-1 + }, + { // Entry 406 + 0x1.p1, + 0x1.p3 + }, + { // Entry 407 + -0x1.p1, + -0x1.p3 + }, + { // Entry 408 + 0x1.428a2f98d728ae223ddab715be250d0cp0, + 0x1.p1 + }, + { // Entry 409 + -0x1.428a2f98d728ae223ddab715be250d0cp0, + -0x1.p1 + }, + { // Entry 410 + 0x1.000000aaaaaa38e38eb74f028086d9fcp0, + 0x1.000002p0 + }, + { // Entry 411 + -0x1.000000aaaaaa38e38eb74f028086d9fcp0, + -0x1.000002p0 + }, + { // Entry 412 + 0x1.p0, + 0x1.p0 + }, + { // Entry 413 + -0x1.p0, + -0x1.p0 + }, + { // Entry 414 + 0x1.ffffff5555551c71c6fcd6e9cb5339e1p-1, + 0x1.fffffep-1 + }, + { // Entry 415 + -0x1.ffffff5555551c71c6fcd6e9cb5339e1p-1, + -0x1.fffffep-1 + }, + { // Entry 416 + 0x1.000000aaaaaa38e38eb74f028086d9fcp-42, + 0x1.000002p-126 + }, + { // Entry 417 + -0x1.000000aaaaaa38e38eb74f028086d9fcp-42, + -0x1.000002p-126 + }, + { // Entry 418 + 0x1.p-42, + 0x1.p-126 + }, + { // Entry 419 + -0x1.p-42, + -0x1.p-126 + }, + { // Entry 420 + 0x1.fffffeaaaaa9c71c70ca45869598bfe9p-43, + 0x1.fffffcp-127 + }, + { // Entry 421 + -0x1.fffffeaaaaa9c71c70ca45869598bfe9p-43, + -0x1.fffffcp-127 + }, + { // Entry 422 + 0x1.fffffd555551c71c69e0650db20a4b26p-43, + 0x1.fffff8p-127 + }, + { // Entry 423 + -0x1.fffffd555551c71c69e0650db20a4b26p-43, + -0x1.fffff8p-127 + }, + { // Entry 424 + 0x1.965fea53d6e3c82b05999ab43dc4def1p-50, + 0x1.p-148 + }, + { // Entry 425 + -0x1.965fea53d6e3c82b05999ab43dc4def1p-50, + -0x1.p-148 + }, + { // Entry 426 + 0x1.428a2f98d728ae223ddab715be250d0cp-50, + 0x1.p-149 + }, + { // Entry 427 + -0x1.428a2f98d728ae223ddab715be250d0cp-50, + -0x1.p-149 + }, + { // Entry 428 + 0.0, + 0.0f + }, + { // Entry 429 + -0.0, + -0.0f + }, + { // Entry 430 + 0x1.80p1, + 0x1.b0p4 + }, + { // Entry 431 + -0x1.80p1, + -0x1.b0p4 + }, + { // Entry 432 + 0x1.40p2, + 0x1.f4p6 + }, + { // Entry 433 + -0x1.40p2, + -0x1.f4p6 + } +}; diff --git a/tests/math_data/ceil_intel_data.h b/tests/math_data/ceil_intel_data.h new file mode 100644 index 000000000..33096abd0 --- /dev/null +++ b/tests/math_data/ceil_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_ceil_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0 + }, + { // Entry 2 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 3 + 0x1.p0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p1, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.p1, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.80p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.80p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.80p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.94p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.94p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.94p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.f480p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.f480p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.f480p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.p50, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.00000000000040p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.p51, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.00000000000020p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.p52, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0.0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0.0, + -0x1.0p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.p0, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p0, + -0x1.8p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.p0, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.8cp6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.90p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.f380p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.f4p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.ffffffffffff80p49, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.ffffffffffffc0p50, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.ffffffffffffe0p51, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.p30, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.00000004p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.fffffff8p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 93 + 0x1.fffffff8p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 94 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 95 + 0x1.fffffffcp30, + 0x1.fffffff800001p30 + }, + { // Entry 96 + 0x1.fffffffcp30, + 0x1.fffffff800002p30 + }, + { // Entry 97 + 0x1.fffffffcp30, + 0x1.fffffff9ffffep30 + }, + { // Entry 98 + 0x1.fffffffcp30, + 0x1.fffffff9fffffp30 + }, + { // Entry 99 + 0x1.fffffffcp30, + 0x1.fffffffa0p30 + }, + { // Entry 100 + 0x1.fffffffcp30, + 0x1.fffffffa00001p30 + }, + { // Entry 101 + 0x1.fffffffcp30, + 0x1.fffffffa00002p30 + }, + { // Entry 102 + 0x1.fffffffcp30, + 0x1.fffffffbffffep30 + }, + { // Entry 103 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 105 + 0x1.p31, + 0x1.fffffffc00001p30 + }, + { // Entry 106 + 0x1.p31, + 0x1.fffffffc00002p30 + }, + { // Entry 107 + 0x1.p31, + 0x1.fffffffdffffep30 + }, + { // Entry 108 + 0x1.p31, + 0x1.fffffffdfffffp30 + }, + { // Entry 109 + 0x1.p31, + 0x1.fffffffe0p30 + }, + { // Entry 110 + 0x1.p31, + 0x1.fffffffe00001p30 + }, + { // Entry 111 + 0x1.p31, + 0x1.fffffffe00002p30 + }, + { // Entry 112 + 0x1.p31, + 0x1.ffffffffffffep30 + }, + { // Entry 113 + 0x1.p31, + 0x1.fffffffffffffp30 + }, + { // Entry 114 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 115 + 0x1.00000002p31, + 0x1.0000000000001p31 + }, + { // Entry 116 + 0x1.00000002p31, + 0x1.0000000000002p31 + }, + { // Entry 117 + 0x1.00000002p31, + 0x1.00000000ffffep31 + }, + { // Entry 118 + 0x1.00000002p31, + 0x1.00000000fffffp31 + }, + { // Entry 119 + 0x1.00000002p31, + 0x1.000000010p31 + }, + { // Entry 120 + 0x1.00000002p31, + 0x1.0000000100001p31 + }, + { // Entry 121 + 0x1.00000002p31, + 0x1.0000000100002p31 + }, + { // Entry 122 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 123 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 124 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 125 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 126 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 127 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 128 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 129 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 130 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 131 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 132 + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 134 + -0x1.fffffff8p29, + -0x1.fffffffffffffp29 + }, + { // Entry 135 + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 136 + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 137 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 138 + -0x1.fffffff4p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 139 + -0x1.fffffff4p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 140 + -0x1.fffffff8p30, + -0x1.fffffffa00002p30 + }, + { // Entry 141 + -0x1.fffffff8p30, + -0x1.fffffffa00001p30 + }, + { // Entry 142 + -0x1.fffffff8p30, + -0x1.fffffffa0p30 + }, + { // Entry 143 + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 144 + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 145 + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 146 + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 147 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 148 + -0x1.fffffff8p30, + -0x1.fffffffbfffffp30 + }, + { // Entry 149 + -0x1.fffffff8p30, + -0x1.fffffffbffffep30 + }, + { // Entry 150 + -0x1.fffffffcp30, + -0x1.fffffffe00002p30 + }, + { // Entry 151 + -0x1.fffffffcp30, + -0x1.fffffffe00001p30 + }, + { // Entry 152 + -0x1.fffffffcp30, + -0x1.fffffffe0p30 + }, + { // Entry 153 + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 154 + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 155 + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 156 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 158 + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 159 + -0x1.fffffffcp30, + -0x1.ffffffffffffep30 + }, + { // Entry 160 + -0x1.p31, + -0x1.0000000100002p31 + }, + { // Entry 161 + -0x1.p31, + -0x1.0000000100001p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.000000010p31 + }, + { // Entry 163 + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 164 + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 165 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 166 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 167 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 176 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 177 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 178 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 179 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 180 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 181 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 182 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 183 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 184 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 185 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 186 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 187 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 188 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 189 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 190 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 191 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 193 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 194 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 195 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 196 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 198 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 199 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 200 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 201 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 203 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 204 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 205 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 209 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 210 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 211 + 0x1.p31, + 0x1.fffffffc00001p30 + }, + { // Entry 212 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 214 + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffffffffffp1 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 217 + 0x1.40p2, + 0x1.0000000000001p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffffffffffp2 + }, + { // Entry 219 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 220 + 0x1.20p3, + 0x1.0000000000001p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffffffffffp3 + }, + { // Entry 222 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 223 + 0x1.10p4, + 0x1.0000000000001p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffffffffffp4 + }, + { // Entry 225 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 226 + 0x1.08p5, + 0x1.0000000000001p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffffffffffp5 + }, + { // Entry 228 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 229 + 0x1.04p6, + 0x1.0000000000001p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffffffffffp6 + }, + { // Entry 231 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 232 + 0x1.02p7, + 0x1.0000000000001p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffffffffffp7 + }, + { // Entry 234 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 235 + 0x1.01p8, + 0x1.0000000000001p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffffffffffp8 + }, + { // Entry 237 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 238 + 0x1.0080p9, + 0x1.0000000000001p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffffffffffp9 + }, + { // Entry 240 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 241 + 0x1.0040p10, + 0x1.0000000000001p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffffffffffp10 + }, + { // Entry 243 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 244 + 0x1.0020p11, + 0x1.0000000000001p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffffffffffp11 + }, + { // Entry 246 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 247 + 0x1.0010p12, + 0x1.0000000000001p12 + }, + { // Entry 248 + 0x1.40p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 249 + 0x1.40p2, + 0x1.2p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.2000000000001p2 + }, + { // Entry 251 + 0x1.20p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 252 + 0x1.20p3, + 0x1.1p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.1000000000001p3 + }, + { // Entry 254 + 0x1.10p4, + 0x1.07fffffffffffp4 + }, + { // Entry 255 + 0x1.10p4, + 0x1.080p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.0800000000001p4 + }, + { // Entry 257 + 0x1.08p5, + 0x1.03fffffffffffp5 + }, + { // Entry 258 + 0x1.08p5, + 0x1.040p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.0400000000001p5 + }, + { // Entry 260 + 0x1.04p6, + 0x1.01fffffffffffp6 + }, + { // Entry 261 + 0x1.04p6, + 0x1.020p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.0200000000001p6 + }, + { // Entry 263 + 0x1.02p7, + 0x1.00fffffffffffp7 + }, + { // Entry 264 + 0x1.02p7, + 0x1.010p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.0100000000001p7 + }, + { // Entry 266 + 0x1.01p8, + 0x1.007ffffffffffp8 + }, + { // Entry 267 + 0x1.01p8, + 0x1.008p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.0080000000001p8 + }, + { // Entry 269 + 0x1.0080p9, + 0x1.003ffffffffffp9 + }, + { // Entry 270 + 0x1.0080p9, + 0x1.004p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.0040000000001p9 + }, + { // Entry 272 + 0x1.0040p10, + 0x1.001ffffffffffp10 + }, + { // Entry 273 + 0x1.0040p10, + 0x1.002p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.0020000000001p10 + }, + { // Entry 275 + 0x1.0080p10, + 0x1.005ffffffffffp10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.006p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.0060000000001p10 + }, + { // Entry 278 + 0x1.0020p11, + 0x1.000ffffffffffp11 + }, + { // Entry 279 + 0x1.0020p11, + 0x1.001p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.0010000000001p11 + }, + { // Entry 281 + 0x1.0010p12, + 0x1.0007fffffffffp12 + }, + { // Entry 282 + 0x1.0010p12, + 0x1.00080p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.0008000000001p12 + }, + { // Entry 284 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 286 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 287 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 289 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 290 + 0x1.p2, + 0x1.921fb54442d18p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb54442d18p0 + }, + { // Entry 293 + -0x1.p0, + -0x1.921fb54442d18p0 + }, + { // Entry 294 + 0x1.p1, + 0x1.0000000000001p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 299 + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 301 + -0.0, + -0x1.921fb54442d18p-1 + }, + { // Entry 302 + 0x1.p0, + 0x1.0000000000001p-1022 + }, + { // Entry 303 + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 304 + 0x1.p0, + 0x1.0p-1022 + }, + { // Entry 305 + -0.0, + -0x1.0p-1022 + }, + { // Entry 306 + 0x1.p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 307 + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 308 + 0x1.p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 309 + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 310 + 0x1.p0, + 0x1.0p-1073 + }, + { // Entry 311 + -0.0, + -0x1.0p-1073 + }, + { // Entry 312 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 313 + -0.0, + -0x1.0p-1074 + }, + { // Entry 314 + 0.0, + 0.0 + }, + { // Entry 315 + -0.0, + -0.0 + }, + { // Entry 316 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 317 + -0x1.p0, + -0x1.8p0 + }, + { // Entry 318 + 0x1.80p1, + 0x1.4p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 320 + 0x1.p0, + 0x1.fffffp-2 + }, + { // Entry 321 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.00001p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffffp-2 + }, + { // Entry 324 + -0.0, + -0x1.0p-1 + }, + { // Entry 325 + -0.0, + -0x1.00001p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.80001p0 + }, + { // Entry 327 + 0x1.p1, + 0x1.7ffffp0 + }, + { // Entry 328 + -0x1.p0, + -0x1.80001p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/ceilf_intel_data.h b/tests/math_data/ceilf_intel_data.h new file mode 100644 index 000000000..4b5240600 --- /dev/null +++ b/tests/math_data/ceilf_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_ceilf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0 + }, + { // Entry 2 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 3 + 0x1.p0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0x1.p0, + 0x1.p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.000002p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p1, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.p1, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 13 + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.80p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.80p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.80p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.94p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.94p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.94p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.f480p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.f480p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.f480p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.p21, + 0x1.fffffep20 + }, + { // Entry 31 + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.000008p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.p22, + 0x1.fffffep21 + }, + { // Entry 34 + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.000004p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.p23, + 0x1.fffffep22 + }, + { // Entry 37 + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0.0, + -0x1.000002p-1 + }, + { // Entry 47 + -0.0, + -0x1.p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0.0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.p0, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p0, + -0x1.80p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.p0, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.8cp6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.90p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.f380p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.f4p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 74 + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.fffff0p20, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.p22, + -0x1.000002p22 + }, + { // Entry 77 + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.fffff8p21, + -0x1.fffffep21 + }, + { // Entry 79 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.fffffcp22, + -0x1.fffffep22 + }, + { // Entry 82 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 93 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 94 + 0x1.p31, + 0x1.p31 + }, + { // Entry 95 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 96 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.p31, + 0x1.p31 + }, + { // Entry 123 + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.p31, + 0x1.p31 + }, + { // Entry 126 + 0x1.p31, + 0x1.p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.p30 + }, + { // Entry 134 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 135 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 136 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 137 + -0x1.p31, + -0x1.p31 + }, + { // Entry 138 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 139 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.p31, + -0x1.p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.p31, + -0x1.p31 + }, + { // Entry 169 + -0x1.p31, + -0x1.p31 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 176 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 177 + 0x1.p62, + 0x1.p62 + }, + { // Entry 178 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 179 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 180 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 181 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 182 + 0x1.p63, + 0x1.p63 + }, + { // Entry 183 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 184 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 185 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 186 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 187 + 0x1.p64, + 0x1.p64 + }, + { // Entry 188 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 189 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 190 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 191 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.p62 + }, + { // Entry 193 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 194 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 195 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 196 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.p63 + }, + { // Entry 198 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 199 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 200 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 201 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.p64 + }, + { // Entry 203 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 204 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 205 + 0x1.p62, + 0x1.p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.p63 + }, + { // Entry 209 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 210 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 211 + 0x1.p31, + 0x1.p31 + }, + { // Entry 212 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.p31 + }, + { // Entry 214 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffep1 + }, + { // Entry 216 + 0x1.p2, + 0x1.p2 + }, + { // Entry 217 + 0x1.40p2, + 0x1.000002p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffep2 + }, + { // Entry 219 + 0x1.p3, + 0x1.p3 + }, + { // Entry 220 + 0x1.20p3, + 0x1.000002p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffep3 + }, + { // Entry 222 + 0x1.p4, + 0x1.p4 + }, + { // Entry 223 + 0x1.10p4, + 0x1.000002p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffep4 + }, + { // Entry 225 + 0x1.p5, + 0x1.p5 + }, + { // Entry 226 + 0x1.08p5, + 0x1.000002p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffep5 + }, + { // Entry 228 + 0x1.p6, + 0x1.p6 + }, + { // Entry 229 + 0x1.04p6, + 0x1.000002p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffep6 + }, + { // Entry 231 + 0x1.p7, + 0x1.p7 + }, + { // Entry 232 + 0x1.02p7, + 0x1.000002p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffep7 + }, + { // Entry 234 + 0x1.p8, + 0x1.p8 + }, + { // Entry 235 + 0x1.01p8, + 0x1.000002p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffep8 + }, + { // Entry 237 + 0x1.p9, + 0x1.p9 + }, + { // Entry 238 + 0x1.0080p9, + 0x1.000002p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 240 + 0x1.p10, + 0x1.p10 + }, + { // Entry 241 + 0x1.0040p10, + 0x1.000002p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffep10 + }, + { // Entry 243 + 0x1.p11, + 0x1.p11 + }, + { // Entry 244 + 0x1.0020p11, + 0x1.000002p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffep11 + }, + { // Entry 246 + 0x1.p12, + 0x1.p12 + }, + { // Entry 247 + 0x1.0010p12, + 0x1.000002p12 + }, + { // Entry 248 + 0x1.40p2, + 0x1.1ffffep2 + }, + { // Entry 249 + 0x1.40p2, + 0x1.20p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.200002p2 + }, + { // Entry 251 + 0x1.20p3, + 0x1.0ffffep3 + }, + { // Entry 252 + 0x1.20p3, + 0x1.10p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.100002p3 + }, + { // Entry 254 + 0x1.10p4, + 0x1.07fffep4 + }, + { // Entry 255 + 0x1.10p4, + 0x1.08p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.080002p4 + }, + { // Entry 257 + 0x1.08p5, + 0x1.03fffep5 + }, + { // Entry 258 + 0x1.08p5, + 0x1.04p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.040002p5 + }, + { // Entry 260 + 0x1.04p6, + 0x1.01fffep6 + }, + { // Entry 261 + 0x1.04p6, + 0x1.02p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.020002p6 + }, + { // Entry 263 + 0x1.02p7, + 0x1.00fffep7 + }, + { // Entry 264 + 0x1.02p7, + 0x1.01p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.010002p7 + }, + { // Entry 266 + 0x1.01p8, + 0x1.007ffep8 + }, + { // Entry 267 + 0x1.01p8, + 0x1.0080p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.008002p8 + }, + { // Entry 269 + 0x1.0080p9, + 0x1.003ffep9 + }, + { // Entry 270 + 0x1.0080p9, + 0x1.0040p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.004002p9 + }, + { // Entry 272 + 0x1.0040p10, + 0x1.001ffep10 + }, + { // Entry 273 + 0x1.0040p10, + 0x1.0020p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.002002p10 + }, + { // Entry 275 + 0x1.0080p10, + 0x1.005ffep10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.0060p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.006002p10 + }, + { // Entry 278 + 0x1.0020p11, + 0x1.000ffep11 + }, + { // Entry 279 + 0x1.0020p11, + 0x1.0010p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.001002p11 + }, + { // Entry 281 + 0x1.0010p12, + 0x1.0007fep12 + }, + { // Entry 282 + 0x1.0010p12, + 0x1.0008p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.000802p12 + }, + { // Entry 284 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 286 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 287 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 288 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 289 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 290 + 0x1.p2, + 0x1.921fb6p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb6p0 + }, + { // Entry 293 + -0x1.p0, + -0x1.921fb6p0 + }, + { // Entry 294 + 0x1.p1, + 0x1.000002p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 299 + -0.0, + -0x1.fffffep-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 301 + -0.0, + -0x1.921fb6p-1 + }, + { // Entry 302 + 0x1.p0, + 0x1.000002p-126 + }, + { // Entry 303 + -0.0, + -0x1.000002p-126 + }, + { // Entry 304 + 0x1.p0, + 0x1.p-126 + }, + { // Entry 305 + -0.0, + -0x1.p-126 + }, + { // Entry 306 + 0x1.p0, + 0x1.fffffcp-127 + }, + { // Entry 307 + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 308 + 0x1.p0, + 0x1.fffff8p-127 + }, + { // Entry 309 + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 310 + 0x1.p0, + 0x1.p-148 + }, + { // Entry 311 + -0.0, + -0x1.p-148 + }, + { // Entry 312 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 313 + -0.0, + -0x1.p-149 + }, + { // Entry 314 + 0.0, + 0.0f + }, + { // Entry 315 + -0.0, + -0.0f + }, + { // Entry 316 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 317 + -0x1.p0, + -0x1.80p0 + }, + { // Entry 318 + 0x1.80p1, + 0x1.40p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 320 + 0x1.p0, + 0x1.fffff0p-2 + }, + { // Entry 321 + 0x1.p0, + 0x1.p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.000010p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffff0p-2 + }, + { // Entry 324 + -0.0, + -0x1.p-1 + }, + { // Entry 325 + -0.0, + -0x1.000010p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.800010p0 + }, + { // Entry 327 + 0x1.p1, + 0x1.7ffff0p0 + }, + { // Entry 328 + -0x1.p0, + -0x1.800010p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data/copysign_intel_data.h b/tests/math_data/copysign_intel_data.h new file mode 100644 index 000000000..1478f1e08 --- /dev/null +++ b/tests/math_data/copysign_intel_data.h @@ -0,0 +1,1458 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_copysign_intel_data[] = { + { // Entry 0 + -0x1.p-10, + -0x1.0p-10, + -0x1.0p-10 + }, + { // Entry 1 + 0x1.p-10, + -0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 2 + -0x1.p-10, + 0x1.0p-10, + -0x1.0p-10 + }, + { // Entry 3 + 0x1.p-10, + 0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 4 + -0x1.40p3, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 5 + 0x1.40p3, + -0x1.4p3, + 0x1.4p3 + }, + { // Entry 6 + -0x1.40p3, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 7 + 0x1.40p3, + 0x1.4p3, + 0x1.4p3 + }, + { // Entry 8 + -0x1.p-1073, + -0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 9 + -0x1.p-1073, + -0x1.0p-1073, + -0.0 + }, + { // Entry 10 + 0x1.p-1073, + -0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 11 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 12 + -0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 13 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 14 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 15 + -0.0, + -0.0, + -0.0 + }, + { // Entry 16 + 0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 17 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 18 + -0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 19 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 20 + -0x1.p-1073, + 0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 21 + -0x1.p-1073, + 0x1.0p-1073, + -0.0 + }, + { // Entry 22 + 0x1.p-1073, + 0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 23 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 24 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 25 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 26 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 27 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 28 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 29 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 30 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 31 + 0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 32 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 33 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 34 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 35 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 36 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 37 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 38 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 39 + 0x1.00000000000020p-1023, + -0x1.0000000000002p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 40 + 0x1.00000000000020p-1023, + -0x1.0000000000002p-1023, + 0x1.0p-1023 + }, + { // Entry 41 + 0x1.00000000000020p-1023, + -0x1.0000000000002p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 42 + 0x1.p-1023, + -0x1.0p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 43 + 0x1.p-1023, + -0x1.0p-1023, + 0x1.0p-1023 + }, + { // Entry 44 + 0x1.p-1023, + -0x1.0p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 45 + 0x1.ffffffffffffc0p-1024, + -0x1.ffffffffffffcp-1024, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 46 + 0x1.ffffffffffffc0p-1024, + -0x1.ffffffffffffcp-1024, + 0x1.0p-1023 + }, + { // Entry 47 + 0x1.ffffffffffffc0p-1024, + -0x1.ffffffffffffcp-1024, + 0x1.0000000000002p-1023 + }, + { // Entry 48 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 49 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 50 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 51 + 0x1.p0, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 52 + 0x1.p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 53 + 0x1.p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 54 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 55 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 56 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 57 + 0x1.00000000000010p1023, + -0x1.0000000000001p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 58 + 0x1.00000000000010p1023, + -0x1.0000000000001p1023, + 0x1.0p1023 + }, + { // Entry 59 + 0x1.00000000000010p1023, + -0x1.0000000000001p1023, + 0x1.0000000000001p1023 + }, + { // Entry 60 + 0x1.p1023, + -0x1.0p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 61 + 0x1.p1023, + -0x1.0p1023, + 0x1.0p1023 + }, + { // Entry 62 + 0x1.p1023, + -0x1.0p1023, + 0x1.0000000000001p1023 + }, + { // Entry 63 + 0x1.fffffffffffff0p1022, + -0x1.fffffffffffffp1022, + 0x1.fffffffffffffp1022 + }, + { // Entry 64 + 0x1.fffffffffffff0p1022, + -0x1.fffffffffffffp1022, + 0x1.0p1023 + }, + { // Entry 65 + 0x1.fffffffffffff0p1022, + -0x1.fffffffffffffp1022, + 0x1.0000000000001p1023 + }, + { // Entry 66 + -0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + -0x1.0000000000002p-1023 + }, + { // Entry 67 + -0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + -0x1.0p-1023 + }, + { // Entry 68 + -0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + -0x1.ffffffffffffcp-1024 + }, + { // Entry 69 + -0x1.p-1023, + 0x1.0p-1023, + -0x1.0000000000002p-1023 + }, + { // Entry 70 + -0x1.p-1023, + 0x1.0p-1023, + -0x1.0p-1023 + }, + { // Entry 71 + -0x1.p-1023, + 0x1.0p-1023, + -0x1.ffffffffffffcp-1024 + }, + { // Entry 72 + -0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + -0x1.0000000000002p-1023 + }, + { // Entry 73 + -0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + -0x1.0p-1023 + }, + { // Entry 74 + -0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + -0x1.ffffffffffffcp-1024 + }, + { // Entry 75 + -0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 76 + -0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 77 + -0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 78 + -0x1.p0, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 79 + -0x1.p0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 80 + -0x1.p0, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 81 + -0x1.00000000000010p0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 82 + -0x1.00000000000010p0, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 83 + -0x1.00000000000010p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 84 + -0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p1023 + }, + { // Entry 85 + -0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + -0x1.0p1023 + }, + { // Entry 86 + -0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp1022 + }, + { // Entry 87 + -0x1.p1023, + 0x1.0p1023, + -0x1.0000000000001p1023 + }, + { // Entry 88 + -0x1.p1023, + 0x1.0p1023, + -0x1.0p1023 + }, + { // Entry 89 + -0x1.p1023, + 0x1.0p1023, + -0x1.fffffffffffffp1022 + }, + { // Entry 90 + -0x1.00000000000010p1023, + 0x1.0000000000001p1023, + -0x1.0000000000001p1023 + }, + { // Entry 91 + -0x1.00000000000010p1023, + 0x1.0000000000001p1023, + -0x1.0p1023 + }, + { // Entry 92 + -0x1.00000000000010p1023, + 0x1.0000000000001p1023, + -0x1.fffffffffffffp1022 + }, + { // Entry 93 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 94 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 95 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 96 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 97 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 98 + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 99 + -HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 100 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 101 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 102 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 103 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p0 + }, + { // Entry 104 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 105 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 106 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 107 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 108 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 109 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 110 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 111 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 112 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 113 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 114 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 115 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 116 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p0 + }, + { // Entry 117 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 118 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 119 + 0x1.p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 120 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 121 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 122 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 123 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 124 + 0x1.p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 125 + -0x1.p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 126 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 127 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 128 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 129 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 130 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 131 + -0x1.p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 132 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 133 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 134 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 135 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 136 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 137 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 138 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 139 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 140 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 141 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 142 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 143 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 144 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 145 + 0x1.p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 146 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 147 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 148 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 149 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 150 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 151 + -0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 152 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 153 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 154 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 155 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 156 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 157 + -0x1.p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 158 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 159 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 160 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 161 + 0.0, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 162 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 163 + 0.0, + 0.0, + 0.0 + }, + { // Entry 164 + -0.0, + 0.0, + -0.0 + }, + { // Entry 165 + -0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 166 + -0.0, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 167 + -0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 168 + -0.0, + 0.0, + -0x1.0p0 + }, + { // Entry 169 + -0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 170 + -0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 171 + 0.0, + -0.0, + HUGE_VAL + }, + { // Entry 172 + 0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 173 + 0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 174 + 0.0, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 175 + 0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 176 + 0.0, + -0.0, + 0.0 + }, + { // Entry 177 + -0.0, + -0.0, + -0.0 + }, + { // Entry 178 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 179 + -0.0, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 180 + -0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 181 + -0.0, + -0.0, + -0x1.0p0 + }, + { // Entry 182 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 183 + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 184 + 0x1.p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 185 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 186 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 187 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 188 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 189 + 0x1.p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 190 + -0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 191 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 192 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 193 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 194 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 195 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 196 + -0x1.p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 197 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 198 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 199 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 200 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 201 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 202 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 203 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 204 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 205 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 206 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 207 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 208 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 209 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 210 + 0x1.p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 211 + 0x1.p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 212 + 0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 213 + 0x1.p-1022, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 214 + 0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 215 + 0x1.p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 216 + -0x1.p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 217 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 218 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 219 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 220 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 221 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 222 + -0x1.p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 223 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + HUGE_VAL + }, + { // Entry 224 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1023 + }, + { // Entry 225 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0p-1022 + }, + { // Entry 226 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.ffffffffffffep-1023 + }, + { // Entry 227 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 228 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0.0 + }, + { // Entry 229 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 230 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 231 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.ffffffffffffep-1023 + }, + { // Entry 232 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.0p-1022 + }, + { // Entry 233 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 234 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 235 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -HUGE_VAL + }, + { // Entry 236 + 0x1.p0, + -0x1.0p0, + HUGE_VAL + }, + { // Entry 237 + 0x1.p0, + -0x1.0p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 238 + 0x1.p0, + -0x1.0p0, + 0x1.0p-1022 + }, + { // Entry 239 + 0x1.p0, + -0x1.0p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 240 + 0x1.p0, + -0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 241 + 0x1.p0, + -0x1.0p0, + 0.0 + }, + { // Entry 242 + -0x1.p0, + -0x1.0p0, + -0.0 + }, + { // Entry 243 + -0x1.p0, + -0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 244 + -0x1.p0, + -0x1.0p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 245 + -0x1.p0, + -0x1.0p0, + -0x1.0p-1022 + }, + { // Entry 246 + -0x1.p0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 247 + -0x1.p0, + -0x1.0p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 248 + -0x1.p0, + -0x1.0p0, + -HUGE_VAL + }, + { // Entry 249 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + HUGE_VAL + }, + { // Entry 250 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 251 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.0p-1022 + }, + { // Entry 252 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 253 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 254 + 0x1.00000000000010p0, + -0x1.0000000000001p0, + 0.0 + }, + { // Entry 255 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0.0 + }, + { // Entry 256 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 257 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 258 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.0p-1022 + }, + { // Entry 259 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 260 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 261 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -HUGE_VAL + }, + { // Entry 262 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 263 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 264 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 265 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 266 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 267 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 268 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 269 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 270 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 271 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 272 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p0 + }, + { // Entry 273 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 274 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 275 + HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 276 + HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 277 + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 278 + HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 279 + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 280 + HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 281 + -HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 282 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 283 + -HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 284 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p0 + }, + { // Entry 286 + -HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 287 + -HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + } +}; diff --git a/tests/math_data/copysignf_intel_data.h b/tests/math_data/copysignf_intel_data.h new file mode 100644 index 000000000..58a579d1b --- /dev/null +++ b/tests/math_data/copysignf_intel_data.h @@ -0,0 +1,1458 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_copysignf_intel_data[] = { + { // Entry 0 + -0x1.p-10, + -0x1.p-10, + -0x1.p-10 + }, + { // Entry 1 + 0x1.p-10, + -0x1.p-10, + 0x1.p-10 + }, + { // Entry 2 + -0x1.p-10, + 0x1.p-10, + -0x1.p-10 + }, + { // Entry 3 + 0x1.p-10, + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 4 + -0x1.40p3, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 5 + 0x1.40p3, + -0x1.40p3, + 0x1.40p3 + }, + { // Entry 6 + -0x1.40p3, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 7 + 0x1.40p3, + 0x1.40p3, + 0x1.40p3 + }, + { // Entry 8 + -0x1.p-148, + -0x1.p-148, + -0x1.p-149 + }, + { // Entry 9 + 0x1.p-148, + -0x1.p-148, + 0.0 + }, + { // Entry 10 + 0x1.p-148, + -0x1.p-148, + 0x1.p-149 + }, + { // Entry 11 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 12 + 0x1.p-149, + -0x1.p-149, + 0.0 + }, + { // Entry 13 + 0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 14 + -0.0, + 0.0, + -0x1.p-149 + }, + { // Entry 15 + 0.0, + 0.0, + 0.0 + }, + { // Entry 16 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 17 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 18 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 19 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 20 + -0x1.p-148, + 0x1.p-148, + -0x1.p-149 + }, + { // Entry 21 + 0x1.p-148, + 0x1.p-148, + 0.0 + }, + { // Entry 22 + 0x1.p-148, + 0x1.p-148, + 0x1.p-149 + }, + { // Entry 23 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 24 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 25 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 26 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 27 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 28 + -0.0, + 0.0, + -0x1.fffffep127 + }, + { // Entry 29 + -0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 30 + 0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 31 + 0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 32 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 33 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 34 + 0x1.fffffep127, + -0x1.fffffep127, + 0.0 + }, + { // Entry 35 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 36 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 37 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 38 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 39 + 0x1.000004p-127, + -0x1.000004p-127, + 0x1.fffff8p-128 + }, + { // Entry 40 + 0x1.000004p-127, + -0x1.000004p-127, + 0x1.p-127 + }, + { // Entry 41 + 0x1.000004p-127, + -0x1.000004p-127, + 0x1.000004p-127 + }, + { // Entry 42 + 0x1.p-127, + -0x1.p-127, + 0x1.fffff8p-128 + }, + { // Entry 43 + 0x1.p-127, + -0x1.p-127, + 0x1.p-127 + }, + { // Entry 44 + 0x1.p-127, + -0x1.p-127, + 0x1.000004p-127 + }, + { // Entry 45 + 0x1.fffff8p-128, + -0x1.fffff8p-128, + 0x1.fffff8p-128 + }, + { // Entry 46 + 0x1.fffff8p-128, + -0x1.fffff8p-128, + 0x1.p-127 + }, + { // Entry 47 + 0x1.fffff8p-128, + -0x1.fffff8p-128, + 0x1.000004p-127 + }, + { // Entry 48 + 0x1.000002p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 49 + 0x1.000002p0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 50 + 0x1.000002p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 51 + 0x1.p0, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 52 + 0x1.p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 53 + 0x1.p0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 54 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 55 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 56 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 57 + 0x1.000002p127, + -0x1.000002p127, + 0x1.fffffep126 + }, + { // Entry 58 + 0x1.000002p127, + -0x1.000002p127, + 0x1.p127 + }, + { // Entry 59 + 0x1.000002p127, + -0x1.000002p127, + 0x1.000002p127 + }, + { // Entry 60 + 0x1.p127, + -0x1.p127, + 0x1.fffffep126 + }, + { // Entry 61 + 0x1.p127, + -0x1.p127, + 0x1.p127 + }, + { // Entry 62 + 0x1.p127, + -0x1.p127, + 0x1.000002p127 + }, + { // Entry 63 + 0x1.fffffep126, + -0x1.fffffep126, + 0x1.fffffep126 + }, + { // Entry 64 + 0x1.fffffep126, + -0x1.fffffep126, + 0x1.p127 + }, + { // Entry 65 + 0x1.fffffep126, + -0x1.fffffep126, + 0x1.000002p127 + }, + { // Entry 66 + -0x1.fffff8p-128, + 0x1.fffff8p-128, + -0x1.000004p-127 + }, + { // Entry 67 + -0x1.fffff8p-128, + 0x1.fffff8p-128, + -0x1.p-127 + }, + { // Entry 68 + -0x1.fffff8p-128, + 0x1.fffff8p-128, + -0x1.fffff8p-128 + }, + { // Entry 69 + -0x1.p-127, + 0x1.p-127, + -0x1.000004p-127 + }, + { // Entry 70 + -0x1.p-127, + 0x1.p-127, + -0x1.p-127 + }, + { // Entry 71 + -0x1.p-127, + 0x1.p-127, + -0x1.fffff8p-128 + }, + { // Entry 72 + -0x1.000004p-127, + 0x1.000004p-127, + -0x1.000004p-127 + }, + { // Entry 73 + -0x1.000004p-127, + 0x1.000004p-127, + -0x1.p-127 + }, + { // Entry 74 + -0x1.000004p-127, + 0x1.000004p-127, + -0x1.fffff8p-128 + }, + { // Entry 75 + -0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 76 + -0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 77 + -0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 78 + -0x1.p0, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 79 + -0x1.p0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 80 + -0x1.p0, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 81 + -0x1.000002p0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 82 + -0x1.000002p0, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 83 + -0x1.000002p0, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 84 + -0x1.fffffep126, + 0x1.fffffep126, + -0x1.000002p127 + }, + { // Entry 85 + -0x1.fffffep126, + 0x1.fffffep126, + -0x1.p127 + }, + { // Entry 86 + -0x1.fffffep126, + 0x1.fffffep126, + -0x1.fffffep126 + }, + { // Entry 87 + -0x1.p127, + 0x1.p127, + -0x1.000002p127 + }, + { // Entry 88 + -0x1.p127, + 0x1.p127, + -0x1.p127 + }, + { // Entry 89 + -0x1.p127, + 0x1.p127, + -0x1.fffffep126 + }, + { // Entry 90 + -0x1.000002p127, + 0x1.000002p127, + -0x1.000002p127 + }, + { // Entry 91 + -0x1.000002p127, + 0x1.000002p127, + -0x1.p127 + }, + { // Entry 92 + -0x1.000002p127, + 0x1.000002p127, + -0x1.fffffep126 + }, + { // Entry 93 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 94 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 95 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 96 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 97 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 98 + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 99 + -HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 100 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 101 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 102 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 103 + -HUGE_VALF, + HUGE_VALF, + -0x1.p0 + }, + { // Entry 104 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 105 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 106 + 0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 107 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 108 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 109 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 110 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 111 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 112 + -0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 113 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 114 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 115 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 116 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p0 + }, + { // Entry 117 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 118 + -0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 119 + 0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 120 + 0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 121 + 0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 122 + 0x1.p-126, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 123 + 0x1.p-126, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 124 + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 125 + -0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 126 + -0x1.p-126, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 127 + -0x1.p-126, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 128 + -0x1.p-126, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 129 + -0x1.p-126, + 0x1.p-126, + -0x1.p0 + }, + { // Entry 130 + -0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 131 + -0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 132 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 133 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 134 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 135 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 136 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 137 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 138 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 139 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 140 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 141 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 142 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 143 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 144 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 145 + 0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 146 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 147 + 0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 148 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 149 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 150 + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 151 + -0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 152 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 153 + -0x1.p-149, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 154 + -0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 155 + -0x1.p-149, + 0x1.p-149, + -0x1.p0 + }, + { // Entry 156 + -0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 157 + -0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 158 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 159 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 160 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 161 + 0.0, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 162 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 163 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 164 + -0.0, + 0.0f, + -0.0f + }, + { // Entry 165 + -0.0, + 0.0f, + -0x1.p-149 + }, + { // Entry 166 + -0.0, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 167 + -0.0, + 0.0f, + -0x1.p-126 + }, + { // Entry 168 + -0.0, + 0.0f, + -0x1.p0 + }, + { // Entry 169 + -0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 170 + -0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 171 + 0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 172 + 0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 173 + 0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 174 + 0.0, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 175 + 0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 176 + 0.0, + -0.0f, + 0.0f + }, + { // Entry 177 + -0.0, + -0.0f, + -0.0f + }, + { // Entry 178 + -0.0, + -0.0f, + -0x1.p-149 + }, + { // Entry 179 + -0.0, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 180 + -0.0, + -0.0f, + -0x1.p-126 + }, + { // Entry 181 + -0.0, + -0.0f, + -0x1.p0 + }, + { // Entry 182 + -0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 183 + -0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 184 + 0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 185 + 0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 186 + 0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 187 + 0x1.p-149, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 188 + 0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 189 + 0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 190 + -0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 191 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 192 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 193 + -0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 194 + -0x1.p-149, + -0x1.p-149, + -0x1.p0 + }, + { // Entry 195 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 196 + -0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 197 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 198 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 199 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 200 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 201 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 202 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 203 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 204 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 205 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 206 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 207 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 208 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 209 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 210 + 0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 211 + 0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 212 + 0x1.p-126, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 213 + 0x1.p-126, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 214 + 0x1.p-126, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 215 + 0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 216 + -0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 217 + -0x1.p-126, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 218 + -0x1.p-126, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 219 + -0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 220 + -0x1.p-126, + -0x1.p-126, + -0x1.p0 + }, + { // Entry 221 + -0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 222 + -0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 223 + 0x1.fffffep-1, + -0x1.fffffep-1, + HUGE_VALF + }, + { // Entry 224 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.fffffep127 + }, + { // Entry 225 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p-126 + }, + { // Entry 226 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.fffffcp-127 + }, + { // Entry 227 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 228 + 0x1.fffffep-1, + -0x1.fffffep-1, + 0.0f + }, + { // Entry 229 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0.0f + }, + { // Entry 230 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 231 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.fffffcp-127 + }, + { // Entry 232 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.p-126 + }, + { // Entry 233 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 234 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.fffffep127 + }, + { // Entry 235 + -0x1.fffffep-1, + -0x1.fffffep-1, + -HUGE_VALF + }, + { // Entry 236 + 0x1.p0, + -0x1.p0, + HUGE_VALF + }, + { // Entry 237 + 0x1.p0, + -0x1.p0, + 0x1.fffffep127 + }, + { // Entry 238 + 0x1.p0, + -0x1.p0, + 0x1.p-126 + }, + { // Entry 239 + 0x1.p0, + -0x1.p0, + 0x1.fffffcp-127 + }, + { // Entry 240 + 0x1.p0, + -0x1.p0, + 0x1.p-149 + }, + { // Entry 241 + 0x1.p0, + -0x1.p0, + 0.0f + }, + { // Entry 242 + -0x1.p0, + -0x1.p0, + -0.0f + }, + { // Entry 243 + -0x1.p0, + -0x1.p0, + -0x1.p-149 + }, + { // Entry 244 + -0x1.p0, + -0x1.p0, + -0x1.fffffcp-127 + }, + { // Entry 245 + -0x1.p0, + -0x1.p0, + -0x1.p-126 + }, + { // Entry 246 + -0x1.p0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 247 + -0x1.p0, + -0x1.p0, + -0x1.fffffep127 + }, + { // Entry 248 + -0x1.p0, + -0x1.p0, + -HUGE_VALF + }, + { // Entry 249 + 0x1.000002p0, + -0x1.000002p0, + HUGE_VALF + }, + { // Entry 250 + 0x1.000002p0, + -0x1.000002p0, + 0x1.fffffep127 + }, + { // Entry 251 + 0x1.000002p0, + -0x1.000002p0, + 0x1.p-126 + }, + { // Entry 252 + 0x1.000002p0, + -0x1.000002p0, + 0x1.fffffcp-127 + }, + { // Entry 253 + 0x1.000002p0, + -0x1.000002p0, + 0x1.p-149 + }, + { // Entry 254 + 0x1.000002p0, + -0x1.000002p0, + 0.0f + }, + { // Entry 255 + -0x1.000002p0, + -0x1.000002p0, + -0.0f + }, + { // Entry 256 + -0x1.000002p0, + -0x1.000002p0, + -0x1.p-149 + }, + { // Entry 257 + -0x1.000002p0, + -0x1.000002p0, + -0x1.fffffcp-127 + }, + { // Entry 258 + -0x1.000002p0, + -0x1.000002p0, + -0x1.p-126 + }, + { // Entry 259 + -0x1.000002p0, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 260 + -0x1.000002p0, + -0x1.000002p0, + -0x1.fffffep127 + }, + { // Entry 261 + -0x1.000002p0, + -0x1.000002p0, + -HUGE_VALF + }, + { // Entry 262 + 0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 263 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 264 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 265 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 266 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 267 + 0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 268 + -0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 269 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 270 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 271 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 272 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p0 + }, + { // Entry 273 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 274 + -0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 275 + HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 276 + HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 277 + HUGE_VALF, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 278 + HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 279 + HUGE_VALF, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 280 + HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 281 + -HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 282 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 283 + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 284 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p0 + }, + { // Entry 286 + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 287 + -HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + } +}; diff --git a/tests/math_cos_intel_data.h b/tests/math_data/cos_intel_data.h similarity index 100% rename from tests/math_cos_intel_data.h rename to tests/math_data/cos_intel_data.h diff --git a/tests/math_cosf_intel_data.h b/tests/math_data/cosf_intel_data.h similarity index 100% rename from tests/math_cosf_intel_data.h rename to tests/math_data/cosf_intel_data.h diff --git a/tests/math_data/cosh_intel_data.h b/tests/math_data/cosh_intel_data.h new file mode 100644 index 000000000..2a8fe82a3 --- /dev/null +++ b/tests/math_data/cosh_intel_data.h @@ -0,0 +1,2934 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_cosh_intel_data[] = { + { // Entry 0 + 0x1.f9225f7e3193c80156e29378c34b23d3p831, + -0x1.20b0659d8a7e1p9 + }, + { // Entry 1 + 0x1.f9225f7e3193c80156e29378c34b23d3p831, + 0x1.20b0659d8a7e1p9 + }, + { // Entry 2 + 0x1.e128d3a99c4b28216511a7ad98d106f0p911, + -0x1.3c640p9 + }, + { // Entry 3 + 0x1.e128d3a99c4b28216511a7ad98d106f0p911, + 0x1.3c640p9 + }, + { // Entry 4 + 0x1.f5f62d444f24c3bee8aeb75a413b8101p941, + -0x1.46cf1a4e8eff8p9 + }, + { // Entry 5 + 0x1.f5f62d444f24c3bee8aeb75a413b8101p941, + 0x1.46cf1a4e8eff8p9 + }, + { // Entry 6 + 0x1.fd0d27f4cfe98801d15fa2d48e5a54c0p952, + -0x1.4aa0d96719fc6p9 + }, + { // Entry 7 + 0x1.fd0d27f4cfe98801d15fa2d48e5a54c0p952, + 0x1.4aa0d96719fc6p9 + }, + { // Entry 8 + 0x1.eb34f0a92ee7280128c114f07d355776p958, + -0x1.4cb09e65eb930p9 + }, + { // Entry 9 + 0x1.eb34f0a92ee7280128c114f07d355776p958, + 0x1.4cb09e65eb930p9 + }, + { // Entry 10 + 0x1.d2108e9aa1b124168960a67f1cb28b07p960, + -0x1.4d5b56d5b55acp9 + }, + { // Entry 11 + 0x1.d2108e9aa1b124168960a67f1cb28b07p960, + 0x1.4d5b56d5b55acp9 + }, + { // Entry 12 + 0x1.f68d7cf30e0123c2164c1368d213f9b5p970, + -0x1.50dc3739dde8ep9 + }, + { // Entry 13 + 0x1.f68d7cf30e0123c2164c1368d213f9b5p970, + 0x1.50dc3739dde8ep9 + }, + { // Entry 14 + 0x1.fd799430443f0800ef2fcf2cd9da9697p975, + -0x1.529994bb15795p9 + }, + { // Entry 15 + 0x1.fd799430443f0800ef2fcf2cd9da9697p975, + 0x1.529994bb15795p9 + }, + { // Entry 16 + 0x1.e7b36eb1f1e698017d905c91e25df616p1005, + -0x1.5cf9ace27d120p9 + }, + { // Entry 17 + 0x1.e7b36eb1f1e698017d905c91e25df616p1005, + 0x1.5cf9ace27d120p9 + }, + { // Entry 18 + 0x1.f3ae6e6ad6cf33f952b8d7d26abcd946p1013, + -0x1.5fc2907bbfb53p9 + }, + { // Entry 19 + 0x1.f3ae6e6ad6cf33f952b8d7d26abcd946p1013, + 0x1.5fc2907bbfb53p9 + }, + { // Entry 20 + 0x1.fffffffffeb2a1b0e263ac68076ed4e0p1022, + -0x1.62e42fefa39eap9 + }, + { // Entry 21 + 0x1.fffffffffeb2a1b0e263ac68076ed4e0p1022, + 0x1.62e42fefa39eap9 + }, + { // Entry 22 + 0x1.000004a24e558c02a9470bd8d4f869a3p0, + -0x1.85acfb6cf0992p-11 + }, + { // Entry 23 + 0x1.000004a24e558c02a9470bd8d4f869a3p0, + 0x1.85acfb6cf0992p-11 + }, + { // Entry 24 + 0x1.p0, + -0x1.9p-1069 + }, + { // Entry 25 + 0x1.p0, + 0x1.9p-1069 + }, + { // Entry 26 + 0x1.14c128b1a7c2b69f584c42e1f5d24e43p0, + -0x1.999999999999ap-2 + }, + { // Entry 27 + 0x1.14c128b1a7c2b69f584c42e1f5d24e43p0, + 0x1.999999999999ap-2 + }, + { // Entry 28 + 0x1.580485993cf5380007b6f3dfb3426795p1, + -0x1.a52f2fff26658p0 + }, + { // Entry 29 + 0x1.580485993cf5380007b6f3dfb3426795p1, + 0x1.a52f2fff26658p0 + }, + { // Entry 30 + 0x1.786cf5655ff2cf9f3e2f91013f3f8c31p9, + -0x1.d449f6b92fb70p2 + }, + { // Entry 31 + 0x1.786cf5655ff2cf9f3e2f91013f3f8c31p9, + 0x1.d449f6b92fb70p2 + }, + { // Entry 32 + 0x1.072f2f89ddc2f7a6dd2420f4fde2c244p0, + -0x1.e411ac17c616dp-3 + }, + { // Entry 33 + 0x1.072f2f89ddc2f7a6dd2420f4fde2c244p0, + 0x1.e411ac17c616dp-3 + }, + { // Entry 34 + 0x1.0000000000200000000000aaaaaaaaaap0, + 0x1.0p-21 + }, + { // Entry 35 + 0x1.0000000000200000000000aaaaaaaaaap0, + -0x1.0p-21 + }, + { // Entry 36 + 0x1.000000000000080000000000000aaaaap0, + 0x1.0p-26 + }, + { // Entry 37 + 0x1.000000000000080000000000000aaaaap0, + -0x1.0p-26 + }, + { // Entry 38 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + 0x1.0p7 + }, + { // Entry 39 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + -0x1.0p7 + }, + { // Entry 40 + 0x1.0000000000000000000020p0, + 0x1.0000000000001p-41 + }, + { // Entry 41 + 0x1.0000000000000000000020p0, + -0x1.0000000000001p-41 + }, + { // Entry 42 + 0x1.p0, + 0x1.0000000000001p-352 + }, + { // Entry 43 + 0x1.p0, + -0x1.0000000000001p-352 + }, + { // Entry 44 + 0x1.749eaa93f4e98ffecd44eae03d0a1d5bp10, + 0x1.0000000000003p3 + }, + { // Entry 45 + 0x1.749eaa93f4e98ffecd44eae03d0a1d5bp10, + -0x1.0000000000003p3 + }, + { // Entry 46 + 0x1.41c7a8814c78683cdbc165597ca61d23p368, + 0x1.0000000000007p8 + }, + { // Entry 47 + 0x1.41c7a8814c78683cdbc165597ca61d23p368, + -0x1.0000000000007p8 + }, + { // Entry 48 + 0x1.000000000000080000000000110aaaaap0, + 0x1.0000000000011p-26 + }, + { // Entry 49 + 0x1.000000000000080000000000110aaaaap0, + -0x1.0000000000011p-26 + }, + { // Entry 50 + 0x1.8b07551d9f67f7fdc0ff67bf92a962fdp0, + 0x1.0000000000102p0 + }, + { // Entry 51 + 0x1.8b07551d9f67f7fdc0ff67bf92a962fdp0, + -0x1.0000000000102p0 + }, + { // Entry 52 + 0x1.1f43fcc5952c37ff0506eaa1b0c216eep45, + 0x1.0000000006345p5 + }, + { // Entry 53 + 0x1.1f43fcc5952c37ff0506eaa1b0c216eep45, + -0x1.0000000006345p5 + }, + { // Entry 54 + 0x1.94dbdfbb66bc651ee76572119d9c1c4cp737, + 0x1.0000202p9 + }, + { // Entry 55 + 0x1.94dbdfbb66bc651ee76572119d9c1c4cp737, + -0x1.0000202p9 + }, + { // Entry 56 + 0x1.203fc65a034d07ffda891f0ce56a69b6p45, + 0x1.00070p5 + }, + { // Entry 57 + 0x1.203fc65a034d07ffda891f0ce56a69b6p45, + -0x1.00070p5 + }, + { // Entry 58 + 0x1.000000000000080100080000000aad55p0, + 0x1.001p-26 + }, + { // Entry 59 + 0x1.000000000000080100080000000aad55p0, + -0x1.001p-26 + }, + { // Entry 60 + 0x1.75e54432c8551fabeec3248201e6c2ccp10, + 0x1.001c0p3 + }, + { // Entry 61 + 0x1.75e54432c8551fabeec3248201e6c2ccp10, + -0x1.001c0p3 + }, + { // Entry 62 + 0x1.e708d6f7a319258034ee3b204d26ca92p1, + 0x1.018p1 + }, + { // Entry 63 + 0x1.e708d6f7a319258034ee3b204d26ca92p1, + -0x1.018p1 + }, + { // Entry 64 + 0x1.0000216287cecc0d0dc2c5304f513db1p0, + 0x1.057b17480eb6bp-9 + }, + { // Entry 65 + 0x1.0000216287cecc0d0dc2c5304f513db1p0, + -0x1.057b17480eb6bp-9 + }, + { // Entry 66 + 0x1.000008637bdd480001e95efd80447405p0, + 0x1.0624dd41d1d06p-10 + }, + { // Entry 67 + 0x1.000008637bdd480001e95efd80447405p0, + -0x1.0624dd41d1d06p-10 + }, + { // Entry 68 + 0x1.fe87c460adc0882fbe85314df418d2b4p1, + 0x1.07bd69f72017dp1 + }, + { // Entry 69 + 0x1.fe87c460adc0882fbe85314df418d2b4p1, + -0x1.07bd69f72017dp1 + }, + { // Entry 70 + 0x1.0000000000220800000000c10560p0, + 0x1.080p-21 + }, + { // Entry 71 + 0x1.0000000000220800000000c10560p0, + -0x1.080p-21 + }, + { // Entry 72 + 0x1.f39a59f250416803923a1c1e1528d74dp10, + 0x1.0962589625894p3 + }, + { // Entry 73 + 0x1.f39a59f250416803923a1c1e1528d74dp10, + -0x1.0962589625894p3 + }, + { // Entry 74 + 0x1.09c4fe008ebbf7feff9c55742944c979p47, + 0x1.0a77d78f63c77p5 + }, + { // Entry 75 + 0x1.09c4fe008ebbf7feff9c55742944c979p47, + -0x1.0a77d78f63c77p5 + }, + { // Entry 76 + 0x1.250e830d17c53ffff0f0a7b37c3274aep0, + 0x1.1044110441104p-1 + }, + { // Entry 77 + 0x1.250e830d17c53ffff0f0a7b37c3274aep0, + -0x1.1044110441104p-1 + }, + { // Entry 78 + 0x1.0000024ff524ec0206bcebcbcb8fd2d8p0, + 0x1.1343b94c10b91p-11 + }, + { // Entry 79 + 0x1.0000024ff524ec0206bcebcbcb8fd2d8p0, + -0x1.1343b94c10b91p-11 + }, + { // Entry 80 + 0x1.a4e4693413b9970755c15633af25f96bp399, + 0x1.15c18de877563p8 + }, + { // Entry 81 + 0x1.a4e4693413b9970755c15633af25f96bp399, + -0x1.15c18de877563p8 + }, + { // Entry 82 + 0x1.a7b0a63b771487fe7ea3e4c4c6a5986cp0, + 0x1.170p0 + }, + { // Entry 83 + 0x1.a7b0a63b771487fe7ea3e4c4c6a5986cp0, + -0x1.170p0 + }, + { // Entry 84 + 0x1.2040f2a1ab52f6519acd0a68e44e2672p2, + 0x1.17cp1 + }, + { // Entry 85 + 0x1.2040f2a1ab52f6519acd0a68e44e2672p2, + -0x1.17cp1 + }, + { // Entry 86 + 0x1.ffffffffffff691afdbf851f5ebecf8fp24, + 0x1.205966f2b4f12p4 + }, + { // Entry 87 + 0x1.ffffffffffff691afdbf851f5ebecf8fp24, + -0x1.205966f2b4f12p4 + }, + { // Entry 88 + 0x1.79842c1bcf0097ff7fb2dd182713e67ap207, + 0x1.2120481204831p7 + }, + { // Entry 89 + 0x1.79842c1bcf0097ff7fb2dd182713e67ap207, + -0x1.2120481204831p7 + }, + { // Entry 90 + 0x1.29fbb84ba8876b368d8a9db5c1e1454dp0, + 0x1.215c31dfb06bep-1 + }, + { // Entry 91 + 0x1.29fbb84ba8876b368d8a9db5c1e1454dp0, + -0x1.215c31dfb06bep-1 + }, + { // Entry 92 + 0x1.eaa521edf1bc28014602191ce618c05fp845, + 0x1.2586ca9cf411bp9 + }, + { // Entry 93 + 0x1.eaa521edf1bc28014602191ce618c05fp845, + -0x1.2586ca9cf411bp9 + }, + { // Entry 94 + 0x1.6a09e667f3b873e3fe3a64632e382c20p25, + 0x1.25e4f7b2737f7p4 + }, + { // Entry 95 + 0x1.6a09e667f3b873e3fe3a64632e382c20p25, + -0x1.25e4f7b2737f7p4 + }, + { // Entry 96 + 0x1.57261d902201780090571fb5bf70f618p12, + 0x1.29b98d2ca77bfp3 + }, + { // Entry 97 + 0x1.57261d902201780090571fb5bf70f618p12, + -0x1.29b98d2ca77bfp3 + }, + { // Entry 98 + 0x1.bfa86b3a08ba080003331b84fa809b78p5, + 0x1.2dee0f9476ef0p2 + }, + { // Entry 99 + 0x1.bfa86b3a08ba080003331b84fa809b78p5, + -0x1.2dee0f9476ef0p2 + }, + { // Entry 100 + 0x1.ca2d30aee8c837f93c016463c234beb0p0, + 0x1.2fap0 + }, + { // Entry 101 + 0x1.ca2d30aee8c837f93c016463c234beb0p0, + -0x1.2fap0 + }, + { // Entry 102 + 0x1.dc851a55686d48012add3c02a54cc4d9p875, + 0x1.2fe8bcd183299p9 + }, + { // Entry 103 + 0x1.dc851a55686d48012add3c02a54cc4d9p875, + -0x1.2fe8bcd183299p9 + }, + { // Entry 104 + 0x1.ff12f7296b0408017eaaf48fbf280399p877, + 0x1.30a324d6033b5p9 + }, + { // Entry 105 + 0x1.ff12f7296b0408017eaaf48fbf280399p877, + -0x1.30a324d6033b5p9 + }, + { // Entry 106 + 0x1.0000b839f863b3e4bcae71b55072ca80p0, + 0x1.331f2adbaf98dp-8 + }, + { // Entry 107 + 0x1.0000b839f863b3e4bcae71b55072ca80p0, + -0x1.331f2adbaf98dp-8 + }, + { // Entry 108 + 0x1.f3a98884eba4bc32647b7ac3c5404f85p26, + 0x1.3623c0c9e9d5ap4 + }, + { // Entry 109 + 0x1.f3a98884eba4bc32647b7ac3c5404f85p26, + -0x1.3623c0c9e9d5ap4 + }, + { // Entry 110 + 0x1.75a07cfb107ca6ba9dba1e2c2cedd659p453, + 0x1.3b11206005429p8 + }, + { // Entry 111 + 0x1.75a07cfb107ca6ba9dba1e2c2cedd659p453, + -0x1.3b11206005429p8 + }, + { // Entry 112 + 0x1.f1ef9c8a4fdae801b19f8e42eff2c4a8p929, + 0x1.42a565e456e04p9 + }, + { // Entry 113 + 0x1.f1ef9c8a4fdae801b19f8e42eff2c4a8p929, + -0x1.42a565e456e04p9 + }, + { // Entry 114 + 0x1.f4ec44194b642801a4afd4c50633e8aap937, + 0x1.456bf23e02428p9 + }, + { // Entry 115 + 0x1.f4ec44194b642801a4afd4c50633e8aap937, + -0x1.456bf23e02428p9 + }, + { // Entry 116 + 0x1.ea91d9533b394801bf3d3ec8f88de568p938, + 0x1.45c1feef8086cp9 + }, + { // Entry 117 + 0x1.ea91d9533b394801bf3d3ec8f88de568p938, + -0x1.45c1feef8086cp9 + }, + { // Entry 118 + 0x1.4dbe273792bde7fc45ff4f687bf81f94p6, + 0x1.478p2 + }, + { // Entry 119 + 0x1.4dbe273792bde7fc45ff4f687bf81f94p6, + -0x1.478p2 + }, + { // Entry 120 + 0x1.a1732beffb81e80f059be59df088e0dcp2, + 0x1.480p1 + }, + { // Entry 121 + 0x1.a1732beffb81e80f059be59df088e0dcp2, + -0x1.480p1 + }, + { // Entry 122 + 0x1.f292b709c70c9039aec2c978d1d7e73ep0, + 0x1.494p0 + }, + { // Entry 123 + 0x1.f292b709c70c9039aec2c978d1d7e73ep0, + -0x1.494p0 + }, + { // Entry 124 + 0x1.a6c83c0fd645320793a014725c3d6e2dp2, + 0x1.49a4d26934980p1 + }, + { // Entry 125 + 0x1.a6c83c0fd645320793a014725c3d6e2dp2, + -0x1.49a4d26934980p1 + }, + { // Entry 126 + 0x1.14ff8ce7eedcf7ff00c85c22990fd0fep951, + 0x1.49fa3bc9fa3bcp9 + }, + { // Entry 127 + 0x1.14ff8ce7eedcf7ff00c85c22990fd0fep951, + -0x1.49fa3bc9fa3bcp9 + }, + { // Entry 128 + 0x1.f6c6651de70d704c55837250811c86ddp0, + 0x1.4bcp0 + }, + { // Entry 129 + 0x1.f6c6651de70d704c55837250811c86ddp0, + -0x1.4bcp0 + }, + { // Entry 130 + 0x1.c18c56303fe66fff9d9b8c47655f12c0p2, + 0x1.51965d2b59826p1 + }, + { // Entry 131 + 0x1.c18c56303fe66fff9d9b8c47655f12c0p2, + -0x1.51965d2b59826p1 + }, + { // Entry 132 + 0x1.eeac3d912b1ce80100df042cfb33c06ep59, + 0x1.51fafb7826f27p5 + }, + { // Entry 133 + 0x1.eeac3d912b1ce80100df042cfb33c06ep59, + -0x1.51fafb7826f27p5 + }, + { // Entry 134 + 0x1.9548e9688fb2e800c466e7d893328f68p991, + 0x1.5807dc787a5d5p9 + }, + { // Entry 135 + 0x1.9548e9688fb2e800c466e7d893328f68p991, + -0x1.5807dc787a5d5p9 + }, + { // Entry 136 + 0x1.000003a93be72bffaeb829ad23f9901bp0, + 0x1.5a5c6af3cbf35p-11 + }, + { // Entry 137 + 0x1.000003a93be72bffaeb829ad23f9901bp0, + -0x1.5a5c6af3cbf35p-11 + }, + { // Entry 138 + 0x1.8d35b12c48404800034bee73c998316fp14, + 0x1.5ac4908a754c1p3 + }, + { // Entry 139 + 0x1.8d35b12c48404800034bee73c998316fp14, + -0x1.5ac4908a754c1p3 + }, + { // Entry 140 + 0x1.f2a3c29fc6d723a63e349bbcd7894a8ap1007, + 0x1.5dadf5d1e452cp9 + }, + { // Entry 141 + 0x1.f2a3c29fc6d723a63e349bbcd7894a8ap1007, + -0x1.5dadf5d1e452cp9 + }, + { // Entry 142 + 0x1.edcb14879613e80176087c1a76dec97cp1008, + 0x1.5e056ed40e56ep9 + }, + { // Entry 143 + 0x1.edcb14879613e80176087c1a76dec97cp1008, + -0x1.5e056ed40e56ep9 + }, + { // Entry 144 + 0x1.96faa872a06aa3003f5158de9c570302p1023, + 0x1.631f86ac0611bp9 + }, + { // Entry 145 + 0x1.96faa872a06aa3003f5158de9c570302p1023, + -0x1.631f86ac0611bp9 + }, + { // Entry 146 + 0x1.bf668fc6f4f9d31f753c408261bb02b4p1023, + 0x1.632ba58eae071p9 + }, + { // Entry 147 + 0x1.bf668fc6f4f9d31f753c408261bb02b4p1023, + -0x1.632ba58eae071p9 + }, + { // Entry 148 + 0x1.ffffffffbcd3ae595303e74abb3fd75dp1023, + 0x1.633ce8fb9f771p9 + }, + { // Entry 149 + 0x1.ffffffffbcd3ae595303e74abb3fd75dp1023, + -0x1.633ce8fb9f771p9 + }, + { // Entry 150 + 0x1.fffffffff093ae594ed7508a02429436p1023, + 0x1.633ce8fb9f840p9 + }, + { // Entry 151 + 0x1.fffffffff093ae594ed7508a02429436p1023, + -0x1.633ce8fb9f840p9 + }, + { // Entry 152 + 0x1.fffffffff713ae594eafc080a48289f9p1023, + 0x1.633ce8fb9f85ap9 + }, + { // Entry 153 + 0x1.fffffffff713ae594eafc080a48289f9p1023, + -0x1.633ce8fb9f85ap9 + }, + { // Entry 154 + 0x1.1350a413023bfffffe14156b2ad2a0aap1, + 0x1.6666666678dc9p0 + }, + { // Entry 155 + 0x1.1350a413023bfffffe14156b2ad2a0aap1, + -0x1.6666666678dc9p0 + }, + { // Entry 156 + 0x1.4152c1863ba8280001cbf788e6aa237cp0, + 0x1.66666666a6b7ep-1 + }, + { // Entry 157 + 0x1.4152c1863ba8280001cbf788e6aa237cp0, + -0x1.66666666a6b7ep-1 + }, + { // Entry 158 + 0x1.ffffd47fb735b800740691174c7f5813p31, + 0x1.6dfb50131e66dp4 + }, + { // Entry 159 + 0x1.ffffd47fb735b800740691174c7f5813p31, + -0x1.6dfb50131e66dp4 + }, + { // Entry 160 + 0x1.23aaacaf304fbfffff85f2e03f117872p3, + 0x1.733333335c84ap1 + }, + { // Entry 161 + 0x1.23aaacaf304fbfffff85f2e03f117872p3, + -0x1.733333335c84ap1 + }, + { // Entry 162 + 0x1.000000000047f4008000035ee023fep0, + 0x1.7fep-21 + }, + { // Entry 163 + 0x1.000000000047f4008000035ee023fep0, + -0x1.7fep-21 + }, + { // Entry 164 + 0x1.f0e3e5b6c17c02a799c306dbc1b1a8ecp555, + 0x1.820d92fc4b42ap8 + }, + { // Entry 165 + 0x1.f0e3e5b6c17c02a799c306dbc1b1a8ecp555, + -0x1.820d92fc4b42ap8 + }, + { // Entry 166 + 0x1.9d55555ab98f4817a9f90acefca23523p140, + 0x1.88d9eff243ec8p6 + }, + { // Entry 167 + 0x1.9d55555ab98f4817a9f90acefca23523p140, + -0x1.88d9eff243ec8p6 + }, + { // Entry 168 + 0x1.04c5f3d75091e8012559fb87285a99dep0, + 0x1.8aep-3 + }, + { // Entry 169 + 0x1.04c5f3d75091e8012559fb87285a99dep0, + -0x1.8aep-3 + }, + { // Entry 170 + 0x1.50a125ad300e5802736ad2f68de9efdap0, + 0x1.8c6318c6318c4p-1 + }, + { // Entry 171 + 0x1.50a125ad300e5802736ad2f68de9efdap0, + -0x1.8c6318c6318c4p-1 + }, + { // Entry 172 + 0x1.a2cc09e2e7dd780005c588bf2ebd2d28p35, + 0x1.9720cc66f1cbbp4 + }, + { // Entry 173 + 0x1.a2cc09e2e7dd780005c588bf2ebd2d28p35, + -0x1.9720cc66f1cbbp4 + }, + { // Entry 174 + 0x1.49ea5b155646500001cb3c7a14d4f641p1, + 0x1.99999999b8db8p0 + }, + { // Entry 175 + 0x1.49ea5b155646500001cb3c7a14d4f641p1, + -0x1.99999999b8db8p0 + }, + { // Entry 176 + 0x1.0147f40224ea77fffe35f63e0620c28ep0, + 0x1.99999999bbe1bp-4 + }, + { // Entry 177 + 0x1.0147f40224ea77fffe35f63e0620c28ep0, + -0x1.99999999bbe1bp-4 + }, + { // Entry 178 + 0x1.0523184b26181ffffe5ad5f60af39607p0, + 0x1.9999999ab6eebp-3 + }, + { // Entry 179 + 0x1.0523184b26181ffffe5ad5f60af39607p0, + -0x1.9999999ab6eebp-3 + }, + { // Entry 180 + 0x1.0147f4022697680001b3e13f009af80bp0, + 0x1.9999999ac7857p-4 + }, + { // Entry 181 + 0x1.0147f4022697680001b3e13f009af80bp0, + -0x1.9999999ac7857p-4 + }, + { // Entry 182 + 0x1.0523184b290290000199de7723bc799dp0, + 0x1.9999999b2aca1p-3 + }, + { // Entry 183 + 0x1.0523184b290290000199de7723bc799dp0, + -0x1.9999999b2aca1p-3 + }, + { // Entry 184 + 0x1.0147f402280ed80001d59eeac36ba73dp0, + 0x1.9999999bb1c77p-4 + }, + { // Entry 185 + 0x1.0147f402280ed80001d59eeac36ba73dp0, + -0x1.9999999bb1c77p-4 + }, + { // Entry 186 + 0x1.ffffffffffed457a42e161456cf862b2p590, + 0x1.9a57d76d152fcp8 + }, + { // Entry 187 + 0x1.ffffffffffed457a42e161456cf862b2p590, + -0x1.9a57d76d152fcp8 + }, + { // Entry 188 + 0x1.6375401c4fbbf8003386ea381d3fe669p0, + 0x1.b5daed76bb580p-1 + }, + { // Entry 189 + 0x1.6375401c4fbbf8003386ea381d3fe669p0, + -0x1.b5daed76bb580p-1 + }, + { // Entry 190 + 0x1.f30605e8b5451805101b3ea033bab41cp8, + 0x1.b9f89e22629b5p2 + }, + { // Entry 191 + 0x1.f30605e8b5451805101b3ea033bab41cp8, + -0x1.b9f89e22629b5p2 + }, + { // Entry 192 + 0x1.f309ebf823d108054159f278e16ad109p8, + 0x1.b9f91e22629b5p2 + }, + { // Entry 193 + 0x1.f309ebf823d108054159f278e16ad109p8, + -0x1.b9f91e22629b5p2 + }, + { // Entry 194 + 0x1.185c2bf1d5276fffd73fd51a307743a4p0, + 0x1.bb4p-2 + }, + { // Entry 195 + 0x1.185c2bf1d5276fffd73fd51a307743a4p0, + -0x1.bb4p-2 + }, + { // Entry 196 + 0x1.0005ffd0c797f7ff1970be180784a55cp0, + 0x1.bb6p-7 + }, + { // Entry 197 + 0x1.0005ffd0c797f7ff1970be180784a55cp0, + -0x1.bb6p-7 + }, + { // Entry 198 + 0x1.968ef6ceade7f60edc2b4f0265da6ba4p640, + 0x1.bcc517b553c93p8 + }, + { // Entry 199 + 0x1.968ef6ceade7f60edc2b4f0265da6ba4p640, + -0x1.bcc517b553c93p8 + }, + { // Entry 200 + 0x1.7b972e453783930f202a8aa455bb6c01p1, + 0x1.c02p0 + }, + { // Entry 201 + 0x1.7b972e453783930f202a8aa455bb6c01p1, + -0x1.c02p0 + }, + { // Entry 202 + 0x1.7eec19d4dcbc738baa1a1114dee049b8p1, + 0x1.c28p0 + }, + { // Entry 203 + 0x1.7eec19d4dcbc738baa1a1114dee049b8p1, + -0x1.c28p0 + }, + { // Entry 204 + 0x1.0656561cbe53c7fffdb60e1b054d8f16p0, + 0x1.c6c2e93467e80p-3 + }, + { // Entry 205 + 0x1.0656561cbe53c7fffdb60e1b054d8f16p0, + -0x1.c6c2e93467e80p-3 + }, + { // Entry 206 + 0x1.06a2b3e7b603e800c2f4167761b30bf8p0, + 0x1.d14bf83b48ec3p-3 + }, + { // Entry 207 + 0x1.06a2b3e7b603e800c2f4167761b30bf8p0, + -0x1.d14bf83b48ec3p-3 + }, + { // Entry 208 + 0x1.fb4d9de0ad845677ec6fc467c2ca9f9ap19, + 0x1.d18p3 + }, + { // Entry 209 + 0x1.fb4d9de0ad845677ec6fc467c2ca9f9ap19, + -0x1.d18p3 + }, + { // Entry 210 + 0x1.73a6cd8f2f6d681e70f9695a25f39c35p0, + 0x1.d60p-1 + }, + { // Entry 211 + 0x1.73a6cd8f2f6d681e70f9695a25f39c35p0, + -0x1.d60p-1 + }, + { // Entry 212 + 0x1.9fb7158a225e000047f44f47edad0545p1, + 0x1.d8b5f14439f87p0 + }, + { // Entry 213 + 0x1.9fb7158a225e000047f44f47edad0545p1, + -0x1.d8b5f14439f87p0 + }, + { // Entry 214 + 0x1.ea40b4c3630d1000615de8737ec4857cp9, + 0x1.e532a134b958cp2 + }, + { // Entry 215 + 0x1.ea40b4c3630d1000615de8737ec4857cp9, + -0x1.e532a134b958cp2 + }, + { // Entry 216 + 0x1.dbca9263f840fca48450e408fa36b56bp177, + 0x1.effffffffffffp6 + }, + { // Entry 217 + 0x1.dbca9263f840fca48450e408fa36b56bp177, + -0x1.effffffffffffp6 + }, + { // Entry 218 + 0x1.01e4fad3b993aa1a52d036790b34e1cep0, + 0x1.f1fffffffffffp-4 + }, + { // Entry 219 + 0x1.01e4fad3b993aa1a52d036790b34e1cep0, + -0x1.f1fffffffffffp-4 + }, + { // Entry 220 + 0x1.07a6bb7edb5de8000669b121a48f81e9p0, + 0x1.f37a7a76cbc72p-3 + }, + { // Entry 221 + 0x1.07a6bb7edb5de8000669b121a48f81e9p0, + -0x1.f37a7a76cbc72p-3 + }, + { // Entry 222 + 0x1.d1ee8e62b2098fff7b22532973b4ccp1, + 0x1.f73a29b8fcc22p0 + }, + { // Entry 223 + 0x1.d1ee8e62b2098fff7b22532973b4ccp1, + -0x1.f73a29b8fcc22p0 + }, + { // Entry 224 + 0x1.f617a27e250ce1b06488e5167c0849a8p90, + 0x1.fdfffffffffffp5 + }, + { // Entry 225 + 0x1.f617a27e250ce1b06488e5167c0849a8p90, + -0x1.fdfffffffffffp5 + }, + { // Entry 226 + 0x1.000000000007f4018180a8332feed269p0, + 0x1.fe7f9fe7f9fc1p-23 + }, + { // Entry 227 + 0x1.000000000007f4018180a8332feed269p0, + -0x1.fe7f9fe7f9fc1p-23 + }, + { // Entry 228 + 0x1.000007f7824c94120eb9c3be21444195p0, + 0x1.feeffffffffffp-11 + }, + { // Entry 229 + 0x1.000007f7824c94120eb9c3be21444195p0, + -0x1.feeffffffffffp-11 + }, + { // Entry 230 + 0x1.dfa36f8e6bf72fa8a934ef27b5231b54p1, + 0x1.feeffffffffffp0 + }, + { // Entry 231 + 0x1.dfa36f8e6bf72fa8a934ef27b5231b54p1, + -0x1.feeffffffffffp0 + }, + { // Entry 232 + 0x1.08086ec43bf6287590f3692c2b8d555dp0, + 0x1.ffb886fe444c0p-3 + }, + { // Entry 233 + 0x1.08086ec43bf6287590f3692c2b8d555dp0, + -0x1.ffb886fe444c0p-3 + }, + { // Entry 234 + 0x1.080972995a2b573ac07666762f1a0b72p0, + 0x1.ffd8af33686dbp-3 + }, + { // Entry 235 + 0x1.080972995a2b573ac07666762f1a0b72p0, + -0x1.ffd8af33686dbp-3 + }, + { // Entry 236 + 0x1.6d4fd9ab47c9200073aa8127a2419ac8p737, + 0x1.ffe5effffffffp8 + }, + { // Entry 237 + 0x1.6d4fd9ab47c9200073aa8127a2419ac8p737, + -0x1.ffe5effffffffp8 + }, + { // Entry 238 + 0x1.74418e8eaca63c82e25a9f7d06548e5dp10, + 0x1.ffeffffffffffp2 + }, + { // Entry 239 + 0x1.74418e8eaca63c82e25a9f7d06548e5dp10, + -0x1.ffeffffffffffp2 + }, + { // Entry 240 + 0x1.080a3deb46ec08a56cbd7f1bde2759b0p0, + 0x1.fff1d77ffffffp-3 + }, + { // Entry 241 + 0x1.080a3deb46ec08a56cbd7f1bde2759b0p0, + -0x1.fff1d77ffffffp-3 + }, + { // Entry 242 + 0x1.941a855acbf7a7ffc58b32660a23ba32p737, + 0x1.ffffc5dffffffp8 + }, + { // Entry 243 + 0x1.941a855acbf7a7ffc58b32660a23ba32p737, + -0x1.ffffc5dffffffp8 + }, + { // Entry 244 + 0x1.95e4816b60a8d769724b586e4deb3b1bp183, + 0x1.fffffdfffffffp6 + }, + { // Entry 245 + 0x1.95e4816b60a8d769724b586e4deb3b1bp183, + -0x1.fffffdfffffffp6 + }, + { // Entry 246 + 0x1.080ab0589b61286b6d41402698d5bfeep0, + 0x1.ffffff7ffffffp-3 + }, + { // Entry 247 + 0x1.080ab0589b61286b6d41402698d5bfeep0, + -0x1.ffffff7ffffffp-3 + }, + { // Entry 248 + 0x1.20ac18541756f8007b9a2f43dab0cc9cp0, + 0x1.ffffff8ffffffp-2 + }, + { // Entry 249 + 0x1.20ac18541756f8007b9a2f43dab0cc9cp0, + -0x1.ffffff8ffffffp-2 + }, + { // Entry 250 + 0x1.e18fa0deb98c68008c19676612286a2dp1, + 0x1.ffffffffbffffp0 + }, + { // Entry 251 + 0x1.e18fa0deb98c68008c19676612286a2dp1, + -0x1.ffffffffbffffp0 + }, + { // Entry 252 + 0x1.p0, + 0x1.fffffffff7fffp-352 + }, + { // Entry 253 + 0x1.p0, + -0x1.fffffffff7fffp-352 + }, + { // Entry 254 + 0x1.0f2ebd0a7fc177f6fa2a0a4e6bb2f696p22, + 0x1.fffffffffff7fp3 + }, + { // Entry 255 + 0x1.0f2ebd0a7fc177f6fa2a0a4e6bb2f696p22, + -0x1.fffffffffff7fp3 + }, + { // Entry 256 + 0x1.e18fa0df2d99b84e92f43b9b47f7341ep1, + 0x1.fffffffffffeep0 + }, + { // Entry 257 + 0x1.e18fa0df2d99b84e92f43b9b47f7341ep1, + -0x1.fffffffffffeep0 + }, + { // Entry 258 + 0x1.b4ee858de3e5a800f659793765248fb4p4, + 0x1.ffffffffffff5p1 + }, + { // Entry 259 + 0x1.b4ee858de3e5a800f659793765248fb4p4, + -0x1.ffffffffffff5p1 + }, + { // Entry 260 + 0x1.p0, + 0x1.ffffffffffffdp-200 + }, + { // Entry 261 + 0x1.p0, + -0x1.ffffffffffffdp-200 + }, + { // Entry 262 + 0x1.0000000000001ffffffffffffcaaaaaap0, + 0x1.ffffffffffffep-26 + }, + { // Entry 263 + 0x1.0000000000001ffffffffffffcaaaaaap0, + -0x1.ffffffffffffep-26 + }, + { // Entry 264 + 0x1.00000000000007ffffffffffff0aaaaap0, + 0x1.ffffffffffffep-27 + }, + { // Entry 265 + 0x1.00000000000007ffffffffffff0aaaaap0, + -0x1.ffffffffffffep-27 + }, + { // Entry 266 + 0x1.9476504ba82057f69310608c30e76cebp737, + 0x1.ffffffffffffep8 + }, + { // Entry 267 + 0x1.9476504ba82057f69310608c30e76cebp737, + -0x1.ffffffffffffep8 + }, + { // Entry 268 + 0x1.p0, + 0.0 + }, + { // Entry 269 + 0x1.00a7413869e0bc675ef8f8059bcc3722p0, + 0x1.2492492492492p-4 + }, + { // Entry 270 + 0x1.00a7413869e0bc675ef8f8059bcc3722p0, + -0x1.2492492492492p-4 + }, + { // Entry 271 + 0x1.029ddf6df7f29c6e5531c853aa7ef551p0, + 0x1.2492492492492p-3 + }, + { // Entry 272 + 0x1.029ddf6df7f29c6e5531c853aa7ef551p0, + -0x1.2492492492492p-3 + }, + { // Entry 273 + 0x1.05e66b632df1253b01df69be9ece44e3p0, + 0x1.b6db6db6db6dbp-3 + }, + { // Entry 274 + 0x1.05e66b632df1253b01df69be9ece44e3p0, + -0x1.b6db6db6db6dbp-3 + }, + { // Entry 275 + 0x1.0a852f6aef4fd03008a8aa0554865518p0, + 0x1.2492492492492p-2 + }, + { // Entry 276 + 0x1.0a852f6aef4fd03008a8aa0554865518p0, + -0x1.2492492492492p-2 + }, + { // Entry 277 + 0x1.10803503a700f31eb1d4ed9defcba588p0, + 0x1.6db6db6db6db6p-2 + }, + { // Entry 278 + 0x1.10803503a700f31eb1d4ed9defcba588p0, + -0x1.6db6db6db6db6p-2 + }, + { // Entry 279 + 0x1.17df4cbabde0a25651179bc95d273b63p0, + 0x1.b6db6db6db6dap-2 + }, + { // Entry 280 + 0x1.17df4cbabde0a25651179bc95d273b63p0, + -0x1.b6db6db6db6dap-2 + }, + { // Entry 281 + 0x1.20ac1862ae8d021a4e365577227270b1p0, + 0x1.ffffffffffffep-2 + }, + { // Entry 282 + 0x1.20ac1862ae8d021a4e365577227270b1p0, + -0x1.ffffffffffffep-2 + }, + { // Entry 283 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + 0x1.0p-1 + }, + { // Entry 284 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + -0x1.0p-1 + }, + { // Entry 285 + 0x1.2af217a90e6dec39004f56495cd43505p0, + 0x1.2492492492492p-1 + }, + { // Entry 286 + 0x1.2af217a90e6dec39004f56495cd43505p0, + -0x1.2492492492492p-1 + }, + { // Entry 287 + 0x1.36beb71cfe154fa26b865cb1a3cb8a5fp0, + 0x1.4924924924924p-1 + }, + { // Entry 288 + 0x1.36beb71cfe154fa26b865cb1a3cb8a5fp0, + -0x1.4924924924924p-1 + }, + { // Entry 289 + 0x1.442161b9a30711902871e6d507913362p0, + 0x1.6db6db6db6db6p-1 + }, + { // Entry 290 + 0x1.442161b9a30711902871e6d507913362p0, + -0x1.6db6db6db6db6p-1 + }, + { // Entry 291 + 0x1.532b950b9683060720f579e323e93474p0, + 0x1.9249249249248p-1 + }, + { // Entry 292 + 0x1.532b950b9683060720f579e323e93474p0, + -0x1.9249249249248p-1 + }, + { // Entry 293 + 0x1.63f0f80b9c6bb0519d8eae2c3ccbbd98p0, + 0x1.b6db6db6db6dap-1 + }, + { // Entry 294 + 0x1.63f0f80b9c6bb0519d8eae2c3ccbbd98p0, + -0x1.b6db6db6db6dap-1 + }, + { // Entry 295 + 0x1.768774cc7f49764e7589347e3613d36bp0, + 0x1.db6db6db6db6cp-1 + }, + { // Entry 296 + 0x1.768774cc7f49764e7589347e3613d36bp0, + -0x1.db6db6db6db6cp-1 + }, + { // Entry 297 + 0x1.8b07551d9f54f1f51d63c148150ff9f0p0, + 0x1.ffffffffffffep-1 + }, + { // Entry 298 + 0x1.8b07551d9f54f1f51d63c148150ff9f0p0, + -0x1.ffffffffffffep-1 + }, + { // Entry 299 + 0x1.p0, + 0.0 + }, + { // Entry 300 + 0x1.0009a148b0e06dc3d0614c40dd1468d6p0, + 0x1.18de5ab277f45p-6 + }, + { // Entry 301 + 0x1.0009a148b0e06dc3d0614c40dd1468d6p0, + -0x1.18de5ab277f45p-6 + }, + { // Entry 302 + 0x1.002685dc3cf39cdb36154a8c673f400bp0, + 0x1.18de5ab277f45p-5 + }, + { // Entry 303 + 0x1.002685dc3cf39cdb36154a8c673f400bp0, + -0x1.18de5ab277f45p-5 + }, + { // Entry 304 + 0x1.0056afe71e837cc56169a00a96535d60p0, + 0x1.a54d880bb3ee8p-5 + }, + { // Entry 305 + 0x1.0056afe71e837cc56169a00a96535d60p0, + -0x1.a54d880bb3ee8p-5 + }, + { // Entry 306 + 0x1.009a2308fa8fcdaddee63777dbb370e6p0, + 0x1.18de5ab277f45p-4 + }, + { // Entry 307 + 0x1.009a2308fa8fcdaddee63777dbb370e6p0, + -0x1.18de5ab277f45p-4 + }, + { // Entry 308 + 0x1.00f0e454e69896dbe7bfa42c490502bbp0, + 0x1.5f15f15f15f16p-4 + }, + { // Entry 309 + 0x1.00f0e454e69896dbe7bfa42c490502bbp0, + -0x1.5f15f15f15f16p-4 + }, + { // Entry 310 + 0x1.015afa51ca5a8c6a812cb74010fd2339p0, + 0x1.a54d880bb3ee7p-4 + }, + { // Entry 311 + 0x1.015afa51ca5a8c6a812cb74010fd2339p0, + -0x1.a54d880bb3ee7p-4 + }, + { // Entry 312 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 313 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 314 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 315 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 316 + 0x1.02068cf05597373684859565fe36babfp0, + 0x1.01767dce434aap-3 + }, + { // Entry 317 + 0x1.02068cf05597373684859565fe36babfp0, + -0x1.01767dce434aap-3 + }, + { // Entry 318 + 0x1.0236d50fb0daff9feea39dcae5219685p0, + 0x1.0d2a6c405d9f8p-3 + }, + { // Entry 319 + 0x1.0236d50fb0daff9feea39dcae5219685p0, + -0x1.0d2a6c405d9f8p-3 + }, + { // Entry 320 + 0x1.026945c041710aacb6e5b3c7fb2aa37ap0, + 0x1.18de5ab277f46p-3 + }, + { // Entry 321 + 0x1.026945c041710aacb6e5b3c7fb2aa37ap0, + -0x1.18de5ab277f46p-3 + }, + { // Entry 322 + 0x1.029ddf6df7f29d011dd86bfe01ec3683p0, + 0x1.2492492492494p-3 + }, + { // Entry 323 + 0x1.029ddf6df7f29d011dd86bfe01ec3683p0, + -0x1.2492492492494p-3 + }, + { // Entry 324 + 0x1.02d4a289645849faf12a95a92d2534d5p0, + 0x1.30463796ac9e2p-3 + }, + { // Entry 325 + 0x1.02d4a289645849faf12a95a92d2534d5p0, + -0x1.30463796ac9e2p-3 + }, + { // Entry 326 + 0x1.030d8f87b6ead4a0bc7464b33dbba3aap0, + 0x1.3bfa2608c6f30p-3 + }, + { // Entry 327 + 0x1.030d8f87b6ead4a0bc7464b33dbba3aap0, + -0x1.3bfa2608c6f30p-3 + }, + { // Entry 328 + 0x1.0348a6e2c13df5fb3d99c361a1bb9dcbp0, + 0x1.47ae147ae147bp-3 + }, + { // Entry 329 + 0x1.0348a6e2c13df5fb3d99c361a1bb9dcbp0, + -0x1.47ae147ae147bp-3 + }, + { // Entry 330 + 0x1.0348a6e2c13df5fb3d99c361a1bb9dcbp0, + 0x1.47ae147ae147bp-3 + }, + { // Entry 331 + 0x1.0348a6e2c13df5fb3d99c361a1bb9dcbp0, + -0x1.47ae147ae147bp-3 + }, + { // Entry 332 + 0x1.0a19d6de605abf08129cddde1636dd2ap0, + 0x1.1eb851eb851ecp-2 + }, + { // Entry 333 + 0x1.0a19d6de605abf08129cddde1636dd2ap0, + -0x1.1eb851eb851ecp-2 + }, + { // Entry 334 + 0x1.14c128b1a7c2b69f584c42e1f5d24e43p0, + 0x1.999999999999ap-2 + }, + { // Entry 335 + 0x1.14c128b1a7c2b69f584c42e1f5d24e43p0, + -0x1.999999999999ap-2 + }, + { // Entry 336 + 0x1.2365ee6c60d331135d0b3ad315833363p0, + 0x1.0a3d70a3d70a4p-1 + }, + { // Entry 337 + 0x1.2365ee6c60d331135d0b3ad315833363p0, + -0x1.0a3d70a3d70a4p-1 + }, + { // Entry 338 + 0x1.363e341f66160527d93c30b63d619a60p0, + 0x1.47ae147ae147bp-1 + }, + { // Entry 339 + 0x1.363e341f66160527d93c30b63d619a60p0, + -0x1.47ae147ae147bp-1 + }, + { // Entry 340 + 0x1.4d8f87572582badd7439620bd7e9590bp0, + 0x1.851eb851eb852p-1 + }, + { // Entry 341 + 0x1.4d8f87572582badd7439620bd7e9590bp0, + -0x1.851eb851eb852p-1 + }, + { // Entry 342 + 0x1.69aff7d0ce135dcd1a6ec2e65d0a89dfp0, + 0x1.c28f5c28f5c29p-1 + }, + { // Entry 343 + 0x1.69aff7d0ce135dcd1a6ec2e65d0a89dfp0, + -0x1.c28f5c28f5c29p-1 + }, + { // Entry 344 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.0p0 + }, + { // Entry 345 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.0p0 + }, + { // Entry 346 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.0p0 + }, + { // Entry 347 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.0p0 + }, + { // Entry 348 + 0x1.c035cc3cf78edf8213cbad9479090d14p7, + 0x1.86bc88cbf1b67p2 + }, + { // Entry 349 + 0x1.c035cc3cf78edf8213cbad9479090d14p7, + -0x1.86bc88cbf1b67p2 + }, + { // Entry 350 + 0x1.20af6cbb4ba69598ec939d7de84f588dp15, + 0x1.66bc88cbf1b67p3 + }, + { // Entry 351 + 0x1.20af6cbb4ba69598ec939d7de84f588dp15, + -0x1.66bc88cbf1b67p3 + }, + { // Entry 352 + 0x1.73e096cf57b5505242fb8e3b8be68034p22, + 0x1.050d6698f548dp4 + }, + { // Entry 353 + 0x1.73e096cf57b5505242fb8e3b8be68034p22, + -0x1.050d6698f548dp4 + }, + { // Entry 354 + 0x1.df0b13a84513e2dfcb4b2dd0b765caf4p29, + 0x1.56bc88cbf1b67p4 + }, + { // Entry 355 + 0x1.df0b13a84513e2dfcb4b2dd0b765caf4p29, + -0x1.56bc88cbf1b67p4 + }, + { // Entry 356 + 0x1.348bc1e018bc593ce3145e9f4c06b22cp37, + 0x1.a86baafeee241p4 + }, + { // Entry 357 + 0x1.348bc1e018bc593ce3145e9f4c06b22cp37, + -0x1.a86baafeee241p4 + }, + { // Entry 358 + 0x1.8d761a3398942448ea796cb7e602a205p44, + 0x1.fa1acd31ea91bp4 + }, + { // Entry 359 + 0x1.8d761a3398942448ea796cb7e602a205p44, + -0x1.fa1acd31ea91bp4 + }, + { // Entry 360 + 0x1.ffffffffffff9ede67b7a30e671c79e2p51, + 0x1.25e4f7b2737fap5 + }, + { // Entry 361 + 0x1.ffffffffffff9ede67b7a30e671c79e2p51, + -0x1.25e4f7b2737fap5 + }, + { // Entry 362 + 0x1.00000000ffff654361c5613c8dcf8b38p15, + 0x1.62e42fefa39eep3 + }, + { // Entry 363 + 0x1.00000000ffff654361c5613c8dcf8b38p15, + -0x1.62e42fefa39eep3 + }, + { // Entry 364 + 0x1.00000000ffffe54361c4e13c60713c1ap15, + 0x1.62e42fefa39efp3 + }, + { // Entry 365 + 0x1.00000000ffffe54361c4e13c60713c1ap15, + -0x1.62e42fefa39efp3 + }, + { // Entry 366 + 0x1.000000010000654361c4613c7312ecfdp15, + 0x1.62e42fefa39f0p3 + }, + { // Entry 367 + 0x1.000000010000654361c4613c7312ecfdp15, + -0x1.62e42fefa39f0p3 + }, + { // Entry 368 + 0x1.0000ffffffffb2a1fe40b25d88d964f9p7, + 0x1.62e42fefa39eep2 + }, + { // Entry 369 + 0x1.0000ffffffffb2a1fe40b25d88d964f9p7, + -0x1.62e42fefa39eep2 + }, + { // Entry 370 + 0x1.0000fffffffff2a1be40b25d7d81c5dap7, + 0x1.62e42fefa39efp2 + }, + { // Entry 371 + 0x1.0000fffffffff2a1be40b25d7d81c5dap7, + -0x1.62e42fefa39efp2 + }, + { // Entry 372 + 0x1.00010000000032a17e40b25d822a36bbp7, + 0x1.62e42fefa39f0p2 + }, + { // Entry 373 + 0x1.00010000000032a17e40b25d822a36bbp7, + -0x1.62e42fefa39f0p2 + }, + { // Entry 374 + 0x1.00ffffffffffd9778798c06e53331924p3, + 0x1.62e42fefa39eep1 + }, + { // Entry 375 + 0x1.00ffffffffffd9778798c06e53331924p3, + -0x1.62e42fefa39eep1 + }, + { // Entry 376 + 0x1.00fffffffffff9578798c06e505a5e4dp3, + 0x1.62e42fefa39efp1 + }, + { // Entry 377 + 0x1.00fffffffffff9578798c06e505a5e4dp3, + -0x1.62e42fefa39efp1 + }, + { // Entry 378 + 0x1.01000000000019378798c06e5185a376p3, + 0x1.62e42fefa39f0p1 + }, + { // Entry 379 + 0x1.01000000000019378798c06e5185a376p3, + -0x1.62e42fefa39f0p1 + }, + { // Entry 380 + 0x1.0fffffffffffeddde5750f42f95f3159p1, + 0x1.62e42fefa39eep0 + }, + { // Entry 381 + 0x1.0fffffffffffeddde5750f42f95f3159p1, + -0x1.62e42fefa39eep0 + }, + { // Entry 382 + 0x1.0ffffffffffffcdde5750f42f89e6089p1, + 0x1.62e42fefa39efp0 + }, + { // Entry 383 + 0x1.0ffffffffffffcdde5750f42f89e6089p1, + -0x1.62e42fefa39efp0 + }, + { // Entry 384 + 0x1.1000000000000bdde5750f42f8ed8fb8p1, + 0x1.62e42fefa39f0p0 + }, + { // Entry 385 + 0x1.1000000000000bdde5750f42f8ed8fb8p1, + -0x1.62e42fefa39f0p0 + }, + { // Entry 386 + 0x1.3ffffffffffff8bf2895394dfd443ba8p0, + 0x1.62e42fefa39eep-1 + }, + { // Entry 387 + 0x1.3ffffffffffff8bf2895394dfd443ba8p0, + -0x1.62e42fefa39eep-1 + }, + { // Entry 388 + 0x1.3ffffffffffffebf2895394dfd0b85c5p0, + 0x1.62e42fefa39efp-1 + }, + { // Entry 389 + 0x1.3ffffffffffffebf2895394dfd0b85c5p0, + -0x1.62e42fefa39efp-1 + }, + { // Entry 390 + 0x1.40000000000004bf2895394dfd22cfe2p0, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 391 + 0x1.40000000000004bf2895394dfd22cfe2p0, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 392 + 0x1.0f876ccdf6cd9510dcd50357a7335f9dp0, + 0x1.62e42fefa39eep-2 + }, + { // Entry 393 + 0x1.0f876ccdf6cd9510dcd50357a7335f9dp0, + -0x1.62e42fefa39eep-2 + }, + { // Entry 394 + 0x1.0f876ccdf6cd967ae6bb6b4b63f0609bp0, + 0x1.62e42fefa39efp-2 + }, + { // Entry 395 + 0x1.0f876ccdf6cd967ae6bb6b4b63f0609bp0, + -0x1.62e42fefa39efp-2 + }, + { // Entry 396 + 0x1.0f876ccdf6cd97e4f0a1d33f20be5a0fp0, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 397 + 0x1.0f876ccdf6cd97e4f0a1d33f20be5a0fp0, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 398 + 0x1.03da6eb6f9075e7d98810fe96fe74840p0, + 0x1.62e42fefa39eep-3 + }, + { // Entry 399 + 0x1.03da6eb6f9075e7d98810fe96fe74840p0, + -0x1.62e42fefa39eep-3 + }, + { // Entry 400 + 0x1.03da6eb6f9075ed6c364e82e43cc51c1p0, + 0x1.62e42fefa39efp-3 + }, + { // Entry 401 + 0x1.03da6eb6f9075ed6c364e82e43cc51c1p0, + -0x1.62e42fefa39efp-3 + }, + { // Entry 402 + 0x1.03da6eb6f9075f2fee48c07317b56aadp0, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 403 + 0x1.03da6eb6f9075f2fee48c07317b56aadp0, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 404 + 0x1.00f62557d91df3638b0ba7ca488b2839p0, + 0x1.62e42fefa39eep-4 + }, + { // Entry 405 + 0x1.00f62557d91df3638b0ba7ca488b2839p0, + -0x1.62e42fefa39eep-4 + }, + { // Entry 406 + 0x1.00f62557d91df379c06a17c64244c1a5p0, + 0x1.62e42fefa39efp-4 + }, + { // Entry 407 + 0x1.00f62557d91df379c06a17c64244c1a5p0, + -0x1.62e42fefa39efp-4 + }, + { // Entry 408 + 0x1.00f62557d91df38ff5c887c23bff5c07p0, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 409 + 0x1.00f62557d91df38ff5c887c23bff5c07p0, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 410 + 0x1.003d81f25e8be1244ef875be32e5fbb0p0, + 0x1.62e42fefa39eep-5 + }, + { // Entry 411 + 0x1.003d81f25e8be1244ef875be32e5fbb0p0, + -0x1.62e42fefa39eep-5 + }, + { // Entry 412 + 0x1.003d81f25e8be129dafae45b35704d8ap0, + 0x1.62e42fefa39efp-5 + }, + { // Entry 413 + 0x1.003d81f25e8be129dafae45b35704d8ap0, + -0x1.62e42fefa39efp-5 + }, + { // Entry 414 + 0x1.003d81f25e8be12f66fd52f837fadf75p0, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 415 + 0x1.003d81f25e8be12f66fd52f837fadf75p0, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 416 + 0x1.000f60066540a372cf2f0ea5d3ca7e8bp0, + 0x1.62e42fefa39eep-6 + }, + { // Entry 417 + 0x1.000f60066540a372cf2f0ea5d3ca7e8bp0, + -0x1.62e42fefa39eep-6 + }, + { // Entry 418 + 0x1.000f60066540a374321a5962997281b2p0, + 0x1.62e42fefa39efp-6 + }, + { // Entry 419 + 0x1.000f60066540a374321a5962997281b2p0, + -0x1.62e42fefa39efp-6 + }, + { // Entry 420 + 0x1.000f60066540a3759505a41f5f1a94dbp0, + 0x1.62e42fefa39f0p-6 + }, + { // Entry 421 + 0x1.000f60066540a3759505a41f5f1a94dbp0, + -0x1.62e42fefa39f0p-6 + }, + { // Entry 422 + 0x1.000000000000ca87c3898cffd1bcd954p31, + -0x1.62e42fefa39f0p4 + }, + { // Entry 423 + 0x1.000000000000ca87c3898cffd1bcd954p31, + 0x1.62e42fefa39f0p4 + }, + { // Entry 424 + 0x1.ffffffffffff950f871319ff0e6e2b95p30, + -0x1.62e42fefa39efp4 + }, + { // Entry 425 + 0x1.ffffffffffff950f871319ff0e6e2b95p30, + 0x1.62e42fefa39efp4 + }, + { // Entry 426 + 0x1.fffffffffffd950f87131a007962a482p30, + -0x1.62e42fefa39eep4 + }, + { // Entry 427 + 0x1.fffffffffffd950f87131a007962a482p30, + 0x1.62e42fefa39eep4 + }, + { // Entry 428 + 0x1.000000010000654361c4613c7312ecfdp15, + -0x1.62e42fefa39f0p3 + }, + { // Entry 429 + 0x1.000000010000654361c4613c7312ecfdp15, + 0x1.62e42fefa39f0p3 + }, + { // Entry 430 + 0x1.00000000ffffe54361c4e13c60713c1ap15, + -0x1.62e42fefa39efp3 + }, + { // Entry 431 + 0x1.00000000ffffe54361c4e13c60713c1ap15, + 0x1.62e42fefa39efp3 + }, + { // Entry 432 + 0x1.00000000ffff654361c5613c8dcf8b38p15, + -0x1.62e42fefa39eep3 + }, + { // Entry 433 + 0x1.00000000ffff654361c5613c8dcf8b38p15, + 0x1.62e42fefa39eep3 + }, + { // Entry 434 + 0x1.00010000000032a17e40b25d822a36bbp7, + -0x1.62e42fefa39f0p2 + }, + { // Entry 435 + 0x1.00010000000032a17e40b25d822a36bbp7, + 0x1.62e42fefa39f0p2 + }, + { // Entry 436 + 0x1.0000fffffffff2a1be40b25d7d81c5dap7, + -0x1.62e42fefa39efp2 + }, + { // Entry 437 + 0x1.0000fffffffff2a1be40b25d7d81c5dap7, + 0x1.62e42fefa39efp2 + }, + { // Entry 438 + 0x1.0000ffffffffb2a1fe40b25d88d964f9p7, + -0x1.62e42fefa39eep2 + }, + { // Entry 439 + 0x1.0000ffffffffb2a1fe40b25d88d964f9p7, + 0x1.62e42fefa39eep2 + }, + { // Entry 440 + 0x1.01000000000019378798c06e5185a376p3, + -0x1.62e42fefa39f0p1 + }, + { // Entry 441 + 0x1.01000000000019378798c06e5185a376p3, + 0x1.62e42fefa39f0p1 + }, + { // Entry 442 + 0x1.00fffffffffff9578798c06e505a5e4dp3, + -0x1.62e42fefa39efp1 + }, + { // Entry 443 + 0x1.00fffffffffff9578798c06e505a5e4dp3, + 0x1.62e42fefa39efp1 + }, + { // Entry 444 + 0x1.00ffffffffffd9778798c06e53331924p3, + -0x1.62e42fefa39eep1 + }, + { // Entry 445 + 0x1.00ffffffffffd9778798c06e53331924p3, + 0x1.62e42fefa39eep1 + }, + { // Entry 446 + 0x1.1000000000000bdde5750f42f8ed8fb8p1, + -0x1.62e42fefa39f0p0 + }, + { // Entry 447 + 0x1.1000000000000bdde5750f42f8ed8fb8p1, + 0x1.62e42fefa39f0p0 + }, + { // Entry 448 + 0x1.0ffffffffffffcdde5750f42f89e6089p1, + -0x1.62e42fefa39efp0 + }, + { // Entry 449 + 0x1.0ffffffffffffcdde5750f42f89e6089p1, + 0x1.62e42fefa39efp0 + }, + { // Entry 450 + 0x1.0fffffffffffeddde5750f42f95f3159p1, + -0x1.62e42fefa39eep0 + }, + { // Entry 451 + 0x1.0fffffffffffeddde5750f42f95f3159p1, + 0x1.62e42fefa39eep0 + }, + { // Entry 452 + 0x1.40000000000004bf2895394dfd22cfe2p0, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 453 + 0x1.40000000000004bf2895394dfd22cfe2p0, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 454 + 0x1.3ffffffffffffebf2895394dfd0b85c5p0, + -0x1.62e42fefa39efp-1 + }, + { // Entry 455 + 0x1.3ffffffffffffebf2895394dfd0b85c5p0, + 0x1.62e42fefa39efp-1 + }, + { // Entry 456 + 0x1.3ffffffffffff8bf2895394dfd443ba8p0, + -0x1.62e42fefa39eep-1 + }, + { // Entry 457 + 0x1.3ffffffffffff8bf2895394dfd443ba8p0, + 0x1.62e42fefa39eep-1 + }, + { // Entry 458 + 0x1.0f876ccdf6cd97e4f0a1d33f20be5a0fp0, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 459 + 0x1.0f876ccdf6cd97e4f0a1d33f20be5a0fp0, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 460 + 0x1.0f876ccdf6cd967ae6bb6b4b63f0609bp0, + -0x1.62e42fefa39efp-2 + }, + { // Entry 461 + 0x1.0f876ccdf6cd967ae6bb6b4b63f0609bp0, + 0x1.62e42fefa39efp-2 + }, + { // Entry 462 + 0x1.0f876ccdf6cd9510dcd50357a7335f9dp0, + -0x1.62e42fefa39eep-2 + }, + { // Entry 463 + 0x1.0f876ccdf6cd9510dcd50357a7335f9dp0, + 0x1.62e42fefa39eep-2 + }, + { // Entry 464 + 0x1.03da6eb6f9075f2fee48c07317b56aadp0, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 465 + 0x1.03da6eb6f9075f2fee48c07317b56aadp0, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 466 + 0x1.03da6eb6f9075ed6c364e82e43cc51c1p0, + -0x1.62e42fefa39efp-3 + }, + { // Entry 467 + 0x1.03da6eb6f9075ed6c364e82e43cc51c1p0, + 0x1.62e42fefa39efp-3 + }, + { // Entry 468 + 0x1.03da6eb6f9075e7d98810fe96fe74840p0, + -0x1.62e42fefa39eep-3 + }, + { // Entry 469 + 0x1.03da6eb6f9075e7d98810fe96fe74840p0, + 0x1.62e42fefa39eep-3 + }, + { // Entry 470 + 0x1.00f62557d91df38ff5c887c23bff5c07p0, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 471 + 0x1.00f62557d91df38ff5c887c23bff5c07p0, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 472 + 0x1.00f62557d91df379c06a17c64244c1a5p0, + -0x1.62e42fefa39efp-4 + }, + { // Entry 473 + 0x1.00f62557d91df379c06a17c64244c1a5p0, + 0x1.62e42fefa39efp-4 + }, + { // Entry 474 + 0x1.00f62557d91df3638b0ba7ca488b2839p0, + -0x1.62e42fefa39eep-4 + }, + { // Entry 475 + 0x1.00f62557d91df3638b0ba7ca488b2839p0, + 0x1.62e42fefa39eep-4 + }, + { // Entry 476 + 0x1.003d81f25e8be12f66fd52f837fadf75p0, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 477 + 0x1.003d81f25e8be12f66fd52f837fadf75p0, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 478 + 0x1.003d81f25e8be129dafae45b35704d8ap0, + -0x1.62e42fefa39efp-5 + }, + { // Entry 479 + 0x1.003d81f25e8be129dafae45b35704d8ap0, + 0x1.62e42fefa39efp-5 + }, + { // Entry 480 + 0x1.003d81f25e8be1244ef875be32e5fbb0p0, + -0x1.62e42fefa39eep-5 + }, + { // Entry 481 + 0x1.003d81f25e8be1244ef875be32e5fbb0p0, + 0x1.62e42fefa39eep-5 + }, + { // Entry 482 + 0x1.bfeb3206958461e0cd949b740397374bp262, + 0x1.6db6db6db6db7p7 + }, + { // Entry 483 + 0x1.bfeb3206958461e0cd949b740397374bp262, + -0x1.6db6db6db6db7p7 + }, + { // Entry 484 + 0x1.ee4adffc4816c196cc85c579b49b713cp341, + 0x1.db6db6db6db6ep7 + }, + { // Entry 485 + 0x1.ee4adffc4816c196cc85c579b49b713cp341, + -0x1.db6db6db6db6ep7 + }, + { // Entry 486 + 0x1.10bbd304e4d53317191db80168f41e88p421, + 0x1.2492492492492p8 + }, + { // Entry 487 + 0x1.10bbd304e4d53317191db80168f41e88p421, + -0x1.2492492492492p8 + }, + { // Entry 488 + 0x1.2cf8621aa3eacbce3c5c6aac7a52e872p500, + 0x1.5b6db6db6db6dp8 + }, + { // Entry 489 + 0x1.2cf8621aa3eacbce3c5c6aac7a52e872p500, + -0x1.5b6db6db6db6dp8 + }, + { // Entry 490 + 0x1.4c21539572c19b59fc629129d307d9b1p579, + 0x1.9249249249248p8 + }, + { // Entry 491 + 0x1.4c21539572c19b59fc629129d307d9b1p579, + -0x1.9249249249248p8 + }, + { // Entry 492 + 0x1.6e8422b4db33b6293cd44cd1c65585b2p658, + 0x1.c924924924923p8 + }, + { // Entry 493 + 0x1.6e8422b4db33b6293cd44cd1c65585b2p658, + -0x1.c924924924923p8 + }, + { // Entry 494 + 0x1.6dde4c855f3397cd05f383e2ad5ef219p935, + 0x1.4492492492492p9 + }, + { // Entry 495 + 0x1.6dde4c855f3397cd05f383e2ad5ef219p935, + -0x1.4492492492492p9 + }, + { // Entry 496 + 0x1.a178d253fc35a0b9802d9cd5f67cb7efp948, + 0x1.4924924924924p9 + }, + { // Entry 497 + 0x1.a178d253fc35a0b9802d9cd5f67cb7efp948, + -0x1.4924924924924p9 + }, + { // Entry 498 + 0x1.dc5a9c97ea13a0062828386dc2460ac2p961, + 0x1.4db6db6db6db6p9 + }, + { // Entry 499 + 0x1.dc5a9c97ea13a0062828386dc2460ac2p961, + -0x1.4db6db6db6db6p9 + }, + { // Entry 500 + 0x1.0fc53c727155d9dd001733d4258e3203p975, + 0x1.5249249249248p9 + }, + { // Entry 501 + 0x1.0fc53c727155d9dd001733d4258e3203p975, + -0x1.5249249249248p9 + }, + { // Entry 502 + 0x1.361a22f5879a158106bee1e89ea2a4d7p988, + 0x1.56db6db6db6dap9 + }, + { // Entry 503 + 0x1.361a22f5879a158106bee1e89ea2a4d7p988, + -0x1.56db6db6db6dap9 + }, + { // Entry 504 + 0x1.61d716eca93811f8d8288649dc2cee65p1001, + 0x1.5b6db6db6db6cp9 + }, + { // Entry 505 + 0x1.61d716eca93811f8d8288649dc2cee65p1001, + -0x1.5b6db6db6db6cp9 + }, + { // Entry 506 + HUGE_VAL, + 0x1.76db6db6db6dbp9 + }, + { // Entry 507 + HUGE_VAL, + -0x1.76db6db6db6dbp9 + }, + { // Entry 508 + HUGE_VAL, + 0x1.8db6db6db6db6p9 + }, + { // Entry 509 + HUGE_VAL, + -0x1.8db6db6db6db6p9 + }, + { // Entry 510 + HUGE_VAL, + 0x1.a492492492491p9 + }, + { // Entry 511 + HUGE_VAL, + -0x1.a492492492491p9 + }, + { // Entry 512 + HUGE_VAL, + 0x1.bb6db6db6db6cp9 + }, + { // Entry 513 + HUGE_VAL, + -0x1.bb6db6db6db6cp9 + }, + { // Entry 514 + HUGE_VAL, + 0x1.d249249249247p9 + }, + { // Entry 515 + HUGE_VAL, + -0x1.d249249249247p9 + }, + { // Entry 516 + HUGE_VAL, + 0x1.e924924924922p9 + }, + { // Entry 517 + HUGE_VAL, + -0x1.e924924924922p9 + }, + { // Entry 518 + 0x1.93bf4ec282efb320a57f9ae02e01ae51p1014, + -0x1.6p9 + }, + { // Entry 519 + 0x1.93bf4ec282efb320a57f9ae02e01ae51p1014, + 0x1.6p9 + }, + { // Entry 520 + 0x1.61d716eca99087be9352df5d131a5dd2p1001, + -0x1.5b6db6db6db6ep9 + }, + { // Entry 521 + 0x1.61d716eca99087be9352df5d131a5dd2p1001, + 0x1.5b6db6db6db6ep9 + }, + { // Entry 522 + 0x1.361a22f587e79c09c420d21ecffc00cdp988, + -0x1.56db6db6db6dcp9 + }, + { // Entry 523 + 0x1.361a22f587e79c09c420d21ecffc00cdp988, + 0x1.56db6db6db6dcp9 + }, + { // Entry 524 + 0x1.0fc53c727199cb2c1cb391c8c6b1cb5bp975, + -0x1.524924924924ap9 + }, + { // Entry 525 + 0x1.0fc53c727199cb2c1cb391c8c6b1cb5bp975, + 0x1.524924924924ap9 + }, + { // Entry 526 + 0x1.dc5a9c97ea8ab6ad4e22cc3898b4d422p961, + -0x1.4db6db6db6db8p9 + }, + { // Entry 527 + 0x1.dc5a9c97ea8ab6ad4e22cc3898b4d422p961, + 0x1.4db6db6db6db8p9 + }, + { // Entry 528 + 0x1.a178d253fc9dfeee152cb749eb6f6339p948, + -0x1.4924924924926p9 + }, + { // Entry 529 + 0x1.a178d253fc9dfeee152cb749eb6f6339p948, + 0x1.4924924924926p9 + }, + { // Entry 530 + 0x1.6dde4c855f8f0f60274b5c37930499f5p935, + -0x1.4492492492494p9 + }, + { // Entry 531 + 0x1.6dde4c855f8f0f60274b5c37930499f5p935, + 0x1.4492492492494p9 + }, + { // Entry 532 + 0x1.40a4b9c271c8c4271fbcc3df336e0edbp922, + -0x1.4000000000002p9 + }, + { // Entry 533 + 0x1.40a4b9c271c8c4271fbcc3df336e0edbp922, + 0x1.4000000000002p9 + }, + { // Entry 534 + 0x1.p0, + -0x1.0p-1074 + }, + { // Entry 535 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 536 + 0x1.p0, + -0.0 + }, + { // Entry 537 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 538 + 0x1.p0, + -0x1.0p-1074 + }, + { // Entry 539 + 0x1.01d86cfadd84bed563ca81e639d82de4p0, + 0x1.eb851eb851eb7p-4 + }, + { // Entry 540 + 0x1.01d86cfadd84bed563ca81e639d82de4p0, + -0x1.eb851eb851eb7p-4 + }, + { // Entry 541 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 542 + 0x1.01d86cfadd84bef42effbee90fd3b265p0, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 543 + 0x1.01d86cfadd84bf12fa34fbebe5d038bep0, + 0x1.eb851eb851eb9p-4 + }, + { // Entry 544 + 0x1.01d86cfadd84bf12fa34fbebe5d038bep0, + -0x1.eb851eb851eb9p-4 + }, + { // Entry 545 + 0x1.20ac1862ae8d042fe838523e9530a73ep0, + 0x1.fffffffffffffp-2 + }, + { // Entry 546 + 0x1.20ac1862ae8d042fe838523e9530a73ep0, + -0x1.fffffffffffffp-2 + }, + { // Entry 547 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + 0x1.0p-1 + }, + { // Entry 548 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + -0x1.0p-1 + }, + { // Entry 549 + 0x1.20ac1862ae8d0a70b63e4894edd78b6ep0, + 0x1.0000000000001p-1 + }, + { // Entry 550 + 0x1.20ac1862ae8d0a70b63e4894edd78b6ep0, + -0x1.0000000000001p-1 + }, + { // Entry 551 + 0x1.8b07551d9f54fb5bed45e8a4d5a91742p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 552 + 0x1.8b07551d9f54fb5bed45e8a4d5a91742p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 553 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.0p0 + }, + { // Entry 554 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.0p0 + }, + { // Entry 555 + 0x1.8b07551d9f5517905cec5ebb19c4fa39p0, + 0x1.0000000000001p0 + }, + { // Entry 556 + 0x1.8b07551d9f5517905cec5ebb19c4fa39p0, + -0x1.0000000000001p0 + }, + { // Entry 557 + 0x1.ab5adb9c435e4cc33d1386d805bcc667p30, + 0x1.5ffffffffffffp4 + }, + { // Entry 558 + 0x1.ab5adb9c435e4cc33d1386d805bcc667p30, + -0x1.5ffffffffffffp4 + }, + { // Entry 559 + 0x1.ab5adb9c435ff81e18afca372828a676p30, + 0x1.6p4 + }, + { // Entry 560 + 0x1.ab5adb9c435ff81e18afca372828a676p30, + -0x1.6p4 + }, + { // Entry 561 + 0x1.ab5adb9c4361a378f44c0d97f5ef6222p30, + 0x1.6000000000001p4 + }, + { // Entry 562 + 0x1.ab5adb9c4361a378f44c0d97f5ef6222p30, + -0x1.6000000000001p4 + }, + { // Entry 563 + 0x1.226af33b1fdae7ecca102ad6b7f98a06p32, + 0x1.6ffffffffffffp4 + }, + { // Entry 564 + 0x1.226af33b1fdae7ecca102ad6b7f98a06p32, + -0x1.6ffffffffffffp4 + }, + { // Entry 565 + 0x1.226af33b1fdc0a57bd4b4ab2311b5cdfp32, + 0x1.7p4 + }, + { // Entry 566 + 0x1.226af33b1fdc0a57bd4b4ab2311b5cdfp32, + -0x1.7p4 + }, + { // Entry 567 + 0x1.226af33b1fdd2cc2b0866a8ecca822f4p32, + 0x1.7000000000001p4 + }, + { // Entry 568 + 0x1.226af33b1fdd2cc2b0866a8ecca822f4p32, + -0x1.7000000000001p4 + }, + { // Entry 569 + 0x1.fffffffffffb9ede67b7a313295faa73p51, + 0x1.25e4f7b2737f9p5 + }, + { // Entry 570 + 0x1.fffffffffffb9ede67b7a313295faa73p51, + -0x1.25e4f7b2737f9p5 + }, + { // Entry 571 + 0x1.ffffffffffff9ede67b7a30e671c79e2p51, + 0x1.25e4f7b2737fap5 + }, + { // Entry 572 + 0x1.ffffffffffff9ede67b7a30e671c79e2p51, + -0x1.25e4f7b2737fap5 + }, + { // Entry 573 + 0x1.000000000001cf6f33dbd188d26ca4a9p52, + 0x1.25e4f7b2737fbp5 + }, + { // Entry 574 + 0x1.000000000001cf6f33dbd188d26ca4a9p52, + -0x1.25e4f7b2737fbp5 + }, + { // Entry 575 + 0x1.6a09e667f3b73b2e9b132d51434e682dp52, + 0x1.28aac01252c6cp5 + }, + { // Entry 576 + 0x1.6a09e667f3b73b2e9b132d51434e682dp52, + -0x1.28aac01252c6cp5 + }, + { // Entry 577 + 0x1.6a09e667f3ba0f4267e314c28dbf6b23p52, + 0x1.28aac01252c6dp5 + }, + { // Entry 578 + 0x1.6a09e667f3ba0f4267e314c28dbf6b23p52, + -0x1.28aac01252c6dp5 + }, + { // Entry 579 + 0x1.6a09e667f3bce35634b2fc39805807b9p52, + 0x1.28aac01252c6ep5 + }, + { // Entry 580 + 0x1.6a09e667f3bce35634b2fc39805807b9p52, + -0x1.28aac01252c6ep5 + }, + { // Entry 581 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + 0x1.633ce8fb9f87cp9 + }, + { // Entry 582 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + -0x1.633ce8fb9f87cp9 + }, + { // Entry 583 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 584 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 585 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 586 + HUGE_VAL, + -0x1.633ce8fb9f87ep9 + }, + { // Entry 587 + HUGE_VAL, + -0x1.633ce8fb9f87ep9 + }, + { // Entry 588 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 589 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 590 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 591 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + -0x1.633ce8fb9f87cp9 + }, + { // Entry 592 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + 0x1.633ce8fb9f87cp9 + }, + { // Entry 593 + 0x1.0000000000000007ffffffffffff800ap0, + 0x1.fffffffffffffp-31 + }, + { // Entry 594 + 0x1.0000000000000007ffffffffffff800ap0, + -0x1.fffffffffffffp-31 + }, + { // Entry 595 + 0x1.0000000000000008000000000000000ap0, + 0x1.0p-30 + }, + { // Entry 596 + 0x1.0000000000000008000000000000000ap0, + -0x1.0p-30 + }, + { // Entry 597 + 0x1.0000000000000008000000000001000ap0, + 0x1.0000000000001p-30 + }, + { // Entry 598 + 0x1.0000000000000008000000000001000ap0, + -0x1.0000000000001p-30 + }, + { // Entry 599 + 0x1.0000000200000000aaaa8aaac16c016cp0, + 0x1.fffffffffffffp-16 + }, + { // Entry 600 + 0x1.0000000200000000aaaa8aaac16c016cp0, + -0x1.fffffffffffffp-16 + }, + { // Entry 601 + 0x1.0000000200000000aaaaaaaac16c16c1p0, + 0x1.0p-15 + }, + { // Entry 602 + 0x1.0000000200000000aaaaaaaac16c16c1p0, + -0x1.0p-15 + }, + { // Entry 603 + 0x1.0000000200000000aaaaeaaac16c416cp0, + 0x1.0000000000001p-15 + }, + { // Entry 604 + 0x1.0000000200000000aaaaeaaac16c416cp0, + -0x1.0000000000001p-15 + }, + { // Entry 605 + 0x1.0008000aaab05b06d073fbf35675d3c7p0, + 0x1.fffffffffffffp-7 + }, + { // Entry 606 + 0x1.0008000aaab05b06d073fbf35675d3c7p0, + -0x1.fffffffffffffp-7 + }, + { // Entry 607 + 0x1.0008000aaab05b0750755149bcdca034p0, + 0x1.0p-6 + }, + { // Entry 608 + 0x1.0008000aaab05b0750755149bcdca034p0, + -0x1.0p-6 + }, + { // Entry 609 + 0x1.0008000aaab05b085077fbf689aa450ep0, + 0x1.0000000000001p-6 + }, + { // Entry 610 + 0x1.0008000aaab05b085077fbf689aa450ep0, + -0x1.0000000000001p-6 + }, + { // Entry 611 + 0x1.002000aaac16c30a31d59c22178e80d2p0, + 0x1.fffffffffffffp-6 + }, + { // Entry 612 + 0x1.002000aaac16c30a31d59c22178e80d2p0, + -0x1.fffffffffffffp-6 + }, + { // Entry 613 + 0x1.002000aaac16c30c31eaf1bbb1901947p0, + 0x1.0p-5 + }, + { // Entry 614 + 0x1.002000aaac16c30c31eaf1bbb1901947p0, + -0x1.0p-5 + }, + { // Entry 615 + 0x1.002000aaac16c31032159ceee5937a38p0, + 0x1.0000000000001p-5 + }, + { // Entry 616 + 0x1.002000aaac16c31032159ceee5937a38p0, + -0x1.0000000000001p-5 + }, + { // Entry 617 + 0x1.00800aab05b1fb1c50429ea2694ccac8p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 618 + 0x1.00800aab05b1fb1c50429ea2694ccac8p0, + -0x1.fffffffffffffp-5 + }, + { // Entry 619 + 0x1.00800aab05b1fb245198050937bb0368p0, + 0x1.0p-4 + }, + { // Entry 620 + 0x1.00800aab05b1fb245198050937bb0368p0, + -0x1.0p-4 + }, + { // Entry 621 + 0x1.00800aab05b1fb345442d1d6d4983508p0, + 0x1.0000000000001p-4 + }, + { // Entry 622 + 0x1.00800aab05b1fb345442d1d6d4983508p0, + -0x1.0000000000001p-4 + }, + { // Entry 623 + 0x1.0200aac16db6edcc80b33b1062033cc7p0, + 0x1.fffffffffffffp-4 + }, + { // Entry 624 + 0x1.0200aac16db6edcc80b33b1062033cc7p0, + -0x1.fffffffffffffp-4 + }, + { // Entry 625 + 0x1.0200aac16db6edec960cd51207e46c1ep0, + 0x1.0p-3 + }, + { // Entry 626 + 0x1.0200aac16db6edec960cd51207e46c1ep0, + -0x1.0p-3 + }, + { // Entry 627 + 0x1.0200aac16db6ee2cc0c0091553a9d0cep0, + 0x1.0000000000001p-3 + }, + { // Entry 628 + 0x1.0200aac16db6ee2cc0c0091553a9d0cep0, + -0x1.0000000000001p-3 + }, + { // Entry 629 + 0x1.080ab05ca6145e5b88296b187f06805fp0, + 0x1.fffffffffffffp-3 + }, + { // Entry 630 + 0x1.080ab05ca6145e5b88296b187f06805fp0, + -0x1.fffffffffffffp-3 + }, + { // Entry 631 + 0x1.080ab05ca6145edcde90399c8713a384p0, + 0x1.0p-2 + }, + { // Entry 632 + 0x1.080ab05ca6145edcde90399c8713a384p0, + -0x1.0p-2 + }, + { // Entry 633 + 0x1.080ab05ca6145fdf8b5dd6a4973a4a4ep0, + 0x1.0000000000001p-2 + }, + { // Entry 634 + 0x1.080ab05ca6145fdf8b5dd6a4973a4a4ep0, + -0x1.0000000000001p-2 + }, + { // Entry 635 + 0x1.e18fa0df2d9ba58f58936095ae8d9969p1, + 0x1.fffffffffffffp0 + }, + { // Entry 636 + 0x1.e18fa0df2d9ba58f58936095ae8d9969p1, + -0x1.fffffffffffffp0 + }, + { // Entry 637 + 0x1.e18fa0df2d9bc29327f717774d0c0661p1, + 0x1.0p1 + }, + { // Entry 638 + 0x1.e18fa0df2d9bc29327f717774d0c0661p1, + -0x1.0p1 + }, + { // Entry 639 + 0x1.e18fa0df2d9bfc9ac6be853a8fad8f33p1, + 0x1.0000000000001p1 + }, + { // Entry 640 + 0x1.e18fa0df2d9bfc9ac6be853a8fad8f33p1, + -0x1.0000000000001p1 + }, + { // Entry 641 + 0x1.b4ee858de3e7c9cd569e3d719b38d342p4, + 0x1.fffffffffffffp1 + }, + { // Entry 642 + 0x1.b4ee858de3e7c9cd569e3d719b38d342p4, + -0x1.fffffffffffffp1 + }, + { // Entry 643 + 0x1.b4ee858de3e80061c6a51dddf960f317p4, + 0x1.0p2 + }, + { // Entry 644 + 0x1.b4ee858de3e80061c6a51dddf960f317p4, + -0x1.0p2 + }, + { // Entry 645 + 0x1.b4ee858de3e86d8aa6b2deb6ca2c6104p4, + 0x1.0000000000001p2 + }, + { // Entry 646 + 0x1.b4ee858de3e86d8aa6b2deb6ca2c6104p4, + -0x1.0000000000001p2 + }, + { // Entry 647 + 0x1.749eaa93f4e703e92c604cbb82b0787ap10, + 0x1.fffffffffffffp2 + }, + { // Entry 648 + 0x1.749eaa93f4e703e92c604cbb82b0787ap10, + -0x1.fffffffffffffp2 + }, + { // Entry 649 + 0x1.749eaa93f4e76110d5a587e50e4d3dc3p10, + 0x1.0p3 + }, + { // Entry 650 + 0x1.749eaa93f4e76110d5a587e50e4d3dc3p10, + -0x1.0p3 + }, + { // Entry 651 + 0x1.749eaa93f4e81b60282ffe386b648851p10, + 0x1.0000000000001p3 + }, + { // Entry 652 + 0x1.749eaa93f4e81b60282ffe386b648851p10, + -0x1.0000000000001p3 + }, + { // Entry 653 + 0x1.0f2ebd0a800543a63cca0142899e262fp22, + 0x1.fffffffffffffp3 + }, + { // Entry 654 + 0x1.0f2ebd0a800543a63cca0142899e262fp22, + -0x1.fffffffffffffp3 + }, + { // Entry 655 + 0x1.0f2ebd0a8005cb3d9b4f414186aba4d7p22, + 0x1.0p4 + }, + { // Entry 656 + 0x1.0f2ebd0a8005cb3d9b4f414186aba4d7p22, + -0x1.0p4 + }, + { // Entry 657 + 0x1.0f2ebd0a8006da6c5859c1404c29aff0p22, + 0x1.0000000000001p4 + }, + { // Entry 658 + 0x1.0f2ebd0a8006da6c5859c1404c29aff0p22, + -0x1.0000000000001p4 + }, + { // Entry 659 + 0x1.1f43fcc4b661a8944ac389c44c1372ffp45, + 0x1.fffffffffffffp4 + }, + { // Entry 660 + 0x1.1f43fcc4b661a8944ac389c44c1372ffp45, + -0x1.fffffffffffffp4 + }, + { // Entry 661 + 0x1.1f43fcc4b662c7d8478840268449bc25p45, + 0x1.0p5 + }, + { // Entry 662 + 0x1.1f43fcc4b662c7d8478840268449bc25p45, + -0x1.0p5 + }, + { // Entry 663 + 0x1.1f43fcc4b66506604111acee528244bfp45, + 0x1.0000000000001p5 + }, + { // Entry 664 + 0x1.1f43fcc4b66506604111acee528244bfp45, + -0x1.0000000000001p5 + }, + { // Entry 665 + 0x1.425982cf597a4d52c89ea857bbaa807ap91, + 0x1.fffffffffffffp5 + }, + { // Entry 666 + 0x1.425982cf597a4d52c89ea857bbaa807ap91, + -0x1.fffffffffffffp5 + }, + { // Entry 667 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + 0x1.0p6 + }, + { // Entry 668 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + -0x1.0p6 + }, + { // Entry 669 + 0x1.425982cf5981db6bd97ac14c35e666c6p91, + 0x1.0000000000001p6 + }, + { // Entry 670 + 0x1.425982cf5981db6bd97ac14c35e666c6p91, + -0x1.0000000000001p6 + }, + { // Entry 671 + 0x1.95e54c5dd41b20600dd601a0ae672ff4p183, + 0x1.fffffffffffffp6 + }, + { // Entry 672 + 0x1.95e54c5dd41b20600dd601a0ae672ff4p183, + -0x1.fffffffffffffp6 + }, + { // Entry 673 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + 0x1.0p7 + }, + { // Entry 674 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + -0x1.0p7 + }, + { // Entry 675 + 0x1.95e54c5dd42e271fa23bf3585b655060p183, + 0x1.0000000000001p7 + }, + { // Entry 676 + 0x1.95e54c5dd42e271fa23bf3585b655060p183, + -0x1.0000000000001p7 + }, + { // Entry 677 + 0x1.41c7a8814be192a5df25b042af824efdp368, + 0x1.fffffffffffffp7 + }, + { // Entry 678 + 0x1.41c7a8814be192a5df25b042af824efdp368, + -0x1.fffffffffffffp7 + }, + { // Entry 679 + 0x1.41c7a8814beba0e323300f777da65854p368, + 0x1.0p8 + }, + { // Entry 680 + 0x1.41c7a8814beba0e323300f777da65854p368, + -0x1.0p8 + }, + { // Entry 681 + 0x1.41c7a8814bffbd5dab44ced26faccbfbp368, + 0x1.0000000000001p8 + }, + { // Entry 682 + 0x1.41c7a8814bffbd5dab44ced26faccbfbp368, + -0x1.0000000000001p8 + }, + { // Entry 683 + 0x1.9476504ba8399f5b97cae35beb78c3c5p737, + 0x1.fffffffffffffp8 + }, + { // Entry 684 + 0x1.9476504ba8399f5b97cae35beb78c3c5p737, + -0x1.fffffffffffffp8 + }, + { // Entry 685 + 0x1.9476504ba852e6c09c8567c01c5a6648p737, + 0x1.0p9 + }, + { // Entry 686 + 0x1.9476504ba852e6c09c8567c01c5a6648p737, + -0x1.0p9 + }, + { // Entry 687 + 0x1.9476504ba885758aa5fa7545e10e8e46p737, + 0x1.0000000000001p9 + }, + { // Entry 688 + 0x1.9476504ba885758aa5fa7545e10e8e46p737, + -0x1.0000000000001p9 + }, + { // Entry 689 + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 690 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 691 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 692 + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 693 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 694 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 695 + HUGE_VAL, + 0x1.ffffffffffffep1023 + }, + { // Entry 696 + 0x1.72f147fee40004f636960fb65616f933p3, + 0x1.921fb54442d18p1 + }, + { // Entry 697 + 0x1.412cc2a8d4e9df8319ceee45d93f21f3p1, + 0x1.921fb54442d18p0 + }, + { // Entry 698 + 0x1.8b07551d9f5517905cec5ebb19c4fa39p0, + 0x1.0000000000001p0 + }, + { // Entry 699 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.0p0 + }, + { // Entry 700 + 0x1.8b07551d9f54fb5bed45e8a4d5a91742p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 701 + 0x1.531994ce525b97d489c1beb383943240p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 702 + 0x1.p0, + 0x1.0000000000001p-1022 + }, + { // Entry 703 + 0x1.p0, + 0x1.0p-1022 + }, + { // Entry 704 + 0x1.p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 705 + 0x1.p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 706 + 0x1.p0, + 0x1.0p-1073 + }, + { // Entry 707 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 708 + 0x1.p0, + 0.0 + }, + { // Entry 709 + 0x1.p0, + -0.0 + }, + { // Entry 710 + 0x1.p0, + -0x1.0p-1074 + }, + { // Entry 711 + 0x1.p0, + -0x1.0p-1073 + }, + { // Entry 712 + 0x1.p0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 713 + 0x1.p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 714 + 0x1.p0, + -0x1.0p-1022 + }, + { // Entry 715 + 0x1.p0, + -0x1.0000000000001p-1022 + }, + { // Entry 716 + 0x1.531994ce525b97d489c1beb383943240p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 717 + 0x1.8b07551d9f54fb5bed45e8a4d5a91742p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 718 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.0p0 + }, + { // Entry 719 + 0x1.8b07551d9f5517905cec5ebb19c4fa39p0, + -0x1.0000000000001p0 + }, + { // Entry 720 + 0x1.412cc2a8d4e9df8319ceee45d93f21f3p1, + -0x1.921fb54442d18p0 + }, + { // Entry 721 + 0x1.72f147fee40004f636960fb65616f933p3, + -0x1.921fb54442d18p1 + }, + { // Entry 722 + HUGE_VAL, + -0x1.ffffffffffffep1023 + }, + { // Entry 723 + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 724 + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 725 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 726 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 727 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 728 + HUGE_VAL, + -0x1.633ce8fb9f87ep9 + } +}; diff --git a/tests/math_data/coshf_intel_data.h b/tests/math_data/coshf_intel_data.h new file mode 100644 index 000000000..813b1b3fa --- /dev/null +++ b/tests/math_data/coshf_intel_data.h @@ -0,0 +1,2438 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_coshf_intel_data[] = { + { // Entry 0 + 0x1.2ae06100e62be904fdb5bc85681d5aaep11, + -0x1.0f1fb2p3 + }, + { // Entry 1 + 0x1.2ae06100e62be904fdb5bc85681d5aaep11, + 0x1.0f1fb2p3 + }, + { // Entry 2 + 0x1.0000000000000000000c87785d6188p0, + -0x1.405f90p-38 + }, + { // Entry 3 + 0x1.0000000000000000000c87785d6188p0, + 0x1.405f90p-38 + }, + { // Entry 4 + 0x1.4f1fe6fffd055403a0afa5f61f7ad456p122, + -0x1.561b10p6 + }, + { // Entry 5 + 0x1.4f1fe6fffd055403a0afa5f61f7ad456p122, + 0x1.561b10p6 + }, + { // Entry 6 + 0x1.d2f2227ae4dd65b581071b0f40467c30p122, + -0x1.576ebcp6 + }, + { // Entry 7 + 0x1.d2f2227ae4dd65b581071b0f40467c30p122, + 0x1.576ebcp6 + }, + { // Entry 8 + 0x1.936b41047c7f4ef20acbfc3ab28adde1p7, + -0x1.7fff80p2 + }, + { // Entry 9 + 0x1.936b41047c7f4ef20acbfc3ab28adde1p7, + 0x1.7fff80p2 + }, + { // Entry 10 + 0x1.0000017f58437ac57be86eaf878afddap0, + -0x1.bb06ccp-12 + }, + { // Entry 11 + 0x1.0000017f58437ac57be86eaf878afddap0, + 0x1.bb06ccp-12 + }, + { // Entry 12 + 0x1.fbacf4ca702a97945d7c7d78c0bdad47p8, + -0x1.bb1240p2 + }, + { // Entry 13 + 0x1.fbacf4ca702a97945d7c7d78c0bdad47p8, + 0x1.bb1240p2 + }, + { // Entry 14 + 0x1.0000017fb2c9b9e288983fa06ce62b04p0, + -0x1.bb3b18p-12 + }, + { // Entry 15 + 0x1.0000017fb2c9b9e288983fa06ce62b04p0, + 0x1.bb3b18p-12 + }, + { // Entry 16 + 0x1.0000070003551fecea0dae6d0551de10p0, + -0x1.deef12p-11 + }, + { // Entry 17 + 0x1.0000070003551fecea0dae6d0551de10p0, + 0x1.deef12p-11 + }, + { // Entry 18 + 0x1.01fe2b000874d8917b3a73fd080542f7p0, + -0x1.fec090p-4 + }, + { // Entry 19 + 0x1.01fe2b000874d8917b3a73fd080542f7p0, + 0x1.fec090p-4 + }, + { // Entry 20 + 0x1.0000000000200000000000aaaaaaaaaap0, + 0x1.p-21 + }, + { // Entry 21 + 0x1.0000000000200000000000aaaaaaaaaap0, + -0x1.p-21 + }, + { // Entry 22 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 23 + 0x1.p0, + -0x1.p-149 + }, + { // Entry 24 + 0x1.0000000000000000000020000080p0, + 0x1.000002p-41 + }, + { // Entry 25 + 0x1.0000000000000000000020000080p0, + -0x1.000002p-41 + }, + { // Entry 26 + 0x1.749f1f059aafac3e3ae482f732034f99p10, + 0x1.00000ap3 + }, + { // Entry 27 + 0x1.749f1f059aafac3e3ae482f732034f99p10, + -0x1.00000ap3 + }, + { // Entry 28 + 0x1.080ab13efd4e998566b0693a9a7731a8p0, + 0x1.00000ep-2 + }, + { // Entry 29 + 0x1.080ab13efd4e998566b0693a9a7731a8p0, + -0x1.00000ep-2 + }, + { // Entry 30 + 0x1.0200ab01986c25f1377dd85169c7ccf5p0, + 0x1.000010p-3 + }, + { // Entry 31 + 0x1.0200ab01986c25f1377dd85169c7ccf5p0, + -0x1.000010p-3 + }, + { // Entry 32 + 0x1.e190fd0d6db8db09b5aad2f89bb2ad76p1, + 0x1.000060p1 + }, + { // Entry 33 + 0x1.e190fd0d6db8db09b5aad2f89bb2ad76p1, + -0x1.000060p1 + }, + { // Entry 34 + 0x1.b4f4eaff04f265d5f55aecad94412877p4, + 0x1.0000f0p2 + }, + { // Entry 35 + 0x1.b4f4eaff04f265d5f55aecad94412877p4, + -0x1.0000f0p2 + }, + { // Entry 36 + 0x1.76112f028a8233c6be52ddd0d11dd50fp10, + 0x1.001fc2p3 + }, + { // Entry 37 + 0x1.76112f028a8233c6be52ddd0d11dd50fp10, + -0x1.001fc2p3 + }, + { // Entry 38 + 0x1.e203bf2a6f104d990d9610afb6c8b014p1, + 0x1.0020p1 + }, + { // Entry 39 + 0x1.e203bf2a6f104d990d9610afb6c8b014p1, + -0x1.0020p1 + }, + { // Entry 40 + 0x1.080cc501591cc669c4cc8cd1a5891727p0, + 0x1.0020f0p-2 + }, + { // Entry 41 + 0x1.080cc501591cc669c4cc8cd1a5891727p0, + -0x1.0020f0p-2 + }, + { // Entry 42 + 0x1.7d15790923fc59b8d7d10a8c5d3adc48p10, + 0x1.00b8p3 + }, + { // Entry 43 + 0x1.7d15790923fc59b8d7d10a8c5d3adc48p10, + -0x1.00b8p3 + }, + { // Entry 44 + 0x1.00818500020c06cedbd38d34eee6ab54p0, + 0x1.0179p-4 + }, + { // Entry 45 + 0x1.00818500020c06cedbd38d34eee6ab54p0, + -0x1.0179p-4 + }, + { // Entry 46 + 0x1.8d17e7030b8e9690e01964bd2c8be94bp0, + 0x1.01bfc2p0 + }, + { // Entry 47 + 0x1.8d17e7030b8e9690e01964bd2c8be94bp0, + -0x1.01bfc2p0 + }, + { // Entry 48 + 0x1.8e34430073e0e9199e68ad3bca9ed793p10, + 0x1.0220p3 + }, + { // Entry 49 + 0x1.8e34430073e0e9199e68ad3bca9ed793p10, + -0x1.0220p3 + }, + { // Entry 50 + 0x1.93dc630008b669187e515dc7aa42f486p0, + 0x1.0760p0 + }, + { // Entry 51 + 0x1.93dc630008b669187e515dc7aa42f486p0, + -0x1.0760p0 + }, + { // Entry 52 + 0x1.bf1abedb9fcde794ba793b6b505eb17bp22, + 0x1.08p4 + }, + { // Entry 53 + 0x1.bf1abedb9fcde794ba793b6b505eb17bp22, + -0x1.08p4 + }, + { // Entry 54 + 0x1.89acdf26f99012ec527c5ea1162aa095p46, + 0x1.0810eep5 + }, + { // Entry 55 + 0x1.89acdf26f99012ec527c5ea1162aa095p46, + -0x1.0810eep5 + }, + { // Entry 56 + 0x1.9506d202339691daa92242c890d53037p0, + 0x1.0854p0 + }, + { // Entry 57 + 0x1.9506d202339691daa92242c890d53037p0, + -0x1.0854p0 + }, + { // Entry 58 + 0x1.97a75b0008810be285110dcff331ac17p0, + 0x1.0a759cp0 + }, + { // Entry 59 + 0x1.97a75b0008810be285110dcff331ac17p0, + -0x1.0a759cp0 + }, + { // Entry 60 + 0x1.a229dffff61e1494787d29ddf23b0a5cp0, + 0x1.12c4p0 + }, + { // Entry 61 + 0x1.a229dffff61e1494787d29ddf23b0a5cp0, + -0x1.12c4p0 + }, + { // Entry 62 + 0x1.a308650a09916a1f65dd2e3040dac8e6p0, + 0x1.1370p0 + }, + { // Entry 63 + 0x1.a308650a09916a1f65dd2e3040dac8e6p0, + -0x1.1370p0 + }, + { // Entry 64 + 0x1.af7c88b59f8cb90273d971210f9ebaf1p0, + 0x1.1cd4p0 + }, + { // Entry 65 + 0x1.af7c88b59f8cb90273d971210f9ebaf1p0, + -0x1.1cd4p0 + }, + { // Entry 66 + 0x1.b145deddd4b7287e0976b134aaea1e59p0, + 0x1.1e24p0 + }, + { // Entry 67 + 0x1.b145deddd4b7287e0976b134aaea1e59p0, + -0x1.1e24p0 + }, + { // Entry 68 + 0x1.000002802632eecaa00848be2e43e7e8p0, + 0x1.1e4004p-11 + }, + { // Entry 69 + 0x1.000002802632eecaa00848be2e43e7e8p0, + -0x1.1e4004p-11 + }, + { // Entry 70 + 0x1.00000280ae0c9376d02c0ee2eec07b9cp0, + 0x1.1e5e62p-11 + }, + { // Entry 71 + 0x1.00000280ae0c9376d02c0ee2eec07b9cp0, + -0x1.1e5e62p-11 + }, + { // Entry 72 + 0x1.000a0d419b4ad7325cced6e3df2432b7p0, + 0x1.1ef4p-6 + }, + { // Entry 73 + 0x1.000a0d419b4ad7325cced6e3df2432b7p0, + -0x1.1ef4p-6 + }, + { // Entry 74 + 0x1.b267ed723f88f82136ba366db2171548p0, + 0x1.1ef8p0 + }, + { // Entry 75 + 0x1.b267ed723f88f82136ba366db2171548p0, + -0x1.1ef8p0 + }, + { // Entry 76 + 0x1.d7fd050e42bfb9da524bda1b668ed20ep24, + 0x1.1f0c1cp4 + }, + { // Entry 77 + 0x1.d7fd050e42bfb9da524bda1b668ed20ep24, + -0x1.1f0c1cp4 + }, + { // Entry 78 + 0x1.02b05b0000fe430b8ec0ab0008934320p0, + 0x1.2892c0p-3 + }, + { // Entry 79 + 0x1.02b05b0000fe430b8ec0ab0008934320p0, + -0x1.2892c0p-3 + }, + { // Entry 80 + 0x1.b56d7b0019ebe1980a88bfc98b96f903p5, + 0x1.2c733cp2 + }, + { // Entry 81 + 0x1.b56d7b0019ebe1980a88bfc98b96f903p5, + -0x1.2c733cp2 + }, + { // Entry 82 + 0x1.2dde070027e555af93bf4b3a296fe1e4p0, + 0x1.2e16d8p-1 + }, + { // Entry 83 + 0x1.2dde070027e555af93bf4b3a296fe1e4p0, + -0x1.2e16d8p-1 + }, + { // Entry 84 + 0x1.0bbbe7000001e6b3b455efdab53e4ee4p0, + 0x1.34de30p-2 + }, + { // Entry 85 + 0x1.0bbbe7000001e6b3b455efdab53e4ee4p0, + -0x1.34de30p-2 + }, + { // Entry 86 + 0x1.d6daeadc0aa386a2df7fee2f9b758bdbp0, + 0x1.38p0 + }, + { // Entry 87 + 0x1.d6daeadc0aa386a2df7fee2f9b758bdbp0, + -0x1.38p0 + }, + { // Entry 88 + 0x1.ec7e880bf432acf0cdb3055c89eca119p0, + 0x1.459506p0 + }, + { // Entry 89 + 0x1.ec7e880bf432acf0cdb3055c89eca119p0, + -0x1.459506p0 + }, + { // Entry 90 + 0x1.9a74150aa235ee7c81eb0c8a84e5756ep2, + 0x1.45cf6ap1 + }, + { // Entry 91 + 0x1.9a74150aa235ee7c81eb0c8a84e5756ep2, + -0x1.45cf6ap1 + }, + { // Entry 92 + 0x1.f7c601c26a0aab07acb3aed129529860p116, + 0x1.4719c6p6 + }, + { // Entry 93 + 0x1.f7c601c26a0aab07acb3aed129529860p116, + -0x1.4719c6p6 + }, + { // Entry 94 + 0x1.feb75137e73fc5511a1cdda1ce6ea73bp116, + 0x1.4727cap6 + }, + { // Entry 95 + 0x1.feb75137e73fc5511a1cdda1ce6ea73bp116, + -0x1.4727cap6 + }, + { // Entry 96 + 0x1.392fe100303ac2c0f653a3ac40bb345ep0, + 0x1.5028p-1 + }, + { // Entry 97 + 0x1.392fe100303ac2c0f653a3ac40bb345ep0, + -0x1.5028p-1 + }, + { // Entry 98 + 0x1.7eca310b2cc18f1b14012b1aba75d191p6, + 0x1.5046a4p2 + }, + { // Entry 99 + 0x1.7eca310b2cc18f1b14012b1aba75d191p6, + -0x1.5046a4p2 + }, + { // Entry 100 + 0x1.03b968ffff0215bfacc70c1cc8cbeb01p0, + 0x1.5cea44p-3 + }, + { // Entry 101 + 0x1.03b968ffff0215bfacc70c1cc8cbeb01p0, + -0x1.5cea44p-3 + }, + { // Entry 102 + 0x1.fbdabac97ac130517ca085001de97a8dp6, + 0x1.625ebcp2 + }, + { // Entry 103 + 0x1.fbdabac97ac130517ca085001de97a8dp6, + -0x1.625ebcp2 + }, + { // Entry 104 + 0x1.ffe308fff60483750a8a66c93e16da96p126, + 0x1.62e3f6p6 + }, + { // Entry 105 + 0x1.ffe308fff60483750a8a66c93e16da96p126, + -0x1.62e3f6p6 + }, + { // Entry 106 + 0x1.0021063836b49dcc89e4c5aab5e911d1p127, + 0x1.62e4b4p6 + }, + { // Entry 107 + 0x1.0021063836b49dcc89e4c5aab5e911d1p127, + -0x1.62e4b4p6 + }, + { // Entry 108 + 0x1.03dd38ffff0116b4128076a495ccd814p0, + 0x1.636444p-3 + }, + { // Entry 109 + 0x1.03dd38ffff0116b4128076a495ccd814p0, + -0x1.636444p-3 + }, + { // Entry 110 + 0x1.3887c59fb04d434e609610c148d9b8cep127, + 0x1.63b080p6 + }, + { // Entry 111 + 0x1.3887c59fb04d434e609610c148d9b8cep127, + -0x1.63b080p6 + }, + { // Entry 112 + 0x1.f40a2c6c7e4eec4c0ed1fae32d255e23p127, + 0x1.6591c4p6 + }, + { // Entry 113 + 0x1.f40a2c6c7e4eec4c0ed1fae32d255e23p127, + -0x1.6591c4p6 + }, + { // Entry 114 + 0x1.ff70ec400b9c2d8dee878e30b56339bep127, + 0x1.65a8dap6 + }, + { // Entry 115 + 0x1.ff70ec400b9c2d8dee878e30b56339bep127, + -0x1.65a8dap6 + }, + { // Entry 116 + 0x1.00fe75ffffa2579f73eddb26932641adp0, + 0x1.68d502p-4 + }, + { // Entry 117 + 0x1.00fe75ffffa2579f73eddb26932641adp0, + -0x1.68d502p-4 + }, + { // Entry 118 + 0x1.00000100034d4d82cc659ba42fd9eee7p0, + 0x1.6a0c3cp-12 + }, + { // Entry 119 + 0x1.00000100034d4d82cc659ba42fd9eee7p0, + -0x1.6a0c3cp-12 + }, + { // Entry 120 + 0x1.0437b0ffff6fc3960703849d04864d19p0, + 0x1.733eaap-3 + }, + { // Entry 121 + 0x1.0437b0ffff6fc3960703849d04864d19p0, + -0x1.733eaap-3 + }, + { // Entry 122 + 0x1.00045900028b76cee4330cc36105004cp0, + 0x1.797124p-7 + }, + { // Entry 123 + 0x1.00045900028b76cee4330cc36105004cp0, + -0x1.797124p-7 + }, + { // Entry 124 + 0x1.11aeed0000fda977f1d894606c13127ep0, + 0x1.7a730cp-2 + }, + { // Entry 125 + 0x1.11aeed0000fda977f1d894606c13127ep0, + -0x1.7a730cp-2 + }, + { // Entry 126 + 0x1.01182efffcd14b33d45c900ed03e5b8dp0, + 0x1.7a9e50p-4 + }, + { // Entry 127 + 0x1.01182efffcd14b33d45c900ed03e5b8dp0, + -0x1.7a9e50p-4 + }, + { // Entry 128 + 0x1.046a6700030d4af8985007e85b4af3a7p0, + 0x1.7bd6b6p-3 + }, + { // Entry 129 + 0x1.046a6700030d4af8985007e85b4af3a7p0, + -0x1.7bd6b6p-3 + }, + { // Entry 130 + 0x1.5df91cfff86f7210fa16368df0698fa9p16, + 0x1.8313eap3 + }, + { // Entry 131 + 0x1.5df91cfff86f7210fa16368df0698fa9p16, + -0x1.8313eap3 + }, + { // Entry 132 + 0x1.049b050001c808a9415533afc7a84886p0, + 0x1.83e5a8p-3 + }, + { // Entry 133 + 0x1.049b050001c808a9415533afc7a84886p0, + -0x1.83e5a8p-3 + }, + { // Entry 134 + 0x1.04b1a500027f89a1b0fe4148983e18a2p0, + 0x1.87970cp-3 + }, + { // Entry 135 + 0x1.04b1a500027f89a1b0fe4148983e18a2p0, + -0x1.87970cp-3 + }, + { // Entry 136 + 0x1.982aa4f9d6ecf2daf29ef6311c7db8e1p16, + 0x1.88p3 + }, + { // Entry 137 + 0x1.982aa4f9d6ecf2daf29ef6311c7db8e1p16, + -0x1.88p3 + }, + { // Entry 138 + 0x1.d501950e8ef23c5acbb78e6bf7a4441cp7, + 0x1.89a39ep2 + }, + { // Entry 139 + 0x1.d501950e8ef23c5acbb78e6bf7a4441cp7, + -0x1.89a39ep2 + }, + { // Entry 140 + 0x1.dab77d041ed5ae09f1194336e1dfeca4p16, + 0x1.8cd558p3 + }, + { // Entry 141 + 0x1.dab77d041ed5ae09f1194336e1dfeca4p16, + -0x1.8cd558p3 + }, + { // Entry 142 + 0x1.0013770002a06bda5ded556406e34a54p0, + 0x1.8f4f3ep-6 + }, + { // Entry 143 + 0x1.0013770002a06bda5ded556406e34a54p0, + -0x1.8f4f3ep-6 + }, + { // Entry 144 + 0x1.014a8c000001724bcf21bcc9cd4ef647p0, + 0x1.9b3716p-4 + }, + { // Entry 145 + 0x1.014a8c000001724bcf21bcc9cd4ef647p0, + -0x1.9b3716p-4 + }, + { // Entry 146 + 0x1.92c1df0aa08c8949d2dbfb61712636eap3, + 0x1.9cb164p1 + }, + { // Entry 147 + 0x1.92c1df0aa08c8949d2dbfb61712636eap3, + -0x1.9cb164p1 + }, + { // Entry 148 + 0x1.5b2598fffffe38fde28ab3e6f6c93922p0, + 0x1.a4299cp-1 + }, + { // Entry 149 + 0x1.5b2598fffffe38fde28ab3e6f6c93922p0, + -0x1.a4299cp-1 + }, + { // Entry 150 + 0x1.056ea5020eb4607e8800e56175b95427p0, + 0x1.a52932p-3 + }, + { // Entry 151 + 0x1.056ea5020eb4607e8800e56175b95427p0, + -0x1.a52932p-3 + }, + { // Entry 152 + 0x1.16928f0000bf926291ed9efa582cceabp0, + 0x1.aaeae4p-2 + }, + { // Entry 153 + 0x1.16928f0000bf926291ed9efa582cceabp0, + -0x1.aaeae4p-2 + }, + { // Entry 154 + 0x1.01731affff02859bd1fc2e3d3d5c6afcp0, + 0x1.b3b0fcp-4 + }, + { // Entry 155 + 0x1.01731affff02859bd1fc2e3d3d5c6afcp0, + -0x1.b3b0fcp-4 + }, + { // Entry 156 + 0x1.fc3b5ac8614a73e8394fe9e1bf341a5dp3, + 0x1.ba8aa8p1 + }, + { // Entry 157 + 0x1.fc3b5ac8614a73e8394fe9e1bf341a5dp3, + -0x1.ba8aa8p1 + }, + { // Entry 158 + 0x1.fcb698cebefbdde087f940e13637b997p3, + 0x1.baa9bep1 + }, + { // Entry 159 + 0x1.fcb698cebefbdde087f940e13637b997p3, + -0x1.baa9bep1 + }, + { // Entry 160 + 0x1.0062890000000a2005177a360b8dafadp0, + 0x1.c12a50p-5 + }, + { // Entry 161 + 0x1.0062890000000a2005177a360b8dafadp0, + -0x1.c12a50p-5 + }, + { // Entry 162 + 0x1.861ce90a2cd945e2796a70034a062f90p1, + 0x1.c78c2cp0 + }, + { // Entry 163 + 0x1.861ce90a2cd945e2796a70034a062f90p1, + -0x1.c78c2cp0 + }, + { // Entry 164 + 0x1.0000196200326194f36f87a9a10954bcp0, + 0x1.c7fffep-10 + }, + { // Entry 165 + 0x1.0000196200326194f36f87a9a10954bcp0, + -0x1.c7fffep-10 + }, + { // Entry 166 + 0x1.1a6044ffff019be7fe431534c1e1e91cp0, + 0x1.ccef52p-2 + }, + { // Entry 167 + 0x1.1a6044ffff019be7fe431534c1e1e91cp0, + -0x1.ccef52p-2 + }, + { // Entry 168 + 0x1.908de10afd9f5aa0badc075a8aa14ccfp1, + 0x1.ceb1c0p0 + }, + { // Entry 169 + 0x1.908de10afd9f5aa0badc075a8aa14ccfp1, + -0x1.ceb1c0p0 + }, + { // Entry 170 + 0x1.a060ab08be7164a09546b5ce15970e38p1, + 0x1.d9239cp0 + }, + { // Entry 171 + 0x1.a060ab08be7164a09546b5ce15970e38p1, + -0x1.d9239cp0 + }, + { // Entry 172 + 0x1.d344e10e8bcea00ac4844a3448be9a5ep9, + 0x1.e21ff0p2 + }, + { // Entry 173 + 0x1.d344e10e8bcea00ac4844a3448be9a5ep9, + -0x1.e21ff0p2 + }, + { // Entry 174 + 0x1.01dbabfffffdc890992101e9e0230177p0, + 0x1.ed342ap-4 + }, + { // Entry 175 + 0x1.01dbabfffffdc890992101e9e0230177p0, + -0x1.ed342ap-4 + }, + { // Entry 176 + 0x1.75caa702ac31fcaca703cb767e704732p21, + 0x1.f4169ap3 + }, + { // Entry 177 + 0x1.75caa702ac31fcaca703cb767e704732p21, + -0x1.f4169ap3 + }, + { // Entry 178 + 0x1.2d11ceffa73d603eca961e07fbcd0749p89, + 0x1.f45dp5 + }, + { // Entry 179 + 0x1.2d11ceffa73d603eca961e07fbcd0749p89, + -0x1.f45dp5 + }, + { // Entry 180 + 0x1.00001f0200613f54e018eaccc7690671p0, + 0x1.f7fffep-10 + }, + { // Entry 181 + 0x1.00001f0200613f54e018eaccc7690671p0, + -0x1.f7fffep-10 + }, + { // Entry 182 + 0x1.fe8bfd38762490c7f68e80a4bdf3a17dp89, + 0x1.f896a2p5 + }, + { // Entry 183 + 0x1.fe8bfd38762490c7f68e80a4bdf3a17dp89, + -0x1.f896a2p5 + }, + { // Entry 184 + 0x1.d6cfcac57d6baaa29de57c93e576abc5p1, + 0x1.f9fffep0 + }, + { // Entry 185 + 0x1.d6cfcac57d6baaa29de57c93e576abc5p1, + -0x1.f9fffep0 + }, + { // Entry 186 + 0x1.ddbfa30e4771719e07c1da78c0971b46p1, + 0x1.fde37ep0 + }, + { // Entry 187 + 0x1.ddbfa30e4771719e07c1da78c0971b46p1, + -0x1.fde37ep0 + }, + { // Entry 188 + 0x1.007f0aff9995a3000c7c95095a06f71dp0, + 0x1.fdfffep-5 + }, + { // Entry 189 + 0x1.007f0aff9995a3000c7c95095a06f71dp0, + -0x1.fdfffep-5 + }, + { // Entry 190 + 0x1.207137000101ef6a6756beb0ea45b857p0, + 0x1.fe3b2ep-2 + }, + { // Entry 191 + 0x1.207137000101ef6a6756beb0ea45b857p0, + -0x1.fe3b2ep-2 + }, + { // Entry 192 + 0x1.6f8f53c3ebac6dfffe8a9b6e088ac07fp10, + 0x1.ff1ffep2 + }, + { // Entry 193 + 0x1.6f8f53c3ebac6dfffe8a9b6e088ac07fp10, + -0x1.ff1ffep2 + }, + { // Entry 194 + 0x1.b261741c4fb3f1036d9f845f3564af2dp4, + 0x1.ff3ffep1 + }, + { // Entry 195 + 0x1.b261741c4fb3f1036d9f845f3564af2dp4, + -0x1.ff3ffep1 + }, + { // Entry 196 + 0x1.3d59d2d8b22b41c2bb6334c9be7be902p91, + 0x1.ffdffep5 + }, + { // Entry 197 + 0x1.3d59d2d8b22b41c2bb6334c9be7be902p91, + -0x1.ffdffep5 + }, + { // Entry 198 + 0x1.e1559d035ec13f82913aeeb61fab20d4p1, + 0x1.ffe0p0 + }, + { // Entry 199 + 0x1.e1559d035ec13f82913aeeb61fab20d4p1, + -0x1.ffe0p0 + }, + { // Entry 200 + 0x1.1f0508e3c8278fe10a2e8c9020c8176dp45, + 0x1.fffc7ep4 + }, + { // Entry 201 + 0x1.1f0508e3c8278fe10a2e8c9020c8176dp45, + -0x1.fffc7ep4 + }, + { // Entry 202 + 0x1.0f13feffff8e14e72398e58d6258a1dcp22, + 0x1.fffcd8p3 + }, + { // Entry 203 + 0x1.0f13feffff8e14e72398e58d6258a1dcp22, + -0x1.fffcd8p3 + }, + { // Entry 204 + 0x1.e18dcd02b202413a4a76037efe716feep1, + 0x1.fffefep0 + }, + { // Entry 205 + 0x1.e18dcd02b202413a4a76037efe716feep1, + -0x1.fffefep0 + }, + { // Entry 206 + 0x1.1f3661fed887e1ea6b1c49c86e62c65cp45, + 0x1.ffff3ep4 + }, + { // Entry 207 + 0x1.1f3661fed887e1ea6b1c49c86e62c65cp45, + -0x1.ffff3ep4 + }, + { // Entry 208 + 0x1.20ac14ff94619db4d2e40af1cf118f50p0, + 0x1.ffffe6p-2 + }, + { // Entry 209 + 0x1.20ac14ff94619db4d2e40af1cf118f50p0, + -0x1.ffffe6p-2 + }, + { // Entry 210 + 0x1.000001fffff8aaaaad6c16d05ca5ba42p0, + 0x1.fffffcp-12 + }, + { // Entry 211 + 0x1.000001fffff8aaaaad6c16d05ca5ba42p0, + -0x1.fffffcp-12 + }, + { // Entry 212 + 0x1.1c74a6ffff27037aed89be799ae87d89p0, + 0x1.de7314p-2 + }, + { // Entry 213 + 0x1.1c74a6ffff27037aed89be799ae87d89p0, + -0x1.de7314p-2 + }, + { // Entry 214 + 0x1.p0, + 0.0 + }, + { // Entry 215 + 0x1.00a7413964dddf629669c3500f708459p0, + 0x1.24924ap-4 + }, + { // Entry 216 + 0x1.00a7413964dddf629669c3500f708459p0, + -0x1.24924ap-4 + }, + { // Entry 217 + 0x1.029ddf71e67714aabadecb6c34881466p0, + 0x1.24924ap-3 + }, + { // Entry 218 + 0x1.029ddf71e67714aabadecb6c34881466p0, + -0x1.24924ap-3 + }, + { // Entry 219 + 0x1.05e66b72f920ca534e1daa0b86a4e7ebp0, + 0x1.b6db70p-3 + }, + { // Entry 220 + 0x1.05e66b72f920ca534e1daa0b86a4e7ebp0, + -0x1.b6db70p-3 + }, + { // Entry 221 + 0x1.0a852f7ad288abd0695c503777bc0195p0, + 0x1.24924ap-2 + }, + { // Entry 222 + 0x1.0a852f7ad288abd0695c503777bc0195p0, + -0x1.24924ap-2 + }, + { // Entry 223 + 0x1.10803510fe36a3f7c842ab6a75c8b006p0, + 0x1.6db6dcp-2 + }, + { // Entry 224 + 0x1.10803510fe36a3f7c842ab6a75c8b006p0, + -0x1.6db6dcp-2 + }, + { // Entry 225 + 0x1.17df4cc2d21000190b5383b6becd7becp0, + 0x1.b6db6ep-2 + }, + { // Entry 226 + 0x1.17df4cc2d21000190b5383b6becd7becp0, + -0x1.b6db6ep-2 + }, + { // Entry 227 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + 0x1.p-1 + }, + { // Entry 228 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + -0x1.p-1 + }, + { // Entry 229 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + 0x1.p-1 + }, + { // Entry 230 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + -0x1.p-1 + }, + { // Entry 231 + 0x1.2af217eb37e2369650003997bb02d72cp0, + 0x1.24924ap-1 + }, + { // Entry 232 + 0x1.2af217eb37e2369650003997bb02d72cp0, + -0x1.24924ap-1 + }, + { // Entry 233 + 0x1.36beb7b3f8f237e48efcda7fba85def5p0, + 0x1.492494p-1 + }, + { // Entry 234 + 0x1.36beb7b3f8f237e48efcda7fba85def5p0, + -0x1.492494p-1 + }, + { // Entry 235 + 0x1.442162b93f2d4967b2bac87d988998cap0, + 0x1.6db6dep-1 + }, + { // Entry 236 + 0x1.442162b93f2d4967b2bac87d988998cap0, + -0x1.6db6dep-1 + }, + { // Entry 237 + 0x1.532b9688fe84749d71a9627934d00a05p0, + 0x1.924928p-1 + }, + { // Entry 238 + 0x1.532b9688fe84749d71a9627934d00a05p0, + -0x1.924928p-1 + }, + { // Entry 239 + 0x1.63f0fa1d8b27abf7928a83538f1fb402p0, + 0x1.b6db72p-1 + }, + { // Entry 240 + 0x1.63f0fa1d8b27abf7928a83538f1fb402p0, + -0x1.b6db72p-1 + }, + { // Entry 241 + 0x1.7687778b78c8571fbd5f4165fc052aefp0, + 0x1.db6dbcp-1 + }, + { // Entry 242 + 0x1.7687778b78c8571fbd5f4165fc052aefp0, + -0x1.db6dbcp-1 + }, + { // Entry 243 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.p0 + }, + { // Entry 244 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.p0 + }, + { // Entry 245 + 0x1.p0, + 0.0 + }, + { // Entry 246 + 0x1.0009a148a4a36317b768fa180d3b7eb3p0, + 0x1.18de5ap-6 + }, + { // Entry 247 + 0x1.0009a148a4a36317b768fa180d3b7eb3p0, + -0x1.18de5ap-6 + }, + { // Entry 248 + 0x1.002685dc0bfd9abdddd455b13ea887d9p0, + 0x1.18de5ap-5 + }, + { // Entry 249 + 0x1.002685dc0bfd9abdddd455b13ea887d9p0, + -0x1.18de5ap-5 + }, + { // Entry 250 + 0x1.0056afe719b255038e559e394cf4b79ep0, + 0x1.a54d88p-5 + }, + { // Entry 251 + 0x1.0056afe719b255038e559e394cf4b79ep0, + -0x1.a54d88p-5 + }, + { // Entry 252 + 0x1.009a2308369a4cbf9683178ebb9d9c79p0, + 0x1.18de5ap-4 + }, + { // Entry 253 + 0x1.009a2308369a4cbf9683178ebb9d9c79p0, + -0x1.18de5ap-4 + }, + { // Entry 254 + 0x1.00f0e45304846d3a9b651810b40ff363p0, + 0x1.5f15f0p-4 + }, + { // Entry 255 + 0x1.00f0e45304846d3a9b651810b40ff363p0, + -0x1.5f15f0p-4 + }, + { // Entry 256 + 0x1.015afa4e6af7cc67145b966628015d41p0, + 0x1.a54d86p-4 + }, + { // Entry 257 + 0x1.015afa4e6af7cc67145b966628015d41p0, + -0x1.a54d86p-4 + }, + { // Entry 258 + 0x1.01d86cf5a15f8cd3898947526a322461p0, + 0x1.eb851cp-4 + }, + { // Entry 259 + 0x1.01d86cf5a15f8cd3898947526a322461p0, + -0x1.eb851cp-4 + }, + { // Entry 260 + 0x1.01d86cf97ac630fce74cd5d5243b3b2fp0, + 0x1.eb851ep-4 + }, + { // Entry 261 + 0x1.01d86cf97ac630fce74cd5d5243b3b2fp0, + -0x1.eb851ep-4 + }, + { // Entry 262 + 0x1.02068cf11e341bea4584e926b9b87a5cp0, + 0x1.01767ep-3 + }, + { // Entry 263 + 0x1.02068cf11e341bea4584e926b9b87a5cp0, + -0x1.01767ep-3 + }, + { // Entry 264 + 0x1.0236d50ea15f24974c4f2f784695f8f3p0, + 0x1.0d2a6cp-3 + }, + { // Entry 265 + 0x1.0236d50ea15f24974c4f2f784695f8f3p0, + -0x1.0d2a6cp-3 + }, + { // Entry 266 + 0x1.026945bd2fc314aa539bd2b0a1344e6ap0, + 0x1.18de5ap-3 + }, + { // Entry 267 + 0x1.026945bd2fc314aa539bd2b0a1344e6ap0, + -0x1.18de5ap-3 + }, + { // Entry 268 + 0x1.029ddf68b9ecab97a543140ab7bc196ap0, + 0x1.249248p-3 + }, + { // Entry 269 + 0x1.029ddf68b9ecab97a543140ab7bc196ap0, + -0x1.249248p-3 + }, + { // Entry 270 + 0x1.02d4a281cfc743376f69f8b9b0167a5ep0, + 0x1.304636p-3 + }, + { // Entry 271 + 0x1.02d4a281cfc743376f69f8b9b0167a5ep0, + -0x1.304636p-3 + }, + { // Entry 272 + 0x1.030d8f7da18db0864f478300e780a951p0, + 0x1.3bfa24p-3 + }, + { // Entry 273 + 0x1.030d8f7da18db0864f478300e780a951p0, + -0x1.3bfa24p-3 + }, + { // Entry 274 + 0x1.0348a6d600c50ac4ab832e474121e8b1p0, + 0x1.47ae12p-3 + }, + { // Entry 275 + 0x1.0348a6d600c50ac4ab832e474121e8b1p0, + -0x1.47ae12p-3 + }, + { // Entry 276 + 0x1.0348a6e049689d30b2d20b0135f3fee4p0, + 0x1.47ae14p-3 + }, + { // Entry 277 + 0x1.0348a6e049689d30b2d20b0135f3fee4p0, + -0x1.47ae14p-3 + }, + { // Entry 278 + 0x1.0a19d6dfd42b9ebd573de2bdeff3362ep0, + 0x1.1eb852p-2 + }, + { // Entry 279 + 0x1.0a19d6dfd42b9ebd573de2bdeff3362ep0, + -0x1.1eb852p-2 + }, + { // Entry 280 + 0x1.14c128bc2baac3f4f83f16b43fc69324p0, + 0x1.99999ap-2 + }, + { // Entry 281 + 0x1.14c128bc2baac3f4f83f16b43fc69324p0, + -0x1.99999ap-2 + }, + { // Entry 282 + 0x1.2365ee3fd57c998640a3796967b6c022p0, + 0x1.0a3d70p-1 + }, + { // Entry 283 + 0x1.2365ee3fd57c998640a3796967b6c022p0, + -0x1.0a3d70p-1 + }, + { // Entry 284 + 0x1.363e33f5565998f1b5221773f03eea8bp0, + 0x1.47ae14p-1 + }, + { // Entry 285 + 0x1.363e33f5565998f1b5221773f03eea8bp0, + -0x1.47ae14p-1 + }, + { // Entry 286 + 0x1.4d8f8734eeb43c686239fc3930bfba17p0, + 0x1.851eb8p-1 + }, + { // Entry 287 + 0x1.4d8f8734eeb43c686239fc3930bfba17p0, + -0x1.851eb8p-1 + }, + { // Entry 288 + 0x1.69aff7bc5d60108b348ed38b803eb445p0, + 0x1.c28f5cp-1 + }, + { // Entry 289 + 0x1.69aff7bc5d60108b348ed38b803eb445p0, + -0x1.c28f5cp-1 + }, + { // Entry 290 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.p0 + }, + { // Entry 291 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.p0 + }, + { // Entry 292 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.p0 + }, + { // Entry 293 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.p0 + }, + { // Entry 294 + 0x1.96953e5f15bebb0924d95e56e73390d3p3, + 0x1.9de826p1 + }, + { // Entry 295 + 0x1.96953e5f15bebb0924d95e56e73390d3p3, + -0x1.9de826p1 + }, + { // Entry 296 + 0x1.d9a541d64593911611959440ebb98fd2p6, + 0x1.5de826p2 + }, + { // Entry 297 + 0x1.d9a541d64593911611959440ebb98fd2p6, + -0x1.5de826p2 + }, + { // Entry 298 + 0x1.144daf73b05567a8ab0aec06359687bap10, + 0x1.ecdc38p2 + }, + { // Entry 299 + 0x1.144daf73b05567a8ab0aec06359687bap10, + -0x1.ecdc38p2 + }, + { // Entry 300 + 0x1.425f2a5819d974b4f9180a62110d48cbp13, + 0x1.3de826p3 + }, + { // Entry 301 + 0x1.425f2a5819d974b4f9180a62110d48cbp13, + -0x1.3de826p3 + }, + { // Entry 302 + 0x1.781f001bd3e350656b057368a4313822p16, + 0x1.856230p3 + }, + { // Entry 303 + 0x1.781f001bd3e350656b057368a4313822p16, + -0x1.856230p3 + }, + { // Entry 304 + 0x1.b6d506c59eb76d627415a6c9ee480b4fp19, + 0x1.ccdc3ap3 + }, + { // Entry 305 + 0x1.b6d506c59eb76d627415a6c9ee480b4fp19, + -0x1.ccdc3ap3 + }, + { // Entry 306 + 0x1.ffffc188aceab11124fe9a02b928f7d8p22, + 0x1.0a2b22p4 + }, + { // Entry 307 + 0x1.ffffc188aceab11124fe9a02b928f7d8p22, + -0x1.0a2b22p4 + }, + { // Entry 308 + 0x1.ffffc107c9f093819e76e37c08510f7cp14, + 0x1.62e42cp3 + }, + { // Entry 309 + 0x1.ffffc107c9f093819e76e37c08510f7cp14, + -0x1.62e42cp3 + }, + { // Entry 310 + 0x1.ffffe107c700d006790970a8222e21d8p14, + 0x1.62e42ep3 + }, + { // Entry 311 + 0x1.ffffe107c700d006790970a8222e21d8p14, + -0x1.62e42ep3 + }, + { // Entry 312 + 0x1.00000083e30886362db194a7754d1c73p15, + 0x1.62e430p3 + }, + { // Entry 313 + 0x1.00000083e30886362db194a7754d1c73p15, + -0x1.62e430p3 + }, + { // Entry 314 + 0x1.0000f04181beb2dc0da3230eba1ddad8p7, + 0x1.62e42cp2 + }, + { // Entry 315 + 0x1.0000f04181beb2dc0da3230eba1ddad8p7, + -0x1.62e42cp2 + }, + { // Entry 316 + 0x1.0000f8417960be0c77cfbad2eff76201p7, + 0x1.62e42ep2 + }, + { // Entry 317 + 0x1.0000f8417960be0c77cfbad2eff76201p7, + -0x1.62e42ep2 + }, + { // Entry 318 + 0x1.000100417142c97af25aac1bff8f3466p7, + 0x1.62e430p2 + }, + { // Entry 319 + 0x1.000100417142c97af25aac1bff8f3466p7, + -0x1.62e430p2 + }, + { // Entry 320 + 0x1.00fff82898287284d209c2639aecd8ebp3, + 0x1.62e42cp1 + }, + { // Entry 321 + 0x1.00fff82898287284d209c2639aecd8ebp3, + -0x1.62e42cp1 + }, + { // Entry 322 + 0x1.00fffc249810ddeb04d17e9fa71cc514p3, + 0x1.62e42ep1 + }, + { // Entry 323 + 0x1.00fffc249810ddeb04d17e9fa71cc514p3, + -0x1.62e42ep1 + }, + { // Entry 324 + 0x1.0100002098095950f9e2bbfefca756b6p3, + 0x1.62e430p1 + }, + { // Entry 325 + 0x1.0100002098095950f9e2bbfefca756b6p3, + -0x1.62e430p1 + }, + { // Entry 326 + 0x1.0ffffc4f56a336e3739f7e70b0a17ffcp1, + 0x1.62e42cp0 + }, + { // Entry 327 + 0x1.0ffffc4f56a336e3739f7e70b0a17ffcp1, + -0x1.62e42cp0 + }, + { // Entry 328 + 0x1.0ffffe2f569cf9a7ca3f579d60a5bafap1, + 0x1.62e42ep0 + }, + { // Entry 329 + 0x1.0ffffe2f569cf9a7ca3f579d60a5bafap1, + -0x1.62e42ep0 + }, + { // Entry 330 + 0x1.1000000f569afc6c199c8b3f61f3c735p1, + 0x1.62e430p0 + }, + { // Entry 331 + 0x1.1000000f569afc6c199c8b3f61f3c735p1, + -0x1.62e430p0 + }, + { // Entry 332 + 0x1.3ffffe8622a6d075816c2559de31a12ep0, + 0x1.62e42cp-1 + }, + { // Entry 333 + 0x1.3ffffe8622a6d075816c2559de31a12ep0, + -0x1.62e42cp-1 + }, + { // Entry 334 + 0x1.3fffff4622a4faaf3eeaf3be7155a93cp0, + 0x1.62e42ep-1 + }, + { // Entry 335 + 0x1.3fffff4622a4faaf3eeaf3be7155a93cp0, + -0x1.62e42ep-1 + }, + { // Entry 336 + 0x1.4000000622a464e8fbafe4c819d39acfp0, + 0x1.62e430p-1 + }, + { // Entry 337 + 0x1.4000000622a464e8fbafe4c819d39acfp0, + -0x1.62e430p-1 + }, + { // Entry 338 + 0x1.0f876c74e688b38ec8cc993bed72c369p0, + 0x1.62e42cp-2 + }, + { // Entry 339 + 0x1.0f876c74e688b38ec8cc993bed72c369p0, + -0x1.62e42cp-2 + }, + { // Entry 340 + 0x1.0f876ca227c51ce5c5f21e4840d6475ap0, + 0x1.62e42ep-2 + }, + { // Entry 341 + 0x1.0f876ca227c51ce5c5f21e4840d6475ap0, + -0x1.62e42ep-2 + }, + { // Entry 342 + 0x1.0f876ccf6901ca1e9e402d45dcdd46afp0, + 0x1.62e430p-2 + }, + { // Entry 343 + 0x1.0f876ccf6901ca1e9e402d45dcdd46afp0, + -0x1.62e430p-2 + }, + { // Entry 344 + 0x1.03da6ea1097c3f9cd57e7b65bc92ecc4p0, + 0x1.62e42cp-3 + }, + { // Entry 345 + 0x1.03da6ea1097c3f9cd57e7b65bc92ecc4p0, + -0x1.62e42cp-3 + }, + { // Entry 346 + 0x1.03da6eac2ed8a2cdd0fa87a50311cc5dp0, + 0x1.62e42ep-3 + }, + { // Entry 347 + 0x1.03da6eac2ed8a2cdd0fa87a50311cc5dp0, + -0x1.62e42ep-3 + }, + { // Entry 348 + 0x1.03da6eb75435163c736156d1d3d3308ep0, + 0x1.62e430p-3 + }, + { // Entry 349 + 0x1.03da6eb75435163c736156d1d3d3308ep0, + -0x1.62e430p-3 + }, + { // Entry 350 + 0x1.00f62552627bf74a0ad4ba77e8ab78a2p0, + 0x1.62e42cp-4 + }, + { // Entry 351 + 0x1.00f62552627bf74a0ad4ba77e8ab78a2p0, + -0x1.62e42cp-4 + }, + { // Entry 352 + 0x1.00f625552927bf649d646b851be50016p0, + 0x1.62e42ep-4 + }, + { // Entry 353 + 0x1.00f625552927bf649d646b851be50016p0, + -0x1.62e42ep-4 + }, + { // Entry 354 + 0x1.00f62557efd38b8308897136ee1d709ep0, + 0x1.62e430p-4 + }, + { // Entry 355 + 0x1.00f62557efd38b8308897136ee1d709ep0, + -0x1.62e430p-4 + }, + { // Entry 356 + 0x1.003d81f101375095ca54e321283ef77bp0, + 0x1.62e42cp-5 + }, + { // Entry 357 + 0x1.003d81f101375095ca54e321283ef77bp0, + -0x1.62e42cp-5 + }, + { // Entry 358 + 0x1.003d81f1b2b79cf13e8af72bdc1a3a96p0, + 0x1.62e42ep-5 + }, + { // Entry 359 + 0x1.003d81f1b2b79cf13e8af72bdc1a3a96p0, + -0x1.62e42ep-5 + }, + { // Entry 360 + 0x1.003d81f26437ea4cf042fce94792844bp0, + 0x1.62e430p-5 + }, + { // Entry 361 + 0x1.003d81f26437ea4cf042fce94792844bp0, + -0x1.62e430p-5 + }, + { // Entry 362 + 0x1.000f60060df0bdbdb94a9aa61dfeb8e8p0, + 0x1.62e42cp-6 + }, + { // Entry 363 + 0x1.000f60060df0bdbdb94a9aa61dfeb8e8p0, + -0x1.62e42cp-6 + }, + { // Entry 364 + 0x1.000f60063a4e26b757e72d4936a13599p0, + 0x1.62e42ep-6 + }, + { // Entry 365 + 0x1.000f60063a4e26b757e72d4936a13599p0, + -0x1.62e42ep-6 + }, + { // Entry 366 + 0x1.000f600666ab8ff0fa5bc17ae2cd6176p0, + 0x1.62e430p-6 + }, + { // Entry 367 + 0x1.000f600666ab8ff0fa5bc17ae2cd6176p0, + -0x1.62e430p-6 + }, + { // Entry 368 + 0x1.00000105c611505e7f74a30e6d20e850p31, + -0x1.62e430p4 + }, + { // Entry 369 + 0x1.00000105c611505e7f74a30e6d20e850p31, + 0x1.62e430p4 + }, + { // Entry 370 + 0x1.ffffc20b8fe12f121740ea8acb959525p30, + -0x1.62e42ep4 + }, + { // Entry 371 + 0x1.ffffc20b8fe12f121740ea8acb959525p30, + 0x1.62e42ep4 + }, + { // Entry 372 + 0x1.ffff820b9b9fbc6f5ddabe5f5d55c831p30, + -0x1.62e42cp4 + }, + { // Entry 373 + 0x1.ffff820b9b9fbc6f5ddabe5f5d55c831p30, + 0x1.62e42cp4 + }, + { // Entry 374 + 0x1.00000083e30886362db194a7754d1c73p15, + -0x1.62e430p3 + }, + { // Entry 375 + 0x1.00000083e30886362db194a7754d1c73p15, + 0x1.62e430p3 + }, + { // Entry 376 + 0x1.ffffe107c700d006790970a8222e21d8p14, + -0x1.62e42ep3 + }, + { // Entry 377 + 0x1.ffffe107c700d006790970a8222e21d8p14, + 0x1.62e42ep3 + }, + { // Entry 378 + 0x1.ffffc107c9f093819e76e37c08510f7cp14, + -0x1.62e42cp3 + }, + { // Entry 379 + 0x1.ffffc107c9f093819e76e37c08510f7cp14, + 0x1.62e42cp3 + }, + { // Entry 380 + 0x1.000100417142c97af25aac1bff8f3466p7, + -0x1.62e430p2 + }, + { // Entry 381 + 0x1.000100417142c97af25aac1bff8f3466p7, + 0x1.62e430p2 + }, + { // Entry 382 + 0x1.0000f8417960be0c77cfbad2eff76201p7, + -0x1.62e42ep2 + }, + { // Entry 383 + 0x1.0000f8417960be0c77cfbad2eff76201p7, + 0x1.62e42ep2 + }, + { // Entry 384 + 0x1.0000f04181beb2dc0da3230eba1ddad8p7, + -0x1.62e42cp2 + }, + { // Entry 385 + 0x1.0000f04181beb2dc0da3230eba1ddad8p7, + 0x1.62e42cp2 + }, + { // Entry 386 + 0x1.0100002098095950f9e2bbfefca756b6p3, + -0x1.62e430p1 + }, + { // Entry 387 + 0x1.0100002098095950f9e2bbfefca756b6p3, + 0x1.62e430p1 + }, + { // Entry 388 + 0x1.00fffc249810ddeb04d17e9fa71cc514p3, + -0x1.62e42ep1 + }, + { // Entry 389 + 0x1.00fffc249810ddeb04d17e9fa71cc514p3, + 0x1.62e42ep1 + }, + { // Entry 390 + 0x1.00fff82898287284d209c2639aecd8ebp3, + -0x1.62e42cp1 + }, + { // Entry 391 + 0x1.00fff82898287284d209c2639aecd8ebp3, + 0x1.62e42cp1 + }, + { // Entry 392 + 0x1.1000000f569afc6c199c8b3f61f3c735p1, + -0x1.62e430p0 + }, + { // Entry 393 + 0x1.1000000f569afc6c199c8b3f61f3c735p1, + 0x1.62e430p0 + }, + { // Entry 394 + 0x1.0ffffe2f569cf9a7ca3f579d60a5bafap1, + -0x1.62e42ep0 + }, + { // Entry 395 + 0x1.0ffffe2f569cf9a7ca3f579d60a5bafap1, + 0x1.62e42ep0 + }, + { // Entry 396 + 0x1.0ffffc4f56a336e3739f7e70b0a17ffcp1, + -0x1.62e42cp0 + }, + { // Entry 397 + 0x1.0ffffc4f56a336e3739f7e70b0a17ffcp1, + 0x1.62e42cp0 + }, + { // Entry 398 + 0x1.4000000622a464e8fbafe4c819d39acfp0, + -0x1.62e430p-1 + }, + { // Entry 399 + 0x1.4000000622a464e8fbafe4c819d39acfp0, + 0x1.62e430p-1 + }, + { // Entry 400 + 0x1.3fffff4622a4faaf3eeaf3be7155a93cp0, + -0x1.62e42ep-1 + }, + { // Entry 401 + 0x1.3fffff4622a4faaf3eeaf3be7155a93cp0, + 0x1.62e42ep-1 + }, + { // Entry 402 + 0x1.3ffffe8622a6d075816c2559de31a12ep0, + -0x1.62e42cp-1 + }, + { // Entry 403 + 0x1.3ffffe8622a6d075816c2559de31a12ep0, + 0x1.62e42cp-1 + }, + { // Entry 404 + 0x1.0f876ccf6901ca1e9e402d45dcdd46afp0, + -0x1.62e430p-2 + }, + { // Entry 405 + 0x1.0f876ccf6901ca1e9e402d45dcdd46afp0, + 0x1.62e430p-2 + }, + { // Entry 406 + 0x1.0f876ca227c51ce5c5f21e4840d6475ap0, + -0x1.62e42ep-2 + }, + { // Entry 407 + 0x1.0f876ca227c51ce5c5f21e4840d6475ap0, + 0x1.62e42ep-2 + }, + { // Entry 408 + 0x1.0f876c74e688b38ec8cc993bed72c369p0, + -0x1.62e42cp-2 + }, + { // Entry 409 + 0x1.0f876c74e688b38ec8cc993bed72c369p0, + 0x1.62e42cp-2 + }, + { // Entry 410 + 0x1.03da6eb75435163c736156d1d3d3308ep0, + -0x1.62e430p-3 + }, + { // Entry 411 + 0x1.03da6eb75435163c736156d1d3d3308ep0, + 0x1.62e430p-3 + }, + { // Entry 412 + 0x1.03da6eac2ed8a2cdd0fa87a50311cc5dp0, + -0x1.62e42ep-3 + }, + { // Entry 413 + 0x1.03da6eac2ed8a2cdd0fa87a50311cc5dp0, + 0x1.62e42ep-3 + }, + { // Entry 414 + 0x1.03da6ea1097c3f9cd57e7b65bc92ecc4p0, + -0x1.62e42cp-3 + }, + { // Entry 415 + 0x1.03da6ea1097c3f9cd57e7b65bc92ecc4p0, + 0x1.62e42cp-3 + }, + { // Entry 416 + 0x1.00f62557efd38b8308897136ee1d709ep0, + -0x1.62e430p-4 + }, + { // Entry 417 + 0x1.00f62557efd38b8308897136ee1d709ep0, + 0x1.62e430p-4 + }, + { // Entry 418 + 0x1.00f625552927bf649d646b851be50016p0, + -0x1.62e42ep-4 + }, + { // Entry 419 + 0x1.00f625552927bf649d646b851be50016p0, + 0x1.62e42ep-4 + }, + { // Entry 420 + 0x1.00f62552627bf74a0ad4ba77e8ab78a2p0, + -0x1.62e42cp-4 + }, + { // Entry 421 + 0x1.00f62552627bf74a0ad4ba77e8ab78a2p0, + 0x1.62e42cp-4 + }, + { // Entry 422 + 0x1.003d81f26437ea4cf042fce94792844bp0, + -0x1.62e430p-5 + }, + { // Entry 423 + 0x1.003d81f26437ea4cf042fce94792844bp0, + 0x1.62e430p-5 + }, + { // Entry 424 + 0x1.003d81f1b2b79cf13e8af72bdc1a3a96p0, + -0x1.62e42ep-5 + }, + { // Entry 425 + 0x1.003d81f1b2b79cf13e8af72bdc1a3a96p0, + 0x1.62e42ep-5 + }, + { // Entry 426 + 0x1.003d81f101375095ca54e321283ef77bp0, + -0x1.62e42cp-5 + }, + { // Entry 427 + 0x1.003d81f101375095ca54e321283ef77bp0, + 0x1.62e42cp-5 + }, + { // Entry 428 + 0x1.p0, + -0x1.p-149 + }, + { // Entry 429 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 430 + 0x1.p0, + 0.0 + }, + { // Entry 431 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 432 + 0x1.p0, + -0x1.p-149 + }, + { // Entry 433 + 0x1.01d86cf5a15f8cd3898947526a322461p0, + 0x1.eb851cp-4 + }, + { // Entry 434 + 0x1.01d86cf5a15f8cd3898947526a322461p0, + -0x1.eb851cp-4 + }, + { // Entry 435 + 0x1.01d86cf97ac630fce74cd5d5243b3b2fp0, + 0x1.eb851ep-4 + }, + { // Entry 436 + 0x1.01d86cf97ac630fce74cd5d5243b3b2fp0, + -0x1.eb851ep-4 + }, + { // Entry 437 + 0x1.01d86cfd542cd92da6c44a42f7099d65p0, + 0x1.eb8520p-4 + }, + { // Entry 438 + 0x1.01d86cfd542cd92da6c44a42f7099d65p0, + -0x1.eb8520p-4 + }, + { // Entry 439 + 0x1.20ac181ffb4ceac216e8b489c48dd3dfp0, + 0x1.fffffep-2 + }, + { // Entry 440 + 0x1.20ac181ffb4ceac216e8b489c48dd3dfp0, + -0x1.fffffep-2 + }, + { // Entry 441 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + 0x1.p-1 + }, + { // Entry 442 + 0x1.20ac1862ae8d0645823a4f060800e88cp0, + -0x1.p-1 + }, + { // Entry 443 + 0x1.20ac18e8150e15cd6b3833b87109804fp0, + 0x1.000002p-1 + }, + { // Entry 444 + 0x1.20ac18e8150e15cd6b3833b87109804fp0, + -0x1.000002p-1 + }, + { // Entry 445 + 0x1.8b0753f0c559855acf5f13552a0c357bp0, + 0x1.fffffep-1 + }, + { // Entry 446 + 0x1.8b0753f0c559855acf5f13552a0c357bp0, + -0x1.fffffep-1 + }, + { // Entry 447 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.p0 + }, + { // Entry 448 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.p0 + }, + { // Entry 449 + 0x1.8b0757775350a4a8993fc156eb4fc808p0, + 0x1.000002p0 + }, + { // Entry 450 + 0x1.8b0757775350a4a8993fc156eb4fc808p0, + -0x1.000002p0 + }, + { // Entry 451 + 0x1.ab5aa630eb432545b54cdaf7f455210cp30, + 0x1.5ffffep4 + }, + { // Entry 452 + 0x1.ab5aa630eb432545b54cdaf7f455210cp30, + -0x1.5ffffep4 + }, + { // Entry 453 + 0x1.ab5adb9c435ff81e18afca372828a676p30, + 0x1.60p4 + }, + { // Entry 454 + 0x1.ab5adb9c435ff81e18afca372828a676p30, + -0x1.60p4 + }, + { // Entry 455 + 0x1.ab5b1107a22a3664ed2273254e849a81p30, + 0x1.600002p4 + }, + { // Entry 456 + 0x1.ab5b1107a22a3664ed2273254e849a81p30, + -0x1.600002p4 + }, + { // Entry 457 + 0x1.226aceedc3b97c2a7eac95e7562be263p32, + 0x1.6ffffep4 + }, + { // Entry 458 + 0x1.226aceedc3b97c2a7eac95e7562be263p32, + -0x1.6ffffep4 + }, + { // Entry 459 + 0x1.226af33b1fdc0a57bd4b4ab2311b5cdfp32, + 0x1.70p4 + }, + { // Entry 460 + 0x1.226af33b1fdc0a57bd4b4ab2311b5cdfp32, + -0x1.70p4 + }, + { // Entry 461 + 0x1.226b178880884451e86af2dfaf4ed9e0p32, + 0x1.700002p4 + }, + { // Entry 462 + 0x1.226b178880884451e86af2dfaf4ed9e0p32, + -0x1.700002p4 + }, + { // Entry 463 + 0x1.ffff8188b8b99accb59239a999795cedp22, + 0x1.0a2b20p4 + }, + { // Entry 464 + 0x1.ffff8188b8b99accb59239a999795cedp22, + -0x1.0a2b20p4 + }, + { // Entry 465 + 0x1.ffffc188aceab11124fe9a02b928f7d8p22, + 0x1.0a2b22p4 + }, + { // Entry 466 + 0x1.ffffc188aceab11124fe9a02b928f7d8p22, + -0x1.0a2b22p4 + }, + { // Entry 467 + 0x1.000000c4548de32ddb90a7e53a66ba0ap23, + 0x1.0a2b24p4 + }, + { // Entry 468 + 0x1.000000c4548de32ddb90a7e53a66ba0ap23, + -0x1.0a2b24p4 + }, + { // Entry 469 + 0x1.ffffc2c458b36e7e18cb1f214e7b10ffp10, + 0x1.0a2b20p3 + }, + { // Entry 470 + 0x1.ffffc2c458b36e7e18cb1f214e7b10ffp10, + -0x1.0a2b20p3 + }, + { // Entry 471 + 0x1.ffffe2c4559fb3e81fbe2bbb12e12ae1p10, + 0x1.0a2b22p3 + }, + { // Entry 472 + 0x1.ffffe2c4559fb3e81fbe2bbb12e12ae1p10, + -0x1.0a2b22p3 + }, + { // Entry 473 + 0x1.000001622a45fc9a75838159b3d10509p11, + 0x1.0a2b24p3 + }, + { // Entry 474 + 0x1.000001622a45fc9a75838159b3d10509p11, + -0x1.0a2b24p3 + }, + { // Entry 475 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + 0x1.65a9f6p6 + }, + { // Entry 476 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + -0x1.65a9f6p6 + }, + { // Entry 477 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 478 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 479 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 480 + HUGE_VALF, + -0x1.65a9fap6 + }, + { // Entry 481 + HUGE_VALF, + -0x1.65a9fap6 + }, + { // Entry 482 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 483 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 484 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 485 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + -0x1.65a9f6p6 + }, + { // Entry 486 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + 0x1.65a9f6p6 + }, + { // Entry 487 + 0x1.0000000000000007fffff0000008000ap0, + 0x1.fffffep-31 + }, + { // Entry 488 + 0x1.0000000000000007fffff0000008000ap0, + -0x1.fffffep-31 + }, + { // Entry 489 + 0x1.0000000000000008000000000000000ap0, + 0x1.p-30 + }, + { // Entry 490 + 0x1.0000000000000008000000000000000ap0, + -0x1.p-30 + }, + { // Entry 491 + 0x1.0000000000000008000020000020000ap0, + 0x1.000002p-30 + }, + { // Entry 492 + 0x1.0000000000000008000020000020000ap0, + -0x1.000002p-30 + }, + { // Entry 493 + 0x1.00000001fffffc00aaaca80016c56b8ep0, + 0x1.fffffep-16 + }, + { // Entry 494 + 0x1.00000001fffffc00aaaca80016c56b8ep0, + -0x1.fffffep-16 + }, + { // Entry 495 + 0x1.0000000200000000aaaaaaaac16c16c1p0, + 0x1.p-15 + }, + { // Entry 496 + 0x1.0000000200000000aaaaaaaac16c16c1p0, + -0x1.p-15 + }, + { // Entry 497 + 0x1.0000000200000800aab2b00016d16d27p0, + 0x1.000002p-15 + }, + { // Entry 498 + 0x1.0000000200000800aab2b00016d16d27p0, + -0x1.000002p-15 + }, + { // Entry 499 + 0x1.0008000a9ab0306483e877d147f6d18ap0, + 0x1.fffffep-7 + }, + { // Entry 500 + 0x1.0008000a9ab0306483e877d147f6d18ap0, + -0x1.fffffep-7 + }, + { // Entry 501 + 0x1.0008000aaab05b0750755149bcdca034p0, + 0x1.p-6 + }, + { // Entry 502 + 0x1.0008000aaab05b0750755149bcdca034p0, + -0x1.p-6 + }, + { // Entry 503 + 0x1.0008000acab0b07ceb0f063ba7bbfa54p0, + 0x1.000002p-6 + }, + { // Entry 504 + 0x1.0008000acab0b07ceb0f063ba7bbfa54p0, + -0x1.000002p-6 + }, + { // Entry 505 + 0x1.002000aa6c14187902aad2ffba74cf2cp0, + 0x1.fffffep-6 + }, + { // Entry 506 + 0x1.002000aa6c14187902aad2ffba74cf2cp0, + -0x1.fffffep-6 + }, + { // Entry 507 + 0x1.002000aaac16c30c31eaf1bbb1901947p0, + 0x1.p-5 + }, + { // Entry 508 + 0x1.002000aaac16c30c31eaf1bbb1901947p0, + -0x1.p-5 + }, + { // Entry 509 + 0x1.002000ab2c1c18f2a86baf44b183af72p0, + 0x1.000002p-5 + }, + { // Entry 510 + 0x1.002000ab2c1c18f2a86baf44b183af72p0, + -0x1.000002p-5 + }, + { // Entry 511 + 0x1.00800aaa05874ed7b7cf8f4b5e6fdb38p0, + 0x1.fffffep-5 + }, + { // Entry 512 + 0x1.00800aaa05874ed7b7cf8f4b5e6fdb38p0, + -0x1.fffffep-5 + }, + { // Entry 513 + 0x1.00800aab05b1fb245198050937bb0368p0, + 0x1.p-4 + }, + { // Entry 514 + 0x1.00800aab05b1fb245198050937bb0368p0, + -0x1.p-4 + }, + { // Entry 515 + 0x1.00800aad060756bf0548f2962af04df6p0, + 0x1.000002p-4 + }, + { // Entry 516 + 0x1.00800aad060756bf0548f2962af04df6p0, + -0x1.000002p-4 + }, + { // Entry 517 + 0x1.0200aabd6b0bbcb062a61f361828f822p0, + 0x1.fffffep-4 + }, + { // Entry 518 + 0x1.0200aabd6b0bbcb062a61f361828f822p0, + -0x1.fffffep-4 + }, + { // Entry 519 + 0x1.0200aac16db6edec960cd51207e46c1ep0, + 0x1.p-3 + }, + { // Entry 520 + 0x1.0200aac16db6edec960cd51207e46c1ep0, + -0x1.p-3 + }, + { // Entry 521 + 0x1.0200aac9730d5c7d04db61f9275b83fap0, + 0x1.000002p-3 + }, + { // Entry 522 + 0x1.0200aac9730d5c7d04db61f9275b83fap0, + -0x1.000002p-3 + }, + { // Entry 523 + 0x1.080ab04c7b478d4cb3110d491046c9c9p0, + 0x1.fffffep-3 + }, + { // Entry 524 + 0x1.080ab04c7b478d4cb3110d491046c9c9p0, + -0x1.fffffep-3 + }, + { // Entry 525 + 0x1.080ab05ca6145edcde90399c8713a384p0, + 0x1.p-2 + }, + { // Entry 526 + 0x1.080ab05ca6145edcde90399c8713a384p0, + -0x1.p-2 + }, + { // Entry 527 + 0x1.080ab07cfbae337f36a0f41414d9d0c8p0, + 0x1.000002p-2 + }, + { // Entry 528 + 0x1.080ab07cfbae337f36a0f41414d9d0c8p0, + -0x1.000002p-2 + }, + { // Entry 529 + 0x1.e18f9d3eb3b30ed6335c902418fb7234p1, + 0x1.fffffep0 + }, + { // Entry 530 + 0x1.e18f9d3eb3b30ed6335c902418fb7234p1, + -0x1.fffffep0 + }, + { // Entry 531 + 0x1.e18fa0df2d9bc29327f717774d0c0661p1, + 0x1.p1 + }, + { // Entry 532 + 0x1.e18fa0df2d9bc29327f717774d0c0661p1, + -0x1.p1 + }, + { // Entry 533 + 0x1.e18fa8202183bcc8aa243133423f76ffp1, + 0x1.000002p1 + }, + { // Entry 534 + 0x1.e18fa8202183bcc8aa243133423f76ffp1, + -0x1.000002p1 + }, + { // Entry 535 + 0x1.b4ee7ebb55f4cbc854b082e732092507p4, + 0x1.fffffep1 + }, + { // Entry 536 + 0x1.b4ee7ebb55f4cbc854b082e732092507p4, + -0x1.fffffep1 + }, + { // Entry 537 + 0x1.b4ee858de3e80061c6a51dddf960f317p4, + 0x1.p2 + }, + { // Entry 538 + 0x1.b4ee858de3e80061c6a51dddf960f317p4, + -0x1.p2 + }, + { // Entry 539 + 0x1.b4ee93330020564e2251f0a10e247060p4, + 0x1.000002p2 + }, + { // Entry 540 + 0x1.b4ee93330020564e2251f0a10e247060p4, + -0x1.000002p2 + }, + { // Entry 541 + 0x1.749e9eeeffed4d8079070cc441b07e51p10, + 0x1.fffffep2 + }, + { // Entry 542 + 0x1.749e9eeeffed4d8079070cc441b07e51p10, + -0x1.fffffep2 + }, + { // Entry 543 + 0x1.749eaa93f4e76110d5a587e50e4d3dc3p10, + 0x1.p3 + }, + { // Entry 544 + 0x1.749eaa93f4e76110d5a587e50e4d3dc3p10, + -0x1.p3 + }, + { // Entry 545 + 0x1.749ec1dddff2ff3467178750bda1362bp10, + 0x1.000002p3 + }, + { // Entry 546 + 0x1.749ec1dddff2ff3467178750bda1362bp10, + -0x1.000002p3 + }, + { // Entry 547 + 0x1.0f2eac1794bcba9969899739333d575dp22, + 0x1.fffffep3 + }, + { // Entry 548 + 0x1.0f2eac1794bcba9969899739333d575dp22, + -0x1.fffffep3 + }, + { // Entry 549 + 0x1.0f2ebd0a8005cb3d9b4f414186aba4d7p22, + 0x1.p4 + }, + { // Entry 550 + 0x1.0f2ebd0a8005cb3d9b4f414186aba4d7p22, + -0x1.p4 + }, + { // Entry 551 + 0x1.0f2edef059c578ce114742bef842a70bp22, + 0x1.000002p4 + }, + { // Entry 552 + 0x1.0f2edef059c578ce114742bef842a70bp22, + -0x1.000002p4 + }, + { // Entry 553 + 0x1.1f43d8dc3908b8ed87a5abe34855b461p45, + 0x1.fffffep4 + }, + { // Entry 554 + 0x1.1f43d8dc3908b8ed87a5abe34855b461p45, + -0x1.fffffep4 + }, + { // Entry 555 + 0x1.1f43fcc4b662c7d8478840268449bc25p45, + 0x1.p5 + }, + { // Entry 556 + 0x1.1f43fcc4b662c7d8478840268449bc25p45, + -0x1.p5 + }, + { // Entry 557 + 0x1.1f444495be8e1616a1e5e396b9caac6bp45, + 0x1.000002p5 + }, + { // Entry 558 + 0x1.1f444495be8e1616a1e5e396b9caac6bp45, + -0x1.000002p5 + }, + { // Entry 559 + 0x1.4259323902dbc6e62e3e07ce26cd904cp91, + 0x1.fffffep5 + }, + { // Entry 560 + 0x1.4259323902dbc6e62e3e07ce26cd904cp91, + -0x1.fffffep5 + }, + { // Entry 561 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + 0x1.p6 + }, + { // Entry 562 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + -0x1.p6 + }, + { // Entry 563 + 0x1.425a23fc432fb5d556006a4d8e7ee11bp91, + 0x1.000002p6 + }, + { // Entry 564 + 0x1.425a23fc432fb5d556006a4d8e7ee11bp91, + -0x1.000002p6 + }, + { // Entry 565 + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 566 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 567 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 568 + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 569 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 570 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 571 + HUGE_VALF, + 0x1.fffffcp127 + }, + { // Entry 572 + 0x1.72f14a1ced856a7e65c1607d36ef64b3p3, + 0x1.921fb6p1 + }, + { // Entry 573 + 0x1.412cc380da7cb6987dff68ad77932f5dp1, + 0x1.921fb6p0 + }, + { // Entry 574 + 0x1.8b0757775350a4a8993fc156eb4fc808p0, + 0x1.000002p0 + }, + { // Entry 575 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + 0x1.p0 + }, + { // Entry 576 + 0x1.8b0753f0c559855acf5f13552a0c357bp0, + 0x1.fffffep-1 + }, + { // Entry 577 + 0x1.5319951fdd08d95643a6762c2beffae2p0, + 0x1.921fb6p-1 + }, + { // Entry 578 + 0x1.p0, + 0x1.000002p-126 + }, + { // Entry 579 + 0x1.p0, + 0x1.p-126 + }, + { // Entry 580 + 0x1.p0, + 0x1.fffffcp-127 + }, + { // Entry 581 + 0x1.p0, + 0x1.fffff8p-127 + }, + { // Entry 582 + 0x1.p0, + 0x1.p-148 + }, + { // Entry 583 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 584 + 0x1.p0, + 0.0f + }, + { // Entry 585 + 0x1.p0, + -0.0f + }, + { // Entry 586 + 0x1.p0, + -0x1.p-149 + }, + { // Entry 587 + 0x1.p0, + -0x1.p-148 + }, + { // Entry 588 + 0x1.p0, + -0x1.fffff8p-127 + }, + { // Entry 589 + 0x1.p0, + -0x1.fffffcp-127 + }, + { // Entry 590 + 0x1.p0, + -0x1.p-126 + }, + { // Entry 591 + 0x1.p0, + -0x1.000002p-126 + }, + { // Entry 592 + 0x1.5319951fdd08d95643a6762c2beffae2p0, + -0x1.921fb6p-1 + }, + { // Entry 593 + 0x1.8b0753f0c559855acf5f13552a0c357bp0, + -0x1.fffffep-1 + }, + { // Entry 594 + 0x1.8b07551d9f5504c2bd28100196a4f66ap0, + -0x1.p0 + }, + { // Entry 595 + 0x1.8b0757775350a4a8993fc156eb4fc808p0, + -0x1.000002p0 + }, + { // Entry 596 + 0x1.412cc380da7cb6987dff68ad77932f5dp1, + -0x1.921fb6p0 + }, + { // Entry 597 + 0x1.72f14a1ced856a7e65c1607d36ef64b3p3, + -0x1.921fb6p1 + }, + { // Entry 598 + HUGE_VALF, + -0x1.fffffcp127 + }, + { // Entry 599 + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 600 + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 601 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 602 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 603 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 604 + HUGE_VALF, + -0x1.65a9fap6 + } +}; diff --git a/tests/math_data/exp2_intel_data.h b/tests/math_data/exp2_intel_data.h new file mode 100644 index 000000000..51f2690fa --- /dev/null +++ b/tests/math_data/exp2_intel_data.h @@ -0,0 +1,1342 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_exp2_intel_data[] = { + { // Entry 0 + 0x1.7550685a42c638000000000000845a47p0, + 0x1.16a76ec41b516p-1 + }, + { // Entry 1 + 0x1.89d948a94fe16fffffffffffff2cd3bdp0, + 0x1.3e34fa6ab969ep-1 + }, + { // Entry 2 + 0x1.90661da12d5288000000000000b1b5f1p0, + 0x1.4a63ff1d53f53p-1 + }, + { // Entry 3 + 0x1.cd6b37edeceaf7ffffffffffff7681d4p0, + 0x1.b32a6c92d1185p-1 + }, + { // Entry 4 + 0x1.1ba39ff28e3e9fffffffffffffc69c44p1, + 0x1.25dd9eedac79ap0 + }, + { // Entry 5 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 6 + 0x1.fffffffe9d1bd010d75fee7817e4dfc0p-1, + -0x1.0000000000001p-32 + }, + { // Entry 7 + 0x1.ffffffffffa746f404171ff3199aeed7p-1025, + -0x1.0000000000001p10 + }, + { // Entry 8 + 0x1.fe9d96b2a23d882193f7b993586f2602p-1, + -0x1.000000000006ap-8 + }, + { // Entry 9 + 0x1.ffffffff8a2a3c157c3b7f18ebab642dp-1025, + -0x1.0000000000154p10 + }, + { // Entry 10 + 0x1.ea4afa2a47b9bffeb53a92123e2892d5p-1, + -0x1.000000001p-4 + }, + { // Entry 11 + 0x1.6a09d3c7fa7857ffff5d816eb683ef4bp-1, + -0x1.000025fffffafp-1 + }, + { // Entry 12 + 0x1.fe9d966c1fb8a82de91ee9a29410d9a9p-1, + -0x1.0000330p-8 + }, + { // Entry 13 + 0x1.fa764417ff7da7fd252560ea61130296p-1, + -0x1.011p-6 + }, + { // Entry 14 + 0x1.e3ef96693f8579bbc20fc1cbf9decfc3p-1031, + -0x1.01853479d6414p10 + }, + { // Entry 15 + 0x1.171354a3dac90fb1c06ced94bc098564p-1058, + -0x1.0878080p10 + }, + { // Entry 16 + 0x1.00000000018f40b5ed994a2726414d06p-1074, + -0x1.0c7fffffffff7p10 + }, + { // Entry 17 + 0x1.00000000002c5c85fdf477b662b26945p-1074, + -0x1.0c7ffffffffffp10 + }, + { // Entry 18 + 0.0, + -0x1.0c80000000001p10 + }, + { // Entry 19 + 0.0, + -0x1.0c80400000001p10 + }, + { // Entry 20 + 0.0, + -0x1.0cbffffffffffp10 + }, + { // Entry 21 + 0.0, + -0x1.0ccp10 + }, + { // Entry 22 + 0x1.5fa21f48b380a7ff88e685255cd2b0b9p-68, + -0x1.0e2b14f637093p6 + }, + { // Entry 23 + 0x1.fffff3deb381580911bb0a338d5013d3p-1, + -0x1.180p-21 + }, + { // Entry 24 + 0x1.f220c9bfc3e5e802d3d2299f1c0cb896p-1, + -0x1.44ap-5 + }, + { // Entry 25 + 0x1.d2c416640bb58800000302d88dd4794dp-6, + -0x1.488a5a88d8627p2 + }, + { // Entry 26 + 0x1.7477fe65ed9eb801fb78e9f8195947dep-6, + -0x1.5d60a85cec862p2 + }, + { // Entry 27 + 0x1.fffffffffe01d7fb1785c9ab108f85f0p-1, + -0x1.7p-40 + }, + { // Entry 28 + 0x1.f710064ffbdf6800ff354e934260dd45p-1, + -0x1.a04p-6 + }, + { // Entry 29 + 0x1.81db2699d647e80119a5ff6578562368p-1, + -0x1.a1ep-2 + }, + { // Entry 30 + 0x1.18a82c07fc46d8033bd0fd06418f1d83p-1, + -0x1.bc137c829fe3fp-1 + }, + { // Entry 31 + 0x1.ffffd71ab8e1c7ffc23bb97e6431b6fep-1, + -0x1.d7ffep-20 + }, + { // Entry 32 + 0x1.b23dd2fbd9253801d5963064eb734a2fp-1, + -0x1.e6b30cdff66eap-3 + }, + { // Entry 33 + 0x1.9afdae5fa109f7fffb555a32c170d8b1p-32, + -0x1.f512959c9fef8p4 + }, + { // Entry 34 + 0x1.6ae5f40c2d268001595637d720fdaa90p-1, + -0x1.fc7f1fc7f1fc8p-2 + }, + { // Entry 35 + 0x1.aed49b5eb5803001fcd049a3732b31f0p-1, + -0x1.fdfffffffffffp-3 + }, + { // Entry 36 + 0x1.0000000d6a752800a91630539c6e7b0fp-1022, + -0x1.fefffffff6529p9 + }, + { // Entry 37 + 0x1.0000000c0790f7ff6249d8418e1b82c0p-1022, + -0x1.fefffffff7529p9 + }, + { // Entry 38 + 0x1.5ab07dd4854a1800e36cd5ae47a685bep-256, + -0x1.ff1ffffffffffp7 + }, + { // Entry 39 + 0x1.6a0bdc4db4d7b1f4e35e43dfc85817a7p-1, + -0x1.fff7fffffffffp-2 + }, + { // Entry 40 + 0x1.ffffffffffffffffffffffffe9d20bc1p-1, + -0x1.fff8e61eadd48p-101 + }, + { // Entry 41 + 0x1.ffd3a5705a0a3800003de8f068ba8fddp-1, + -0x1.ffff87bffffffp-12 + }, + { // Entry 42 + 0x1.fffff4e8de9f48000386a775899517eap-1, + -0x1.ffffffff07fffp-22 + }, + { // Entry 43 + 0x1.ffffd3a37bee1800966e6c9e9bb48496p-1, + -0x1.ffffffff3ffffp-20 + }, + { // Entry 44 + 0x1.0000000b561edfff7762203e6d954ab4p-1024, + -0x1.fffffffff7d29p9 + }, + { // Entry 45 + 0x1.00000004da8277ffff5d73afe24f21c3p-512, + -0x1.fffffffff8ff7p8 + }, + { // Entry 46 + 0x1.000000003851761b6d88f829becd3315p-1024, + -0x1.ffffffffffd76p9 + }, + { // Entry 47 + 0x1.000000001e533f989be7040824423450p-1024, + -0x1.ffffffffffea2p9 + }, + { // Entry 48 + 0x1.000000001111998e372040e1786d816fp-1024, + -0x1.fffffffffff3bp9 + }, + { // Entry 49 + 0x1.0000000004550915cce8b2fc4d47a539p-1024, + -0x1.fffffffffffcep9 + }, + { // Entry 50 + 0x1.0000000001fe2804e87d30cf8acc59c7p-1024, + -0x1.fffffffffffe9p9 + }, + { // Entry 51 + 0x1.0000000001205966f2b5938a5a957ce4p-1024, + -0x1.ffffffffffff3p9 + }, + { // Entry 52 + 0x1.fffffffffe9d1bd0105cdc21cead428cp-1, + -0x1.ffffffffffffep-41 + }, + { // Entry 53 + 0x1.ffffffffffa746f404171ff8a52bae95p-1, + -0x1.ffffffffffffep-43 + }, + { // Entry 54 + 0x1.0000000000162e42fefa3ae53369388cp-1024, + -0x1.fffffffffffffp9 + }, + { // Entry 55 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 56 + 0x1.6a09e667f3bcd0e0448ff2152c56bf1fp0, + 0x1.0000000000001p-1 + }, + { // Entry 57 + 0x1.00000000b17217f80f4f00c1ff23da21p0, + 0x1.0000000000001p-32 + }, + { // Entry 58 + 0x1.00000000b17217f80f4f434cc820f6eep0, + 0x1.0000000000007p-32 + }, + { // Entry 59 + 0x1.02c9a3e7780fe800c728e7d486fcf31cp0, + 0x1.0000000003838p-6 + }, + { // Entry 60 + 0x1.6a09e66cc184b000004ee13300eefeedp0, + 0x1.00000009cd189p-1 + }, + { // Entry 61 + 0x1.00b1afde7b1cb801287776b699278174p0, + 0x1.000051bcd60e7p-8 + }, + { // Entry 62 + 0x1.0058c89a0da927ffd4f54c7681eb068dp0, + 0x1.00007ffffffaep-9 + }, + { // Entry 63 + 0x1.059b67dbb73747ffc7559f37ef913157p0, + 0x1.000ffffc0p-5 + }, + { // Entry 64 + 0x1.6b14ea048ba6b4a8a77fd275a20dcb27p0, + 0x1.022p-1 + }, + { // Entry 65 + 0x1.002d711c9fe27ffffff45a9e519be99fp0, + 0x1.0624de0b877a9p-10 + }, + { // Entry 66 + 0x1.002d711dd65f77fffff9a30e18baff60p0, + 0x1.0624e50a0bee1p-10 + }, + { // Entry 67 + 0x1.002d711f4c5b7800000671d15bb60667p0, + 0x1.0624ed76bb986p-10 + }, + { // Entry 68 + 0x1.1a7c0713c14c2fffff5e7085d7140701p4, + 0x1.0916fbd16a4a4p2 + }, + { // Entry 69 + 0x1.0005f0eeca476ff5746e77918f305622p0, + 0x1.1244912449101p-13 + }, + { // Entry 70 + 0x1.7550685a42c638000000000000845a47p0, + 0x1.16a76ec41b516p-1 + }, + { // Entry 71 + 0x1.76e219f44e8077fffbf691327e18a6a6p0, + 0x1.19c09494b839ep-1 + }, + { // Entry 72 + 0x1.3738d72e851d08007f94aec04e720143p0, + 0x1.2090482412080p-2 + }, + { // Entry 73 + 0x1.5ebcb0c3a5e8cfffff403cfc89af025dp2, + 0x1.3a24bc9f747a4p1 + }, + { // Entry 74 + 0x1.eff948ab8687f801d8c0b52d4fd1abc4p4, + 0x1.3d104d551d81cp2 + }, + { // Entry 75 + 0x1.f662aa67062f68312afcbb64ee7a0cacp19, + 0x1.3f8ffa3f6c716p4 + }, + { // Entry 76 + 0x1.3dc642457d0857ff16fb3b9bc0c86814p1, + 0x1.4fd6031ce2f59p0 + }, + { // Entry 77 + 0x1.0000000075571ffffe9287b8913490cap0, + 0x1.529297e4d4730p-33 + }, + { // Entry 78 + 0x1.428a2f98d728980287cd19f22ba23342p0, + 0x1.555555555554fp-2 + }, + { // Entry 79 + 0x1.0792c37435e5b801a9bae4219f11a6a9p0, + 0x1.588f0a4eac13ep-5 + }, + { // Entry 80 + 0x1.e0eaa5e12b62b7feff0ae982bc9b0e20p2, + 0x1.746f2dac4c4aep1 + }, + { // Entry 81 + 0x1.e8f597a375b908310b9fd1892b940fddp2, + 0x1.777f3eb118644p1 + }, + { // Entry 82 + 0x1.e212d1cd92af580000065ae4d335fcd5p5, + 0x1.7a70623a65055p2 + }, + { // Entry 83 + 0x1.6e176769832437ff0078b13791381962p1, + 0x1.841c84bf02c93p0 + }, + { // Entry 84 + 0x1.0000000010e578000152b56232aab68ep0, + 0x1.86055129c133fp-36 + }, + { // Entry 85 + 0x1.1f98e30b070717f047944e564fb68949p6, + 0x1.8abef85ac27cap2 + }, + { // Entry 86 + 0x1.29f209f62cd1bfffffb442fc666ab002p6, + 0x1.8e0287eb30572p2 + }, + { // Entry 87 + 0x1.2e6eb60fef9e9801a703d7b8b727760dp50, + 0x1.91ec7b1ec7c3dp5 + }, + { // Entry 88 + 0x1.125fbee3a8f4b000006b01ac6c39fae3p0, + 0x1.999999b6966b1p-4 + }, + { // Entry 89 + 0x1.125fbef60d23f7fffff990af4ad356dep0, + 0x1.99999b42b010ep-4 + }, + { // Entry 90 + 0x1.2df89d68ecd817feffbc8a02489a2c31p3, + 0x1.9e7f87cd813d0p1 + }, + { // Entry 91 + 0x1.7b0837a01c4bf7fffb4b24ca92057ec8p844, + 0x1.a64878765d9c6p9 + }, + { // Entry 92 + 0x1.279417bd1ee58000d657c88e959aa30ap0, + 0x1.a8cp-3 + }, + { // Entry 93 + 0x1.24e4cfa950d85801e4e97cf588eae855p858, + 0x1.ad18dca75151cp9 + }, + { // Entry 94 + 0x1.c9d7d9b687fd58033eb56233acd2e743p858, + 0x1.ad6b5ad6b5ad6p9 + }, + { // Entry 95 + 0x1.099ad18ba452580179e84b9f367c24fcp0, + 0x1.b34cc4566d0b8p-5 + }, + { // Entry 96 + 0x1.75db048626cc9801fdd8328e5e7c2ed3p55, + 0x1.bc5ee5fb5abdfp5 + }, + { // Entry 97 + 0x1.04eb9df9467ea8006ec2ae40fe4aa9a2p0, + 0x1.c20p-6 + }, + { // Entry 98 + 0x1.7336a662f7a3080000321c761912bb4dp3, + 0x1.c49f19020be99p1 + }, + { // Entry 99 + 0x1.00051180218ca7fffffa98a0aca1602bp0, + 0x1.d3f4cfa7e9e54p-14 + }, + { // Entry 100 + 0x1.0000146bb81ea0003b62e3d6d908a708p0, + 0x1.d76p-20 + }, + { // Entry 101 + 0x1.e7ede8155f4148013c4232abc7194d4dp0, + 0x1.dc6e371b8dcp-1 + }, + { // Entry 102 + 0x1.e96b5624c8f3e80004759e1237e298dfp1, + 0x1.ef57627bcd18dp0 + }, + { // Entry 103 + 0x1.661bd0e767ee37ffff6f19dcbf13f733p0, + 0x1.efe02bcccc3e0p-2 + }, + { // Entry 104 + 0x1.0b216e27ad0157ffb7b07aee744bc64bp0, + 0x1.f70p-5 + }, + { // Entry 105 + 0x1.fbda9b237a1437feffee12944ccc2abep1, + 0x1.fcff3fcff3fccp0 + }, + { // Entry 106 + 0x1.f0f5d9e1ab4cc825f655007e8ce8352fp7, + 0x1.fd3f46397c92cp2 + }, + { // Entry 107 + 0x1.fc52e836980af7fffb69887832df36bep1, + 0x1.fd56b236e47b0p0 + }, + { // Entry 108 + 0x1.fe974a46f07b082d32ce3627adbe734bp1, + 0x1.fefb71b3e5192p0 + }, + { // Entry 109 + 0x1.30558126879a682ff3f16fbfef12a959p0, + 0x1.fefffffffffffp-3 + }, + { // Entry 110 + 0x1.ea4afa2a3e59980143381c0d66f06241p511, + 0x1.ffeffffffff7fp8 + }, + { // Entry 111 + 0x1.ffd9308364f08f6f2617da7d0b994aeep1023, + 0x1.fffff1fffffffp9 + }, + { // Entry 112 + 0x1.ffffffffaa55e7ffffaa8e6b5f871352p0, + 0x1.ffffffff84699p-1 + }, + { // Entry 113 + 0x1.p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 114 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + -0x1.0p-1 + }, + { // Entry 115 + 0x1.7b29358d41a6466f059badebc0f3ef2ap-1, + -0x1.bbbbbbbbbbbbcp-2 + }, + { // Entry 116 + 0x1.8d17d2b770067dd0b560997d709462f2p-1, + -0x1.7777777777778p-2 + }, + { // Entry 117 + 0x1.9fdf8bcce533d3850499cd91b4fe1b45p-1, + -0x1.3333333333334p-2 + }, + { // Entry 118 + 0x1.b38aa5682153ea10ec6aaf03b1e19a17p-1, + -0x1.ddddddddddde0p-3 + }, + { // Entry 119 + 0x1.c823e074ec128dd3e5a22665f53de430p-1, + -0x1.5555555555558p-3 + }, + { // Entry 120 + 0x1.ddb680117ab119ddf7de23abf70a974ap-1, + -0x1.999999999999fp-4 + }, + { // Entry 121 + 0x1.f44e4fb6c55d6f8461f0c24a6561e8cfp-1, + -0x1.111111111111cp-5 + }, + { // Entry 122 + 0x1.05fbd4d5b4d597517f2f14990c7c1d74p0, + 0x1.1111111111106p-5 + }, + { // Entry 123 + 0x1.125fbee250663e39a600925ecaf87e7ap0, + 0x1.9999999999994p-4 + }, + { // Entry 124 + 0x1.1f59ac3c7d6bf83c0aac08f864d917a0p0, + 0x1.5555555555552p-3 + }, + { // Entry 125 + 0x1.2cf0b5245e8f288fd79fb13137352d3cp0, + 0x1.ddddddddddddap-3 + }, + { // Entry 126 + 0x1.3b2c47bff8328699545ebbc1b8224569p0, + 0x1.3333333333331p-2 + }, + { // Entry 127 + 0x1.4a142c2b2e71dbfc2b446735ddfe02fep0, + 0x1.7777777777775p-2 + }, + { // Entry 128 + 0x1.59b088b8f29ed26e4afc853d2242f3dcp0, + 0x1.bbbbbbbbbbbb9p-2 + }, + { // Entry 129 + 0x1.6a09e667f3bcbd45589bc56188452388p0, + 0x1.ffffffffffffdp-2 + }, + { // Entry 130 + 0x1.p48, + 0x1.8p5 + }, + { // Entry 131 + 0x1.51cb453b953666ae8a73c377e704a131p48, + 0x1.8333333333333p5 + }, + { // Entry 132 + 0x1.bdb8cdadbe110aebd2ba26668f1a053fp48, + 0x1.8666666666666p5 + }, + { // Entry 133 + 0x1.2611186bae6654d144153826a8cbde6ap49, + 0x1.8999999999999p5 + }, + { // Entry 134 + 0x1.8406003b2ae41864a49eea54994df36fp49, + 0x1.8ccccccccccccp5 + }, + { // Entry 135 + 0x1.fffffffffffd3a37a020b8c4054cb869p49, + 0x1.8ffffffffffffp5 + }, + { // Entry 136 + 0x1.51cb453b953492665c6d2fb15083f6e2p50, + 0x1.9333333333332p5 + }, + { // Entry 137 + 0x1.bdb8cdadbe0ea104fa428cab0d5125a2p50, + 0x1.9666666666665p5 + }, + { // Entry 138 + 0x1.2611186bae64bd27820627b1e4c3f179p51, + 0x1.9999999999998p5 + }, + { // Entry 139 + 0x1.8406003b2ae1fe7a7a4c90ae9e7a858ep51, + 0x1.9cccccccccccbp5 + }, + { // Entry 140 + 0x1.fffffffffffa746f4041718be29130c3p51, + 0x1.9fffffffffffep5 + }, + { // Entry 141 + 0x1.p-52, + -0x1.ap5 + }, + { // Entry 142 + 0x1.51cb453b953666ae8a73c377e704a131p-52, + -0x1.9cccccccccccdp5 + }, + { // Entry 143 + 0x1.bdb8cdadbe110aebd2ba26668f1a053fp-52, + -0x1.999999999999ap5 + }, + { // Entry 144 + 0x1.2611186bae6654d144153826a8cbde6ap-51, + -0x1.9666666666667p5 + }, + { // Entry 145 + 0x1.8406003b2ae41864a49eea54994df36fp-51, + -0x1.9333333333334p5 + }, + { // Entry 146 + 0x1.fffffffffffd3a37a020b8c4054cb869p-51, + -0x1.9000000000001p5 + }, + { // Entry 147 + 0x1.51cb453b953492665c6d2fb15083f6e2p-50, + -0x1.8cccccccccccep5 + }, + { // Entry 148 + 0x1.bdb8cdadbe0ea104fa428cab0d5125a2p-50, + -0x1.899999999999bp5 + }, + { // Entry 149 + 0x1.2611186bae64bd27820627b1e4c3f179p-49, + -0x1.8666666666668p5 + }, + { // Entry 150 + 0x1.8406003b2ae1fe7a7a4c90ae9e7a858ep-49, + -0x1.8333333333335p5 + }, + { // Entry 151 + 0x1.fffffffffffa746f4041718be29130c3p-49, + -0x1.8000000000002p5 + }, + { // Entry 152 + 0x1.p768, + 0x1.8p9 + }, + { // Entry 153 + 0x1.p-896, + -0x1.cp9 + }, + { // Entry 154 + HUGE_VAL, + 0x1.4p12 + }, + { // Entry 155 + 0.0, + -0x1.6p12 + }, + { // Entry 156 + 0x1.ffffffffffd3a37a020b8e0d90ed7f3fp1023, + 0x1.fffffffffffffp9 + }, + { // Entry 157 + 0x1.p-1074, + -0x1.0c8p10 + }, + { // Entry 158 + 0x1.ffffffffffa746f404171ff3199aeed7p-1025, + -0x1.0000000000001p10 + }, + { // Entry 159 + 0x1.p-1024, + -0x1.0p10 + }, + { // Entry 160 + 0x1.0000000000162e42fefa3ae53369388cp-1024, + -0x1.fffffffffffffp9 + }, + { // Entry 161 + 0x1.ffffffffffd3a37a020b8e0d90ed7f3fp-513, + -0x1.0000000000001p9 + }, + { // Entry 162 + 0x1.p-512, + -0x1.0p9 + }, + { // Entry 163 + 0x1.00000000000b17217f7d1d351a389d40p-512, + -0x1.fffffffffffffp8 + }, + { // Entry 164 + 0x1.ffffffffffe9d1bd0105c68bc97ec194p-257, + -0x1.0000000000001p8 + }, + { // Entry 165 + 0x1.p-256, + -0x1.0p8 + }, + { // Entry 166 + 0x1.0000000000058b90bfbe8e8b2d3d4edep-256, + -0x1.fffffffffffffp7 + }, + { // Entry 167 + 0x1.fffffffffff4e8de8082e32725016147p-129, + -0x1.0000000000001p7 + }, + { // Entry 168 + 0x1.p-128, + -0x1.0p7 + }, + { // Entry 169 + 0x1.000000000002c5c85fdf4741bea6e77fp-128, + -0x1.fffffffffffffp6 + }, + { // Entry 170 + 0x1.fffffffffffa746f4041718be29130c3p-65, + -0x1.0000000000001p6 + }, + { // Entry 171 + 0x1.p-64, + -0x1.0p6 + }, + { // Entry 172 + 0x1.00000000000162e42fefa39fe95583c3p-64, + -0x1.fffffffffffffp5 + }, + { // Entry 173 + 0x1.fffffffffffd3a37a020b8c4054cb869p-33, + -0x1.0000000000001p5 + }, + { // Entry 174 + 0x1.p-32, + -0x1.0p5 + }, + { // Entry 175 + 0x1.000000000000b17217f7d1cfb72b45e2p-32, + -0x1.fffffffffffffp4 + }, + { // Entry 176 + 0x1.fffffffffffe9d1bd0105c6187a76436p-17, + -0x1.0000000000001p4 + }, + { // Entry 177 + 0x1.p-16, + -0x1.0p4 + }, + { // Entry 178 + 0x1.00000000000058b90bfbe8e7cc35c3f1p-16, + -0x1.fffffffffffffp3 + }, + { // Entry 179 + 0x1.ffffffffffff4e8de8082e30a513f41bp-9, + -0x1.0000000000001p3 + }, + { // Entry 180 + 0x1.p-8, + -0x1.0p3 + }, + { // Entry 181 + 0x1.0000000000002c5c85fdf473e242ea38p-8, + -0x1.fffffffffffffp2 + }, + { // Entry 182 + 0x1.ffffffffffffa746f40417184ada0a8ep-5, + -0x1.0000000000001p2 + }, + { // Entry 183 + 0x1.p-4, + -0x1.0p2 + }, + { // Entry 184 + 0x1.000000000000162e42fefa39f02b772cp-4, + -0x1.fffffffffffffp1 + }, + { // Entry 185 + 0x1.ffffffffffffd3a37a020b8c23810967p-3, + -0x1.0000000000001p1 + }, + { // Entry 186 + 0x1.p-2, + -0x1.0p1 + }, + { // Entry 187 + 0x1.0000000000000b17217f7d1cf7d83c1ap-2, + -0x1.fffffffffffffp0 + }, + { // Entry 188 + 0x1.ffffffffffffe9d1bd0105c6114585bbp-2, + -0x1.0000000000001p0 + }, + { // Entry 189 + 0x1.p-1, + -0x1.0p0 + }, + { // Entry 190 + 0x1.000000000000058b90bfbe8e7bdcbe2ep-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 191 + 0x1.ffffffffffe9d1bd0105c68bc97ec194p511, + 0x1.fffffffffffffp8 + }, + { // Entry 192 + 0x1.p512, + 0x1.0p9 + }, + { // Entry 193 + 0x1.0000000000162e42fefa3ae53369388cp512, + 0x1.0000000000001p9 + }, + { // Entry 194 + 0x1.fffffffffff4e8de8082e32725016147p255, + 0x1.fffffffffffffp7 + }, + { // Entry 195 + 0x1.p256, + 0x1.0p8 + }, + { // Entry 196 + 0x1.00000000000b17217f7d1d351a389d40p256, + 0x1.0000000000001p8 + }, + { // Entry 197 + 0x1.fffffffffffa746f4041718be29130c3p127, + 0x1.fffffffffffffp6 + }, + { // Entry 198 + 0x1.p128, + 0x1.0p7 + }, + { // Entry 199 + 0x1.0000000000058b90bfbe8e8b2d3d4edep128, + 0x1.0000000000001p7 + }, + { // Entry 200 + 0x1.fffffffffffd3a37a020b8c4054cb869p63, + 0x1.fffffffffffffp5 + }, + { // Entry 201 + 0x1.p64, + 0x1.0p6 + }, + { // Entry 202 + 0x1.000000000002c5c85fdf4741bea6e77fp64, + 0x1.0000000000001p6 + }, + { // Entry 203 + 0x1.fffffffffffe9d1bd0105c6187a76436p31, + 0x1.fffffffffffffp4 + }, + { // Entry 204 + 0x1.p32, + 0x1.0p5 + }, + { // Entry 205 + 0x1.00000000000162e42fefa39fe95583c3p32, + 0x1.0000000000001p5 + }, + { // Entry 206 + 0x1.ffffffffffff4e8de8082e30a513f41bp15, + 0x1.fffffffffffffp3 + }, + { // Entry 207 + 0x1.p16, + 0x1.0p4 + }, + { // Entry 208 + 0x1.000000000000b17217f7d1cfb72b45e2p16, + 0x1.0000000000001p4 + }, + { // Entry 209 + 0x1.ffffffffffffa746f40417184ada0a8ep7, + 0x1.fffffffffffffp2 + }, + { // Entry 210 + 0x1.p8, + 0x1.0p3 + }, + { // Entry 211 + 0x1.00000000000058b90bfbe8e7cc35c3f1p8, + 0x1.0000000000001p3 + }, + { // Entry 212 + 0x1.ffffffffffffd3a37a020b8c23810967p3, + 0x1.fffffffffffffp1 + }, + { // Entry 213 + 0x1.p4, + 0x1.0p2 + }, + { // Entry 214 + 0x1.0000000000002c5c85fdf473e242ea38p4, + 0x1.0000000000001p2 + }, + { // Entry 215 + 0x1.ffffffffffffe9d1bd0105c6114585bbp1, + 0x1.fffffffffffffp0 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p1 + }, + { // Entry 217 + 0x1.000000000000162e42fefa39f02b772cp2, + 0x1.0000000000001p1 + }, + { // Entry 218 + 0x1.fffffffffffff4e8de8082e30884031fp0, + 0x1.fffffffffffffp-1 + }, + { // Entry 219 + 0x1.p1, + 0x1.0p0 + }, + { // Entry 220 + 0x1.0000000000000b17217f7d1cf7d83c1ap1, + 0x1.0000000000001p0 + }, + { // Entry 221 + 0x1.6a09e667f3bcc131216634b8a8ffb7b0p-1, + -0x1.0000000000001p-1 + }, + { // Entry 222 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + -0x1.0p-1 + }, + { // Entry 223 + 0x1.6a09e667f3bcccf47bc582be0b70aea4p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 224 + 0x1.ae89f995ad3ad13ebe2fd437cdc4d86bp-1, + -0x1.0000000000001p-2 + }, + { // Entry 225 + 0x1.ae89f995ad3ad5e8734d1773205a7fbcp-1, + -0x1.0p-2 + }, + { // Entry 226 + 0x1.ae89f995ad3ad83d4ddbb910c9aa2c84p-1, + -0x1.fffffffffffffp-3 + }, + { // Entry 227 + 0x1.d5818dcfba486fd2c0b58591353e1431p-1, + -0x1.0000000000001p-3 + }, + { // Entry 228 + 0x1.d5818dcfba48725da05aeb66e0dca9f5p-1, + -0x1.0p-3 + }, + { // Entry 229 + 0x1.d5818dcfba4873a3102d9e51b6ad4734p-1, + -0x1.fffffffffffffp-4 + }, + { // Entry 230 + 0x1.ea4afa2a490d97051edfd6f5de84f1fep-1, + -0x1.0000000000001p-4 + }, + { // Entry 231 + 0x1.ea4afa2a490d9858f73a18f5db301f86p-1, + -0x1.0p-4 + }, + { // Entry 232 + 0x1.ea4afa2a490d9902e36739f5d9860ea0p-1, + -0x1.fffffffffffffp-5 + }, + { // Entry 233 + 0x1.f50765b6e45405c75396b27147029cc0p-1, + -0x1.0000000000001p-5 + }, + { // Entry 234 + 0x1.f50765b6e4540674f84b762862baff99p-1, + -0x1.0p-5 + }, + { // Entry 235 + 0x1.f50765b6e45406cbcaa5d803f0974796p-1, + -0x1.fffffffffffffp-6 + }, + { // Entry 236 + 0x1.fa7c1819e90d8291461c9eac38e21676p-1, + -0x1.0000000000001p-6 + }, + { // Entry 237 + 0x1.fa7c1819e90d82e90a7e74b263c1dc06p-1, + -0x1.0p-6 + }, + { // Entry 238 + 0x1.fa7c1819e90d8314ecaf5fb57931c482p-1, + -0x1.fffffffffffffp-7 + }, + { // Entry 239 + 0x1.fd3c22b8f71f106b3c73a454f80c00ecp-1, + -0x1.0000000000001p-7 + }, + { // Entry 240 + 0x1.fd3c22b8f71f10975ba4b32bcf3a5e12p-1, + -0x1.0p-7 + }, + { // Entry 241 + 0x1.fd3c22b8f71f10ad6b3d3a973ad18e15p-1, + -0x1.fffffffffffffp-8 + }, + { // Entry 242 + 0x1.fe9d96b2a23d9134414ed15eb175bc62p-1, + -0x1.0000000000001p-8 + }, + { // Entry 243 + 0x1.fe9d96b2a23d914a6037442fde31baf8p-1, + -0x1.0p-8 + }, + { // Entry 244 + 0x1.fe9d96b2a23d91556fab7d98748fba9fp-1, + -0x1.fffffffffffffp-9 + }, + { // Entry 245 + 0x1.ff4eaca4391b5d982b2a046646772a87p-1, + -0x1.0000000000001p-9 + }, + { // Entry 246 + 0x1.ff4eaca4391b5da33e743691f7298b12p-1, + -0x1.0p-9 + }, + { // Entry 247 + 0x1.ff4eaca4391b5da8c8194fa7cf82bb6ep-1, + -0x1.fffffffffffffp-10 + }, + { // Entry 248 + 0x1.ffa74ea381efc2121cd91a3e6475a7d8p-1, + -0x1.0000000000001p-10 + }, + { // Entry 249 + 0x1.ffa74ea381efc217a773f15c025f7c0dp-1, + -0x1.0p-10 + }, + { // Entry 250 + 0x1.ffa74ea381efc21a6cc15cead154662dp-1, + -0x1.fffffffffffffp-11 + }, + { // Entry 251 + 0x1.fff4e8fd40080cc795b0e5e46a91f0ffp-1, + -0x1.0000000000001p-13 + }, + { // Entry 252 + 0x1.fff4e8fd40080cc8471f25ef2480b00bp-1, + -0x1.0p-13 + }, + { // Entry 253 + 0x1.fff4e8fd40080cc89fd645f481780f90p-1, + -0x1.fffffffffffffp-14 + }, + { // Entry 254 + 0x1.6a09e667f3bcc51cea30a40fc9c52aecp0, + 0x1.fffffffffffffp-2 + }, + { // Entry 255 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p-1 + }, + { // Entry 256 + 0x1.6a09e667f3bcd0e0448ff2152c56bf1fp0, + 0x1.0000000000001p-1 + }, + { // Entry 257 + 0x1.306fe0a31b7151388348ff0de074c5a3p0, + 0x1.fffffffffffffp-3 + }, + { // Entry 258 + 0x1.306fe0a31b7152de8d5a46305c85edecp0, + 0x1.0p-2 + }, + { // Entry 259 + 0x1.306fe0a31b71562aa17cd47554af19b4p0, + 0x1.0000000000001p-2 + }, + { // Entry 260 + 0x1.172b83c7d517ad0c7647240cbf259d0dp0, + 0x1.fffffffffffffp-4 + }, + { // Entry 261 + 0x1.172b83c7d517adcdf7c8c50eb14a7920p0, + 0x1.0p-3 + }, + { // Entry 262 + 0x1.172b83c7d517af50facc07129595c3a8p0, + 0x1.0000000000001p-3 + }, + { // Entry 263 + 0x1.0b5586cf9890f5cce4ef0d92edf98f81p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 264 + 0x1.0b5586cf9890f6298b92b71842a98364p0, + 0x1.0p-4 + }, + { // Entry 265 + 0x1.0b5586cf9890f6e2d8da0a22ec09cb7dp0, + 0x1.0000000000001p-4 + }, + { // Entry 266 + 0x1.059b0d31585743812721a46bbd07f042p0, + 0x1.fffffffffffffp-6 + }, + { // Entry 267 + 0x1.059b0d31585743ae7c548eb68ca417fep0, + 0x1.0p-5 + }, + { // Entry 268 + 0x1.059b0d315857440926ba634c2bdc7f06p0, + 0x1.0000000000001p-5 + }, + { // Entry 269 + 0x1.02c9a3e778060ed08bb2bf3a4c4bffddp0, + 0x1.fffffffffffffp-7 + }, + { // Entry 270 + 0x1.02c9a3e778060ee6f7caca4f7a29bde9p0, + 0x1.0p-6 + }, + { // Entry 271 + 0x1.02c9a3e778060f13cffae079d5e53fd5p0, + 0x1.0000000000001p-6 + }, + { // Entry 272 + 0x1.0163da9fb33356cd23daa2a4de92b010p0, + 0x1.fffffffffffffp-8 + }, + { // Entry 273 + 0x1.0163da9fb33356d84a66ae336dcdfa40p0, + 0x1.0p-7 + }, + { // Entry 274 + 0x1.0163da9fb33356ee977ec5508c449011p0, + 0x1.0000000000001p-7 + }, + { // Entry 275 + 0x1.00b1afa5abcbed5b9a41071a509ceaf7p0, + 0x1.fffffffffffffp-9 + }, + { // Entry 276 + 0x1.00b1afa5abcbed6129ab13ec11dc9544p0, + 0x1.0p-8 + }, + { // Entry 277 + 0x1.00b1afa5abcbed6c487f2d8f945bea39p0, + 0x1.0000000000001p-8 + }, + { // Entry 278 + 0x1.0058c86da1c09e9f385b4a201180af89p0, + 0x1.fffffffffffffp-10 + }, + { // Entry 279 + 0x1.0058c86da1c09ea1ff19d294cf2f679cp0, + 0x1.0p-9 + }, + { // Entry 280 + 0x1.0058c86da1c09ea78c96e37e4a8cd7d8p0, + 0x1.0000000000001p-9 + }, + { // Entry 281 + 0x1.002c605e2e8cec4f0a000b089708b90dp0, + 0x1.fffffffffffffp-11 + }, + { // Entry 282 + 0x1.002c605e2e8cec506d21bfc89a23a010p0, + 0x1.0p-10 + }, + { // Entry 283 + 0x1.002c605e2e8cec5333652948a0596e1cp0, + 0x1.0000000000001p-10 + }, + { // Entry 284 + 0x1.00058ba01fb9f96d404f58b2f213c6ccp0, + 0x1.fffffffffffffp-14 + }, + { // Entry 285 + 0x1.00058ba01fb9f96d6cacd4b180917c3ep0, + 0x1.0p-13 + }, + { // Entry 286 + 0x1.00058ba01fb9f96dc567ccae9d8ce721p0, + 0x1.0000000000001p-13 + }, + { // Entry 287 + 0.0, + -0x1.0c80000000001p10 + }, + { // Entry 288 + 0x1.p-1074, + -0x1.0c8p10 + }, + { // Entry 289 + 0x1.00000000002c5c85fdf477b662b26945p-1074, + -0x1.0c7ffffffffffp10 + }, + { // Entry 290 + 0.0, + -0x1.0cc0000000001p10 + }, + { // Entry 291 + 0.0, + -0x1.0ccp10 + }, + { // Entry 292 + 0.0, + -0x1.0cbffffffffffp10 + }, + { // Entry 293 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 294 + 0.0, + -HUGE_VAL + }, + { // Entry 295 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 296 + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 297 + 0x1.1a6637e666f82e1bf9bdc293e110c586p3, + 0x1.921fb54442d18p1 + }, + { // Entry 298 + 0x1.d0231bd5e9cfd1c56d8c57fb9adc16e1p-4, + -0x1.921fb54442d18p1 + }, + { // Entry 299 + 0x1.7c3f73e5e9df4955e51db2c96c4cd483p1, + 0x1.921fb54442d18p0 + }, + { // Entry 300 + 0x1.58b3940afed165e46fbb76d0cb01dd87p-2, + -0x1.921fb54442d18p0 + }, + { // Entry 301 + 0x1.0000000000000b17217f7d1cf7d83c1ap1, + 0x1.0000000000001p0 + }, + { // Entry 302 + 0x1.ffffffffffffe9d1bd0105c6114585bbp-2, + -0x1.0000000000001p0 + }, + { // Entry 303 + 0x1.p1, + 0x1.0p0 + }, + { // Entry 304 + 0x1.p-1, + -0x1.0p0 + }, + { // Entry 305 + 0x1.fffffffffffff4e8de8082e30884031fp0, + 0x1.fffffffffffffp-1 + }, + { // Entry 306 + 0x1.000000000000058b90bfbe8e7bdcbe2ep-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 307 + 0x1.b93bbf8582e129341e24ff465142adfap0, + 0x1.921fb54442d18p-1 + }, + { // Entry 308 + 0x1.290ee6a5e83cf78da063060a3f50cc7fp-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 309 + 0x1.p0, + 0x1.0p-1022 + }, + { // Entry 310 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1022 + }, + { // Entry 311 + 0x1.p0, + 0x1.0000000000001p-1022 + }, + { // Entry 312 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p-1022 + }, + { // Entry 313 + 0x1.p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 314 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep-1023 + }, + { // Entry 315 + 0x1.p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 316 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 317 + 0x1.p0, + 0x1.0p-1073 + }, + { // Entry 318 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1073 + }, + { // Entry 319 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 320 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 321 + 0x1.p0, + 0.0 + }, + { // Entry 322 + 0x1.p0, + -0.0 + }, + { // Entry 323 + 0x1.ffffffffffd3a37a020b8e0d90ed7f3fp1023, + 0x1.fffffffffffffp9 + }, + { // Entry 324 + HUGE_VAL, + 0x1.0p10 + }, + { // Entry 325 + 0x1.p-1022, + -0x1.ff0p9 + }, + { // Entry 326 + 0x1.ffffffffffd3a37a020b8e0d90ed7f3fp-1023, + -0x1.ff00000000001p9 + }, + { // Entry 327 + 0x1.p125, + 0x1.f40p6 + }, + { // Entry 328 + 0x1.p-125, + -0x1.f40p6 + }, + { // Entry 329 + 0x1.p2, + 0x1.0p1 + }, + { // Entry 330 + 0x1.p-2, + -0x1.0p1 + } +}; diff --git a/tests/math_data/exp2f_intel_data.h b/tests/math_data/exp2f_intel_data.h new file mode 100644 index 000000000..5dc52ac77 --- /dev/null +++ b/tests/math_data/exp2f_intel_data.h @@ -0,0 +1,1126 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_exp2f_intel_data[] = { + { // Entry 0 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p-149 + }, + { // Entry 1 + 0x1.p-128, + -0x1.p7 + }, + { // Entry 2 + 0x1.fffe9d1c4b0f37f413d44c66c0481834p-129, + -0x1.000002p7 + }, + { // Entry 3 + 0x1.ae89930028efb7886635034db7054020p-1, + -0x1.000160p-2 + }, + { // Entry 4 + 0x1.ffa72300006e20fa0359c57f1b36a8e6p-1, + -0x1.007ep-10 + }, + { // Entry 5 + 0x1.f4f5d8ffcfec5e7b589aa48f5b5d9017p-1, + -0x1.019ep-5 + }, + { // Entry 6 + 0x1.1c0df9b94df3cdb41628976927bf54e5p-129, + -0x1.01b330p7 + }, + { // Entry 7 + 0x1.e9f0bd0139ec689f72fb67c4e2ca601cp-1, + -0x1.0440p-4 + }, + { // Entry 8 + 0x1.5effb0fffd19b4376d4e6ae2b16b3a21p-1, + -0x1.16e0p-1 + }, + { // Entry 9 + 0x1.d737a7fa4dbf2cfb6dba6ec6817ed03bp-2, + -0x1.1ea8p0 + }, + { // Entry 10 + 0x1.a4e5b30000f59daf40326c212c5a2fcbp-1, + -0x1.2175bcp-2 + }, + { // Entry 11 + 0x1.9f7f16feb25f3000d062055413068a97p-19, + -0x1.24d228p4 + }, + { // Entry 12 + 0x1.00063d164d3512a13946a9d4477d594fp-149, + -0x1.29ffeep7 + }, + { // Entry 13 + 0.0f, + -0x1.2a0002p7 + }, + { // Entry 14 + 0.0f, + -0x1.2a0004p7 + }, + { // Entry 15 + 0.0f, + -0x1.2a14c0p7 + }, + { // Entry 16 + 0.0f, + -0x1.2c000ap7 + }, + { // Entry 17 + 0x1.a0d9ecffff19d4152b82c660dc209a77p-1, + -0x1.2fbad0p-2 + }, + { // Entry 18 + 0x1.c6052f00589d4f803738f8fcf36fa00bp-1, + -0x1.6318d0p-3 + }, + { // Entry 19 + 0x1.f7cbf0fffe32af4dda01fb5554e5bdd5p-1, + -0x1.7dc8e6p-6 + }, + { // Entry 20 + 0x1.994b4f09b6ee04bdf5b421d4e95dd38ep-107, + -0x1.a94ac2p6 + }, + { // Entry 21 + 0x1.9768dd0bafc9d9b1a97a54711d499b74p-4, + -0x1.aa326cp1 + }, + { // Entry 22 + 0x1.d58197fb38fa3c1fe12e7ad59c08ff21p-8, + -0x1.c7fffep2 + }, + { // Entry 23 + 0x1.6d7a68b2e47d3110712df2595c91f23cp-1, + -0x1.f207fep-2 + }, + { // Entry 24 + 0x1.be9e93477301949016bc2c2b50bfe2cap-126, + -0x1.f4c9d4p6 + }, + { // Entry 25 + 0x1.d61027f7bae9f1964c205dfcbe3f4679p-1, + -0x1.f8fe40p-4 + }, + { // Entry 26 + 0x1.4c6fea0579dc794e989c3505e39be48fp-127, + -0x1.fa7e04p6 + }, + { // Entry 27 + 0x1.d5da00fff7fc53eb4fff78cd7d1f080bp-1, + -0x1.fba72ap-4 + }, + { // Entry 28 + 0x1.05c9d13b70cff2cde5f75b870dacca62p-127, + -0x1.fbdef8p6 + }, + { // Entry 29 + 0x1.d5d2f0fa1f23ba0b7a06c89cc0128f77p-1, + -0x1.fbfffep-4 + }, + { // Entry 30 + 0x1.ea5a64f56a7ba762fe38fe8eb4a9dd03p-1, + -0x1.fe8c64p-5 + }, + { // Entry 31 + 0x1.ea4cccf5323b8c4405f1a736e586738fp-1, + -0x1.ffd40cp-5 + }, + { // Entry 32 + 0x1.0026deff8e53c240976d296b38100d8ap-16, + -0x1.fff8fep3 + }, + { // Entry 33 + 0x1.ea4b39f81ba66804ecab3d71073e27b3p-1, + -0x1.fff9fep-5 + }, + { // Entry 34 + 0x1.007969bfdcbdfb3e58bdf333f53a3c1dp-128, + -0x1.fffd44p6 + }, + { // Entry 35 + 0x1.0056b360e5a2dfe9ee49875dd529e33bp-128, + -0x1.fffe0cp6 + }, + { // Entry 36 + 0x1.fff4e90010d7f0f5d5e88ed4851d1542p-1, + -0x1.ffff7ep-14 + }, + { // Entry 37 + 0x1.001154ba7ed485fbf804cd8280d4ca0fp-128, + -0x1.ffff9cp6 + }, + { // Entry 38 + 0x1.d58194f64f579173d9ee5d3c576ef523p-1, + -0x1.ffffa6p-4 + }, + { // Entry 39 + 0x1.f50767075372b29c5577b7a9610f8d69p-1, + -0x1.ffffc2p-6 + }, + { // Entry 40 + 0x1.6a09f2a8c76a7a3cfef0de81f2b79d8ep-1, + -0x1.ffffcep-2 + }, + { // Entry 41 + 0x1.ae89fed49903eff01fb8da20ee306a5ep-1, + -0x1.ffffdcp-3 + }, + { // Entry 42 + 0x1.00533afff5eeac6d2dc9023c0b872bdap1, + 0x1.0078p0 + }, + { // Entry 43 + 0x1.6a4a9ea1370039bb654a21a808d42ea9p0, + 0x1.0084p-1 + }, + { // Entry 44 + 0x1.6c0213db20e12d00b593e21b41ec6f7bp0, + 0x1.0401e0p-1 + }, + { // Entry 45 + 0x1.6d7c62dea2f8a79892ffb0a423c8312dp0, + 0x1.07p-1 + }, + { // Entry 46 + 0x1.02ea9d000ca7a3d1c9f2feff1d75d9e8p0, + 0x1.0bc2f0p-6 + }, + { // Entry 47 + 0x1.78d0620424ed2002d0f36cb6012c092cp0, + 0x1.1d8cp-1 + }, + { // Entry 48 + 0x1.8fbcc30b8a9d1ea185426ae7254fa29ap4, + 0x1.29256ap2 + }, + { // Entry 49 + 0x1.39e44cfffffe38aff28704c732b540fdp0, + 0x1.2d2eb8p-2 + }, + { // Entry 50 + 0x1.9394c50a159080ad377f98e1d382d21ap0, + 0x1.503cf0p-1 + }, + { // Entry 51 + 0x1.96718703f6190777431ca8e9c8d1e441p0, + 0x1.557558p-1 + }, + { // Entry 52 + 0x1.be25dcfffffde8b04e7c7b1baec7abdbp2, + 0x1.669390p1 + }, + { // Entry 53 + 0x1.7ca40f0c7bdc8b5683fc0560c6159f18p24, + 0x1.892816p4 + }, + { // Entry 54 + 0x1.2536aaffff141c8870e8d4c2352e92eap0, + 0x1.9103c2p-3 + }, + { // Entry 55 + 0x1.7ca44ef297d9c32fe00db5598642e868p1, + 0x1.92819ep0 + }, + { // Entry 56 + 0x1.000008ff47d7ee2ce82ae0bdaaa55772p0, + 0x1.9f5dc8p-21 + }, + { // Entry 57 + 0x1.93cdf30bca3f1ccc6eeb23eb6545f0fdp6, + 0x1.aa14b2p2 + }, + { // Entry 58 + 0x1.13252d0000f4b53775393a04dbee6cd3p0, + 0x1.aa2fc0p-4 + }, + { // Entry 59 + 0x1.28eb540000c5e726057f3ee56612a843p0, + 0x1.b61f44p-3 + }, + { // Entry 60 + 0x1.b5fead000022a86ec9bc4232da47f2fbp1, + 0x1.c65754p0 + }, + { // Entry 61 + 0x1.de844cffff0b21e0a471e9d560a514cbp0, + 0x1.ce0ac0p-1 + }, + { // Entry 62 + 0x1.000504ffff072985d71458d5d453850ep0, + 0x1.cf72b2p-14 + }, + { // Entry 63 + 0x1.c1c278fffb6bc7da81e20c43aeb9ce92p1, + 0x1.d02174p0 + }, + { // Entry 64 + 0x1.e1ae78ffff0000b5ca88867f54dcc891p0, + 0x1.d2e940p-1 + }, + { // Entry 65 + 0x1.1535d3000000cd03211e77e8de4eb7d2p0, + 0x1.d65f1cp-4 + }, + { // Entry 66 + 0x1.00051c0000007f998be0d45ef35f3d57p0, + 0x1.d7be2ep-14 + }, + { // Entry 67 + 0x1.f294d4fffeba9ad4fe553bc197fac243p0, + 0x1.ec62p-1 + }, + { // Entry 68 + 0x1.f294d4fffeba9ad4fe553bc197fac243p30, + 0x1.ef6310p4 + }, + { // Entry 69 + 0x1.ea3cb509a95f60a5d4162ea7e476f787p3, + 0x1.f7faa0p1 + }, + { // Entry 70 + 0x1.03343b47502c1f28eb63e7f42392c024p127, + 0x1.fc1260p6 + }, + { // Entry 71 + 0x1.16fc8b0000c873958ce77b558bb04b77p0, + 0x1.fc1d68p-4 + }, + { // Entry 72 + 0x1.69ea89000a943cbb444fe33ef6484b14p0, + 0x1.ff7ffep-2 + }, + { // Entry 73 + 0x1.69f25d08c9bdef92b155047e4e2700f8p0, + 0x1.ff9ff2p-2 + }, + { // Entry 74 + 0x1.ffef58078cd6d0d5f1fe65744c616496p3, + 0x1.fff9fep1 + }, + { // Entry 75 + 0x1.fff37b0a5ebca011d756edb4d62e7666p7, + 0x1.fffdbep2 + }, + { // Entry 76 + 0x1.fffe180726a04201907cd73f88488d80p31, + 0x1.ffffeap4 + }, + { // Entry 77 + 0x1.00000000000000000000000000000b17p0, + 0x1.fffffcp-117 + }, + { // Entry 78 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + -0x1.p-1 + }, + { // Entry 79 + 0x1.7b29357bbc48d2953781228b2e9ba474p-1, + -0x1.bbbbbcp-2 + }, + { // Entry 80 + 0x1.8d17d292bd084f608099344c40ba156ap-1, + -0x1.777778p-2 + }, + { // Entry 81 + 0x1.9fdf8b933e38a099e8b275aa655d720dp-1, + -0x1.333334p-2 + }, + { // Entry 82 + 0x1.b38aa517a000872460ce450b415297eep-1, + -0x1.dddde0p-3 + }, + { // Entry 83 + 0x1.c823e00b880a561008d5c1556a842a74p-1, + -0x1.555558p-3 + }, + { // Entry 84 + 0x1.ddb67fb66b77c35102ce41874e657eb6p-1, + -0x1.99999ep-4 + }, + { // Entry 85 + 0x1.f44e4f6ba2528a510e8a7cb8e11930bdp-1, + -0x1.111118p-5 + }, + { // Entry 86 + 0x1.05fbd4b8f440f2c1ccdb5cddeff66b41p0, + 0x1.11110cp-5 + }, + { // Entry 87 + 0x1.125fbecf4bc054e03912db82366b6cb5p0, + 0x1.999998p-4 + }, + { // Entry 88 + 0x1.1f59ac1b4b3e82b6e5a66ac50a8857dbp0, + 0x1.555554p-3 + }, + { // Entry 89 + 0x1.2cf0b4f3b26e63c9d3cb40b4bae31586p0, + 0x1.dddddcp-3 + }, + { // Entry 90 + 0x1.3b2c477e6e5f87fea4b02ead824f269ap0, + 0x1.333332p-2 + }, + { // Entry 91 + 0x1.4a142bd74a641ce0ee908779b7d214fcp0, + 0x1.777776p-2 + }, + { // Entry 92 + 0x1.59b088511d77ab47295346cb3a773b28p0, + 0x1.bbbbbap-2 + }, + { // Entry 93 + 0x1.6a09e5ea7aa390dbf868b7278b744829p0, + 0x1.fffffep-2 + }, + { // Entry 94 + 0x1.p48, + 0x1.80p5 + }, + { // Entry 95 + 0x1.51cb5ca59853a1e54593c77e7eb8db83p48, + 0x1.833334p5 + }, + { // Entry 96 + 0x1.bdb90b780b33357a359a52b9f7ce88d2p48, + 0x1.866668p5 + }, + { // Entry 97 + 0x1.26115591f845278abb13016348ac2f38p49, + 0x1.89999cp5 + }, + { // Entry 98 + 0x1.84066bd07579e097880a08553b47167ap49, + 0x1.8cccd0p5 + }, + { // Entry 99 + 0x1.000058b91b5bc9ae2eed81e9b7d4cfacp50, + 0x1.900004p5 + }, + { // Entry 100 + 0x1.51cbd1b7c03c121b017b7a63e5e7df2cp50, + 0x1.933338p5 + }, + { // Entry 101 + 0x1.bdb9a5f1f180173634542f42d5122e11p50, + 0x1.96666cp5 + }, + { // Entry 102 + 0x1.2611bb7c8fa36f3a6c96868064ca2d31p51, + 0x1.9999a0p5 + }, + { // Entry 103 + 0x1.8406f24b3ca53ff6aff423c41ab06efap51, + 0x1.9cccd4p5 + }, + { // Entry 104 + 0x1.p52, + 0x1.a0p5 + }, + { // Entry 105 + 0x1.p-52, + -0x1.a0p5 + }, + { // Entry 106 + 0x1.51cb5ca59853a1e54593c77e7eb8db83p-52, + -0x1.9cccccp5 + }, + { // Entry 107 + 0x1.bdb90b780b33357a359a52b9f7ce88d2p-52, + -0x1.999998p5 + }, + { // Entry 108 + 0x1.26115591f845278abb13016348ac2f38p-51, + -0x1.966664p5 + }, + { // Entry 109 + 0x1.84066bd07579e097880a08553b47167ap-51, + -0x1.933330p5 + }, + { // Entry 110 + 0x1.000058b91b5bc9ae2eed81e9b7d4cfacp-50, + -0x1.8ffffcp5 + }, + { // Entry 111 + 0x1.51cbd1b7c03c121b017b7a63e5e7df2cp-50, + -0x1.8cccc8p5 + }, + { // Entry 112 + 0x1.bdb9a5f1f180173634542f42d5122e11p-50, + -0x1.899994p5 + }, + { // Entry 113 + 0x1.2611bb7c8fa36f3a6c96868064ca2d31p-49, + -0x1.866660p5 + }, + { // Entry 114 + 0x1.8406f24b3ca53ff6aff423c41ab06efap-49, + -0x1.83332cp5 + }, + { // Entry 115 + 0x1.p-48, + -0x1.80p5 + }, + { // Entry 116 + HUGE_VALF, + 0x1.80p9 + }, + { // Entry 117 + 0.0f, + -0x1.c0p9 + }, + { // Entry 118 + HUGE_VALF, + 0x1.40p12 + }, + { // Entry 119 + 0.0f, + -0x1.60p12 + }, + { // Entry 120 + 0x1.ffff4e8e06c7e8a2a84daed8ec56d6c3p127, + 0x1.fffffep6 + }, + { // Entry 121 + 0x1.p-149, + -0x1.2ap7 + }, + { // Entry 122 + 0x1.fffe9d1c4b0f37f413d44c66c0481834p-129, + -0x1.000002p7 + }, + { // Entry 123 + 0x1.p-128, + -0x1.p7 + }, + { // Entry 124 + 0x1.000058b91b5bc9ae2eed81e9b7d4cfacp-128, + -0x1.fffffep6 + }, + { // Entry 125 + 0x1.ffff4e8e06c7e8a2a84daed8ec56d6c3p-65, + -0x1.000002p6 + }, + { // Entry 126 + 0x1.p-64, + -0x1.p6 + }, + { // Entry 127 + 0x1.00002c5c89d5ec6ca4d7c8acc017b7c9p-64, + -0x1.fffffep5 + }, + { // Entry 128 + 0x1.ffffa746fbb4062677bd0f506f391265p-33, + -0x1.000002p5 + }, + { // Entry 129 + 0x1.p-32, + -0x1.p5 + }, + { // Entry 130 + 0x1.0000162e43f4f831060e02d839a9d16dp-32, + -0x1.fffffep4 + }, + { // Entry 131 + 0x1.ffffd3a37bee075de43d49b9f60d05b0p-17, + -0x1.000002p4 + }, + { // Entry 132 + 0x1.p-16, + -0x1.p4 + }, + { // Entry 133 + 0x1.00000b1721bcfc99d9f890ea06911763p-16, + -0x1.fffffep3 + }, + { // Entry 134 + 0x1.ffffe9d1bd7c04bc4825147a8c0e63e3p-9, + -0x1.000002p3 + }, + { // Entry 135 + 0x1.p-8, + -0x1.p3 + }, + { // Entry 136 + 0x1.0000058b90cf1e6d97f9ca14dbcc1628p-8, + -0x1.fffffep2 + }, + { // Entry 137 + 0x1.fffff4e8de9f42a0cf11f7912ea17ee2p-5, + -0x1.000002p2 + }, + { // Entry 138 + 0x1.p-4, + -0x1.p2 + }, + { // Entry 139 + 0x1.000002c5c863b73f016468f6bac5ca2cp-4, + -0x1.fffffep1 + }, + { // Entry 140 + 0x1.fffffa746f47f160fcf890e3b801aeddp-3, + -0x1.000002p1 + }, + { // Entry 141 + 0x1.p-2, + -0x1.p1 + }, + { // Entry 142 + 0x1.00000162e430e5a18f6119e3c02282a5p-2, + -0x1.fffffep0 + }, + { // Entry 143 + 0x1.fffffd3a37a20cb4a12e24eaf25e3907p-2, + -0x1.000002p0 + }, + { // Entry 144 + 0x1.p-1, + -0x1.p0 + }, + { // Entry 145 + 0x1.000000b1721835514b86e6d96efd1bffp-1, + -0x1.fffffep-1 + }, + { // Entry 146 + 0x1.ffffa746fbb4062677bd0f506f391265p63, + 0x1.fffffep5 + }, + { // Entry 147 + 0x1.p64, + 0x1.p6 + }, + { // Entry 148 + 0x1.000058b91b5bc9ae2eed81e9b7d4cfacp64, + 0x1.000002p6 + }, + { // Entry 149 + 0x1.ffffd3a37bee075de43d49b9f60d05b0p31, + 0x1.fffffep4 + }, + { // Entry 150 + 0x1.p32, + 0x1.p5 + }, + { // Entry 151 + 0x1.00002c5c89d5ec6ca4d7c8acc017b7c9p32, + 0x1.000002p5 + }, + { // Entry 152 + 0x1.ffffe9d1bd7c04bc4825147a8c0e63e3p15, + 0x1.fffffep3 + }, + { // Entry 153 + 0x1.p16, + 0x1.p4 + }, + { // Entry 154 + 0x1.0000162e43f4f831060e02d839a9d16dp16, + 0x1.000002p4 + }, + { // Entry 155 + 0x1.fffff4e8de9f42a0cf11f7912ea17ee2p7, + 0x1.fffffep2 + }, + { // Entry 156 + 0x1.p8, + 0x1.p3 + }, + { // Entry 157 + 0x1.00000b1721bcfc99d9f890ea06911763p8, + 0x1.000002p3 + }, + { // Entry 158 + 0x1.fffffa746f47f160fcf890e3b801aeddp3, + 0x1.fffffep1 + }, + { // Entry 159 + 0x1.p4, + 0x1.p2 + }, + { // Entry 160 + 0x1.0000058b90cf1e6d97f9ca14dbcc1628p4, + 0x1.000002p2 + }, + { // Entry 161 + 0x1.fffffd3a37a20cb4a12e24eaf25e3907p1, + 0x1.fffffep0 + }, + { // Entry 162 + 0x1.p2, + 0x1.p1 + }, + { // Entry 163 + 0x1.000002c5c863b73f016468f6bac5ca2cp2, + 0x1.000002p1 + }, + { // Entry 164 + 0x1.fffffe9d1bd08b5b58ee4879a122966ep0, + 0x1.fffffep-1 + }, + { // Entry 165 + 0x1.p1, + 0x1.p0 + }, + { // Entry 166 + 0x1.00000162e430e5a18f6119e3c02282a5p1, + 0x1.000002p0 + }, + { // Entry 167 + 0x1.6a09e56d018a842b90dd06c362fef7adp-1, + -0x1.000002p-1 + }, + { // Entry 168 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + -0x1.p-1 + }, + { // Entry 169 + 0x1.6a09e6e56cd62cb1c0a32dacee6c1513p-1, + -0x1.fffffep-2 + }, + { // Entry 170 + 0x1.ae89f9007697475c5ad3c1ca20c5ef35p-1, + -0x1.000002p-2 + }, + { // Entry 171 + 0x1.ae89f995ad3ad5e8734d1773205a7fbcp-1, + -0x1.p-2 + }, + { // Entry 172 + 0x1.ae89f9e0488cb092fcee839efbf3fc4cp-1, + -0x1.fffffep-3 + }, + { // Entry 173 + 0x1.d5818d7e5e53ccaf85be04f92de7e9bfp-1, + -0x1.000002p-3 + }, + { // Entry 174 + 0x1.d5818dcfba48725da05aeb66e0dca9f5p-1, + -0x1.p-3 + }, + { // Entry 175 + 0x1.d5818df86842ca7e21cae1385c97eb97p-1, + -0x1.fffffep-4 + }, + { // Entry 176 + 0x1.ea4af9ffce0251f017bdb97010c11824p-1, + -0x1.000002p-4 + }, + { // Entry 177 + 0x1.ea4afa2a490d9858f73a18f5db301f86p-1, + -0x1.p-4 + }, + { // Entry 178 + 0x1.ea4afa3f86933ceebf0b1d7e2966b3fbp-1, + -0x1.fffffep-5 + }, + { // Entry 179 + 0x1.f50765a12fbd6e767118fa02bcb3a0d1p-1, + -0x1.000002p-5 + }, + { // Entry 180 + 0x1.f50765b6e4540674f84b762862baff99p-1, + -0x1.p-5 + }, + { // Entry 181 + 0x1.f50765c1be9f52ce811823dc464b40d5p-1, + -0x1.fffffep-6 + }, + { // Entry 182 + 0x1.fa7c180ef0814846b01522e83717ad71p-1, + -0x1.000002p-6 + }, + { // Entry 183 + 0x1.fa7c1819e90d82e90a7e74b263c1dc06p-1, + -0x1.p-6 + }, + { // Entry 184 + 0x1.fa7c181f6553a05107e91b90eea42d9dp-1, + -0x1.fffffep-7 + }, + { // Entry 185 + 0x1.fd3c22b37338eec4260da36a7b7f5bf3p-1, + -0x1.000002p-7 + }, + { // Entry 186 + 0x1.fd3c22b8f71f10975ba4b32bcf3a5e12p-1, + -0x1.p-7 + }, + { // Entry 187 + 0x1.fd3c22bbb9122186b26b482799ce40c7p-1, + -0x1.fffffep-8 + }, + { // Entry 188 + 0x1.fe9d96afde6082f2254715efc5f6ad7ep-1, + -0x1.000002p-8 + }, + { // Entry 189 + 0x1.fe9d96b2a23d914a6037442fde31baf8p-1, + -0x1.p-8 + }, + { // Entry 190 + 0x1.fe9d96b4042c1877edacd889b36d1cd5p-1, + -0x1.fffffep-9 + }, + { // Entry 191 + 0x1.ff4eaca2d6b2175e4332494fb1c24589p-1, + -0x1.000002p-9 + }, + { // Entry 192 + 0x1.ff4eaca4391b5da33e743691f7298b12p-1, + -0x1.p-9 + }, + { // Entry 193 + 0x1.ff4eaca4ea5000c618347451421210cbp-1, + -0x1.fffffep-10 + }, + { // Entry 194 + 0x1.ffa74ea2d09c67341271213869921167p-1, + -0x1.000002p-10 + }, + { // Entry 195 + 0x1.ffa74ea381efc217a773f15c025f7c0dp-1, + -0x1.p-10 + }, + { // Entry 196 + 0x1.ffa74ea3da996f8989012938d02dddfep-1, + -0x1.fffffep-11 + }, + { // Entry 197 + 0x1.fff4e8fd29da44c6f05c4a5baf1c2bedp-1, + -0x1.000002p-13 + }, + { // Entry 198 + 0x1.fff4e8fd40080cc8471f25ef2480b00bp-1, + -0x1.p-13 + }, + { // Entry 199 + 0x1.fff4e8fd4b1ef0c8f2dcd0f35ca5afeep-1, + -0x1.fffffep-14 + }, + { // Entry 200 + 0x1.6a09e5ea7aa390dbf868b7278b744829p0, + 0x1.fffffep-2 + }, + { // Entry 201 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p-1 + }, + { // Entry 202 + 0x1.6a09e762e5efbbd7217018250a3ab194p0, + 0x1.000002p-1 + }, + { // Entry 203 + 0x1.306fe06e5a2f2e8c620f7e55cc803dbap0, + 0x1.fffffep-3 + }, + { // Entry 204 + 0x1.306fe0a31b7152de8d5a46305c85edecp0, + 0x1.p-2 + }, + { // Entry 205 + 0x1.306fe10c9df5b6efbd400b7806005fa9p0, + 0x1.000002p-2 + }, + { // Entry 206 + 0x1.172b83afa4e77ab9fb14ed6d59000b58p0, + 0x1.fffffep-4 + }, + { // Entry 207 + 0x1.172b83c7d517adcdf7c8c50eb14a7920p0, + 0x1.p-3 + }, + { // Entry 208 + 0x1.172b83f835781a3f7a959adc6f517010p0, + 0x1.000002p-3 + }, + { // Entry 209 + 0x1.0b5586c403bc8139197ebf6ce09ca7f8p0, + 0x1.fffffep-5 + }, + { // Entry 210 + 0x1.0b5586cf9890f6298b92b71842a98364p0, + 0x1.p-4 + }, + { // Entry 211 + 0x1.0b5586e6c239e18bc2c6e6800e1a354ep0, + 0x1.000002p-4 + }, + { // Entry 212 + 0x1.059b0d2badb0e674d86f3abe58578c7dp0, + 0x1.fffffep-6 + }, + { // Entry 213 + 0x1.059b0d31585743ae7c548eb68ca417fep0, + 0x1.p-5 + }, + { // Entry 214 + 0x1.059b0d3cada3fe80087460f12b3f85d7p0, + 0x1.000002p-5 + }, + { // Entry 215 + 0x1.02c9a3e4aa830d8834bdc95da605d425p0, + 0x1.fffffep-7 + }, + { // Entry 216 + 0x1.02c9a3e778060ee6f7caca4f7a29bde9p0, + 0x1.p-6 + }, + { // Entry 217 + 0x1.02c9a3ed130c11bbcdfd15f6cb45777ap0, + 0x1.000002p-6 + }, + { // Entry 218 + 0x1.0163da9e4e61d5676fd32618f2719b20p0, + 0x1.fffffep-8 + }, + { // Entry 219 + 0x1.0163da9fb33356d84a66ae336dcdfa40p0, + 0x1.p-7 + }, + { // Entry 220 + 0x1.0163daa27cd659bfcb8505a08a66849ap0, + 0x1.000002p-7 + }, + { // Entry 221 + 0x1.00b1afa4f9deabc72f2d49f63a281424p0, + 0x1.fffffep-9 + }, + { // Entry 222 + 0x1.00b1afa5abcbed6129ab13ec11dc9544p0, + 0x1.p-8 + }, + { // Entry 223 + 0x1.00b1afa70fa6709690a3abda4929ec25p0, + 0x1.000002p-8 + }, + { // Entry 224 + 0x1.0058c86d48e8cd9376c92f8fe93335b6p0, + 0x1.fffffep-10 + }, + { // Entry 225 + 0x1.0058c86da1c09ea1ff19d294cf2f679cp0, + 0x1.p-9 + }, + { // Entry 226 + 0x1.0058c86e537040bf6c1a50920426e07fp0, + 0x1.000002p-9 + }, + { // Entry 227 + 0x1.002c605e0228b5b870970538ff3283dcp0, + 0x1.fffffep-11 + }, + { // Entry 228 + 0x1.002c605e2e8cec506d21bfc89a23a010p0, + 0x1.p-10 + }, + { // Entry 229 + 0x1.002c605e875559807d4b02cd5ace5723p0, + 0x1.000002p-10 + }, + { // Entry 230 + 0x1.00058ba01a2e49ed9aec7e37918c1a4ap0, + 0x1.fffffep-14 + }, + { // Entry 231 + 0x1.00058ba01fb9f96d6cacd4b180917c3ep0, + 0x1.p-13 + }, + { // Entry 232 + 0x1.00058ba02ad1586d1089c2dee94ea420p0, + 0x1.000002p-13 + }, + { // Entry 233 + 0.0f, + -0x1.2a0002p7 + }, + { // Entry 234 + 0x1.p-149, + -0x1.2ap7 + }, + { // Entry 235 + 0x1.0000b17255775c040618bf4a4ade83fcp-149, + -0x1.29fffep7 + }, + { // Entry 236 + 0.0f, + -0x1.2c0002p7 + }, + { // Entry 237 + 0.0f, + -0x1.2cp7 + }, + { // Entry 238 + 0.0f, + -0x1.2bfffep7 + }, + { // Entry 239 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 240 + 0.0, + -HUGE_VALF + }, + { // Entry 241 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 242 + 0.0f, + -0x1.fffffep127 + }, + { // Entry 243 + 0x1.1a66390580a2c585f3de207decb2766dp3, + 0x1.921fb6p1 + }, + { // Entry 244 + 0x1.d02319fe0cc8c798aae9bec1c301fce2p-4, + -0x1.921fb6p1 + }, + { // Entry 245 + 0x1.7c3f74a733d032aa52d1a81682e9aa9cp1, + 0x1.921fb6p0 + }, + { // Entry 246 + 0x1.58b3935bc68e5b61b8988445da3312edp-2, + -0x1.921fb6p0 + }, + { // Entry 247 + 0x1.00000162e430e5a18f6119e3c02282a5p1, + 0x1.000002p0 + }, + { // Entry 248 + 0x1.fffffd3a37a20cb4a12e24eaf25e3907p-2, + -0x1.000002p0 + }, + { // Entry 249 + 0x1.p1, + 0x1.p0 + }, + { // Entry 250 + 0x1.p-1, + -0x1.p0 + }, + { // Entry 251 + 0x1.fffffe9d1bd08b5b58ee4879a122966ep0, + 0x1.fffffep-1 + }, + { // Entry 252 + 0x1.000000b1721835514b86e6d96efd1bffp-1, + -0x1.fffffep-1 + }, + { // Entry 253 + 0x1.b93bbff5a7e572bcd51227c9b33976f0p0, + 0x1.921fb6p-1 + }, + { // Entry 254 + 0x1.290ee65a6808cb3ac67a086b51909f9dp-1, + -0x1.921fb6p-1 + }, + { // Entry 255 + 0x1.00000000000000000000000000000002p0, + 0x1.p-126 + }, + { // Entry 256 + 0x1.fffffffffffffffffffffffffffffffap-1, + -0x1.p-126 + }, + { // Entry 257 + 0x1.00000000000000000000000000000002p0, + 0x1.000002p-126 + }, + { // Entry 258 + 0x1.fffffffffffffffffffffffffffffffap-1, + -0x1.000002p-126 + }, + { // Entry 259 + 0x1.00000000000000000000000000000002p0, + 0x1.fffffcp-127 + }, + { // Entry 260 + 0x1.fffffffffffffffffffffffffffffffap-1, + -0x1.fffffcp-127 + }, + { // Entry 261 + 0x1.00000000000000000000000000000002p0, + 0x1.fffff8p-127 + }, + { // Entry 262 + 0x1.fffffffffffffffffffffffffffffffap-1, + -0x1.fffff8p-127 + }, + { // Entry 263 + 0x1.p0, + 0x1.p-148 + }, + { // Entry 264 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p-148 + }, + { // Entry 265 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 266 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p-149 + }, + { // Entry 267 + 0x1.p0, + 0.0f + }, + { // Entry 268 + 0x1.p0, + -0.0f + }, + { // Entry 269 + 0x1.ffff4e8e06c7e8a2a84daed8ec56d6c3p127, + 0x1.fffffep6 + }, + { // Entry 270 + HUGE_VALF, + 0x1.p7 + }, + { // Entry 271 + 0x1.p-126, + -0x1.f8p6 + }, + { // Entry 272 + 0x1.ffff4e8e06c7e8a2a84daed8ec56d6c3p-127, + -0x1.f80002p6 + }, + { // Entry 273 + 0x1.p125, + 0x1.f4p6 + }, + { // Entry 274 + 0x1.p-125, + -0x1.f4p6 + }, + { // Entry 275 + 0x1.p2, + 0x1.p1 + }, + { // Entry 276 + 0x1.p-2, + -0x1.p1 + } +}; diff --git a/tests/math_exp_intel_data.h b/tests/math_data/exp_intel_data.h similarity index 100% rename from tests/math_exp_intel_data.h rename to tests/math_data/exp_intel_data.h diff --git a/tests/math_expf_intel_data.h b/tests/math_data/expf_intel_data.h similarity index 100% rename from tests/math_expf_intel_data.h rename to tests/math_data/expf_intel_data.h diff --git a/tests/math_data/expm1_intel_data.h b/tests/math_data/expm1_intel_data.h new file mode 100644 index 000000000..be90c8dc1 --- /dev/null +++ b/tests/math_data/expm1_intel_data.h @@ -0,0 +1,1570 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_expm1_intel_data[] = { + { // Entry 0 + -0x1.ffffffffff0000000000555555555540p-41, + -0x1.0p-40 + }, + { // Entry 1 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p30 + }, + { // Entry 2 + -0x1.fe0154aaeed8738220213bf805c9a017p-8, + -0x1.0000000000002p-7 + }, + { // Entry 3 + -0x1.ffffffffffa000000000055555555556p-42, + -0x1.00000000001p-41 + }, + { // Entry 4 + -0x1.fe0154aaef571540b64b8485cc828f04p-8, + -0x1.00000000003ffp-7 + }, + { // Entry 5 + -0x1.43a54e4eb0119800b5b8f35e2b4e7e81p-1, + -0x1.000000002p0 + }, + { // Entry 6 + -0x1.bacf4c925373696fd21f24ae89354a32p-1, + -0x1.003p1 + }, + { // Entry 7 + -0x1.fcc2556e8534300e63c12f8a5a1106b6p-7, + -0x1.006p-6 + }, + { // Entry 8 + -0x1.bdaeea20744956636e2e888fc1809651p-1, + -0x1.059def2b2f2c4p1 + }, + { // Entry 9 + -0x1.07ffffffff77e00000002ecafffffff3p-40, + -0x1.080p-40 + }, + { // Entry 10 + -0x1.1b19e5e90e6538002ec4e9f63c1927a9p-3, + -0x1.30ae80687cd57p-3 + }, + { // Entry 11 + -0x1.d23c83e5c923a8d750b23742ad5d2d3dp-1, + -0x1.3519530a863ffp1 + }, + { // Entry 12 + -0x1.34533cf44744c7f7dfe24cc81ce93a5ep-4, + -0x1.408c0a43cd97cp-4 + }, + { // Entry 13 + -0x1.79c6caa9e49af4463cee3d526a8e1762p-1, + -0x1.56bccf9c08f94p0 + }, + { // Entry 14 + -0x1.7de898bb4a1814449fc9bf5a787f2ce3p-1, + -0x1.5ebe08ce59440p0 + }, + { // Entry 15 + -0x1.fde856b4a6b0d7fc360a96572944a5edp-1, + -0x1.5ffffffffff80p2 + }, + { // Entry 16 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6p9 + }, + { // Entry 17 + -0x1.7f637276db37ab8b4f8af38ad62afdb3p-1, + -0x1.61abd3bb638ffp0 + }, + { // Entry 18 + -0x1.7fd3858818630ad9afd1179848ee2effp-1, + -0x1.628b4a70e8586p0 + }, + { // Entry 19 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62ep9 + }, + { // Entry 20 + -0x1.785b18f5275d64a3f5fda9ef739d80b5p-8, + -0x1.7970cf2265b9ap-8 + }, + { // Entry 21 + -0x1.8b92870fa2b597fe9b02c25e9ad8a3cep-4, + -0x1.ap-4 + }, + { // Entry 22 + -0x1.b57abe9ba86d56e26962c5525f1347a7p-8, + -0x1.b6f238c2a040ap-8 + }, + { // Entry 23 + -0x1.b57abe9ba88897ff1194f673b12e2258p-8, + -0x1.b6f238c2a05c1p-8 + }, + { // Entry 24 + -0x1.b57abe9ba88917245435a89f6cc2597ep-8, + -0x1.b6f238c2a05c9p-8 + }, + { // Entry 25 + -0x1.b76f5651d19c26f8956b99cf61f3f2efp-6, + -0x1.bd6f7bfa7895ep-6 + }, + { // Entry 26 + -0x1.b76f5651d3bc6710b0229be3f9607089p-6, + -0x1.bd6f7bfa7ac52p-6 + }, + { // Entry 27 + -0x1.a78c2b7ae21669f0f3cd37c10528267ep-1, + -0x1.c18p0 + }, + { // Entry 28 + -0x1.2b8ded3132d61ffff49548b6ec6ec8c6p-1, + -0x1.c26p-1 + }, + { // Entry 29 + -0x1.ac6b158d953de99425206483bdcd2b28p-1, + -0x1.dp0 + }, + { // Entry 30 + -0x1.ffefffffffffe8007ffe000000954f55p-54, + -0x1.ffeffffffffffp-54 + }, + { // Entry 31 + -0x1.bab52178ee9089cf090261ec85161b44p-1, + -0x1.ffff3ffffffffp0 + }, + { // Entry 32 + -0x1.f69f5523ef47a800c36704994de6bf7cp-1, + -0x1.fffffffffe9efp1 + }, + { // Entry 33 + -0x1.fe0154aaee98b381f5a12261d8cf0352p-8, + -0x1.ffffffffffcp-8 + }, + { // Entry 34 + -0x1.92e9a0720d3027f60f578a2cd30d104ep-2, + -0x1.ffffffffffe7fp-2 + }, + { // Entry 35 + -0x1.bab5557101f8c8d73cd274ba659b2727p-1, + -0x1.ffffffffffffep0 + }, + { // Entry 36 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep7 + }, + { // Entry 37 + 0x1.000000000080000000002aaaaaaaaab5p-40, + 0x1.0p-40 + }, + { // Entry 38 + 0x1.000000000000080000000000002aaaaap-52, + 0x1.0p-52 + }, + { // Entry 39 + 0x1.9476504ba885758aa5fa7545e10e8e46p738, + 0x1.0000000000001p9 + }, + { // Entry 40 + 0x1.0f2ebb2c65d9a80081ac2e65e8025ab1p23, + 0x1.000000020p4 + }, + { // Entry 41 + 0x1.e5208c8ebb607ad767c1adb2ae9616f4p739, + 0x1.007p9 + }, + { // Entry 42 + 0x1.040000000084080000002cb2b5555560p-40, + 0x1.040p-40 + }, + { // Entry 43 + 0x1.c61e8108cb3b100f4a9641fe4b59d5a2p0, + 0x1.052f742bb53d6p0 + }, + { // Entry 44 + 0x1.06466f97b426d000000a905602d7fb69p-10, + 0x1.0624decad85d9p-10 + }, + { // Entry 45 + 0x1.65591a3a7b9fabe891c2ea5f47a6bb96p-1, + 0x1.0f0ffffffffffp-1 + }, + { // Entry 46 + 0x1.66f0fb901f2bd45d99c3ae0c5506ad7fp-1, + 0x1.1p-1 + }, + { // Entry 47 + 0x1.26beacef84dda800ee87d91d88c199a7p-6, + 0x1.242p-6 + }, + { // Entry 48 + 0x1.11f6270d25be700ef7c34d02a29974f1p53, + 0x1.266fd7cddff42p5 + }, + { // Entry 49 + 0x1.2d26216139d81006bcd5c876ca600a38p53, + 0x1.27319e818c230p5 + }, + { // Entry 50 + 0x1.4d13fbb1a00192785df27257f060e683p53, + 0x1.280p5 + }, + { // Entry 51 + 0x1.60c9b536e33bafefc62bca96f884a22ep53, + 0x1.2875bd6dab630p5 + }, + { // Entry 52 + 0x1.8244f738ab986fcb022374240d8605cap53, + 0x1.292f6d8d306c3p5 + }, + { // Entry 53 + 0x1.f4b1ecd508504fdbe96629980d48a020p53, + 0x1.2b42ce6e584ebp5 + }, + { // Entry 54 + 0x1.88a122d234b394b88696ada7f7c11a0ap865, + 0x1.2c0p9 + }, + { // Entry 55 + 0x1.6641633703ea28000010995bb7c4b21dp-2, + 0x1.33333342022a7p-2 + }, + { // Entry 56 + 0x1.04dadee28c11c800fb9094435c1de727p7, + 0x1.38389c48b0fcep2 + }, + { // Entry 57 + 0x1.007848baed8b37c3e6cc3bfb1a101644p58, + 0x1.41a28cd5395c0p5 + }, + { // Entry 58 + 0x1.0c719229fb04b7c21ec3e0d7f2aed918p58, + 0x1.42000000040p5 + }, + { // Entry 59 + 0x1.10924600307447c139d9bb2f82ff9a27p58, + 0x1.421f4066cf2fcp5 + }, + { // Entry 60 + 0x1.31d215d36b1cc7c023dacc0edfa71bebp58, + 0x1.430af90c17e36p5 + }, + { // Entry 61 + 0x1.379553b19df207c01565e5f16d485d4dp58, + 0x1.4331346ca6ce7p5 + }, + { // Entry 62 + 0x1.379553b498da57c00fec0a571dd48a6fp58, + 0x1.4331346cba64fp5 + }, + { // Entry 63 + 0x1.4bc2fdce156117bf5a49805dd419c072p58, + 0x1.43b1b79351f4ep5 + }, + { // Entry 64 + 0x1.cf392076a1bdd7bf0d53e64efec10053p58, + 0x1.465d52b8b0596p5 + }, + { // Entry 65 + 0x1.df8028d08d7bf7c01a066c0bca539e5ap58, + 0x1.46a40dae90670p5 + }, + { // Entry 66 + 0x1.ea57988e94c817bf8f52f84ed3df88b0p58, + 0x1.46d1d7d9e8a98p5 + }, + { // Entry 67 + 0x1.cb419b9279b35763d113e6c5db79dc54p943, + 0x1.471c71c71c71cp9 + }, + { // Entry 68 + 0x1.f1345355d78ba4bf7b3fd1e3ecbf7dfdp948, + 0x1.48e2388e2391cp9 + }, + { // Entry 69 + 0x1.55ab836495abe800005ca6d200952433p1, + 0x1.4cccccce8ce97p0 + }, + { // Entry 70 + 0x1.6a77c2478bdb150bbc8ea756bbb8570bp970, + 0x1.5059aabfe5765p9 + }, + { // Entry 71 + 0x1.e1afc1f1512b7428d3d28c586dcd7da0p974, + 0x1.51e0f4c70ecdap9 + }, + { // Entry 72 + 0x1.5b1bac52655bf015d0c0897352cff074p-8, + 0x1.5a312e2d5469ep-8 + }, + { // Entry 73 + 0x1.5d98a8b1c5b8a043f872dce4155ba02dp-8, + 0x1.5caacc5a85cadp-8 + }, + { // Entry 74 + 0x1.f2a3c29fc6d723a63e349bbcd7894a8ap1008, + 0x1.5dadf5d1e452cp9 + }, + { // Entry 75 + 0x1.624ca1ace3f15973a463b539c79a29fdp-8, + 0x1.615856f590456p-8 + }, + { // Entry 76 + 0x1.624ca1ace613a9790c0e0fcff924bb7fp-8, + 0x1.615856f59264cp-8 + }, + { // Entry 77 + 0x1.fffffffffc72a1b0e266677220702371p1023, + 0x1.62e42fefa39e1p9 + }, + { // Entry 78 + 0x1.66bb6f898c6b5fb5d846de17be366ad0p-8, + 0x1.65c100ffac3fdp-8 + }, + { // Entry 79 + 0x1.03854c2737b8d7ffffa5944ecc584479p0, + 0x1.66666668c8bc0p-1 + }, + { // Entry 80 + 0x1.ad445f949fa7d34496e83174e2786b07p-2, + 0x1.668p-2 + }, + { // Entry 81 + 0x1.67ad945f2f1d9fe2b66dc062db7996efp-8, + 0x1.66b1d3ec2054fp-8 + }, + { // Entry 82 + 0x1.ae35f07f55b872de4707744c0a26ae90p-2, + 0x1.672a28295e9c9p-2 + }, + { // Entry 83 + 0x1.78a4af6b33748fe2cb05dd6a4bfa7056p-8, + 0x1.7790abed48f5ap-8 + }, + { // Entry 84 + 0x1.7bcae2fa3a8cc8cce95336f706279e5ap-8, + 0x1.7ab23f3a26807p-8 + }, + { // Entry 85 + 0x1.7ce527adde0b88d06ecba195c7b0aa4cp-8, + 0x1.7bcae2fa3adbep-8 + }, + { // Entry 86 + 0x1.7ce527ade0f5d8d09fcd9764c82d1274p-8, + 0x1.7bcae2fa3dc1ep-8 + }, + { // Entry 87 + 0x1.7e0110f8b0e678d4a8586472ae7bc1d2p-8, + 0x1.7ce527ade25b4p-8 + }, + { // Entry 88 + 0x1.7f1ea28925a638dc0db4fbf091b90b09p-8, + 0x1.7e0110f8b0c8cp-8 + }, + { // Entry 89 + 0x1.803de018c41128de07c3aaf8cd79d45cp-8, + 0x1.7f1ea28926651p-8 + }, + { // Entry 90 + 0x1.fe31152b7ef6b1e0a8b9fec7ecdd85a4p553, + 0x1.8p8 + }, + { // Entry 91 + 0x1.d38c898541cf95544db45ffc7e46fd16p-2, + 0x1.812p-2 + }, + { // Entry 92 + 0x1.8527a1ecdbec28000500f2ef81065e65p-7, + 0x1.82dcb4e52cab1p-7 + }, + { // Entry 93 + 0x1.8fe5e61a83cad7fcee78aa274e8dc654p-9, + 0x1.8f4a0b9ff7ed0p-9 + }, + { // Entry 94 + 0x1.e9306d671550b7fce52fe384e236ed51p-2, + 0x1.8fep-2 + }, + { // Entry 95 + 0x1.aec7b35c8c209fffffe76d4ac148ca7ap-4, + 0x1.9999999be6ebep-4 + }, + { // Entry 96 + 0x1.c56ecf3ddea747ffffa1cfcd9266f384p-3, + 0x1.999999a7f45f9p-3 + }, + { // Entry 97 + 0x1.f7a0e4d5067effffffc2bf0d03877722p-2, + 0x1.999999a867f17p-2 + }, + { // Entry 98 + 0x1.f7a0e4d8af7c480000325c9866d3f666p-2, + 0x1.999999aadc06ap-2 + }, + { // Entry 99 + 0x1.fc8ecabe156a92f92ccd95f742d5f70fp-2, + 0x1.9ce61d3061544p-2 + }, + { // Entry 100 + 0x1.c8082a8e3022880002e39fa93786b0cep-4, + 0x1.b062a2df1de98p-4 + }, + { // Entry 101 + 0x1.b5e1f0f0c1d798a5b169cb191cd0c621p-8, + 0x1.b46d1b46e5ccep-8 + }, + { // Entry 102 + 0x1.b5e9fa9919edd8bafdec03458df49c11p-8, + 0x1.b4751746e5ccdp-8 + }, + { // Entry 103 + 0x1.b5e9fa9919ede8d65c8bacd72cd2a89cp-8, + 0x1.b4751746e5ccep-8 + }, + { // Entry 104 + 0x1.b7594565a4b428b4734e2c9b43bec612p-8, + 0x1.b5e1f0f0af677p-8 + }, + { // Entry 105 + 0x1.cf7fce3931c5e7ffe406b08dc477f91bp-8, + 0x1.cdde2e3d70c6dp-8 + }, + { // Entry 106 + 0x1.cf44b5362775480990d2193fdac2a6c2p-9, + 0x1.ce739ce735ce2p-9 + }, + { // Entry 107 + 0x1.8260dae0f18853ff9edaf44b27ba17b2p0, + 0x1.d70a3d70a3d71p-1 + }, + { // Entry 108 + 0x1.dec5c594a41bb72f3ab6a63927f8e80dp-8, + 0x1.dd083d2908a81p-8 + }, + { // Entry 109 + 0x1.e08690c3fb77571e49537d4d5f69aaf2p-8, + 0x1.dec5c594ecfbcp-8 + }, + { // Entry 110 + 0x1.e6f8da92954ce80b660157d3ae9f4e70p-9, + 0x1.e611d78dcf946p-9 + }, + { // Entry 111 + 0x1.95e784ba628073ff77d2f7ed4d6201bcp0, + 0x1.e65f036272239p-1 + }, + { // Entry 112 + 0x1.e7d8753271e7a80359bd34ac05d687f5p-9, + 0x1.e6f09e1a48351p-9 + }, + { // Entry 113 + 0x1.98df5c213427f4084f77d615f3544c56p0, + 0x1.e8a974c5d39f7p-1 + }, + { // Entry 114 + 0x1.9f5b8bec582e4b59bb698dbd2576ed44p0, + 0x1.eda1b9b5dff58p-1 + }, + { // Entry 115 + 0x1.f1be12f8f20cf876bccb9e47e3eb30b8p-7, + 0x1.ee0p-7 + }, + { // Entry 116 + 0x1.f15c950aadd3178e4e8d488691307274p-8, + 0x1.ef7bdef7bdef2p-8 + }, + { // Entry 117 + 0x1.f4647ce7fdefc80415bb8c747bed498ep-9, + 0x1.f3709599bd0a0p-9 + }, + { // Entry 118 + 0x1.fbfc81c0062a280bc3db8a3918010b6ap-9, + 0x1.fb01276ad538bp-9 + }, + { // Entry 119 + 0x1.4231178c2348f5f77eedb27dc404f616p734, + 0x1.fcfffffffffffp8 + }, + { // Entry 120 + 0x1.74218bce788eb46746b38b578759ecc0p11, + 0x1.ffeffffffffffp2 + }, + { // Entry 121 + 0x1.00000000009ff7ffffffea9aaaaaaa63p-39, + 0x1.ffffffffff3ffp-40 + }, + { // Entry 122 + 0x1.0000000000000ffffffffffffeaaaaaap-50, + 0x1.ffffffffffffep-51 + }, + { // Entry 123 + 0x1.ffffffffffffe7ffffffffffff155555p-54, + 0x1.ffffffffffffep-54 + }, + { // Entry 124 + 0x1.00000000007ff80000002aa2aaaaaab5p-40, + 0x1.fffffffffffffp-41 + }, + { // Entry 125 + 0x1.304d6aeca25253146dec9182369ba415p69, + 0x1.7ffffffffffffp5 + }, + { // Entry 126 + 0x1.304d6aeca254b3af43c5d6293d5f65c7p69, + 0x1.8p5 + }, + { // Entry 127 + 0x1.304d6aeca257144a199f1ad50558d32cp69, + 0x1.8000000000001p5 + }, + { // Entry 128 + -0x1.ffffffffffffffffffc0e327b6954e21p-1, + -0x1.a000000000001p5 + }, + { // Entry 129 + -0x1.ffffffffffffffffffc0e327b6954da3p-1, + -0x1.ap5 + }, + { // Entry 130 + -0x1.ffffffffffffffffffc0e327b6954d25p-1, + -0x1.9ffffffffffffp5 + }, + { // Entry 131 + 0x1.55779b984f395dea36a277b8bee2c64cp115, + 0x1.3ffffffffffffp6 + }, + { // Entry 132 + 0x1.55779b984f3eb3c8a503b4a8e2487d98p115, + 0x1.4p6 + }, + { // Entry 133 + 0x1.55779b984f4409a71364f1ae5d27ee69p115, + 0x1.4000000000001p6 + }, + { // Entry 134 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.6000000000001p6 + }, + { // Entry 135 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.6p6 + }, + { // Entry 136 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.5ffffffffffffp6 + }, + { // Entry 137 + 0x1.40a4b9c27150866176d22f2139d1d40fp923, + 0x1.3ffffffffffffp9 + }, + { // Entry 138 + 0x1.40a4b9c271789af8af205bb34f743337p923, + 0x1.4p9 + }, + { // Entry 139 + 0x1.40a4b9c271a0af8fe76e8d47f7fd9c26p923, + 0x1.4000000000001p9 + }, + { // Entry 140 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6000000000001p9 + }, + { // Entry 141 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6p9 + }, + { // Entry 142 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.5ffffffffffffp9 + }, + { // Entry 143 + 0x1.03996528e072b78a330480884c79baf7p75, + 0x1.9ffffffffffffp5 + }, + { // Entry 144 + 0x1.03996528e074bebcfd56416fc2c0eb92p75, + 0x1.ap5 + }, + { // Entry 145 + 0x1.03996528e076c5efc7a8025b476db0d0p75, + 0x1.a000000000001p5 + }, + { // Entry 146 + -0x1.fffffffffffffffff28a2a28e2df408cp-1, + -0x1.8000000000001p5 + }, + { // Entry 147 + -0x1.fffffffffffffffff28a2a28e2df25a0p-1, + -0x1.8p5 + }, + { // Entry 148 + -0x1.fffffffffffffffff28a2a28e2df0ab5p-1, + -0x1.7ffffffffffffp5 + }, + { // Entry 149 + 0x1.f1056dc7bf1b0fc857b67999f503526fp126, + 0x1.5ffffffffffffp6 + }, + { // Entry 150 + 0x1.f1056dc7bf22d3de0ed57615bc501f87p126, + 0x1.6p6 + }, + { // Entry 151 + 0x1.f1056dc7bf2a97f3c5f472b093f3c91bp126, + 0x1.6000000000001p6 + }, + { // Entry 152 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.4000000000001p6 + }, + { // Entry 153 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.4p6 + }, + { // Entry 154 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.3ffffffffffffp6 + }, + { // Entry 155 + 0x1.93bf4ec282bd3b36cd2f4011488a8364p1015, + 0x1.5ffffffffffffp9 + }, + { // Entry 156 + 0x1.93bf4ec282efb320a57f9ae02e01ae51p1015, + 0x1.6p9 + }, + { // Entry 157 + 0x1.93bf4ec283222b0a7dcffbfe10b3e34ap1015, + 0x1.6000000000001p9 + }, + { // Entry 158 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.4000000000001p9 + }, + { // Entry 159 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.4p9 + }, + { // Entry 160 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.3ffffffffffffp9 + }, + { // Entry 161 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.1cb90bfbe8e7cp9 + }, + { // Entry 162 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.397217f7d1cf8p9 + }, + { // Entry 163 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.562b23f3bab73p9 + }, + { // Entry 164 + -0x1.0000000000000654361c4c67fbf90232p-1, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 165 + -0x1.fffffffffffffca86c3898cff81747c6p-2, + -0x1.62e42fefa39efp-1 + }, + { // Entry 166 + -0x1.ffffffffffffeca86c3898cff7bc8b28p-2, + -0x1.62e42fefa39eep-1 + }, + { // Entry 167 + -0x1.2bec3330188676e1ed35fec1b10e40dcp-2, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 168 + -0x1.2bec333018866b919e02bf23cad327f3p-2, + -0x1.62e42fefa39efp-2 + }, + { // Entry 169 + -0x1.2bec3330188660414ecf7f85e46acdcdp-2, + -0x1.62e42fefa39eep-2 + }, + { // Entry 170 + -0x1.45d819a94b14b3030eebbb9c6d4a2ce8p-3, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 171 + -0x1.45d819a94b14a58ebf1f0e3296a2beb6p-3, + -0x1.62e42fefa39efp-3 + }, + { // Entry 172 + -0x1.45d819a94b14981a6f5260c8bfe067e5p-3, + -0x1.62e42fefa39eep-3 + }, + { // Entry 173 + -0x1.53f391822dbc78ae783b45864b0aa398p-4, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 174 + -0x1.53f391822dbc6a026bccc7b4077bfc0ap-4, + -0x1.62e42fefa39efp-4 + }, + { // Entry 175 + -0x1.53f391822dbc5b565f5e49e1c3dea870p-4, + -0x1.62e42fefa39eep-4 + }, + { // Entry 176 + -0x1.5b505d5b6f26868f9677878648368b11p-5, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 177 + -0x1.5b505d5b6f26773d3ea6353ddb75fe46p-5, + -0x1.62e42fefa39efp-5 + }, + { // Entry 178 + -0x1.5b505d5b6f2667eae6d4e2f56eadc84fp-5, + -0x1.62e42fefa39eep-5 + }, + { // Entry 179 + -0x1.5f134923757f3dc3f347d61df5fb6626p-6, + -0x1.62e42fefa39f0p-6 + }, + { // Entry 180 + -0x1.5f134923757f2e1bb81a1efb55c8e21cp-6, + -0x1.62e42fefa39efp-6 + }, + { // Entry 181 + -0x1.5f134923757f1e737cec67d8b5927402p-6, + -0x1.62e42fefa39eep-6 + }, + { // Entry 182 + 0x1.66c34c5615d0d7db1473bac29ad1b98dp-6, + 0x1.62e42fefa39eep-6 + }, + { // Entry 183 + 0x1.66c34c5615d0e834c546d0480f09bb89p-6, + 0x1.62e42fefa39efp-6 + }, + { // Entry 184 + 0x1.66c34c5615d0f88e7619e5cd8345d3f0p-6, + 0x1.62e42fefa39f0p-6 + }, + { // Entry 185 + 0x1.6ab0d9f3121eb0fea4f25282282cb459p-5, + 0x1.62e42fefa39eep-5 + }, + { // Entry 186 + 0x1.6ab0d9f3121ec1b3fd5f4c0b37896101p-5, + 0x1.62e42fefa39efp-5 + }, + { // Entry 187 + 0x1.6ab0d9f3121ed26955cc459446ee6856p-5, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 188 + 0x1.72b83c7d517ac7c7c0d3432ad543afa6p-4, + 0x1.62e42fefa39eep-4 + }, + { // Entry 189 + 0x1.72b83c7d517ad93a790fc07c501430c3p-4, + 0x1.62e42fefa39efp-4 + }, + { // Entry 190 + 0x1.72b83c7d517aeaad314c3dcdcaf62498p-4, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 191 + 0x1.837f0518db8a7ff3f7635f5fbe54ebe8p-3, + 0x1.62e42fefa39eep-3 + }, + { // Entry 192 + 0x1.837f0518db8a92faf56d9116d367dad5p-3, + 0x1.62e42fefa39efp-3 + }, + { // Entry 193 + 0x1.837f0518db8aa601f377c2cde8a0d7bep-3, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 194 + 0x1.a827999fcef308c835779a431e05cabbp-2, + 0x1.62e42fefa39eep-2 + }, + { // Entry 195 + 0x1.a827999fcef31f68d3de197eea562ccep-2, + 0x1.62e42fefa39efp-2 + }, + { // Entry 196 + 0x1.a827999fcef33609724498bab701115ap-2, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 197 + 0x1.ffffffffffffd950d871319ff0ef3435p-1, + 0x1.62e42fefa39eep-1 + }, + { // Entry 198 + 0x1.fffffffffffff950d871319ff039baf9p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 199 + 0x1.0000000000000ca86c3898cff84220dep0, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 200 + 0x1.7fffffffffffd950d871319ff1aa4328p1, + 0x1.62e42fefa39eep0 + }, + { // Entry 201 + 0x1.7ffffffffffff950d871319ff03f50afp1, + 0x1.62e42fefa39efp0 + }, + { // Entry 202 + 0x1.8000000000001950d871319ff0d45e36p1, + 0x1.62e42fefa39f0p0 + }, + { // Entry 203 + 0x1.dfffffffffffb2a1b0e2633fe640c21bp3, + 0x1.62e42fefa39eep1 + }, + { // Entry 204 + 0x1.dffffffffffff2a1b0e2633fe094f837p3, + 0x1.62e42fefa39efp1 + }, + { // Entry 205 + 0x1.e0000000000032a1b0e2633fe2e92e54p3, + 0x1.62e42fefa39f0p1 + }, + { // Entry 206 + 0x1.fdffffffffff654361c4c67fd8327361p7, + 0x1.62e42fefa39eep2 + }, + { // Entry 207 + 0x1.fdffffffffffe54361c4c67fc1834bd3p7, + 0x1.62e42fefa39efp2 + }, + { // Entry 208 + 0x1.fe0000000000654361c4c67fcad42444p7, + 0x1.62e42fefa39f0p2 + }, + { // Entry 209 + 0x1.fffdfffffffeca86c3898cffdf28a36fp15, + 0x1.62e42fefa39eep3 + }, + { // Entry 210 + 0x1.fffdffffffffca86c3898cff846c0534p15, + 0x1.62e42fefa39efp3 + }, + { // Entry 211 + 0x1.fffe00000000ca86c3898cffa9af66f9p15, + 0x1.62e42fefa39f0p3 + }, + { // Entry 212 + 0x1.fffffffdfffd950d87131a007960398fp31, + 0x1.62e42fefa39eep4 + }, + { // Entry 213 + 0x1.fffffffdffff950d871319ff0e6dc0a3p31, + 0x1.62e42fefa39efp4 + }, + { // Entry 214 + 0x1.fffffffe0001950d871319ffa37b47b6p31, + 0x1.62e42fefa39f0p4 + }, + { // Entry 215 + 0x1.ffffffffffb2a1b0e26345b8dfe00697p1023, + 0x1.62e42fefa39eep9 + }, + { // Entry 216 + 0x1.fffffffffff2a1b0e263400d15fc52ffp1023, + 0x1.62e42fefa39efp9 + }, + { // Entry 217 + HUGE_VAL, + 0x1.62e42fefa39f0p9 + }, + { // Entry 218 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39f0p9 + }, + { // Entry 219 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39efp9 + }, + { // Entry 220 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39eep9 + }, + { // Entry 221 + -0x1.c5041854df7d5ed1e4b8c796ef6ef281p-3, + -0x1.0000000000001p-2 + }, + { // Entry 222 + -0x1.c5041854df7d45e5f51a1b14e4b86234p-3, + -0x1.0p-2 + }, + { // Entry 223 + -0x1.c5041854df7d396ffd4ac4d3df37b827p-3, + -0x1.fffffffffffffp-3 + }, + { // Entry 224 + -0x1.e14aed893eef58797f12838f2b969ac0p-4, + -0x1.0000000000001p-3 + }, + { // Entry 225 + -0x1.e14aed893eef3c3c14ed960d0a2b5054p-4, + -0x1.0p-3 + }, + { // Entry 226 + -0x1.e14aed893eef2e1d5fdb1f4bf9607d0ep-4, + -0x1.fffffffffffffp-4 + }, + { // Entry 227 + -0x1.f0540438fd5c4fb179fdc0f96e33a687p-5, + -0x1.0000000000001p-4 + }, + { // Entry 228 + -0x1.f0540438fd5c31a1ce01f9f6ca74502bp-5, + -0x1.0p-4 + }, + { // Entry 229 + -0x1.f0540438fd5c2299f804167578895f1dp-5, + -0x1.fffffffffffffp-5 + }, + { // Entry 230 + -0x1.f8152aee9450fc6df41295c712a2cfcbp-6, + -0x1.0000000000001p-5 + }, + { // Entry 231 + -0x1.f8152aee9450dd69fea80d113b1945c7p-6, + -0x1.0p-5 + }, + { // Entry 232 + -0x1.f8152aee9450cde803f2c8b64f4eb008p-6, + -0x1.fffffffffffffp-6 + }, + { // Entry 233 + -0x1.fc055004416dd58cbbb4a9b4ef23fb67p-7, + -0x1.0000000000001p-6 + }, + { // Entry 234 + -0x1.fc055004416db60bbd08aac54a956e76p-7, + -0x1.0p-6 + }, + { // Entry 235 + -0x1.fc055004416da64b3db2ab4d784b33e6p-7, + -0x1.fffffffffffffp-7 + }, + { // Entry 236 + -0x1.fe0154aaeed853c1e04bd155e0d61457p-8, + -0x1.0000000000001p-7 + }, + { // Entry 237 + -0x1.fe0154aaeed83401a07666b3bbde908fp-8, + -0x1.0p-7 + }, + { // Entry 238 + -0x1.fe0154aaeed82421808bb162a96151a8p-8, + -0x1.fffffffffffffp-8 + }, + { // Entry 239 + -0x1.ff0055400443ae32f1e9274ffa299d5dp-9, + -0x1.0000000000001p-8 + }, + { // Entry 240 + -0x1.ff00554004438e52e1ee7b503e63818cp-9, + -0x1.0p-8 + }, + { // Entry 241 + -0x1.ff00554004437e62d9f12550607fb463p-9, + -0x1.fffffffffffffp-9 + }, + { // Entry 242 + -0x1.ff801552aaef092effe8945b04b60168p-10, + -0x1.0000000000001p-9 + }, + { // Entry 243 + -0x1.ff801552aaeee93efbe93ef05c2dcb20p-10, + -0x1.0p-9 + }, + { // Entry 244 + -0x1.ff801552aaeed946f9e9943b07e9502cp-10, + -0x1.fffffffffffffp-10 + }, + { // Entry 245 + -0x1.ffc005550004640ec40c0e6e9887b0c9p-11, + -0x1.0000000000001p-10 + }, + { // Entry 246 + -0x1.ffc0055500044416c30c23c298990114p-11, + -0x1.0p-10 + }, + { // Entry 247 + -0x1.ffc005550004341ac28c2e6c98a17946p-11, + -0x1.fffffffffffffp-11 + }, + { // Entry 248 + -0x1.fff80015552acaedee97e99bef6c42ffp-14, + -0x1.0000000000001p-13 + }, + { // Entry 249 + -0x1.fff80015552aaaeeee93e9a69a01a076p-14, + -0x1.0p-13 + }, + { // Entry 250 + -0x1.fff80015552a9aef6e91e9abef4c4932p-14, + -0x1.fffffffffffffp-14 + }, + { // Entry 251 + 0x1.22d78f0fa0618f943ff0bb2de7cfdf0cp-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 252 + 0x1.22d78f0fa06199d9ef0eda6eaaf94d3bp-2, + 0x1.0p-2 + }, + { // Entry 253 + 0x1.22d78f0fa061ae654d4b18f03189cbb3p-2, + 0x1.0000000000001p-2 + }, + { // Entry 254 + 0x1.10b022db7ae673d6bb2140ac1ce40bp-3, + 0x1.fffffffffffffp-4 + }, + { // Entry 255 + 0x1.10b022db7ae67ce76b441c27035c6a13p-3, + 0x1.0p-3 + }, + { // Entry 256 + 0x1.10b022db7ae68f08cb89d31cd0685a4ap-3, + 0x1.0000000000001p-3 + }, + { // Entry 257 + 0x1.082b577d34ed74d70455df87e5de0894p-4, + 0x1.fffffffffffffp-5 + }, + { // Entry 258 + 0x1.082b577d34ed7d5b1a019e225c9a951bp-4, + 0x1.0p-4 + }, + { // Entry 259 + 0x1.082b577d34ed8e6345591b574a20744bp-4, + 0x1.0000000000001p-4 + }, + { // Entry 260 + 0x1.040ac0224fd9298077606ce10b478c97p-5, + 0x1.fffffffffffffp-6 + }, + { // Entry 261 + 0x1.040ac0224fd931c17a1075750192f4d5p-5, + 0x1.0p-5 + }, + { // Entry 262 + 0x1.040ac0224fd942437f70869cee2ff613p-5, + 0x1.0000000000001p-5 + }, + { // Entry 263 + 0x1.0202ad5778e4568dd8d74f51f70f7d9cp-6, + 0x1.fffffffffffffp-7 + }, + { // Entry 264 + 0x1.0202ad5778e45eae192cfa41139ad15bp-6, + 0x1.0p-6 + }, + { // Entry 265 + 0x1.0202ad5778e46eee99d8501f4cb484f2p-6, + 0x1.0000000000001p-6 + }, + { // Entry 266 + 0x1.0100ab00222d7e0921b6ae3791767825p-7, + 0x1.fffffffffffffp-8 + }, + { // Entry 267 + 0x1.0100ab00222d861931c15e39b44e9937p-7, + 0x1.0p-7 + }, + { // Entry 268 + 0x1.0100ab00222d963951d6be3dfa005e5fp-7, + 0x1.0000000000001p-7 + }, + { // Entry 269 + 0x1.00802ab55777ca8226417cbfee2ff38bp-8, + 0x1.fffffffffffffp-9 + }, + { // Entry 270 + 0x1.00802ab55777d28a2a42d26aa9ee67bcp-8, + 0x1.0p-8 + }, + { // Entry 271 + 0x1.00802ab55777e29a32457dc0216c10dfp-8, + 0x1.0000000000001p-8 + }, + { // Entry 272 + 0x1.00400aac00221cf682ab5035e9096355p-9, + 0x1.fffffffffffffp-10 + }, + { // Entry 273 + 0x1.00400aac002224fa83ab7ae5e991e737p-9, + 0x1.0p-9 + }, + { // Entry 274 + 0x1.00400aac0022350285abd045eaa34f2bp-9, + 0x1.0000000000001p-9 + }, + { // Entry 275 + 0x1.002002aad5576f8c39739c649f2fc237p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 276 + 0x1.002002aad557778e39b3a1ba49dea952p-10, + 0x1.0p-10 + }, + { // Entry 277 + 0x1.002002aad55787923a33ac659f3ca792p-10, + 0x1.0000000000001p-10 + }, + { // Entry 278 + 0x1.0004000aaabff821e24ea52ba86932b8p-13, + 0x1.fffffffffffffp-14 + }, + { // Entry 279 + 0x1.0004000aaac00022224fa52e531931c1p-13, + 0x1.0p-13 + }, + { // Entry 280 + 0x1.0004000aaac01022a251a533a87935d2p-13, + 0x1.0000000000001p-13 + }, + { // Entry 281 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p9 + }, + { // Entry 282 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p9 + }, + { // Entry 283 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp8 + }, + { // Entry 284 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p8 + }, + { // Entry 285 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p8 + }, + { // Entry 286 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp7 + }, + { // Entry 287 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p7 + }, + { // Entry 288 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p7 + }, + { // Entry 289 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp6 + }, + { // Entry 290 + -0x1.ffffffffffffffffffffffe6962b8cdep-1, + -0x1.0000000000001p6 + }, + { // Entry 291 + -0x1.ffffffffffffffffffffffe6962b8cdep-1, + -0x1.0p6 + }, + { // Entry 292 + -0x1.ffffffffffffffffffffffe6962b8cdep-1, + -0x1.fffffffffffffp5 + }, + { // Entry 293 + -0x1.fffffffffff8dee6c227a6f43aa81530p-1, + -0x1.0000000000001p5 + }, + { // Entry 294 + -0x1.fffffffffff8dee6c227a6e5f875997fp-1, + -0x1.0p5 + }, + { // Entry 295 + -0x1.fffffffffff8dee6c227a6ded75c5ba7p-1, + -0x1.fffffffffffffp4 + }, + { // Entry 296 + -0x1.fffffc395488a22f4a6b5eb875ea5a66p-1, + -0x1.0000000000001p4 + }, + { // Entry 297 + -0x1.fffffc395488a22f46a4b3411819a2eep-1, + -0x1.0p4 + }, + { // Entry 298 + -0x1.fffffc395488a22f44c15d85693145c7p-1, + -0x1.fffffffffffffp3 + }, + { // Entry 299 + -0x1.ffd407bdf7dfb0bc84275b4125a96eb7p-1, + -0x1.0000000000001p3 + }, + { // Entry 300 + -0x1.ffd407bdf7dfb0a688065730fe0231c2p-1, + -0x1.0p3 + }, + { // Entry 301 + -0x1.ffd407bdf7dfb09b89f5d528ea2a7402p-1, + -0x1.fffffffffffffp2 + }, + { // Entry 302 + -0x1.f69f5523ef61881c365f838e3cece5d4p-1, + -0x1.0000000000001p2 + }, + { // Entry 303 + -0x1.f69f5523ef6185c40ba87f669ea8ee15p-1, + -0x1.0p2 + }, + { // Entry 304 + -0x1.f69f5523ef618497f64cfd52cf4eae35p-1, + -0x1.fffffffffffffp1 + }, + { // Entry 305 + -0x1.bab5557101f8da29e776343c313b029ep-1, + -0x1.0000000000001p1 + }, + { // Entry 306 + -0x1.bab5557101f8d1809224547b4bf5aa38p-1, + -0x1.0p1 + }, + { // Entry 307 + -0x1.bab5557101f8cd2be77b649ad8eb0e05p-1, + -0x1.fffffffffffffp0 + }, + { // Entry 308 + -0x1.43a54e4e98864d90355d87727adb37e7p-1, + -0x1.0000000000001p0 + }, + { // Entry 309 + -0x1.43a54e4e988641ca8a4270fadf560de4p-1, + -0x1.0p0 + }, + { // Entry 310 + -0x1.43a54e4e98863be7b4b4e5bf114cd6e0p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 311 + 0x1.9476504ba8399f5b97cae35beb78c3c5p738, + 0x1.fffffffffffffp8 + }, + { // Entry 312 + 0x1.9476504ba852e6c09c8567c01c5a6648p738, + 0x1.0p9 + }, + { // Entry 313 + 0x1.9476504ba885758aa5fa7545e10e8e46p738, + 0x1.0000000000001p9 + }, + { // Entry 314 + 0x1.41c7a8814be192a5df25b042af824efdp369, + 0x1.fffffffffffffp7 + }, + { // Entry 315 + 0x1.41c7a8814beba0e323300f777da65854p369, + 0x1.0p8 + }, + { // Entry 316 + 0x1.41c7a8814bffbd5dab44ced26faccbfbp369, + 0x1.0000000000001p8 + }, + { // Entry 317 + 0x1.95e54c5dd41b20600dd601a0ae672ff4p184, + 0x1.fffffffffffffp6 + }, + { // Entry 318 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp184, + 0x1.0p7 + }, + { // Entry 319 + 0x1.95e54c5dd42e271fa23bf3585b655060p184, + 0x1.0000000000001p7 + }, + { // Entry 320 + 0x1.425982cf597a4d52c89ea847bbaa807ap92, + 0x1.fffffffffffffp5 + }, + { // Entry 321 + 0x1.425982cf597cd205ce3d5b3edb031756p92, + 0x1.0p6 + }, + { // Entry 322 + 0x1.425982cf5981db6bd97ac13c35e666c6p92, + 0x1.0000000000001p6 + }, + { // Entry 323 + 0x1.1f43fcc4b65da8944ac389b609e0f74ep46, + 0x1.fffffffffffffp4 + }, + { // Entry 324 + 0x1.1f43fcc4b65ec7d84788401842174074p46, + 0x1.0p5 + }, + { // Entry 325 + 0x1.1f43fcc4b66106604111ace0104fc90ep46, + 0x1.0000000000001p5 + }, + { // Entry 326 + 0x1.0f2ebb0a80017cfac56c30874afbab98p23, + 0x1.fffffffffffffp3 + }, + { // Entry 327 + 0x1.0f2ebb0a8002049223f170882b5ee5efp23, + 0x1.0p4 + }, + { // Entry 328 + 0x1.0f2ebb0a800313c0e0fbf08ab7886866p23, + 0x1.0000000000001p4 + }, + { // Entry 329 + 0x1.747ea7d470c681e43618ec18d53f1b21p11, + 0x1.fffffffffffffp2 + }, + { // Entry 330 + 0x1.747ea7d470c6df0be00e084a815d1de6p11, + 0x1.0p3 + }, + { // Entry 331 + 0x1.747ea7d470c7995b33f840ae1f76e2e7p11, + 0x1.0000000000001p3 + }, + { // Entry 332 + 0x1.acc902e273a54fdfb6777166e6760dfbp5, + 0x1.fffffffffffffp1 + }, + { // Entry 333 + 0x1.acc902e273a58678d6d3bfdb93db96d0p5, + 0x1.0p2 + }, + { // Entry 334 + 0x1.acc902e273a5f3ab178c5cc50320149cp5, + 0x1.0000000000001p2 + }, + { // Entry 335 + 0x1.98e64b8d4ddabf34d582cd2909aafb2ap2, + 0x1.fffffffffffffp0 + }, + { // Entry 336 + 0x1.98e64b8d4ddadcc33a3ba206b68abba8p2, + 0x1.0p1 + }, + { // Entry 337 + 0x1.98e64b8d4ddb17e003ad4bc215d4ef86p2, + 0x1.0000000000001p1 + }, + { // Entry 338 + 0x1.b7e151628aed14abb4e6442933f899f6p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 339 + 0x1.b7e151628aed2a6abf7158809cf4f3c7p0, + 0x1.0p0 + }, + { // Entry 340 + 0x1.b7e151628aed55e8d487812f70f79067p0, + 0x1.0000000000001p0 + }, + { // Entry 341 + 0x1.ffc045692fc9dbc7b7e032576e5e26f8p1023, + 0x1.62e41ffffffffp9 + }, + { // Entry 342 + 0x1.ffc045693009d3d065062f9267dff55ep1023, + 0x1.62e42p9 + }, + { // Entry 343 + 0x1.ffc045693049cbd9122c34cc62776884p1023, + 0x1.62e4200000001p9 + }, + { // Entry 344 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e4200000001p9 + }, + { // Entry 345 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42p9 + }, + { // Entry 346 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e41ffffffffp9 + }, + { // Entry 347 + HUGE_VAL, + 0x1.0p1020 + }, + { // Entry 348 + HUGE_VAL, + 0x1.999999999999ap1020 + }, + { // Entry 349 + HUGE_VAL, + 0x1.199999999999ap1021 + }, + { // Entry 350 + HUGE_VAL, + 0x1.6666666666667p1021 + }, + { // Entry 351 + HUGE_VAL, + 0x1.b333333333334p1021 + }, + { // Entry 352 + HUGE_VAL, + 0x1.0p1022 + }, + { // Entry 353 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 354 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 355 + -0x1.p0, + -HUGE_VAL + }, + { // Entry 356 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 357 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 358 + HUGE_VAL, + 0x1.ffffffffffffep1023 + }, + { // Entry 359 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep1023 + }, + { // Entry 360 + 0x1.624046eb09338d2991a30893e7f4108dp4, + 0x1.921fb54442d18p1 + }, + { // Entry 361 + -0x1.e9dfdd84a671066b619f1bb23ba2eb2fp-1, + -0x1.921fb54442d18p1 + }, + { // Entry 362 + 0x1.e7bdb90ab26bdf555eaf19da7f043f2cp1, + 0x1.921fb54442d18p0 + }, + { // Entry 363 + -0x1.9590cee42260813cac44f53b3217ed19p-1, + -0x1.921fb54442d18p0 + }, + { // Entry 364 + 0x1.b7e151628aed55e8d487812f70f79067p0, + 0x1.0000000000001p0 + }, + { // Entry 365 + -0x1.43a54e4e98864d90355d87727adb37e7p-1, + -0x1.0000000000001p0 + }, + { // Entry 366 + 0x1.b7e151628aed2a6abf7158809cf4f3c7p0, + 0x1.0p0 + }, + { // Entry 367 + -0x1.43a54e4e988641ca8a4270fadf560de4p-1, + -0x1.0p0 + }, + { // Entry 368 + 0x1.b7e151628aed14abb4e6442933f899f6p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 369 + -0x1.43a54e4e98863be7b4b4e5bf114cd6e0p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 370 + 0x1.317acd28e3954ab0b8e398654f25590ap0, + 0x1.921fb54442d18p-1 + }, + { // Entry 371 + -0x1.168f47187dbc360f4ac035fc8ff9e913p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 372 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 373 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 374 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 375 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 376 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 377 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 378 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 379 + -0x1.ffffffffffffbfffffffffffffffffffp-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 380 + 0x1.p-1073, + 0x1.0p-1073 + }, + { // Entry 381 + -0x1.ffffffffffffffffffffffffffffffffp-1074, + -0x1.0p-1073 + }, + { // Entry 382 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 383 + -0.0, + -0x1.0p-1074 + }, + { // Entry 384 + 0.0, + 0.0 + }, + { // Entry 385 + -0.0, + -0.0 + }, + { // Entry 386 + 0x1.fffffffffff2a1b0e263400d15fc52ffp1023, + 0x1.62e42fefa39efp9 + }, + { // Entry 387 + HUGE_VAL, + 0x1.62e42fefa39f0p9 + } +}; diff --git a/tests/math_data/expm1f_intel_data.h b/tests/math_data/expm1f_intel_data.h new file mode 100644 index 000000000..f6f6bc2ba --- /dev/null +++ b/tests/math_data/expm1f_intel_data.h @@ -0,0 +1,1182 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_expm1f_intel_data[] = { + { // Entry 0 + -0x1.fffff00000555554000004444438e38ep-21, + -0x1.p-20 + }, + { // Entry 1 + -0x1.fffff800001555552aaaaaeeeeee93e9p-22, + -0x1.p-21 + }, + { // Entry 2 + -0x1.ffffff00000055555540000004444443p-25, + -0x1.p-24 + }, + { // Entry 3 + -0x1.fffff40000155555bffffd99999b8e38p-21, + -0x1.000002p-20 + }, + { // Entry 4 + -0x1.000000fffffcaaaaaa55555acccccb6cp-23, + -0x1.000002p-23 + }, + { // Entry 5 + -0x1.92ead6fcef62fa8ffd6dddea52cb775dp-2, + -0x1.0001p-1 + }, + { // Entry 6 + -0x1.0003ffffff7ffbfff8002aacaab2aaaap-40, + -0x1.0004p-40 + }, + { // Entry 7 + -0x1.43eb2700073d423819fa85ce534f3bf1p-1, + -0x1.005fp0 + }, + { // Entry 8 + -0x1.c59998f074353c5d0492e23cfecbc1f5p-3, + -0x1.0060p-2 + }, + { // Entry 9 + -0x1.f48a2ae5cc72d28e4ff5d3940c608146p-5, + -0x1.023ep-4 + }, + { // Entry 10 + -0x1.f2be57002fc371093dd9623ec6cdcf88p-4, + -0x1.09e940p-3 + }, + { // Entry 11 + -0x1.4b3b8cffff78b97a60ce841d99138e34p-1, + -0x1.0a866cp0 + }, + { // Entry 12 + -0x1.1e37fafffb5de84ddb61ac58d96c6109p-21, + -0x1.1e38p-21 + }, + { // Entry 13 + -0x1.c96006fff735d59b28cc8226e99bd811p-2, + -0x1.2efd0ap-1 + }, + { // Entry 14 + -0x1.d30023003cc4589a4a217749a50959dcp-1, + -0x1.374118p1 + }, + { // Entry 15 + -0x1.7e8bcef9c4fe9e0ac2d05310f5cbd8f2p-1, + -0x1.60p0 + }, + { // Entry 16 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.60p6 + }, + { // Entry 17 + -0x1.9758b6f38b012949e7b93c7f27202a48p-3, + -0x1.c62ee0p-3 + }, + { // Entry 18 + -0x1.751b2169ee200a7bb4f26bccb619a80ep-2, + -0x1.cffffep-2 + }, + { // Entry 19 + -0x1.a066d300130ff4e4fc65bad0a7f72ca1p-3, + -0x1.d1848cp-3 + }, + { // Entry 20 + -0x1.fffff6ffff2933320eb3310fc95c97a5p-1, + -0x1.e434dep3 + }, + { // Entry 21 + -0x1.fffff7fffffffffffffffffffffffffcp-127, + -0x1.fffff8p-127 + }, + { // Entry 22 + -0x1.ffffffffffffffffffffffe6961ed7f0p-1, + -0x1.fffffcp5 + }, + { // Entry 23 + 0x1.0100ab00222d861931c15e39b44e9937p-7, + 0x1.p-7 + }, + { // Entry 24 + 0x1.00000400000aaaaac000002222224fa4p-21, + 0x1.p-21 + }, + { // Entry 25 + 0x1.bcab8900011ff456b56212f998951e38p0, + 0x1.01c18ep0 + }, + { // Entry 26 + 0x1.b61e5ca3a5e30b2f0a03f28af9ce0084p93, + 0x1.04p6 + }, + { // Entry 27 + 0x1.c62b1d7eea9cc6f6ea3ff782be73b0cbp0, + 0x1.0534p0 + }, + { // Entry 28 + 0x1.aef1abc1b1c54e2429d81ddb79775eefp94, + 0x1.06b4e0p6 + }, + { // Entry 29 + 0x1.94c2590c0ac9993e93aa8acaf1046c73p96, + 0x1.0c0040p6 + }, + { // Entry 30 + 0x1.2a7938fffec9616b4d631cb33d990160p-3, + 0x1.16a150p-3 + }, + { // Entry 31 + 0x1.752a64ffff6149fa0bd6f95bb10bf8e8p-1, + 0x1.184b62p-1 + }, + { // Entry 32 + 0x1.37703d00002d814e4605b09d7ef15368p-4, + 0x1.2c2a90p-4 + }, + { // Entry 33 + 0x1.44835afffef0f01e2e400989de81bd82p-3, + 0x1.2d3b76p-3 + }, + { // Entry 34 + 0x1.021c84fffff5d54e4229ede943f4a168p7, + 0x1.378cb4p2 + }, + { // Entry 35 + 0x1.ff2ac4707dee3cd35848bdb4d4296824p124, + 0x1.5a912cp6 + }, + { // Entry 36 + 0x1.7ff7f6932445d2e31f1b7c20d7c7d871p126, + 0x1.5ef7bcp6 + }, + { // Entry 37 + 0x1.f916467349b058b9c38906911b856052p126, + 0x1.60107cp6 + }, + { // Entry 38 + 0x1.f76ba46733f4146a0f94b3d1311494bap127, + 0x1.62d2e2p6 + }, + { // Entry 39 + 0x1.fff1086632b0e9b93bc5be44d9c1dea5p127, + 0x1.62e412p6 + }, + { // Entry 40 + 0x1.8dbe63000000d7dc67e2e67575c06599p-3, + 0x1.6b7d8ap-3 + }, + { // Entry 41 + 0x1.9185a8fffe5a4f000eb5ab63da3bfa3fp-3, + 0x1.6ea6e2p-3 + }, + { // Entry 42 + 0x1.e5fa73631c80571bb785e84b1dff0fb4p70, + 0x1.894a52p5 + }, + { // Entry 43 + 0x1.dfc5e500a0d64765f069273b7e215719p-2, + 0x1.897ba8p-2 + }, + { // Entry 44 + 0x1.9a6e870bbb7b2779cded78be9b91a2dap71, + 0x1.8d7bdep5 + }, + { // Entry 45 + 0x1.fb180600000c0175ee1c8855daaebdb6p1, + 0x1.9a0bccp0 + }, + { // Entry 46 + 0x1.00f200ffff918c60a6f122a3b475e0fep-1, + 0x1.a074b8p-2 + }, + { // Entry 47 + 0x1.c6b4aa00000bf2d58223ca9249b47316p-4, + 0x1.af311ap-4 + }, + { // Entry 48 + 0x1.e1bcd4fffe314487556a09bb0c8a7551p-3, + 0x1.b0a4d4p-3 + }, + { // Entry 49 + 0x1.d62649fffff82b1e6698411a08145a29p-4, + 0x1.bd11a8p-4 + }, + { // Entry 50 + 0x1.05161b00011b9313efed24a09a8cb044p-2, + 0x1.d11ebap-3 + }, + { // Entry 51 + 0x1.9a92e90baa2969fa8c71bb3c2be8bb40p85, + 0x1.db1e7ep5 + }, + { // Entry 52 + 0x1.e63ebcfffee84008206c45435ee52722p-14, + 0x1.e63786p-14 + }, + { // Entry 53 + 0x1.9768d30002d89bbd7f87c2131074c9c5p0, + 0x1.e788b8p-1 + }, + { // Entry 54 + 0x1.6e23d980dd2d2fba285ff30446a78914p5, + 0x1.ec2f24p1 + }, + { // Entry 55 + 0x1.a664d8ed7cc33ede965392722b0d87bfp22, + 0x1.f7fffep3 + }, + { // Entry 56 + 0x1.b6904dfffe42514279db71397b7ffb45p0, + 0x1.ff07cep-1 + }, + { // Entry 57 + 0x1.b6b11ea799b7c71cf2f6b9659c8155c6p0, + 0x1.ff1ffep-1 + }, + { // Entry 58 + 0x1.3d59d2d8b22b41c2bb6334b9be7be902p92, + 0x1.ffdffep5 + }, + { // Entry 59 + 0x1.00000b00000aaaa78fffe97777a4d832p-19, + 0x1.fffff6p-20 + }, + { // Entry 60 + 0x1.fffff800000000000000000000000003p-127, + 0x1.fffff8p-127 + }, + { // Entry 61 + 0x1.000001fffffaaaaa8ffffff77777fa4fp-21, + 0x1.fffffcp-22 + }, + { // Entry 62 + 0x1.4258e1a2c0604eea1e874d7004e6dfb9p92, + 0x1.fffffcp5 + }, + { // Entry 63 + 0x1.00000700001aaaaadd55554ccccba7d2p-20, + 0x1.fffffep-21 + }, + { // Entry 64 + 0x1.304d1ed9511bf5a69db20e4cdbf6d8ffp69, + 0x1.7ffffep5 + }, + { // Entry 65 + 0x1.304d6aeca254b3af43c5d6293d5f65c7p69, + 0x1.80p5 + }, + { // Entry 66 + 0x1.304db70006924866b41845097c91e488p69, + 0x1.800002p5 + }, + { // Entry 67 + -0x1.ffffffffffffffffffc0e3377dc96717p-1, + -0x1.a00002p5 + }, + { // Entry 68 + -0x1.ffffffffffffffffffc0e327b6954da3p-1, + -0x1.a0p5 + }, + { // Entry 69 + -0x1.ffffffffffffffffffc0e317ef5d4261p-1, + -0x1.9ffffep5 + }, + { // Entry 70 + 0x1.5576f0dcac21787f2d57b14a700204e3p115, + 0x1.3ffffep6 + }, + { // Entry 71 + 0x1.55779b984f3eb3c8a503b4a8e2487d98p115, + 0x1.40p6 + }, + { // Entry 72 + 0x1.5578465447b9d5f83246af1e48e8025bp115, + 0x1.400002p6 + }, + { // Entry 73 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.600002p6 + }, + { // Entry 74 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.60p6 + }, + { // Entry 75 + -0x1.fffffffffffffffffffffffffffffffbp-1, + -0x1.5ffffep6 + }, + { // Entry 76 + 0x1.039924428f47511c03c75dd623bc47e1p75, + 0x1.9ffffep5 + }, + { // Entry 77 + 0x1.03996528e074bebcfd56416fc2c0eb92p75, + 0x1.a0p5 + }, + { // Entry 78 + 0x1.0399a60f41dbc2b085021312f505089dp75, + 0x1.a00002p5 + }, + { // Entry 79 + -0x1.fffffffffffffffff28a2d8657e93e43p-1, + -0x1.800002p5 + }, + { // Entry 80 + -0x1.fffffffffffffffff28a2a28e2df25a0p-1, + -0x1.80p5 + }, + { // Entry 81 + -0x1.fffffffffffffffff28a26cb6cfdafa0p-1, + -0x1.7ffffep5 + }, + { // Entry 82 + 0x1.f1047545465f97aad6774dfe16b960dep126, + 0x1.5ffffep6 + }, + { // Entry 83 + 0x1.f1056dc7bf22d3de0ed57615bc501f87p126, + 0x1.60p6 + }, + { // Entry 84 + 0x1.f106664ab4276b833993050c9aa09a91p126, + 0x1.600002p6 + }, + { // Entry 85 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.400002p6 + }, + { // Entry 86 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.40p6 + }, + { // Entry 87 + -0x1.ffffffffffffffffffffffffffffd004p-1, + -0x1.3ffffep6 + }, + { // Entry 88 + -0x1.ffffffffffffffffffffffffffa57347p-1, + -0x1.274768p6 + }, + { // Entry 89 + -0x1.fffffffffffffffffffffffffffffebdp-1, + -0x1.4e8ed0p6 + }, + { // Entry 90 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.75d638p6 + }, + { // Entry 91 + -0x1.000000082e308632c06d5d65136575eap-1, + -0x1.62e430p-1 + }, + { // Entry 92 + -0x1.fffffe105c601cc1e199f9261fc7dbe6p-2, + -0x1.62e42ep-1 + }, + { // Entry 93 + -0x1.fffffc105c5d2d1e406993e20adc02bfp-2, + -0x1.62e42cp-1 + }, + { // Entry 94 + -0x1.2bec333baa280850b6bf9111bb873f60p-2, + -0x1.62e430p-2 + }, + { // Entry 95 + -0x1.2bec31d1a0414ba3511c18f32bb55d63p-2, + -0x1.62e42ep-2 + }, + { // Entry 96 + -0x1.2bec30679659d9f0f7ed08e4eb06dfefp-2, + -0x1.62e42cp-2 + }, + { // Entry 97 + -0x1.45d819b70d12db9f1551331188790df6p-3, + -0x1.62e430p-3 + }, + { // Entry 98 + -0x1.45d81808831913911ad15724d9d51211p-3, + -0x1.62e42ep-3 + }, + { // Entry 99 + -0x1.45d81659f91edfe0a1d20369bbdaa485p-3, + -0x1.62e42cp-3 + }, + { // Entry 100 + -0x1.53f391912e7f21ab50219d67aa32363ap-4, + -0x1.62e430p-4 + }, + { // Entry 101 + -0x1.53f38fbbacf136790727bc2da36b8afcp-4, + -0x1.62e42ep-4 + }, + { // Entry 102 + -0x1.53f38de62b6310968c6cc9a7616b33cbp-4, + -0x1.62e42cp-4 + }, + { // Entry 103 + -0x1.5b505d6b19f4b405dbb6b9ef18ad9e35p-5, + -0x1.62e430p-5 + }, + { // Entry 104 + -0x1.5b505b80cefa7b6523305e22a4c06c28p-5, + -0x1.62e42ep-5 + }, + { // Entry 105 + -0x1.5b5059968400241fbb0583252b4c1185p-5, + -0x1.62e42cp-5 + }, + { // Entry 106 + -0x1.5f1349337820aba6ac332ded98347904p-6, + -0x1.62e430p-6 + }, + { // Entry 107 + -0x1.5f13473e70baed6e4fa19cb1aefb9a04p-6, + -0x1.62e42ep-6 + }, + { // Entry 108 + -0x1.5f13454969551f8db7e1db11f47dc315p-6, + -0x1.62e42cp-6 + }, + { // Entry 109 + 0x1.66c3485061b3fe6a5d2f2e20f3da3783p-6, + 0x1.62e42cp-6 + }, + { // Entry 110 + 0x1.66c34a5b97ce491a4338414cff9666e6p-6, + 0x1.62e42ep-6 + }, + { // Entry 111 + 0x1.66c34c66cde8a423da13eb5efee5340ep-6, + 0x1.62e430p-6 + }, + { // Entry 112 + 0x1.6ab0d5d6d1d44992503e4b6f3b09f07ep-5, + 0x1.62e42cp-5 + }, + { // Entry 113 + 0x1.6ab0d7ed7ce1b7b4c5ee2919ab4f11e6p-5, + 0x1.62e42ep-5 + }, + { // Entry 114 + 0x1.6ab0da0427ef4741ec75f440fd4eb0f9p-5, + 0x1.62e430p-5 + }, + { // Entry 115 + 0x1.72b838327ae1f9d7e70418a476da480dp-4, + 0x1.62e42cp-4 + }, + { // Entry 116 + 0x1.72b83a60d1e9230cb3b52cd1200b8dcdp-4, + 0x1.62e42ep-4 + }, + { // Entry 117 + 0x1.72b83c8f28f0920c614fc4456de049fcp-4, + 0x1.62e430p-4 + }, + { // Entry 118 + 0x1.837f006a90e2d9adf9b9b9c5850970d1p-3, + 0x1.62e42cp-3 + }, + { // Entry 119 + 0x1.837f02cb70a3406e2a79d1750af1d7e2p-3, + 0x1.62e42ep-3 + }, + { // Entry 120 + 0x1.837f052c50643f664b66a02ec5ac16dbp-3, + 0x1.62e430p-3 + }, + { // Entry 121 + 0x1.a827940eca9f76673e51d2c4569cfb3ap-2, + 0x1.62e42cp-2 + }, + { // Entry 122 + 0x1.a82796e2de6a32d180ad0b353267983bp-2, + 0x1.62e42ep-2 + }, + { // Entry 123 + 0x1.a82799b6f2365945a8c0fb40a27174dap-2, + 0x1.62e430p-2 + }, + { // Entry 124 + 0x1.fffff820b8c9d86525e55f587e34861ap-1, + 0x1.62e42cp-1 + }, + { // Entry 125 + 0x1.fffffc20b8c3f91dec78cb8cd53a92e3p-1, + 0x1.62e42ep-1 + }, + { // Entry 126 + 0x1.000000105c610ceb57967842bd59f094p0, + 0x1.62e430p-1 + }, + { // Entry 127 + 0x1.7ffff820b8d19779692fb0fcc0281246p1, + 0x1.62e42cp0 + }, + { // Entry 128 + 0x1.7ffffc20b8c5d8eaff4ac013cf734639p1, + 0x1.62e42ep0 + }, + { // Entry 129 + 0x1.80000020b8c21a5c85e8b244ed151cd8p1, + 0x1.62e430p0 + }, + { // Entry 130 + 0x1.dffff04171c22b43a28d8088c347bf1fp3, + 0x1.62e42cp1 + }, + { // Entry 131 + 0x1.dffff8417193310a429b71e70d792186p3, + 0x1.62e42ep1 + }, + { // Entry 132 + 0x1.e0000041718436d066c07ca312f8b318p3, + 0x1.62e430p1 + }, + { // Entry 133 + 0x1.fdffe082e40047c89dfa41d09c1e1ef8p7, + 0x1.62e42cp2 + }, + { // Entry 134 + 0x1.fdfff082e3445ee55b3fa84a5dd849c9p7, + 0x1.62e42ep2 + }, + { // Entry 135 + 0x1.fe000082e30875fe393de286837f485dp7, + 0x1.62e430p2 + }, + { // Entry 136 + 0x1.fffdc105c9f0548760a823b0dfdaeb66p15, + 0x1.62e42cp3 + }, + { // Entry 137 + 0x1.fffde105c700b10c3e2a549fbdebb0dap15, + 0x1.62e42ep3 + }, + { // Entry 138 + 0x1.fffe0105c6110d722173b0ea5050713ap15, + 0x1.62e430p3 + }, + { // Entry 139 + 0x1.ffff82099b9fbc6d5dda406ad9f93354p31, + 0x1.62e42cp4 + }, + { // Entry 140 + 0x1.ffffc2098fe12f101740ac9653f78fe3p31, + 0x1.62e42ep4 + }, + { // Entry 141 + 0x1.00000104c611505d7f74a41433312dp32, + 0x1.62e430p4 + }, + { // Entry 142 + 0x1.fffe082f28688d3872ab8aa69f3dc356p127, + 0x1.62e42cp6 + }, + { // Entry 143 + 0x1.ffff082e6c7fed1d3fd5cff7e1f6058fp127, + 0x1.62e42ep6 + }, + { // Entry 144 + HUGE_VALF, + 0x1.62e430p6 + }, + { // Entry 145 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1da2p6 + }, + { // Entry 146 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1da0p6 + }, + { // Entry 147 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1d9ep6 + }, + { // Entry 148 + -0x1.c5041b725d705416b9a2fe9ecfd0f12fp-3, + -0x1.000002p-2 + }, + { // Entry 149 + -0x1.c5041854df7d45e5f51a1b14e4b86234p-3, + -0x1.p-2 + }, + { // Entry 150 + -0x1.c50416c620832945f52a143b7ab9cc40p-3, + -0x1.fffffep-3 + }, + { // Entry 151 + -0x1.e14af110ec3368f6b0943acd54603c38p-4, + -0x1.000002p-3 + }, + { // Entry 152 + -0x1.e14aed893eef3c3c14ed960d0a2b5054p-4, + -0x1.p-3 + }, + { // Entry 153 + -0x1.e14aebc5684cd12688af02d3c4c33ae5p-4, + -0x1.fffffep-4 + }, + { // Entry 154 + -0x1.f05407faf2db6e62ca86b906177f8ab4p-5, + -0x1.000002p-4 + }, + { // Entry 155 + -0x1.f0540438fd5c31a1ce01f9f6ca74502bp-5, + -0x1.p-4 + }, + { // Entry 156 + -0x1.f0540258029c6629cdc6e0688e0c17d1p-5, + -0x1.fffffep-5 + }, + { // Entry 157 + -0x1.f8152ecf12fe0f7cc4305325eb3cc27ep-6, + -0x1.000002p-5 + }, + { // Entry 158 + -0x1.f8152aee9450dd69fea80d113b1945c7p-6, + -0x1.p-5 + }, + { // Entry 159 + -0x1.f81528fe54fa2d1da3d441866c2e2c68p-6, + -0x1.fffffep-6 + }, + { // Entry 160 + -0x1.fc0553f461432629324524f0e3968455p-7, + -0x1.000002p-6 + }, + { // Entry 161 + -0x1.fc055004416db60bbd08aac54a956e76p-7, + -0x1.p-6 + }, + { // Entry 162 + -0x1.fc054e0c3182f22ca2e9fdd61fb3c4d6p-7, + -0x1.fffffep-7 + }, + { // Entry 163 + -0x1.fe0158a2f6d2d965d520469a1b630418p-8, + -0x1.000002p-7 + }, + { // Entry 164 + -0x1.fe0154aaeed83401a07666b3bbde908fp-8, + -0x1.p-7 + }, + { // Entry 165 + -0x1.fe0152aeeadadb5b7a2976ba2d283634p-8, + -0x1.fffffep-8 + }, + { // Entry 166 + -0x1.ff00593c0642dfd6d7680bd2846289e8p-9, + -0x1.000002p-8 + }, + { // Entry 167 + -0x1.ff00554004438e52e1ee7b503e63818cp-9, + -0x1.p-8 + }, + { // Entry 168 + -0x1.ff0053420343e293e5b233ee2249277bp-9, + -0x1.fffffep-9 + }, + { // Entry 169 + -0x1.ff801950ab6ed1ed50ba61050b26a7c2p-10, + -0x1.000002p-9 + }, + { // Entry 170 + -0x1.ff801552aaeee93efbe93ef05c2dcb20p-10, + -0x1.p-9 + }, + { // Entry 171 + -0x1.ff801353aaaef3689150b624e4d2f2dap-10, + -0x1.fffffep-10 + }, + { // Entry 172 + -0x1.ffc009540024406c8302028c7714cceap-11, + -0x1.000002p-10 + }, + { // Entry 173 + -0x1.ffc0055500044416c30c23c298990114p-11, + -0x1.p-10 + }, + { // Entry 174 + -0x1.ffc003557ff4452c130b34ed9d5c017ep-11, + -0x1.fffffep-11 + }, + { // Entry 175 + -0x1.fff80415352b2acd9a413af860684c9cp-14, + -0x1.000002p-13 + }, + { // Entry 176 + -0x1.fff80015552aaaeeee93e9a69a01a076p-14, + -0x1.p-13 + }, + { // Entry 177 + -0x1.fff7fe15652a6ae7997d3dfdfecc3a6bp-14, + -0x1.fffffep-14 + }, + { // Entry 178 + 0x1.22d78dc6ea7dff08931d74663f93346dp-2, + 0x1.fffffep-3 + }, + { // Entry 179 + 0x1.22d78f0fa06199d9ef0eda6eaaf94d3bp-2, + 0x1.p-2 + }, + { // Entry 180 + 0x1.22d791a10c29c60511d91ff00eb6fedap-2, + 0x1.000002p-2 + }, + { // Entry 181 + 0x1.10b021b964e233996eb974cb64f11f96p-3, + 0x1.fffffep-4 + }, + { // Entry 182 + 0x1.10b022db7ae67ce76b441c27035c6a13p-3, + 0x1.p-3 + }, + { // Entry 183 + 0x1.10b0251fa6ef7c4ba6003cf91fe85dc9p-3, + 0x1.000002p-3 + }, + { // Entry 184 + 0x1.082b566cb2380e0be0d559a0150172f7p-4, + 0x1.fffffep-5 + }, + { // Entry 185 + 0x1.082b577d34ed7d5b1a019e225c9a951bp-4, + 0x1.p-4 + }, + { // Entry 186 + 0x1.082b599e3a588f120e61af4869c98421p-4, + 0x1.000002p-4 + }, + { // Entry 187 + 0x1.040abf1a2f8334cf7c9ee0b1d34ae144p-5, + 0x1.fffffep-6 + }, + { // Entry 188 + 0x1.040ac0224fd931c17a1075750192f4d5p-5, + 0x1.p-5 + }, + { // Entry 189 + 0x1.040ac232908544687d03fabf568a3de2p-5, + 0x1.000002p-5 + }, + { // Entry 190 + 0x1.0202ac5370d9ab5845b0e78f0b42a783p-6, + 0x1.fffffep-7 + }, + { // Entry 191 + 0x1.0202ad5778e45eae192cfa41139ad15bp-6, + 0x1.p-6 + }, + { // Entry 192 + 0x1.0202af5f88f9d18a20a5b04c4fc86c51p-6, + 0x1.000002p-6 + }, + { // Entry 193 + 0x1.0100a9fe202c311aef67a75b93d0aff7p-7, + 0x1.fffffep-8 + }, + { // Entry 194 + 0x1.0100ab00222d861931c15e39b44e9937p-7, + 0x1.p-7 + }, + { // Entry 195 + 0x1.0100ad0426303621c27cd3ff977212f4p-7, + 0x1.000002p-7 + }, + { // Entry 196 + 0x1.008029b456f7a855530b151055fcccd9p-8, + 0x1.fffffep-9 + }, + { // Entry 197 + 0x1.00802ab55777d28a2a42d26aa9ee67bcp-8, + 0x1.p-8 + }, + { // Entry 198 + 0x1.00802cb7587829f6da32ce4058b94099p-8, + 0x1.000002p-8 + }, + { // Entry 199 + 0x1.004009ab80021fe4a3a269b377bf18d6p-9, + 0x1.fffffep-10 + }, + { // Entry 200 + 0x1.00400aac002224fa83ab7ae5e991e737p-9, + 0x1.p-9 + }, + { // Entry 201 + 0x1.00400cad006230a703eda58bed592121p-9, + 0x1.000002p-9 + }, + { // Entry 202 + 0x1.002001aa954f77038c5ec3e966c711f3p-10, + 0x1.fffffep-11 + }, + { // Entry 203 + 0x1.002002aad557778e39b3a1ba49dea952p-10, + 0x1.p-10 + }, + { // Entry 204 + 0x1.002004ab55677963c4635dec1c0ebe87p-10, + 0x1.000002p-10 + }, + { // Entry 205 + 0x1.0003ff0aa2bfe025cd19a5ad38b10c96p-13, + 0x1.fffffep-14 + }, + { // Entry 206 + 0x1.0004000aaac00022224fa52e531931c1p-13, + 0x1.p-13 + }, + { // Entry 207 + 0x1.0004020abac04032cd7ba730cfeb8c1ep-13, + 0x1.000002p-13 + }, + { // Entry 208 + -0x1.ffffffffffffffffffffffe6963841c5p-1, + -0x1.000002p6 + }, + { // Entry 209 + -0x1.ffffffffffffffffffffffe6962b8cdep-1, + -0x1.p6 + }, + { // Entry 210 + -0x1.ffffffffffffffffffffffe696253268p-1, + -0x1.fffffep5 + }, + { // Entry 211 + -0x1.fffffffffff8dee88a6dbd53498e13ccp-1, + -0x1.000002p5 + }, + { // Entry 212 + -0x1.fffffffffff8dee6c227a6e5f875997fp-1, + -0x1.p5 + }, + { // Entry 213 + -0x1.fffffffffff8dee5de0470e8ba3e9067p-1, + -0x1.fffffep4 + }, + { // Entry 214 + -0x1.fffffc3955017796a5082c3f27acd321p-1, + -0x1.000002p4 + }, + { // Entry 215 + -0x1.fffffc395488a22f46a4b3411819a2eep-1, + -0x1.p4 + }, + { // Entry 216 + -0x1.fffffc39544c3775ed71e1eab18a7021p-1, + -0x1.fffffep3 + }, + { // Entry 217 + -0x1.ffd407c0b763bb2c6c6d1f372c7be8d8p-1, + -0x1.000002p3 + }, + { // Entry 218 + -0x1.ffd407bdf7dfb0a688065730fe0231c2p-1, + -0x1.p3 + }, + { // Entry 219 + -0x1.ffd407bc981d9ae67d3bdf5125871e80p-1, + -0x1.fffffep2 + }, + { // Entry 220 + -0x1.f69f556ef4b73a33a7188427d84778e4p-1, + -0x1.000002p2 + }, + { // Entry 221 + -0x1.f69f5523ef6185c40ba87f669ea8ee15p-1, + -0x1.p2 + }, + { // Entry 222 + -0x1.f69f54fe6cb5ca7c3a7b03828a0e81ebp-1, + -0x1.fffffep1 + }, + { // Entry 223 + -0x1.bab556862ca0e3235d497e670376d71fp-1, + -0x1.000002p1 + }, + { // Entry 224 + -0x1.bab5557101f8d1809224547b4bf5aa38p-1, + -0x1.p1 + }, + { // Entry 225 + -0x1.bab554e66ca328ef2e4cf602f5709f13p-1, + -0x1.fffffep0 + }, + { // Entry 226 + -0x1.43a54fc74de82be41b573089f7ac0364p-1, + -0x1.000002p0 + }, + { // Entry 227 + -0x1.43a54e4e988641ca8a4270fadf560de4p-1, + -0x1.p0 + }, + { // Entry 228 + -0x1.43a54d923dd43235b78c235547ec9cdcp-1, + -0x1.fffffep-1 + }, + { // Entry 229 + 0x1.4259323902dbc6e62e3e07be26cd904cp92, + 0x1.fffffep5 + }, + { // Entry 230 + 0x1.425982cf597cd205ce3d5b3edb031756p92, + 0x1.p6 + }, + { // Entry 231 + 0x1.425a23fc432fb5d556006a3d8e7ee11bp92, + 0x1.000002p6 + }, + { // Entry 232 + 0x1.1f43d8dc3904b8ed87a5abd50621706ap46, + 0x1.fffffep4 + }, + { // Entry 233 + 0x1.1f43fcc4b65ec7d84788401842174074p46, + 0x1.p5 + }, + { // Entry 234 + 0x1.1f444495be8a1616a1e5e388779bc146p46, + 0x1.000002p5 + }, + { // Entry 235 + 0x1.0f2eaa1794b8f3edb5c10d26a51f420fp23, + 0x1.fffffep3 + }, + { // Entry 236 + 0x1.0f2ebb0a8002049223f170882b5ee5efp23, + 0x1.p4 + }, + { // Entry 237 + 0x1.0f2edcf059c1b22312bed964006ee633p23, + 0x1.000002p4 + }, + { // Entry 238 + 0x1.747e9c2f7bb6cf5a276ee08236c2d6c3p11, + 0x1.fffffep2 + }, + { // Entry 239 + 0x1.747ea7d470c6df0be00e084a815d1de6p11, + 0x1.p3 + }, + { // Entry 240 + 0x1.747ebf1e5bfe757019de4e22b113fde9p11, + 0x1.000002p3 + }, + { // Entry 241 + 0x1.acc8fc0f4fa7a2f2459a6ef53c315f0fp5, + 0x1.fffffep1 + }, + { // Entry 242 + 0x1.acc902e273a58678d6d3bfdb93db96d0p5, + 0x1.p2 + }, + { // Entry 243 + 0x1.acc91088bbf33336f0ee52b1ad858e43p5, + 0x1.000002p2 + }, + { // Entry 244 + 0x1.98e647db814773f419262ee477a98616p2, + 0x1.fffffep0 + }, + { // Entry 245 + 0x1.98e64b8d4ddadcc33a3ba206b68abba8p2, + 0x1.p1 + }, + { // Entry 246 + 0x1.98e652f0e717d92d15cd610022ae51e3p2, + 0x1.000002p1 + }, + { // Entry 247 + 0x1.b7e14eaaa99d23d07a843854f80eb965p0, + 0x1.fffffep-1 + }, + { // Entry 248 + 0x1.b7e151628aed2a6abf7158809cf4f3c7p0, + 0x1.p0 + }, + { // Entry 249 + 0x1.b7e156d24d955f43402b1af2d27591c2p0, + 0x1.000002p0 + }, + { // Entry 250 + HUGE_VALF, + 0x1.p124 + }, + { // Entry 251 + HUGE_VALF, + 0x1.99999ap124 + }, + { // Entry 252 + HUGE_VALF, + 0x1.19999ap125 + }, + { // Entry 253 + HUGE_VALF, + 0x1.666668p125 + }, + { // Entry 254 + HUGE_VALF, + 0x1.b33334p125 + }, + { // Entry 255 + HUGE_VALF, + 0x1.p126 + }, + { // Entry 256 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 257 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 258 + -0x1.p0, + -HUGE_VALF + }, + { // Entry 259 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 260 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep127 + }, + { // Entry 261 + HUGE_VALF, + 0x1.fffffcp127 + }, + { // Entry 262 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffcp127 + }, + { // Entry 263 + 0x1.6240490a165620d9b922aaa22a8e4c09p4, + 0x1.921fb6p1 + }, + { // Entry 264 + -0x1.e9dfdda51a16cb6a6c29449e73dceabap-1, + -0x1.921fb6p1 + }, + { // Entry 265 + 0x1.e7bdbace4109994c2555657347d02f77p1, + 0x1.921fb6p0 + }, + { // Entry 266 + -0x1.9590cf323040b06ca55a506162a742f5p-1, + -0x1.921fb6p0 + }, + { // Entry 267 + 0x1.b7e156d24d955f43402b1af2d27591c2p0, + 0x1.000002p0 + }, + { // Entry 268 + -0x1.43a54fc74de82be41b573089f7ac0364p-1, + -0x1.000002p0 + }, + { // Entry 269 + 0x1.b7e151628aed2a6abf7158809cf4f3c7p0, + 0x1.p0 + }, + { // Entry 270 + -0x1.43a54e4e988641ca8a4270fadf560de4p-1, + -0x1.p0 + }, + { // Entry 271 + 0x1.b7e14eaaa99d23d07a843854f80eb965p0, + 0x1.fffffep-1 + }, + { // Entry 272 + -0x1.43a54d923dd43235b78c235547ec9cdcp-1, + -0x1.fffffep-1 + }, + { // Entry 273 + 0x1.317acdf6c5663201980ec69bd74868acp0, + 0x1.921fb6p-1 + }, + { // Entry 274 + -0x1.168f476e16a8feaa2183b486fed0e5cep-1, + -0x1.921fb6p-1 + }, + { // Entry 275 + 0x1.00000200000000000000000000000002p-126, + 0x1.000002p-126 + }, + { // Entry 276 + -0x1.000001fffffffffffffffffffffffffdp-126, + -0x1.000002p-126 + }, + { // Entry 277 + 0x1.00000000000000000000000000000002p-126, + 0x1.p-126 + }, + { // Entry 278 + -0x1.fffffffffffffffffffffffffffffffcp-127, + -0x1.p-126 + }, + { // Entry 279 + 0x1.fffffc00000000000000000000000003p-127, + 0x1.fffffcp-127 + }, + { // Entry 280 + -0x1.fffffbfffffffffffffffffffffffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 281 + 0x1.fffff800000000000000000000000003p-127, + 0x1.fffff8p-127 + }, + { // Entry 282 + -0x1.fffff7fffffffffffffffffffffffffcp-127, + -0x1.fffff8p-127 + }, + { // Entry 283 + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 284 + -0x1.ffffffffffffffffffffffffffffffffp-149, + -0x1.p-148 + }, + { // Entry 285 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 286 + -0.0f, + -0x1.p-149 + }, + { // Entry 287 + 0.0, + 0.0f + }, + { // Entry 288 + -0.0, + -0.0f + }, + { // Entry 289 + 0x1.ffff082e6c7fed1d3fd5cff7e1f6058fp127, + 0x1.62e42ep6 + }, + { // Entry 290 + HUGE_VALF, + 0x1.62e430p6 + } +}; diff --git a/tests/math_data/fabs_intel_data.h b/tests/math_data/fabs_intel_data.h new file mode 100644 index 000000000..92db0caaa --- /dev/null +++ b/tests/math_data/fabs_intel_data.h @@ -0,0 +1,494 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_fabs_intel_data[] = { + { // Entry 0 + 0x1.p-10, + -0x1.0p-10 + }, + { // Entry 1 + 0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 2 + 0.0, + -0.0 + }, + { // Entry 3 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 4 + 0x1.fffffffffffff0p999, + 0x1.fffffffffffffp999 + }, + { // Entry 5 + 0x1.p1000, + 0x1.0p1000 + }, + { // Entry 6 + 0x1.00000000000010p1000, + 0x1.0000000000001p1000 + }, + { // Entry 7 + 0x1.fffffffffffff0p199, + 0x1.fffffffffffffp199 + }, + { // Entry 8 + 0x1.p200, + 0x1.0p200 + }, + { // Entry 9 + 0x1.00000000000010p200, + 0x1.0000000000001p200 + }, + { // Entry 10 + 0x1.fffffffffffff0p99, + 0x1.fffffffffffffp99 + }, + { // Entry 11 + 0x1.p100, + 0x1.0p100 + }, + { // Entry 12 + 0x1.00000000000010p100, + 0x1.0000000000001p100 + }, + { // Entry 13 + 0x1.fffffffffffff0p19, + 0x1.fffffffffffffp19 + }, + { // Entry 14 + 0x1.p20, + 0x1.0p20 + }, + { // Entry 15 + 0x1.00000000000010p20, + 0x1.0000000000001p20 + }, + { // Entry 16 + 0x1.fffffffffffff0p14, + 0x1.fffffffffffffp14 + }, + { // Entry 17 + 0x1.p15, + 0x1.0p15 + }, + { // Entry 18 + 0x1.00000000000010p15, + 0x1.0000000000001p15 + }, + { // Entry 19 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9 + }, + { // Entry 20 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 21 + 0x1.00000000000010p10, + 0x1.0000000000001p10 + }, + { // Entry 22 + 0x1.fffffffffffff0p8, + 0x1.fffffffffffffp8 + }, + { // Entry 23 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 24 + 0x1.00000000000010p9, + 0x1.0000000000001p9 + }, + { // Entry 25 + 0x1.fffffffffffff0p6, + 0x1.fffffffffffffp6 + }, + { // Entry 26 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 27 + 0x1.00000000000010p7, + 0x1.0000000000001p7 + }, + { // Entry 28 + 0x1.fffffffffffff0p4, + 0x1.fffffffffffffp4 + }, + { // Entry 29 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 30 + 0x1.00000000000010p5, + 0x1.0000000000001p5 + }, + { // Entry 31 + 0x1.fffffffffffff0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 32 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 33 + 0x1.00000000000010p4, + 0x1.0000000000001p4 + }, + { // Entry 34 + 0x1.fffffffffffff0p2, + 0x1.fffffffffffffp2 + }, + { // Entry 35 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 36 + 0x1.00000000000010p3, + 0x1.0000000000001p3 + }, + { // Entry 37 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1 + }, + { // Entry 38 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 39 + 0x1.00000000000010p2, + 0x1.0000000000001p2 + }, + { // Entry 40 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0 + }, + { // Entry 41 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 42 + 0x1.00000000000010p1, + 0x1.0000000000001p1 + }, + { // Entry 43 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 44 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 45 + 0x1.00000000000010p0, + 0x1.0000000000001p0 + }, + { // Entry 46 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 47 + 0x1.p-1, + 0x1.0p-1 + }, + { // Entry 48 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1 + }, + { // Entry 49 + 0x1.fffffffffffff0p-3, + 0x1.fffffffffffffp-3 + }, + { // Entry 50 + 0x1.p-2, + 0x1.0p-2 + }, + { // Entry 51 + 0x1.00000000000010p-2, + 0x1.0000000000001p-2 + }, + { // Entry 52 + 0x1.fffffffffffff0p-4, + 0x1.fffffffffffffp-4 + }, + { // Entry 53 + 0x1.p-3, + 0x1.0p-3 + }, + { // Entry 54 + 0x1.00000000000010p-3, + 0x1.0000000000001p-3 + }, + { // Entry 55 + 0x1.fffffffffffff0p-5, + 0x1.fffffffffffffp-5 + }, + { // Entry 56 + 0x1.p-4, + 0x1.0p-4 + }, + { // Entry 57 + 0x1.00000000000010p-4, + 0x1.0000000000001p-4 + }, + { // Entry 58 + 0x1.fffffffffffff0p-6, + 0x1.fffffffffffffp-6 + }, + { // Entry 59 + 0x1.p-5, + 0x1.0p-5 + }, + { // Entry 60 + 0x1.00000000000010p-5, + 0x1.0000000000001p-5 + }, + { // Entry 61 + 0x1.fffffffffffff0p-8, + 0x1.fffffffffffffp-8 + }, + { // Entry 62 + 0x1.p-7, + 0x1.0p-7 + }, + { // Entry 63 + 0x1.00000000000010p-7, + 0x1.0000000000001p-7 + }, + { // Entry 64 + 0x1.fffffffffffff0p-10, + 0x1.fffffffffffffp-10 + }, + { // Entry 65 + 0x1.p-9, + 0x1.0p-9 + }, + { // Entry 66 + 0x1.00000000000010p-9, + 0x1.0000000000001p-9 + }, + { // Entry 67 + 0x1.fffffffffffff0p-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 68 + 0x1.p-10, + 0x1.0p-10 + }, + { // Entry 69 + 0x1.00000000000010p-10, + 0x1.0000000000001p-10 + }, + { // Entry 70 + 0x1.fffffffffffff0p-16, + 0x1.fffffffffffffp-16 + }, + { // Entry 71 + 0x1.p-15, + 0x1.0p-15 + }, + { // Entry 72 + 0x1.00000000000010p-15, + 0x1.0000000000001p-15 + }, + { // Entry 73 + 0x1.fffffffffffff0p-21, + 0x1.fffffffffffffp-21 + }, + { // Entry 74 + 0x1.p-20, + 0x1.0p-20 + }, + { // Entry 75 + 0x1.00000000000010p-20, + 0x1.0000000000001p-20 + }, + { // Entry 76 + 0x1.fffffffffffff0p-101, + 0x1.fffffffffffffp-101 + }, + { // Entry 77 + 0x1.p-100, + 0x1.0p-100 + }, + { // Entry 78 + 0x1.00000000000010p-100, + 0x1.0000000000001p-100 + }, + { // Entry 79 + 0x1.fffffffffffff0p-201, + 0x1.fffffffffffffp-201 + }, + { // Entry 80 + 0x1.p-200, + 0x1.0p-200 + }, + { // Entry 81 + 0x1.00000000000010p-200, + 0x1.0000000000001p-200 + }, + { // Entry 82 + 0x1.fffffffffffff0p-1001, + 0x1.fffffffffffffp-1001 + }, + { // Entry 83 + 0x1.p-1000, + 0x1.0p-1000 + }, + { // Entry 84 + 0x1.00000000000010p-1000, + 0x1.0000000000001p-1000 + }, + { // Entry 85 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 86 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 87 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 88 + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 89 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 90 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 91 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 92 + 0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 93 + 0x1.921fb54442d180p1, + 0x1.921fb54442d18p1 + }, + { // Entry 94 + 0x1.921fb54442d180p1, + -0x1.921fb54442d18p1 + }, + { // Entry 95 + 0x1.921fb54442d180p0, + 0x1.921fb54442d18p0 + }, + { // Entry 96 + 0x1.921fb54442d180p0, + -0x1.921fb54442d18p0 + }, + { // Entry 97 + 0x1.00000000000010p0, + 0x1.0000000000001p0 + }, + { // Entry 98 + 0x1.00000000000010p0, + -0x1.0000000000001p0 + }, + { // Entry 99 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 100 + 0x1.p0, + -0x1.0p0 + }, + { // Entry 101 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 102 + 0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 103 + 0x1.921fb54442d180p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 104 + 0x1.921fb54442d180p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 105 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 106 + 0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 107 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 108 + 0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 109 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 110 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 111 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 112 + 0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 113 + 0x1.p-1073, + 0x1.0p-1073 + }, + { // Entry 114 + 0x1.p-1073, + -0x1.0p-1073 + }, + { // Entry 115 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 116 + 0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 117 + 0.0, + 0.0 + }, + { // Entry 118 + 0.0, + -0.0 + } +}; diff --git a/tests/math_data/fabsf_intel_data.h b/tests/math_data/fabsf_intel_data.h new file mode 100644 index 000000000..eb426b674 --- /dev/null +++ b/tests/math_data/fabsf_intel_data.h @@ -0,0 +1,446 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_fabsf_intel_data[] = { + { // Entry 0 + 0x1.p-10, + -0x1.p-10 + }, + { // Entry 1 + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 2 + 0.0, + 0.0 + }, + { // Entry 3 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 4 + 0x1.fffffep99, + 0x1.fffffep99 + }, + { // Entry 5 + 0x1.p100, + 0x1.p100 + }, + { // Entry 6 + 0x1.000002p100, + 0x1.000002p100 + }, + { // Entry 7 + 0x1.fffffep19, + 0x1.fffffep19 + }, + { // Entry 8 + 0x1.p20, + 0x1.p20 + }, + { // Entry 9 + 0x1.000002p20, + 0x1.000002p20 + }, + { // Entry 10 + 0x1.fffffep14, + 0x1.fffffep14 + }, + { // Entry 11 + 0x1.p15, + 0x1.p15 + }, + { // Entry 12 + 0x1.000002p15, + 0x1.000002p15 + }, + { // Entry 13 + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 14 + 0x1.p10, + 0x1.p10 + }, + { // Entry 15 + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 16 + 0x1.fffffep8, + 0x1.fffffep8 + }, + { // Entry 17 + 0x1.p9, + 0x1.p9 + }, + { // Entry 18 + 0x1.000002p9, + 0x1.000002p9 + }, + { // Entry 19 + 0x1.fffffep6, + 0x1.fffffep6 + }, + { // Entry 20 + 0x1.p7, + 0x1.p7 + }, + { // Entry 21 + 0x1.000002p7, + 0x1.000002p7 + }, + { // Entry 22 + 0x1.fffffep4, + 0x1.fffffep4 + }, + { // Entry 23 + 0x1.p5, + 0x1.p5 + }, + { // Entry 24 + 0x1.000002p5, + 0x1.000002p5 + }, + { // Entry 25 + 0x1.fffffep3, + 0x1.fffffep3 + }, + { // Entry 26 + 0x1.p4, + 0x1.p4 + }, + { // Entry 27 + 0x1.000002p4, + 0x1.000002p4 + }, + { // Entry 28 + 0x1.fffffep2, + 0x1.fffffep2 + }, + { // Entry 29 + 0x1.p3, + 0x1.p3 + }, + { // Entry 30 + 0x1.000002p3, + 0x1.000002p3 + }, + { // Entry 31 + 0x1.fffffep1, + 0x1.fffffep1 + }, + { // Entry 32 + 0x1.p2, + 0x1.p2 + }, + { // Entry 33 + 0x1.000002p2, + 0x1.000002p2 + }, + { // Entry 34 + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 35 + 0x1.p1, + 0x1.p1 + }, + { // Entry 36 + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 37 + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 38 + 0x1.p0, + 0x1.p0 + }, + { // Entry 39 + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 40 + 0x1.fffffep-2, + 0x1.fffffep-2 + }, + { // Entry 41 + 0x1.p-1, + 0x1.p-1 + }, + { // Entry 42 + 0x1.000002p-1, + 0x1.000002p-1 + }, + { // Entry 43 + 0x1.fffffep-3, + 0x1.fffffep-3 + }, + { // Entry 44 + 0x1.p-2, + 0x1.p-2 + }, + { // Entry 45 + 0x1.000002p-2, + 0x1.000002p-2 + }, + { // Entry 46 + 0x1.fffffep-4, + 0x1.fffffep-4 + }, + { // Entry 47 + 0x1.p-3, + 0x1.p-3 + }, + { // Entry 48 + 0x1.000002p-3, + 0x1.000002p-3 + }, + { // Entry 49 + 0x1.fffffep-5, + 0x1.fffffep-5 + }, + { // Entry 50 + 0x1.p-4, + 0x1.p-4 + }, + { // Entry 51 + 0x1.000002p-4, + 0x1.000002p-4 + }, + { // Entry 52 + 0x1.fffffep-6, + 0x1.fffffep-6 + }, + { // Entry 53 + 0x1.p-5, + 0x1.p-5 + }, + { // Entry 54 + 0x1.000002p-5, + 0x1.000002p-5 + }, + { // Entry 55 + 0x1.fffffep-8, + 0x1.fffffep-8 + }, + { // Entry 56 + 0x1.p-7, + 0x1.p-7 + }, + { // Entry 57 + 0x1.000002p-7, + 0x1.000002p-7 + }, + { // Entry 58 + 0x1.fffffep-10, + 0x1.fffffep-10 + }, + { // Entry 59 + 0x1.p-9, + 0x1.p-9 + }, + { // Entry 60 + 0x1.000002p-9, + 0x1.000002p-9 + }, + { // Entry 61 + 0x1.fffffep-11, + 0x1.fffffep-11 + }, + { // Entry 62 + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 63 + 0x1.000002p-10, + 0x1.000002p-10 + }, + { // Entry 64 + 0x1.fffffep-16, + 0x1.fffffep-16 + }, + { // Entry 65 + 0x1.p-15, + 0x1.p-15 + }, + { // Entry 66 + 0x1.000002p-15, + 0x1.000002p-15 + }, + { // Entry 67 + 0x1.fffffep-21, + 0x1.fffffep-21 + }, + { // Entry 68 + 0x1.p-20, + 0x1.p-20 + }, + { // Entry 69 + 0x1.000002p-20, + 0x1.000002p-20 + }, + { // Entry 70 + 0x1.fffffep-101, + 0x1.fffffep-101 + }, + { // Entry 71 + 0x1.p-100, + 0x1.p-100 + }, + { // Entry 72 + 0x1.000002p-100, + 0x1.000002p-100 + }, + { // Entry 73 + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 74 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 75 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 76 + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 77 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 78 + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 79 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 80 + 0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 81 + 0x1.921fb6p1, + 0x1.921fb6p1 + }, + { // Entry 82 + 0x1.921fb6p1, + -0x1.921fb6p1 + }, + { // Entry 83 + 0x1.921fb6p0, + 0x1.921fb6p0 + }, + { // Entry 84 + 0x1.921fb6p0, + -0x1.921fb6p0 + }, + { // Entry 85 + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 86 + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 87 + 0x1.p0, + 0x1.p0 + }, + { // Entry 88 + 0x1.p0, + -0x1.p0 + }, + { // Entry 89 + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 90 + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 91 + 0x1.921fb6p-1, + 0x1.921fb6p-1 + }, + { // Entry 92 + 0x1.921fb6p-1, + -0x1.921fb6p-1 + }, + { // Entry 93 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 94 + 0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 95 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 96 + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 97 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 98 + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 99 + 0x1.fffff8p-127, + 0x1.fffff8p-127 + }, + { // Entry 100 + 0x1.fffff8p-127, + -0x1.fffff8p-127 + }, + { // Entry 101 + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 102 + 0x1.p-148, + -0x1.p-148 + }, + { // Entry 103 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 104 + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 105 + 0.0, + 0.0f + }, + { // Entry 106 + 0.0, + -0.0f + } +}; diff --git a/tests/math_data/fdim_intel_data.h b/tests/math_data/fdim_intel_data.h new file mode 100644 index 000000000..c448d9620 --- /dev/null +++ b/tests/math_data/fdim_intel_data.h @@ -0,0 +1,1788 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fdim_intel_data[] = { + { // Entry 0 + 0x1.334d6a161e4f48p-2, + -0x1.999999999999fp-3, + -0x1.000d1b71758e2p-1 + }, + { // Entry 1 + 0x1.99b3d07c84b5c8p-2, + -0x1.999999999999fp-3, + -0x1.33404ea4a8c16p-1 + }, + { // Entry 2 + 0x1.99999999999988p-12, + -0x1.999999999999fp-13, + -0x1.3333333333334p-11 + }, + { // Entry 3 + 0x1.f07c1f07c1f0f8p-12, + -0x1.dbcc48676f2f9p-13, + -0x1.6f31219dbcc46p-11 + }, + { // Entry 4 + 0x1.111e2c82869f18p-1, + -0x1.ddddddddddde1p-2, + -0x1.00068db8bac71p0 + }, + { // Entry 5 + 0x1.111e2c82869ea8p-1, + -0x1.dddddddddddefp-2, + -0x1.00068db8bac71p0 + }, + { // Entry 6 + 0x1.p1, + 0x1.0p-1074, + -0x1.0p1 + }, + { // Entry 7 + 0x1.af286bca1af30800000000000080p-4, + 0x1.0000000000001p-57, + -0x1.af286bca1af30p-4 + }, + { // Entry 8 + 0x1.0000000000000fffffffffffffffffffp350, + 0x1.0000000000001p350, + 0x1.af286bca1af20p-4 + }, + { // Entry 9 + 0x1.af286bca1af30800800000000080p-4, + 0x1.0010000000001p-57, + -0x1.af286bca1af30p-4 + }, + { // Entry 10 + 0x1.0c30c30c30c308p-10, + 0x1.8618618618610p-15, + -0x1.0p-10 + }, + { // Entry 11 + 0x1.a4924924924938p-2, + 0x1.ffffffffffffep-4, + -0x1.2492492492494p-2 + }, + { // Entry 12 + 0x1.7ffffffffffff8p-51, + 0x1.ffffffffffffep-53, + -0x1.0p-51 + }, + { // Entry 13 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.9p-1068 + }, + { // Entry 14 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 15 + 0.0, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 16 + 0x1.p1, + -0x1.0p3, + -0x1.4p3 + }, + { // Entry 17 + 0x1.p2, + -0x1.8p2, + -0x1.4p3 + }, + { // Entry 18 + 0x1.80p2, + -0x1.0p2, + -0x1.4p3 + }, + { // Entry 19 + 0x1.p3, + -0x1.0p1, + -0x1.4p3 + }, + { // Entry 20 + 0x1.40p3, + 0.0, + -0x1.4p3 + }, + { // Entry 21 + 0x1.80p3, + 0x1.0p1, + -0x1.4p3 + }, + { // Entry 22 + 0x1.c0p3, + 0x1.0p2, + -0x1.4p3 + }, + { // Entry 23 + 0x1.p4, + 0x1.8p2, + -0x1.4p3 + }, + { // Entry 24 + 0x1.20p4, + 0x1.0p3, + -0x1.4p3 + }, + { // Entry 25 + 0x1.40p4, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 26 + 0.0, + -0x1.8p-1073, + -0x1.8p-1073 + }, + { // Entry 27 + 0.0, + -0x1.8p-1073, + -0x1.0p-1073 + }, + { // Entry 28 + 0.0, + -0x1.8p-1073, + -0x1.0p-1074 + }, + { // Entry 29 + 0.0, + -0x1.8p-1073, + -0.0 + }, + { // Entry 30 + 0.0, + -0x1.8p-1073, + 0x1.0p-1074 + }, + { // Entry 31 + 0.0, + -0x1.8p-1073, + 0x1.0p-1073 + }, + { // Entry 32 + 0.0, + -0x1.8p-1073, + 0x1.8p-1073 + }, + { // Entry 33 + 0x1.p-1074, + -0x1.0p-1073, + -0x1.8p-1073 + }, + { // Entry 34 + 0.0, + -0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 35 + 0.0, + -0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 36 + 0.0, + -0x1.0p-1073, + -0.0 + }, + { // Entry 37 + 0.0, + -0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 38 + 0.0, + -0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 39 + 0.0, + -0x1.0p-1073, + 0x1.8p-1073 + }, + { // Entry 40 + 0x1.p-1073, + -0x1.0p-1074, + -0x1.8p-1073 + }, + { // Entry 41 + 0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 42 + 0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 43 + 0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 44 + 0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 45 + 0.0, + -0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 46 + 0.0, + -0x1.0p-1074, + 0x1.8p-1073 + }, + { // Entry 47 + 0x1.80p-1073, + -0.0, + -0x1.8p-1073 + }, + { // Entry 48 + 0x1.p-1073, + -0.0, + -0x1.0p-1073 + }, + { // Entry 49 + 0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 50 + 0.0, + -0.0, + -0.0 + }, + { // Entry 51 + 0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 52 + 0.0, + -0.0, + 0x1.0p-1073 + }, + { // Entry 53 + 0.0, + -0.0, + 0x1.8p-1073 + }, + { // Entry 54 + 0x1.p-1072, + 0x1.0p-1074, + -0x1.8p-1073 + }, + { // Entry 55 + 0x1.80p-1073, + 0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 56 + 0x1.p-1073, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 57 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 58 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 59 + 0.0, + 0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 60 + 0.0, + 0x1.0p-1074, + 0x1.8p-1073 + }, + { // Entry 61 + 0x1.40p-1072, + 0x1.0p-1073, + -0x1.8p-1073 + }, + { // Entry 62 + 0x1.p-1072, + 0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 63 + 0x1.80p-1073, + 0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 64 + 0x1.p-1073, + 0x1.0p-1073, + -0.0 + }, + { // Entry 65 + 0x1.p-1074, + 0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 66 + 0.0, + 0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 67 + 0.0, + 0x1.0p-1073, + 0x1.8p-1073 + }, + { // Entry 68 + 0x1.80p-1072, + 0x1.8p-1073, + -0x1.8p-1073 + }, + { // Entry 69 + 0x1.40p-1072, + 0x1.8p-1073, + -0x1.0p-1073 + }, + { // Entry 70 + 0x1.p-1072, + 0x1.8p-1073, + -0x1.0p-1074 + }, + { // Entry 71 + 0x1.80p-1073, + 0x1.8p-1073, + -0.0 + }, + { // Entry 72 + 0x1.p-1073, + 0x1.8p-1073, + 0x1.0p-1074 + }, + { // Entry 73 + 0x1.p-1074, + 0x1.8p-1073, + 0x1.0p-1073 + }, + { // Entry 74 + 0.0, + 0x1.8p-1073, + 0x1.8p-1073 + }, + { // Entry 75 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 76 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 77 + 0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 78 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 79 + 0x1.p-1073, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 80 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 81 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 82 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 83 + 0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 84 + 0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 85 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 86 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp1022 + }, + { // Entry 87 + 0.0, + 0x1.ffffffffffffcp-1024, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 88 + 0.0, + 0x1.ffffffffffffcp-1024, + 0x1.0p-1023 + }, + { // Entry 89 + 0.0, + 0x1.ffffffffffffcp-1024, + 0x1.0000000000002p-1023 + }, + { // Entry 90 + 0x1.p-1074, + 0x1.0p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 91 + 0.0, + 0x1.0p-1023, + 0x1.0p-1023 + }, + { // Entry 92 + 0.0, + 0x1.0p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 93 + 0x1.p-1073, + 0x1.0000000000002p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 94 + 0x1.p-1074, + 0x1.0000000000002p-1023, + 0x1.0p-1023 + }, + { // Entry 95 + 0.0, + 0x1.0000000000002p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 96 + 0.0, + 0x1.fffffffffffffp-51, + 0x1.fffffffffffffp-51 + }, + { // Entry 97 + 0.0, + 0x1.fffffffffffffp-51, + 0x1.0p-50 + }, + { // Entry 98 + 0.0, + 0x1.fffffffffffffp-51, + 0x1.0000000000001p-50 + }, + { // Entry 99 + 0x1.p-103, + 0x1.0p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 100 + 0.0, + 0x1.0p-50, + 0x1.0p-50 + }, + { // Entry 101 + 0.0, + 0x1.0p-50, + 0x1.0000000000001p-50 + }, + { // Entry 102 + 0x1.80p-102, + 0x1.0000000000001p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 103 + 0x1.p-102, + 0x1.0000000000001p-50, + 0x1.0p-50 + }, + { // Entry 104 + 0.0, + 0x1.0000000000001p-50, + 0x1.0000000000001p-50 + }, + { // Entry 105 + 0.0, + 0x1.fffffffffffffp-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 106 + 0.0, + 0x1.fffffffffffffp-11, + 0x1.0p-10 + }, + { // Entry 107 + 0.0, + 0x1.fffffffffffffp-11, + 0x1.0000000000001p-10 + }, + { // Entry 108 + 0x1.p-63, + 0x1.0p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 109 + 0.0, + 0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 110 + 0.0, + 0x1.0p-10, + 0x1.0000000000001p-10 + }, + { // Entry 111 + 0x1.80p-62, + 0x1.0000000000001p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 112 + 0x1.p-62, + 0x1.0000000000001p-10, + 0x1.0p-10 + }, + { // Entry 113 + 0.0, + 0x1.0000000000001p-10, + 0x1.0000000000001p-10 + }, + { // Entry 114 + 0.0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 115 + 0.0, + 0x1.fffffffffffffp-2, + 0x1.0p-1 + }, + { // Entry 116 + 0.0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-1 + }, + { // Entry 117 + 0x1.p-54, + 0x1.0p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 118 + 0.0, + 0x1.0p-1, + 0x1.0p-1 + }, + { // Entry 119 + 0.0, + 0x1.0p-1, + 0x1.0000000000001p-1 + }, + { // Entry 120 + 0x1.80p-53, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 121 + 0x1.p-53, + 0x1.0000000000001p-1, + 0x1.0p-1 + }, + { // Entry 122 + 0.0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-1 + }, + { // Entry 123 + 0.0, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 124 + 0.0, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 125 + 0.0, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 126 + 0x1.p-52, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 127 + 0.0, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 128 + 0.0, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 129 + 0x1.80p-51, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 130 + 0x1.p-51, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 131 + 0.0, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 132 + 0.0, + 0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 133 + 0.0, + 0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 134 + 0.0, + 0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 135 + 0x1.p-43, + 0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 136 + 0.0, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 137 + 0.0, + 0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 138 + 0x1.80p-42, + 0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 139 + 0x1.p-42, + 0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 140 + 0.0, + 0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 141 + 0.0, + 0x1.fffffffffffffp49, + 0x1.fffffffffffffp49 + }, + { // Entry 142 + 0.0, + 0x1.fffffffffffffp49, + 0x1.0p50 + }, + { // Entry 143 + 0.0, + 0x1.fffffffffffffp49, + 0x1.0000000000001p50 + }, + { // Entry 144 + 0x1.p-3, + 0x1.0p50, + 0x1.fffffffffffffp49 + }, + { // Entry 145 + 0.0, + 0x1.0p50, + 0x1.0p50 + }, + { // Entry 146 + 0.0, + 0x1.0p50, + 0x1.0000000000001p50 + }, + { // Entry 147 + 0x1.80p-2, + 0x1.0000000000001p50, + 0x1.fffffffffffffp49 + }, + { // Entry 148 + 0x1.p-2, + 0x1.0000000000001p50, + 0x1.0p50 + }, + { // Entry 149 + 0.0, + 0x1.0000000000001p50, + 0x1.0000000000001p50 + }, + { // Entry 150 + 0.0, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp1022 + }, + { // Entry 151 + 0.0, + 0x1.fffffffffffffp1022, + 0x1.0p1023 + }, + { // Entry 152 + 0.0, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p1023 + }, + { // Entry 153 + 0x1.p970, + 0x1.0p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 154 + 0.0, + 0x1.0p1023, + 0x1.0p1023 + }, + { // Entry 155 + 0.0, + 0x1.0p1023, + 0x1.0000000000001p1023 + }, + { // Entry 156 + 0x1.80p971, + 0x1.0000000000001p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 157 + 0x1.p971, + 0x1.0000000000001p1023, + 0x1.0p1023 + }, + { // Entry 158 + 0.0, + 0x1.0000000000001p1023, + 0x1.0000000000001p1023 + }, + { // Entry 159 + 0.0, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 160 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 161 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 162 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 163 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 164 + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 165 + HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 166 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 167 + HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 168 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 169 + HUGE_VAL, + HUGE_VAL, + -0x1.0p0 + }, + { // Entry 170 + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 171 + HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 172 + 0.0, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 173 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 174 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 175 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 176 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 177 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 178 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 179 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 180 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 181 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 182 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p0 + }, + { // Entry 183 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 184 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 185 + 0.0, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 186 + 0.0, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 187 + 0.0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 188 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 189 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 190 + 0x1.p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 191 + 0x1.p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 192 + 0x1.00000000000010p-1022, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 193 + 0x1.fffffffffffff0p-1022, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 194 + 0x1.p-1021, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 195 + 0x1.p0, + 0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 196 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 197 + HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 198 + 0.0, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 199 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 200 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 201 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 202 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 203 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 204 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 205 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 206 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 207 + 0x1.fffffffffffff0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 208 + 0x1.p0, + 0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 209 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 210 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 211 + 0.0, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 212 + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 213 + 0.0, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 214 + 0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 215 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 216 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 217 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 218 + 0x1.p-1073, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 219 + 0x1.p-1022, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 220 + 0x1.00000000000010p-1022, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 221 + 0x1.p0, + 0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 222 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 223 + HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 224 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 225 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 226 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 227 + 0.0, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 228 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 229 + 0.0, + 0.0, + 0.0 + }, + { // Entry 230 + 0.0, + 0.0, + -0.0 + }, + { // Entry 231 + 0x1.p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 232 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 233 + 0x1.p-1022, + 0.0, + -0x1.0p-1022 + }, + { // Entry 234 + 0x1.p0, + 0.0, + -0x1.0p0 + }, + { // Entry 235 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 236 + HUGE_VAL, + 0.0, + -HUGE_VAL + }, + { // Entry 237 + 0.0, + -0.0, + HUGE_VAL + }, + { // Entry 238 + 0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 239 + 0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 240 + 0.0, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 241 + 0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 242 + 0.0, + -0.0, + 0.0 + }, + { // Entry 243 + 0.0, + -0.0, + -0.0 + }, + { // Entry 244 + 0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 245 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 246 + 0x1.p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 247 + 0x1.p0, + -0.0, + -0x1.0p0 + }, + { // Entry 248 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 249 + HUGE_VAL, + -0.0, + -HUGE_VAL + }, + { // Entry 250 + 0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 251 + 0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 252 + 0.0, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 253 + 0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 254 + 0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 255 + 0.0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 256 + 0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 257 + 0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 258 + 0x1.ffffffffffffc0p-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 259 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 260 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 261 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 262 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 263 + 0.0, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 264 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 265 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 266 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 267 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 268 + 0.0, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 269 + 0.0, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 270 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 271 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 272 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 273 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 274 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 275 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 276 + 0.0, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 277 + 0.0, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 278 + 0.0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 279 + 0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 280 + 0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 281 + 0.0, + -0x1.0p-1022, + 0.0 + }, + { // Entry 282 + 0.0, + -0x1.0p-1022, + -0.0 + }, + { // Entry 283 + 0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 284 + 0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 285 + 0.0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 286 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 287 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 289 + 0.0, + -0x1.fffffffffffffp-1, + HUGE_VAL + }, + { // Entry 290 + 0.0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1023 + }, + { // Entry 291 + 0.0, + -0x1.fffffffffffffp-1, + 0x1.0p-1022 + }, + { // Entry 292 + 0.0, + -0x1.fffffffffffffp-1, + 0x1.ffffffffffffep-1023 + }, + { // Entry 293 + 0.0, + -0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 294 + 0.0, + -0x1.fffffffffffffp-1, + 0.0 + }, + { // Entry 295 + 0.0, + -0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 296 + 0.0, + -0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 297 + 0.0, + -0x1.fffffffffffffp-1, + -0x1.ffffffffffffep-1023 + }, + { // Entry 298 + 0.0, + -0x1.fffffffffffffp-1, + -0x1.0p-1022 + }, + { // Entry 299 + 0x1.p-53, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 300 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 301 + HUGE_VAL, + -0x1.fffffffffffffp-1, + -HUGE_VAL + }, + { // Entry 302 + 0.0, + -0x1.0p0, + HUGE_VAL + }, + { // Entry 303 + 0.0, + -0x1.0p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 304 + 0.0, + -0x1.0p0, + 0x1.0p-1022 + }, + { // Entry 305 + 0.0, + -0x1.0p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 306 + 0.0, + -0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 307 + 0.0, + -0x1.0p0, + 0.0 + }, + { // Entry 308 + 0.0, + -0x1.0p0, + -0.0 + }, + { // Entry 309 + 0.0, + -0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 310 + 0.0, + -0x1.0p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 311 + 0.0, + -0x1.0p0, + -0x1.0p-1022 + }, + { // Entry 312 + 0.0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 313 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 314 + HUGE_VAL, + -0x1.0p0, + -HUGE_VAL + }, + { // Entry 315 + 0.0, + -0x1.0000000000001p0, + HUGE_VAL + }, + { // Entry 316 + 0.0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 317 + 0.0, + -0x1.0000000000001p0, + 0x1.0p-1022 + }, + { // Entry 318 + 0.0, + -0x1.0000000000001p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 319 + 0.0, + -0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 320 + 0.0, + -0x1.0000000000001p0, + 0.0 + }, + { // Entry 321 + 0.0, + -0x1.0000000000001p0, + -0.0 + }, + { // Entry 322 + 0.0, + -0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 323 + 0.0, + -0x1.0000000000001p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 324 + 0.0, + -0x1.0000000000001p0, + -0x1.0p-1022 + }, + { // Entry 325 + 0.0, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 326 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0000000000001p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 327 + HUGE_VAL, + -0x1.0000000000001p0, + -HUGE_VAL + }, + { // Entry 328 + 0.0, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 329 + 0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 330 + 0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 331 + 0.0, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 332 + 0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 333 + 0.0, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 334 + 0.0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 335 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 336 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 337 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 338 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.0p0 + }, + { // Entry 339 + 0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 340 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 341 + 0.0, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 342 + 0.0, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 343 + 0.0, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 344 + 0.0, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 345 + 0.0, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 346 + 0.0, + -HUGE_VAL, + 0.0 + }, + { // Entry 347 + 0.0, + -HUGE_VAL, + -0.0 + }, + { // Entry 348 + 0.0, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 349 + 0.0, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 350 + 0.0, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 351 + 0.0, + -HUGE_VAL, + -0x1.0p0 + }, + { // Entry 352 + 0.0, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 353 + 0.0, + -HUGE_VAL, + -HUGE_VAL + } +}; diff --git a/tests/math_data/fdimf_intel_data.h b/tests/math_data/fdimf_intel_data.h new file mode 100644 index 000000000..eb05983a3 --- /dev/null +++ b/tests/math_data/fdimf_intel_data.h @@ -0,0 +1,1793 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fdimf_intel_data[] = { + { // Entry 0 + 0x1.861861p-14, + -0x1.86187ep-15, + -0x1.249250p-13 + }, + { // Entry 1 + 0x1.334d69p-2, + -0x1.99999ep-3, + -0x1.000d1cp-1 + }, + { // Entry 2 + 0x1.99b3d1p-2, + -0x1.99999ep-3, + -0x1.334050p-1 + }, + { // Entry 3 + 0x1.999999p-12, + -0x1.99999ep-13, + -0x1.333334p-11 + }, + { // Entry 4 + 0x1.111e2bp-1, + -0x1.dddde2p-2, + -0x1.00068ep0 + }, + { // Entry 5 + 0x1.111e29p-1, + -0x1.dddde6p-2, + -0x1.00068ep0 + }, + { // Entry 6 + 0x1.04a781p-11, + -0x1.f6b0fep-12, + -0x1.p-10 + }, + { // Entry 7 + 0x1.02960bp-11, + -0x1.fad3eap-12, + -0x1.p-10 + }, + { // Entry 8 + 0x1.p1, + 0x1.p-149, + -0x1.p1 + }, + { // Entry 9 + 0x1.000001fffffffffffff286bac0p73, + 0x1.000002p73, + 0x1.af28a8p-4 + }, + { // Entry 10 + 0x1.249269p-2, + 0x1.08p-21, + -0x1.249248p-2 + }, + { // Entry 11 + 0x1.af2851p-4, + 0x1.08p-23, + -0x1.af2830p-4 + }, + { // Entry 12 + 0x1.000021p-24, + 0x1.08p-43, + -0x1.p-24 + }, + { // Entry 13 + 0x1.4ff4d3p3, + 0x1.083d28p2, + -0x1.97ac7ep2 + }, + { // Entry 14 + 0x1.fffffcp127, + 0x1.fffffcp127, + -0x1.90p-143 + }, + { // Entry 15 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 16 + 0.0, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 17 + 0x1.p1, + -0x1.p3, + -0x1.40p3 + }, + { // Entry 18 + 0x1.p2, + -0x1.80p2, + -0x1.40p3 + }, + { // Entry 19 + 0x1.80p2, + -0x1.p2, + -0x1.40p3 + }, + { // Entry 20 + 0x1.p3, + -0x1.p1, + -0x1.40p3 + }, + { // Entry 21 + 0x1.40p3, + 0.0, + -0x1.40p3 + }, + { // Entry 22 + 0x1.80p3, + 0x1.p1, + -0x1.40p3 + }, + { // Entry 23 + 0x1.c0p3, + 0x1.p2, + -0x1.40p3 + }, + { // Entry 24 + 0x1.p4, + 0x1.80p2, + -0x1.40p3 + }, + { // Entry 25 + 0x1.20p4, + 0x1.p3, + -0x1.40p3 + }, + { // Entry 26 + 0x1.40p4, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 27 + 0.0, + -0x1.80p-148, + -0x1.80p-148 + }, + { // Entry 28 + 0.0, + -0x1.80p-148, + -0x1.p-148 + }, + { // Entry 29 + 0.0, + -0x1.80p-148, + -0x1.p-149 + }, + { // Entry 30 + 0.0, + -0x1.80p-148, + 0.0 + }, + { // Entry 31 + 0.0, + -0x1.80p-148, + 0x1.p-149 + }, + { // Entry 32 + 0.0, + -0x1.80p-148, + 0x1.p-148 + }, + { // Entry 33 + 0.0, + -0x1.80p-148, + 0x1.80p-148 + }, + { // Entry 34 + 0x1.p-149, + -0x1.p-148, + -0x1.80p-148 + }, + { // Entry 35 + 0.0, + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 36 + 0.0, + -0x1.p-148, + -0x1.p-149 + }, + { // Entry 37 + 0.0, + -0x1.p-148, + 0.0 + }, + { // Entry 38 + 0.0, + -0x1.p-148, + 0x1.p-149 + }, + { // Entry 39 + 0.0, + -0x1.p-148, + 0x1.p-148 + }, + { // Entry 40 + 0.0, + -0x1.p-148, + 0x1.80p-148 + }, + { // Entry 41 + 0x1.p-148, + -0x1.p-149, + -0x1.80p-148 + }, + { // Entry 42 + 0x1.p-149, + -0x1.p-149, + -0x1.p-148 + }, + { // Entry 43 + 0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 44 + 0.0, + -0x1.p-149, + 0.0 + }, + { // Entry 45 + 0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 46 + 0.0, + -0x1.p-149, + 0x1.p-148 + }, + { // Entry 47 + 0.0, + -0x1.p-149, + 0x1.80p-148 + }, + { // Entry 48 + 0x1.80p-148, + 0.0, + -0x1.80p-148 + }, + { // Entry 49 + 0x1.p-148, + 0.0, + -0x1.p-148 + }, + { // Entry 50 + 0x1.p-149, + 0.0, + -0x1.p-149 + }, + { // Entry 51 + 0.0, + 0.0, + 0.0 + }, + { // Entry 52 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 53 + 0.0, + 0.0, + 0x1.p-148 + }, + { // Entry 54 + 0.0, + 0.0, + 0x1.80p-148 + }, + { // Entry 55 + 0x1.p-147, + 0x1.p-149, + -0x1.80p-148 + }, + { // Entry 56 + 0x1.80p-148, + 0x1.p-149, + -0x1.p-148 + }, + { // Entry 57 + 0x1.p-148, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 58 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 59 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 60 + 0.0, + 0x1.p-149, + 0x1.p-148 + }, + { // Entry 61 + 0.0, + 0x1.p-149, + 0x1.80p-148 + }, + { // Entry 62 + 0x1.40p-147, + 0x1.p-148, + -0x1.80p-148 + }, + { // Entry 63 + 0x1.p-147, + 0x1.p-148, + -0x1.p-148 + }, + { // Entry 64 + 0x1.80p-148, + 0x1.p-148, + -0x1.p-149 + }, + { // Entry 65 + 0x1.p-148, + 0x1.p-148, + 0.0 + }, + { // Entry 66 + 0x1.p-149, + 0x1.p-148, + 0x1.p-149 + }, + { // Entry 67 + 0.0, + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 68 + 0.0, + 0x1.p-148, + 0x1.80p-148 + }, + { // Entry 69 + 0x1.80p-147, + 0x1.80p-148, + -0x1.80p-148 + }, + { // Entry 70 + 0x1.40p-147, + 0x1.80p-148, + -0x1.p-148 + }, + { // Entry 71 + 0x1.p-147, + 0x1.80p-148, + -0x1.p-149 + }, + { // Entry 72 + 0x1.80p-148, + 0x1.80p-148, + 0.0 + }, + { // Entry 73 + 0x1.p-148, + 0x1.80p-148, + 0x1.p-149 + }, + { // Entry 74 + 0x1.p-149, + 0x1.80p-148, + 0x1.p-148 + }, + { // Entry 75 + 0.0, + 0x1.80p-148, + 0x1.80p-148 + }, + { // Entry 76 + 0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 77 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 78 + 0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 79 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 80 + 0x1.p-148, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 81 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 82 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 83 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 84 + 0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 85 + 0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 86 + 0.0, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 87 + 0x1.fffffep127, + 0x1.fffffep126, + -0x1.fffffep126 + }, + { // Entry 88 + 0.0, + 0x1.fffff8p-128, + 0x1.fffff8p-128 + }, + { // Entry 89 + 0.0, + 0x1.fffff8p-128, + 0x1.p-127 + }, + { // Entry 90 + 0.0, + 0x1.fffff8p-128, + 0x1.000004p-127 + }, + { // Entry 91 + 0x1.p-149, + 0x1.p-127, + 0x1.fffff8p-128 + }, + { // Entry 92 + 0.0, + 0x1.p-127, + 0x1.p-127 + }, + { // Entry 93 + 0.0, + 0x1.p-127, + 0x1.000004p-127 + }, + { // Entry 94 + 0x1.p-148, + 0x1.000004p-127, + 0x1.fffff8p-128 + }, + { // Entry 95 + 0x1.p-149, + 0x1.000004p-127, + 0x1.p-127 + }, + { // Entry 96 + 0.0, + 0x1.000004p-127, + 0x1.000004p-127 + }, + { // Entry 97 + 0.0, + 0x1.fffffep-51, + 0x1.fffffep-51 + }, + { // Entry 98 + 0.0, + 0x1.fffffep-51, + 0x1.p-50 + }, + { // Entry 99 + 0.0, + 0x1.fffffep-51, + 0x1.000002p-50 + }, + { // Entry 100 + 0x1.p-74, + 0x1.p-50, + 0x1.fffffep-51 + }, + { // Entry 101 + 0.0, + 0x1.p-50, + 0x1.p-50 + }, + { // Entry 102 + 0.0, + 0x1.p-50, + 0x1.000002p-50 + }, + { // Entry 103 + 0x1.80p-73, + 0x1.000002p-50, + 0x1.fffffep-51 + }, + { // Entry 104 + 0x1.p-73, + 0x1.000002p-50, + 0x1.p-50 + }, + { // Entry 105 + 0.0, + 0x1.000002p-50, + 0x1.000002p-50 + }, + { // Entry 106 + 0.0, + 0x1.fffffep-11, + 0x1.fffffep-11 + }, + { // Entry 107 + 0.0, + 0x1.fffffep-11, + 0x1.p-10 + }, + { // Entry 108 + 0.0, + 0x1.fffffep-11, + 0x1.000002p-10 + }, + { // Entry 109 + 0x1.p-34, + 0x1.p-10, + 0x1.fffffep-11 + }, + { // Entry 110 + 0.0, + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 111 + 0.0, + 0x1.p-10, + 0x1.000002p-10 + }, + { // Entry 112 + 0x1.80p-33, + 0x1.000002p-10, + 0x1.fffffep-11 + }, + { // Entry 113 + 0x1.p-33, + 0x1.000002p-10, + 0x1.p-10 + }, + { // Entry 114 + 0.0, + 0x1.000002p-10, + 0x1.000002p-10 + }, + { // Entry 115 + 0.0, + 0x1.fffffep-2, + 0x1.fffffep-2 + }, + { // Entry 116 + 0.0, + 0x1.fffffep-2, + 0x1.p-1 + }, + { // Entry 117 + 0.0, + 0x1.fffffep-2, + 0x1.000002p-1 + }, + { // Entry 118 + 0x1.p-25, + 0x1.p-1, + 0x1.fffffep-2 + }, + { // Entry 119 + 0.0, + 0x1.p-1, + 0x1.p-1 + }, + { // Entry 120 + 0.0, + 0x1.p-1, + 0x1.000002p-1 + }, + { // Entry 121 + 0x1.80p-24, + 0x1.000002p-1, + 0x1.fffffep-2 + }, + { // Entry 122 + 0x1.p-24, + 0x1.000002p-1, + 0x1.p-1 + }, + { // Entry 123 + 0.0, + 0x1.000002p-1, + 0x1.000002p-1 + }, + { // Entry 124 + 0.0, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 125 + 0.0, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 126 + 0.0, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 127 + 0x1.p-23, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 128 + 0.0, + 0x1.p1, + 0x1.p1 + }, + { // Entry 129 + 0.0, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 130 + 0x1.80p-22, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 131 + 0x1.p-22, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 132 + 0.0, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 133 + 0.0, + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 134 + 0.0, + 0x1.fffffep9, + 0x1.p10 + }, + { // Entry 135 + 0.0, + 0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 136 + 0x1.p-14, + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 137 + 0.0, + 0x1.p10, + 0x1.p10 + }, + { // Entry 138 + 0.0, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 139 + 0x1.80p-13, + 0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 140 + 0x1.p-13, + 0x1.000002p10, + 0x1.p10 + }, + { // Entry 141 + 0.0, + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 142 + 0.0, + 0x1.fffffep49, + 0x1.fffffep49 + }, + { // Entry 143 + 0.0, + 0x1.fffffep49, + 0x1.p50 + }, + { // Entry 144 + 0.0, + 0x1.fffffep49, + 0x1.000002p50 + }, + { // Entry 145 + 0x1.p26, + 0x1.p50, + 0x1.fffffep49 + }, + { // Entry 146 + 0.0, + 0x1.p50, + 0x1.p50 + }, + { // Entry 147 + 0.0, + 0x1.p50, + 0x1.000002p50 + }, + { // Entry 148 + 0x1.80p27, + 0x1.000002p50, + 0x1.fffffep49 + }, + { // Entry 149 + 0x1.p27, + 0x1.000002p50, + 0x1.p50 + }, + { // Entry 150 + 0.0, + 0x1.000002p50, + 0x1.000002p50 + }, + { // Entry 151 + 0.0, + 0x1.fffffep126, + 0x1.fffffep126 + }, + { // Entry 152 + 0.0, + 0x1.fffffep126, + 0x1.p127 + }, + { // Entry 153 + 0.0, + 0x1.fffffep126, + 0x1.000002p127 + }, + { // Entry 154 + 0x1.p103, + 0x1.p127, + 0x1.fffffep126 + }, + { // Entry 155 + 0.0, + 0x1.p127, + 0x1.p127 + }, + { // Entry 156 + 0.0, + 0x1.p127, + 0x1.000002p127 + }, + { // Entry 157 + 0x1.80p104, + 0x1.000002p127, + 0x1.fffffep126 + }, + { // Entry 158 + 0x1.p104, + 0x1.000002p127, + 0x1.p127 + }, + { // Entry 159 + 0.0, + 0x1.000002p127, + 0x1.000002p127 + }, + { // Entry 160 + 0.0, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 161 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 162 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 163 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 164 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 165 + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 166 + HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 167 + HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 168 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 169 + HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 170 + HUGE_VALF, + HUGE_VALF, + -0x1.p0 + }, + { // Entry 171 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 172 + HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 173 + 0.0, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 174 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 175 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 176 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 177 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 178 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 179 + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 180 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 181 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 182 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 183 + 0x1.fffffe00000000000000000000000002p127, + 0x1.fffffep127, + -0x1.p0 + }, + { // Entry 184 + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 185 + HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 186 + 0.0, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 187 + 0.0, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 188 + 0.0, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 189 + 0x1.p-149, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 190 + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 191 + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 192 + 0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 193 + 0x1.000002p-126, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 194 + 0x1.fffffep-126, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 195 + 0x1.p-125, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 196 + 0x1.00000000000000000000000000000004p0, + 0x1.p-126, + -0x1.p0 + }, + { // Entry 197 + 0x1.fffffep127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 198 + HUGE_VALF, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 199 + 0.0, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 200 + 0.0, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 201 + 0.0, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 202 + 0.0, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 203 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 204 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 205 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 206 + 0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 207 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 208 + 0x1.fffffep-126, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 209 + 0x1.00000000000000000000000000000003p0, + 0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 210 + 0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 211 + HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 212 + 0.0, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 213 + 0.0, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 214 + 0.0, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 215 + 0.0, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 216 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 217 + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 218 + 0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 219 + 0x1.p-148, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 220 + 0x1.p-126, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 221 + 0x1.000002p-126, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 222 + 0x1.p0, + 0x1.p-149, + -0x1.p0 + }, + { // Entry 223 + 0x1.fffffep127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 224 + HUGE_VALF, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 225 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 226 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 227 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 228 + 0.0, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 229 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 230 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 231 + 0.0, + 0.0f, + -0.0f + }, + { // Entry 232 + 0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 233 + 0x1.fffffcp-127, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 234 + 0x1.p-126, + 0.0f, + -0x1.p-126 + }, + { // Entry 235 + 0x1.p0, + 0.0f, + -0x1.p0 + }, + { // Entry 236 + 0x1.fffffep127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 237 + HUGE_VALF, + 0.0f, + -HUGE_VALF + }, + { // Entry 238 + 0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 239 + 0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 240 + 0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 241 + 0.0, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 242 + 0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 243 + 0.0, + -0.0f, + 0.0f + }, + { // Entry 244 + 0.0, + -0.0f, + -0.0f + }, + { // Entry 245 + 0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 246 + 0x1.fffffcp-127, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 247 + 0x1.p-126, + -0.0f, + -0x1.p-126 + }, + { // Entry 248 + 0x1.p0, + -0.0f, + -0x1.p0 + }, + { // Entry 249 + 0x1.fffffep127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 250 + HUGE_VALF, + -0.0f, + -HUGE_VALF + }, + { // Entry 251 + 0.0, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 252 + 0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 253 + 0.0, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 254 + 0.0, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 255 + 0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 256 + 0.0, + -0x1.p-149, + 0.0f + }, + { // Entry 257 + 0.0, + -0x1.p-149, + -0.0f + }, + { // Entry 258 + 0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 259 + 0x1.fffff8p-127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 260 + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 261 + 0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p-149, + -0x1.p0 + }, + { // Entry 262 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 263 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 264 + 0.0, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 265 + 0.0, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 266 + 0.0, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 267 + 0.0, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 268 + 0.0, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 269 + 0.0, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 270 + 0.0, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 271 + 0.0, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 272 + 0.0, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 273 + 0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 274 + 0x1.fffffffffffffffffffffffffffffff8p-1, + -0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 275 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 276 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 277 + 0.0, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 278 + 0.0, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 279 + 0.0, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 280 + 0.0, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 281 + 0.0, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 282 + 0.0, + -0x1.p-126, + 0.0f + }, + { // Entry 283 + 0.0, + -0x1.p-126, + -0.0f + }, + { // Entry 284 + 0.0, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 285 + 0.0, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 286 + 0.0, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 287 + 0x1.fffffffffffffffffffffffffffffff8p-1, + -0x1.p-126, + -0x1.p0 + }, + { // Entry 288 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 289 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 290 + 0.0, + -0x1.fffffep-1, + HUGE_VALF + }, + { // Entry 291 + 0.0, + -0x1.fffffep-1, + 0x1.fffffep127 + }, + { // Entry 292 + 0.0, + -0x1.fffffep-1, + 0x1.p-126 + }, + { // Entry 293 + 0.0, + -0x1.fffffep-1, + 0x1.fffffcp-127 + }, + { // Entry 294 + 0.0, + -0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 295 + 0.0, + -0x1.fffffep-1, + 0.0f + }, + { // Entry 296 + 0.0, + -0x1.fffffep-1, + -0.0f + }, + { // Entry 297 + 0.0, + -0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 298 + 0.0, + -0x1.fffffep-1, + -0x1.fffffcp-127 + }, + { // Entry 299 + 0.0, + -0x1.fffffep-1, + -0x1.p-126 + }, + { // Entry 300 + 0x1.p-24, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 301 + 0x1.fffffdfffffffffffffffffffffffffep127, + -0x1.fffffep-1, + -0x1.fffffep127 + }, + { // Entry 302 + HUGE_VALF, + -0x1.fffffep-1, + -HUGE_VALF + }, + { // Entry 303 + 0.0, + -0x1.p0, + HUGE_VALF + }, + { // Entry 304 + 0.0, + -0x1.p0, + 0x1.fffffep127 + }, + { // Entry 305 + 0.0, + -0x1.p0, + 0x1.p-126 + }, + { // Entry 306 + 0.0, + -0x1.p0, + 0x1.fffffcp-127 + }, + { // Entry 307 + 0.0, + -0x1.p0, + 0x1.p-149 + }, + { // Entry 308 + 0.0, + -0x1.p0, + 0.0f + }, + { // Entry 309 + 0.0, + -0x1.p0, + -0.0f + }, + { // Entry 310 + 0.0, + -0x1.p0, + -0x1.p-149 + }, + { // Entry 311 + 0.0, + -0x1.p0, + -0x1.fffffcp-127 + }, + { // Entry 312 + 0.0, + -0x1.p0, + -0x1.p-126 + }, + { // Entry 313 + 0.0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 314 + 0x1.fffffdfffffffffffffffffffffffffep127, + -0x1.p0, + -0x1.fffffep127 + }, + { // Entry 315 + HUGE_VALF, + -0x1.p0, + -HUGE_VALF + }, + { // Entry 316 + 0.0, + -0x1.000002p0, + HUGE_VALF + }, + { // Entry 317 + 0.0, + -0x1.000002p0, + 0x1.fffffep127 + }, + { // Entry 318 + 0.0, + -0x1.000002p0, + 0x1.p-126 + }, + { // Entry 319 + 0.0, + -0x1.000002p0, + 0x1.fffffcp-127 + }, + { // Entry 320 + 0.0, + -0x1.000002p0, + 0x1.p-149 + }, + { // Entry 321 + 0.0, + -0x1.000002p0, + 0.0f + }, + { // Entry 322 + 0.0, + -0x1.000002p0, + -0.0f + }, + { // Entry 323 + 0.0, + -0x1.000002p0, + -0x1.p-149 + }, + { // Entry 324 + 0.0, + -0x1.000002p0, + -0x1.fffffcp-127 + }, + { // Entry 325 + 0.0, + -0x1.000002p0, + -0x1.p-126 + }, + { // Entry 326 + 0.0, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 327 + 0x1.fffffdfffffffffffffffffffffffffdp127, + -0x1.000002p0, + -0x1.fffffep127 + }, + { // Entry 328 + HUGE_VALF, + -0x1.000002p0, + -HUGE_VALF + }, + { // Entry 329 + 0.0, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 330 + 0.0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 331 + 0.0, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 332 + 0.0, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 333 + 0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 334 + 0.0, + -0x1.fffffep127, + 0.0f + }, + { // Entry 335 + 0.0, + -0x1.fffffep127, + -0.0f + }, + { // Entry 336 + 0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 337 + 0.0, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 338 + 0.0, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 339 + 0.0, + -0x1.fffffep127, + -0x1.p0 + }, + { // Entry 340 + 0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 341 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 342 + 0.0, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 343 + 0.0, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 344 + 0.0, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 345 + 0.0, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 346 + 0.0, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 347 + 0.0, + -HUGE_VALF, + 0.0f + }, + { // Entry 348 + 0.0, + -HUGE_VALF, + -0.0f + }, + { // Entry 349 + 0.0, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 350 + 0.0, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 351 + 0.0, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 352 + 0.0, + -HUGE_VALF, + -0x1.p0 + }, + { // Entry 353 + 0.0, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 354 + 0.0, + -HUGE_VALF, + -HUGE_VALF + } +}; diff --git a/tests/math_data/floor_intel_data.h b/tests/math_data/floor_intel_data.h new file mode 100644 index 000000000..a1216df50 --- /dev/null +++ b/tests/math_data/floor_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_floor_intel_data[] = { + { // Entry 0 + -0x1.p0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0 + }, + { // Entry 2 + 0.0, + 0x1.0p-1074 + }, + { // Entry 3 + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0.0, + 0x1.0p-1 + }, + { // Entry 5 + 0.0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p0, + 0x1.8p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.p0, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.8cp6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.90p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.f380p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.ffffffffffff80p49, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.ffffffffffffc0p50, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.ffffffffffffe0p51, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0x1.p0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0x1.p0, + -0x1.0p-1 + }, + { // Entry 48 + -0x1.p0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p1, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 54 + -0x1.p1, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.80p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.80p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.80p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.94p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.94p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.94p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.f480p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.f480p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.f480p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.00000000000040p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.p50, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.00000000000020p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.p51, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.p52, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.fffffff8p29, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.fffffff4p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 93 + 0x1.fffffff4p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 94 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 95 + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 96 + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 97 + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 98 + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 99 + 0x1.fffffff8p30, + 0x1.fffffffa0p30 + }, + { // Entry 100 + 0x1.fffffff8p30, + 0x1.fffffffa00001p30 + }, + { // Entry 101 + 0x1.fffffff8p30, + 0x1.fffffffa00002p30 + }, + { // Entry 102 + 0x1.fffffff8p30, + 0x1.fffffffbffffep30 + }, + { // Entry 103 + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 105 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 106 + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 107 + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 108 + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 109 + 0x1.fffffffcp30, + 0x1.fffffffe0p30 + }, + { // Entry 110 + 0x1.fffffffcp30, + 0x1.fffffffe00001p30 + }, + { // Entry 111 + 0x1.fffffffcp30, + 0x1.fffffffe00002p30 + }, + { // Entry 112 + 0x1.fffffffcp30, + 0x1.ffffffffffffep30 + }, + { // Entry 113 + 0x1.fffffffcp30, + 0x1.fffffffffffffp30 + }, + { // Entry 114 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 115 + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 116 + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 117 + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 118 + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 119 + 0x1.p31, + 0x1.000000010p31 + }, + { // Entry 120 + 0x1.p31, + 0x1.0000000100001p31 + }, + { // Entry 121 + 0x1.p31, + 0x1.0000000100002p31 + }, + { // Entry 122 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 123 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 124 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 125 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 126 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 127 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 128 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 129 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 130 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 131 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 132 + -0x1.00000004p30, + -0x1.0000000000001p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 134 + -0x1.p30, + -0x1.fffffffffffffp29 + }, + { // Entry 135 + -0x1.fffffffcp30, + -0x1.fffffff800002p30 + }, + { // Entry 136 + -0x1.fffffffcp30, + -0x1.fffffff800001p30 + }, + { // Entry 137 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 138 + -0x1.fffffff8p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 139 + -0x1.fffffff8p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 140 + -0x1.fffffffcp30, + -0x1.fffffffa00002p30 + }, + { // Entry 141 + -0x1.fffffffcp30, + -0x1.fffffffa00001p30 + }, + { // Entry 142 + -0x1.fffffffcp30, + -0x1.fffffffa0p30 + }, + { // Entry 143 + -0x1.fffffffcp30, + -0x1.fffffff9fffffp30 + }, + { // Entry 144 + -0x1.fffffffcp30, + -0x1.fffffff9ffffep30 + }, + { // Entry 145 + -0x1.p31, + -0x1.fffffffc00002p30 + }, + { // Entry 146 + -0x1.p31, + -0x1.fffffffc00001p30 + }, + { // Entry 147 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 148 + -0x1.fffffffcp30, + -0x1.fffffffbfffffp30 + }, + { // Entry 149 + -0x1.fffffffcp30, + -0x1.fffffffbffffep30 + }, + { // Entry 150 + -0x1.p31, + -0x1.fffffffe00002p30 + }, + { // Entry 151 + -0x1.p31, + -0x1.fffffffe00001p30 + }, + { // Entry 152 + -0x1.p31, + -0x1.fffffffe0p30 + }, + { // Entry 153 + -0x1.p31, + -0x1.fffffffdfffffp30 + }, + { // Entry 154 + -0x1.p31, + -0x1.fffffffdffffep30 + }, + { // Entry 155 + -0x1.00000002p31, + -0x1.0000000000002p31 + }, + { // Entry 156 + -0x1.00000002p31, + -0x1.0000000000001p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 158 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 159 + -0x1.p31, + -0x1.ffffffffffffep30 + }, + { // Entry 160 + -0x1.00000002p31, + -0x1.0000000100002p31 + }, + { // Entry 161 + -0x1.00000002p31, + -0x1.0000000100001p31 + }, + { // Entry 162 + -0x1.00000002p31, + -0x1.000000010p31 + }, + { // Entry 163 + -0x1.00000002p31, + -0x1.00000000fffffp31 + }, + { // Entry 164 + -0x1.00000002p31, + -0x1.00000000ffffep31 + }, + { // Entry 165 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 166 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 167 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 176 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 177 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 178 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 179 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 180 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 181 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 182 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 183 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 184 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 185 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 186 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 187 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 188 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 189 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 190 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 191 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 193 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 194 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 195 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 196 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 198 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 199 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 200 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 201 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 203 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 204 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 205 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 209 + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 210 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 211 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 212 + -0x1.00000002p31, + -0x1.0000000000001p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 214 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 215 + 0x1.80p1, + 0x1.fffffffffffffp1 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 218 + 0x1.c0p2, + 0x1.fffffffffffffp2 + }, + { // Entry 219 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 221 + 0x1.e0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 222 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 224 + 0x1.f0p4, + 0x1.fffffffffffffp4 + }, + { // Entry 225 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 227 + 0x1.f8p5, + 0x1.fffffffffffffp5 + }, + { // Entry 228 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 230 + 0x1.fcp6, + 0x1.fffffffffffffp6 + }, + { // Entry 231 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 233 + 0x1.fep7, + 0x1.fffffffffffffp7 + }, + { // Entry 234 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 236 + 0x1.ffp8, + 0x1.fffffffffffffp8 + }, + { // Entry 237 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 239 + 0x1.ff80p9, + 0x1.fffffffffffffp9 + }, + { // Entry 240 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 242 + 0x1.ffc0p10, + 0x1.fffffffffffffp10 + }, + { // Entry 243 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 245 + 0x1.ffe0p11, + 0x1.fffffffffffffp11 + }, + { // Entry 246 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 249 + 0x1.p2, + 0x1.2p2 + }, + { // Entry 250 + 0x1.p2, + 0x1.2000000000001p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 252 + 0x1.p3, + 0x1.1p3 + }, + { // Entry 253 + 0x1.p3, + 0x1.1000000000001p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 255 + 0x1.p4, + 0x1.080p4 + }, + { // Entry 256 + 0x1.p4, + 0x1.0800000000001p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 258 + 0x1.p5, + 0x1.040p5 + }, + { // Entry 259 + 0x1.p5, + 0x1.0400000000001p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 261 + 0x1.p6, + 0x1.020p6 + }, + { // Entry 262 + 0x1.p6, + 0x1.0200000000001p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 264 + 0x1.p7, + 0x1.010p7 + }, + { // Entry 265 + 0x1.p7, + 0x1.0100000000001p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 267 + 0x1.p8, + 0x1.008p8 + }, + { // Entry 268 + 0x1.p8, + 0x1.0080000000001p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 270 + 0x1.p9, + 0x1.004p9 + }, + { // Entry 271 + 0x1.p9, + 0x1.0040000000001p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 273 + 0x1.p10, + 0x1.002p10 + }, + { // Entry 274 + 0x1.p10, + 0x1.0020000000001p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 276 + 0x1.0040p10, + 0x1.006p10 + }, + { // Entry 277 + 0x1.0040p10, + 0x1.0060000000001p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 279 + 0x1.p11, + 0x1.001p11 + }, + { // Entry 280 + 0x1.p11, + 0x1.0010000000001p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 282 + 0x1.p12, + 0x1.00080p12 + }, + { // Entry 283 + 0x1.p12, + 0x1.0008000000001p12 + }, + { // Entry 284 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 286 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 287 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 289 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 291 + -0x1.p2, + -0x1.921fb54442d18p1 + }, + { // Entry 292 + 0x1.p0, + 0x1.921fb54442d18p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb54442d18p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 295 + -0x1.p1, + -0x1.0000000000001p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 298 + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 300 + 0.0, + 0x1.921fb54442d18p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 302 + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 303 + -0x1.p0, + -0x1.0000000000001p-1022 + }, + { // Entry 304 + 0.0, + 0x1.0p-1022 + }, + { // Entry 305 + -0x1.p0, + -0x1.0p-1022 + }, + { // Entry 306 + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 307 + -0x1.p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 308 + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 309 + -0x1.p0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 310 + 0.0, + 0x1.0p-1073 + }, + { // Entry 311 + -0x1.p0, + -0x1.0p-1073 + }, + { // Entry 312 + 0.0, + 0x1.0p-1074 + }, + { // Entry 313 + -0x1.p0, + -0x1.0p-1074 + }, + { // Entry 314 + 0.0, + 0.0 + }, + { // Entry 315 + -0.0, + -0.0 + }, + { // Entry 316 + 0x1.p0, + 0x1.8p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 319 + -0x1.80p1, + -0x1.4p1 + }, + { // Entry 320 + 0.0, + 0x1.fffffp-2 + }, + { // Entry 321 + 0.0, + 0x1.0p-1 + }, + { // Entry 322 + 0.0, + 0x1.00001p-1 + }, + { // Entry 323 + -0x1.p0, + -0x1.fffffp-2 + }, + { // Entry 324 + -0x1.p0, + -0x1.0p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.00001p-1 + }, + { // Entry 326 + 0x1.p0, + 0x1.80001p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffffp0 + }, + { // Entry 328 + -0x1.p1, + -0x1.80001p0 + }, + { // Entry 329 + -0x1.p1, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/floorf_intel_data.h b/tests/math_data/floorf_intel_data.h new file mode 100644 index 000000000..3bf2c9f3f --- /dev/null +++ b/tests/math_data/floorf_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_floorf_intel_data[] = { + { // Entry 0 + -0x1.p0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0 + }, + { // Entry 2 + 0.0, + 0x1.p-149 + }, + { // Entry 3 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0.0, + 0x1.p-1 + }, + { // Entry 5 + 0.0, + 0x1.000002p-1 + }, + { // Entry 6 + 0.0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p0, + 0x1.80p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.p0, + 0x1.fffffep0 + }, + { // Entry 13 + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.8cp6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.90p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.f380p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.fffff0p20, + 0x1.fffffep20 + }, + { // Entry 31 + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.fffff8p21, + 0x1.fffffep21 + }, + { // Entry 34 + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.fffffcp22, + 0x1.fffffep22 + }, + { // Entry 37 + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0x1.p0, + -0x1.000002p-1 + }, + { // Entry 47 + -0x1.p0, + -0x1.p-1 + }, + { // Entry 48 + -0x1.p0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p1, + -0x1.000002p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 54 + -0x1.p1, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.80p1, + -0x1.000002p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.80p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.80p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.94p6, + -0x1.900002p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.94p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.94p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.f480p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.f480p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.f480p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.000008p21, + -0x1.000002p21 + }, + { // Entry 74 + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.p21, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.000004p22, + -0x1.000002p22 + }, + { // Entry 77 + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.p22, + -0x1.fffffep21 + }, + { // Entry 79 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.p23, + -0x1.fffffep22 + }, + { // Entry 82 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 93 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 94 + 0x1.p31, + 0x1.p31 + }, + { // Entry 95 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 96 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.p31, + 0x1.p31 + }, + { // Entry 123 + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.p31, + 0x1.p31 + }, + { // Entry 126 + 0x1.p31, + 0x1.p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.p30 + }, + { // Entry 134 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 135 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 136 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 137 + -0x1.p31, + -0x1.p31 + }, + { // Entry 138 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 139 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.p31, + -0x1.p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.p31, + -0x1.p31 + }, + { // Entry 169 + -0x1.p31, + -0x1.p31 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 176 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 177 + 0x1.p62, + 0x1.p62 + }, + { // Entry 178 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 179 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 180 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 181 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 182 + 0x1.p63, + 0x1.p63 + }, + { // Entry 183 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 184 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 185 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 186 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 187 + 0x1.p64, + 0x1.p64 + }, + { // Entry 188 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 189 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 190 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 191 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.p62 + }, + { // Entry 193 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 194 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 195 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 196 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.p63 + }, + { // Entry 198 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 199 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 200 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 201 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.p64 + }, + { // Entry 203 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 204 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 205 + 0x1.p62, + 0x1.p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.p63 + }, + { // Entry 209 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 210 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 211 + 0x1.p31, + 0x1.p31 + }, + { // Entry 212 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.p31 + }, + { // Entry 214 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 215 + 0x1.80p1, + 0x1.fffffep1 + }, + { // Entry 216 + 0x1.p2, + 0x1.p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 218 + 0x1.c0p2, + 0x1.fffffep2 + }, + { // Entry 219 + 0x1.p3, + 0x1.p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 221 + 0x1.e0p3, + 0x1.fffffep3 + }, + { // Entry 222 + 0x1.p4, + 0x1.p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 224 + 0x1.f0p4, + 0x1.fffffep4 + }, + { // Entry 225 + 0x1.p5, + 0x1.p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 227 + 0x1.f8p5, + 0x1.fffffep5 + }, + { // Entry 228 + 0x1.p6, + 0x1.p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 230 + 0x1.fcp6, + 0x1.fffffep6 + }, + { // Entry 231 + 0x1.p7, + 0x1.p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 233 + 0x1.fep7, + 0x1.fffffep7 + }, + { // Entry 234 + 0x1.p8, + 0x1.p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 236 + 0x1.ffp8, + 0x1.fffffep8 + }, + { // Entry 237 + 0x1.p9, + 0x1.p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 239 + 0x1.ff80p9, + 0x1.fffffep9 + }, + { // Entry 240 + 0x1.p10, + 0x1.p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 242 + 0x1.ffc0p10, + 0x1.fffffep10 + }, + { // Entry 243 + 0x1.p11, + 0x1.p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 245 + 0x1.ffe0p11, + 0x1.fffffep11 + }, + { // Entry 246 + 0x1.p12, + 0x1.p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 249 + 0x1.p2, + 0x1.20p2 + }, + { // Entry 250 + 0x1.p2, + 0x1.200002p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 252 + 0x1.p3, + 0x1.10p3 + }, + { // Entry 253 + 0x1.p3, + 0x1.100002p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 255 + 0x1.p4, + 0x1.08p4 + }, + { // Entry 256 + 0x1.p4, + 0x1.080002p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 258 + 0x1.p5, + 0x1.04p5 + }, + { // Entry 259 + 0x1.p5, + 0x1.040002p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 261 + 0x1.p6, + 0x1.02p6 + }, + { // Entry 262 + 0x1.p6, + 0x1.020002p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 264 + 0x1.p7, + 0x1.01p7 + }, + { // Entry 265 + 0x1.p7, + 0x1.010002p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 267 + 0x1.p8, + 0x1.0080p8 + }, + { // Entry 268 + 0x1.p8, + 0x1.008002p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 270 + 0x1.p9, + 0x1.0040p9 + }, + { // Entry 271 + 0x1.p9, + 0x1.004002p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 273 + 0x1.p10, + 0x1.0020p10 + }, + { // Entry 274 + 0x1.p10, + 0x1.002002p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 276 + 0x1.0040p10, + 0x1.0060p10 + }, + { // Entry 277 + 0x1.0040p10, + 0x1.006002p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 279 + 0x1.p11, + 0x1.0010p11 + }, + { // Entry 280 + 0x1.p11, + 0x1.001002p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 282 + 0x1.p12, + 0x1.0008p12 + }, + { // Entry 283 + 0x1.p12, + 0x1.000802p12 + }, + { // Entry 284 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 286 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 287 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 288 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 289 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 291 + -0x1.p2, + -0x1.921fb6p1 + }, + { // Entry 292 + 0x1.p0, + 0x1.921fb6p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb6p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 295 + -0x1.p1, + -0x1.000002p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.p0 + }, + { // Entry 298 + 0.0, + 0x1.fffffep-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 300 + 0.0, + 0x1.921fb6p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 302 + 0.0, + 0x1.000002p-126 + }, + { // Entry 303 + -0x1.p0, + -0x1.000002p-126 + }, + { // Entry 304 + 0.0, + 0x1.p-126 + }, + { // Entry 305 + -0x1.p0, + -0x1.p-126 + }, + { // Entry 306 + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 307 + -0x1.p0, + -0x1.fffffcp-127 + }, + { // Entry 308 + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 309 + -0x1.p0, + -0x1.fffff8p-127 + }, + { // Entry 310 + 0.0, + 0x1.p-148 + }, + { // Entry 311 + -0x1.p0, + -0x1.p-148 + }, + { // Entry 312 + 0.0, + 0x1.p-149 + }, + { // Entry 313 + -0x1.p0, + -0x1.p-149 + }, + { // Entry 314 + 0.0, + 0.0f + }, + { // Entry 315 + -0.0, + -0.0f + }, + { // Entry 316 + 0x1.p0, + 0x1.80p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 319 + -0x1.80p1, + -0x1.40p1 + }, + { // Entry 320 + 0.0, + 0x1.fffff0p-2 + }, + { // Entry 321 + 0.0, + 0x1.p-1 + }, + { // Entry 322 + 0.0, + 0x1.000010p-1 + }, + { // Entry 323 + -0x1.p0, + -0x1.fffff0p-2 + }, + { // Entry 324 + -0x1.p0, + -0x1.p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.000010p-1 + }, + { // Entry 326 + 0x1.p0, + 0x1.800010p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffff0p0 + }, + { // Entry 328 + -0x1.p1, + -0x1.800010p0 + }, + { // Entry 329 + -0x1.p1, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data/fma_intel_data.h b/tests/math_data/fma_intel_data.h new file mode 100644 index 000000000..6f05997cd --- /dev/null +++ b/tests/math_data/fma_intel_data.h @@ -0,0 +1,13830 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_3_t g_fma_intel_data[] = { + { // Entry 0 + -0x1.e6666666666660p0, + 0x1.0p-1074, + -0x1.ccccccccccccdp-1, + -0x1.e666666666666p0 + }, + { // Entry 1 + 0x1.15f15f15f15edfffffffffffffffffffp-2, + 0x1.0p-1074, + -0x1.ccccccccccccdp-1, + 0x1.15f15f15f15eep-2 + }, + { // Entry 2 + 0x1.0000000000002fffffffffffffffffffp-41, + 0x1.0p-1074, + -0x1.e666666666666p-1, + 0x1.0000000000003p-41 + }, + { // Entry 3 + -0x1.e666666666665fffffffffffffffffffp0, + 0x1.0p-1074, + 0x1.0750750750756p-3, + -0x1.e666666666666p0 + }, + { // Entry 4 + 0x1.00000000000030p-41, + 0x1.0p-1074, + 0x1.4444444444430p-4, + 0x1.0000000000003p-41 + }, + { // Entry 5 + -0x1.f4ccccccccccc766666666666668p0, + 0x1.0000000000001p-4, + -0x1.ccccccccccccdp-1, + -0x1.e666666666666p0 + }, + { // Entry 6 + 0x1.1be9c07bef3aa00000000ca3acc0p0, + 0x1.333334be90b7dp-1, + 0x1.62e42fefa39efp-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 7 + 0x1.2da85c2c93416ffffffffd1b42c0p0, + 0x1.6666670f24aa5p-1, + 0x1.62e42fefa39efp-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 8 + 0x1.6ce999999999c802333333333480p16, + 0x1.8000000000001p4, + 0x1.e666666666669p11, + 0x1.ccccccccccccfp4 + }, + { // Entry 9 + 0x1.62b83c4461cc280000000001bc40p0, + 0x1.ff812e8bc2d1fp-1, + 0x1.62e42fefa39efp-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 10 + 0x1.0942b0df6a30e7ff3586fb5fb5p39, + 0x1.ffe7fffffffffp40, + 0x1.094f2094f2096p-2, + -0x1.ba2e8ba2e8ba2p-2 + }, + { // Entry 11 + 0x1.06fb586fb586f8p-51, + 0x1.ffffffffffffcp-1, + -0x1.8df6b0df6b0dfp-1, + 0x1.8df6b0df6b0e0p-1 + }, + { // Entry 12 + 0x1.ffffffffffff70000000000004p-1, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 13 + 0x1.ffffffffffff80000000000004p-1, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 14 + 0x1.ffffffffffffa0000000000004p-1, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 15 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 16 + 0x1.p0, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.0p0 + }, + { // Entry 17 + 0x1.00000000000010p0, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.0000000000001p0 + }, + { // Entry 18 + 0x1.00000000000037fffffffffffep0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 19 + 0x1.0000000000003ffffffffffffep0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 20 + 0x1.0000000000004ffffffffffffep0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 21 + 0x1.ffffffffffff70000000000008p-2, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 22 + 0x1.ffffffffffff80000000000008p-2, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 23 + 0x1.ffffffffffffa0000000000008p-2, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 24 + 0x1.fffffffffffff0p-2, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 25 + 0x1.p-1, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.0p-1 + }, + { // Entry 26 + 0x1.00000000000010p-1, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.0000000000001p-1 + }, + { // Entry 27 + 0x1.00000000000037fffffffffffcp-1, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 28 + 0x1.0000000000003ffffffffffffcp-1, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 29 + 0x1.0000000000004ffffffffffffcp-1, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 30 + 0x1.ffffffffffff70000000000004p-2, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 31 + 0x1.ffffffffffff80000000000004p-2, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 32 + 0x1.ffffffffffffa0000000000004p-2, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 33 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 34 + 0x1.p-1, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.0p-1 + }, + { // Entry 35 + 0x1.00000000000010p-1, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.0000000000001p-1 + }, + { // Entry 36 + 0x1.00000000000037fffffffffffep-1, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 37 + 0x1.0000000000003ffffffffffffep-1, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 38 + 0x1.0000000000004ffffffffffffep-1, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 39 + 0x1.ffffffffffff70p-2, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 40 + 0x1.ffffffffffff80p-2, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 41 + 0x1.ffffffffffffa0p-2, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 42 + 0x1.fffffffffffff0p-2, + 0x1.0p1023, + -0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 43 + 0x1.p-1, + 0x1.0p1023, + -0.0, + 0x1.0p-1 + }, + { // Entry 44 + 0x1.00000000000010p-1, + 0x1.0p1023, + -0.0, + 0x1.0000000000001p-1 + }, + { // Entry 45 + 0x1.00000000000038p-1, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.fffffffffffffp-2 + }, + { // Entry 46 + 0x1.00000000000040p-1, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.0p-1 + }, + { // Entry 47 + 0x1.00000000000050p-1, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.0000000000001p-1 + }, + { // Entry 48 + 0x1.ffffffffffffb0000000000004p-1, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 49 + 0x1.ffffffffffffc0000000000004p-1, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 50 + 0x1.ffffffffffffe0000000000004p-1, + 0x1.ffffffffffffep1022, + -0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 51 + 0x1.fffffffffffff0p-1, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 52 + 0x1.p0, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.0p0 + }, + { // Entry 53 + 0x1.00000000000010p0, + 0x1.ffffffffffffep1022, + -0.0, + 0x1.0000000000001p0 + }, + { // Entry 54 + 0x1.00000000000017fffffffffffep0, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 55 + 0x1.0000000000001ffffffffffffep0, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 56 + 0x1.0000000000002ffffffffffffep0, + 0x1.ffffffffffffep1022, + 0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 57 + 0x1.ffffffffffffb0000000000002p-1, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 58 + 0x1.ffffffffffffc0000000000002p-1, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 59 + 0x1.ffffffffffffe0000000000002p-1, + 0x1.fffffffffffffp1022, + -0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 60 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 61 + 0x1.p0, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.0p0 + }, + { // Entry 62 + 0x1.00000000000010p0, + 0x1.fffffffffffffp1022, + -0.0, + 0x1.0000000000001p0 + }, + { // Entry 63 + 0x1.00000000000017ffffffffffffp0, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 64 + 0x1.0000000000001fffffffffffffp0, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 65 + 0x1.0000000000002fffffffffffffp0, + 0x1.fffffffffffffp1022, + 0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 66 + 0x1.ffffffffffffb0p-1, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 67 + 0x1.ffffffffffffc0p-1, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 68 + 0x1.ffffffffffffe0p-1, + 0x1.0p1023, + -0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 69 + 0x1.fffffffffffff0p-1, + 0x1.0p1023, + -0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 70 + 0x1.p0, + 0x1.0p1023, + -0.0, + 0x1.0p0 + }, + { // Entry 71 + 0x1.00000000000010p0, + 0x1.0p1023, + -0.0, + 0x1.0000000000001p0 + }, + { // Entry 72 + 0x1.00000000000018p0, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.fffffffffffffp-1 + }, + { // Entry 73 + 0x1.00000000000020p0, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 74 + 0x1.00000000000030p0, + 0x1.0p1023, + 0x1.0p-1074, + 0x1.0000000000001p0 + }, + { // Entry 75 + 0x1.ffffffffffffe00000000000007fffffp-2, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 76 + 0x1.ffffffffffffe000000000000080p-2, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 77 + 0x1.ffffffffffffe000000000000080p-2, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 78 + 0x1.ffffffffffffefffffffffffffffffffp-2, + 0x1.fffffffffffffp-2, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 79 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.0p0, + -0.0 + }, + { // Entry 80 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 81 + 0x1.00000000000007ffffffffffff7fffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 82 + 0x1.00000000000007ffffffffffff80p-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 83 + 0x1.00000000000007ffffffffffff80p-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 84 + 0x1.ffffffffffffefffffffffffffffffffp-2, + 0x1.0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 85 + 0x1.fffffffffffff0p-2, + 0x1.0p-1, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 86 + 0x1.fffffffffffff0p-2, + 0x1.0p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 87 + 0x1.ffffffffffffffffffffffffffffffffp-2, + 0x1.0p-1, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 88 + 0x1.p-1, + 0x1.0p-1, + 0x1.0p0, + -0.0 + }, + { // Entry 89 + 0x1.p-1, + 0x1.0p-1, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 90 + 0x1.0000000000000fffffffffffffffffffp-1, + 0x1.0p-1, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 91 + 0x1.00000000000010p-1, + 0x1.0p-1, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 92 + 0x1.00000000000010p-1, + 0x1.0p-1, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 93 + 0x1.00000000000007ffffffffffff7fffffp-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 94 + 0x1.00000000000007ffffffffffff80p-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 95 + 0x1.00000000000007ffffffffffff80p-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 96 + 0x1.0000000000000fffffffffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 97 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.0p0, + -0.0 + }, + { // Entry 98 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 99 + 0x1.00000000000020000000000000ffffffp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 100 + 0x1.00000000000020000000000001p-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 101 + 0x1.00000000000020000000000001p-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 102 + 0x1.0000000000000fffffffffffff40p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 103 + 0x1.0000000000001000000000000040p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 104 + 0x1.0000000000001000000000000240p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 105 + 0x1.00000000000017ffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 106 + 0x1.00000000000018p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 107 + 0x1.00000000000018000000000002p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 108 + 0x1.00000000000027fffffffffffe80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 109 + 0x1.00000000000027ffffffffffff80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 110 + 0x1.0000000000002800000000000180p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 111 + 0x1.00000000000017ffffffffffffp-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 112 + 0x1.00000000000018p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 113 + 0x1.00000000000018000000000002p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 114 + 0x1.0000000000001fffffffffffffp-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 115 + 0x1.00000000000020p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 116 + 0x1.00000000000020000000000002p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 117 + 0x1.0000000000002fffffffffffffp-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 118 + 0x1.00000000000030p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 119 + 0x1.00000000000030000000000002p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 120 + 0x1.00000000000027fffffffffffe80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 121 + 0x1.00000000000027ffffffffffff80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 122 + 0x1.0000000000002800000000000180p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 123 + 0x1.0000000000002fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 124 + 0x1.00000000000030p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 125 + 0x1.00000000000030000000000002p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 126 + 0x1.00000000000040p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 127 + 0x1.00000000000040000000000001p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 128 + 0x1.00000000000040000000000003p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 129 + 0x1.0000000000000fffffffffffff40p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 130 + 0x1.0000000000001000000000000040p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 131 + 0x1.0000000000001000000000000240p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 132 + 0x1.00000000000017ffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 133 + 0x1.00000000000018p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 134 + 0x1.00000000000018000000000002p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 135 + 0x1.00000000000027fffffffffffe80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 136 + 0x1.00000000000027ffffffffffff80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 137 + 0x1.0000000000002800000000000180p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 138 + 0x1.00000000000017ffffffffffffp-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 139 + 0x1.00000000000018p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 140 + 0x1.00000000000018000000000002p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 141 + 0x1.0000000000001fffffffffffffp-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 142 + 0x1.00000000000020p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 143 + 0x1.00000000000020000000000002p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 144 + 0x1.0000000000002fffffffffffffp-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 145 + 0x1.00000000000030p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 146 + 0x1.00000000000030000000000002p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 147 + 0x1.00000000000027fffffffffffe80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-53 + }, + { // Entry 148 + 0x1.00000000000027ffffffffffff80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0p-52 + }, + { // Entry 149 + 0x1.0000000000002800000000000180p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-52 + }, + { // Entry 150 + 0x1.0000000000002fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 151 + 0x1.00000000000030p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0p-52 + }, + { // Entry 152 + 0x1.00000000000030000000000002p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0000000000001p-52 + }, + { // Entry 153 + 0x1.00000000000040p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-53 + }, + { // Entry 154 + 0x1.00000000000040000000000001p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0p-52 + }, + { // Entry 155 + 0x1.00000000000040000000000003p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-52 + }, + { // Entry 156 + 0x1.0000000000006ffffffffffffc40p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-51 + }, + { // Entry 157 + 0x1.0000000000007000000000000040p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0p-50 + }, + { // Entry 158 + 0x1.0000000000007000000000000840p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-50 + }, + { // Entry 159 + 0x1.00000000000077fffffffffffcp-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 160 + 0x1.00000000000078p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0p-50 + }, + { // Entry 161 + 0x1.00000000000078000000000008p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0000000000001p-50 + }, + { // Entry 162 + 0x1.00000000000087fffffffffffb80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 163 + 0x1.00000000000087ffffffffffff80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0p-50 + }, + { // Entry 164 + 0x1.0000000000008800000000000780p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-50 + }, + { // Entry 165 + 0x1.00000000000077fffffffffffcp-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-51 + }, + { // Entry 166 + 0x1.00000000000078p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0p-50 + }, + { // Entry 167 + 0x1.00000000000078000000000008p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-50 + }, + { // Entry 168 + 0x1.0000000000007ffffffffffffcp-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 169 + 0x1.00000000000080p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0p-50 + }, + { // Entry 170 + 0x1.00000000000080000000000008p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0000000000001p-50 + }, + { // Entry 171 + 0x1.0000000000008ffffffffffffcp-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 172 + 0x1.00000000000090p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0p-50 + }, + { // Entry 173 + 0x1.00000000000090000000000008p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-50 + }, + { // Entry 174 + 0x1.00000000000087fffffffffffb80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-51 + }, + { // Entry 175 + 0x1.00000000000087ffffffffffff80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0p-50 + }, + { // Entry 176 + 0x1.0000000000008800000000000780p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-50 + }, + { // Entry 177 + 0x1.0000000000008ffffffffffffcp-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 178 + 0x1.00000000000090p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0p-50 + }, + { // Entry 179 + 0x1.00000000000090000000000008p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0000000000001p-50 + }, + { // Entry 180 + 0x1.0000000000009ffffffffffffdp-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-51 + }, + { // Entry 181 + 0x1.000000000000a0000000000001p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0p-50 + }, + { // Entry 182 + 0x1.000000000000a0000000000009p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-50 + }, + { // Entry 183 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-55 + }, + { // Entry 184 + 0x1.fffffffffffff000000000000080p-2, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0p-54 + }, + { // Entry 185 + 0x1.fffffffffffff000000000000180p-2, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-54 + }, + { // Entry 186 + 0x1.ffffffffffffffffffffffffff80p-2, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 187 + 0x1.p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0p-54 + }, + { // Entry 188 + 0x1.0000000000000000000000000080p-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1, + 0x1.0000000000001p-54 + }, + { // Entry 189 + 0x1.0000000000000fffffffffffff40p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 190 + 0x1.0000000000000fffffffffffff80p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0p-54 + }, + { // Entry 191 + 0x1.00000000000010p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-54 + }, + { // Entry 192 + 0x1.ffffffffffffffffffffffffff80p-2, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-55 + }, + { // Entry 193 + 0x1.p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0p-54 + }, + { // Entry 194 + 0x1.0000000000000000000000000080p-1, + 0x1.0p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-54 + }, + { // Entry 195 + 0x1.00000000000007ffffffffffffc0p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 196 + 0x1.00000000000008p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0p-54 + }, + { // Entry 197 + 0x1.0000000000000800000000000080p-1, + 0x1.0p0, + 0x1.0p-1, + 0x1.0000000000001p-54 + }, + { // Entry 198 + 0x1.00000000000017ffffffffffffc0p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 199 + 0x1.00000000000018p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0p-54 + }, + { // Entry 200 + 0x1.0000000000001800000000000080p-1, + 0x1.0p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-54 + }, + { // Entry 201 + 0x1.0000000000000fffffffffffff40p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-55 + }, + { // Entry 202 + 0x1.0000000000000fffffffffffff80p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0p-54 + }, + { // Entry 203 + 0x1.00000000000010p-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-54 + }, + { // Entry 204 + 0x1.00000000000017ffffffffffffc0p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 205 + 0x1.00000000000018p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0p-54 + }, + { // Entry 206 + 0x1.0000000000001800000000000080p-1, + 0x1.0000000000001p0, + 0x1.0p-1, + 0x1.0000000000001p-54 + }, + { // Entry 207 + 0x1.00000000000028000000000000c0p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-55 + }, + { // Entry 208 + 0x1.00000000000028000000000001p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0p-54 + }, + { // Entry 209 + 0x1.0000000000002800000000000180p-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-1, + 0x1.0000000000001p-54 + }, + { // Entry 210 + 0x1.ffffffffffffe00000000000007fffffp1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 211 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 212 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 213 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 214 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p0, + -0.0 + }, + { // Entry 215 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 216 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 217 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 218 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 219 + -0x1.fffffffffffff0p970, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 220 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 221 + 0x1.fffffffffffff0p971, + 0x1.fffffffffffffp1023, + 0x1.0000000000001p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 222 + 0x1.ffffffffffffd0000000000000ffffffp1023, + 0x1.fffffffffffffp511, + 0x1.ffffffffffffep511, + -0x1.0p-1074 + }, + { // Entry 223 + 0x1.ffffffffffffd0000000000001p1023, + 0x1.fffffffffffffp511, + 0x1.ffffffffffffep511, + -0.0 + }, + { // Entry 224 + 0x1.ffffffffffffd0000000000001p1023, + 0x1.fffffffffffffp511, + 0x1.ffffffffffffep511, + 0x1.0p-1074 + }, + { // Entry 225 + 0x1.ffffffffffffe00000000000007fffffp1023, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511, + -0x1.0p-1074 + }, + { // Entry 226 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511, + -0.0 + }, + { // Entry 227 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511, + 0x1.0p-1074 + }, + { // Entry 228 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp511, + 0x1.0p512, + -0x1.0p-1074 + }, + { // Entry 229 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp511, + 0x1.0p512, + -0.0 + }, + { // Entry 230 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp511, + 0x1.0p512, + 0x1.0p-1074 + }, + { // Entry 231 + -0x1.7ffffffffffff0p972, + 0x1.ffffffffffffep511, + 0x1.ffffffffffffep511, + -0x1.fffffffffffffp1023 + }, + { // Entry 232 + -0x1.fffffffffffff0p971, + 0x1.ffffffffffffep511, + 0x1.fffffffffffffp511, + -0x1.fffffffffffffp1023 + }, + { // Entry 233 + -0x1.p971, + 0x1.ffffffffffffep511, + 0x1.0p512, + -0x1.fffffffffffffp1023 + }, + { // Entry 234 + -0x1.fffffffffffff0p971, + 0x1.fffffffffffffp511, + 0x1.ffffffffffffep511, + -0x1.fffffffffffffp1023 + }, + { // Entry 235 + -0x1.fffffffffffff0p970, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511, + -0x1.fffffffffffffp1023 + }, + { // Entry 236 + 0.0, + 0x1.fffffffffffffp511, + 0x1.0p512, + -0x1.fffffffffffffp1023 + }, + { // Entry 237 + -0x1.p971, + 0x1.0p512, + 0x1.ffffffffffffep511, + -0x1.fffffffffffffp1023 + }, + { // Entry 238 + 0.0, + 0x1.0p512, + 0x1.fffffffffffffp511, + -0x1.fffffffffffffp1023 + }, + { // Entry 239 + 0x1.p971, + 0x1.0p512, + 0x1.0p512, + -0x1.fffffffffffffp1023 + }, + { // Entry 240 + -0x1.ffffffffffffc0p970, + 0x1.ffffffffffffep1022, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 241 + 0x1.p971, + 0x1.ffffffffffffep1022, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 242 + 0x1.fffffffffffff0p971, + 0x1.ffffffffffffep1022, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 243 + -0x1.fffffffffffff0p971, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 244 + 0.0, + 0x1.fffffffffffffp1022, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 245 + 0x1.fffffffffffff0p970, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 246 + -0x1.80p972, + 0x1.0p1023, + -0x1.0000000000001p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 247 + -0x1.p971, + 0x1.0p1023, + -0x1.0p1, + 0x1.fffffffffffffp1023 + }, + { // Entry 248 + 0.0, + 0x1.0p1023, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp1023 + }, + { // Entry 249 + -HUGE_VAL, + 0x1.ffffffffffffep1022, + -0x1.0000000000001p1, + -0x1.0p-1074 + }, + { // Entry 250 + -HUGE_VAL, + 0x1.ffffffffffffep1022, + -0x1.0000000000001p1, + -0.0 + }, + { // Entry 251 + -HUGE_VAL, + 0x1.ffffffffffffep1022, + -0x1.0000000000001p1, + 0x1.0p-1074 + }, + { // Entry 252 + -0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1022, + -0x1.0p1, + -0x1.0p-1074 + }, + { // Entry 253 + -0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1022, + -0x1.0p1, + -0.0 + }, + { // Entry 254 + -0x1.ffffffffffffdfffffffffffffffffffp1023, + 0x1.ffffffffffffep1022, + -0x1.0p1, + 0x1.0p-1074 + }, + { // Entry 255 + -0x1.ffffffffffffd0000000000001p1023, + 0x1.ffffffffffffep1022, + -0x1.fffffffffffffp0, + -0x1.0p-1074 + }, + { // Entry 256 + -0x1.ffffffffffffd0000000000001p1023, + 0x1.ffffffffffffep1022, + -0x1.fffffffffffffp0, + -0.0 + }, + { // Entry 257 + -0x1.ffffffffffffd0000000000000ffffffp1023, + 0x1.ffffffffffffep1022, + -0x1.fffffffffffffp0, + 0x1.0p-1074 + }, + { // Entry 258 + -HUGE_VAL, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p1, + -0x1.0p-1074 + }, + { // Entry 259 + -HUGE_VAL, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p1, + -0.0 + }, + { // Entry 260 + -HUGE_VAL, + 0x1.fffffffffffffp1022, + -0x1.0000000000001p1, + 0x1.0p-1074 + }, + { // Entry 261 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1022, + -0x1.0p1, + -0x1.0p-1074 + }, + { // Entry 262 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1022, + -0x1.0p1, + -0.0 + }, + { // Entry 263 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1022, + -0x1.0p1, + 0x1.0p-1074 + }, + { // Entry 264 + -0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp0, + -0x1.0p-1074 + }, + { // Entry 265 + -0x1.ffffffffffffe000000000000080p1023, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp0, + -0.0 + }, + { // Entry 266 + -0x1.ffffffffffffe00000000000007fffffp1023, + 0x1.fffffffffffffp1022, + -0x1.fffffffffffffp0, + 0x1.0p-1074 + }, + { // Entry 267 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0000000000001p1, + -0x1.0p-1074 + }, + { // Entry 268 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0000000000001p1, + -0.0 + }, + { // Entry 269 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0000000000001p1, + 0x1.0p-1074 + }, + { // Entry 270 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0p1, + -0x1.0p-1074 + }, + { // Entry 271 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0p1, + -0.0 + }, + { // Entry 272 + -HUGE_VAL, + 0x1.0p1023, + -0x1.0p1, + 0x1.0p-1074 + }, + { // Entry 273 + -0x1.fffffffffffff0p1023, + 0x1.0p1023, + -0x1.fffffffffffffp0, + -0x1.0p-1074 + }, + { // Entry 274 + -0x1.fffffffffffff0p1023, + 0x1.0p1023, + -0x1.fffffffffffffp0, + -0.0 + }, + { // Entry 275 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p1023, + -0x1.fffffffffffffp0, + 0x1.0p-1074 + }, + { // Entry 276 + 0x1.7fffffffffffe400000000000040p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-2, + 0x1.ffffffffffffep1022 + }, + { // Entry 277 + 0x1.7fffffffffffec00000000000040p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp1022 + }, + { // Entry 278 + 0x1.7ffffffffffff400000000000040p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-2, + 0x1.0p1023 + }, + { // Entry 279 + 0x1.7fffffffffffe8p1023, + 0x1.ffffffffffffep1022, + 0x1.0p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 280 + 0x1.7ffffffffffff0p1023, + 0x1.ffffffffffffep1022, + 0x1.0p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 281 + 0x1.7ffffffffffff8p1023, + 0x1.ffffffffffffep1022, + 0x1.0p-1, + 0x1.0p1023 + }, + { // Entry 282 + 0x1.7fffffffffffefffffffffffff80p1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 283 + 0x1.7ffffffffffff7ffffffffffff80p1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 284 + 0x1.7fffffffffffffffffffffffff80p1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p-1, + 0x1.0p1023 + }, + { // Entry 285 + 0x1.7fffffffffffe800000000000020p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-2, + 0x1.ffffffffffffep1022 + }, + { // Entry 286 + 0x1.7ffffffffffff000000000000020p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp1022 + }, + { // Entry 287 + 0x1.7ffffffffffff800000000000020p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-2, + 0x1.0p1023 + }, + { // Entry 288 + 0x1.7fffffffffffecp1023, + 0x1.fffffffffffffp1022, + 0x1.0p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 289 + 0x1.7ffffffffffff4p1023, + 0x1.fffffffffffffp1022, + 0x1.0p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 290 + 0x1.7ffffffffffffcp1023, + 0x1.fffffffffffffp1022, + 0x1.0p-1, + 0x1.0p1023 + }, + { // Entry 291 + 0x1.7ffffffffffff3ffffffffffffc0p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 292 + 0x1.7ffffffffffffbffffffffffffc0p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 293 + 0x1.80000000000003ffffffffffffc0p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p-1, + 0x1.0p1023 + }, + { // Entry 294 + 0x1.7fffffffffffecp1023, + 0x1.0p1023, + 0x1.fffffffffffffp-2, + 0x1.ffffffffffffep1022 + }, + { // Entry 295 + 0x1.7ffffffffffff4p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp1022 + }, + { // Entry 296 + 0x1.7ffffffffffffcp1023, + 0x1.0p1023, + 0x1.fffffffffffffp-2, + 0x1.0p1023 + }, + { // Entry 297 + 0x1.7ffffffffffff0p1023, + 0x1.0p1023, + 0x1.0p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 298 + 0x1.7ffffffffffff8p1023, + 0x1.0p1023, + 0x1.0p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 299 + 0x1.80p1023, + 0x1.0p1023, + 0x1.0p-1, + 0x1.0p1023 + }, + { // Entry 300 + 0x1.7ffffffffffff8p1023, + 0x1.0p1023, + 0x1.0000000000001p-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 301 + 0x1.80p1023, + 0x1.0p1023, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 302 + 0x1.80000000000008p1023, + 0x1.0p1023, + 0x1.0000000000001p-1, + 0x1.0p1023 + }, + { // Entry 303 + 0x1.ffffffffffffd800000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 304 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 305 + 0x1.ffffffffffffe800000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 306 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 307 + 0x1.ffffffffffffe8p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 308 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 309 + 0x1.ffffffffffffefffffffffffffp1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 310 + 0x1.fffffffffffff7ffffffffffffp1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 311 + HUGE_VAL, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 312 + 0x1.ffffffffffffe000000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 313 + 0x1.ffffffffffffe800000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 314 + 0x1.fffffffffffff000000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 315 + 0x1.ffffffffffffe8p1023, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 316 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 317 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 318 + 0x1.fffffffffffff7ffffffffffff80p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 319 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 320 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 321 + 0x1.ffffffffffffe8p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 322 + 0x1.fffffffffffff0p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 323 + HUGE_VAL, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 324 + 0x1.fffffffffffff0p1023, + 0x1.0p1023, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 325 + HUGE_VAL, + 0x1.0p1023, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 326 + HUGE_VAL, + 0x1.0p1023, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 327 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 328 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 329 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 330 + 0x1.ffffffffffffd800000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 331 + 0x1.ffffffffffffe000000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 332 + 0x1.ffffffffffffe800000000000080p1023, + 0x1.ffffffffffffep1022, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 333 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 334 + 0x1.ffffffffffffe8p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 335 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep1022, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 336 + 0x1.ffffffffffffefffffffffffffp1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 337 + 0x1.fffffffffffff7ffffffffffffp1023, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 338 + HUGE_VAL, + 0x1.ffffffffffffep1022, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 339 + 0x1.ffffffffffffe000000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 340 + 0x1.ffffffffffffe800000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 341 + 0x1.fffffffffffff000000000000040p1023, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 342 + 0x1.ffffffffffffe8p1023, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 343 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 344 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 345 + 0x1.fffffffffffff7ffffffffffff80p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 346 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 347 + HUGE_VAL, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 348 + 0x1.ffffffffffffe8p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.ffffffffffffep1022 + }, + { // Entry 349 + 0x1.fffffffffffff0p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp1022 + }, + { // Entry 350 + HUGE_VAL, + 0x1.0p1023, + 0x1.fffffffffffffp-1, + 0x1.0p1023 + }, + { // Entry 351 + 0x1.fffffffffffff0p1023, + 0x1.0p1023, + 0x1.0p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 352 + HUGE_VAL, + 0x1.0p1023, + 0x1.0p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 353 + HUGE_VAL, + 0x1.0p1023, + 0x1.0p0, + 0x1.0p1023 + }, + { // Entry 354 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.ffffffffffffep1022 + }, + { // Entry 355 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.fffffffffffffp1022 + }, + { // Entry 356 + HUGE_VAL, + 0x1.0p1023, + 0x1.0000000000001p0, + 0x1.0p1023 + }, + { // Entry 357 + 0x1.ffffffffffffe800000000000040p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 358 + 0x1.fffffffffffff000000000000040p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 359 + 0x1.0000000000000000000000000020p1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 360 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 361 + 0x1.fffffffffffff8p0, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 362 + 0x1.00000000000004p1, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 363 + 0x1.ffffffffffffffffffffffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 364 + 0x1.00000000000003ffffffffffffc0p1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 365 + 0x1.0000000000000bffffffffffffc0p1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 366 + 0x1.fffffffffffff0p0, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 367 + 0x1.fffffffffffff8p0, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 368 + 0x1.00000000000004p1, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 369 + 0x1.fffffffffffff8p0, + 0x1.0p0, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 370 + 0x1.p1, + 0x1.0p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 371 + 0x1.00000000000008p1, + 0x1.0p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 372 + 0x1.00000000000004p1, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 373 + 0x1.00000000000008p1, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 374 + 0x1.00000000000010p1, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 375 + 0x1.ffffffffffffffffffffffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 376 + 0x1.00000000000003ffffffffffffc0p1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 377 + 0x1.0000000000000bffffffffffffc0p1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 378 + 0x1.00000000000004p1, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 379 + 0x1.00000000000008p1, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 380 + 0x1.00000000000010p1, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 381 + 0x1.0000000000000c00000000000080p1, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 382 + 0x1.0000000000001000000000000080p1, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 383 + 0x1.0000000000001800000000000080p1, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 384 + -0x1.fffffffffffff0p-53, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 385 + -0x1.ffffffffffffe0p-54, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 386 + 0x1.00000000000010p-53, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 387 + 0.0, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 388 + 0x1.p-53, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 389 + 0x1.80p-52, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 390 + 0x1.fffffffffffff0p-54, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 391 + 0x1.fffffffffffff8p-53, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 392 + 0x1.fffffffffffffcp-52, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 393 + -0x1.80p-52, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 394 + -0x1.p-52, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 395 + 0.0, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 396 + -0x1.p-53, + 0x1.0p0, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 397 + 0.0, + 0x1.0p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 398 + 0x1.p-52, + 0x1.0p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 399 + 0.0, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 400 + 0x1.p-53, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 401 + 0x1.80p-52, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 402 + -0x1.40000000000008p-51, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 403 + -0x1.00000000000008p-51, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 404 + -0x1.00000000000010p-52, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 405 + -0x1.80p-52, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 406 + -0x1.p-52, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 407 + 0.0, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 408 + -0x1.fffffffffffff0p-53, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 409 + -0x1.ffffffffffffe0p-54, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 410 + 0x1.00000000000010p-53, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 411 + 0x1.ffffffffffffe00000000000007fffffp-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 412 + 0x1.ffffffffffffe000000000000080p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 413 + 0x1.ffffffffffffe000000000000080p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 414 + 0x1.ffffffffffffefffffffffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 415 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + 0x1.0p0, + -0.0 + }, + { // Entry 416 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 417 + 0x1.00000000000007ffffffffffff7fffffp0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 418 + 0x1.00000000000007ffffffffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 419 + 0x1.00000000000007ffffffffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 420 + 0x1.ffffffffffffefffffffffffffffffffp-1, + 0x1.0p0, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 421 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 422 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 423 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p0, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 424 + 0x1.p0, + 0x1.0p0, + 0x1.0p0, + -0.0 + }, + { // Entry 425 + 0x1.p0, + 0x1.0p0, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 426 + 0x1.0000000000000fffffffffffffffffffp0, + 0x1.0p0, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 427 + 0x1.00000000000010p0, + 0x1.0p0, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 428 + 0x1.00000000000010p0, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 429 + 0x1.00000000000007ffffffffffff7fffffp0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 430 + 0x1.00000000000007ffffffffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 431 + 0x1.00000000000007ffffffffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 432 + 0x1.0000000000000fffffffffffffffffffp0, + 0x1.0000000000001p0, + 0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 433 + 0x1.00000000000010p0, + 0x1.0000000000001p0, + 0x1.0p0, + -0.0 + }, + { // Entry 434 + 0x1.00000000000010p0, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 435 + 0x1.00000000000020000000000000ffffffp0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 436 + 0x1.00000000000020000000000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + -0.0 + }, + { // Entry 437 + 0x1.00000000000020000000000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 438 + -0x1.00000000000007ffffffffffff80p0, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 439 + -0x1.00000000000007ffffffffffff80p0, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + -0.0 + }, + { // Entry 440 + -0x1.00000000000007ffffffffffff7fffffp0, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 441 + -0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 442 + -0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + -0.0 + }, + { // Entry 443 + -0x1.ffffffffffffefffffffffffffffffffp-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 444 + -0x1.ffffffffffffe000000000000080p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 445 + -0x1.ffffffffffffe000000000000080p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 446 + -0x1.ffffffffffffe00000000000007fffffp-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 447 + -0x1.00000000000010p0, + 0x1.0p0, + -0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 448 + -0x1.00000000000010p0, + 0x1.0p0, + -0x1.0000000000001p0, + -0.0 + }, + { // Entry 449 + -0x1.0000000000000fffffffffffffffffffp0, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 450 + -0x1.p0, + 0x1.0p0, + -0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 451 + -0x1.p0, + 0x1.0p0, + -0x1.0p0, + -0.0 + }, + { // Entry 452 + -0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p0, + -0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 453 + -0x1.fffffffffffff0p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 454 + -0x1.fffffffffffff0p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 455 + -0x1.ffffffffffffefffffffffffffffffffp-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 456 + -0x1.00000000000020000000000001p0, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + -0x1.0p-1074 + }, + { // Entry 457 + -0x1.00000000000020000000000001p0, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + -0.0 + }, + { // Entry 458 + -0x1.00000000000020000000000000ffffffp0, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.0p-1074 + }, + { // Entry 459 + -0x1.00000000000010p0, + 0x1.0000000000001p0, + -0x1.0p0, + -0x1.0p-1074 + }, + { // Entry 460 + -0x1.00000000000010p0, + 0x1.0000000000001p0, + -0x1.0p0, + -0.0 + }, + { // Entry 461 + -0x1.0000000000000fffffffffffffffffffp0, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.0p-1074 + }, + { // Entry 462 + -0x1.00000000000007ffffffffffff80p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + -0x1.0p-1074 + }, + { // Entry 463 + -0x1.00000000000007ffffffffffff80p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + -0.0 + }, + { // Entry 464 + -0x1.00000000000007ffffffffffff7fffffp0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.0p-1074 + }, + { // Entry 465 + 0x1.0000003fffffeffffffe00000040p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 466 + 0x1.0000003ffffff000000000000040p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 467 + 0x1.0000003ffffff000000400000040p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 468 + 0x1.0000003ffffff7fffffep0, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 469 + 0x1.0000003ffffff8p0, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.0p-26 + }, + { // Entry 470 + 0x1.0000003ffffff8000004p0, + 0x1.fffffffffffffp-1, + 0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 471 + 0x1.00000040000007fffffdffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 472 + 0x1.00000040000007ffffffffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 473 + 0x1.00000040000008000003ffffff80p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 474 + 0x1.0000003ffffff7fffffep0, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 475 + 0x1.0000003ffffff8p0, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 476 + 0x1.0000003ffffff8000004p0, + 0x1.0p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 477 + 0x1.0000003ffffffffffffep0, + 0x1.0p0, + 0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 478 + 0x1.00000040p0, + 0x1.0p0, + 0x1.0p0, + 0x1.0p-26 + }, + { // Entry 479 + 0x1.00000040000000000004p0, + 0x1.0p0, + 0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 480 + 0x1.0000004000000ffffffep0, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 481 + 0x1.00000040000010p0, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 482 + 0x1.00000040000010000004p0, + 0x1.0p0, + 0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 483 + 0x1.00000040000007fffffdffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 484 + 0x1.00000040000007ffffffffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 485 + 0x1.00000040000008000003ffffff80p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 486 + 0x1.0000004000000ffffffep0, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 487 + 0x1.00000040000010p0, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.0p-26 + }, + { // Entry 488 + 0x1.00000040000010000004p0, + 0x1.0000000000001p0, + 0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 489 + 0x1.0000004000001ffffffe000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 490 + 0x1.00000040000020000000000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 491 + 0x1.00000040000020000004000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 492 + -0x1.ffffff80000010000003ffffffp-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 493 + -0x1.ffffff8000000fffffffffffffp-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 494 + -0x1.ffffff8000000ffffff7ffffffp-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 495 + -0x1.ffffff7ffffff0000004p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 496 + -0x1.ffffff7ffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.0p-26 + }, + { // Entry 497 + -0x1.ffffff7fffffeffffff8p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 498 + -0x1.ffffff7fffffe000000400000080p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 499 + -0x1.ffffff7fffffe000000000000080p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 500 + -0x1.ffffff7fffffdffffff800000080p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 501 + -0x1.ffffff80000020000004p-1, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 502 + -0x1.ffffff80000020p-1, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 503 + -0x1.ffffff8000001ffffff8p-1, + 0x1.0p0, + -0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 504 + -0x1.ffffff80000000000004p-1, + 0x1.0p0, + -0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 505 + -0x1.ffffff80p-1, + 0x1.0p0, + -0x1.0p0, + 0x1.0p-26 + }, + { // Entry 506 + -0x1.ffffff7ffffffffffff8p-1, + 0x1.0p0, + -0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 507 + -0x1.ffffff7ffffff0000004p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 508 + -0x1.ffffff7ffffff0p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 509 + -0x1.ffffff7fffffeffffff8p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 510 + -0x1.ffffff80000040000004000002p-1, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 511 + -0x1.ffffff80000040000000000002p-1, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.0p-26 + }, + { // Entry 512 + -0x1.ffffff8000003ffffff8000002p-1, + 0x1.0000000000001p0, + -0x1.0000000000001p0, + 0x1.0000000000001p-26 + }, + { // Entry 513 + -0x1.ffffff80000020000004p-1, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.fffffffffffffp-27 + }, + { // Entry 514 + -0x1.ffffff80000020p-1, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.0p-26 + }, + { // Entry 515 + -0x1.ffffff8000001ffffff8p-1, + 0x1.0000000000001p0, + -0x1.0p0, + 0x1.0000000000001p-26 + }, + { // Entry 516 + -0x1.ffffff80000010000003ffffffp-1, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-27 + }, + { // Entry 517 + -0x1.ffffff8000000fffffffffffffp-1, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.0p-26 + }, + { // Entry 518 + -0x1.ffffff8000000ffffff7ffffffp-1, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p-26 + }, + { // Entry 519 + -0x1.fffffffffffffcp0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p52 + }, + { // Entry 520 + -0x1.fffffffffffff8p-1, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1, + -0x1.0p52 + }, + { // Entry 521 + -0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp51 + }, + { // Entry 522 + -0x1.80p0, + 0x1.fffffffffffffp51, + 0x1.0p0, + -0x1.0000000000001p52 + }, + { // Entry 523 + -0x1.p-1, + 0x1.fffffffffffffp51, + 0x1.0p0, + -0x1.0p52 + }, + { // Entry 524 + 0.0, + 0x1.fffffffffffffp51, + 0x1.0p0, + -0x1.fffffffffffffp51 + }, + { // Entry 525 + -0x1.00000000000010p-1, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0, + -0x1.0000000000001p52 + }, + { // Entry 526 + 0x1.ffffffffffffe0p-2, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0, + -0x1.0p52 + }, + { // Entry 527 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0, + -0x1.fffffffffffffp51 + }, + { // Entry 528 + -0x1.80p0, + 0x1.0p52, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p52 + }, + { // Entry 529 + -0x1.p-1, + 0x1.0p52, + 0x1.fffffffffffffp-1, + -0x1.0p52 + }, + { // Entry 530 + 0.0, + 0x1.0p52, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp51 + }, + { // Entry 531 + -0x1.p0, + 0x1.0p52, + 0x1.0p0, + -0x1.0000000000001p52 + }, + { // Entry 532 + 0.0, + 0x1.0p52, + 0x1.0p0, + -0x1.0p52 + }, + { // Entry 533 + 0x1.p-1, + 0x1.0p52, + 0x1.0p0, + -0x1.fffffffffffffp51 + }, + { // Entry 534 + 0.0, + 0x1.0p52, + 0x1.0000000000001p0, + -0x1.0000000000001p52 + }, + { // Entry 535 + 0x1.p0, + 0x1.0p52, + 0x1.0000000000001p0, + -0x1.0p52 + }, + { // Entry 536 + 0x1.80p0, + 0x1.0p52, + 0x1.0000000000001p0, + -0x1.fffffffffffffp51 + }, + { // Entry 537 + -0x1.00000000000010p-1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p52 + }, + { // Entry 538 + 0x1.ffffffffffffe0p-2, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1, + -0x1.0p52 + }, + { // Entry 539 + 0x1.fffffffffffff0p-1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp51 + }, + { // Entry 540 + 0.0, + 0x1.0000000000001p52, + 0x1.0p0, + -0x1.0000000000001p52 + }, + { // Entry 541 + 0x1.p0, + 0x1.0000000000001p52, + 0x1.0p0, + -0x1.0p52 + }, + { // Entry 542 + 0x1.80p0, + 0x1.0000000000001p52, + 0x1.0p0, + -0x1.fffffffffffffp51 + }, + { // Entry 543 + 0x1.00000000000010p0, + 0x1.0000000000001p52, + 0x1.0000000000001p0, + -0x1.0000000000001p52 + }, + { // Entry 544 + 0x1.00000000000008p1, + 0x1.0000000000001p52, + 0x1.0000000000001p0, + -0x1.0p52 + }, + { // Entry 545 + 0x1.40000000000008p1, + 0x1.0000000000001p52, + 0x1.0000000000001p0, + -0x1.fffffffffffffp51 + }, + { // Entry 546 + 0x1.08p-5, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p-5 + }, + { // Entry 547 + 0x1.0040p0, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p0 + }, + { // Entry 548 + 0x1.p-4, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p-5 + }, + { // Entry 549 + 0x1.08p0, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 550 + 0x1.p-4, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p-5 + }, + { // Entry 551 + 0x1.08p0, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p0 + }, + { // Entry 552 + 0x1.08p0, + 0x1.0p0, + 0x1.0p0, + 0x1.0p-5 + }, + { // Entry 553 + 0x1.p1, + 0x1.0p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 554 + 0x1.20p-2, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p-5 + }, + { // Entry 555 + 0x1.40p0, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 556 + 0x1.08p0, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p-5 + }, + { // Entry 557 + 0x1.p1, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p0 + }, + { // Entry 558 + 0x1.01p3, + 0x1.0p0, + 0x1.0p3, + 0x1.0p-5 + }, + { // Entry 559 + 0x1.20p3, + 0x1.0p0, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 560 + 0x1.0040p5, + 0x1.0p0, + 0x1.0p5, + 0x1.0p-5 + }, + { // Entry 561 + 0x1.08p5, + 0x1.0p0, + 0x1.0p5, + 0x1.0p0 + }, + { // Entry 562 + 0x1.0040p5, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p-5 + }, + { // Entry 563 + 0x1.08p5, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 564 + 0x1.0010p7, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p-5 + }, + { // Entry 565 + 0x1.02p7, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p0 + }, + { // Entry 566 + 0x1.0002p10, + 0x1.0p0, + 0x1.0p10, + 0x1.0p-5 + }, + { // Entry 567 + 0x1.0040p10, + 0x1.0p0, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 568 + 0x1.000080p12, + 0x1.0p0, + 0x1.0p12, + 0x1.0p-5 + }, + { // Entry 569 + 0x1.0010p12, + 0x1.0p0, + 0x1.0p12, + 0x1.0p0 + }, + { // Entry 570 + 0x1.0008p3, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p3 + }, + { // Entry 571 + 0x1.0002p5, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p5 + }, + { // Entry 572 + 0x1.01p3, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p3 + }, + { // Entry 573 + 0x1.0040p5, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p5 + }, + { // Entry 574 + 0x1.01p3, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p3 + }, + { // Entry 575 + 0x1.0040p5, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p5 + }, + { // Entry 576 + 0x1.20p3, + 0x1.0p0, + 0x1.0p0, + 0x1.0p3 + }, + { // Entry 577 + 0x1.08p5, + 0x1.0p0, + 0x1.0p0, + 0x1.0p5 + }, + { // Entry 578 + 0x1.08p3, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 579 + 0x1.02p5, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p5 + }, + { // Entry 580 + 0x1.20p3, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p3 + }, + { // Entry 581 + 0x1.08p5, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p5 + }, + { // Entry 582 + 0x1.p4, + 0x1.0p0, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 583 + 0x1.40p5, + 0x1.0p0, + 0x1.0p3, + 0x1.0p5 + }, + { // Entry 584 + 0x1.40p5, + 0x1.0p0, + 0x1.0p5, + 0x1.0p3 + }, + { // Entry 585 + 0x1.p6, + 0x1.0p0, + 0x1.0p5, + 0x1.0p5 + }, + { // Entry 586 + 0x1.40p5, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 587 + 0x1.p6, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p5 + }, + { // Entry 588 + 0x1.10p7, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p3 + }, + { // Entry 589 + 0x1.40p7, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p5 + }, + { // Entry 590 + 0x1.02p10, + 0x1.0p0, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 591 + 0x1.08p10, + 0x1.0p0, + 0x1.0p10, + 0x1.0p5 + }, + { // Entry 592 + 0x1.0080p12, + 0x1.0p0, + 0x1.0p12, + 0x1.0p3 + }, + { // Entry 593 + 0x1.02p12, + 0x1.0p0, + 0x1.0p12, + 0x1.0p5 + }, + { // Entry 594 + 0x1.000010p10, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p10 + }, + { // Entry 595 + 0x1.000004p12, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p12 + }, + { // Entry 596 + 0x1.0002p10, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p10 + }, + { // Entry 597 + 0x1.000080p12, + 0x1.0p-5, + 0x1.0p0, + 0x1.0p12 + }, + { // Entry 598 + 0x1.0002p10, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p10 + }, + { // Entry 599 + 0x1.000080p12, + 0x1.0p0, + 0x1.0p-5, + 0x1.0p12 + }, + { // Entry 600 + 0x1.0040p10, + 0x1.0p0, + 0x1.0p0, + 0x1.0p10 + }, + { // Entry 601 + 0x1.0010p12, + 0x1.0p0, + 0x1.0p0, + 0x1.0p12 + }, + { // Entry 602 + 0x1.0010p10, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 603 + 0x1.0004p12, + 0x1.0p-5, + 0x1.0p3, + 0x1.0p12 + }, + { // Entry 604 + 0x1.0040p10, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p10 + }, + { // Entry 605 + 0x1.0010p12, + 0x1.0p-5, + 0x1.0p5, + 0x1.0p12 + }, + { // Entry 606 + 0x1.02p10, + 0x1.0p0, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 607 + 0x1.0080p12, + 0x1.0p0, + 0x1.0p3, + 0x1.0p12 + }, + { // Entry 608 + 0x1.08p10, + 0x1.0p0, + 0x1.0p5, + 0x1.0p10 + }, + { // Entry 609 + 0x1.02p12, + 0x1.0p0, + 0x1.0p5, + 0x1.0p12 + }, + { // Entry 610 + 0x1.08p10, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 611 + 0x1.02p12, + 0x1.0p-5, + 0x1.0p10, + 0x1.0p12 + }, + { // Entry 612 + 0x1.20p10, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p10 + }, + { // Entry 613 + 0x1.08p12, + 0x1.0p-5, + 0x1.0p12, + 0x1.0p12 + }, + { // Entry 614 + 0x1.p11, + 0x1.0p0, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 615 + 0x1.40p12, + 0x1.0p0, + 0x1.0p10, + 0x1.0p12 + }, + { // Entry 616 + 0x1.40p12, + 0x1.0p0, + 0x1.0p12, + 0x1.0p10 + }, + { // Entry 617 + 0x1.p13, + 0x1.0p0, + 0x1.0p12, + 0x1.0p12 + }, + { // Entry 618 + 0x1.0020p6, + 0x1.0p3, + 0x1.0p3, + 0x1.0p-5 + }, + { // Entry 619 + 0x1.04p6, + 0x1.0p3, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 620 + 0x1.0008p8, + 0x1.0p3, + 0x1.0p5, + 0x1.0p-5 + }, + { // Entry 621 + 0x1.01p8, + 0x1.0p3, + 0x1.0p5, + 0x1.0p0 + }, + { // Entry 622 + 0x1.0008p8, + 0x1.0p5, + 0x1.0p3, + 0x1.0p-5 + }, + { // Entry 623 + 0x1.01p8, + 0x1.0p5, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 624 + 0x1.0002p10, + 0x1.0p5, + 0x1.0p5, + 0x1.0p-5 + }, + { // Entry 625 + 0x1.0040p10, + 0x1.0p5, + 0x1.0p5, + 0x1.0p0 + }, + { // Entry 626 + 0x1.20p6, + 0x1.0p3, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 627 + 0x1.80p6, + 0x1.0p3, + 0x1.0p3, + 0x1.0p5 + }, + { // Entry 628 + 0x1.08p8, + 0x1.0p3, + 0x1.0p5, + 0x1.0p3 + }, + { // Entry 629 + 0x1.20p8, + 0x1.0p3, + 0x1.0p5, + 0x1.0p5 + }, + { // Entry 630 + 0x1.08p8, + 0x1.0p5, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 631 + 0x1.20p8, + 0x1.0p5, + 0x1.0p3, + 0x1.0p5 + }, + { // Entry 632 + 0x1.02p10, + 0x1.0p5, + 0x1.0p5, + 0x1.0p3 + }, + { // Entry 633 + 0x1.08p10, + 0x1.0p5, + 0x1.0p5, + 0x1.0p5 + }, + { // Entry 634 + 0x1.10p10, + 0x1.0p3, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 635 + 0x1.04p12, + 0x1.0p3, + 0x1.0p3, + 0x1.0p12 + }, + { // Entry 636 + 0x1.40p10, + 0x1.0p3, + 0x1.0p5, + 0x1.0p10 + }, + { // Entry 637 + 0x1.10p12, + 0x1.0p3, + 0x1.0p5, + 0x1.0p12 + }, + { // Entry 638 + 0x1.40p10, + 0x1.0p5, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 639 + 0x1.10p12, + 0x1.0p5, + 0x1.0p3, + 0x1.0p12 + }, + { // Entry 640 + 0x1.p11, + 0x1.0p5, + 0x1.0p5, + 0x1.0p10 + }, + { // Entry 641 + 0x1.40p12, + 0x1.0p5, + 0x1.0p5, + 0x1.0p12 + }, + { // Entry 642 + 0x1.000040p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p-5 + }, + { // Entry 643 + 0x1.0008p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 644 + 0x1.000010p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p-5 + }, + { // Entry 645 + 0x1.0002p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p0 + }, + { // Entry 646 + 0x1.000010p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p-5 + }, + { // Entry 647 + 0x1.0002p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 648 + 0x1.000004p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p-5 + }, + { // Entry 649 + 0x1.000080p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p0 + }, + { // Entry 650 + 0x1.0040p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 651 + 0x1.01p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p5 + }, + { // Entry 652 + 0x1.0010p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p3 + }, + { // Entry 653 + 0x1.0040p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p5 + }, + { // Entry 654 + 0x1.0010p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 655 + 0x1.0040p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p5 + }, + { // Entry 656 + 0x1.0004p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p3 + }, + { // Entry 657 + 0x1.0010p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p5 + }, + { // Entry 658 + 0x1.20p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 659 + 0x1.80p13, + 0x1.0p3, + 0x1.0p10, + 0x1.0p12 + }, + { // Entry 660 + 0x1.08p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p10 + }, + { // Entry 661 + 0x1.20p15, + 0x1.0p3, + 0x1.0p12, + 0x1.0p12 + }, + { // Entry 662 + 0x1.08p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 663 + 0x1.20p15, + 0x1.0p5, + 0x1.0p10, + 0x1.0p12 + }, + { // Entry 664 + 0x1.02p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p10 + }, + { // Entry 665 + 0x1.08p17, + 0x1.0p5, + 0x1.0p12, + 0x1.0p12 + }, + { // Entry 666 + -0x1.ffffe0p-21, + -0x1.0p-20, + -0x1.0p-20, + -0x1.0p-20 + }, + { // Entry 667 + 0x1.000010p-20, + -0x1.0p-20, + -0x1.0p-20, + 0x1.0p-20 + }, + { // Entry 668 + -0x1.000010p-20, + -0x1.0p-20, + 0x1.0p-20, + -0x1.0p-20 + }, + { // Entry 669 + 0x1.ffffe0p-21, + -0x1.0p-20, + 0x1.0p-20, + 0x1.0p-20 + }, + { // Entry 670 + -0x1.000010p-20, + 0x1.0p-20, + -0x1.0p-20, + -0x1.0p-20 + }, + { // Entry 671 + 0x1.ffffe0p-21, + 0x1.0p-20, + -0x1.0p-20, + 0x1.0p-20 + }, + { // Entry 672 + -0x1.ffffe0p-21, + 0x1.0p-20, + 0x1.0p-20, + -0x1.0p-20 + }, + { // Entry 673 + 0x1.000010p-20, + 0x1.0p-20, + 0x1.0p-20, + 0x1.0p-20 + }, + { // Entry 674 + 0x1.fffffffffffffffffffep-21, + -0x1.0p-10, + -0x1.0p-10, + -0x1.0p-100 + }, + { // Entry 675 + 0x1.00000000000000000001p-20, + -0x1.0p-10, + -0x1.0p-10, + 0x1.0p-100 + }, + { // Entry 676 + -0x1.00000000000000000001p-20, + -0x1.0p-10, + 0x1.0p-10, + -0x1.0p-100 + }, + { // Entry 677 + -0x1.fffffffffffffffffffep-21, + -0x1.0p-10, + 0x1.0p-10, + 0x1.0p-100 + }, + { // Entry 678 + -0x1.00000000000000000001p-20, + 0x1.0p-10, + -0x1.0p-10, + -0x1.0p-100 + }, + { // Entry 679 + -0x1.fffffffffffffffffffep-21, + 0x1.0p-10, + -0x1.0p-10, + 0x1.0p-100 + }, + { // Entry 680 + 0x1.fffffffffffffffffffep-21, + 0x1.0p-10, + 0x1.0p-10, + -0x1.0p-100 + }, + { // Entry 681 + 0x1.00000000000000000001p-20, + 0x1.0p-10, + 0x1.0p-10, + 0x1.0p-100 + }, + { // Entry 682 + 0x1.f0p-11, + -0x1.0p-5, + -0x1.0p-5, + -0x1.0p-15 + }, + { // Entry 683 + 0x1.08p-10, + -0x1.0p-5, + -0x1.0p-5, + 0x1.0p-15 + }, + { // Entry 684 + -0x1.08p-10, + -0x1.0p-5, + 0x1.0p-5, + -0x1.0p-15 + }, + { // Entry 685 + -0x1.f0p-11, + -0x1.0p-5, + 0x1.0p-5, + 0x1.0p-15 + }, + { // Entry 686 + -0x1.08p-10, + 0x1.0p-5, + -0x1.0p-5, + -0x1.0p-15 + }, + { // Entry 687 + -0x1.f0p-11, + 0x1.0p-5, + -0x1.0p-5, + 0x1.0p-15 + }, + { // Entry 688 + 0x1.f0p-11, + 0x1.0p-5, + 0x1.0p-5, + -0x1.0p-15 + }, + { // Entry 689 + 0x1.08p-10, + 0x1.0p-5, + 0x1.0p-5, + 0x1.0p-15 + }, + { // Entry 690 + 0x1.68p6, + -0x1.4p3, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 691 + 0x1.b8p6, + -0x1.4p3, + -0x1.4p3, + 0x1.4p3 + }, + { // Entry 692 + -0x1.b8p6, + -0x1.4p3, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 693 + -0x1.68p6, + -0x1.4p3, + 0x1.4p3, + 0x1.4p3 + }, + { // Entry 694 + -0x1.b8p6, + 0x1.4p3, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 695 + -0x1.68p6, + 0x1.4p3, + -0x1.4p3, + 0x1.4p3 + }, + { // Entry 696 + 0x1.68p6, + 0x1.4p3, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 697 + 0x1.b8p6, + 0x1.4p3, + 0x1.4p3, + 0x1.4p3 + }, + { // Entry 698 + 0.0, + -0x1.0p0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 699 + 0x1.p1, + -0x1.0p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 700 + -0x1.p1, + -0x1.0p0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 701 + 0.0, + -0x1.0p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 702 + -0x1.p1, + 0x1.0p0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 703 + 0.0, + 0x1.0p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 704 + 0.0, + 0x1.0p0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 705 + 0x1.p1, + 0x1.0p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 706 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 707 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 708 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 709 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 710 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 711 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 712 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 713 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 714 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 715 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + 0.0 + }, + { // Entry 716 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL, + -0.0 + }, + { // Entry 717 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 718 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 719 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 720 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 721 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 722 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 723 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 724 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 725 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 726 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + 0.0 + }, + { // Entry 727 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL, + -0.0 + }, + { // Entry 728 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 729 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 730 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 731 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 732 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 733 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 734 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 735 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 736 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 737 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 738 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 739 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 740 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 741 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 742 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 743 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 744 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 745 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 746 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 747 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 748 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 749 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 750 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 751 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 752 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 753 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 754 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 755 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 756 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 757 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 758 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 759 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 760 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 761 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 762 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0.0 + }, + { // Entry 763 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0.0 + }, + { // Entry 764 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 765 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 766 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 767 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 768 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 769 + -0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 770 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 771 + -0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 772 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 773 + -0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 774 + -0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0.0 + }, + { // Entry 775 + -0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0.0 + }, + { // Entry 776 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 777 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 778 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 779 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 780 + 0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 781 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 782 + 0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 783 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 784 + 0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 785 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 786 + 0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 787 + 0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 788 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 789 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 790 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 791 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 792 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 793 + -0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 794 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 795 + -0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 796 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 797 + -0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 798 + -0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 799 + -0x1.ffffffffffffd0000000000001p1, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 800 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 801 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 802 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 803 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 804 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 805 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 806 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 807 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 808 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 809 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 810 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0.0 + }, + { // Entry 811 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0.0 + }, + { // Entry 812 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 813 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 814 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 815 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 816 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 817 + -0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 818 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 819 + -0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 820 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 821 + -0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 822 + -0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0.0 + }, + { // Entry 823 + -0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0.0 + }, + { // Entry 824 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0.0, + HUGE_VAL + }, + { // Entry 825 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0.0, + -HUGE_VAL + }, + { // Entry 826 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 827 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 828 + 0x1.p-1022, + 0x1.fffffffffffffp1023, + 0.0, + 0x1.0p-1022 + }, + { // Entry 829 + -0x1.p-1022, + 0x1.fffffffffffffp1023, + 0.0, + -0x1.0p-1022 + }, + { // Entry 830 + 0x1.ffffffffffffe0p-1023, + 0x1.fffffffffffffp1023, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 831 + -0x1.ffffffffffffe0p-1023, + 0x1.fffffffffffffp1023, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 832 + 0x1.p-1074, + 0x1.fffffffffffffp1023, + 0.0, + 0x1.0p-1074 + }, + { // Entry 833 + -0x1.p-1074, + 0x1.fffffffffffffp1023, + 0.0, + -0x1.0p-1074 + }, + { // Entry 834 + 0.0, + 0x1.fffffffffffffp1023, + 0.0, + 0.0 + }, + { // Entry 835 + 0.0, + 0x1.fffffffffffffp1023, + 0.0, + -0.0 + }, + { // Entry 836 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0.0, + HUGE_VAL + }, + { // Entry 837 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0.0, + -HUGE_VAL + }, + { // Entry 838 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 839 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 840 + 0x1.p-1022, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.0p-1022 + }, + { // Entry 841 + -0x1.p-1022, + 0x1.fffffffffffffp1023, + -0.0, + -0x1.0p-1022 + }, + { // Entry 842 + 0x1.ffffffffffffe0p-1023, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 843 + -0x1.ffffffffffffe0p-1023, + 0x1.fffffffffffffp1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 844 + 0x1.p-1074, + 0x1.fffffffffffffp1023, + -0.0, + 0x1.0p-1074 + }, + { // Entry 845 + -0x1.p-1074, + 0x1.fffffffffffffp1023, + -0.0, + -0x1.0p-1074 + }, + { // Entry 846 + 0.0, + 0x1.fffffffffffffp1023, + -0.0, + 0.0 + }, + { // Entry 847 + -0.0, + 0x1.fffffffffffffp1023, + -0.0, + -0.0 + }, + { // Entry 848 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 849 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 850 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 851 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 852 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 853 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 854 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 855 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 856 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 857 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + 0.0 + }, + { // Entry 858 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL, + -0.0 + }, + { // Entry 859 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 860 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 861 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 862 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 863 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 864 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 865 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 866 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 867 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 868 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + 0.0 + }, + { // Entry 869 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL, + -0.0 + }, + { // Entry 870 + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 871 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 872 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 873 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 874 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 875 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 876 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 877 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 878 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 879 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 880 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 881 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 882 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 883 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 884 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 885 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 886 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 887 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 888 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 889 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 890 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 891 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 892 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 893 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 894 + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 895 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 896 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 897 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 898 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 899 + -0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 900 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 901 + -0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 902 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 903 + -0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 904 + -0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + 0.0 + }, + { // Entry 905 + -0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + 0x1.0p-1022, + -0.0 + }, + { // Entry 906 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 907 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 908 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 909 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 910 + 0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 911 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 912 + 0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 913 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 914 + 0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 915 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 916 + 0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + 0.0 + }, + { // Entry 917 + 0x1.fffffffffffff0p1, + -0x1.fffffffffffffp1023, + -0x1.0p-1022, + -0.0 + }, + { // Entry 918 + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 919 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 920 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 921 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 922 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 923 + -0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 924 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 925 + -0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 926 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 927 + -0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 928 + -0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 929 + -0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 930 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 931 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 932 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 933 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 934 + 0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 935 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 936 + 0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 937 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 938 + 0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 939 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 940 + 0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 941 + 0x1.ffffffffffffd0000000000001p1, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 942 + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 943 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 944 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 945 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 946 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 947 + -0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 948 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 949 + -0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 950 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 951 + -0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 952 + -0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + 0.0 + }, + { // Entry 953 + -0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + 0x1.0p-1074, + -0.0 + }, + { // Entry 954 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 955 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 956 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 957 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 958 + 0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 959 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 960 + 0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 961 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 962 + 0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 963 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 964 + 0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + 0.0 + }, + { // Entry 965 + 0x1.fffffffffffff0p-51, + -0x1.fffffffffffffp1023, + -0x1.0p-1074, + -0.0 + }, + { // Entry 966 + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0.0, + HUGE_VAL + }, + { // Entry 967 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0.0, + -HUGE_VAL + }, + { // Entry 968 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 969 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 970 + 0x1.p-1022, + -0x1.fffffffffffffp1023, + 0.0, + 0x1.0p-1022 + }, + { // Entry 971 + -0x1.p-1022, + -0x1.fffffffffffffp1023, + 0.0, + -0x1.0p-1022 + }, + { // Entry 972 + 0x1.ffffffffffffe0p-1023, + -0x1.fffffffffffffp1023, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 973 + -0x1.ffffffffffffe0p-1023, + -0x1.fffffffffffffp1023, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 974 + 0x1.p-1074, + -0x1.fffffffffffffp1023, + 0.0, + 0x1.0p-1074 + }, + { // Entry 975 + -0x1.p-1074, + -0x1.fffffffffffffp1023, + 0.0, + -0x1.0p-1074 + }, + { // Entry 976 + 0.0, + -0x1.fffffffffffffp1023, + 0.0, + 0.0 + }, + { // Entry 977 + -0.0, + -0x1.fffffffffffffp1023, + 0.0, + -0.0 + }, + { // Entry 978 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0.0, + HUGE_VAL + }, + { // Entry 979 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0.0, + -HUGE_VAL + }, + { // Entry 980 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 981 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 982 + 0x1.p-1022, + -0x1.fffffffffffffp1023, + -0.0, + 0x1.0p-1022 + }, + { // Entry 983 + -0x1.p-1022, + -0x1.fffffffffffffp1023, + -0.0, + -0x1.0p-1022 + }, + { // Entry 984 + 0x1.ffffffffffffe0p-1023, + -0x1.fffffffffffffp1023, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 985 + -0x1.ffffffffffffe0p-1023, + -0x1.fffffffffffffp1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 986 + 0x1.p-1074, + -0x1.fffffffffffffp1023, + -0.0, + 0x1.0p-1074 + }, + { // Entry 987 + -0x1.p-1074, + -0x1.fffffffffffffp1023, + -0.0, + -0x1.0p-1074 + }, + { // Entry 988 + 0.0, + -0x1.fffffffffffffp1023, + -0.0, + 0.0 + }, + { // Entry 989 + 0.0, + -0x1.fffffffffffffp1023, + -0.0, + -0.0 + }, + { // Entry 990 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 991 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 992 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 993 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 994 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 995 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 996 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 997 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 998 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 999 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + 0.0 + }, + { // Entry 1000 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL, + -0.0 + }, + { // Entry 1001 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1002 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1003 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1004 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1005 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1006 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1007 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1008 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1009 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1010 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + 0.0 + }, + { // Entry 1011 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL, + -0.0 + }, + { // Entry 1012 + HUGE_VAL, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1013 + -HUGE_VAL, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1014 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1015 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1016 + 0x1.fffffffffffff0p1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1017 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1018 + 0x1.fffffffffffff0p1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1019 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1020 + 0x1.fffffffffffff0p1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1021 + 0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1022 + 0x1.fffffffffffff0p1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1023 + 0x1.fffffffffffff0p1, + 0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1024 + HUGE_VAL, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1025 + -HUGE_VAL, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1026 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1027 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1028 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1029 + -0x1.fffffffffffff0p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1030 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1031 + -0x1.fffffffffffff0p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1032 + -0x1.ffffffffffffefffffffffffffffffffp1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1033 + -0x1.fffffffffffff0p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1034 + -0x1.fffffffffffff0p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1035 + -0x1.fffffffffffff0p1, + 0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1036 + HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1037 + -HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1038 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1039 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1040 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1041 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1042 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1043 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1044 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1045 + -0.0, + 0x1.0p-1022, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1046 + 0.0, + 0x1.0p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1047 + 0.0, + 0x1.0p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1048 + HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1049 + -HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1050 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1051 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1052 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1053 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1054 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1055 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1056 + 0.0, + 0x1.0p-1022, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1057 + -0x1.p-1074, + 0x1.0p-1022, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1058 + -0.0, + 0x1.0p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1059 + -0.0, + 0x1.0p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1060 + HUGE_VAL, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1061 + -HUGE_VAL, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1062 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1063 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1064 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1065 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1066 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1067 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1068 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1069 + -0.0, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1070 + 0.0, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1071 + 0.0, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1072 + HUGE_VAL, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1073 + -HUGE_VAL, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1074 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1075 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1076 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1077 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1078 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1079 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1080 + 0.0, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1081 + -0x1.p-1074, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1082 + -0.0, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1083 + -0.0, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1084 + HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1085 + -HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1086 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1087 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1088 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1089 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1090 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1091 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1092 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1093 + -0.0, + 0x1.0p-1022, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1094 + 0.0, + 0x1.0p-1022, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1095 + 0.0, + 0x1.0p-1022, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1096 + HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1097 + -HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1098 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1022, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1099 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1100 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1101 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1102 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1022, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1103 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1104 + 0.0, + 0x1.0p-1022, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1105 + -0x1.p-1074, + 0x1.0p-1022, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1106 + -0.0, + 0x1.0p-1022, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1107 + -0.0, + 0x1.0p-1022, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1108 + HUGE_VAL, + 0x1.0p-1022, + 0.0, + HUGE_VAL + }, + { // Entry 1109 + -HUGE_VAL, + 0x1.0p-1022, + 0.0, + -HUGE_VAL + }, + { // Entry 1110 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1111 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1112 + 0x1.p-1022, + 0x1.0p-1022, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1113 + -0x1.p-1022, + 0x1.0p-1022, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1114 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1115 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1116 + 0x1.p-1074, + 0x1.0p-1022, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1117 + -0x1.p-1074, + 0x1.0p-1022, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1118 + 0.0, + 0x1.0p-1022, + 0.0, + 0.0 + }, + { // Entry 1119 + 0.0, + 0x1.0p-1022, + 0.0, + -0.0 + }, + { // Entry 1120 + HUGE_VAL, + 0x1.0p-1022, + -0.0, + HUGE_VAL + }, + { // Entry 1121 + -HUGE_VAL, + 0x1.0p-1022, + -0.0, + -HUGE_VAL + }, + { // Entry 1122 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1123 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1124 + 0x1.p-1022, + 0x1.0p-1022, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1125 + -0x1.p-1022, + 0x1.0p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1126 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1127 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1128 + 0x1.p-1074, + 0x1.0p-1022, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1129 + -0x1.p-1074, + 0x1.0p-1022, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1130 + 0.0, + 0x1.0p-1022, + -0.0, + 0.0 + }, + { // Entry 1131 + -0.0, + 0x1.0p-1022, + -0.0, + -0.0 + }, + { // Entry 1132 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1133 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1134 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1135 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1136 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1137 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1138 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1139 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1140 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1141 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + 0.0 + }, + { // Entry 1142 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL, + -0.0 + }, + { // Entry 1143 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 1144 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1145 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1146 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1147 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1148 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1149 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1150 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1151 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1152 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + 0.0 + }, + { // Entry 1153 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL, + -0.0 + }, + { // Entry 1154 + HUGE_VAL, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1155 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1156 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1157 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1158 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1159 + -0x1.fffffffffffff0p1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1160 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1161 + -0x1.fffffffffffff0p1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1162 + -0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1163 + -0x1.fffffffffffff0p1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1164 + -0x1.fffffffffffff0p1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1165 + -0x1.fffffffffffff0p1, + -0x1.0p-1022, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1166 + HUGE_VAL, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1167 + -HUGE_VAL, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1168 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1169 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1170 + 0x1.fffffffffffff0p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1171 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1172 + 0x1.fffffffffffff0p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1173 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1174 + 0x1.fffffffffffff0p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1175 + 0x1.ffffffffffffefffffffffffffffffffp1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1176 + 0x1.fffffffffffff0p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1177 + 0x1.fffffffffffff0p1, + -0x1.0p-1022, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1178 + HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1179 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1180 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1181 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1182 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1183 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1184 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1185 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1186 + 0.0, + -0x1.0p-1022, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1187 + -0x1.p-1074, + -0x1.0p-1022, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1188 + -0.0, + -0x1.0p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1189 + -0.0, + -0x1.0p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1190 + HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1191 + -HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1192 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1193 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1194 + 0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1195 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1196 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1197 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1198 + 0x1.p-1074, + -0x1.0p-1022, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1199 + -0.0, + -0x1.0p-1022, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1200 + 0.0, + -0x1.0p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1201 + 0.0, + -0x1.0p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1202 + HUGE_VAL, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1203 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1204 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1205 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1206 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1207 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1208 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1209 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1210 + 0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1211 + -0x1.p-1074, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1212 + -0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1213 + -0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1214 + HUGE_VAL, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1215 + -HUGE_VAL, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1216 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1217 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1218 + 0x1.p-1022, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1219 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1220 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1221 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1222 + 0x1.p-1074, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1223 + -0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1224 + 0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1225 + 0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1226 + HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1227 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1228 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1229 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1230 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1231 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1232 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1233 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1234 + 0.0, + -0x1.0p-1022, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1235 + -0x1.p-1074, + -0x1.0p-1022, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1236 + -0.0, + -0x1.0p-1022, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1237 + -0.0, + -0x1.0p-1022, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1238 + HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1239 + -HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1240 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1241 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1022, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1242 + 0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1243 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1244 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1245 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1022, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1246 + 0x1.p-1074, + -0x1.0p-1022, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1247 + -0.0, + -0x1.0p-1022, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1248 + 0.0, + -0x1.0p-1022, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1249 + 0.0, + -0x1.0p-1022, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1250 + HUGE_VAL, + -0x1.0p-1022, + 0.0, + HUGE_VAL + }, + { // Entry 1251 + -HUGE_VAL, + -0x1.0p-1022, + 0.0, + -HUGE_VAL + }, + { // Entry 1252 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1253 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1254 + 0x1.p-1022, + -0x1.0p-1022, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1255 + -0x1.p-1022, + -0x1.0p-1022, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1256 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1257 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1258 + 0x1.p-1074, + -0x1.0p-1022, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1259 + -0x1.p-1074, + -0x1.0p-1022, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1260 + 0.0, + -0x1.0p-1022, + 0.0, + 0.0 + }, + { // Entry 1261 + -0.0, + -0x1.0p-1022, + 0.0, + -0.0 + }, + { // Entry 1262 + HUGE_VAL, + -0x1.0p-1022, + -0.0, + HUGE_VAL + }, + { // Entry 1263 + -HUGE_VAL, + -0x1.0p-1022, + -0.0, + -HUGE_VAL + }, + { // Entry 1264 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1265 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1266 + 0x1.p-1022, + -0x1.0p-1022, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1267 + -0x1.p-1022, + -0x1.0p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1268 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1269 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1270 + 0x1.p-1074, + -0x1.0p-1022, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1271 + -0x1.p-1074, + -0x1.0p-1022, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1272 + 0.0, + -0x1.0p-1022, + -0.0, + 0.0 + }, + { // Entry 1273 + 0.0, + -0x1.0p-1022, + -0.0, + -0.0 + }, + { // Entry 1274 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 1275 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1276 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1277 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1278 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1279 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1280 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1281 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1282 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1283 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + 0.0 + }, + { // Entry 1284 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL, + -0.0 + }, + { // Entry 1285 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1286 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1287 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1288 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1289 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1290 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1291 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1292 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1293 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1294 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0.0 + }, + { // Entry 1295 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0.0 + }, + { // Entry 1296 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1297 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1298 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1299 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1300 + 0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1301 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1302 + 0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1303 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1304 + 0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1305 + 0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1306 + 0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1307 + 0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1308 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1309 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1310 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1311 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1312 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1313 + -0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1314 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1315 + -0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1316 + -0x1.ffffffffffffd0000000000000ffffffp1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1317 + -0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1318 + -0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1319 + -0x1.ffffffffffffd0000000000001p1, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1320 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1321 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1322 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1323 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1324 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1325 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1326 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1327 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1328 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1329 + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1330 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1331 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1332 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1333 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1334 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1335 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1336 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1337 + -0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1338 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1339 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1340 + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1341 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1342 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1343 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1344 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1345 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1346 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1347 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1348 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1349 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1350 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1351 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1352 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1353 + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1354 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1355 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1356 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1357 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1358 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1359 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1360 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1361 + -0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1362 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1363 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1364 + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1365 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1366 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1367 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1368 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1369 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1370 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1371 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1372 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1373 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1374 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1375 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1376 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1377 + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1378 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1379 + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1380 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1381 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1382 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1383 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1384 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1385 + -0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1386 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1387 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1388 + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1389 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1390 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1391 + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1392 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0.0, + HUGE_VAL + }, + { // Entry 1393 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0.0, + -HUGE_VAL + }, + { // Entry 1394 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1395 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1396 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1397 + -0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1398 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1399 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1400 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1401 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1402 + 0.0, + 0x1.ffffffffffffep-1023, + 0.0, + 0.0 + }, + { // Entry 1403 + 0.0, + 0x1.ffffffffffffep-1023, + 0.0, + -0.0 + }, + { // Entry 1404 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0.0, + HUGE_VAL + }, + { // Entry 1405 + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0.0, + -HUGE_VAL + }, + { // Entry 1406 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1407 + -0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep-1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1408 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1409 + -0x1.p-1022, + 0x1.ffffffffffffep-1023, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1410 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1411 + -0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1412 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1413 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1414 + 0.0, + 0x1.ffffffffffffep-1023, + -0.0, + 0.0 + }, + { // Entry 1415 + -0.0, + 0x1.ffffffffffffep-1023, + -0.0, + -0.0 + }, + { // Entry 1416 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1417 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1418 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1419 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1420 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1421 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1422 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1423 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1424 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1425 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + 0.0 + }, + { // Entry 1426 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL, + -0.0 + }, + { // Entry 1427 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 1428 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1429 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1430 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1431 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1432 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1433 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1434 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1435 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1436 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + 0.0 + }, + { // Entry 1437 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL, + -0.0 + }, + { // Entry 1438 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1439 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1440 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1441 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1442 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1443 + -0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1444 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1445 + -0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1446 + -0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1447 + -0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1448 + -0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1449 + -0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1450 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1451 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1452 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1453 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1454 + 0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1455 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1456 + 0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1457 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1458 + 0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1459 + 0x1.ffffffffffffd0000000000000ffffffp1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1460 + 0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1461 + 0x1.ffffffffffffd0000000000001p1, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1462 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1463 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1464 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1465 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1466 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1467 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1468 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1469 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1470 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1471 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1472 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1473 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1474 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1475 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1476 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1477 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1478 + 0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1479 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1480 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1481 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1482 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1483 + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1484 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1485 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1486 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1487 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1488 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1489 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1490 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1491 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1492 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1493 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1494 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1495 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1496 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1497 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1498 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1499 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1500 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1501 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1502 + 0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1503 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1504 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1505 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1506 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1507 + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1508 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1509 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1510 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1511 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1512 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1513 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1514 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1515 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1516 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1517 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1518 + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1519 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1520 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1521 + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1522 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1523 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1524 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1525 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1526 + 0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1527 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1528 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1529 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1530 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1531 + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1532 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1533 + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1534 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0.0, + HUGE_VAL + }, + { // Entry 1535 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0.0, + -HUGE_VAL + }, + { // Entry 1536 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1537 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1538 + 0x1.p-1022, + -0x1.ffffffffffffep-1023, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1539 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1540 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1541 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1542 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1543 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1544 + 0.0, + -0x1.ffffffffffffep-1023, + 0.0, + 0.0 + }, + { // Entry 1545 + -0.0, + -0x1.ffffffffffffep-1023, + 0.0, + -0.0 + }, + { // Entry 1546 + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0.0, + HUGE_VAL + }, + { // Entry 1547 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0.0, + -HUGE_VAL + }, + { // Entry 1548 + 0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1549 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep-1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1550 + 0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1551 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1552 + 0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1553 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1554 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1555 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1556 + 0.0, + -0x1.ffffffffffffep-1023, + -0.0, + 0.0 + }, + { // Entry 1557 + 0.0, + -0x1.ffffffffffffep-1023, + -0.0, + -0.0 + }, + { // Entry 1558 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 1559 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1560 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1561 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1562 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1563 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1564 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1565 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1566 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1567 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + 0.0 + }, + { // Entry 1568 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL, + -0.0 + }, + { // Entry 1569 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1570 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1571 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1572 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1573 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1574 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1575 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1576 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1577 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1578 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + 0.0 + }, + { // Entry 1579 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL, + -0.0 + }, + { // Entry 1580 + HUGE_VAL, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1581 + -HUGE_VAL, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1582 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1583 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1584 + 0x1.fffffffffffff0p-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1585 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1586 + 0x1.fffffffffffff0p-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1587 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1588 + 0x1.fffffffffffff0p-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1589 + 0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1590 + 0x1.fffffffffffff0p-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1591 + 0x1.fffffffffffff0p-51, + 0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1592 + HUGE_VAL, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1593 + -HUGE_VAL, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1594 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1595 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1596 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1597 + -0x1.fffffffffffff0p-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1598 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1599 + -0x1.fffffffffffff0p-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1600 + -0x1.ffffffffffffefffffffffffffffffffp-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1601 + -0x1.fffffffffffff0p-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1602 + -0x1.fffffffffffff0p-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1603 + -0x1.fffffffffffff0p-51, + 0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1604 + HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1605 + -HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1606 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1607 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1608 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1609 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1610 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1611 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1612 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1613 + -0.0, + 0x1.0p-1074, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1614 + 0.0, + 0x1.0p-1074, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1615 + 0.0, + 0x1.0p-1074, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1616 + HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1617 + -HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1618 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1619 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1620 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1621 + -0x1.p-1022, + 0x1.0p-1074, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1622 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1623 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1624 + 0.0, + 0x1.0p-1074, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1625 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1626 + -0.0, + 0x1.0p-1074, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1627 + -0.0, + 0x1.0p-1074, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1628 + HUGE_VAL, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1629 + -HUGE_VAL, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1630 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1631 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1632 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1633 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1634 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1635 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1636 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1637 + -0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1638 + 0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1639 + 0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1640 + HUGE_VAL, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1641 + -HUGE_VAL, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1642 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1643 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1644 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1645 + -0x1.p-1022, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1646 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1647 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1648 + 0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1649 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1650 + -0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1651 + -0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1652 + HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1653 + -HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1654 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1655 + -0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1656 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1657 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1658 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1659 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1660 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1661 + -0.0, + 0x1.0p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1662 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1663 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1664 + HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1665 + -HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1666 + 0x1.ffffffffffffefffffffffffffffffffp1023, + 0x1.0p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1667 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1668 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1669 + -0x1.p-1022, + 0x1.0p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1670 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.0p-1074, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1671 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1672 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1673 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1674 + -0.0, + 0x1.0p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1675 + -0.0, + 0x1.0p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1676 + HUGE_VAL, + 0x1.0p-1074, + 0.0, + HUGE_VAL + }, + { // Entry 1677 + -HUGE_VAL, + 0x1.0p-1074, + 0.0, + -HUGE_VAL + }, + { // Entry 1678 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1679 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1680 + 0x1.p-1022, + 0x1.0p-1074, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1681 + -0x1.p-1022, + 0x1.0p-1074, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1682 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1683 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1684 + 0x1.p-1074, + 0x1.0p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1685 + -0x1.p-1074, + 0x1.0p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1686 + 0.0, + 0x1.0p-1074, + 0.0, + 0.0 + }, + { // Entry 1687 + 0.0, + 0x1.0p-1074, + 0.0, + -0.0 + }, + { // Entry 1688 + HUGE_VAL, + 0x1.0p-1074, + -0.0, + HUGE_VAL + }, + { // Entry 1689 + -HUGE_VAL, + 0x1.0p-1074, + -0.0, + -HUGE_VAL + }, + { // Entry 1690 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1691 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1692 + 0x1.p-1022, + 0x1.0p-1074, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1693 + -0x1.p-1022, + 0x1.0p-1074, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1694 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1695 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1696 + 0x1.p-1074, + 0x1.0p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1697 + -0x1.p-1074, + 0x1.0p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1698 + 0.0, + 0x1.0p-1074, + -0.0, + 0.0 + }, + { // Entry 1699 + -0.0, + 0x1.0p-1074, + -0.0, + -0.0 + }, + { // Entry 1700 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 1701 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1702 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1703 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1704 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1705 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1706 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1707 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1708 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1709 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + 0.0 + }, + { // Entry 1710 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL, + -0.0 + }, + { // Entry 1711 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 1712 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 1713 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 1714 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 1715 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 1716 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1717 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1718 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 1719 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 1720 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + 0.0 + }, + { // Entry 1721 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL, + -0.0 + }, + { // Entry 1722 + HUGE_VAL, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1723 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1724 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1725 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1726 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1727 + -0x1.fffffffffffff0p-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1728 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1729 + -0x1.fffffffffffff0p-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1730 + -0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1731 + -0x1.fffffffffffff0p-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1732 + -0x1.fffffffffffff0p-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1733 + -0x1.fffffffffffff0p-51, + -0x1.0p-1074, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1734 + HUGE_VAL, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1735 + -HUGE_VAL, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1736 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1737 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1738 + 0x1.fffffffffffff0p-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1739 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1740 + 0x1.fffffffffffff0p-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1741 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1742 + 0x1.fffffffffffff0p-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1743 + 0x1.ffffffffffffefffffffffffffffffffp-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1744 + 0x1.fffffffffffff0p-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1745 + 0x1.fffffffffffff0p-51, + -0x1.0p-1074, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1746 + HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1747 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1748 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1749 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1750 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1751 + -0x1.p-1022, + -0x1.0p-1074, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1752 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1753 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1754 + 0.0, + -0x1.0p-1074, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1755 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1756 + -0.0, + -0x1.0p-1074, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1757 + -0.0, + -0x1.0p-1074, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1758 + HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1759 + -HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1760 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1761 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1762 + 0x1.p-1022, + -0x1.0p-1074, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1763 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1764 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1765 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1766 + 0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1767 + -0.0, + -0x1.0p-1074, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1768 + 0.0, + -0x1.0p-1074, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1769 + 0.0, + -0x1.0p-1074, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1770 + HUGE_VAL, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1771 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1772 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1773 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1774 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1775 + -0x1.p-1022, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1776 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1777 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1778 + 0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1779 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1780 + -0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1781 + -0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1782 + HUGE_VAL, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1783 + -HUGE_VAL, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1784 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1785 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1786 + 0x1.p-1022, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1787 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1788 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1789 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1790 + 0x1.p-1074, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1791 + -0.0, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1792 + 0.0, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1793 + 0.0, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1794 + HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1795 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1796 + 0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1797 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1798 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1799 + -0x1.p-1022, + -0x1.0p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1800 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1801 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1802 + 0.0, + -0x1.0p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1803 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1804 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1805 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1806 + HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1807 + -HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1808 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1809 + -0x1.ffffffffffffefffffffffffffffffffp1023, + -0x1.0p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1810 + 0x1.p-1022, + -0x1.0p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1811 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1812 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1813 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.0p-1074, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1814 + 0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1815 + -0.0, + -0x1.0p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1816 + 0.0, + -0x1.0p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1817 + 0.0, + -0x1.0p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1818 + HUGE_VAL, + -0x1.0p-1074, + 0.0, + HUGE_VAL + }, + { // Entry 1819 + -HUGE_VAL, + -0x1.0p-1074, + 0.0, + -HUGE_VAL + }, + { // Entry 1820 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1821 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1822 + 0x1.p-1022, + -0x1.0p-1074, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1823 + -0x1.p-1022, + -0x1.0p-1074, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1824 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1825 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1826 + 0x1.p-1074, + -0x1.0p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1827 + -0x1.p-1074, + -0x1.0p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1828 + 0.0, + -0x1.0p-1074, + 0.0, + 0.0 + }, + { // Entry 1829 + -0.0, + -0x1.0p-1074, + 0.0, + -0.0 + }, + { // Entry 1830 + HUGE_VAL, + -0x1.0p-1074, + -0.0, + HUGE_VAL + }, + { // Entry 1831 + -HUGE_VAL, + -0x1.0p-1074, + -0.0, + -HUGE_VAL + }, + { // Entry 1832 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1833 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1834 + 0x1.p-1022, + -0x1.0p-1074, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1835 + -0x1.p-1022, + -0x1.0p-1074, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1836 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1837 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1838 + 0x1.p-1074, + -0x1.0p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1839 + -0x1.p-1074, + -0x1.0p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1840 + 0.0, + -0x1.0p-1074, + -0.0, + 0.0 + }, + { // Entry 1841 + 0.0, + -0x1.0p-1074, + -0.0, + -0.0 + }, + { // Entry 1842 + HUGE_VAL, + 0.0, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1843 + -HUGE_VAL, + 0.0, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1844 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1845 + -0x1.fffffffffffff0p1023, + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1846 + 0x1.p-1022, + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1847 + -0x1.p-1022, + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1848 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1849 + -0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1850 + 0x1.p-1074, + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1851 + -0x1.p-1074, + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1852 + 0.0, + 0.0, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1853 + 0.0, + 0.0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1854 + HUGE_VAL, + 0.0, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1855 + -HUGE_VAL, + 0.0, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1856 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1857 + -0x1.fffffffffffff0p1023, + 0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1858 + 0x1.p-1022, + 0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1859 + -0x1.p-1022, + 0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1860 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1861 + -0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1862 + 0x1.p-1074, + 0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1863 + -0x1.p-1074, + 0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1864 + 0.0, + 0.0, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1865 + -0.0, + 0.0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1866 + HUGE_VAL, + 0.0, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1867 + -HUGE_VAL, + 0.0, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1868 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1869 + -0x1.fffffffffffff0p1023, + 0.0, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1870 + 0x1.p-1022, + 0.0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1871 + -0x1.p-1022, + 0.0, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1872 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1873 + -0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1874 + 0x1.p-1074, + 0.0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1875 + -0x1.p-1074, + 0.0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1876 + 0.0, + 0.0, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1877 + 0.0, + 0.0, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1878 + HUGE_VAL, + 0.0, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1879 + -HUGE_VAL, + 0.0, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1880 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1881 + -0x1.fffffffffffff0p1023, + 0.0, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1882 + 0x1.p-1022, + 0.0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1883 + -0x1.p-1022, + 0.0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1884 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1885 + -0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1886 + 0x1.p-1074, + 0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1887 + -0x1.p-1074, + 0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1888 + 0.0, + 0.0, + -0x1.0p-1022, + 0.0 + }, + { // Entry 1889 + -0.0, + 0.0, + -0x1.0p-1022, + -0.0 + }, + { // Entry 1890 + HUGE_VAL, + 0.0, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1891 + -HUGE_VAL, + 0.0, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1892 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1893 + -0x1.fffffffffffff0p1023, + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1894 + 0x1.p-1022, + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1895 + -0x1.p-1022, + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1896 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1897 + -0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1898 + 0x1.p-1074, + 0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1899 + -0x1.p-1074, + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1900 + 0.0, + 0.0, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1901 + 0.0, + 0.0, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1902 + HUGE_VAL, + 0.0, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 1903 + -HUGE_VAL, + 0.0, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 1904 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1905 + -0x1.fffffffffffff0p1023, + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1906 + 0x1.p-1022, + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 1907 + -0x1.p-1022, + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 1908 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1909 + -0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1910 + 0x1.p-1074, + 0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 1911 + -0x1.p-1074, + 0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 1912 + 0.0, + 0.0, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 1913 + -0.0, + 0.0, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 1914 + HUGE_VAL, + 0.0, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1915 + -HUGE_VAL, + 0.0, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1916 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1917 + -0x1.fffffffffffff0p1023, + 0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1918 + 0x1.p-1022, + 0.0, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1919 + -0x1.p-1022, + 0.0, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1920 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1921 + -0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1922 + 0x1.p-1074, + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1923 + -0x1.p-1074, + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1924 + 0.0, + 0.0, + 0x1.0p-1074, + 0.0 + }, + { // Entry 1925 + 0.0, + 0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 1926 + HUGE_VAL, + 0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 1927 + -HUGE_VAL, + 0.0, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 1928 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 1929 + -0x1.fffffffffffff0p1023, + 0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 1930 + 0x1.p-1022, + 0.0, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 1931 + -0x1.p-1022, + 0.0, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 1932 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1933 + -0x1.ffffffffffffe0p-1023, + 0.0, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1934 + 0x1.p-1074, + 0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 1935 + -0x1.p-1074, + 0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1936 + 0.0, + 0.0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 1937 + -0.0, + 0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 1938 + HUGE_VAL, + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 1939 + -HUGE_VAL, + 0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 1940 + 0x1.fffffffffffff0p1023, + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1941 + -0x1.fffffffffffff0p1023, + 0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1942 + 0x1.p-1022, + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 1943 + -0x1.p-1022, + 0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 1944 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1945 + -0x1.ffffffffffffe0p-1023, + 0.0, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1946 + 0x1.p-1074, + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 1947 + -0x1.p-1074, + 0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 1948 + 0.0, + 0.0, + 0.0, + 0.0 + }, + { // Entry 1949 + 0.0, + 0.0, + 0.0, + -0.0 + }, + { // Entry 1950 + HUGE_VAL, + 0.0, + -0.0, + HUGE_VAL + }, + { // Entry 1951 + -HUGE_VAL, + 0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 1952 + 0x1.fffffffffffff0p1023, + 0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 1953 + -0x1.fffffffffffff0p1023, + 0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 1954 + 0x1.p-1022, + 0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 1955 + -0x1.p-1022, + 0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 1956 + 0x1.ffffffffffffe0p-1023, + 0.0, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1957 + -0x1.ffffffffffffe0p-1023, + 0.0, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1958 + 0x1.p-1074, + 0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 1959 + -0x1.p-1074, + 0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1960 + 0.0, + 0.0, + -0.0, + 0.0 + }, + { // Entry 1961 + -0.0, + 0.0, + -0.0, + -0.0 + }, + { // Entry 1962 + HUGE_VAL, + -0.0, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1963 + -HUGE_VAL, + -0.0, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1964 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1965 + -0x1.fffffffffffff0p1023, + -0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1966 + 0x1.p-1022, + -0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1967 + -0x1.p-1022, + -0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1968 + 0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1969 + -0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1970 + 0x1.p-1074, + -0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1971 + -0x1.p-1074, + -0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1972 + 0.0, + -0.0, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1973 + -0.0, + -0.0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1974 + HUGE_VAL, + -0.0, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 1975 + -HUGE_VAL, + -0.0, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 1976 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 1977 + -0x1.fffffffffffff0p1023, + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 1978 + 0x1.p-1022, + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 1979 + -0x1.p-1022, + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 1980 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1981 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1982 + 0x1.p-1074, + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 1983 + -0x1.p-1074, + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 1984 + 0.0, + -0.0, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 1985 + 0.0, + -0.0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 1986 + HUGE_VAL, + -0.0, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1987 + -HUGE_VAL, + -0.0, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 1988 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 1989 + -0x1.fffffffffffff0p1023, + -0.0, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 1990 + 0x1.p-1022, + -0.0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 1991 + -0x1.p-1022, + -0.0, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 1992 + 0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 1993 + -0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 1994 + 0x1.p-1074, + -0.0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 1995 + -0x1.p-1074, + -0.0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 1996 + 0.0, + -0.0, + 0x1.0p-1022, + 0.0 + }, + { // Entry 1997 + -0.0, + -0.0, + 0x1.0p-1022, + -0.0 + }, + { // Entry 1998 + HUGE_VAL, + -0.0, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 1999 + -HUGE_VAL, + -0.0, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 2000 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 2001 + -0x1.fffffffffffff0p1023, + -0.0, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 2002 + 0x1.p-1022, + -0.0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 2003 + -0x1.p-1022, + -0.0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 2004 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2005 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2006 + 0x1.p-1074, + -0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 2007 + -0x1.p-1074, + -0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 2008 + 0.0, + -0.0, + -0x1.0p-1022, + 0.0 + }, + { // Entry 2009 + 0.0, + -0.0, + -0x1.0p-1022, + -0.0 + }, + { // Entry 2010 + HUGE_VAL, + -0.0, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 2011 + -HUGE_VAL, + -0.0, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 2012 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2013 + -0x1.fffffffffffff0p1023, + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2014 + 0x1.p-1022, + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2015 + -0x1.p-1022, + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2016 + 0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2017 + -0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2018 + 0x1.p-1074, + -0.0, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2019 + -0x1.p-1074, + -0.0, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2020 + 0.0, + -0.0, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2021 + -0.0, + -0.0, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2022 + HUGE_VAL, + -0.0, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 2023 + -HUGE_VAL, + -0.0, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 2024 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2025 + -0x1.fffffffffffff0p1023, + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2026 + 0x1.p-1022, + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2027 + -0x1.p-1022, + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2028 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2029 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2030 + 0x1.p-1074, + -0.0, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2031 + -0x1.p-1074, + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2032 + 0.0, + -0.0, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2033 + 0.0, + -0.0, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2034 + HUGE_VAL, + -0.0, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 2035 + -HUGE_VAL, + -0.0, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 2036 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2037 + -0x1.fffffffffffff0p1023, + -0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2038 + 0x1.p-1022, + -0.0, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2039 + -0x1.p-1022, + -0.0, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2040 + 0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2041 + -0x1.ffffffffffffe0p-1023, + -0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2042 + 0x1.p-1074, + -0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2043 + -0x1.p-1074, + -0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2044 + 0.0, + -0.0, + 0x1.0p-1074, + 0.0 + }, + { // Entry 2045 + -0.0, + -0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 2046 + HUGE_VAL, + -0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 2047 + -HUGE_VAL, + -0.0, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 2048 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2049 + -0x1.fffffffffffff0p1023, + -0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2050 + 0x1.p-1022, + -0.0, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2051 + -0x1.p-1022, + -0.0, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2052 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2053 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2054 + 0x1.p-1074, + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2055 + -0x1.p-1074, + -0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2056 + 0.0, + -0.0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 2057 + 0.0, + -0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 2058 + HUGE_VAL, + -0.0, + 0.0, + HUGE_VAL + }, + { // Entry 2059 + -HUGE_VAL, + -0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 2060 + 0x1.fffffffffffff0p1023, + -0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 2061 + -0x1.fffffffffffff0p1023, + -0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 2062 + 0x1.p-1022, + -0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 2063 + -0x1.p-1022, + -0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 2064 + 0x1.ffffffffffffe0p-1023, + -0.0, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2065 + -0x1.ffffffffffffe0p-1023, + -0.0, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2066 + 0x1.p-1074, + -0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 2067 + -0x1.p-1074, + -0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 2068 + 0.0, + -0.0, + 0.0, + 0.0 + }, + { // Entry 2069 + -0.0, + -0.0, + 0.0, + -0.0 + }, + { // Entry 2070 + HUGE_VAL, + -0.0, + -0.0, + HUGE_VAL + }, + { // Entry 2071 + -HUGE_VAL, + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 2072 + 0x1.fffffffffffff0p1023, + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 2073 + -0x1.fffffffffffff0p1023, + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 2074 + 0x1.p-1022, + -0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 2075 + -0x1.p-1022, + -0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 2076 + 0x1.ffffffffffffe0p-1023, + -0.0, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2077 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2078 + 0x1.p-1074, + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 2079 + -0x1.p-1074, + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 2080 + 0.0, + -0.0, + -0.0, + 0.0 + }, + { // Entry 2081 + 0.0, + -0.0, + -0.0, + -0.0 + }, + { // Entry 2082 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 2083 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 2084 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 2085 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 2086 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 2087 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2088 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2089 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 2090 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 2091 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 2092 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 2093 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 2094 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 2095 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 2096 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 2097 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 2098 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2099 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2100 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 2101 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 2102 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 2103 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 2104 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 2105 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2106 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2107 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 2108 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 2109 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2110 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2111 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 2112 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 2113 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 2114 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 2115 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 2116 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2117 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2118 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 2119 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 2120 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2121 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2122 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 2123 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 2124 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 2125 + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 2126 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 2127 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 2128 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 2129 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 2130 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 2131 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2132 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2133 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 2134 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 2135 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + 0.0 + }, + { // Entry 2136 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022, + -0.0 + }, + { // Entry 2137 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 2138 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 2139 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 2140 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 2141 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 2142 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2143 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2144 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 2145 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 2146 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + 0.0 + }, + { // Entry 2147 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022, + -0.0 + }, + { // Entry 2148 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 2149 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2150 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2151 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2152 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2153 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2154 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2155 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2156 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2157 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2158 + HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2159 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 2160 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2161 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2162 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2163 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2164 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2165 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2166 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2167 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2168 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2169 + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2170 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 2171 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2172 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2173 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2174 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2175 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2176 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2177 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2178 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2179 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + 0.0 + }, + { // Entry 2180 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074, + -0.0 + }, + { // Entry 2181 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 2182 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2183 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2184 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2185 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2186 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2187 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2188 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2189 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2190 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + 0.0 + }, + { // Entry 2191 + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074, + -0.0 + }, + { // Entry 2192 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 2193 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 2194 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 2195 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 2196 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 2197 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2198 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2199 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 2200 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 2201 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 2202 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 2203 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 2204 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 2205 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 2206 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 2207 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 2208 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2209 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2210 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 2211 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 2212 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 2213 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 2214 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 2215 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2216 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2217 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 2218 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 2219 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2220 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2221 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 2222 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 2223 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 2224 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 2225 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 2226 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2227 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2228 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 2229 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 2230 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2231 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2232 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 2233 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 2234 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 2235 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 2236 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 2237 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 2238 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 2239 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 2240 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 2241 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2242 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2243 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 2244 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 2245 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + 0.0 + }, + { // Entry 2246 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022, + -0.0 + }, + { // Entry 2247 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 2248 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 2249 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 2250 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 2251 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 2252 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2253 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2254 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 2255 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 2256 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + 0.0 + }, + { // Entry 2257 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022, + -0.0 + }, + { // Entry 2258 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 2259 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2260 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2261 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2262 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2263 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2264 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2265 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2266 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2267 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2268 + -HUGE_VAL, + -HUGE_VAL, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2269 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 2270 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 2271 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 2272 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 2273 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 2274 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2275 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2276 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 2277 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 2278 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 2279 + HUGE_VAL, + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 2280 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 2281 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2282 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2283 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2284 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2285 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2286 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2287 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2288 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2289 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + 0.0 + }, + { // Entry 2290 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074, + -0.0 + }, + { // Entry 2291 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 2292 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 2293 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 2294 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 2295 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 2296 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 2297 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 2298 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 2299 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 2300 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + 0.0 + }, + { // Entry 2301 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074, + -0.0 + } +}; diff --git a/tests/math_data/fmaf_intel_data.h b/tests/math_data/fmaf_intel_data.h new file mode 100644 index 000000000..af509e6b7 --- /dev/null +++ b/tests/math_data/fmaf_intel_data.h @@ -0,0 +1,13836 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_3_t g_fmaf_intel_data[] = { + { // Entry 0 + -0x1.800002fffffffffffd80p73, + -0x1.000002p72, + 0x1.80p1, + 0x1.40p2 + }, + { // Entry 1 + -0x1.e66666p0, + 0x1.p-149, + -0x1.ccccccp-1, + -0x1.e66666p0 + }, + { // Entry 2 + 0x1.15f153ffffffffffffffffffffffffffp-2, + 0x1.p-149, + -0x1.ccccccp-1, + 0x1.15f154p-2 + }, + { // Entry 3 + 0x1.000005fffffffffffffffffffff0ccccp-41, + 0x1.p-149, + -0x1.e66666p-1, + 0x1.000006p-41 + }, + { // Entry 4 + -0x1.e66665ffffffffffffffffffffffffffp0, + 0x1.p-149, + 0x1.075070p-3, + -0x1.e66666p0 + }, + { // Entry 5 + 0x1.00000600000000000000000000014444p-41, + 0x1.p-149, + 0x1.444424p-4, + 0x1.000006p-41 + }, + { // Entry 6 + 0x1.c9999906666680p0, + 0x1.000002p-3, + -0x1.ccccccp-1, + 0x1.e66666p0 + }, + { // Entry 7 + 0x1.880156fffffffffefbbcp14, + 0x1.0000e0p7, + 0x1.88p7, + -0x1.0444p-50 + }, + { // Entry 8 + 0x1.2b3335p-43, + 0x1.08p-41, + -0x1.8df6b0p-1, + 0x1.18p-41 + }, + { // Entry 9 + 0x1.9af704000001p-1, + 0x1.43969cp-3, + 0x1.62e42ep-1, + 0x1.62e42ep-1 + }, + { // Entry 10 + 0x1.7eed9900000080p-1, + 0x1.43969cp-4, + 0x1.62e42ep-1, + 0x1.62e42ep-1 + }, + { // Entry 11 + -0x1.5229cafffffffffc6de498p59, + 0x1.88p60, + -0x1.b9aec0p-2, + 0x1.c90db4p-4 + }, + { // Entry 12 + 0x1.678c8dffffffb0p-1, + 0x1.ae0ef4p-7, + 0x1.62e42ep-1, + 0x1.62e42ep-1 + }, + { // Entry 13 + 0x1.ffffee000010p-1, + 0x1.fffffep127, + -0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 14 + 0x1.fffff0000010p-1, + 0x1.fffffep127, + -0x1.p-149, + 0x1.p0 + }, + { // Entry 15 + 0x1.fffff4000010p-1, + 0x1.fffffep127, + -0x1.p-149, + 0x1.000002p0 + }, + { // Entry 16 + 0x1.fffffep-1, + 0x1.fffffep127, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 17 + 0x1.p0, + 0x1.fffffep127, + 0.0, + 0x1.p0 + }, + { // Entry 18 + 0x1.000002p0, + 0x1.fffffep127, + 0.0, + 0x1.000002p0 + }, + { // Entry 19 + 0x1.000006fffff8p0, + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 20 + 0x1.000007fffff8p0, + 0x1.fffffep127, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 21 + 0x1.000009fffff8p0, + 0x1.fffffep127, + 0x1.p-149, + 0x1.000002p0 + }, + { // Entry 22 + 0x1.ffffee000020p-2, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 23 + 0x1.fffff0000020p-2, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.p-1 + }, + { // Entry 24 + 0x1.fffff4000020p-2, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 25 + 0x1.fffffep-2, + 0x1.fffffcp126, + 0.0, + 0x1.fffffep-2 + }, + { // Entry 26 + 0x1.p-1, + 0x1.fffffcp126, + 0.0, + 0x1.p-1 + }, + { // Entry 27 + 0x1.000002p-1, + 0x1.fffffcp126, + 0.0, + 0x1.000002p-1 + }, + { // Entry 28 + 0x1.000006fffff0p-1, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 29 + 0x1.000007fffff0p-1, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.p-1 + }, + { // Entry 30 + 0x1.000009fffff0p-1, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 31 + 0x1.ffffee000010p-2, + 0x1.fffffep126, + -0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 32 + 0x1.fffff0000010p-2, + 0x1.fffffep126, + -0x1.p-149, + 0x1.p-1 + }, + { // Entry 33 + 0x1.fffff4000010p-2, + 0x1.fffffep126, + -0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 34 + 0x1.fffffep-2, + 0x1.fffffep126, + 0.0, + 0x1.fffffep-2 + }, + { // Entry 35 + 0x1.p-1, + 0x1.fffffep126, + 0.0, + 0x1.p-1 + }, + { // Entry 36 + 0x1.000002p-1, + 0x1.fffffep126, + 0.0, + 0x1.000002p-1 + }, + { // Entry 37 + 0x1.000006fffff8p-1, + 0x1.fffffep126, + 0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 38 + 0x1.000007fffff8p-1, + 0x1.fffffep126, + 0x1.p-149, + 0x1.p-1 + }, + { // Entry 39 + 0x1.000009fffff8p-1, + 0x1.fffffep126, + 0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 40 + 0x1.ffffeep-2, + 0x1.p127, + -0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 41 + 0x1.fffff0p-2, + 0x1.p127, + -0x1.p-149, + 0x1.p-1 + }, + { // Entry 42 + 0x1.fffff4p-2, + 0x1.p127, + -0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 43 + 0x1.fffffep-2, + 0x1.p127, + 0.0, + 0x1.fffffep-2 + }, + { // Entry 44 + 0x1.p-1, + 0x1.p127, + 0.0, + 0x1.p-1 + }, + { // Entry 45 + 0x1.000002p-1, + 0x1.p127, + 0.0, + 0x1.000002p-1 + }, + { // Entry 46 + 0x1.000007p-1, + 0x1.p127, + 0x1.p-149, + 0x1.fffffep-2 + }, + { // Entry 47 + 0x1.000008p-1, + 0x1.p127, + 0x1.p-149, + 0x1.p-1 + }, + { // Entry 48 + 0x1.00000ap-1, + 0x1.p127, + 0x1.p-149, + 0x1.000002p-1 + }, + { // Entry 49 + 0x1.fffff6000010p-1, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 50 + 0x1.fffff8000010p-1, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.p0 + }, + { // Entry 51 + 0x1.fffffc000010p-1, + 0x1.fffffcp126, + -0x1.p-149, + 0x1.000002p0 + }, + { // Entry 52 + 0x1.fffffep-1, + 0x1.fffffcp126, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 53 + 0x1.p0, + 0x1.fffffcp126, + 0.0, + 0x1.p0 + }, + { // Entry 54 + 0x1.000002p0, + 0x1.fffffcp126, + 0.0, + 0x1.000002p0 + }, + { // Entry 55 + 0x1.000002fffff8p0, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 56 + 0x1.000003fffff8p0, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 57 + 0x1.000005fffff8p0, + 0x1.fffffcp126, + 0x1.p-149, + 0x1.000002p0 + }, + { // Entry 58 + 0x1.fffff6000008p-1, + 0x1.fffffep126, + -0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 59 + 0x1.fffff8000008p-1, + 0x1.fffffep126, + -0x1.p-149, + 0x1.p0 + }, + { // Entry 60 + 0x1.fffffc000008p-1, + 0x1.fffffep126, + -0x1.p-149, + 0x1.000002p0 + }, + { // Entry 61 + 0x1.fffffep-1, + 0x1.fffffep126, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 62 + 0x1.p0, + 0x1.fffffep126, + 0.0, + 0x1.p0 + }, + { // Entry 63 + 0x1.000002p0, + 0x1.fffffep126, + 0.0, + 0x1.000002p0 + }, + { // Entry 64 + 0x1.000002fffffcp0, + 0x1.fffffep126, + 0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 65 + 0x1.000003fffffcp0, + 0x1.fffffep126, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 66 + 0x1.000005fffffcp0, + 0x1.fffffep126, + 0x1.p-149, + 0x1.000002p0 + }, + { // Entry 67 + 0x1.fffff6p-1, + 0x1.p127, + -0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 68 + 0x1.fffff8p-1, + 0x1.p127, + -0x1.p-149, + 0x1.p0 + }, + { // Entry 69 + 0x1.fffffcp-1, + 0x1.p127, + -0x1.p-149, + 0x1.000002p0 + }, + { // Entry 70 + 0x1.fffffep-1, + 0x1.p127, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 71 + 0x1.p0, + 0x1.p127, + 0.0, + 0x1.p0 + }, + { // Entry 72 + 0x1.000002p0, + 0x1.p127, + 0.0, + 0x1.000002p0 + }, + { // Entry 73 + 0x1.000003p0, + 0x1.p127, + 0x1.p-149, + 0x1.fffffep-1 + }, + { // Entry 74 + 0x1.000004p0, + 0x1.p127, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 75 + 0x1.000006p0, + 0x1.p127, + 0x1.p-149, + 0x1.000002p0 + }, + { // Entry 76 + 0x1.fffffc000001ffffffffffffffffffffp-2, + 0x1.fffffep-2, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 77 + 0x1.fffffc000002p-2, + 0x1.fffffep-2, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 78 + 0x1.fffffc000002p-2, + 0x1.fffffep-2, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 79 + 0x1.fffffdffffffffffffffffffffffffffp-2, + 0x1.fffffep-2, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 80 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.p0, + 0.0 + }, + { // Entry 81 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 82 + 0x1.000000fffffdffffffffffffffffffffp-1, + 0x1.fffffep-2, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 83 + 0x1.000000fffffep-1, + 0x1.fffffep-2, + 0x1.000002p0, + 0.0 + }, + { // Entry 84 + 0x1.000000fffffep-1, + 0x1.fffffep-2, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 85 + 0x1.fffffdffffffffffffffffffffffffffp-2, + 0x1.p-1, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 86 + 0x1.fffffep-2, + 0x1.p-1, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 87 + 0x1.fffffep-2, + 0x1.p-1, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 88 + 0x1.ffffffffffffffffffffffffffffffffp-2, + 0x1.p-1, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 89 + 0x1.p-1, + 0x1.p-1, + 0x1.p0, + 0.0 + }, + { // Entry 90 + 0x1.p-1, + 0x1.p-1, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 91 + 0x1.000001ffffffffffffffffffffffffffp-1, + 0x1.p-1, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 92 + 0x1.000002p-1, + 0x1.p-1, + 0x1.000002p0, + 0.0 + }, + { // Entry 93 + 0x1.000002p-1, + 0x1.p-1, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 94 + 0x1.000000fffffdffffffffffffffffffffp-1, + 0x1.000002p-1, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 95 + 0x1.000000fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 96 + 0x1.000000fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 97 + 0x1.000001ffffffffffffffffffffffffffp-1, + 0x1.000002p-1, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 98 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.p0, + 0.0 + }, + { // Entry 99 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 100 + 0x1.000004000003ffffffffffffffffffffp-1, + 0x1.000002p-1, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 101 + 0x1.000004000004p-1, + 0x1.000002p-1, + 0x1.000002p0, + 0.0 + }, + { // Entry 102 + 0x1.000004000004p-1, + 0x1.000002p-1, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 103 + 0x1.000001fffffdp-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 104 + 0x1.000002000001p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 105 + 0x1.000002000009p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 106 + 0x1.000002fffffcp-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 107 + 0x1.000003p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 108 + 0x1.000003000008p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 109 + 0x1.000004fffffap-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 110 + 0x1.000004fffffep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 111 + 0x1.000005000006p-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 112 + 0x1.000002fffffcp-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 113 + 0x1.000003p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 114 + 0x1.000003000008p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 115 + 0x1.000003fffffcp-1, + 0x1.p0, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 116 + 0x1.000004p-1, + 0x1.p0, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 117 + 0x1.000004000008p-1, + 0x1.p0, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 118 + 0x1.000005fffffcp-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 119 + 0x1.000006p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 120 + 0x1.000006000008p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 121 + 0x1.000004fffffap-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 122 + 0x1.000004fffffep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 123 + 0x1.000005000006p-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 124 + 0x1.000005fffffcp-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 125 + 0x1.000006p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 126 + 0x1.000006000008p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 127 + 0x1.000008p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 128 + 0x1.000008000004p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 129 + 0x1.00000800000cp-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 130 + 0x1.000001fffffdp-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 131 + 0x1.000002000001p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 132 + 0x1.000002000009p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 133 + 0x1.000002fffffcp-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 134 + 0x1.000003p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 135 + 0x1.000003000008p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 136 + 0x1.000004fffffap-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 137 + 0x1.000004fffffep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 138 + 0x1.000005000006p-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 139 + 0x1.000002fffffcp-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 140 + 0x1.000003p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 141 + 0x1.000003000008p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 142 + 0x1.000003fffffcp-1, + 0x1.p0, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 143 + 0x1.000004p-1, + 0x1.p0, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 144 + 0x1.000004000008p-1, + 0x1.p0, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 145 + 0x1.000005fffffcp-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 146 + 0x1.000006p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 147 + 0x1.000006000008p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 148 + 0x1.000004fffffap-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.fffffep-24 + }, + { // Entry 149 + 0x1.000004fffffep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.p-23 + }, + { // Entry 150 + 0x1.000005000006p-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.000002p-23 + }, + { // Entry 151 + 0x1.000005fffffcp-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.fffffep-24 + }, + { // Entry 152 + 0x1.000006p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.p-23 + }, + { // Entry 153 + 0x1.000006000008p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.000002p-23 + }, + { // Entry 154 + 0x1.000008p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.fffffep-24 + }, + { // Entry 155 + 0x1.000008000004p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.p-23 + }, + { // Entry 156 + 0x1.00000800000cp-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.000002p-23 + }, + { // Entry 157 + 0x1.00000dfffff1p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.fffffep-22 + }, + { // Entry 158 + 0x1.00000e000001p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.p-21 + }, + { // Entry 159 + 0x1.00000e000021p-1, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.000002p-21 + }, + { // Entry 160 + 0x1.00000efffff0p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.fffffep-22 + }, + { // Entry 161 + 0x1.00000fp-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.p-21 + }, + { // Entry 162 + 0x1.00000f000020p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.000002p-21 + }, + { // Entry 163 + 0x1.000010ffffeep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-22 + }, + { // Entry 164 + 0x1.000010fffffep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.p-21 + }, + { // Entry 165 + 0x1.00001100001ep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.000002p-21 + }, + { // Entry 166 + 0x1.00000efffff0p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.fffffep-22 + }, + { // Entry 167 + 0x1.00000fp-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.p-21 + }, + { // Entry 168 + 0x1.00000f000020p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.000002p-21 + }, + { // Entry 169 + 0x1.00000ffffff0p-1, + 0x1.p0, + 0x1.p-1, + 0x1.fffffep-22 + }, + { // Entry 170 + 0x1.000010p-1, + 0x1.p0, + 0x1.p-1, + 0x1.p-21 + }, + { // Entry 171 + 0x1.000010000020p-1, + 0x1.p0, + 0x1.p-1, + 0x1.000002p-21 + }, + { // Entry 172 + 0x1.000011fffff0p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.fffffep-22 + }, + { // Entry 173 + 0x1.000012p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.p-21 + }, + { // Entry 174 + 0x1.000012000020p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.000002p-21 + }, + { // Entry 175 + 0x1.000010ffffeep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.fffffep-22 + }, + { // Entry 176 + 0x1.000010fffffep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.p-21 + }, + { // Entry 177 + 0x1.00001100001ep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.000002p-21 + }, + { // Entry 178 + 0x1.000011fffff0p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.fffffep-22 + }, + { // Entry 179 + 0x1.000012p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.p-21 + }, + { // Entry 180 + 0x1.000012000020p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.000002p-21 + }, + { // Entry 181 + 0x1.000013fffff4p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.fffffep-22 + }, + { // Entry 182 + 0x1.000014000004p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.p-21 + }, + { // Entry 183 + 0x1.000014000024p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.000002p-21 + }, + { // Entry 184 + 0x1.fffffep-2, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.fffffep-26 + }, + { // Entry 185 + 0x1.fffffe000002p-2, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.p-25 + }, + { // Entry 186 + 0x1.fffffe000006p-2, + 0x1.fffffep-1, + 0x1.fffffep-2, + 0x1.000002p-25 + }, + { // Entry 187 + 0x1.fffffffffffep-2, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.fffffep-26 + }, + { // Entry 188 + 0x1.p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.p-25 + }, + { // Entry 189 + 0x1.000000000002p-1, + 0x1.fffffep-1, + 0x1.p-1, + 0x1.000002p-25 + }, + { // Entry 190 + 0x1.000001fffffdp-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.fffffep-26 + }, + { // Entry 191 + 0x1.000001fffffep-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.p-25 + }, + { // Entry 192 + 0x1.000002p-1, + 0x1.fffffep-1, + 0x1.000002p-1, + 0x1.000002p-25 + }, + { // Entry 193 + 0x1.fffffffffffep-2, + 0x1.p0, + 0x1.fffffep-2, + 0x1.fffffep-26 + }, + { // Entry 194 + 0x1.p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.p-25 + }, + { // Entry 195 + 0x1.000000000002p-1, + 0x1.p0, + 0x1.fffffep-2, + 0x1.000002p-25 + }, + { // Entry 196 + 0x1.000000ffffffp-1, + 0x1.p0, + 0x1.p-1, + 0x1.fffffep-26 + }, + { // Entry 197 + 0x1.000001p-1, + 0x1.p0, + 0x1.p-1, + 0x1.p-25 + }, + { // Entry 198 + 0x1.000001000002p-1, + 0x1.p0, + 0x1.p-1, + 0x1.000002p-25 + }, + { // Entry 199 + 0x1.000002ffffffp-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.fffffep-26 + }, + { // Entry 200 + 0x1.000003p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.p-25 + }, + { // Entry 201 + 0x1.000003000002p-1, + 0x1.p0, + 0x1.000002p-1, + 0x1.000002p-25 + }, + { // Entry 202 + 0x1.000001fffffdp-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.fffffep-26 + }, + { // Entry 203 + 0x1.000001fffffep-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.p-25 + }, + { // Entry 204 + 0x1.000002p-1, + 0x1.000002p0, + 0x1.fffffep-2, + 0x1.000002p-25 + }, + { // Entry 205 + 0x1.000002ffffffp-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.fffffep-26 + }, + { // Entry 206 + 0x1.000003p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.p-25 + }, + { // Entry 207 + 0x1.000003000002p-1, + 0x1.000002p0, + 0x1.p-1, + 0x1.000002p-25 + }, + { // Entry 208 + 0x1.000005000003p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.fffffep-26 + }, + { // Entry 209 + 0x1.000005000004p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.p-25 + }, + { // Entry 210 + 0x1.000005000006p-1, + 0x1.000002p0, + 0x1.000002p-1, + 0x1.000002p-25 + }, + { // Entry 211 + 0x1.fffffc000001ffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 212 + 0x1.fffffc000002p127, + 0x1.fffffep127, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 213 + 0x1.fffffc000002p127, + 0x1.fffffep127, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 214 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 215 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p0, + 0.0 + }, + { // Entry 216 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 217 + HUGE_VALF, + 0x1.fffffep127, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 218 + HUGE_VALF, + 0x1.fffffep127, + 0x1.000002p0, + 0.0 + }, + { // Entry 219 + HUGE_VALF, + 0x1.fffffep127, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 220 + -0x1.fffffep103, + 0x1.fffffep127, + 0x1.fffffep-1, + -0x1.fffffep127 + }, + { // Entry 221 + 0.0, + 0x1.fffffep127, + 0x1.p0, + -0x1.fffffep127 + }, + { // Entry 222 + 0x1.fffffep104, + 0x1.fffffep127, + 0x1.000002p0, + -0x1.fffffep127 + }, + { // Entry 223 + 0x1.fffffa000003ffffffffffffffffffffp127, + 0x1.fffffep63, + 0x1.fffffcp63, + -0x1.p-149 + }, + { // Entry 224 + 0x1.fffffa000004p127, + 0x1.fffffep63, + 0x1.fffffcp63, + 0.0 + }, + { // Entry 225 + 0x1.fffffa000004p127, + 0x1.fffffep63, + 0x1.fffffcp63, + 0x1.p-149 + }, + { // Entry 226 + 0x1.fffffc000001ffffffffffffffffffffp127, + 0x1.fffffep63, + 0x1.fffffep63, + -0x1.p-149 + }, + { // Entry 227 + 0x1.fffffc000002p127, + 0x1.fffffep63, + 0x1.fffffep63, + 0.0 + }, + { // Entry 228 + 0x1.fffffc000002p127, + 0x1.fffffep63, + 0x1.fffffep63, + 0x1.p-149 + }, + { // Entry 229 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep63, + 0x1.p64, + -0x1.p-149 + }, + { // Entry 230 + 0x1.fffffep127, + 0x1.fffffep63, + 0x1.p64, + 0.0 + }, + { // Entry 231 + 0x1.fffffep127, + 0x1.fffffep63, + 0x1.p64, + 0x1.p-149 + }, + { // Entry 232 + -0x1.7ffffep105, + 0x1.fffffcp63, + 0x1.fffffcp63, + -0x1.fffffep127 + }, + { // Entry 233 + -0x1.fffffep104, + 0x1.fffffcp63, + 0x1.fffffep63, + -0x1.fffffep127 + }, + { // Entry 234 + -0x1.p104, + 0x1.fffffcp63, + 0x1.p64, + -0x1.fffffep127 + }, + { // Entry 235 + -0x1.fffffep104, + 0x1.fffffep63, + 0x1.fffffcp63, + -0x1.fffffep127 + }, + { // Entry 236 + -0x1.fffffep103, + 0x1.fffffep63, + 0x1.fffffep63, + -0x1.fffffep127 + }, + { // Entry 237 + 0.0, + 0x1.fffffep63, + 0x1.p64, + -0x1.fffffep127 + }, + { // Entry 238 + -0x1.p104, + 0x1.p64, + 0x1.fffffcp63, + -0x1.fffffep127 + }, + { // Entry 239 + 0.0, + 0x1.p64, + 0x1.fffffep63, + -0x1.fffffep127 + }, + { // Entry 240 + 0x1.p104, + 0x1.p64, + 0x1.p64, + -0x1.fffffep127 + }, + { // Entry 241 + -0x1.fffff8p103, + 0x1.fffffcp126, + -0x1.000002p1, + 0x1.fffffep127 + }, + { // Entry 242 + 0x1.p104, + 0x1.fffffcp126, + -0x1.p1, + 0x1.fffffep127 + }, + { // Entry 243 + 0x1.fffffep104, + 0x1.fffffcp126, + -0x1.fffffep0, + 0x1.fffffep127 + }, + { // Entry 244 + -0x1.fffffep104, + 0x1.fffffep126, + -0x1.000002p1, + 0x1.fffffep127 + }, + { // Entry 245 + 0.0, + 0x1.fffffep126, + -0x1.p1, + 0x1.fffffep127 + }, + { // Entry 246 + 0x1.fffffep103, + 0x1.fffffep126, + -0x1.fffffep0, + 0x1.fffffep127 + }, + { // Entry 247 + -0x1.80p105, + 0x1.p127, + -0x1.000002p1, + 0x1.fffffep127 + }, + { // Entry 248 + -0x1.p104, + 0x1.p127, + -0x1.p1, + 0x1.fffffep127 + }, + { // Entry 249 + 0.0, + 0x1.p127, + -0x1.fffffep0, + 0x1.fffffep127 + }, + { // Entry 250 + -HUGE_VALF, + 0x1.fffffcp126, + -0x1.000002p1, + -0x1.p-149 + }, + { // Entry 251 + -HUGE_VALF, + 0x1.fffffcp126, + -0x1.000002p1, + 0.0 + }, + { // Entry 252 + -HUGE_VALF, + 0x1.fffffcp126, + -0x1.000002p1, + 0x1.p-149 + }, + { // Entry 253 + -0x1.fffffcp127, + 0x1.fffffcp126, + -0x1.p1, + -0x1.p-149 + }, + { // Entry 254 + -0x1.fffffcp127, + 0x1.fffffcp126, + -0x1.p1, + 0.0 + }, + { // Entry 255 + -0x1.fffffbffffffffffffffffffffffffffp127, + 0x1.fffffcp126, + -0x1.p1, + 0x1.p-149 + }, + { // Entry 256 + -0x1.fffffa000004p127, + 0x1.fffffcp126, + -0x1.fffffep0, + -0x1.p-149 + }, + { // Entry 257 + -0x1.fffffa000004p127, + 0x1.fffffcp126, + -0x1.fffffep0, + 0.0 + }, + { // Entry 258 + -0x1.fffffa000003ffffffffffffffffffffp127, + 0x1.fffffcp126, + -0x1.fffffep0, + 0x1.p-149 + }, + { // Entry 259 + -HUGE_VALF, + 0x1.fffffep126, + -0x1.000002p1, + -0x1.p-149 + }, + { // Entry 260 + -HUGE_VALF, + 0x1.fffffep126, + -0x1.000002p1, + 0.0 + }, + { // Entry 261 + -HUGE_VALF, + 0x1.fffffep126, + -0x1.000002p1, + 0x1.p-149 + }, + { // Entry 262 + -0x1.fffffep127, + 0x1.fffffep126, + -0x1.p1, + -0x1.p-149 + }, + { // Entry 263 + -0x1.fffffep127, + 0x1.fffffep126, + -0x1.p1, + 0.0 + }, + { // Entry 264 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep126, + -0x1.p1, + 0x1.p-149 + }, + { // Entry 265 + -0x1.fffffc000002p127, + 0x1.fffffep126, + -0x1.fffffep0, + -0x1.p-149 + }, + { // Entry 266 + -0x1.fffffc000002p127, + 0x1.fffffep126, + -0x1.fffffep0, + 0.0 + }, + { // Entry 267 + -0x1.fffffc000001ffffffffffffffffffffp127, + 0x1.fffffep126, + -0x1.fffffep0, + 0x1.p-149 + }, + { // Entry 268 + -HUGE_VALF, + 0x1.p127, + -0x1.000002p1, + -0x1.p-149 + }, + { // Entry 269 + -HUGE_VALF, + 0x1.p127, + -0x1.000002p1, + 0.0 + }, + { // Entry 270 + -HUGE_VALF, + 0x1.p127, + -0x1.000002p1, + 0x1.p-149 + }, + { // Entry 271 + -HUGE_VALF, + 0x1.p127, + -0x1.p1, + -0x1.p-149 + }, + { // Entry 272 + -HUGE_VALF, + 0x1.p127, + -0x1.p1, + 0.0 + }, + { // Entry 273 + -HUGE_VALF, + 0x1.p127, + -0x1.p1, + 0x1.p-149 + }, + { // Entry 274 + -0x1.fffffep127, + 0x1.p127, + -0x1.fffffep0, + -0x1.p-149 + }, + { // Entry 275 + -0x1.fffffep127, + 0x1.p127, + -0x1.fffffep0, + 0.0 + }, + { // Entry 276 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p127, + -0x1.fffffep0, + 0x1.p-149 + }, + { // Entry 277 + 0x1.7ffffc800001p127, + 0x1.fffffcp126, + 0x1.fffffep-2, + 0x1.fffffcp126 + }, + { // Entry 278 + 0x1.7ffffd800001p127, + 0x1.fffffcp126, + 0x1.fffffep-2, + 0x1.fffffep126 + }, + { // Entry 279 + 0x1.7ffffe800001p127, + 0x1.fffffcp126, + 0x1.fffffep-2, + 0x1.p127 + }, + { // Entry 280 + 0x1.7ffffdp127, + 0x1.fffffcp126, + 0x1.p-1, + 0x1.fffffcp126 + }, + { // Entry 281 + 0x1.7ffffep127, + 0x1.fffffcp126, + 0x1.p-1, + 0x1.fffffep126 + }, + { // Entry 282 + 0x1.7fffffp127, + 0x1.fffffcp126, + 0x1.p-1, + 0x1.p127 + }, + { // Entry 283 + 0x1.7ffffdfffffep127, + 0x1.fffffcp126, + 0x1.000002p-1, + 0x1.fffffcp126 + }, + { // Entry 284 + 0x1.7ffffefffffep127, + 0x1.fffffcp126, + 0x1.000002p-1, + 0x1.fffffep126 + }, + { // Entry 285 + 0x1.7ffffffffffep127, + 0x1.fffffcp126, + 0x1.000002p-1, + 0x1.p127 + }, + { // Entry 286 + 0x1.7ffffd00000080p127, + 0x1.fffffep126, + 0x1.fffffep-2, + 0x1.fffffcp126 + }, + { // Entry 287 + 0x1.7ffffe00000080p127, + 0x1.fffffep126, + 0x1.fffffep-2, + 0x1.fffffep126 + }, + { // Entry 288 + 0x1.7fffff00000080p127, + 0x1.fffffep126, + 0x1.fffffep-2, + 0x1.p127 + }, + { // Entry 289 + 0x1.7ffffd80p127, + 0x1.fffffep126, + 0x1.p-1, + 0x1.fffffcp126 + }, + { // Entry 290 + 0x1.7ffffe80p127, + 0x1.fffffep126, + 0x1.p-1, + 0x1.fffffep126 + }, + { // Entry 291 + 0x1.7fffff80p127, + 0x1.fffffep126, + 0x1.p-1, + 0x1.p127 + }, + { // Entry 292 + 0x1.7ffffe7fffffp127, + 0x1.fffffep126, + 0x1.000002p-1, + 0x1.fffffcp126 + }, + { // Entry 293 + 0x1.7fffff7fffffp127, + 0x1.fffffep126, + 0x1.000002p-1, + 0x1.fffffep126 + }, + { // Entry 294 + 0x1.8000007fffffp127, + 0x1.fffffep126, + 0x1.000002p-1, + 0x1.p127 + }, + { // Entry 295 + 0x1.7ffffd80p127, + 0x1.p127, + 0x1.fffffep-2, + 0x1.fffffcp126 + }, + { // Entry 296 + 0x1.7ffffe80p127, + 0x1.p127, + 0x1.fffffep-2, + 0x1.fffffep126 + }, + { // Entry 297 + 0x1.7fffff80p127, + 0x1.p127, + 0x1.fffffep-2, + 0x1.p127 + }, + { // Entry 298 + 0x1.7ffffep127, + 0x1.p127, + 0x1.p-1, + 0x1.fffffcp126 + }, + { // Entry 299 + 0x1.7fffffp127, + 0x1.p127, + 0x1.p-1, + 0x1.fffffep126 + }, + { // Entry 300 + 0x1.80p127, + 0x1.p127, + 0x1.p-1, + 0x1.p127 + }, + { // Entry 301 + 0x1.7fffffp127, + 0x1.p127, + 0x1.000002p-1, + 0x1.fffffcp126 + }, + { // Entry 302 + 0x1.80p127, + 0x1.p127, + 0x1.000002p-1, + 0x1.fffffep126 + }, + { // Entry 303 + 0x1.800001p127, + 0x1.p127, + 0x1.000002p-1, + 0x1.p127 + }, + { // Entry 304 + 0x1.fffffb000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 305 + 0x1.fffffc000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 306 + 0x1.fffffd000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 307 + 0x1.fffffcp127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 308 + 0x1.fffffdp127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 309 + 0x1.fffffep127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.p127 + }, + { // Entry 310 + 0x1.fffffdfffffcp127, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 311 + 0x1.fffffefffffcp127, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 312 + HUGE_VALF, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 313 + 0x1.fffffc000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 314 + 0x1.fffffd000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 315 + 0x1.fffffe000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 316 + 0x1.fffffdp127, + 0x1.fffffep126, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 317 + 0x1.fffffep127, + 0x1.fffffep126, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 318 + HUGE_VALF, + 0x1.fffffep126, + 0x1.p0, + 0x1.p127 + }, + { // Entry 319 + 0x1.fffffefffffep127, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 320 + HUGE_VALF, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 321 + HUGE_VALF, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 322 + 0x1.fffffdp127, + 0x1.p127, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 323 + 0x1.fffffep127, + 0x1.p127, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 324 + HUGE_VALF, + 0x1.p127, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 325 + 0x1.fffffep127, + 0x1.p127, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 326 + HUGE_VALF, + 0x1.p127, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 327 + HUGE_VALF, + 0x1.p127, + 0x1.p0, + 0x1.p127 + }, + { // Entry 328 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 329 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 330 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 331 + 0x1.fffffb000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 332 + 0x1.fffffc000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 333 + 0x1.fffffd000002p127, + 0x1.fffffcp126, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 334 + 0x1.fffffcp127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 335 + 0x1.fffffdp127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 336 + 0x1.fffffep127, + 0x1.fffffcp126, + 0x1.p0, + 0x1.p127 + }, + { // Entry 337 + 0x1.fffffdfffffcp127, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 338 + 0x1.fffffefffffcp127, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 339 + HUGE_VALF, + 0x1.fffffcp126, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 340 + 0x1.fffffc000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 341 + 0x1.fffffd000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 342 + 0x1.fffffe000001p127, + 0x1.fffffep126, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 343 + 0x1.fffffdp127, + 0x1.fffffep126, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 344 + 0x1.fffffep127, + 0x1.fffffep126, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 345 + HUGE_VALF, + 0x1.fffffep126, + 0x1.p0, + 0x1.p127 + }, + { // Entry 346 + 0x1.fffffefffffep127, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 347 + HUGE_VALF, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 348 + HUGE_VALF, + 0x1.fffffep126, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 349 + 0x1.fffffdp127, + 0x1.p127, + 0x1.fffffep-1, + 0x1.fffffcp126 + }, + { // Entry 350 + 0x1.fffffep127, + 0x1.p127, + 0x1.fffffep-1, + 0x1.fffffep126 + }, + { // Entry 351 + HUGE_VALF, + 0x1.p127, + 0x1.fffffep-1, + 0x1.p127 + }, + { // Entry 352 + 0x1.fffffep127, + 0x1.p127, + 0x1.p0, + 0x1.fffffcp126 + }, + { // Entry 353 + HUGE_VALF, + 0x1.p127, + 0x1.p0, + 0x1.fffffep126 + }, + { // Entry 354 + HUGE_VALF, + 0x1.p127, + 0x1.p0, + 0x1.p127 + }, + { // Entry 355 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.fffffcp126 + }, + { // Entry 356 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.fffffep126 + }, + { // Entry 357 + HUGE_VALF, + 0x1.p127, + 0x1.000002p0, + 0x1.p127 + }, + { // Entry 358 + 0x1.fffffd000001p0, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 359 + 0x1.fffffe000001p0, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 360 + 0x1.00000000000080p1, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 361 + 0x1.fffffep0, + 0x1.fffffep-1, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 362 + 0x1.ffffffp0, + 0x1.fffffep-1, + 0x1.p0, + 0x1.p0 + }, + { // Entry 363 + 0x1.00000080p1, + 0x1.fffffep-1, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 364 + 0x1.fffffffffffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 365 + 0x1.0000007fffffp1, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 366 + 0x1.0000017fffffp1, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 367 + 0x1.fffffep0, + 0x1.p0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 368 + 0x1.ffffffp0, + 0x1.p0, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 369 + 0x1.00000080p1, + 0x1.p0, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 370 + 0x1.ffffffp0, + 0x1.p0, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 371 + 0x1.p1, + 0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 372 + 0x1.000001p1, + 0x1.p0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 373 + 0x1.00000080p1, + 0x1.p0, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 374 + 0x1.000001p1, + 0x1.p0, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 375 + 0x1.000002p1, + 0x1.p0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 376 + 0x1.fffffffffffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 377 + 0x1.0000007fffffp1, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 378 + 0x1.0000017fffffp1, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 379 + 0x1.00000080p1, + 0x1.000002p0, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 380 + 0x1.000001p1, + 0x1.000002p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 381 + 0x1.000002p1, + 0x1.000002p0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 382 + 0x1.000001800002p1, + 0x1.000002p0, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 383 + 0x1.000002000002p1, + 0x1.000002p0, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 384 + 0x1.000003000002p1, + 0x1.000002p0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 385 + -0x1.fffffep-24, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 386 + -0x1.fffffcp-25, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 387 + 0x1.000002p-24, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 388 + 0.0, + 0x1.fffffep-1, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 389 + 0x1.p-24, + 0x1.fffffep-1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 390 + 0x1.80p-23, + 0x1.fffffep-1, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 391 + 0x1.fffffep-25, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 392 + 0x1.ffffffp-24, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 393 + 0x1.ffffff80p-23, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 394 + -0x1.80p-23, + 0x1.p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 395 + -0x1.p-23, + 0x1.p0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 396 + 0.0, + 0x1.p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 397 + -0x1.p-24, + 0x1.p0, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 398 + 0.0, + 0x1.p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 399 + 0x1.p-23, + 0x1.p0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 400 + 0.0, + 0x1.p0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 401 + 0x1.p-24, + 0x1.p0, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 402 + 0x1.80p-23, + 0x1.p0, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 403 + -0x1.400001p-22, + 0x1.000002p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 404 + -0x1.000001p-22, + 0x1.000002p0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 405 + -0x1.000002p-23, + 0x1.000002p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 406 + -0x1.80p-23, + 0x1.000002p0, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 407 + -0x1.p-23, + 0x1.000002p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 408 + 0.0, + 0x1.000002p0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 409 + -0x1.fffffep-24, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 410 + -0x1.fffffcp-25, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 411 + 0x1.000002p-24, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 412 + 0x1.fffffc000001ffffffffffffffffffffp-1, + 0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 413 + 0x1.fffffc000002p-1, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 414 + 0x1.fffffc000002p-1, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 415 + 0x1.fffffdffffffffffffffffffffffffffp-1, + 0x1.fffffep-1, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 416 + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p0, + 0.0 + }, + { // Entry 417 + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 418 + 0x1.000000fffffdffffffffffffffffffffp0, + 0x1.fffffep-1, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 419 + 0x1.000000fffffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0.0 + }, + { // Entry 420 + 0x1.000000fffffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 421 + 0x1.fffffdffffffffffffffffffffffffffp-1, + 0x1.p0, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 422 + 0x1.fffffep-1, + 0x1.p0, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 423 + 0x1.fffffep-1, + 0x1.p0, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 424 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p0, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 425 + 0x1.p0, + 0x1.p0, + 0x1.p0, + 0.0 + }, + { // Entry 426 + 0x1.p0, + 0x1.p0, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 427 + 0x1.000001ffffffffffffffffffffffffffp0, + 0x1.p0, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 428 + 0x1.000002p0, + 0x1.p0, + 0x1.000002p0, + 0.0 + }, + { // Entry 429 + 0x1.000002p0, + 0x1.p0, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 430 + 0x1.000000fffffdffffffffffffffffffffp0, + 0x1.000002p0, + 0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 431 + 0x1.000000fffffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0.0 + }, + { // Entry 432 + 0x1.000000fffffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 433 + 0x1.000001ffffffffffffffffffffffffffp0, + 0x1.000002p0, + 0x1.p0, + -0x1.p-149 + }, + { // Entry 434 + 0x1.000002p0, + 0x1.000002p0, + 0x1.p0, + 0.0 + }, + { // Entry 435 + 0x1.000002p0, + 0x1.000002p0, + 0x1.p0, + 0x1.p-149 + }, + { // Entry 436 + 0x1.000004000003ffffffffffffffffffffp0, + 0x1.000002p0, + 0x1.000002p0, + -0x1.p-149 + }, + { // Entry 437 + 0x1.000004000004p0, + 0x1.000002p0, + 0x1.000002p0, + 0.0 + }, + { // Entry 438 + 0x1.000004000004p0, + 0x1.000002p0, + 0x1.000002p0, + 0x1.p-149 + }, + { // Entry 439 + -0x1.000000fffffep0, + 0x1.fffffep-1, + -0x1.000002p0, + -0x1.p-149 + }, + { // Entry 440 + -0x1.000000fffffep0, + 0x1.fffffep-1, + -0x1.000002p0, + 0.0 + }, + { // Entry 441 + -0x1.000000fffffdffffffffffffffffffffp0, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.p-149 + }, + { // Entry 442 + -0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.p0, + -0x1.p-149 + }, + { // Entry 443 + -0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.p0, + 0.0 + }, + { // Entry 444 + -0x1.fffffdffffffffffffffffffffffffffp-1, + 0x1.fffffep-1, + -0x1.p0, + 0x1.p-149 + }, + { // Entry 445 + -0x1.fffffc000002p-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 446 + -0x1.fffffc000002p-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0.0 + }, + { // Entry 447 + -0x1.fffffc000001ffffffffffffffffffffp-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 448 + -0x1.000002p0, + 0x1.p0, + -0x1.000002p0, + -0x1.p-149 + }, + { // Entry 449 + -0x1.000002p0, + 0x1.p0, + -0x1.000002p0, + 0.0 + }, + { // Entry 450 + -0x1.000001ffffffffffffffffffffffffffp0, + 0x1.p0, + -0x1.000002p0, + 0x1.p-149 + }, + { // Entry 451 + -0x1.p0, + 0x1.p0, + -0x1.p0, + -0x1.p-149 + }, + { // Entry 452 + -0x1.p0, + 0x1.p0, + -0x1.p0, + 0.0 + }, + { // Entry 453 + -0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p0, + -0x1.p0, + 0x1.p-149 + }, + { // Entry 454 + -0x1.fffffep-1, + 0x1.p0, + -0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 455 + -0x1.fffffep-1, + 0x1.p0, + -0x1.fffffep-1, + 0.0 + }, + { // Entry 456 + -0x1.fffffdffffffffffffffffffffffffffp-1, + 0x1.p0, + -0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 457 + -0x1.000004000004p0, + 0x1.000002p0, + -0x1.000002p0, + -0x1.p-149 + }, + { // Entry 458 + -0x1.000004000004p0, + 0x1.000002p0, + -0x1.000002p0, + 0.0 + }, + { // Entry 459 + -0x1.000004000003ffffffffffffffffffffp0, + 0x1.000002p0, + -0x1.000002p0, + 0x1.p-149 + }, + { // Entry 460 + -0x1.000002p0, + 0x1.000002p0, + -0x1.p0, + -0x1.p-149 + }, + { // Entry 461 + -0x1.000002p0, + 0x1.000002p0, + -0x1.p0, + 0.0 + }, + { // Entry 462 + -0x1.000001ffffffffffffffffffffffffffp0, + 0x1.000002p0, + -0x1.p0, + 0x1.p-149 + }, + { // Entry 463 + -0x1.000000fffffep0, + 0x1.000002p0, + -0x1.fffffep-1, + -0x1.p-149 + }, + { // Entry 464 + -0x1.000000fffffep0, + 0x1.000002p0, + -0x1.fffffep-1, + 0.0 + }, + { // Entry 465 + -0x1.000000fffffdffffffffffffffffffffp0, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.p-149 + }, + { // Entry 466 + 0x1.000ffdfff001p0, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 467 + 0x1.000ffe000001p0, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 468 + 0x1.000ffe002001p0, + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 469 + 0x1.000ffefff0p0, + 0x1.fffffep-1, + 0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 470 + 0x1.000fffp0, + 0x1.fffffep-1, + 0x1.p0, + 0x1.p-12 + }, + { // Entry 471 + 0x1.000fff0020p0, + 0x1.fffffep-1, + 0x1.p0, + 0x1.000002p-12 + }, + { // Entry 472 + 0x1.001000ffeffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 473 + 0x1.001000fffffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.p-12 + }, + { // Entry 474 + 0x1.001001001ffep0, + 0x1.fffffep-1, + 0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 475 + 0x1.000ffefff0p0, + 0x1.p0, + 0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 476 + 0x1.000fffp0, + 0x1.p0, + 0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 477 + 0x1.000fff0020p0, + 0x1.p0, + 0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 478 + 0x1.000ffffff0p0, + 0x1.p0, + 0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 479 + 0x1.0010p0, + 0x1.p0, + 0x1.p0, + 0x1.p-12 + }, + { // Entry 480 + 0x1.0010000020p0, + 0x1.p0, + 0x1.p0, + 0x1.000002p-12 + }, + { // Entry 481 + 0x1.001001fff0p0, + 0x1.p0, + 0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 482 + 0x1.001002p0, + 0x1.p0, + 0x1.000002p0, + 0x1.p-12 + }, + { // Entry 483 + 0x1.0010020020p0, + 0x1.p0, + 0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 484 + 0x1.001000ffeffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 485 + 0x1.001000fffffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 486 + 0x1.001001001ffep0, + 0x1.000002p0, + 0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 487 + 0x1.001001fff0p0, + 0x1.000002p0, + 0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 488 + 0x1.001002p0, + 0x1.000002p0, + 0x1.p0, + 0x1.p-12 + }, + { // Entry 489 + 0x1.0010020020p0, + 0x1.000002p0, + 0x1.p0, + 0x1.000002p-12 + }, + { // Entry 490 + 0x1.001003fff004p0, + 0x1.000002p0, + 0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 491 + 0x1.001004000004p0, + 0x1.000002p0, + 0x1.000002p0, + 0x1.p-12 + }, + { // Entry 492 + 0x1.001004002004p0, + 0x1.000002p0, + 0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 493 + -0x1.ffe002001ffcp-1, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 494 + -0x1.ffe001fffffcp-1, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.p-12 + }, + { // Entry 495 + -0x1.ffe001ffbffcp-1, + 0x1.fffffep-1, + -0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 496 + -0x1.ffdffe0020p-1, + 0x1.fffffep-1, + -0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 497 + -0x1.ffdffep-1, + 0x1.fffffep-1, + -0x1.p0, + 0x1.p-12 + }, + { // Entry 498 + -0x1.ffdffdffc0p-1, + 0x1.fffffep-1, + -0x1.p0, + 0x1.000002p-12 + }, + { // Entry 499 + -0x1.ffdffc002002p-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 500 + -0x1.ffdffc000002p-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 501 + -0x1.ffdffbffc002p-1, + 0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 502 + -0x1.ffe0040020p-1, + 0x1.p0, + -0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 503 + -0x1.ffe004p-1, + 0x1.p0, + -0x1.000002p0, + 0x1.p-12 + }, + { // Entry 504 + -0x1.ffe003ffc0p-1, + 0x1.p0, + -0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 505 + -0x1.ffe0000020p-1, + 0x1.p0, + -0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 506 + -0x1.ffe0p-1, + 0x1.p0, + -0x1.p0, + 0x1.p-12 + }, + { // Entry 507 + -0x1.ffdfffffc0p-1, + 0x1.p0, + -0x1.p0, + 0x1.000002p-12 + }, + { // Entry 508 + -0x1.ffdffe0020p-1, + 0x1.p0, + -0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 509 + -0x1.ffdffep-1, + 0x1.p0, + -0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 510 + -0x1.ffdffdffc0p-1, + 0x1.p0, + -0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 511 + -0x1.ffe008002008p-1, + 0x1.000002p0, + -0x1.000002p0, + 0x1.fffffep-13 + }, + { // Entry 512 + -0x1.ffe008000008p-1, + 0x1.000002p0, + -0x1.000002p0, + 0x1.p-12 + }, + { // Entry 513 + -0x1.ffe007ffc008p-1, + 0x1.000002p0, + -0x1.000002p0, + 0x1.000002p-12 + }, + { // Entry 514 + -0x1.ffe0040020p-1, + 0x1.000002p0, + -0x1.p0, + 0x1.fffffep-13 + }, + { // Entry 515 + -0x1.ffe004p-1, + 0x1.000002p0, + -0x1.p0, + 0x1.p-12 + }, + { // Entry 516 + -0x1.ffe003ffc0p-1, + 0x1.000002p0, + -0x1.p0, + 0x1.000002p-12 + }, + { // Entry 517 + -0x1.ffe002001ffcp-1, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.fffffep-13 + }, + { // Entry 518 + -0x1.ffe001fffffcp-1, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.p-12 + }, + { // Entry 519 + -0x1.ffe001ffbffcp-1, + 0x1.000002p0, + -0x1.fffffep-1, + 0x1.000002p-12 + }, + { // Entry 520 + -0x1.ffffff80p0, + 0x1.fffffep22, + 0x1.fffffep-1, + -0x1.000002p23 + }, + { // Entry 521 + -0x1.ffffffp-1, + 0x1.fffffep22, + 0x1.fffffep-1, + -0x1.p23 + }, + { // Entry 522 + -0x1.fffffep-2, + 0x1.fffffep22, + 0x1.fffffep-1, + -0x1.fffffep22 + }, + { // Entry 523 + -0x1.80p0, + 0x1.fffffep22, + 0x1.p0, + -0x1.000002p23 + }, + { // Entry 524 + -0x1.p-1, + 0x1.fffffep22, + 0x1.p0, + -0x1.p23 + }, + { // Entry 525 + 0.0, + 0x1.fffffep22, + 0x1.p0, + -0x1.fffffep22 + }, + { // Entry 526 + -0x1.000002p-1, + 0x1.fffffep22, + 0x1.000002p0, + -0x1.000002p23 + }, + { // Entry 527 + 0x1.fffffcp-2, + 0x1.fffffep22, + 0x1.000002p0, + -0x1.p23 + }, + { // Entry 528 + 0x1.fffffep-1, + 0x1.fffffep22, + 0x1.000002p0, + -0x1.fffffep22 + }, + { // Entry 529 + -0x1.80p0, + 0x1.p23, + 0x1.fffffep-1, + -0x1.000002p23 + }, + { // Entry 530 + -0x1.p-1, + 0x1.p23, + 0x1.fffffep-1, + -0x1.p23 + }, + { // Entry 531 + 0.0, + 0x1.p23, + 0x1.fffffep-1, + -0x1.fffffep22 + }, + { // Entry 532 + -0x1.p0, + 0x1.p23, + 0x1.p0, + -0x1.000002p23 + }, + { // Entry 533 + 0.0, + 0x1.p23, + 0x1.p0, + -0x1.p23 + }, + { // Entry 534 + 0x1.p-1, + 0x1.p23, + 0x1.p0, + -0x1.fffffep22 + }, + { // Entry 535 + 0.0, + 0x1.p23, + 0x1.000002p0, + -0x1.000002p23 + }, + { // Entry 536 + 0x1.p0, + 0x1.p23, + 0x1.000002p0, + -0x1.p23 + }, + { // Entry 537 + 0x1.80p0, + 0x1.p23, + 0x1.000002p0, + -0x1.fffffep22 + }, + { // Entry 538 + -0x1.000002p-1, + 0x1.000002p23, + 0x1.fffffep-1, + -0x1.000002p23 + }, + { // Entry 539 + 0x1.fffffcp-2, + 0x1.000002p23, + 0x1.fffffep-1, + -0x1.p23 + }, + { // Entry 540 + 0x1.fffffep-1, + 0x1.000002p23, + 0x1.fffffep-1, + -0x1.fffffep22 + }, + { // Entry 541 + 0.0, + 0x1.000002p23, + 0x1.p0, + -0x1.000002p23 + }, + { // Entry 542 + 0x1.p0, + 0x1.000002p23, + 0x1.p0, + -0x1.p23 + }, + { // Entry 543 + 0x1.80p0, + 0x1.000002p23, + 0x1.p0, + -0x1.fffffep22 + }, + { // Entry 544 + 0x1.000002p0, + 0x1.000002p23, + 0x1.000002p0, + -0x1.000002p23 + }, + { // Entry 545 + 0x1.000001p1, + 0x1.000002p23, + 0x1.000002p0, + -0x1.p23 + }, + { // Entry 546 + 0x1.400001p1, + 0x1.000002p23, + 0x1.000002p0, + -0x1.fffffep22 + }, + { // Entry 547 + 0x1.08p-5, + 0x1.p-5, + 0x1.p-5, + 0x1.p-5 + }, + { // Entry 548 + 0x1.0040p0, + 0x1.p-5, + 0x1.p-5, + 0x1.p0 + }, + { // Entry 549 + 0x1.p-4, + 0x1.p-5, + 0x1.p0, + 0x1.p-5 + }, + { // Entry 550 + 0x1.08p0, + 0x1.p-5, + 0x1.p0, + 0x1.p0 + }, + { // Entry 551 + 0x1.p-4, + 0x1.p0, + 0x1.p-5, + 0x1.p-5 + }, + { // Entry 552 + 0x1.08p0, + 0x1.p0, + 0x1.p-5, + 0x1.p0 + }, + { // Entry 553 + 0x1.08p0, + 0x1.p0, + 0x1.p0, + 0x1.p-5 + }, + { // Entry 554 + 0x1.p1, + 0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 555 + 0x1.20p-2, + 0x1.p-5, + 0x1.p3, + 0x1.p-5 + }, + { // Entry 556 + 0x1.40p0, + 0x1.p-5, + 0x1.p3, + 0x1.p0 + }, + { // Entry 557 + 0x1.08p0, + 0x1.p-5, + 0x1.p5, + 0x1.p-5 + }, + { // Entry 558 + 0x1.p1, + 0x1.p-5, + 0x1.p5, + 0x1.p0 + }, + { // Entry 559 + 0x1.01p3, + 0x1.p0, + 0x1.p3, + 0x1.p-5 + }, + { // Entry 560 + 0x1.20p3, + 0x1.p0, + 0x1.p3, + 0x1.p0 + }, + { // Entry 561 + 0x1.0040p5, + 0x1.p0, + 0x1.p5, + 0x1.p-5 + }, + { // Entry 562 + 0x1.08p5, + 0x1.p0, + 0x1.p5, + 0x1.p0 + }, + { // Entry 563 + 0x1.0040p5, + 0x1.p-5, + 0x1.p10, + 0x1.p-5 + }, + { // Entry 564 + 0x1.08p5, + 0x1.p-5, + 0x1.p10, + 0x1.p0 + }, + { // Entry 565 + 0x1.0010p7, + 0x1.p-5, + 0x1.p12, + 0x1.p-5 + }, + { // Entry 566 + 0x1.02p7, + 0x1.p-5, + 0x1.p12, + 0x1.p0 + }, + { // Entry 567 + 0x1.0002p10, + 0x1.p0, + 0x1.p10, + 0x1.p-5 + }, + { // Entry 568 + 0x1.0040p10, + 0x1.p0, + 0x1.p10, + 0x1.p0 + }, + { // Entry 569 + 0x1.000080p12, + 0x1.p0, + 0x1.p12, + 0x1.p-5 + }, + { // Entry 570 + 0x1.0010p12, + 0x1.p0, + 0x1.p12, + 0x1.p0 + }, + { // Entry 571 + 0x1.0008p3, + 0x1.p-5, + 0x1.p-5, + 0x1.p3 + }, + { // Entry 572 + 0x1.0002p5, + 0x1.p-5, + 0x1.p-5, + 0x1.p5 + }, + { // Entry 573 + 0x1.01p3, + 0x1.p-5, + 0x1.p0, + 0x1.p3 + }, + { // Entry 574 + 0x1.0040p5, + 0x1.p-5, + 0x1.p0, + 0x1.p5 + }, + { // Entry 575 + 0x1.01p3, + 0x1.p0, + 0x1.p-5, + 0x1.p3 + }, + { // Entry 576 + 0x1.0040p5, + 0x1.p0, + 0x1.p-5, + 0x1.p5 + }, + { // Entry 577 + 0x1.20p3, + 0x1.p0, + 0x1.p0, + 0x1.p3 + }, + { // Entry 578 + 0x1.08p5, + 0x1.p0, + 0x1.p0, + 0x1.p5 + }, + { // Entry 579 + 0x1.08p3, + 0x1.p-5, + 0x1.p3, + 0x1.p3 + }, + { // Entry 580 + 0x1.02p5, + 0x1.p-5, + 0x1.p3, + 0x1.p5 + }, + { // Entry 581 + 0x1.20p3, + 0x1.p-5, + 0x1.p5, + 0x1.p3 + }, + { // Entry 582 + 0x1.08p5, + 0x1.p-5, + 0x1.p5, + 0x1.p5 + }, + { // Entry 583 + 0x1.p4, + 0x1.p0, + 0x1.p3, + 0x1.p3 + }, + { // Entry 584 + 0x1.40p5, + 0x1.p0, + 0x1.p3, + 0x1.p5 + }, + { // Entry 585 + 0x1.40p5, + 0x1.p0, + 0x1.p5, + 0x1.p3 + }, + { // Entry 586 + 0x1.p6, + 0x1.p0, + 0x1.p5, + 0x1.p5 + }, + { // Entry 587 + 0x1.40p5, + 0x1.p-5, + 0x1.p10, + 0x1.p3 + }, + { // Entry 588 + 0x1.p6, + 0x1.p-5, + 0x1.p10, + 0x1.p5 + }, + { // Entry 589 + 0x1.10p7, + 0x1.p-5, + 0x1.p12, + 0x1.p3 + }, + { // Entry 590 + 0x1.40p7, + 0x1.p-5, + 0x1.p12, + 0x1.p5 + }, + { // Entry 591 + 0x1.02p10, + 0x1.p0, + 0x1.p10, + 0x1.p3 + }, + { // Entry 592 + 0x1.08p10, + 0x1.p0, + 0x1.p10, + 0x1.p5 + }, + { // Entry 593 + 0x1.0080p12, + 0x1.p0, + 0x1.p12, + 0x1.p3 + }, + { // Entry 594 + 0x1.02p12, + 0x1.p0, + 0x1.p12, + 0x1.p5 + }, + { // Entry 595 + 0x1.000010p10, + 0x1.p-5, + 0x1.p-5, + 0x1.p10 + }, + { // Entry 596 + 0x1.000004p12, + 0x1.p-5, + 0x1.p-5, + 0x1.p12 + }, + { // Entry 597 + 0x1.0002p10, + 0x1.p-5, + 0x1.p0, + 0x1.p10 + }, + { // Entry 598 + 0x1.000080p12, + 0x1.p-5, + 0x1.p0, + 0x1.p12 + }, + { // Entry 599 + 0x1.0002p10, + 0x1.p0, + 0x1.p-5, + 0x1.p10 + }, + { // Entry 600 + 0x1.000080p12, + 0x1.p0, + 0x1.p-5, + 0x1.p12 + }, + { // Entry 601 + 0x1.0040p10, + 0x1.p0, + 0x1.p0, + 0x1.p10 + }, + { // Entry 602 + 0x1.0010p12, + 0x1.p0, + 0x1.p0, + 0x1.p12 + }, + { // Entry 603 + 0x1.0010p10, + 0x1.p-5, + 0x1.p3, + 0x1.p10 + }, + { // Entry 604 + 0x1.0004p12, + 0x1.p-5, + 0x1.p3, + 0x1.p12 + }, + { // Entry 605 + 0x1.0040p10, + 0x1.p-5, + 0x1.p5, + 0x1.p10 + }, + { // Entry 606 + 0x1.0010p12, + 0x1.p-5, + 0x1.p5, + 0x1.p12 + }, + { // Entry 607 + 0x1.02p10, + 0x1.p0, + 0x1.p3, + 0x1.p10 + }, + { // Entry 608 + 0x1.0080p12, + 0x1.p0, + 0x1.p3, + 0x1.p12 + }, + { // Entry 609 + 0x1.08p10, + 0x1.p0, + 0x1.p5, + 0x1.p10 + }, + { // Entry 610 + 0x1.02p12, + 0x1.p0, + 0x1.p5, + 0x1.p12 + }, + { // Entry 611 + 0x1.08p10, + 0x1.p-5, + 0x1.p10, + 0x1.p10 + }, + { // Entry 612 + 0x1.02p12, + 0x1.p-5, + 0x1.p10, + 0x1.p12 + }, + { // Entry 613 + 0x1.20p10, + 0x1.p-5, + 0x1.p12, + 0x1.p10 + }, + { // Entry 614 + 0x1.08p12, + 0x1.p-5, + 0x1.p12, + 0x1.p12 + }, + { // Entry 615 + 0x1.p11, + 0x1.p0, + 0x1.p10, + 0x1.p10 + }, + { // Entry 616 + 0x1.40p12, + 0x1.p0, + 0x1.p10, + 0x1.p12 + }, + { // Entry 617 + 0x1.40p12, + 0x1.p0, + 0x1.p12, + 0x1.p10 + }, + { // Entry 618 + 0x1.p13, + 0x1.p0, + 0x1.p12, + 0x1.p12 + }, + { // Entry 619 + 0x1.0020p6, + 0x1.p3, + 0x1.p3, + 0x1.p-5 + }, + { // Entry 620 + 0x1.04p6, + 0x1.p3, + 0x1.p3, + 0x1.p0 + }, + { // Entry 621 + 0x1.0008p8, + 0x1.p3, + 0x1.p5, + 0x1.p-5 + }, + { // Entry 622 + 0x1.01p8, + 0x1.p3, + 0x1.p5, + 0x1.p0 + }, + { // Entry 623 + 0x1.0008p8, + 0x1.p5, + 0x1.p3, + 0x1.p-5 + }, + { // Entry 624 + 0x1.01p8, + 0x1.p5, + 0x1.p3, + 0x1.p0 + }, + { // Entry 625 + 0x1.0002p10, + 0x1.p5, + 0x1.p5, + 0x1.p-5 + }, + { // Entry 626 + 0x1.0040p10, + 0x1.p5, + 0x1.p5, + 0x1.p0 + }, + { // Entry 627 + 0x1.20p6, + 0x1.p3, + 0x1.p3, + 0x1.p3 + }, + { // Entry 628 + 0x1.80p6, + 0x1.p3, + 0x1.p3, + 0x1.p5 + }, + { // Entry 629 + 0x1.08p8, + 0x1.p3, + 0x1.p5, + 0x1.p3 + }, + { // Entry 630 + 0x1.20p8, + 0x1.p3, + 0x1.p5, + 0x1.p5 + }, + { // Entry 631 + 0x1.08p8, + 0x1.p5, + 0x1.p3, + 0x1.p3 + }, + { // Entry 632 + 0x1.20p8, + 0x1.p5, + 0x1.p3, + 0x1.p5 + }, + { // Entry 633 + 0x1.02p10, + 0x1.p5, + 0x1.p5, + 0x1.p3 + }, + { // Entry 634 + 0x1.08p10, + 0x1.p5, + 0x1.p5, + 0x1.p5 + }, + { // Entry 635 + 0x1.10p10, + 0x1.p3, + 0x1.p3, + 0x1.p10 + }, + { // Entry 636 + 0x1.04p12, + 0x1.p3, + 0x1.p3, + 0x1.p12 + }, + { // Entry 637 + 0x1.40p10, + 0x1.p3, + 0x1.p5, + 0x1.p10 + }, + { // Entry 638 + 0x1.10p12, + 0x1.p3, + 0x1.p5, + 0x1.p12 + }, + { // Entry 639 + 0x1.40p10, + 0x1.p5, + 0x1.p3, + 0x1.p10 + }, + { // Entry 640 + 0x1.10p12, + 0x1.p5, + 0x1.p3, + 0x1.p12 + }, + { // Entry 641 + 0x1.p11, + 0x1.p5, + 0x1.p5, + 0x1.p10 + }, + { // Entry 642 + 0x1.40p12, + 0x1.p5, + 0x1.p5, + 0x1.p12 + }, + { // Entry 643 + 0x1.000040p13, + 0x1.p3, + 0x1.p10, + 0x1.p-5 + }, + { // Entry 644 + 0x1.0008p13, + 0x1.p3, + 0x1.p10, + 0x1.p0 + }, + { // Entry 645 + 0x1.000010p15, + 0x1.p3, + 0x1.p12, + 0x1.p-5 + }, + { // Entry 646 + 0x1.0002p15, + 0x1.p3, + 0x1.p12, + 0x1.p0 + }, + { // Entry 647 + 0x1.000010p15, + 0x1.p5, + 0x1.p10, + 0x1.p-5 + }, + { // Entry 648 + 0x1.0002p15, + 0x1.p5, + 0x1.p10, + 0x1.p0 + }, + { // Entry 649 + 0x1.000004p17, + 0x1.p5, + 0x1.p12, + 0x1.p-5 + }, + { // Entry 650 + 0x1.000080p17, + 0x1.p5, + 0x1.p12, + 0x1.p0 + }, + { // Entry 651 + 0x1.0040p13, + 0x1.p3, + 0x1.p10, + 0x1.p3 + }, + { // Entry 652 + 0x1.01p13, + 0x1.p3, + 0x1.p10, + 0x1.p5 + }, + { // Entry 653 + 0x1.0010p15, + 0x1.p3, + 0x1.p12, + 0x1.p3 + }, + { // Entry 654 + 0x1.0040p15, + 0x1.p3, + 0x1.p12, + 0x1.p5 + }, + { // Entry 655 + 0x1.0010p15, + 0x1.p5, + 0x1.p10, + 0x1.p3 + }, + { // Entry 656 + 0x1.0040p15, + 0x1.p5, + 0x1.p10, + 0x1.p5 + }, + { // Entry 657 + 0x1.0004p17, + 0x1.p5, + 0x1.p12, + 0x1.p3 + }, + { // Entry 658 + 0x1.0010p17, + 0x1.p5, + 0x1.p12, + 0x1.p5 + }, + { // Entry 659 + 0x1.20p13, + 0x1.p3, + 0x1.p10, + 0x1.p10 + }, + { // Entry 660 + 0x1.80p13, + 0x1.p3, + 0x1.p10, + 0x1.p12 + }, + { // Entry 661 + 0x1.08p15, + 0x1.p3, + 0x1.p12, + 0x1.p10 + }, + { // Entry 662 + 0x1.20p15, + 0x1.p3, + 0x1.p12, + 0x1.p12 + }, + { // Entry 663 + 0x1.08p15, + 0x1.p5, + 0x1.p10, + 0x1.p10 + }, + { // Entry 664 + 0x1.20p15, + 0x1.p5, + 0x1.p10, + 0x1.p12 + }, + { // Entry 665 + 0x1.02p17, + 0x1.p5, + 0x1.p12, + 0x1.p10 + }, + { // Entry 666 + 0x1.08p17, + 0x1.p5, + 0x1.p12, + 0x1.p12 + }, + { // Entry 667 + -0x1.ffffe0p-21, + -0x1.p-20, + -0x1.p-20, + -0x1.p-20 + }, + { // Entry 668 + 0x1.000010p-20, + -0x1.p-20, + -0x1.p-20, + 0x1.p-20 + }, + { // Entry 669 + -0x1.000010p-20, + -0x1.p-20, + 0x1.p-20, + -0x1.p-20 + }, + { // Entry 670 + 0x1.ffffe0p-21, + -0x1.p-20, + 0x1.p-20, + 0x1.p-20 + }, + { // Entry 671 + -0x1.000010p-20, + 0x1.p-20, + -0x1.p-20, + -0x1.p-20 + }, + { // Entry 672 + 0x1.ffffe0p-21, + 0x1.p-20, + -0x1.p-20, + 0x1.p-20 + }, + { // Entry 673 + -0x1.ffffe0p-21, + 0x1.p-20, + 0x1.p-20, + -0x1.p-20 + }, + { // Entry 674 + 0x1.000010p-20, + 0x1.p-20, + 0x1.p-20, + 0x1.p-20 + }, + { // Entry 675 + 0x1.fffffffffffffffffffep-21, + -0x1.p-10, + -0x1.p-10, + -0x1.p-100 + }, + { // Entry 676 + 0x1.00000000000000000001p-20, + -0x1.p-10, + -0x1.p-10, + 0x1.p-100 + }, + { // Entry 677 + -0x1.00000000000000000001p-20, + -0x1.p-10, + 0x1.p-10, + -0x1.p-100 + }, + { // Entry 678 + -0x1.fffffffffffffffffffep-21, + -0x1.p-10, + 0x1.p-10, + 0x1.p-100 + }, + { // Entry 679 + -0x1.00000000000000000001p-20, + 0x1.p-10, + -0x1.p-10, + -0x1.p-100 + }, + { // Entry 680 + -0x1.fffffffffffffffffffep-21, + 0x1.p-10, + -0x1.p-10, + 0x1.p-100 + }, + { // Entry 681 + 0x1.fffffffffffffffffffep-21, + 0x1.p-10, + 0x1.p-10, + -0x1.p-100 + }, + { // Entry 682 + 0x1.00000000000000000001p-20, + 0x1.p-10, + 0x1.p-10, + 0x1.p-100 + }, + { // Entry 683 + 0x1.f0p-11, + -0x1.p-5, + -0x1.p-5, + -0x1.p-15 + }, + { // Entry 684 + 0x1.08p-10, + -0x1.p-5, + -0x1.p-5, + 0x1.p-15 + }, + { // Entry 685 + -0x1.08p-10, + -0x1.p-5, + 0x1.p-5, + -0x1.p-15 + }, + { // Entry 686 + -0x1.f0p-11, + -0x1.p-5, + 0x1.p-5, + 0x1.p-15 + }, + { // Entry 687 + -0x1.08p-10, + 0x1.p-5, + -0x1.p-5, + -0x1.p-15 + }, + { // Entry 688 + -0x1.f0p-11, + 0x1.p-5, + -0x1.p-5, + 0x1.p-15 + }, + { // Entry 689 + 0x1.f0p-11, + 0x1.p-5, + 0x1.p-5, + -0x1.p-15 + }, + { // Entry 690 + 0x1.08p-10, + 0x1.p-5, + 0x1.p-5, + 0x1.p-15 + }, + { // Entry 691 + 0x1.68p6, + -0x1.40p3, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 692 + 0x1.b8p6, + -0x1.40p3, + -0x1.40p3, + 0x1.40p3 + }, + { // Entry 693 + -0x1.b8p6, + -0x1.40p3, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 694 + -0x1.68p6, + -0x1.40p3, + 0x1.40p3, + 0x1.40p3 + }, + { // Entry 695 + -0x1.b8p6, + 0x1.40p3, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 696 + -0x1.68p6, + 0x1.40p3, + -0x1.40p3, + 0x1.40p3 + }, + { // Entry 697 + 0x1.68p6, + 0x1.40p3, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 698 + 0x1.b8p6, + 0x1.40p3, + 0x1.40p3, + 0x1.40p3 + }, + { // Entry 699 + 0.0, + -0x1.p0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 700 + 0x1.p1, + -0x1.p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 701 + -0x1.p1, + -0x1.p0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 702 + 0.0, + -0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 703 + -0x1.p1, + 0x1.p0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 704 + 0.0, + 0x1.p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 705 + 0.0, + 0x1.p0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 706 + 0x1.p1, + 0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 707 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 708 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 709 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 710 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 711 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 712 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 713 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 714 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 715 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 716 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + 0.0f + }, + { // Entry 717 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF, + -0.0f + }, + { // Entry 718 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 719 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 720 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 721 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 722 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 723 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 724 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 725 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 726 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 727 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + 0.0f + }, + { // Entry 728 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF, + -0.0f + }, + { // Entry 729 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 730 + -HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 731 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 732 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 733 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 734 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 735 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 736 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 737 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 738 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 739 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 740 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 741 + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 742 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 743 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 744 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 745 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 746 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 747 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 748 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 749 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 750 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 751 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 752 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 753 + HUGE_VALF, + 0x1.fffffep127, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 754 + -HUGE_VALF, + 0x1.fffffep127, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 755 + 0x1.fffffe00000000000000000000000007p127, + 0x1.fffffep127, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 756 + -0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffep127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 757 + 0x1.fffffe00000000000000000000000002p1, + 0x1.fffffep127, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 758 + 0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.fffffep127, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 759 + 0x1.fffffe00000000000000000000000001p1, + 0x1.fffffep127, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 760 + 0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.fffffep127, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 761 + 0x1.fffffep1, + 0x1.fffffep127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 762 + 0x1.fffffdffffffffffffffffffffffffffp1, + 0x1.fffffep127, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 763 + 0x1.fffffep1, + 0x1.fffffep127, + 0x1.p-126, + 0.0f + }, + { // Entry 764 + 0x1.fffffep1, + 0x1.fffffep127, + 0x1.p-126, + -0.0f + }, + { // Entry 765 + HUGE_VALF, + 0x1.fffffep127, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 766 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 767 + 0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffep127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 768 + -0x1.fffffe00000000000000000000000007p127, + 0x1.fffffep127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 769 + -0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.fffffep127, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 770 + -0x1.fffffe00000000000000000000000002p1, + 0x1.fffffep127, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 771 + -0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.fffffep127, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 772 + -0x1.fffffe00000000000000000000000001p1, + 0x1.fffffep127, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 773 + -0x1.fffffdffffffffffffffffffffffffffp1, + 0x1.fffffep127, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 774 + -0x1.fffffep1, + 0x1.fffffep127, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 775 + -0x1.fffffep1, + 0x1.fffffep127, + -0x1.p-126, + 0.0f + }, + { // Entry 776 + -0x1.fffffep1, + 0x1.fffffep127, + -0x1.p-126, + -0.0f + }, + { // Entry 777 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 778 + -HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 779 + 0x1.fffffe00000000000000000000000007p127, + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 780 + -0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 781 + 0x1.fffffa00000400000000000000000002p1, + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 782 + 0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 783 + 0x1.fffffa00000400000000000000000001p1, + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 784 + 0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 785 + 0x1.fffffa000004p1, + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 786 + 0x1.fffffa000003ffffffffffffffffffffp1, + 0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 787 + 0x1.fffffa000004p1, + 0x1.fffffep127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 788 + 0x1.fffffa000004p1, + 0x1.fffffep127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 789 + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 790 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 791 + 0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 792 + -0x1.fffffe00000000000000000000000007p127, + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 793 + -0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 794 + -0x1.fffffa00000400000000000000000002p1, + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 795 + -0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 796 + -0x1.fffffa00000400000000000000000001p1, + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 797 + -0x1.fffffa000003ffffffffffffffffffffp1, + 0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 798 + -0x1.fffffa000004p1, + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 799 + -0x1.fffffa000004p1, + 0x1.fffffep127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 800 + -0x1.fffffa000004p1, + 0x1.fffffep127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 801 + HUGE_VALF, + 0x1.fffffep127, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 802 + -HUGE_VALF, + 0x1.fffffep127, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 803 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 804 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 805 + 0x1.fffffe00000000000000000001p-22, + 0x1.fffffep127, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 806 + 0x1.fffffdffffffffffffffffffffp-22, + 0x1.fffffep127, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 807 + 0x1.fffffe00000000000000000000fffffep-22, + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 808 + 0x1.fffffdffffffffffffffffffff000002p-22, + 0x1.fffffep127, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 809 + 0x1.fffffe00000000000000000000000002p-22, + 0x1.fffffep127, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 810 + 0x1.fffffdfffffffffffffffffffffffffep-22, + 0x1.fffffep127, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 811 + 0x1.fffffep-22, + 0x1.fffffep127, + 0x1.p-149, + 0.0f + }, + { // Entry 812 + 0x1.fffffep-22, + 0x1.fffffep127, + 0x1.p-149, + -0.0f + }, + { // Entry 813 + HUGE_VALF, + 0x1.fffffep127, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 814 + -HUGE_VALF, + 0x1.fffffep127, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 815 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffep127, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 816 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 817 + -0x1.fffffdffffffffffffffffffffp-22, + 0x1.fffffep127, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 818 + -0x1.fffffe00000000000000000001p-22, + 0x1.fffffep127, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 819 + -0x1.fffffdffffffffffffffffffff000002p-22, + 0x1.fffffep127, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 820 + -0x1.fffffe00000000000000000000fffffep-22, + 0x1.fffffep127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 821 + -0x1.fffffdfffffffffffffffffffffffffep-22, + 0x1.fffffep127, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 822 + -0x1.fffffe00000000000000000000000002p-22, + 0x1.fffffep127, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 823 + -0x1.fffffep-22, + 0x1.fffffep127, + -0x1.p-149, + 0.0f + }, + { // Entry 824 + -0x1.fffffep-22, + 0x1.fffffep127, + -0x1.p-149, + -0.0f + }, + { // Entry 825 + HUGE_VALF, + 0x1.fffffep127, + 0.0f, + HUGE_VALF + }, + { // Entry 826 + -HUGE_VALF, + 0x1.fffffep127, + 0.0f, + -HUGE_VALF + }, + { // Entry 827 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 828 + -0x1.fffffep127, + 0x1.fffffep127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 829 + 0x1.p-126, + 0x1.fffffep127, + 0.0f, + 0x1.p-126 + }, + { // Entry 830 + -0x1.p-126, + 0x1.fffffep127, + 0.0f, + -0x1.p-126 + }, + { // Entry 831 + 0x1.fffffcp-127, + 0x1.fffffep127, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 832 + -0x1.fffffcp-127, + 0x1.fffffep127, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 833 + 0x1.p-149, + 0x1.fffffep127, + 0.0f, + 0x1.p-149 + }, + { // Entry 834 + -0x1.p-149, + 0x1.fffffep127, + 0.0f, + -0x1.p-149 + }, + { // Entry 835 + 0.0, + 0x1.fffffep127, + 0.0f, + 0.0f + }, + { // Entry 836 + 0.0, + 0x1.fffffep127, + 0.0f, + -0.0f + }, + { // Entry 837 + HUGE_VALF, + 0x1.fffffep127, + -0.0f, + HUGE_VALF + }, + { // Entry 838 + -HUGE_VALF, + 0x1.fffffep127, + -0.0f, + -HUGE_VALF + }, + { // Entry 839 + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 840 + -0x1.fffffep127, + 0x1.fffffep127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 841 + 0x1.p-126, + 0x1.fffffep127, + -0.0f, + 0x1.p-126 + }, + { // Entry 842 + -0x1.p-126, + 0x1.fffffep127, + -0.0f, + -0x1.p-126 + }, + { // Entry 843 + 0x1.fffffcp-127, + 0x1.fffffep127, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 844 + -0x1.fffffcp-127, + 0x1.fffffep127, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 845 + 0x1.p-149, + 0x1.fffffep127, + -0.0f, + 0x1.p-149 + }, + { // Entry 846 + -0x1.p-149, + 0x1.fffffep127, + -0.0f, + -0x1.p-149 + }, + { // Entry 847 + 0.0, + 0x1.fffffep127, + -0.0f, + 0.0f + }, + { // Entry 848 + -0.0, + 0x1.fffffep127, + -0.0f, + -0.0f + }, + { // Entry 849 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 850 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 851 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 852 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 853 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 854 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 855 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 856 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 857 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 858 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + 0.0f + }, + { // Entry 859 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF, + -0.0f + }, + { // Entry 860 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 861 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 862 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 863 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 864 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 865 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 866 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 867 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 868 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 869 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + 0.0f + }, + { // Entry 870 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF, + -0.0f + }, + { // Entry 871 + HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 872 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 873 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 874 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 875 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 876 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 877 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 878 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 879 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 880 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 881 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 882 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 883 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 884 + -HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 885 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 886 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 887 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 888 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 889 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 890 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 891 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 892 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 893 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 894 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 895 + HUGE_VALF, + -0x1.fffffep127, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 896 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 897 + 0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffep127, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 898 + -0x1.fffffe00000000000000000000000007p127, + -0x1.fffffep127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 899 + -0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.fffffep127, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 900 + -0x1.fffffe00000000000000000000000002p1, + -0x1.fffffep127, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 901 + -0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.fffffep127, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 902 + -0x1.fffffe00000000000000000000000001p1, + -0x1.fffffep127, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 903 + -0x1.fffffdffffffffffffffffffffffffffp1, + -0x1.fffffep127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 904 + -0x1.fffffep1, + -0x1.fffffep127, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 905 + -0x1.fffffep1, + -0x1.fffffep127, + 0x1.p-126, + 0.0f + }, + { // Entry 906 + -0x1.fffffep1, + -0x1.fffffep127, + 0x1.p-126, + -0.0f + }, + { // Entry 907 + HUGE_VALF, + -0x1.fffffep127, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 908 + -HUGE_VALF, + -0x1.fffffep127, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 909 + 0x1.fffffe00000000000000000000000007p127, + -0x1.fffffep127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 910 + -0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffep127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 911 + 0x1.fffffe00000000000000000000000002p1, + -0x1.fffffep127, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 912 + 0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.fffffep127, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 913 + 0x1.fffffe00000000000000000000000001p1, + -0x1.fffffep127, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 914 + 0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.fffffep127, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 915 + 0x1.fffffep1, + -0x1.fffffep127, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 916 + 0x1.fffffdffffffffffffffffffffffffffp1, + -0x1.fffffep127, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 917 + 0x1.fffffep1, + -0x1.fffffep127, + -0x1.p-126, + 0.0f + }, + { // Entry 918 + 0x1.fffffep1, + -0x1.fffffep127, + -0x1.p-126, + -0.0f + }, + { // Entry 919 + HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 920 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 921 + 0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 922 + -0x1.fffffe00000000000000000000000007p127, + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 923 + -0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 924 + -0x1.fffffa00000400000000000000000002p1, + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 925 + -0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 926 + -0x1.fffffa00000400000000000000000001p1, + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 927 + -0x1.fffffa000003ffffffffffffffffffffp1, + -0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 928 + -0x1.fffffa000004p1, + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 929 + -0x1.fffffa000004p1, + -0x1.fffffep127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 930 + -0x1.fffffa000004p1, + -0x1.fffffep127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 931 + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 932 + -HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 933 + 0x1.fffffe00000000000000000000000007p127, + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 934 + -0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 935 + 0x1.fffffa00000400000000000000000002p1, + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 936 + 0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 937 + 0x1.fffffa00000400000000000000000001p1, + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 938 + 0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 939 + 0x1.fffffa000004p1, + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 940 + 0x1.fffffa000003ffffffffffffffffffffp1, + -0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 941 + 0x1.fffffa000004p1, + -0x1.fffffep127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 942 + 0x1.fffffa000004p1, + -0x1.fffffep127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 943 + HUGE_VALF, + -0x1.fffffep127, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 944 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 945 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffep127, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 946 + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 947 + -0x1.fffffdffffffffffffffffffffp-22, + -0x1.fffffep127, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 948 + -0x1.fffffe00000000000000000001p-22, + -0x1.fffffep127, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 949 + -0x1.fffffdffffffffffffffffffff000002p-22, + -0x1.fffffep127, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 950 + -0x1.fffffe00000000000000000000fffffep-22, + -0x1.fffffep127, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 951 + -0x1.fffffdfffffffffffffffffffffffffep-22, + -0x1.fffffep127, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 952 + -0x1.fffffe00000000000000000000000002p-22, + -0x1.fffffep127, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 953 + -0x1.fffffep-22, + -0x1.fffffep127, + 0x1.p-149, + 0.0f + }, + { // Entry 954 + -0x1.fffffep-22, + -0x1.fffffep127, + 0x1.p-149, + -0.0f + }, + { // Entry 955 + HUGE_VALF, + -0x1.fffffep127, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 956 + -HUGE_VALF, + -0x1.fffffep127, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 957 + 0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 958 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffep127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 959 + 0x1.fffffe00000000000000000001p-22, + -0x1.fffffep127, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 960 + 0x1.fffffdffffffffffffffffffffp-22, + -0x1.fffffep127, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 961 + 0x1.fffffe00000000000000000000fffffep-22, + -0x1.fffffep127, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 962 + 0x1.fffffdffffffffffffffffffff000002p-22, + -0x1.fffffep127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 963 + 0x1.fffffe00000000000000000000000002p-22, + -0x1.fffffep127, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 964 + 0x1.fffffdfffffffffffffffffffffffffep-22, + -0x1.fffffep127, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 965 + 0x1.fffffep-22, + -0x1.fffffep127, + -0x1.p-149, + 0.0f + }, + { // Entry 966 + 0x1.fffffep-22, + -0x1.fffffep127, + -0x1.p-149, + -0.0f + }, + { // Entry 967 + HUGE_VALF, + -0x1.fffffep127, + 0.0f, + HUGE_VALF + }, + { // Entry 968 + -HUGE_VALF, + -0x1.fffffep127, + 0.0f, + -HUGE_VALF + }, + { // Entry 969 + 0x1.fffffep127, + -0x1.fffffep127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 970 + -0x1.fffffep127, + -0x1.fffffep127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 971 + 0x1.p-126, + -0x1.fffffep127, + 0.0f, + 0x1.p-126 + }, + { // Entry 972 + -0x1.p-126, + -0x1.fffffep127, + 0.0f, + -0x1.p-126 + }, + { // Entry 973 + 0x1.fffffcp-127, + -0x1.fffffep127, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 974 + -0x1.fffffcp-127, + -0x1.fffffep127, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 975 + 0x1.p-149, + -0x1.fffffep127, + 0.0f, + 0x1.p-149 + }, + { // Entry 976 + -0x1.p-149, + -0x1.fffffep127, + 0.0f, + -0x1.p-149 + }, + { // Entry 977 + 0.0, + -0x1.fffffep127, + 0.0f, + 0.0f + }, + { // Entry 978 + -0.0, + -0x1.fffffep127, + 0.0f, + -0.0f + }, + { // Entry 979 + HUGE_VALF, + -0x1.fffffep127, + -0.0f, + HUGE_VALF + }, + { // Entry 980 + -HUGE_VALF, + -0x1.fffffep127, + -0.0f, + -HUGE_VALF + }, + { // Entry 981 + 0x1.fffffep127, + -0x1.fffffep127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 982 + -0x1.fffffep127, + -0x1.fffffep127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 983 + 0x1.p-126, + -0x1.fffffep127, + -0.0f, + 0x1.p-126 + }, + { // Entry 984 + -0x1.p-126, + -0x1.fffffep127, + -0.0f, + -0x1.p-126 + }, + { // Entry 985 + 0x1.fffffcp-127, + -0x1.fffffep127, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 986 + -0x1.fffffcp-127, + -0x1.fffffep127, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 987 + 0x1.p-149, + -0x1.fffffep127, + -0.0f, + 0x1.p-149 + }, + { // Entry 988 + -0x1.p-149, + -0x1.fffffep127, + -0.0f, + -0x1.p-149 + }, + { // Entry 989 + 0.0, + -0x1.fffffep127, + -0.0f, + 0.0f + }, + { // Entry 990 + 0.0, + -0x1.fffffep127, + -0.0f, + -0.0f + }, + { // Entry 991 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 992 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 993 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 994 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 995 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 996 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 997 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 998 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 999 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1000 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + 0.0f + }, + { // Entry 1001 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF, + -0.0f + }, + { // Entry 1002 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1003 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1004 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1005 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1006 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1007 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1008 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1009 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1010 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1011 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + 0.0f + }, + { // Entry 1012 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF, + -0.0f + }, + { // Entry 1013 + HUGE_VALF, + 0x1.p-126, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1014 + -HUGE_VALF, + 0x1.p-126, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1015 + 0x1.fffffe00000000000000000000000007p127, + 0x1.p-126, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1016 + -0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.p-126, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1017 + 0x1.fffffe00000000000000000000000002p1, + 0x1.p-126, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1018 + 0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.p-126, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1019 + 0x1.fffffe00000000000000000000000001p1, + 0x1.p-126, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1020 + 0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.p-126, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1021 + 0x1.fffffep1, + 0x1.p-126, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1022 + 0x1.fffffdffffffffffffffffffffffffffp1, + 0x1.p-126, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1023 + 0x1.fffffep1, + 0x1.p-126, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1024 + 0x1.fffffep1, + 0x1.p-126, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1025 + HUGE_VALF, + 0x1.p-126, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1026 + -HUGE_VALF, + 0x1.p-126, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1027 + 0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.p-126, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1028 + -0x1.fffffe00000000000000000000000007p127, + 0x1.p-126, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1029 + -0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.p-126, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1030 + -0x1.fffffe00000000000000000000000002p1, + 0x1.p-126, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1031 + -0x1.fffffdfffffffffffffffffffffffffep1, + 0x1.p-126, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1032 + -0x1.fffffe00000000000000000000000001p1, + 0x1.p-126, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1033 + -0x1.fffffdffffffffffffffffffffffffffp1, + 0x1.p-126, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1034 + -0x1.fffffep1, + 0x1.p-126, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1035 + -0x1.fffffep1, + 0x1.p-126, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1036 + -0x1.fffffep1, + 0x1.p-126, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1037 + HUGE_VALF, + 0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1038 + -HUGE_VALF, + 0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1039 + 0x1.fffffep127, + 0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1040 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1041 + 0x1.00000000000000000000000000000004p-126, + 0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1042 + -0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.p-126, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1043 + 0x1.fffffc00000000000000000000000008p-127, + 0x1.p-126, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1044 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.p-126, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1045 + 0x1.00000000000000000000000002p-149, + 0x1.p-126, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1046 + -0.0f, + 0x1.p-126, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1047 + 0.0f, + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 1048 + 0.0f, + 0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 1049 + HUGE_VALF, + 0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1050 + -HUGE_VALF, + 0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1051 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1052 + -0x1.fffffep127, + 0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1053 + 0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.p-126, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1054 + -0x1.00000000000000000000000000000004p-126, + 0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1055 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.p-126, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1056 + -0x1.fffffc00000000000000000000000008p-127, + 0x1.p-126, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1057 + 0.0f, + 0x1.p-126, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1058 + -0x1.00000000000000000000000002p-149, + 0x1.p-126, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1059 + -0.0f, + 0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 1060 + -0.0f, + 0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 1061 + HUGE_VALF, + 0x1.p-126, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1062 + -HUGE_VALF, + 0x1.p-126, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1063 + 0x1.fffffep127, + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1064 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1065 + 0x1.00000000000000000000000000000003p-126, + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1066 + -0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1067 + 0x1.fffffc00000000000000000000000007p-127, + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1068 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.p-126, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1069 + 0x1.00000000000000000000000001fffffcp-149, + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1070 + -0.0f, + 0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1071 + 0.0f, + 0x1.p-126, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1072 + 0.0f, + 0x1.p-126, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1073 + HUGE_VALF, + 0x1.p-126, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1074 + -HUGE_VALF, + 0x1.p-126, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1075 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1076 + -0x1.fffffep127, + 0x1.p-126, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1077 + 0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.p-126, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1078 + -0x1.00000000000000000000000000000003p-126, + 0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1079 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.p-126, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1080 + -0x1.fffffc00000000000000000000000007p-127, + 0x1.p-126, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1081 + 0.0f, + 0x1.p-126, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1082 + -0x1.00000000000000000000000001fffffcp-149, + 0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1083 + -0.0f, + 0x1.p-126, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1084 + -0.0f, + 0x1.p-126, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1085 + HUGE_VALF, + 0x1.p-126, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1086 + -HUGE_VALF, + 0x1.p-126, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1087 + 0x1.fffffep127, + 0x1.p-126, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1088 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1089 + 0x1.p-126, + 0x1.p-126, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1090 + -0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1091 + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1092 + -0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-126, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1093 + 0x1.00000000000000000000000000000004p-149, + 0x1.p-126, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1094 + -0.0f, + 0x1.p-126, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1095 + 0.0f, + 0x1.p-126, + 0x1.p-149, + 0.0f + }, + { // Entry 1096 + 0.0f, + 0x1.p-126, + 0x1.p-149, + -0.0f + }, + { // Entry 1097 + HUGE_VALF, + 0x1.p-126, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1098 + -HUGE_VALF, + 0x1.p-126, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1099 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-126, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1100 + -0x1.fffffep127, + 0x1.p-126, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1101 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1102 + -0x1.p-126, + 0x1.p-126, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1103 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-126, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1104 + -0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1105 + 0.0f, + 0x1.p-126, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1106 + -0x1.00000000000000000000000000000004p-149, + 0x1.p-126, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1107 + -0.0f, + 0x1.p-126, + -0x1.p-149, + 0.0f + }, + { // Entry 1108 + -0.0f, + 0x1.p-126, + -0x1.p-149, + -0.0f + }, + { // Entry 1109 + HUGE_VALF, + 0x1.p-126, + 0.0f, + HUGE_VALF + }, + { // Entry 1110 + -HUGE_VALF, + 0x1.p-126, + 0.0f, + -HUGE_VALF + }, + { // Entry 1111 + 0x1.fffffep127, + 0x1.p-126, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1112 + -0x1.fffffep127, + 0x1.p-126, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1113 + 0x1.p-126, + 0x1.p-126, + 0.0f, + 0x1.p-126 + }, + { // Entry 1114 + -0x1.p-126, + 0x1.p-126, + 0.0f, + -0x1.p-126 + }, + { // Entry 1115 + 0x1.fffffcp-127, + 0x1.p-126, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1116 + -0x1.fffffcp-127, + 0x1.p-126, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1117 + 0x1.p-149, + 0x1.p-126, + 0.0f, + 0x1.p-149 + }, + { // Entry 1118 + -0x1.p-149, + 0x1.p-126, + 0.0f, + -0x1.p-149 + }, + { // Entry 1119 + 0.0, + 0x1.p-126, + 0.0f, + 0.0f + }, + { // Entry 1120 + 0.0, + 0x1.p-126, + 0.0f, + -0.0f + }, + { // Entry 1121 + HUGE_VALF, + 0x1.p-126, + -0.0f, + HUGE_VALF + }, + { // Entry 1122 + -HUGE_VALF, + 0x1.p-126, + -0.0f, + -HUGE_VALF + }, + { // Entry 1123 + 0x1.fffffep127, + 0x1.p-126, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1124 + -0x1.fffffep127, + 0x1.p-126, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1125 + 0x1.p-126, + 0x1.p-126, + -0.0f, + 0x1.p-126 + }, + { // Entry 1126 + -0x1.p-126, + 0x1.p-126, + -0.0f, + -0x1.p-126 + }, + { // Entry 1127 + 0x1.fffffcp-127, + 0x1.p-126, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1128 + -0x1.fffffcp-127, + 0x1.p-126, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1129 + 0x1.p-149, + 0x1.p-126, + -0.0f, + 0x1.p-149 + }, + { // Entry 1130 + -0x1.p-149, + 0x1.p-126, + -0.0f, + -0x1.p-149 + }, + { // Entry 1131 + 0.0, + 0x1.p-126, + -0.0f, + 0.0f + }, + { // Entry 1132 + -0.0, + 0x1.p-126, + -0.0f, + -0.0f + }, + { // Entry 1133 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1134 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1135 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1136 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1137 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1138 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1139 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1140 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1141 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1142 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + 0.0f + }, + { // Entry 1143 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF, + -0.0f + }, + { // Entry 1144 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 1145 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1146 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1147 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1148 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1149 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1150 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1151 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1152 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1153 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + 0.0f + }, + { // Entry 1154 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF, + -0.0f + }, + { // Entry 1155 + HUGE_VALF, + -0x1.p-126, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1156 + -HUGE_VALF, + -0x1.p-126, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1157 + 0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.p-126, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1158 + -0x1.fffffe00000000000000000000000007p127, + -0x1.p-126, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1159 + -0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.p-126, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1160 + -0x1.fffffe00000000000000000000000002p1, + -0x1.p-126, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1161 + -0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.p-126, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1162 + -0x1.fffffe00000000000000000000000001p1, + -0x1.p-126, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1163 + -0x1.fffffdffffffffffffffffffffffffffp1, + -0x1.p-126, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1164 + -0x1.fffffep1, + -0x1.p-126, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1165 + -0x1.fffffep1, + -0x1.p-126, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1166 + -0x1.fffffep1, + -0x1.p-126, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1167 + HUGE_VALF, + -0x1.p-126, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1168 + -HUGE_VALF, + -0x1.p-126, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1169 + 0x1.fffffe00000000000000000000000007p127, + -0x1.p-126, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1170 + -0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.p-126, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1171 + 0x1.fffffe00000000000000000000000002p1, + -0x1.p-126, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1172 + 0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.p-126, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1173 + 0x1.fffffe00000000000000000000000001p1, + -0x1.p-126, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1174 + 0x1.fffffdfffffffffffffffffffffffffep1, + -0x1.p-126, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1175 + 0x1.fffffep1, + -0x1.p-126, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1176 + 0x1.fffffdffffffffffffffffffffffffffp1, + -0x1.p-126, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1177 + 0x1.fffffep1, + -0x1.p-126, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1178 + 0x1.fffffep1, + -0x1.p-126, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1179 + HUGE_VALF, + -0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1180 + -HUGE_VALF, + -0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1181 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1182 + -0x1.fffffep127, + -0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1183 + 0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1184 + -0x1.00000000000000000000000000000004p-126, + -0x1.p-126, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1185 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.p-126, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1186 + -0x1.fffffc00000000000000000000000008p-127, + -0x1.p-126, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1187 + 0.0f, + -0x1.p-126, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1188 + -0x1.00000000000000000000000002p-149, + -0x1.p-126, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1189 + -0.0f, + -0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 1190 + -0.0f, + -0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 1191 + HUGE_VALF, + -0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1192 + -HUGE_VALF, + -0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1193 + 0x1.fffffep127, + -0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1194 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1195 + 0x1.00000000000000000000000000000004p-126, + -0x1.p-126, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1196 + -0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1197 + 0x1.fffffc00000000000000000000000008p-127, + -0x1.p-126, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1198 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.p-126, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1199 + 0x1.00000000000000000000000002p-149, + -0x1.p-126, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1200 + -0.0f, + -0x1.p-126, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1201 + 0.0f, + -0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 1202 + 0.0f, + -0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 1203 + HUGE_VALF, + -0x1.p-126, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1204 + -HUGE_VALF, + -0x1.p-126, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1205 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1206 + -0x1.fffffep127, + -0x1.p-126, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1207 + 0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1208 + -0x1.00000000000000000000000000000003p-126, + -0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1209 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.p-126, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1210 + -0x1.fffffc00000000000000000000000007p-127, + -0x1.p-126, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1211 + 0.0f, + -0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1212 + -0x1.00000000000000000000000001fffffcp-149, + -0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1213 + -0.0f, + -0x1.p-126, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1214 + -0.0f, + -0x1.p-126, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1215 + HUGE_VALF, + -0x1.p-126, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1216 + -HUGE_VALF, + -0x1.p-126, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1217 + 0x1.fffffep127, + -0x1.p-126, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1218 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1219 + 0x1.00000000000000000000000000000003p-126, + -0x1.p-126, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1220 + -0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1221 + 0x1.fffffc00000000000000000000000007p-127, + -0x1.p-126, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1222 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1223 + 0x1.00000000000000000000000001fffffcp-149, + -0x1.p-126, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1224 + -0.0f, + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1225 + 0.0f, + -0x1.p-126, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1226 + 0.0f, + -0x1.p-126, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1227 + HUGE_VALF, + -0x1.p-126, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1228 + -HUGE_VALF, + -0x1.p-126, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1229 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1230 + -0x1.fffffep127, + -0x1.p-126, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1231 + 0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1232 + -0x1.p-126, + -0x1.p-126, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1233 + 0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-126, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1234 + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1235 + 0.0f, + -0x1.p-126, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1236 + -0x1.00000000000000000000000000000004p-149, + -0x1.p-126, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1237 + -0.0f, + -0x1.p-126, + 0x1.p-149, + 0.0f + }, + { // Entry 1238 + -0.0f, + -0x1.p-126, + 0x1.p-149, + -0.0f + }, + { // Entry 1239 + HUGE_VALF, + -0x1.p-126, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1240 + -HUGE_VALF, + -0x1.p-126, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1241 + 0x1.fffffep127, + -0x1.p-126, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1242 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-126, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1243 + 0x1.p-126, + -0x1.p-126, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1244 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1245 + 0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1246 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-126, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1247 + 0x1.00000000000000000000000000000004p-149, + -0x1.p-126, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1248 + -0.0f, + -0x1.p-126, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1249 + 0.0f, + -0x1.p-126, + -0x1.p-149, + 0.0f + }, + { // Entry 1250 + 0.0f, + -0x1.p-126, + -0x1.p-149, + -0.0f + }, + { // Entry 1251 + HUGE_VALF, + -0x1.p-126, + 0.0f, + HUGE_VALF + }, + { // Entry 1252 + -HUGE_VALF, + -0x1.p-126, + 0.0f, + -HUGE_VALF + }, + { // Entry 1253 + 0x1.fffffep127, + -0x1.p-126, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1254 + -0x1.fffffep127, + -0x1.p-126, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1255 + 0x1.p-126, + -0x1.p-126, + 0.0f, + 0x1.p-126 + }, + { // Entry 1256 + -0x1.p-126, + -0x1.p-126, + 0.0f, + -0x1.p-126 + }, + { // Entry 1257 + 0x1.fffffcp-127, + -0x1.p-126, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1258 + -0x1.fffffcp-127, + -0x1.p-126, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1259 + 0x1.p-149, + -0x1.p-126, + 0.0f, + 0x1.p-149 + }, + { // Entry 1260 + -0x1.p-149, + -0x1.p-126, + 0.0f, + -0x1.p-149 + }, + { // Entry 1261 + 0.0, + -0x1.p-126, + 0.0f, + 0.0f + }, + { // Entry 1262 + -0.0, + -0x1.p-126, + 0.0f, + -0.0f + }, + { // Entry 1263 + HUGE_VALF, + -0x1.p-126, + -0.0f, + HUGE_VALF + }, + { // Entry 1264 + -HUGE_VALF, + -0x1.p-126, + -0.0f, + -HUGE_VALF + }, + { // Entry 1265 + 0x1.fffffep127, + -0x1.p-126, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1266 + -0x1.fffffep127, + -0x1.p-126, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1267 + 0x1.p-126, + -0x1.p-126, + -0.0f, + 0x1.p-126 + }, + { // Entry 1268 + -0x1.p-126, + -0x1.p-126, + -0.0f, + -0x1.p-126 + }, + { // Entry 1269 + 0x1.fffffcp-127, + -0x1.p-126, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1270 + -0x1.fffffcp-127, + -0x1.p-126, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1271 + 0x1.p-149, + -0x1.p-126, + -0.0f, + 0x1.p-149 + }, + { // Entry 1272 + -0x1.p-149, + -0x1.p-126, + -0.0f, + -0x1.p-149 + }, + { // Entry 1273 + 0.0, + -0x1.p-126, + -0.0f, + 0.0f + }, + { // Entry 1274 + 0.0, + -0x1.p-126, + -0.0f, + -0.0f + }, + { // Entry 1275 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 1276 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1277 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1278 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1279 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1280 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1281 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1282 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1283 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1284 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + 0.0f + }, + { // Entry 1285 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF, + -0.0f + }, + { // Entry 1286 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1287 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1288 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1289 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1290 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1291 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1292 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1293 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1294 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1295 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + 0.0f + }, + { // Entry 1296 + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF, + -0.0f + }, + { // Entry 1297 + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1298 + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1299 + 0x1.fffffe00000000000000000000000007p127, + 0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1300 + -0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1301 + 0x1.fffffa00000400000000000000000002p1, + 0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1302 + 0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1303 + 0x1.fffffa00000400000000000000000001p1, + 0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1304 + 0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1305 + 0x1.fffffa000004p1, + 0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1306 + 0x1.fffffa000003ffffffffffffffffffffp1, + 0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1307 + 0x1.fffffa000004p1, + 0x1.fffffcp-127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1308 + 0x1.fffffa000004p1, + 0x1.fffffcp-127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1309 + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1310 + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1311 + 0x1.fffffdfffffffffffffffffffffffff8p127, + 0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1312 + -0x1.fffffe00000000000000000000000007p127, + 0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1313 + -0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1314 + -0x1.fffffa00000400000000000000000002p1, + 0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1315 + -0x1.fffffa000003fffffffffffffffffffep1, + 0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1316 + -0x1.fffffa00000400000000000000000001p1, + 0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1317 + -0x1.fffffa000003ffffffffffffffffffffp1, + 0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1318 + -0x1.fffffa000004p1, + 0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1319 + -0x1.fffffa000004p1, + 0x1.fffffcp-127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1320 + -0x1.fffffa000004p1, + 0x1.fffffcp-127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1321 + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1322 + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1323 + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1324 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1325 + 0x1.00000000000000000000000000000003p-126, + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1326 + -0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1327 + 0x1.fffffc00000000000000000000000007p-127, + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1328 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1329 + 0x1.00000000000000000000000001fffffcp-149, + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1330 + -0.0f, + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1331 + 0.0f, + 0x1.fffffcp-127, + 0x1.p-126, + 0.0f + }, + { // Entry 1332 + 0.0f, + 0x1.fffffcp-127, + 0x1.p-126, + -0.0f + }, + { // Entry 1333 + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1334 + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1335 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1336 + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1337 + 0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1338 + -0x1.00000000000000000000000000000003p-126, + 0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1339 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1340 + -0x1.fffffc00000000000000000000000007p-127, + 0x1.fffffcp-127, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1341 + 0.0f, + 0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1342 + -0x1.00000000000000000000000001fffffcp-149, + 0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1343 + -0.0f, + 0x1.fffffcp-127, + -0x1.p-126, + 0.0f + }, + { // Entry 1344 + -0.0f, + 0x1.fffffcp-127, + -0x1.p-126, + -0.0f + }, + { // Entry 1345 + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1346 + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1347 + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1348 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1349 + 0x1.00000000000000000000000000000003p-126, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1350 + -0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1351 + 0x1.fffffc00000000000000000000000007p-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1352 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1353 + 0x1.00000000000000000000000001fffff8p-149, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1354 + -0.0f, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1355 + 0.0f, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1356 + 0.0f, + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1357 + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1358 + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1359 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1360 + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1361 + 0x1.fffffffffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1362 + -0x1.00000000000000000000000000000003p-126, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1363 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1364 + -0x1.fffffc00000000000000000000000007p-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1365 + 0.0f, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1366 + -0x1.00000000000000000000000001fffff8p-149, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1367 + -0.0f, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1368 + -0.0f, + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1369 + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1370 + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1371 + 0x1.fffffep127, + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1372 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1373 + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1374 + -0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1375 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1376 + -0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1377 + 0x1.00000000000000000000000000000003p-149, + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1378 + -0.0f, + 0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1379 + 0.0f, + 0x1.fffffcp-127, + 0x1.p-149, + 0.0f + }, + { // Entry 1380 + 0.0f, + 0x1.fffffcp-127, + 0x1.p-149, + -0.0f + }, + { // Entry 1381 + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1382 + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1383 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1384 + -0x1.fffffep127, + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1385 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1386 + -0x1.p-126, + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1387 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1388 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1389 + 0.0f, + 0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1390 + -0x1.00000000000000000000000000000003p-149, + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1391 + -0.0f, + 0x1.fffffcp-127, + -0x1.p-149, + 0.0f + }, + { // Entry 1392 + -0.0f, + 0x1.fffffcp-127, + -0x1.p-149, + -0.0f + }, + { // Entry 1393 + HUGE_VALF, + 0x1.fffffcp-127, + 0.0f, + HUGE_VALF + }, + { // Entry 1394 + -HUGE_VALF, + 0x1.fffffcp-127, + 0.0f, + -HUGE_VALF + }, + { // Entry 1395 + 0x1.fffffep127, + 0x1.fffffcp-127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1396 + -0x1.fffffep127, + 0x1.fffffcp-127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1397 + 0x1.p-126, + 0x1.fffffcp-127, + 0.0f, + 0x1.p-126 + }, + { // Entry 1398 + -0x1.p-126, + 0x1.fffffcp-127, + 0.0f, + -0x1.p-126 + }, + { // Entry 1399 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1400 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1401 + 0x1.p-149, + 0x1.fffffcp-127, + 0.0f, + 0x1.p-149 + }, + { // Entry 1402 + -0x1.p-149, + 0x1.fffffcp-127, + 0.0f, + -0x1.p-149 + }, + { // Entry 1403 + 0.0, + 0x1.fffffcp-127, + 0.0f, + 0.0f + }, + { // Entry 1404 + 0.0, + 0x1.fffffcp-127, + 0.0f, + -0.0f + }, + { // Entry 1405 + HUGE_VALF, + 0x1.fffffcp-127, + -0.0f, + HUGE_VALF + }, + { // Entry 1406 + -HUGE_VALF, + 0x1.fffffcp-127, + -0.0f, + -HUGE_VALF + }, + { // Entry 1407 + 0x1.fffffep127, + 0x1.fffffcp-127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1408 + -0x1.fffffep127, + 0x1.fffffcp-127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1409 + 0x1.p-126, + 0x1.fffffcp-127, + -0.0f, + 0x1.p-126 + }, + { // Entry 1410 + -0x1.p-126, + 0x1.fffffcp-127, + -0.0f, + -0x1.p-126 + }, + { // Entry 1411 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1412 + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1413 + 0x1.p-149, + 0x1.fffffcp-127, + -0.0f, + 0x1.p-149 + }, + { // Entry 1414 + -0x1.p-149, + 0x1.fffffcp-127, + -0.0f, + -0x1.p-149 + }, + { // Entry 1415 + 0.0, + 0x1.fffffcp-127, + -0.0f, + 0.0f + }, + { // Entry 1416 + -0.0, + 0x1.fffffcp-127, + -0.0f, + -0.0f + }, + { // Entry 1417 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1418 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1419 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1420 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1421 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1422 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1423 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1424 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1425 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1426 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + 0.0f + }, + { // Entry 1427 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF, + -0.0f + }, + { // Entry 1428 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 1429 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1430 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1431 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1432 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1433 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1434 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1435 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1436 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1437 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + 0.0f + }, + { // Entry 1438 + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF, + -0.0f + }, + { // Entry 1439 + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1440 + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1441 + 0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1442 + -0x1.fffffe00000000000000000000000007p127, + -0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1443 + -0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1444 + -0x1.fffffa00000400000000000000000002p1, + -0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1445 + -0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1446 + -0x1.fffffa00000400000000000000000001p1, + -0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1447 + -0x1.fffffa000003ffffffffffffffffffffp1, + -0x1.fffffcp-127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1448 + -0x1.fffffa000004p1, + -0x1.fffffcp-127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1449 + -0x1.fffffa000004p1, + -0x1.fffffcp-127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1450 + -0x1.fffffa000004p1, + -0x1.fffffcp-127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1451 + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1452 + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1453 + 0x1.fffffe00000000000000000000000007p127, + -0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1454 + -0x1.fffffdfffffffffffffffffffffffff8p127, + -0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1455 + 0x1.fffffa00000400000000000000000002p1, + -0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1456 + 0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1457 + 0x1.fffffa00000400000000000000000001p1, + -0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1458 + 0x1.fffffa000003fffffffffffffffffffep1, + -0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1459 + 0x1.fffffa000004p1, + -0x1.fffffcp-127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1460 + 0x1.fffffa000003ffffffffffffffffffffp1, + -0x1.fffffcp-127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1461 + 0x1.fffffa000004p1, + -0x1.fffffcp-127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1462 + 0x1.fffffa000004p1, + -0x1.fffffcp-127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1463 + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1464 + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1465 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1466 + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1467 + 0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1468 + -0x1.00000000000000000000000000000003p-126, + -0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1469 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1470 + -0x1.fffffc00000000000000000000000007p-127, + -0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1471 + 0.0f, + -0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1472 + -0x1.00000000000000000000000001fffffcp-149, + -0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1473 + -0.0f, + -0x1.fffffcp-127, + 0x1.p-126, + 0.0f + }, + { // Entry 1474 + -0.0f, + -0x1.fffffcp-127, + 0x1.p-126, + -0.0f + }, + { // Entry 1475 + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1476 + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1477 + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1478 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1479 + 0x1.00000000000000000000000000000003p-126, + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1480 + -0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1481 + 0x1.fffffc00000000000000000000000007p-127, + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1482 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1483 + 0x1.00000000000000000000000001fffffcp-149, + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1484 + -0.0f, + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1485 + 0.0f, + -0x1.fffffcp-127, + -0x1.p-126, + 0.0f + }, + { // Entry 1486 + 0.0f, + -0x1.fffffcp-127, + -0x1.p-126, + -0.0f + }, + { // Entry 1487 + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1488 + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1489 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1490 + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1491 + 0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1492 + -0x1.00000000000000000000000000000003p-126, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1493 + 0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1494 + -0x1.fffffc00000000000000000000000007p-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1495 + 0.0f, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1496 + -0x1.00000000000000000000000001fffff8p-149, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1497 + -0.0f, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1498 + -0.0f, + -0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1499 + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1500 + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1501 + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1502 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1503 + 0x1.00000000000000000000000000000003p-126, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1504 + -0x1.fffffffffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1505 + 0x1.fffffc00000000000000000000000007p-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1506 + -0x1.fffffbfffffffffffffffffffffffff8p-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1507 + 0x1.00000000000000000000000001fffff8p-149, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1508 + -0.0f, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1509 + 0.0f, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1510 + 0.0f, + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1511 + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1512 + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1513 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1514 + -0x1.fffffep127, + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1515 + 0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1516 + -0x1.p-126, + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1517 + 0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1518 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1519 + 0.0f, + -0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1520 + -0x1.00000000000000000000000000000003p-149, + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1521 + -0.0f, + -0x1.fffffcp-127, + 0x1.p-149, + 0.0f + }, + { // Entry 1522 + -0.0f, + -0x1.fffffcp-127, + 0x1.p-149, + -0.0f + }, + { // Entry 1523 + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1524 + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1525 + 0x1.fffffep127, + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1526 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1527 + 0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1528 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1529 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1530 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1531 + 0x1.00000000000000000000000000000003p-149, + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1532 + -0.0f, + -0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1533 + 0.0f, + -0x1.fffffcp-127, + -0x1.p-149, + 0.0f + }, + { // Entry 1534 + 0.0f, + -0x1.fffffcp-127, + -0x1.p-149, + -0.0f + }, + { // Entry 1535 + HUGE_VALF, + -0x1.fffffcp-127, + 0.0f, + HUGE_VALF + }, + { // Entry 1536 + -HUGE_VALF, + -0x1.fffffcp-127, + 0.0f, + -HUGE_VALF + }, + { // Entry 1537 + 0x1.fffffep127, + -0x1.fffffcp-127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1538 + -0x1.fffffep127, + -0x1.fffffcp-127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1539 + 0x1.p-126, + -0x1.fffffcp-127, + 0.0f, + 0x1.p-126 + }, + { // Entry 1540 + -0x1.p-126, + -0x1.fffffcp-127, + 0.0f, + -0x1.p-126 + }, + { // Entry 1541 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1542 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1543 + 0x1.p-149, + -0x1.fffffcp-127, + 0.0f, + 0x1.p-149 + }, + { // Entry 1544 + -0x1.p-149, + -0x1.fffffcp-127, + 0.0f, + -0x1.p-149 + }, + { // Entry 1545 + 0.0, + -0x1.fffffcp-127, + 0.0f, + 0.0f + }, + { // Entry 1546 + -0.0, + -0x1.fffffcp-127, + 0.0f, + -0.0f + }, + { // Entry 1547 + HUGE_VALF, + -0x1.fffffcp-127, + -0.0f, + HUGE_VALF + }, + { // Entry 1548 + -HUGE_VALF, + -0x1.fffffcp-127, + -0.0f, + -HUGE_VALF + }, + { // Entry 1549 + 0x1.fffffep127, + -0x1.fffffcp-127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1550 + -0x1.fffffep127, + -0x1.fffffcp-127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1551 + 0x1.p-126, + -0x1.fffffcp-127, + -0.0f, + 0x1.p-126 + }, + { // Entry 1552 + -0x1.p-126, + -0x1.fffffcp-127, + -0.0f, + -0x1.p-126 + }, + { // Entry 1553 + 0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1554 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1555 + 0x1.p-149, + -0x1.fffffcp-127, + -0.0f, + 0x1.p-149 + }, + { // Entry 1556 + -0x1.p-149, + -0x1.fffffcp-127, + -0.0f, + -0x1.p-149 + }, + { // Entry 1557 + 0.0, + -0x1.fffffcp-127, + -0.0f, + 0.0f + }, + { // Entry 1558 + 0.0, + -0x1.fffffcp-127, + -0.0f, + -0.0f + }, + { // Entry 1559 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 1560 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1561 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1562 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1563 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1564 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1565 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1566 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1567 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1568 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + 0.0f + }, + { // Entry 1569 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF, + -0.0f + }, + { // Entry 1570 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1571 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1572 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1573 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1574 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1575 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1576 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1577 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1578 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1579 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + 0.0f + }, + { // Entry 1580 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF, + -0.0f + }, + { // Entry 1581 + HUGE_VALF, + 0x1.p-149, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1582 + -HUGE_VALF, + 0x1.p-149, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1583 + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1584 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1585 + 0x1.fffffe00000000000000000001p-22, + 0x1.p-149, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1586 + 0x1.fffffdffffffffffffffffffffp-22, + 0x1.p-149, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1587 + 0x1.fffffe00000000000000000000fffffep-22, + 0x1.p-149, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1588 + 0x1.fffffdffffffffffffffffffff000002p-22, + 0x1.p-149, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1589 + 0x1.fffffe00000000000000000000000002p-22, + 0x1.p-149, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1590 + 0x1.fffffdfffffffffffffffffffffffffep-22, + 0x1.p-149, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1591 + 0x1.fffffep-22, + 0x1.p-149, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1592 + 0x1.fffffep-22, + 0x1.p-149, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1593 + HUGE_VALF, + 0x1.p-149, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1594 + -HUGE_VALF, + 0x1.p-149, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1595 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1596 + -0x1.fffffep127, + 0x1.p-149, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1597 + -0x1.fffffdffffffffffffffffffffp-22, + 0x1.p-149, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1598 + -0x1.fffffe00000000000000000001p-22, + 0x1.p-149, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1599 + -0x1.fffffdffffffffffffffffffff000002p-22, + 0x1.p-149, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1600 + -0x1.fffffe00000000000000000000fffffep-22, + 0x1.p-149, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1601 + -0x1.fffffdfffffffffffffffffffffffffep-22, + 0x1.p-149, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1602 + -0x1.fffffe00000000000000000000000002p-22, + 0x1.p-149, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1603 + -0x1.fffffep-22, + 0x1.p-149, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1604 + -0x1.fffffep-22, + 0x1.p-149, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1605 + HUGE_VALF, + 0x1.p-149, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1606 + -HUGE_VALF, + 0x1.p-149, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1607 + 0x1.fffffep127, + 0x1.p-149, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1608 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1609 + 0x1.p-126, + 0x1.p-149, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1610 + -0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1611 + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1612 + -0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1613 + 0x1.00000000000000000000000000000004p-149, + 0x1.p-149, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1614 + -0.0f, + 0x1.p-149, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1615 + 0.0f, + 0x1.p-149, + 0x1.p-126, + 0.0f + }, + { // Entry 1616 + 0.0f, + 0x1.p-149, + 0x1.p-126, + -0.0f + }, + { // Entry 1617 + HUGE_VALF, + 0x1.p-149, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1618 + -HUGE_VALF, + 0x1.p-149, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1619 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1620 + -0x1.fffffep127, + 0x1.p-149, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1621 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1622 + -0x1.p-126, + 0x1.p-149, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1623 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1624 + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1625 + 0.0f, + 0x1.p-149, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1626 + -0x1.00000000000000000000000000000004p-149, + 0x1.p-149, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1627 + -0.0f, + 0x1.p-149, + -0x1.p-126, + 0.0f + }, + { // Entry 1628 + -0.0f, + 0x1.p-149, + -0x1.p-126, + -0.0f + }, + { // Entry 1629 + HUGE_VALF, + 0x1.p-149, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1630 + -HUGE_VALF, + 0x1.p-149, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1631 + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1632 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1633 + 0x1.p-126, + 0x1.p-149, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1634 + -0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1635 + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1636 + -0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1637 + 0x1.00000000000000000000000000000003p-149, + 0x1.p-149, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1638 + -0.0f, + 0x1.p-149, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1639 + 0.0f, + 0x1.p-149, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1640 + 0.0f, + 0x1.p-149, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1641 + HUGE_VALF, + 0x1.p-149, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1642 + -HUGE_VALF, + 0x1.p-149, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1643 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1644 + -0x1.fffffep127, + 0x1.p-149, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1645 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1646 + -0x1.p-126, + 0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1647 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1648 + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1649 + 0.0f, + 0x1.p-149, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1650 + -0x1.00000000000000000000000000000003p-149, + 0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1651 + -0.0f, + 0x1.p-149, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1652 + -0.0f, + 0x1.p-149, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1653 + HUGE_VALF, + 0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1654 + -HUGE_VALF, + 0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1655 + 0x1.fffffep127, + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1656 + -0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1657 + 0x1.p-126, + 0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1658 + -0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1659 + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1660 + -0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1661 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1662 + -0.0f, + 0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1663 + 0.0f, + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 1664 + 0.0f, + 0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 1665 + HUGE_VALF, + 0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1666 + -HUGE_VALF, + 0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1667 + 0x1.fffffdffffffffffffffffffffffffffp127, + 0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1668 + -0x1.fffffep127, + 0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1669 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1670 + -0x1.p-126, + 0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1671 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.p-149, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1672 + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1673 + 0.0f, + 0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1674 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1675 + -0.0f, + 0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 1676 + -0.0f, + 0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 1677 + HUGE_VALF, + 0x1.p-149, + 0.0f, + HUGE_VALF + }, + { // Entry 1678 + -HUGE_VALF, + 0x1.p-149, + 0.0f, + -HUGE_VALF + }, + { // Entry 1679 + 0x1.fffffep127, + 0x1.p-149, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1680 + -0x1.fffffep127, + 0x1.p-149, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1681 + 0x1.p-126, + 0x1.p-149, + 0.0f, + 0x1.p-126 + }, + { // Entry 1682 + -0x1.p-126, + 0x1.p-149, + 0.0f, + -0x1.p-126 + }, + { // Entry 1683 + 0x1.fffffcp-127, + 0x1.p-149, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1684 + -0x1.fffffcp-127, + 0x1.p-149, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1685 + 0x1.p-149, + 0x1.p-149, + 0.0f, + 0x1.p-149 + }, + { // Entry 1686 + -0x1.p-149, + 0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 1687 + 0.0, + 0x1.p-149, + 0.0f, + 0.0f + }, + { // Entry 1688 + 0.0, + 0x1.p-149, + 0.0f, + -0.0f + }, + { // Entry 1689 + HUGE_VALF, + 0x1.p-149, + -0.0f, + HUGE_VALF + }, + { // Entry 1690 + -HUGE_VALF, + 0x1.p-149, + -0.0f, + -HUGE_VALF + }, + { // Entry 1691 + 0x1.fffffep127, + 0x1.p-149, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1692 + -0x1.fffffep127, + 0x1.p-149, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1693 + 0x1.p-126, + 0x1.p-149, + -0.0f, + 0x1.p-126 + }, + { // Entry 1694 + -0x1.p-126, + 0x1.p-149, + -0.0f, + -0x1.p-126 + }, + { // Entry 1695 + 0x1.fffffcp-127, + 0x1.p-149, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1696 + -0x1.fffffcp-127, + 0x1.p-149, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1697 + 0x1.p-149, + 0x1.p-149, + -0.0f, + 0x1.p-149 + }, + { // Entry 1698 + -0x1.p-149, + 0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 1699 + 0.0, + 0x1.p-149, + -0.0f, + 0.0f + }, + { // Entry 1700 + -0.0, + 0x1.p-149, + -0.0f, + -0.0f + }, + { // Entry 1701 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 1702 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1703 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1704 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1705 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1706 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1707 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1708 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1709 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1710 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + 0.0f + }, + { // Entry 1711 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF, + -0.0f + }, + { // Entry 1712 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 1713 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 1714 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 1715 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 1716 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 1717 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 1718 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 1719 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 1720 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 1721 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + 0.0f + }, + { // Entry 1722 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF, + -0.0f + }, + { // Entry 1723 + HUGE_VALF, + -0x1.p-149, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1724 + -HUGE_VALF, + -0x1.p-149, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1725 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1726 + -0x1.fffffep127, + -0x1.p-149, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1727 + -0x1.fffffdffffffffffffffffffffp-22, + -0x1.p-149, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1728 + -0x1.fffffe00000000000000000001p-22, + -0x1.p-149, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1729 + -0x1.fffffdffffffffffffffffffff000002p-22, + -0x1.p-149, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1730 + -0x1.fffffe00000000000000000000fffffep-22, + -0x1.p-149, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1731 + -0x1.fffffdfffffffffffffffffffffffffep-22, + -0x1.p-149, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1732 + -0x1.fffffe00000000000000000000000002p-22, + -0x1.p-149, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1733 + -0x1.fffffep-22, + -0x1.p-149, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1734 + -0x1.fffffep-22, + -0x1.p-149, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1735 + HUGE_VALF, + -0x1.p-149, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1736 + -HUGE_VALF, + -0x1.p-149, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1737 + 0x1.fffffep127, + -0x1.p-149, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1738 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1739 + 0x1.fffffe00000000000000000001p-22, + -0x1.p-149, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1740 + 0x1.fffffdffffffffffffffffffffp-22, + -0x1.p-149, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1741 + 0x1.fffffe00000000000000000000fffffep-22, + -0x1.p-149, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1742 + 0x1.fffffdffffffffffffffffffff000002p-22, + -0x1.p-149, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1743 + 0x1.fffffe00000000000000000000000002p-22, + -0x1.p-149, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1744 + 0x1.fffffdfffffffffffffffffffffffffep-22, + -0x1.p-149, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1745 + 0x1.fffffep-22, + -0x1.p-149, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1746 + 0x1.fffffep-22, + -0x1.p-149, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1747 + HUGE_VALF, + -0x1.p-149, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1748 + -HUGE_VALF, + -0x1.p-149, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1749 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1750 + -0x1.fffffep127, + -0x1.p-149, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1751 + 0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1752 + -0x1.p-126, + -0x1.p-149, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1753 + 0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1754 + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1755 + 0.0f, + -0x1.p-149, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1756 + -0x1.00000000000000000000000000000004p-149, + -0x1.p-149, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1757 + -0.0f, + -0x1.p-149, + 0x1.p-126, + 0.0f + }, + { // Entry 1758 + -0.0f, + -0x1.p-149, + 0x1.p-126, + -0.0f + }, + { // Entry 1759 + HUGE_VALF, + -0x1.p-149, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1760 + -HUGE_VALF, + -0x1.p-149, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1761 + 0x1.fffffep127, + -0x1.p-149, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1762 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1763 + 0x1.p-126, + -0x1.p-149, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1764 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1765 + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1766 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1767 + 0x1.00000000000000000000000000000004p-149, + -0x1.p-149, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1768 + -0.0f, + -0x1.p-149, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1769 + 0.0f, + -0x1.p-149, + -0x1.p-126, + 0.0f + }, + { // Entry 1770 + 0.0f, + -0x1.p-149, + -0x1.p-126, + -0.0f + }, + { // Entry 1771 + HUGE_VALF, + -0x1.p-149, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1772 + -HUGE_VALF, + -0x1.p-149, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1773 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1774 + -0x1.fffffep127, + -0x1.p-149, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1775 + 0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1776 + -0x1.p-126, + -0x1.p-149, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1777 + 0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1778 + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1779 + 0.0f, + -0x1.p-149, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1780 + -0x1.00000000000000000000000000000003p-149, + -0x1.p-149, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1781 + -0.0f, + -0x1.p-149, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1782 + -0.0f, + -0x1.p-149, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1783 + HUGE_VALF, + -0x1.p-149, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1784 + -HUGE_VALF, + -0x1.p-149, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1785 + 0x1.fffffep127, + -0x1.p-149, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1786 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1787 + 0x1.p-126, + -0x1.p-149, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1788 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1789 + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1790 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1791 + 0x1.00000000000000000000000000000003p-149, + -0x1.p-149, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1792 + -0.0f, + -0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1793 + 0.0f, + -0x1.p-149, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1794 + 0.0f, + -0x1.p-149, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1795 + HUGE_VALF, + -0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1796 + -HUGE_VALF, + -0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1797 + 0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1798 + -0x1.fffffep127, + -0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1799 + 0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1800 + -0x1.p-126, + -0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1801 + 0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1802 + -0x1.fffffcp-127, + -0x1.p-149, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1803 + 0.0f, + -0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1804 + -0x1.p-149, + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1805 + -0.0f, + -0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 1806 + -0.0f, + -0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 1807 + HUGE_VALF, + -0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1808 + -HUGE_VALF, + -0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1809 + 0x1.fffffep127, + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1810 + -0x1.fffffdffffffffffffffffffffffffffp127, + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1811 + 0x1.p-126, + -0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1812 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1813 + 0x1.fffffcp-127, + -0x1.p-149, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1814 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.p-149, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1815 + 0x1.p-149, + -0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1816 + -0.0f, + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1817 + 0.0f, + -0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 1818 + 0.0f, + -0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 1819 + HUGE_VALF, + -0x1.p-149, + 0.0f, + HUGE_VALF + }, + { // Entry 1820 + -HUGE_VALF, + -0x1.p-149, + 0.0f, + -HUGE_VALF + }, + { // Entry 1821 + 0x1.fffffep127, + -0x1.p-149, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1822 + -0x1.fffffep127, + -0x1.p-149, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1823 + 0x1.p-126, + -0x1.p-149, + 0.0f, + 0x1.p-126 + }, + { // Entry 1824 + -0x1.p-126, + -0x1.p-149, + 0.0f, + -0x1.p-126 + }, + { // Entry 1825 + 0x1.fffffcp-127, + -0x1.p-149, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1826 + -0x1.fffffcp-127, + -0x1.p-149, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1827 + 0x1.p-149, + -0x1.p-149, + 0.0f, + 0x1.p-149 + }, + { // Entry 1828 + -0x1.p-149, + -0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 1829 + 0.0, + -0x1.p-149, + 0.0f, + 0.0f + }, + { // Entry 1830 + -0.0, + -0x1.p-149, + 0.0f, + -0.0f + }, + { // Entry 1831 + HUGE_VALF, + -0x1.p-149, + -0.0f, + HUGE_VALF + }, + { // Entry 1832 + -HUGE_VALF, + -0x1.p-149, + -0.0f, + -HUGE_VALF + }, + { // Entry 1833 + 0x1.fffffep127, + -0x1.p-149, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1834 + -0x1.fffffep127, + -0x1.p-149, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1835 + 0x1.p-126, + -0x1.p-149, + -0.0f, + 0x1.p-126 + }, + { // Entry 1836 + -0x1.p-126, + -0x1.p-149, + -0.0f, + -0x1.p-126 + }, + { // Entry 1837 + 0x1.fffffcp-127, + -0x1.p-149, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1838 + -0x1.fffffcp-127, + -0x1.p-149, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1839 + 0x1.p-149, + -0x1.p-149, + -0.0f, + 0x1.p-149 + }, + { // Entry 1840 + -0x1.p-149, + -0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 1841 + 0.0, + -0x1.p-149, + -0.0f, + 0.0f + }, + { // Entry 1842 + 0.0, + -0x1.p-149, + -0.0f, + -0.0f + }, + { // Entry 1843 + HUGE_VALF, + 0.0f, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1844 + -HUGE_VALF, + 0.0f, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1845 + 0x1.fffffep127, + 0.0f, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1846 + -0x1.fffffep127, + 0.0f, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1847 + 0x1.p-126, + 0.0f, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1848 + -0x1.p-126, + 0.0f, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1849 + 0x1.fffffcp-127, + 0.0f, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1850 + -0x1.fffffcp-127, + 0.0f, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1851 + 0x1.p-149, + 0.0f, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1852 + -0x1.p-149, + 0.0f, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1853 + 0.0, + 0.0f, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1854 + 0.0, + 0.0f, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1855 + HUGE_VALF, + 0.0f, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1856 + -HUGE_VALF, + 0.0f, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1857 + 0x1.fffffep127, + 0.0f, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1858 + -0x1.fffffep127, + 0.0f, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1859 + 0x1.p-126, + 0.0f, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1860 + -0x1.p-126, + 0.0f, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1861 + 0x1.fffffcp-127, + 0.0f, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1862 + -0x1.fffffcp-127, + 0.0f, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1863 + 0x1.p-149, + 0.0f, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1864 + -0x1.p-149, + 0.0f, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1865 + 0.0, + 0.0f, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1866 + -0.0, + 0.0f, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1867 + HUGE_VALF, + 0.0f, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1868 + -HUGE_VALF, + 0.0f, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1869 + 0x1.fffffep127, + 0.0f, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1870 + -0x1.fffffep127, + 0.0f, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1871 + 0x1.p-126, + 0.0f, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1872 + -0x1.p-126, + 0.0f, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1873 + 0x1.fffffcp-127, + 0.0f, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1874 + -0x1.fffffcp-127, + 0.0f, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1875 + 0x1.p-149, + 0.0f, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1876 + -0x1.p-149, + 0.0f, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1877 + 0.0, + 0.0f, + 0x1.p-126, + 0.0f + }, + { // Entry 1878 + 0.0, + 0.0f, + 0x1.p-126, + -0.0f + }, + { // Entry 1879 + HUGE_VALF, + 0.0f, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 1880 + -HUGE_VALF, + 0.0f, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 1881 + 0x1.fffffep127, + 0.0f, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1882 + -0x1.fffffep127, + 0.0f, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1883 + 0x1.p-126, + 0.0f, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 1884 + -0x1.p-126, + 0.0f, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 1885 + 0x1.fffffcp-127, + 0.0f, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1886 + -0x1.fffffcp-127, + 0.0f, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1887 + 0x1.p-149, + 0.0f, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 1888 + -0x1.p-149, + 0.0f, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 1889 + 0.0, + 0.0f, + -0x1.p-126, + 0.0f + }, + { // Entry 1890 + -0.0, + 0.0f, + -0x1.p-126, + -0.0f + }, + { // Entry 1891 + HUGE_VALF, + 0.0f, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1892 + -HUGE_VALF, + 0.0f, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1893 + 0x1.fffffep127, + 0.0f, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1894 + -0x1.fffffep127, + 0.0f, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1895 + 0x1.p-126, + 0.0f, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1896 + -0x1.p-126, + 0.0f, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1897 + 0x1.fffffcp-127, + 0.0f, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1898 + -0x1.fffffcp-127, + 0.0f, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1899 + 0x1.p-149, + 0.0f, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1900 + -0x1.p-149, + 0.0f, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1901 + 0.0, + 0.0f, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 1902 + 0.0, + 0.0f, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 1903 + HUGE_VALF, + 0.0f, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 1904 + -HUGE_VALF, + 0.0f, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 1905 + 0x1.fffffep127, + 0.0f, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 1906 + -0x1.fffffep127, + 0.0f, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 1907 + 0x1.p-126, + 0.0f, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 1908 + -0x1.p-126, + 0.0f, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 1909 + 0x1.fffffcp-127, + 0.0f, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 1910 + -0x1.fffffcp-127, + 0.0f, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 1911 + 0x1.p-149, + 0.0f, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 1912 + -0x1.p-149, + 0.0f, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 1913 + 0.0, + 0.0f, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 1914 + -0.0, + 0.0f, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 1915 + HUGE_VALF, + 0.0f, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 1916 + -HUGE_VALF, + 0.0f, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 1917 + 0x1.fffffep127, + 0.0f, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1918 + -0x1.fffffep127, + 0.0f, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1919 + 0x1.p-126, + 0.0f, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 1920 + -0x1.p-126, + 0.0f, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 1921 + 0x1.fffffcp-127, + 0.0f, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1922 + -0x1.fffffcp-127, + 0.0f, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1923 + 0x1.p-149, + 0.0f, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 1924 + -0x1.p-149, + 0.0f, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 1925 + 0.0, + 0.0f, + 0x1.p-149, + 0.0f + }, + { // Entry 1926 + 0.0, + 0.0f, + 0x1.p-149, + -0.0f + }, + { // Entry 1927 + HUGE_VALF, + 0.0f, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 1928 + -HUGE_VALF, + 0.0f, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 1929 + 0x1.fffffep127, + 0.0f, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 1930 + -0x1.fffffep127, + 0.0f, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 1931 + 0x1.p-126, + 0.0f, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 1932 + -0x1.p-126, + 0.0f, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 1933 + 0x1.fffffcp-127, + 0.0f, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 1934 + -0x1.fffffcp-127, + 0.0f, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 1935 + 0x1.p-149, + 0.0f, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 1936 + -0x1.p-149, + 0.0f, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1937 + 0.0, + 0.0f, + -0x1.p-149, + 0.0f + }, + { // Entry 1938 + -0.0, + 0.0f, + -0x1.p-149, + -0.0f + }, + { // Entry 1939 + HUGE_VALF, + 0.0f, + 0.0f, + HUGE_VALF + }, + { // Entry 1940 + -HUGE_VALF, + 0.0f, + 0.0f, + -HUGE_VALF + }, + { // Entry 1941 + 0x1.fffffep127, + 0.0f, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 1942 + -0x1.fffffep127, + 0.0f, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 1943 + 0x1.p-126, + 0.0f, + 0.0f, + 0x1.p-126 + }, + { // Entry 1944 + -0x1.p-126, + 0.0f, + 0.0f, + -0x1.p-126 + }, + { // Entry 1945 + 0x1.fffffcp-127, + 0.0f, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1946 + -0x1.fffffcp-127, + 0.0f, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1947 + 0x1.p-149, + 0.0f, + 0.0f, + 0x1.p-149 + }, + { // Entry 1948 + -0x1.p-149, + 0.0f, + 0.0f, + -0x1.p-149 + }, + { // Entry 1949 + 0.0, + 0.0f, + 0.0f, + 0.0f + }, + { // Entry 1950 + 0.0, + 0.0f, + 0.0f, + -0.0f + }, + { // Entry 1951 + HUGE_VALF, + 0.0f, + -0.0f, + HUGE_VALF + }, + { // Entry 1952 + -HUGE_VALF, + 0.0f, + -0.0f, + -HUGE_VALF + }, + { // Entry 1953 + 0x1.fffffep127, + 0.0f, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 1954 + -0x1.fffffep127, + 0.0f, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 1955 + 0x1.p-126, + 0.0f, + -0.0f, + 0x1.p-126 + }, + { // Entry 1956 + -0x1.p-126, + 0.0f, + -0.0f, + -0x1.p-126 + }, + { // Entry 1957 + 0x1.fffffcp-127, + 0.0f, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 1958 + -0x1.fffffcp-127, + 0.0f, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 1959 + 0x1.p-149, + 0.0f, + -0.0f, + 0x1.p-149 + }, + { // Entry 1960 + -0x1.p-149, + 0.0f, + -0.0f, + -0x1.p-149 + }, + { // Entry 1961 + 0.0, + 0.0f, + -0.0f, + 0.0f + }, + { // Entry 1962 + -0.0, + 0.0f, + -0.0f, + -0.0f + }, + { // Entry 1963 + HUGE_VALF, + -0.0f, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1964 + -HUGE_VALF, + -0.0f, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1965 + 0x1.fffffep127, + -0.0f, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1966 + -0x1.fffffep127, + -0.0f, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1967 + 0x1.p-126, + -0.0f, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1968 + -0x1.p-126, + -0.0f, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1969 + 0x1.fffffcp-127, + -0.0f, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1970 + -0x1.fffffcp-127, + -0.0f, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1971 + 0x1.p-149, + -0.0f, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1972 + -0x1.p-149, + -0.0f, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1973 + 0.0, + -0.0f, + 0x1.fffffep127, + 0.0f + }, + { // Entry 1974 + -0.0, + -0.0f, + 0x1.fffffep127, + -0.0f + }, + { // Entry 1975 + HUGE_VALF, + -0.0f, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 1976 + -HUGE_VALF, + -0.0f, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 1977 + 0x1.fffffep127, + -0.0f, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 1978 + -0x1.fffffep127, + -0.0f, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 1979 + 0x1.p-126, + -0.0f, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 1980 + -0x1.p-126, + -0.0f, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 1981 + 0x1.fffffcp-127, + -0.0f, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 1982 + -0x1.fffffcp-127, + -0.0f, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 1983 + 0x1.p-149, + -0.0f, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 1984 + -0x1.p-149, + -0.0f, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 1985 + 0.0, + -0.0f, + -0x1.fffffep127, + 0.0f + }, + { // Entry 1986 + 0.0, + -0.0f, + -0x1.fffffep127, + -0.0f + }, + { // Entry 1987 + HUGE_VALF, + -0.0f, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 1988 + -HUGE_VALF, + -0.0f, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 1989 + 0x1.fffffep127, + -0.0f, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 1990 + -0x1.fffffep127, + -0.0f, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 1991 + 0x1.p-126, + -0.0f, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 1992 + -0x1.p-126, + -0.0f, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 1993 + 0x1.fffffcp-127, + -0.0f, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 1994 + -0x1.fffffcp-127, + -0.0f, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 1995 + 0x1.p-149, + -0.0f, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 1996 + -0x1.p-149, + -0.0f, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 1997 + 0.0, + -0.0f, + 0x1.p-126, + 0.0f + }, + { // Entry 1998 + -0.0, + -0.0f, + 0x1.p-126, + -0.0f + }, + { // Entry 1999 + HUGE_VALF, + -0.0f, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 2000 + -HUGE_VALF, + -0.0f, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 2001 + 0x1.fffffep127, + -0.0f, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 2002 + -0x1.fffffep127, + -0.0f, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 2003 + 0x1.p-126, + -0.0f, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 2004 + -0x1.p-126, + -0.0f, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 2005 + 0x1.fffffcp-127, + -0.0f, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 2006 + -0x1.fffffcp-127, + -0.0f, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 2007 + 0x1.p-149, + -0.0f, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 2008 + -0x1.p-149, + -0.0f, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 2009 + 0.0, + -0.0f, + -0x1.p-126, + 0.0f + }, + { // Entry 2010 + 0.0, + -0.0f, + -0x1.p-126, + -0.0f + }, + { // Entry 2011 + HUGE_VALF, + -0.0f, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 2012 + -HUGE_VALF, + -0.0f, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 2013 + 0x1.fffffep127, + -0.0f, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2014 + -0x1.fffffep127, + -0.0f, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2015 + 0x1.p-126, + -0.0f, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2016 + -0x1.p-126, + -0.0f, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2017 + 0x1.fffffcp-127, + -0.0f, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2018 + -0x1.fffffcp-127, + -0.0f, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2019 + 0x1.p-149, + -0.0f, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2020 + -0x1.p-149, + -0.0f, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2021 + 0.0, + -0.0f, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 2022 + -0.0, + -0.0f, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 2023 + HUGE_VALF, + -0.0f, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 2024 + -HUGE_VALF, + -0.0f, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 2025 + 0x1.fffffep127, + -0.0f, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2026 + -0x1.fffffep127, + -0.0f, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2027 + 0x1.p-126, + -0.0f, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2028 + -0x1.p-126, + -0.0f, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2029 + 0x1.fffffcp-127, + -0.0f, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2030 + -0x1.fffffcp-127, + -0.0f, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2031 + 0x1.p-149, + -0.0f, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2032 + -0x1.p-149, + -0.0f, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2033 + 0.0, + -0.0f, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 2034 + 0.0, + -0.0f, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 2035 + HUGE_VALF, + -0.0f, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 2036 + -HUGE_VALF, + -0.0f, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 2037 + 0x1.fffffep127, + -0.0f, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2038 + -0x1.fffffep127, + -0.0f, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2039 + 0x1.p-126, + -0.0f, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 2040 + -0x1.p-126, + -0.0f, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 2041 + 0x1.fffffcp-127, + -0.0f, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2042 + -0x1.fffffcp-127, + -0.0f, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2043 + 0x1.p-149, + -0.0f, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 2044 + -0x1.p-149, + -0.0f, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 2045 + 0.0, + -0.0f, + 0x1.p-149, + 0.0f + }, + { // Entry 2046 + -0.0, + -0.0f, + 0x1.p-149, + -0.0f + }, + { // Entry 2047 + HUGE_VALF, + -0.0f, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 2048 + -HUGE_VALF, + -0.0f, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 2049 + 0x1.fffffep127, + -0.0f, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2050 + -0x1.fffffep127, + -0.0f, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2051 + 0x1.p-126, + -0.0f, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 2052 + -0x1.p-126, + -0.0f, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 2053 + 0x1.fffffcp-127, + -0.0f, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2054 + -0x1.fffffcp-127, + -0.0f, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2055 + 0x1.p-149, + -0.0f, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 2056 + -0x1.p-149, + -0.0f, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 2057 + 0.0, + -0.0f, + -0x1.p-149, + 0.0f + }, + { // Entry 2058 + 0.0, + -0.0f, + -0x1.p-149, + -0.0f + }, + { // Entry 2059 + HUGE_VALF, + -0.0f, + 0.0f, + HUGE_VALF + }, + { // Entry 2060 + -HUGE_VALF, + -0.0f, + 0.0f, + -HUGE_VALF + }, + { // Entry 2061 + 0x1.fffffep127, + -0.0f, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 2062 + -0x1.fffffep127, + -0.0f, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 2063 + 0x1.p-126, + -0.0f, + 0.0f, + 0x1.p-126 + }, + { // Entry 2064 + -0x1.p-126, + -0.0f, + 0.0f, + -0x1.p-126 + }, + { // Entry 2065 + 0x1.fffffcp-127, + -0.0f, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 2066 + -0x1.fffffcp-127, + -0.0f, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 2067 + 0x1.p-149, + -0.0f, + 0.0f, + 0x1.p-149 + }, + { // Entry 2068 + -0x1.p-149, + -0.0f, + 0.0f, + -0x1.p-149 + }, + { // Entry 2069 + 0.0, + -0.0f, + 0.0f, + 0.0f + }, + { // Entry 2070 + -0.0, + -0.0f, + 0.0f, + -0.0f + }, + { // Entry 2071 + HUGE_VALF, + -0.0f, + -0.0f, + HUGE_VALF + }, + { // Entry 2072 + -HUGE_VALF, + -0.0f, + -0.0f, + -HUGE_VALF + }, + { // Entry 2073 + 0x1.fffffep127, + -0.0f, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 2074 + -0x1.fffffep127, + -0.0f, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 2075 + 0x1.p-126, + -0.0f, + -0.0f, + 0x1.p-126 + }, + { // Entry 2076 + -0x1.p-126, + -0.0f, + -0.0f, + -0x1.p-126 + }, + { // Entry 2077 + 0x1.fffffcp-127, + -0.0f, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 2078 + -0x1.fffffcp-127, + -0.0f, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 2079 + 0x1.p-149, + -0.0f, + -0.0f, + 0x1.p-149 + }, + { // Entry 2080 + -0x1.p-149, + -0.0f, + -0.0f, + -0x1.p-149 + }, + { // Entry 2081 + 0.0, + -0.0f, + -0.0f, + 0.0f + }, + { // Entry 2082 + 0.0, + -0.0f, + -0.0f, + -0.0f + }, + { // Entry 2083 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 2084 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 2085 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 2086 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 2087 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 2088 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 2089 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 2090 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 2091 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 2092 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 2093 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 2094 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 2095 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 2096 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 2097 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 2098 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 2099 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 2100 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 2101 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 2102 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 2103 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 2104 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 2105 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 2106 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 2107 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 2108 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 2109 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 2110 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 2111 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 2112 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 2113 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 2114 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + 0.0f + }, + { // Entry 2115 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127, + -0.0f + }, + { // Entry 2116 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 2117 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 2118 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 2119 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 2120 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 2121 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 2122 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 2123 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 2124 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 2125 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + 0.0f + }, + { // Entry 2126 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127, + -0.0f + }, + { // Entry 2127 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 2128 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 2129 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 2130 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 2131 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 2132 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 2133 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 2134 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 2135 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 2136 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + 0.0f + }, + { // Entry 2137 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126, + -0.0f + }, + { // Entry 2138 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 2139 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 2140 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 2141 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 2142 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 2143 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 2144 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 2145 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 2146 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 2147 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + 0.0f + }, + { // Entry 2148 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126, + -0.0f + }, + { // Entry 2149 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 2150 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2151 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2152 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2153 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2154 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2155 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2156 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2157 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2158 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 2159 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 2160 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 2161 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2162 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2163 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2164 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2165 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2166 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2167 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2168 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2169 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 2170 + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 2171 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 2172 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2173 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2174 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 2175 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 2176 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2177 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2178 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 2179 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 2180 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + 0.0f + }, + { // Entry 2181 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149, + -0.0f + }, + { // Entry 2182 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 2183 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2184 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2185 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 2186 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 2187 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2188 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2189 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 2190 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 2191 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + 0.0f + }, + { // Entry 2192 + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149, + -0.0f + }, + { // Entry 2193 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 2194 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 2195 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 2196 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 2197 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 2198 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 2199 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 2200 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 2201 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 2202 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 2203 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 2204 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 2205 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 2206 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 2207 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 2208 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 2209 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 2210 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 2211 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 2212 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 2213 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 2214 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 2215 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 2216 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 2217 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 2218 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 2219 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 2220 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 2221 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 2222 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 2223 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 2224 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + 0.0f + }, + { // Entry 2225 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127, + -0.0f + }, + { // Entry 2226 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 2227 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 2228 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 2229 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 2230 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 2231 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 2232 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 2233 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 2234 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 2235 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + 0.0f + }, + { // Entry 2236 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127, + -0.0f + }, + { // Entry 2237 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 2238 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 2239 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 2240 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 2241 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 2242 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 2243 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 2244 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 2245 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 2246 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + 0.0f + }, + { // Entry 2247 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126, + -0.0f + }, + { // Entry 2248 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 2249 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 2250 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 2251 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 2252 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 2253 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 2254 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 2255 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 2256 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 2257 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + 0.0f + }, + { // Entry 2258 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126, + -0.0f + }, + { // Entry 2259 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 2260 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2261 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2262 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2263 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2264 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2265 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2266 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2267 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2268 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 2269 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 2270 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 2271 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 2272 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 2273 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 2274 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 2275 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 2276 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 2277 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 2278 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 2279 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 2280 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 2281 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 2282 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2283 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2284 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 2285 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 2286 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2287 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2288 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 2289 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 2290 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + 0.0f + }, + { // Entry 2291 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149, + -0.0f + }, + { // Entry 2292 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 2293 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 2294 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 2295 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 2296 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 2297 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 2298 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 2299 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 2300 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 2301 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + 0.0f + }, + { // Entry 2302 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149, + -0.0f + } +}; diff --git a/tests/math_data/fmax_intel_data.h b/tests/math_data/fmax_intel_data.h new file mode 100644 index 000000000..14bd38bc6 --- /dev/null +++ b/tests/math_data/fmax_intel_data.h @@ -0,0 +1,1093 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fmax_intel_data[] = { + { // Entry 0 + -0x1.40p3, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 1 + 0x1.40p3, + -0x1.4p3, + 0x1.4p3 + }, + { // Entry 2 + 0x1.40p3, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 3 + 0x1.40p3, + 0x1.4p3, + 0x1.4p3 + }, + { // Entry 4 + -0x1.p-1073, + -0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 5 + -0x1.p-1074, + -0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 6 + -0.0, + -0x1.0p-1073, + -0.0 + }, + { // Entry 7 + 0x1.p-1074, + -0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 8 + 0x1.p-1073, + -0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 9 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 10 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 11 + -0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 12 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 13 + 0x1.p-1073, + -0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 14 + -0.0, + -0.0, + -0x1.0p-1073 + }, + { // Entry 15 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 16 + -0.0, + -0.0, + -0.0 + }, + { // Entry 17 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 18 + 0x1.p-1073, + -0.0, + 0x1.0p-1073 + }, + { // Entry 19 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 20 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 21 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 22 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 23 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 24 + 0x1.p-1073, + 0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 25 + 0x1.p-1073, + 0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 26 + 0x1.p-1073, + 0x1.0p-1073, + -0.0 + }, + { // Entry 27 + 0x1.p-1073, + 0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 28 + 0x1.p-1073, + 0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 29 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 30 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 31 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 32 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 33 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 34 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 35 + 0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 36 + 0x1.p-1023, + 0x1.ffffffffffffcp-1024, + 0x1.0p-1023 + }, + { // Entry 37 + 0x1.00000000000020p-1023, + 0x1.ffffffffffffcp-1024, + 0x1.0000000000002p-1023 + }, + { // Entry 38 + 0x1.p-1023, + 0x1.0p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 39 + 0x1.p-1023, + 0x1.0p-1023, + 0x1.0p-1023 + }, + { // Entry 40 + 0x1.00000000000020p-1023, + 0x1.0p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 41 + 0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 42 + 0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + 0x1.0p-1023 + }, + { // Entry 43 + 0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 44 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp-51, + 0x1.fffffffffffffp-51 + }, + { // Entry 45 + 0x1.p-50, + 0x1.fffffffffffffp-51, + 0x1.0p-50 + }, + { // Entry 46 + 0x1.00000000000010p-50, + 0x1.fffffffffffffp-51, + 0x1.0000000000001p-50 + }, + { // Entry 47 + 0x1.p-50, + 0x1.0p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 48 + 0x1.p-50, + 0x1.0p-50, + 0x1.0p-50 + }, + { // Entry 49 + 0x1.00000000000010p-50, + 0x1.0p-50, + 0x1.0000000000001p-50 + }, + { // Entry 50 + 0x1.00000000000010p-50, + 0x1.0000000000001p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 51 + 0x1.00000000000010p-50, + 0x1.0000000000001p-50, + 0x1.0p-50 + }, + { // Entry 52 + 0x1.00000000000010p-50, + 0x1.0000000000001p-50, + 0x1.0000000000001p-50 + }, + { // Entry 53 + 0x1.fffffffffffff0p-11, + 0x1.fffffffffffffp-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 54 + 0x1.p-10, + 0x1.fffffffffffffp-11, + 0x1.0p-10 + }, + { // Entry 55 + 0x1.00000000000010p-10, + 0x1.fffffffffffffp-11, + 0x1.0000000000001p-10 + }, + { // Entry 56 + 0x1.p-10, + 0x1.0p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 57 + 0x1.p-10, + 0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 58 + 0x1.00000000000010p-10, + 0x1.0p-10, + 0x1.0000000000001p-10 + }, + { // Entry 59 + 0x1.00000000000010p-10, + 0x1.0000000000001p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 60 + 0x1.00000000000010p-10, + 0x1.0000000000001p-10, + 0x1.0p-10 + }, + { // Entry 61 + 0x1.00000000000010p-10, + 0x1.0000000000001p-10, + 0x1.0000000000001p-10 + }, + { // Entry 62 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 63 + 0x1.p-1, + 0x1.fffffffffffffp-2, + 0x1.0p-1 + }, + { // Entry 64 + 0x1.00000000000010p-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-1 + }, + { // Entry 65 + 0x1.p-1, + 0x1.0p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 66 + 0x1.p-1, + 0x1.0p-1, + 0x1.0p-1 + }, + { // Entry 67 + 0x1.00000000000010p-1, + 0x1.0p-1, + 0x1.0000000000001p-1 + }, + { // Entry 68 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 69 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.0p-1 + }, + { // Entry 70 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-1 + }, + { // Entry 71 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 72 + 0x1.p1, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 73 + 0x1.00000000000010p1, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 74 + 0x1.p1, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 75 + 0x1.p1, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 76 + 0x1.00000000000010p1, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 77 + 0x1.00000000000010p1, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 78 + 0x1.00000000000010p1, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 79 + 0x1.00000000000010p1, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 80 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 81 + 0x1.p10, + 0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 82 + 0x1.00000000000010p10, + 0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 83 + 0x1.p10, + 0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 84 + 0x1.p10, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 85 + 0x1.00000000000010p10, + 0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 86 + 0x1.00000000000010p10, + 0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 87 + 0x1.00000000000010p10, + 0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 88 + 0x1.00000000000010p10, + 0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 89 + 0x1.fffffffffffff0p49, + 0x1.fffffffffffffp49, + 0x1.fffffffffffffp49 + }, + { // Entry 90 + 0x1.p50, + 0x1.fffffffffffffp49, + 0x1.0p50 + }, + { // Entry 91 + 0x1.00000000000010p50, + 0x1.fffffffffffffp49, + 0x1.0000000000001p50 + }, + { // Entry 92 + 0x1.p50, + 0x1.0p50, + 0x1.fffffffffffffp49 + }, + { // Entry 93 + 0x1.p50, + 0x1.0p50, + 0x1.0p50 + }, + { // Entry 94 + 0x1.00000000000010p50, + 0x1.0p50, + 0x1.0000000000001p50 + }, + { // Entry 95 + 0x1.00000000000010p50, + 0x1.0000000000001p50, + 0x1.fffffffffffffp49 + }, + { // Entry 96 + 0x1.00000000000010p50, + 0x1.0000000000001p50, + 0x1.0p50 + }, + { // Entry 97 + 0x1.00000000000010p50, + 0x1.0000000000001p50, + 0x1.0000000000001p50 + }, + { // Entry 98 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp1022 + }, + { // Entry 99 + 0x1.p1023, + 0x1.fffffffffffffp1022, + 0x1.0p1023 + }, + { // Entry 100 + 0x1.00000000000010p1023, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p1023 + }, + { // Entry 101 + 0x1.p1023, + 0x1.0p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 102 + 0x1.p1023, + 0x1.0p1023, + 0x1.0p1023 + }, + { // Entry 103 + 0x1.00000000000010p1023, + 0x1.0p1023, + 0x1.0000000000001p1023 + }, + { // Entry 104 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 105 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.0p1023 + }, + { // Entry 106 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.0000000000001p1023 + }, + { // Entry 107 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 108 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 109 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 110 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 111 + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 112 + HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 113 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 114 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 115 + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 116 + HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 117 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 118 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 119 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 120 + HUGE_VAL, + 0.0, + HUGE_VAL + }, + { // Entry 121 + HUGE_VAL, + -0.0, + HUGE_VAL + }, + { // Entry 122 + HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 123 + HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 124 + HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 125 + HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 126 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 127 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 128 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 129 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 130 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 131 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 132 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 133 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 134 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 135 + 0x1.fffffffffffff0p1023, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 136 + 0x1.fffffffffffff0p1023, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 137 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 138 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 139 + 0x1.fffffffffffff0p1023, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 140 + 0x1.fffffffffffff0p1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 141 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 142 + 0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 143 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 144 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 145 + 0x1.p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 146 + 0x1.p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 147 + 0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 148 + 0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 149 + 0x1.p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 150 + 0x1.p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 151 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 152 + 0x1.p-1022, + 0.0, + 0x1.0p-1022 + }, + { // Entry 153 + 0x1.p-1022, + -0.0, + 0x1.0p-1022 + }, + { // Entry 154 + 0x1.p-1022, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 155 + 0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 156 + 0x1.p-1022, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 157 + 0x1.p-1022, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 158 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 159 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 160 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 161 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 162 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 163 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 164 + 0x1.p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 165 + 0x1.p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 166 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 167 + 0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 168 + 0x1.p-1074, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 169 + 0x1.p-1074, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 170 + 0x1.p-1074, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 171 + 0.0, + 0.0, + 0.0 + }, + { // Entry 172 + 0.0, + 0.0, + -0.0 + }, + { // Entry 173 + 0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 174 + 0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 175 + 0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 176 + 0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 177 + -0.0, + -0.0, + 0.0 + }, + { // Entry 178 + 0.0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 179 + 0.0, + -0x1.0p-1022, + 0.0 + }, + { // Entry 180 + 0.0, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 181 + 0.0, + -HUGE_VAL, + 0.0 + }, + { // Entry 182 + -0.0, + -0.0, + -0.0 + }, + { // Entry 183 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 184 + -0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 185 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 186 + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 187 + -0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 188 + -0.0, + -0x1.0p-1022, + -0.0 + }, + { // Entry 189 + -0.0, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 190 + -0.0, + -HUGE_VAL, + -0.0 + }, + { // Entry 191 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 192 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 193 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 194 + -0x1.p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 195 + -0x1.p-1074, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 196 + -0x1.p-1074, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 197 + -0x1.p-1074, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 198 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 199 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 200 + -0x1.p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 201 + -0x1.p-1022, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 202 + -0x1.p-1022, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 203 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 204 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 205 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 206 + -HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 207 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 208 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 209 + 0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 210 + 0x1.p-1074, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 211 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 212 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 213 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 214 + -0x1.p-1074, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + } +}; diff --git a/tests/math_data/fmaxf_intel_data.h b/tests/math_data/fmaxf_intel_data.h new file mode 100644 index 000000000..10f8319fd --- /dev/null +++ b/tests/math_data/fmaxf_intel_data.h @@ -0,0 +1,1103 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fmaxf_intel_data[] = { + { // Entry 0 + 0x1.p-148, + 0.0, + 0x1.p-148 + }, + { // Entry 1 + 0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.00068ep0 + }, + { // Entry 2 + -0x1.40p3, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 3 + 0x1.40p3, + -0x1.40p3, + 0x1.40p3 + }, + { // Entry 4 + 0x1.40p3, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 5 + 0x1.40p3, + 0x1.40p3, + 0x1.40p3 + }, + { // Entry 6 + -0x1.p-148, + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 7 + -0x1.p-149, + -0x1.p-148, + -0x1.p-149 + }, + { // Entry 8 + 0.0, + -0x1.p-148, + 0.0 + }, + { // Entry 9 + 0x1.p-149, + -0x1.p-148, + 0x1.p-149 + }, + { // Entry 10 + 0x1.p-148, + -0x1.p-148, + 0x1.p-148 + }, + { // Entry 11 + -0x1.p-149, + -0x1.p-149, + -0x1.p-148 + }, + { // Entry 12 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 13 + 0.0, + -0x1.p-149, + 0.0 + }, + { // Entry 14 + 0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 15 + 0x1.p-148, + -0x1.p-149, + 0x1.p-148 + }, + { // Entry 16 + 0.0, + 0.0, + -0x1.p-148 + }, + { // Entry 17 + 0.0, + 0.0, + -0x1.p-149 + }, + { // Entry 18 + 0.0, + 0.0, + 0.0 + }, + { // Entry 19 + 0x1.p-149, + 0.0, + 0x1.p-149 + }, + { // Entry 20 + 0x1.p-148, + 0.0, + 0x1.p-148 + }, + { // Entry 21 + 0x1.p-149, + 0x1.p-149, + -0x1.p-148 + }, + { // Entry 22 + 0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 23 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 24 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 25 + 0x1.p-148, + 0x1.p-149, + 0x1.p-148 + }, + { // Entry 26 + 0x1.p-148, + 0x1.p-148, + -0x1.p-148 + }, + { // Entry 27 + 0x1.p-148, + 0x1.p-148, + -0x1.p-149 + }, + { // Entry 28 + 0x1.p-148, + 0x1.p-148, + 0.0 + }, + { // Entry 29 + 0x1.p-148, + 0x1.p-148, + 0x1.p-149 + }, + { // Entry 30 + 0x1.p-148, + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 31 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 32 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 33 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 34 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 35 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 36 + 0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 37 + 0x1.fffff8p-128, + 0x1.fffff8p-128, + 0x1.fffff8p-128 + }, + { // Entry 38 + 0x1.p-127, + 0x1.fffff8p-128, + 0x1.p-127 + }, + { // Entry 39 + 0x1.000004p-127, + 0x1.fffff8p-128, + 0x1.000004p-127 + }, + { // Entry 40 + 0x1.p-127, + 0x1.p-127, + 0x1.fffff8p-128 + }, + { // Entry 41 + 0x1.p-127, + 0x1.p-127, + 0x1.p-127 + }, + { // Entry 42 + 0x1.000004p-127, + 0x1.p-127, + 0x1.000004p-127 + }, + { // Entry 43 + 0x1.000004p-127, + 0x1.000004p-127, + 0x1.fffff8p-128 + }, + { // Entry 44 + 0x1.000004p-127, + 0x1.000004p-127, + 0x1.p-127 + }, + { // Entry 45 + 0x1.000004p-127, + 0x1.000004p-127, + 0x1.000004p-127 + }, + { // Entry 46 + 0x1.fffffep-51, + 0x1.fffffep-51, + 0x1.fffffep-51 + }, + { // Entry 47 + 0x1.p-50, + 0x1.fffffep-51, + 0x1.p-50 + }, + { // Entry 48 + 0x1.000002p-50, + 0x1.fffffep-51, + 0x1.000002p-50 + }, + { // Entry 49 + 0x1.p-50, + 0x1.p-50, + 0x1.fffffep-51 + }, + { // Entry 50 + 0x1.p-50, + 0x1.p-50, + 0x1.p-50 + }, + { // Entry 51 + 0x1.000002p-50, + 0x1.p-50, + 0x1.000002p-50 + }, + { // Entry 52 + 0x1.000002p-50, + 0x1.000002p-50, + 0x1.fffffep-51 + }, + { // Entry 53 + 0x1.000002p-50, + 0x1.000002p-50, + 0x1.p-50 + }, + { // Entry 54 + 0x1.000002p-50, + 0x1.000002p-50, + 0x1.000002p-50 + }, + { // Entry 55 + 0x1.fffffep-11, + 0x1.fffffep-11, + 0x1.fffffep-11 + }, + { // Entry 56 + 0x1.p-10, + 0x1.fffffep-11, + 0x1.p-10 + }, + { // Entry 57 + 0x1.000002p-10, + 0x1.fffffep-11, + 0x1.000002p-10 + }, + { // Entry 58 + 0x1.p-10, + 0x1.p-10, + 0x1.fffffep-11 + }, + { // Entry 59 + 0x1.p-10, + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 60 + 0x1.000002p-10, + 0x1.p-10, + 0x1.000002p-10 + }, + { // Entry 61 + 0x1.000002p-10, + 0x1.000002p-10, + 0x1.fffffep-11 + }, + { // Entry 62 + 0x1.000002p-10, + 0x1.000002p-10, + 0x1.p-10 + }, + { // Entry 63 + 0x1.000002p-10, + 0x1.000002p-10, + 0x1.000002p-10 + }, + { // Entry 64 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.fffffep-2 + }, + { // Entry 65 + 0x1.p-1, + 0x1.fffffep-2, + 0x1.p-1 + }, + { // Entry 66 + 0x1.000002p-1, + 0x1.fffffep-2, + 0x1.000002p-1 + }, + { // Entry 67 + 0x1.p-1, + 0x1.p-1, + 0x1.fffffep-2 + }, + { // Entry 68 + 0x1.p-1, + 0x1.p-1, + 0x1.p-1 + }, + { // Entry 69 + 0x1.000002p-1, + 0x1.p-1, + 0x1.000002p-1 + }, + { // Entry 70 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.fffffep-2 + }, + { // Entry 71 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.p-1 + }, + { // Entry 72 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.000002p-1 + }, + { // Entry 73 + 0x1.fffffep0, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 74 + 0x1.p1, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 75 + 0x1.000002p1, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 76 + 0x1.p1, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 77 + 0x1.p1, + 0x1.p1, + 0x1.p1 + }, + { // Entry 78 + 0x1.000002p1, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 79 + 0x1.000002p1, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 80 + 0x1.000002p1, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 81 + 0x1.000002p1, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 82 + 0x1.fffffep9, + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 83 + 0x1.p10, + 0x1.fffffep9, + 0x1.p10 + }, + { // Entry 84 + 0x1.000002p10, + 0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 85 + 0x1.p10, + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 86 + 0x1.p10, + 0x1.p10, + 0x1.p10 + }, + { // Entry 87 + 0x1.000002p10, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 88 + 0x1.000002p10, + 0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 89 + 0x1.000002p10, + 0x1.000002p10, + 0x1.p10 + }, + { // Entry 90 + 0x1.000002p10, + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 91 + 0x1.fffffep49, + 0x1.fffffep49, + 0x1.fffffep49 + }, + { // Entry 92 + 0x1.p50, + 0x1.fffffep49, + 0x1.p50 + }, + { // Entry 93 + 0x1.000002p50, + 0x1.fffffep49, + 0x1.000002p50 + }, + { // Entry 94 + 0x1.p50, + 0x1.p50, + 0x1.fffffep49 + }, + { // Entry 95 + 0x1.p50, + 0x1.p50, + 0x1.p50 + }, + { // Entry 96 + 0x1.000002p50, + 0x1.p50, + 0x1.000002p50 + }, + { // Entry 97 + 0x1.000002p50, + 0x1.000002p50, + 0x1.fffffep49 + }, + { // Entry 98 + 0x1.000002p50, + 0x1.000002p50, + 0x1.p50 + }, + { // Entry 99 + 0x1.000002p50, + 0x1.000002p50, + 0x1.000002p50 + }, + { // Entry 100 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.fffffep126 + }, + { // Entry 101 + 0x1.p127, + 0x1.fffffep126, + 0x1.p127 + }, + { // Entry 102 + 0x1.000002p127, + 0x1.fffffep126, + 0x1.000002p127 + }, + { // Entry 103 + 0x1.p127, + 0x1.p127, + 0x1.fffffep126 + }, + { // Entry 104 + 0x1.p127, + 0x1.p127, + 0x1.p127 + }, + { // Entry 105 + 0x1.000002p127, + 0x1.p127, + 0x1.000002p127 + }, + { // Entry 106 + 0x1.000002p127, + 0x1.000002p127, + 0x1.fffffep126 + }, + { // Entry 107 + 0x1.000002p127, + 0x1.000002p127, + 0x1.p127 + }, + { // Entry 108 + 0x1.000002p127, + 0x1.000002p127, + 0x1.000002p127 + }, + { // Entry 109 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 110 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 111 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 112 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 113 + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 114 + HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 115 + HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 116 + HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 117 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 118 + HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 119 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 120 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 121 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 122 + HUGE_VALF, + 0.0f, + HUGE_VALF + }, + { // Entry 123 + HUGE_VALF, + -0.0f, + HUGE_VALF + }, + { // Entry 124 + HUGE_VALF, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 125 + HUGE_VALF, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 126 + HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 127 + HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 128 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 129 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 130 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 131 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 132 + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 133 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 134 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 135 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 136 + 0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 137 + 0x1.fffffep127, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 138 + 0x1.fffffep127, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 139 + 0x1.fffffep127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 140 + 0x1.fffffep127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 141 + 0x1.fffffep127, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 142 + 0x1.fffffep127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 143 + 0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 144 + 0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 145 + 0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 146 + 0x1.p-126, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 147 + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 148 + 0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 149 + 0x1.p-126, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 150 + 0x1.p-126, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 151 + 0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 152 + 0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 153 + 0x1.p-126, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 154 + 0x1.p-126, + 0.0f, + 0x1.p-126 + }, + { // Entry 155 + 0x1.p-126, + -0.0f, + 0x1.p-126 + }, + { // Entry 156 + 0x1.p-126, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 157 + 0x1.p-126, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 158 + 0x1.p-126, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 159 + 0x1.p-126, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 160 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 161 + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 162 + 0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 163 + 0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 164 + 0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 165 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 166 + 0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 167 + 0x1.p-149, + 0.0f, + 0x1.p-149 + }, + { // Entry 168 + 0x1.p-149, + -0.0f, + 0x1.p-149 + }, + { // Entry 169 + 0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 170 + 0x1.p-149, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 171 + 0x1.p-149, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 172 + 0x1.p-149, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 173 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 174 + 0.0, + 0.0f, + -0.0f + }, + { // Entry 175 + 0.0, + 0.0f, + -0x1.p-149 + }, + { // Entry 176 + 0.0, + 0.0f, + -0x1.p-126 + }, + { // Entry 177 + 0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 178 + 0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 179 + -0.0, + -0.0f, + 0.0f + }, + { // Entry 180 + 0.0, + -0x1.p-149, + 0.0f + }, + { // Entry 181 + 0.0, + -0x1.p-126, + 0.0f + }, + { // Entry 182 + 0.0, + -0x1.fffffep127, + 0.0f + }, + { // Entry 183 + 0.0, + -HUGE_VALF, + 0.0f + }, + { // Entry 184 + -0.0, + -0.0f, + -0.0f + }, + { // Entry 185 + -0.0, + -0.0f, + -0x1.p-149 + }, + { // Entry 186 + -0.0, + -0.0f, + -0x1.p-126 + }, + { // Entry 187 + -0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 188 + -0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 189 + -0.0, + -0x1.p-149, + -0.0f + }, + { // Entry 190 + -0.0, + -0x1.p-126, + -0.0f + }, + { // Entry 191 + -0.0, + -0x1.fffffep127, + -0.0f + }, + { // Entry 192 + -0.0, + -HUGE_VALF, + -0.0f + }, + { // Entry 193 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 194 + -0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 195 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 196 + -0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 197 + -0x1.p-149, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 198 + -0x1.p-149, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 199 + -0x1.p-149, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 200 + -0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 201 + -0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 202 + -0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 203 + -0x1.p-126, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 204 + -0x1.p-126, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 205 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 206 + -0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 207 + -0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 208 + -HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 209 + 0x1.fffffcp-127, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 210 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 211 + 0x1.fffffcp-127, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 212 + 0x1.p-149, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 213 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 214 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 215 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 216 + -0x1.p-149, + -0x1.fffffcp-127, + -0x1.p-149 + } +}; diff --git a/tests/math_data/fmin_intel_data.h b/tests/math_data/fmin_intel_data.h new file mode 100644 index 000000000..a2538f50f --- /dev/null +++ b/tests/math_data/fmin_intel_data.h @@ -0,0 +1,1093 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fmin_intel_data[] = { + { // Entry 0 + -0x1.40p3, + -0x1.4p3, + -0x1.4p3 + }, + { // Entry 1 + -0x1.40p3, + -0x1.4p3, + 0x1.4p3 + }, + { // Entry 2 + -0x1.40p3, + 0x1.4p3, + -0x1.4p3 + }, + { // Entry 3 + 0x1.40p3, + 0x1.4p3, + 0x1.4p3 + }, + { // Entry 4 + -0x1.p-1073, + -0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 5 + -0x1.p-1073, + -0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 6 + -0x1.p-1073, + -0x1.0p-1073, + -0.0 + }, + { // Entry 7 + -0x1.p-1073, + -0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 8 + -0x1.p-1073, + -0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 9 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 10 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 11 + -0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 12 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 13 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 14 + -0x1.p-1073, + -0.0, + -0x1.0p-1073 + }, + { // Entry 15 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 16 + -0.0, + -0.0, + -0.0 + }, + { // Entry 17 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 18 + -0.0, + -0.0, + 0x1.0p-1073 + }, + { // Entry 19 + -0x1.p-1073, + 0x1.0p-1074, + -0x1.0p-1073 + }, + { // Entry 20 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 21 + -0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 22 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 23 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1073 + }, + { // Entry 24 + -0x1.p-1073, + 0x1.0p-1073, + -0x1.0p-1073 + }, + { // Entry 25 + -0x1.p-1074, + 0x1.0p-1073, + -0x1.0p-1074 + }, + { // Entry 26 + -0.0, + 0x1.0p-1073, + -0.0 + }, + { // Entry 27 + 0x1.p-1074, + 0x1.0p-1073, + 0x1.0p-1074 + }, + { // Entry 28 + 0x1.p-1073, + 0x1.0p-1073, + 0x1.0p-1073 + }, + { // Entry 29 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 30 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 31 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 32 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 33 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 34 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 35 + 0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 36 + 0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + 0x1.0p-1023 + }, + { // Entry 37 + 0x1.ffffffffffffc0p-1024, + 0x1.ffffffffffffcp-1024, + 0x1.0000000000002p-1023 + }, + { // Entry 38 + 0x1.ffffffffffffc0p-1024, + 0x1.0p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 39 + 0x1.p-1023, + 0x1.0p-1023, + 0x1.0p-1023 + }, + { // Entry 40 + 0x1.p-1023, + 0x1.0p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 41 + 0x1.ffffffffffffc0p-1024, + 0x1.0000000000002p-1023, + 0x1.ffffffffffffcp-1024 + }, + { // Entry 42 + 0x1.p-1023, + 0x1.0000000000002p-1023, + 0x1.0p-1023 + }, + { // Entry 43 + 0x1.00000000000020p-1023, + 0x1.0000000000002p-1023, + 0x1.0000000000002p-1023 + }, + { // Entry 44 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp-51, + 0x1.fffffffffffffp-51 + }, + { // Entry 45 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp-51, + 0x1.0p-50 + }, + { // Entry 46 + 0x1.fffffffffffff0p-51, + 0x1.fffffffffffffp-51, + 0x1.0000000000001p-50 + }, + { // Entry 47 + 0x1.fffffffffffff0p-51, + 0x1.0p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 48 + 0x1.p-50, + 0x1.0p-50, + 0x1.0p-50 + }, + { // Entry 49 + 0x1.p-50, + 0x1.0p-50, + 0x1.0000000000001p-50 + }, + { // Entry 50 + 0x1.fffffffffffff0p-51, + 0x1.0000000000001p-50, + 0x1.fffffffffffffp-51 + }, + { // Entry 51 + 0x1.p-50, + 0x1.0000000000001p-50, + 0x1.0p-50 + }, + { // Entry 52 + 0x1.00000000000010p-50, + 0x1.0000000000001p-50, + 0x1.0000000000001p-50 + }, + { // Entry 53 + 0x1.fffffffffffff0p-11, + 0x1.fffffffffffffp-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 54 + 0x1.fffffffffffff0p-11, + 0x1.fffffffffffffp-11, + 0x1.0p-10 + }, + { // Entry 55 + 0x1.fffffffffffff0p-11, + 0x1.fffffffffffffp-11, + 0x1.0000000000001p-10 + }, + { // Entry 56 + 0x1.fffffffffffff0p-11, + 0x1.0p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 57 + 0x1.p-10, + 0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 58 + 0x1.p-10, + 0x1.0p-10, + 0x1.0000000000001p-10 + }, + { // Entry 59 + 0x1.fffffffffffff0p-11, + 0x1.0000000000001p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 60 + 0x1.p-10, + 0x1.0000000000001p-10, + 0x1.0p-10 + }, + { // Entry 61 + 0x1.00000000000010p-10, + 0x1.0000000000001p-10, + 0x1.0000000000001p-10 + }, + { // Entry 62 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 63 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.0p-1 + }, + { // Entry 64 + 0x1.fffffffffffff0p-2, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-1 + }, + { // Entry 65 + 0x1.fffffffffffff0p-2, + 0x1.0p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 66 + 0x1.p-1, + 0x1.0p-1, + 0x1.0p-1 + }, + { // Entry 67 + 0x1.p-1, + 0x1.0p-1, + 0x1.0000000000001p-1 + }, + { // Entry 68 + 0x1.fffffffffffff0p-2, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 69 + 0x1.p-1, + 0x1.0000000000001p-1, + 0x1.0p-1 + }, + { // Entry 70 + 0x1.00000000000010p-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-1 + }, + { // Entry 71 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 72 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 73 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 74 + 0x1.fffffffffffff0p0, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 75 + 0x1.p1, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 76 + 0x1.p1, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 77 + 0x1.fffffffffffff0p0, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 78 + 0x1.p1, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 79 + 0x1.00000000000010p1, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 80 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 81 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 82 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 83 + 0x1.fffffffffffff0p9, + 0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 84 + 0x1.p10, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 85 + 0x1.p10, + 0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 86 + 0x1.fffffffffffff0p9, + 0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 87 + 0x1.p10, + 0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 88 + 0x1.00000000000010p10, + 0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 89 + 0x1.fffffffffffff0p49, + 0x1.fffffffffffffp49, + 0x1.fffffffffffffp49 + }, + { // Entry 90 + 0x1.fffffffffffff0p49, + 0x1.fffffffffffffp49, + 0x1.0p50 + }, + { // Entry 91 + 0x1.fffffffffffff0p49, + 0x1.fffffffffffffp49, + 0x1.0000000000001p50 + }, + { // Entry 92 + 0x1.fffffffffffff0p49, + 0x1.0p50, + 0x1.fffffffffffffp49 + }, + { // Entry 93 + 0x1.p50, + 0x1.0p50, + 0x1.0p50 + }, + { // Entry 94 + 0x1.p50, + 0x1.0p50, + 0x1.0000000000001p50 + }, + { // Entry 95 + 0x1.fffffffffffff0p49, + 0x1.0000000000001p50, + 0x1.fffffffffffffp49 + }, + { // Entry 96 + 0x1.p50, + 0x1.0000000000001p50, + 0x1.0p50 + }, + { // Entry 97 + 0x1.00000000000010p50, + 0x1.0000000000001p50, + 0x1.0000000000001p50 + }, + { // Entry 98 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp1022 + }, + { // Entry 99 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.0p1023 + }, + { // Entry 100 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p1023 + }, + { // Entry 101 + 0x1.fffffffffffff0p1022, + 0x1.0p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 102 + 0x1.p1023, + 0x1.0p1023, + 0x1.0p1023 + }, + { // Entry 103 + 0x1.p1023, + 0x1.0p1023, + 0x1.0000000000001p1023 + }, + { // Entry 104 + 0x1.fffffffffffff0p1022, + 0x1.0000000000001p1023, + 0x1.fffffffffffffp1022 + }, + { // Entry 105 + 0x1.p1023, + 0x1.0000000000001p1023, + 0x1.0p1023 + }, + { // Entry 106 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.0000000000001p1023 + }, + { // Entry 107 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 108 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 109 + 0x1.p-1022, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 110 + 0x1.p-1074, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 111 + 0.0, + HUGE_VAL, + 0.0 + }, + { // Entry 112 + -0.0, + HUGE_VAL, + -0.0 + }, + { // Entry 113 + -0x1.p-1074, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 114 + -0x1.p-1022, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 115 + -0x1.fffffffffffff0p1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 116 + -HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 117 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 118 + 0x1.p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 119 + 0x1.p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 120 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 121 + -0.0, + -0.0, + HUGE_VAL + }, + { // Entry 122 + -0x1.p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 123 + -0x1.p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 124 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 125 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 126 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 127 + 0x1.p-1022, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 128 + 0x1.p-1074, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 129 + 0.0, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 130 + -0.0, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 131 + -0x1.p-1074, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 132 + -0x1.p-1022, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 133 + -0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 134 + -HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 135 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 136 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 137 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 138 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 139 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 140 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 141 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 142 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 143 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 144 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 145 + 0.0, + 0x1.0p-1022, + 0.0 + }, + { // Entry 146 + -0.0, + 0x1.0p-1022, + -0.0 + }, + { // Entry 147 + -0x1.p-1074, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 148 + -0x1.p-1022, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 149 + -0x1.fffffffffffff0p1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 150 + -HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 151 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 152 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 153 + -0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 154 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 155 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 156 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 157 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 158 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 159 + 0.0, + 0x1.0p-1074, + 0.0 + }, + { // Entry 160 + -0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 161 + -0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 162 + -0x1.p-1022, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 163 + -0x1.fffffffffffff0p1023, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 164 + -HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 165 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 166 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 167 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 168 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 169 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 170 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 171 + 0.0, + 0.0, + 0.0 + }, + { // Entry 172 + 0.0, + 0.0, + -0.0 + }, + { // Entry 173 + -0x1.p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 174 + -0x1.p-1022, + 0.0, + -0x1.0p-1022 + }, + { // Entry 175 + -0x1.fffffffffffff0p1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 176 + -HUGE_VAL, + 0.0, + -HUGE_VAL + }, + { // Entry 177 + -0.0, + -0.0, + 0.0 + }, + { // Entry 178 + -0x1.p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 179 + -0x1.p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 180 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 181 + -HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 182 + -0.0, + -0.0, + -0.0 + }, + { // Entry 183 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 184 + -0x1.p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 185 + -0x1.fffffffffffff0p1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 186 + -HUGE_VAL, + -0.0, + -HUGE_VAL + }, + { // Entry 187 + -0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 188 + -0x1.p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 189 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 190 + -HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 191 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 192 + -0x1.p-1022, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 193 + -0x1.fffffffffffff0p1023, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 194 + -HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 195 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 196 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 197 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 198 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 199 + -0x1.fffffffffffff0p1023, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 200 + -HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 201 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 202 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 203 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 204 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 205 + -HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 206 + -HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 207 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 208 + 0x1.p-1074, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 209 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 210 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 211 + -0x1.ffffffffffffe0p-1023, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 212 + -0x1.p-1074, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 213 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 214 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + } +}; diff --git a/tests/math_data/fminf_intel_data.h b/tests/math_data/fminf_intel_data.h new file mode 100644 index 000000000..051ae9b92 --- /dev/null +++ b/tests/math_data/fminf_intel_data.h @@ -0,0 +1,1103 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fminf_intel_data[] = { + { // Entry 0 + 0x1.p-148, + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 1 + 0x1.fff2e2p-1, + 0x1.fffffep-1, + 0x1.fff2e2p-1 + }, + { // Entry 2 + -0x1.40p3, + -0x1.40p3, + -0x1.40p3 + }, + { // Entry 3 + -0x1.40p3, + -0x1.40p3, + 0x1.40p3 + }, + { // Entry 4 + -0x1.40p3, + 0x1.40p3, + -0x1.40p3 + }, + { // Entry 5 + 0x1.40p3, + 0x1.40p3, + 0x1.40p3 + }, + { // Entry 6 + -0x1.p-148, + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 7 + -0x1.p-148, + -0x1.p-148, + -0x1.p-149 + }, + { // Entry 8 + -0x1.p-148, + -0x1.p-148, + 0.0 + }, + { // Entry 9 + -0x1.p-148, + -0x1.p-148, + 0x1.p-149 + }, + { // Entry 10 + -0x1.p-148, + -0x1.p-148, + 0x1.p-148 + }, + { // Entry 11 + -0x1.p-148, + -0x1.p-149, + -0x1.p-148 + }, + { // Entry 12 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 13 + -0x1.p-149, + -0x1.p-149, + 0.0 + }, + { // Entry 14 + -0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 15 + -0x1.p-149, + -0x1.p-149, + 0x1.p-148 + }, + { // Entry 16 + -0x1.p-148, + 0.0, + -0x1.p-148 + }, + { // Entry 17 + -0x1.p-149, + 0.0, + -0x1.p-149 + }, + { // Entry 18 + 0.0, + 0.0, + 0.0 + }, + { // Entry 19 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 20 + 0.0, + 0.0, + 0x1.p-148 + }, + { // Entry 21 + -0x1.p-148, + 0x1.p-149, + -0x1.p-148 + }, + { // Entry 22 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 23 + 0.0, + 0x1.p-149, + 0.0 + }, + { // Entry 24 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 25 + 0x1.p-149, + 0x1.p-149, + 0x1.p-148 + }, + { // Entry 26 + -0x1.p-148, + 0x1.p-148, + -0x1.p-148 + }, + { // Entry 27 + -0x1.p-149, + 0x1.p-148, + -0x1.p-149 + }, + { // Entry 28 + 0.0, + 0x1.p-148, + 0.0 + }, + { // Entry 29 + 0x1.p-149, + 0x1.p-148, + 0x1.p-149 + }, + { // Entry 30 + 0x1.p-148, + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 31 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 32 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 33 + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 34 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 35 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 36 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 37 + 0x1.fffff8p-128, + 0x1.fffff8p-128, + 0x1.fffff8p-128 + }, + { // Entry 38 + 0x1.fffff8p-128, + 0x1.fffff8p-128, + 0x1.p-127 + }, + { // Entry 39 + 0x1.fffff8p-128, + 0x1.fffff8p-128, + 0x1.000004p-127 + }, + { // Entry 40 + 0x1.fffff8p-128, + 0x1.p-127, + 0x1.fffff8p-128 + }, + { // Entry 41 + 0x1.p-127, + 0x1.p-127, + 0x1.p-127 + }, + { // Entry 42 + 0x1.p-127, + 0x1.p-127, + 0x1.000004p-127 + }, + { // Entry 43 + 0x1.fffff8p-128, + 0x1.000004p-127, + 0x1.fffff8p-128 + }, + { // Entry 44 + 0x1.p-127, + 0x1.000004p-127, + 0x1.p-127 + }, + { // Entry 45 + 0x1.000004p-127, + 0x1.000004p-127, + 0x1.000004p-127 + }, + { // Entry 46 + 0x1.fffffep-51, + 0x1.fffffep-51, + 0x1.fffffep-51 + }, + { // Entry 47 + 0x1.fffffep-51, + 0x1.fffffep-51, + 0x1.p-50 + }, + { // Entry 48 + 0x1.fffffep-51, + 0x1.fffffep-51, + 0x1.000002p-50 + }, + { // Entry 49 + 0x1.fffffep-51, + 0x1.p-50, + 0x1.fffffep-51 + }, + { // Entry 50 + 0x1.p-50, + 0x1.p-50, + 0x1.p-50 + }, + { // Entry 51 + 0x1.p-50, + 0x1.p-50, + 0x1.000002p-50 + }, + { // Entry 52 + 0x1.fffffep-51, + 0x1.000002p-50, + 0x1.fffffep-51 + }, + { // Entry 53 + 0x1.p-50, + 0x1.000002p-50, + 0x1.p-50 + }, + { // Entry 54 + 0x1.000002p-50, + 0x1.000002p-50, + 0x1.000002p-50 + }, + { // Entry 55 + 0x1.fffffep-11, + 0x1.fffffep-11, + 0x1.fffffep-11 + }, + { // Entry 56 + 0x1.fffffep-11, + 0x1.fffffep-11, + 0x1.p-10 + }, + { // Entry 57 + 0x1.fffffep-11, + 0x1.fffffep-11, + 0x1.000002p-10 + }, + { // Entry 58 + 0x1.fffffep-11, + 0x1.p-10, + 0x1.fffffep-11 + }, + { // Entry 59 + 0x1.p-10, + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 60 + 0x1.p-10, + 0x1.p-10, + 0x1.000002p-10 + }, + { // Entry 61 + 0x1.fffffep-11, + 0x1.000002p-10, + 0x1.fffffep-11 + }, + { // Entry 62 + 0x1.p-10, + 0x1.000002p-10, + 0x1.p-10 + }, + { // Entry 63 + 0x1.000002p-10, + 0x1.000002p-10, + 0x1.000002p-10 + }, + { // Entry 64 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.fffffep-2 + }, + { // Entry 65 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.p-1 + }, + { // Entry 66 + 0x1.fffffep-2, + 0x1.fffffep-2, + 0x1.000002p-1 + }, + { // Entry 67 + 0x1.fffffep-2, + 0x1.p-1, + 0x1.fffffep-2 + }, + { // Entry 68 + 0x1.p-1, + 0x1.p-1, + 0x1.p-1 + }, + { // Entry 69 + 0x1.p-1, + 0x1.p-1, + 0x1.000002p-1 + }, + { // Entry 70 + 0x1.fffffep-2, + 0x1.000002p-1, + 0x1.fffffep-2 + }, + { // Entry 71 + 0x1.p-1, + 0x1.000002p-1, + 0x1.p-1 + }, + { // Entry 72 + 0x1.000002p-1, + 0x1.000002p-1, + 0x1.000002p-1 + }, + { // Entry 73 + 0x1.fffffep0, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 74 + 0x1.fffffep0, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 75 + 0x1.fffffep0, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 76 + 0x1.fffffep0, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 77 + 0x1.p1, + 0x1.p1, + 0x1.p1 + }, + { // Entry 78 + 0x1.p1, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 79 + 0x1.fffffep0, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 80 + 0x1.p1, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 81 + 0x1.000002p1, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 82 + 0x1.fffffep9, + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 83 + 0x1.fffffep9, + 0x1.fffffep9, + 0x1.p10 + }, + { // Entry 84 + 0x1.fffffep9, + 0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 85 + 0x1.fffffep9, + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 86 + 0x1.p10, + 0x1.p10, + 0x1.p10 + }, + { // Entry 87 + 0x1.p10, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 88 + 0x1.fffffep9, + 0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 89 + 0x1.p10, + 0x1.000002p10, + 0x1.p10 + }, + { // Entry 90 + 0x1.000002p10, + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 91 + 0x1.fffffep49, + 0x1.fffffep49, + 0x1.fffffep49 + }, + { // Entry 92 + 0x1.fffffep49, + 0x1.fffffep49, + 0x1.p50 + }, + { // Entry 93 + 0x1.fffffep49, + 0x1.fffffep49, + 0x1.000002p50 + }, + { // Entry 94 + 0x1.fffffep49, + 0x1.p50, + 0x1.fffffep49 + }, + { // Entry 95 + 0x1.p50, + 0x1.p50, + 0x1.p50 + }, + { // Entry 96 + 0x1.p50, + 0x1.p50, + 0x1.000002p50 + }, + { // Entry 97 + 0x1.fffffep49, + 0x1.000002p50, + 0x1.fffffep49 + }, + { // Entry 98 + 0x1.p50, + 0x1.000002p50, + 0x1.p50 + }, + { // Entry 99 + 0x1.000002p50, + 0x1.000002p50, + 0x1.000002p50 + }, + { // Entry 100 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.fffffep126 + }, + { // Entry 101 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.p127 + }, + { // Entry 102 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.000002p127 + }, + { // Entry 103 + 0x1.fffffep126, + 0x1.p127, + 0x1.fffffep126 + }, + { // Entry 104 + 0x1.p127, + 0x1.p127, + 0x1.p127 + }, + { // Entry 105 + 0x1.p127, + 0x1.p127, + 0x1.000002p127 + }, + { // Entry 106 + 0x1.fffffep126, + 0x1.000002p127, + 0x1.fffffep126 + }, + { // Entry 107 + 0x1.p127, + 0x1.000002p127, + 0x1.p127 + }, + { // Entry 108 + 0x1.000002p127, + 0x1.000002p127, + 0x1.000002p127 + }, + { // Entry 109 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 110 + 0x1.fffffep127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 111 + 0x1.p-126, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 112 + 0x1.p-149, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 113 + 0.0, + HUGE_VALF, + 0.0f + }, + { // Entry 114 + -0.0, + HUGE_VALF, + -0.0f + }, + { // Entry 115 + -0x1.p-149, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 116 + -0x1.p-126, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 117 + -0x1.fffffep127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 118 + -HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 119 + 0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 120 + 0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 121 + 0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 122 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 123 + -0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 124 + -0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 125 + -0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 126 + -0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 127 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 128 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 129 + 0x1.p-126, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 130 + 0x1.p-149, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 131 + 0.0, + 0x1.fffffep127, + 0.0f + }, + { // Entry 132 + -0.0, + 0x1.fffffep127, + -0.0f + }, + { // Entry 133 + -0x1.p-149, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 134 + -0x1.p-126, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 135 + -0x1.fffffep127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 136 + -HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 137 + 0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 138 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 139 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 140 + -0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 141 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 142 + -0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 143 + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 144 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 145 + 0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 146 + 0x1.p-149, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 147 + 0.0, + 0x1.p-126, + 0.0f + }, + { // Entry 148 + -0.0, + 0x1.p-126, + -0.0f + }, + { // Entry 149 + -0x1.p-149, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 150 + -0x1.p-126, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 151 + -0x1.fffffep127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 152 + -HUGE_VALF, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 153 + 0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 154 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 155 + -0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 156 + -0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 157 + -0x1.p-126, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 158 + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 159 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 160 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 161 + 0.0, + 0x1.p-149, + 0.0f + }, + { // Entry 162 + -0.0, + 0x1.p-149, + -0.0f + }, + { // Entry 163 + -0x1.p-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 164 + -0x1.p-126, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 165 + -0x1.fffffep127, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 166 + -HUGE_VALF, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 167 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 168 + -0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 169 + -0x1.p-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 170 + -0x1.p-126, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 171 + -0x1.fffffep127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 172 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 173 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 174 + 0.0, + 0.0f, + -0.0f + }, + { // Entry 175 + -0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 176 + -0x1.p-126, + 0.0f, + -0x1.p-126 + }, + { // Entry 177 + -0x1.fffffep127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 178 + -HUGE_VALF, + 0.0f, + -HUGE_VALF + }, + { // Entry 179 + -0.0, + -0.0f, + 0.0f + }, + { // Entry 180 + -0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 181 + -0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 182 + -0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 183 + -HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 184 + -0.0, + -0.0f, + -0.0f + }, + { // Entry 185 + -0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 186 + -0x1.p-126, + -0.0f, + -0x1.p-126 + }, + { // Entry 187 + -0x1.fffffep127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 188 + -HUGE_VALF, + -0.0f, + -HUGE_VALF + }, + { // Entry 189 + -0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 190 + -0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 191 + -0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 192 + -HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 193 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 194 + -0x1.p-126, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 195 + -0x1.fffffep127, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 196 + -HUGE_VALF, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 197 + -0x1.p-126, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 198 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 199 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 200 + -0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 201 + -0x1.fffffep127, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 202 + -HUGE_VALF, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 203 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 204 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 205 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 206 + -HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 207 + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 208 + -HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 209 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 210 + 0x1.p-149, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 211 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 212 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 213 + -0x1.fffffcp-127, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 214 + -0x1.p-149, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 215 + -0x1.fffffcp-127, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 216 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-149 + } +}; diff --git a/tests/math_data/fmod_intel_data.h b/tests/math_data/fmod_intel_data.h new file mode 100644 index 000000000..b15c77a3a --- /dev/null +++ b/tests/math_data/fmod_intel_data.h @@ -0,0 +1,1328 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fmod_intel_data[] = { + { // Entry 0 + -0x1.57e8932492c0p-10, + -0x1.200ad685e7f44p3, + -0x1.000014abd446dp0 + }, + { // Entry 1 + -0x1.d7dbf487ffd0p-11, + -0x1.3333333333334p-1, + 0x1.10a83585649f6p-4 + }, + { // Entry 2 + 0x1.p-1072, + 0x1.0000000000001p-41, + 0x1.4p-1072 + }, + { // Entry 3 + 0x1.p-1072, + 0x1.0000000000001p-1017, + 0x1.4p-1072 + }, + { // Entry 4 + 0x1.fc8420e88cbfp18, + 0x1.11f783ee89b08p99, + 0x1.0abe1a29d8e8cp19 + }, + { // Entry 5 + 0x1.50p-61, + 0x1.5555555555552p-12, + 0x1.1111111111106p-14 + }, + { // Entry 6 + -0.0, + -0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 7 + -0.0, + -0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 8 + 0.0, + 0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 9 + 0.0, + 0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 10 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p15 + }, + { // Entry 11 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p16 + }, + { // Entry 12 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p15 + }, + { // Entry 13 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p16 + }, + { // Entry 14 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p117 + }, + { // Entry 15 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p118 + }, + { // Entry 16 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p117 + }, + { // Entry 17 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p118 + }, + { // Entry 18 + 0.0, + 0x1.0p15, + -0x1.0p-117 + }, + { // Entry 19 + 0.0, + 0x1.0p15, + 0x1.0p-117 + }, + { // Entry 20 + 0.0, + 0x1.0p16, + -0x1.0p-117 + }, + { // Entry 21 + 0.0, + 0x1.0p16, + 0x1.0p-117 + }, + { // Entry 22 + 0.0, + 0x1.0p15, + 0x1.0p15 + }, + { // Entry 23 + 0x1.p15, + 0x1.0p15, + 0x1.0p16 + }, + { // Entry 24 + 0.0, + 0x1.0p16, + 0x1.0p15 + }, + { // Entry 25 + 0.0, + 0x1.0p16, + 0x1.0p16 + }, + { // Entry 26 + 0x1.p15, + 0x1.0p15, + 0x1.0p117 + }, + { // Entry 27 + 0x1.p15, + 0x1.0p15, + 0x1.0p118 + }, + { // Entry 28 + 0x1.p16, + 0x1.0p16, + 0x1.0p117 + }, + { // Entry 29 + 0x1.p16, + 0x1.0p16, + 0x1.0p118 + }, + { // Entry 30 + 0.0, + 0x1.0p117, + -0x1.0p-117 + }, + { // Entry 31 + 0.0, + 0x1.0p117, + 0x1.0p-117 + }, + { // Entry 32 + 0.0, + 0x1.0p118, + -0x1.0p-117 + }, + { // Entry 33 + 0.0, + 0x1.0p118, + 0x1.0p-117 + }, + { // Entry 34 + 0.0, + 0x1.0p117, + 0x1.0p15 + }, + { // Entry 35 + 0.0, + 0x1.0p117, + 0x1.0p16 + }, + { // Entry 36 + 0.0, + 0x1.0p118, + 0x1.0p15 + }, + { // Entry 37 + 0.0, + 0x1.0p118, + 0x1.0p16 + }, + { // Entry 38 + 0.0, + 0x1.0p117, + 0x1.0p117 + }, + { // Entry 39 + 0x1.p117, + 0x1.0p117, + 0x1.0p118 + }, + { // Entry 40 + 0.0, + 0x1.0p118, + 0x1.0p117 + }, + { // Entry 41 + 0.0, + 0x1.0p118, + 0x1.0p118 + }, + { // Entry 42 + 0.0, + 0x1.9p6, + 0x1.4p3 + }, + { // Entry 43 + 0x1.p0, + 0x1.9p6, + 0x1.6p3 + }, + { // Entry 44 + 0x1.p2, + 0x1.9p6, + 0x1.8p3 + }, + { // Entry 45 + 0x1.p0, + 0x1.940p6, + 0x1.4p3 + }, + { // Entry 46 + 0x1.p1, + 0x1.940p6, + 0x1.6p3 + }, + { // Entry 47 + 0x1.40p2, + 0x1.940p6, + 0x1.8p3 + }, + { // Entry 48 + 0x1.p1, + 0x1.980p6, + 0x1.4p3 + }, + { // Entry 49 + 0x1.80p1, + 0x1.980p6, + 0x1.6p3 + }, + { // Entry 50 + 0x1.80p2, + 0x1.980p6, + 0x1.8p3 + }, + { // Entry 51 + 0x1.80p1, + 0x1.9c0p6, + 0x1.4p3 + }, + { // Entry 52 + 0x1.p2, + 0x1.9c0p6, + 0x1.6p3 + }, + { // Entry 53 + 0x1.c0p2, + 0x1.9c0p6, + 0x1.8p3 + }, + { // Entry 54 + 0x1.p2, + 0x1.ap6, + 0x1.4p3 + }, + { // Entry 55 + 0x1.40p2, + 0x1.ap6, + 0x1.6p3 + }, + { // Entry 56 + 0x1.p3, + 0x1.ap6, + 0x1.8p3 + }, + { // Entry 57 + 0x1.40p2, + 0x1.a40p6, + 0x1.4p3 + }, + { // Entry 58 + 0x1.80p2, + 0x1.a40p6, + 0x1.6p3 + }, + { // Entry 59 + 0x1.20p3, + 0x1.a40p6, + 0x1.8p3 + }, + { // Entry 60 + 0x1.80p2, + 0x1.a80p6, + 0x1.4p3 + }, + { // Entry 61 + 0x1.c0p2, + 0x1.a80p6, + 0x1.6p3 + }, + { // Entry 62 + 0x1.40p3, + 0x1.a80p6, + 0x1.8p3 + }, + { // Entry 63 + 0x1.c0p2, + 0x1.ac0p6, + 0x1.4p3 + }, + { // Entry 64 + 0x1.p3, + 0x1.ac0p6, + 0x1.6p3 + }, + { // Entry 65 + 0x1.60p3, + 0x1.ac0p6, + 0x1.8p3 + }, + { // Entry 66 + 0x1.p3, + 0x1.bp6, + 0x1.4p3 + }, + { // Entry 67 + 0x1.20p3, + 0x1.bp6, + 0x1.6p3 + }, + { // Entry 68 + 0.0, + 0x1.bp6, + 0x1.8p3 + }, + { // Entry 69 + 0x1.20p3, + 0x1.b40p6, + 0x1.4p3 + }, + { // Entry 70 + 0x1.40p3, + 0x1.b40p6, + 0x1.6p3 + }, + { // Entry 71 + 0x1.p0, + 0x1.b40p6, + 0x1.8p3 + }, + { // Entry 72 + 0.0, + 0x1.b80p6, + 0x1.4p3 + }, + { // Entry 73 + 0.0, + 0x1.b80p6, + 0x1.6p3 + }, + { // Entry 74 + 0x1.p1, + 0x1.b80p6, + 0x1.8p3 + }, + { // Entry 75 + -0.0, + -0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 76 + -0x1.p-52, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 77 + -0x1.80p-52, + -0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 78 + -0x1.p0, + -0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 79 + -0.0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 80 + -0x1.p-53, + -0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 81 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 82 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 83 + -0.0, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 84 + -0x1.80p-52, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 85 + -0x1.p-52, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 86 + -0.0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 87 + -0x1.p-53, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 88 + -0.0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 89 + -0x1.p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 90 + -0.0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 91 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 92 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 93 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 94 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 95 + 0.0, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 96 + 0x1.p0, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 97 + 0.0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 98 + 0x1.p-53, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 99 + 0.0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 100 + 0x1.p-52, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 101 + 0x1.80p-52, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 102 + 0.0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 103 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 104 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 105 + 0x1.p-53, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 106 + 0.0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 107 + 0x1.p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 108 + 0x1.80p-52, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 109 + 0x1.p-52, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 110 + 0.0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 111 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 112 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 113 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 114 + -0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 115 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 116 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 117 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 118 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 119 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 120 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 121 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 122 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 123 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 124 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 125 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 126 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 127 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 128 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 129 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 130 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 131 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 132 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 133 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 134 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 135 + -0x1.80p-1, + -0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 136 + -0x1.p-1, + -0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 137 + -0.0, + -0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 138 + -0x1.p-2, + -0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 139 + -0.0, + -0x1.0p51, + 0x1.0p0 + }, + { // Entry 140 + -0x1.00000000000020p-1, + -0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 141 + -0.0, + -0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 142 + -0x1.80p-1, + -0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 143 + -0x1.00000000000040p-2, + -0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 144 + 0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 145 + 0x1.p-1, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 146 + 0x1.00000000000040p-1, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 147 + 0x1.p-1, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 148 + 0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 149 + 0x1.p-52, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 150 + 0x1.00000000000010p-1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 151 + 0.0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 152 + 0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 153 + -0x1.80p-52, + -0x1.0000000000001p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 154 + -0.0, + -0x1.0000000000001p53, + 0x1.0p0 + }, + { // Entry 155 + -0.0, + -0x1.0000000000001p53, + 0x1.0000000000001p0 + }, + { // Entry 156 + -0x1.p-53, + -0x1.0p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 157 + -0.0, + -0x1.0p53, + 0x1.0p0 + }, + { // Entry 158 + -0x1.p-51, + -0x1.0p53, + 0x1.0000000000001p0 + }, + { // Entry 159 + -0.0, + -0x1.fffffffffffffp52, + 0x1.fffffffffffffp-1 + }, + { // Entry 160 + -0.0, + -0x1.fffffffffffffp52, + 0x1.0p0 + }, + { // Entry 161 + -0x1.80p-51, + -0x1.fffffffffffffp52, + 0x1.0000000000001p0 + }, + { // Entry 162 + 0.0, + 0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 163 + 0x1.80p-1, + 0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 164 + 0x1.00000000000040p-2, + 0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 165 + 0x1.p-2, + 0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 166 + 0.0, + 0x1.0p51, + 0x1.0p0 + }, + { // Entry 167 + 0x1.00000000000020p-1, + 0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 168 + 0x1.80p-1, + 0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 169 + 0x1.p-1, + 0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 170 + 0.0, + 0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 171 + 0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 172 + 0x1.p-1, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 173 + 0x1.00000000000040p-1, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 174 + 0x1.p-1, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 175 + 0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 176 + 0x1.p-52, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 177 + 0x1.00000000000010p-1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 178 + 0.0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 179 + 0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 180 + -0.0, + -0x1.0000000000001p53, + -0x1.0000000000001p0 + }, + { // Entry 181 + -0.0, + -0x1.0000000000001p53, + -0x1.0p0 + }, + { // Entry 182 + -0x1.80p-52, + -0x1.0000000000001p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 183 + -0x1.p-51, + -0x1.0p53, + -0x1.0000000000001p0 + }, + { // Entry 184 + -0.0, + -0x1.0p53, + -0x1.0p0 + }, + { // Entry 185 + -0x1.p-53, + -0x1.0p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 186 + -0x1.80p-51, + -0x1.fffffffffffffp52, + -0x1.0000000000001p0 + }, + { // Entry 187 + -0.0, + -0x1.fffffffffffffp52, + -0x1.0p0 + }, + { // Entry 188 + -0.0, + -0x1.fffffffffffffp52, + -0x1.fffffffffffffp-1 + }, + { // Entry 189 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 190 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 191 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 192 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 193 + 0x1.p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 194 + -0x1.p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 195 + 0x1.p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 196 + -0x1.p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 197 + 0x1.p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 198 + -0x1.p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 199 + 0x1.p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 200 + -0x1.p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 201 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 202 + -0.0, + -0.0, + HUGE_VAL + }, + { // Entry 203 + 0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 204 + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 205 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 206 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 207 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 208 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 209 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 210 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 211 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 212 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 213 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 214 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 215 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 216 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 217 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 218 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 219 + 0x1.p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 220 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 221 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 222 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 223 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 224 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 225 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 226 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 227 + 0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 228 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 229 + 0.0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 230 + 0.0, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 231 + -0.0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 232 + -0.0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 233 + 0x1.p-1074, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 234 + 0x1.p-1074, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 235 + -0x1.p-1074, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 236 + -0x1.p-1074, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 237 + 0.0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 238 + 0.0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 239 + -0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 240 + -0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 241 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 242 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 243 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 244 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 245 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 246 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 247 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 248 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 249 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 250 + 0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 251 + -0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 252 + -0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 253 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 254 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 255 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 256 + -0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 257 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 258 + 0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 259 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 260 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 261 + -0x1.8fd90479094320p-964, + -0x1.398dd069017ffp759, + -0x1.b148e36fdec2fp-964 + } +}; diff --git a/tests/math_data/fmodf_intel_data.h b/tests/math_data/fmodf_intel_data.h new file mode 100644 index 000000000..32ba583e1 --- /dev/null +++ b/tests/math_data/fmodf_intel_data.h @@ -0,0 +1,1298 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_fmodf_intel_data[] = { + { // Entry 0 + 0x1.fbp-11, + 0x1.8e77b6p12, + -0x1.0140p-10 + }, + { // Entry 1 + -0.0, + -0x1.p-117, + -0x1.p-117 + }, + { // Entry 2 + -0.0, + -0x1.p-117, + 0x1.p-117 + }, + { // Entry 3 + 0.0, + 0x1.p-117, + -0x1.p-117 + }, + { // Entry 4 + 0.0, + 0x1.p-117, + 0x1.p-117 + }, + { // Entry 5 + -0x1.p-117, + -0x1.p-117, + 0x1.p15 + }, + { // Entry 6 + -0x1.p-117, + -0x1.p-117, + 0x1.p16 + }, + { // Entry 7 + 0x1.p-117, + 0x1.p-117, + 0x1.p15 + }, + { // Entry 8 + 0x1.p-117, + 0x1.p-117, + 0x1.p16 + }, + { // Entry 9 + -0x1.p-117, + -0x1.p-117, + 0x1.p117 + }, + { // Entry 10 + -0x1.p-117, + -0x1.p-117, + 0x1.p118 + }, + { // Entry 11 + 0x1.p-117, + 0x1.p-117, + 0x1.p117 + }, + { // Entry 12 + 0x1.p-117, + 0x1.p-117, + 0x1.p118 + }, + { // Entry 13 + 0.0, + 0x1.p15, + -0x1.p-117 + }, + { // Entry 14 + 0.0, + 0x1.p15, + 0x1.p-117 + }, + { // Entry 15 + 0.0, + 0x1.p16, + -0x1.p-117 + }, + { // Entry 16 + 0.0, + 0x1.p16, + 0x1.p-117 + }, + { // Entry 17 + 0.0, + 0x1.p15, + 0x1.p15 + }, + { // Entry 18 + 0x1.p15, + 0x1.p15, + 0x1.p16 + }, + { // Entry 19 + 0.0, + 0x1.p16, + 0x1.p15 + }, + { // Entry 20 + 0.0, + 0x1.p16, + 0x1.p16 + }, + { // Entry 21 + 0x1.p15, + 0x1.p15, + 0x1.p117 + }, + { // Entry 22 + 0x1.p15, + 0x1.p15, + 0x1.p118 + }, + { // Entry 23 + 0x1.p16, + 0x1.p16, + 0x1.p117 + }, + { // Entry 24 + 0x1.p16, + 0x1.p16, + 0x1.p118 + }, + { // Entry 25 + 0.0, + 0x1.p117, + -0x1.p-117 + }, + { // Entry 26 + 0.0, + 0x1.p117, + 0x1.p-117 + }, + { // Entry 27 + 0.0, + 0x1.p118, + -0x1.p-117 + }, + { // Entry 28 + 0.0, + 0x1.p118, + 0x1.p-117 + }, + { // Entry 29 + 0.0, + 0x1.p117, + 0x1.p15 + }, + { // Entry 30 + 0.0, + 0x1.p117, + 0x1.p16 + }, + { // Entry 31 + 0.0, + 0x1.p118, + 0x1.p15 + }, + { // Entry 32 + 0.0, + 0x1.p118, + 0x1.p16 + }, + { // Entry 33 + 0.0, + 0x1.p117, + 0x1.p117 + }, + { // Entry 34 + 0x1.p117, + 0x1.p117, + 0x1.p118 + }, + { // Entry 35 + 0.0, + 0x1.p118, + 0x1.p117 + }, + { // Entry 36 + 0.0, + 0x1.p118, + 0x1.p118 + }, + { // Entry 37 + 0.0, + 0x1.90p6, + 0x1.40p3 + }, + { // Entry 38 + 0x1.p0, + 0x1.90p6, + 0x1.60p3 + }, + { // Entry 39 + 0x1.p2, + 0x1.90p6, + 0x1.80p3 + }, + { // Entry 40 + 0x1.p0, + 0x1.94p6, + 0x1.40p3 + }, + { // Entry 41 + 0x1.p1, + 0x1.94p6, + 0x1.60p3 + }, + { // Entry 42 + 0x1.40p2, + 0x1.94p6, + 0x1.80p3 + }, + { // Entry 43 + 0x1.p1, + 0x1.98p6, + 0x1.40p3 + }, + { // Entry 44 + 0x1.80p1, + 0x1.98p6, + 0x1.60p3 + }, + { // Entry 45 + 0x1.80p2, + 0x1.98p6, + 0x1.80p3 + }, + { // Entry 46 + 0x1.80p1, + 0x1.9cp6, + 0x1.40p3 + }, + { // Entry 47 + 0x1.p2, + 0x1.9cp6, + 0x1.60p3 + }, + { // Entry 48 + 0x1.c0p2, + 0x1.9cp6, + 0x1.80p3 + }, + { // Entry 49 + 0x1.p2, + 0x1.a0p6, + 0x1.40p3 + }, + { // Entry 50 + 0x1.40p2, + 0x1.a0p6, + 0x1.60p3 + }, + { // Entry 51 + 0x1.p3, + 0x1.a0p6, + 0x1.80p3 + }, + { // Entry 52 + 0x1.40p2, + 0x1.a4p6, + 0x1.40p3 + }, + { // Entry 53 + 0x1.80p2, + 0x1.a4p6, + 0x1.60p3 + }, + { // Entry 54 + 0x1.20p3, + 0x1.a4p6, + 0x1.80p3 + }, + { // Entry 55 + 0x1.80p2, + 0x1.a8p6, + 0x1.40p3 + }, + { // Entry 56 + 0x1.c0p2, + 0x1.a8p6, + 0x1.60p3 + }, + { // Entry 57 + 0x1.40p3, + 0x1.a8p6, + 0x1.80p3 + }, + { // Entry 58 + 0x1.c0p2, + 0x1.acp6, + 0x1.40p3 + }, + { // Entry 59 + 0x1.p3, + 0x1.acp6, + 0x1.60p3 + }, + { // Entry 60 + 0x1.60p3, + 0x1.acp6, + 0x1.80p3 + }, + { // Entry 61 + 0x1.p3, + 0x1.b0p6, + 0x1.40p3 + }, + { // Entry 62 + 0x1.20p3, + 0x1.b0p6, + 0x1.60p3 + }, + { // Entry 63 + 0.0, + 0x1.b0p6, + 0x1.80p3 + }, + { // Entry 64 + 0x1.20p3, + 0x1.b4p6, + 0x1.40p3 + }, + { // Entry 65 + 0x1.40p3, + 0x1.b4p6, + 0x1.60p3 + }, + { // Entry 66 + 0x1.p0, + 0x1.b4p6, + 0x1.80p3 + }, + { // Entry 67 + 0.0, + 0x1.b8p6, + 0x1.40p3 + }, + { // Entry 68 + 0.0, + 0x1.b8p6, + 0x1.60p3 + }, + { // Entry 69 + 0x1.p1, + 0x1.b8p6, + 0x1.80p3 + }, + { // Entry 70 + -0.0, + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 71 + -0x1.p-23, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 72 + -0x1.80p-23, + -0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 73 + -0x1.p0, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 74 + -0.0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 75 + -0x1.p-24, + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 76 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 77 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 78 + -0.0, + -0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 79 + -0x1.80p-23, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 80 + -0x1.p-23, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 81 + -0.0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 82 + -0x1.p-24, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 83 + -0.0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 84 + -0x1.p0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 85 + -0.0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 86 + -0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 87 + -0x1.fffffep-1, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 88 + 0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 89 + 0x1.fffffep-1, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 90 + 0.0, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 91 + 0x1.p0, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 92 + 0.0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 93 + 0x1.p-24, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 94 + 0.0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 95 + 0x1.p-23, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 96 + 0x1.80p-23, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 97 + 0.0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 98 + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 99 + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 100 + 0x1.p-24, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 101 + 0.0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 102 + 0x1.p0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 103 + 0x1.80p-23, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 104 + 0x1.p-23, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 105 + 0.0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 106 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 107 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 108 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 109 + -0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 110 + 0.0, + 0.0, + -0x1.p-149 + }, + { // Entry 111 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 112 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 113 + 0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 114 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 115 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 116 + 0.0, + 0.0, + -0x1.fffffep127 + }, + { // Entry 117 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 118 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 119 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 120 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 121 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 122 + 0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 123 + -0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 124 + -0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 125 + 0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 126 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 127 + 0.0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 128 + -0.0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 129 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 130 + -0x1.80p-1, + -0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 131 + -0x1.p-1, + -0x1.000002p22, + 0x1.p0 + }, + { // Entry 132 + -0.0, + -0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 133 + -0x1.p-2, + -0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 134 + -0.0, + -0x1.p22, + 0x1.p0 + }, + { // Entry 135 + -0x1.000004p-1, + -0x1.p22, + 0x1.000002p0 + }, + { // Entry 136 + -0.0, + -0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 137 + -0x1.80p-1, + -0x1.fffffep21, + 0x1.p0 + }, + { // Entry 138 + -0x1.000008p-2, + -0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 139 + 0.0, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 140 + 0x1.p-1, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 141 + 0x1.000008p-1, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 142 + 0x1.p-1, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 143 + 0.0, + 0x1.p23, + 0x1.p0 + }, + { // Entry 144 + 0x1.p-23, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 145 + 0x1.000002p-1, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 146 + 0.0, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 147 + 0.0, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 148 + -0x1.80p-23, + -0x1.000002p24, + 0x1.fffffep-1 + }, + { // Entry 149 + -0.0, + -0x1.000002p24, + 0x1.p0 + }, + { // Entry 150 + -0.0, + -0x1.000002p24, + 0x1.000002p0 + }, + { // Entry 151 + -0x1.p-24, + -0x1.p24, + 0x1.fffffep-1 + }, + { // Entry 152 + -0.0, + -0x1.p24, + 0x1.p0 + }, + { // Entry 153 + -0x1.p-22, + -0x1.p24, + 0x1.000002p0 + }, + { // Entry 154 + -0.0, + -0x1.fffffep23, + 0x1.fffffep-1 + }, + { // Entry 155 + -0.0, + -0x1.fffffep23, + 0x1.p0 + }, + { // Entry 156 + -0x1.80p-22, + -0x1.fffffep23, + 0x1.000002p0 + }, + { // Entry 157 + 0.0, + 0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 158 + 0x1.80p-1, + 0x1.fffffep21, + 0x1.p0 + }, + { // Entry 159 + 0x1.000008p-2, + 0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 160 + 0x1.p-2, + 0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 161 + 0.0, + 0x1.p22, + 0x1.p0 + }, + { // Entry 162 + 0x1.000004p-1, + 0x1.p22, + 0x1.000002p0 + }, + { // Entry 163 + 0x1.80p-1, + 0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 164 + 0x1.p-1, + 0x1.000002p22, + 0x1.p0 + }, + { // Entry 165 + 0.0, + 0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 166 + 0.0, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 167 + 0x1.p-1, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 168 + 0x1.000008p-1, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 169 + 0x1.p-1, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 170 + 0.0, + 0x1.p23, + 0x1.p0 + }, + { // Entry 171 + 0x1.p-23, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 172 + 0x1.000002p-1, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 173 + 0.0, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 174 + 0.0, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 175 + -0.0, + -0x1.000002p24, + -0x1.000002p0 + }, + { // Entry 176 + -0.0, + -0x1.000002p24, + -0x1.p0 + }, + { // Entry 177 + -0x1.80p-23, + -0x1.000002p24, + -0x1.fffffep-1 + }, + { // Entry 178 + -0x1.p-22, + -0x1.p24, + -0x1.000002p0 + }, + { // Entry 179 + -0.0, + -0x1.p24, + -0x1.p0 + }, + { // Entry 180 + -0x1.p-24, + -0x1.p24, + -0x1.fffffep-1 + }, + { // Entry 181 + -0x1.80p-22, + -0x1.fffffep23, + -0x1.000002p0 + }, + { // Entry 182 + -0.0, + -0x1.fffffep23, + -0x1.p0 + }, + { // Entry 183 + -0.0, + -0x1.fffffep23, + -0x1.fffffep-1 + }, + { // Entry 184 + 0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 185 + 0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 186 + -0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 187 + -0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 188 + 0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 189 + -0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 190 + 0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 191 + -0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 192 + 0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 193 + -0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 194 + 0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 195 + -0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 196 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 197 + -0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 198 + 0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 199 + -0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 200 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 201 + 0.0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 202 + -0.0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 203 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 204 + 0.0, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 205 + 0.0, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 206 + -0.0, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 207 + -0.0, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 208 + 0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 209 + 0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 210 + -0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 211 + -0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 212 + 0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 213 + -0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 214 + 0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 215 + -0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 216 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 217 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 218 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 219 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 220 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 221 + -0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 222 + 0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 223 + -0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 224 + 0.0, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 225 + 0.0, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 226 + -0.0, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 227 + -0.0, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 228 + 0x1.p-149, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 229 + 0x1.p-149, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 230 + -0x1.p-149, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 231 + -0x1.p-149, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 232 + 0.0, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 233 + 0.0, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 234 + -0.0, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 235 + -0.0, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 236 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 237 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 238 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 239 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 240 + 0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 241 + 0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 242 + -0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 243 + -0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 244 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 245 + 0.0, + 0.0f, + -0x1.p-126 + }, + { // Entry 246 + -0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 247 + -0.0, + -0.0f, + -0x1.p-126 + }, + { // Entry 248 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 249 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 250 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 251 + -0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 252 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 253 + 0.0, + 0.0f, + -0x1.p-149 + }, + { // Entry 254 + -0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 255 + -0.0, + -0.0f, + -0x1.p-149 + } +}; diff --git a/tests/math_data/frexp_intel_data.h b/tests/math_data/frexp_intel_data.h new file mode 100644 index 000000000..ce2e873f3 --- /dev/null +++ b/tests/math_data/frexp_intel_data.h @@ -0,0 +1,1108 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_int_1_t g_frexp_intel_data[] = { + { // Entry 0 + 0x1.p-1, + (int)0x1.94p6, + 0x1.0p100 + }, + { // Entry 1 + 0x1.199999999999a0p-1, + (int)0x1.94p6, + 0x1.199999999999ap100 + }, + { // Entry 2 + 0x1.33333333333340p-1, + (int)0x1.94p6, + 0x1.3333333333334p100 + }, + { // Entry 3 + 0x1.4ccccccccccce0p-1, + (int)0x1.94p6, + 0x1.4cccccccccccep100 + }, + { // Entry 4 + 0x1.66666666666680p-1, + (int)0x1.94p6, + 0x1.6666666666668p100 + }, + { // Entry 5 + 0x1.80000000000020p-1, + (int)0x1.94p6, + 0x1.8000000000002p100 + }, + { // Entry 6 + 0x1.999999999999c0p-1, + (int)0x1.94p6, + 0x1.999999999999cp100 + }, + { // Entry 7 + 0x1.b3333333333360p-1, + (int)0x1.94p6, + 0x1.b333333333336p100 + }, + { // Entry 8 + 0x1.cccccccccccdp-1, + (int)0x1.94p6, + 0x1.cccccccccccd0p100 + }, + { // Entry 9 + 0x1.e66666666666a0p-1, + (int)0x1.94p6, + 0x1.e66666666666ap100 + }, + { // Entry 10 + 0x1.p-1, + (int)0x1.98p6, + 0x1.0p101 + }, + { // Entry 11 + 0x1.p-1, + (int)0x1.92p7, + 0x1.0p200 + }, + { // Entry 12 + 0x1.199999999999a0p-1, + (int)0x1.92p7, + 0x1.199999999999ap200 + }, + { // Entry 13 + 0x1.33333333333340p-1, + (int)0x1.92p7, + 0x1.3333333333334p200 + }, + { // Entry 14 + 0x1.4ccccccccccce0p-1, + (int)0x1.92p7, + 0x1.4cccccccccccep200 + }, + { // Entry 15 + 0x1.66666666666680p-1, + (int)0x1.92p7, + 0x1.6666666666668p200 + }, + { // Entry 16 + 0x1.80000000000020p-1, + (int)0x1.92p7, + 0x1.8000000000002p200 + }, + { // Entry 17 + 0x1.999999999999c0p-1, + (int)0x1.92p7, + 0x1.999999999999cp200 + }, + { // Entry 18 + 0x1.b3333333333360p-1, + (int)0x1.92p7, + 0x1.b333333333336p200 + }, + { // Entry 19 + 0x1.cccccccccccdp-1, + (int)0x1.92p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 20 + 0x1.e66666666666a0p-1, + (int)0x1.92p7, + 0x1.e66666666666ap200 + }, + { // Entry 21 + 0x1.p-1, + (int)0x1.94p7, + 0x1.0p201 + }, + { // Entry 22 + 0x1.p-1, + (int)0x1.f480p9, + 0x1.0p1000 + }, + { // Entry 23 + 0x1.199999999999a0p-1, + (int)0x1.f480p9, + 0x1.199999999999ap1000 + }, + { // Entry 24 + 0x1.33333333333340p-1, + (int)0x1.f480p9, + 0x1.3333333333334p1000 + }, + { // Entry 25 + 0x1.4ccccccccccce0p-1, + (int)0x1.f480p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 26 + 0x1.66666666666680p-1, + (int)0x1.f480p9, + 0x1.6666666666668p1000 + }, + { // Entry 27 + 0x1.80000000000020p-1, + (int)0x1.f480p9, + 0x1.8000000000002p1000 + }, + { // Entry 28 + 0x1.999999999999c0p-1, + (int)0x1.f480p9, + 0x1.999999999999cp1000 + }, + { // Entry 29 + 0x1.b3333333333360p-1, + (int)0x1.f480p9, + 0x1.b333333333336p1000 + }, + { // Entry 30 + 0x1.cccccccccccdp-1, + (int)0x1.f480p9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 31 + 0x1.e66666666666a0p-1, + (int)0x1.f480p9, + 0x1.e66666666666ap1000 + }, + { // Entry 32 + 0x1.p-1, + (int)0x1.f5p9, + 0x1.0p1001 + }, + { // Entry 33 + -0x1.p-1, + (int)0x1.98p6, + -0x1.0p101 + }, + { // Entry 34 + -0x1.e6666666666660p-1, + (int)0x1.94p6, + -0x1.e666666666666p100 + }, + { // Entry 35 + -0x1.ccccccccccccc0p-1, + (int)0x1.94p6, + -0x1.cccccccccccccp100 + }, + { // Entry 36 + -0x1.b3333333333320p-1, + (int)0x1.94p6, + -0x1.b333333333332p100 + }, + { // Entry 37 + -0x1.99999999999980p-1, + (int)0x1.94p6, + -0x1.9999999999998p100 + }, + { // Entry 38 + -0x1.7fffffffffffe0p-1, + (int)0x1.94p6, + -0x1.7fffffffffffep100 + }, + { // Entry 39 + -0x1.66666666666640p-1, + (int)0x1.94p6, + -0x1.6666666666664p100 + }, + { // Entry 40 + -0x1.4ccccccccccca0p-1, + (int)0x1.94p6, + -0x1.4cccccccccccap100 + }, + { // Entry 41 + -0x1.333333333333p-1, + (int)0x1.94p6, + -0x1.3333333333330p100 + }, + { // Entry 42 + -0x1.19999999999960p-1, + (int)0x1.94p6, + -0x1.1999999999996p100 + }, + { // Entry 43 + -0x1.p-1, + (int)0x1.94p6, + -0x1.0p100 + }, + { // Entry 44 + -0x1.p-1, + (int)0x1.94p7, + -0x1.0p201 + }, + { // Entry 45 + -0x1.e6666666666660p-1, + (int)0x1.92p7, + -0x1.e666666666666p200 + }, + { // Entry 46 + -0x1.ccccccccccccc0p-1, + (int)0x1.92p7, + -0x1.cccccccccccccp200 + }, + { // Entry 47 + -0x1.b3333333333320p-1, + (int)0x1.92p7, + -0x1.b333333333332p200 + }, + { // Entry 48 + -0x1.99999999999980p-1, + (int)0x1.92p7, + -0x1.9999999999998p200 + }, + { // Entry 49 + -0x1.7fffffffffffe0p-1, + (int)0x1.92p7, + -0x1.7fffffffffffep200 + }, + { // Entry 50 + -0x1.66666666666640p-1, + (int)0x1.92p7, + -0x1.6666666666664p200 + }, + { // Entry 51 + -0x1.4ccccccccccca0p-1, + (int)0x1.92p7, + -0x1.4cccccccccccap200 + }, + { // Entry 52 + -0x1.333333333333p-1, + (int)0x1.92p7, + -0x1.3333333333330p200 + }, + { // Entry 53 + -0x1.19999999999960p-1, + (int)0x1.92p7, + -0x1.1999999999996p200 + }, + { // Entry 54 + -0x1.p-1, + (int)0x1.92p7, + -0x1.0p200 + }, + { // Entry 55 + -0x1.p-1, + (int)0x1.f5p9, + -0x1.0p1001 + }, + { // Entry 56 + -0x1.e6666666666660p-1, + (int)0x1.f480p9, + -0x1.e666666666666p1000 + }, + { // Entry 57 + -0x1.ccccccccccccc0p-1, + (int)0x1.f480p9, + -0x1.cccccccccccccp1000 + }, + { // Entry 58 + -0x1.b3333333333320p-1, + (int)0x1.f480p9, + -0x1.b333333333332p1000 + }, + { // Entry 59 + -0x1.99999999999980p-1, + (int)0x1.f480p9, + -0x1.9999999999998p1000 + }, + { // Entry 60 + -0x1.7fffffffffffe0p-1, + (int)0x1.f480p9, + -0x1.7fffffffffffep1000 + }, + { // Entry 61 + -0x1.66666666666640p-1, + (int)0x1.f480p9, + -0x1.6666666666664p1000 + }, + { // Entry 62 + -0x1.4ccccccccccca0p-1, + (int)0x1.f480p9, + -0x1.4cccccccccccap1000 + }, + { // Entry 63 + -0x1.333333333333p-1, + (int)0x1.f480p9, + -0x1.3333333333330p1000 + }, + { // Entry 64 + -0x1.19999999999960p-1, + (int)0x1.f480p9, + -0x1.1999999999996p1000 + }, + { // Entry 65 + -0x1.p-1, + (int)0x1.f480p9, + -0x1.0p1000 + }, + { // Entry 66 + 0x1.p-1, + (int)0x1.98p5, + 0x1.0p50 + }, + { // Entry 67 + 0x1.199999999999a0p-1, + (int)0x1.98p5, + 0x1.199999999999ap50 + }, + { // Entry 68 + 0x1.33333333333340p-1, + (int)0x1.98p5, + 0x1.3333333333334p50 + }, + { // Entry 69 + 0x1.4ccccccccccce0p-1, + (int)0x1.98p5, + 0x1.4cccccccccccep50 + }, + { // Entry 70 + 0x1.66666666666680p-1, + (int)0x1.98p5, + 0x1.6666666666668p50 + }, + { // Entry 71 + 0x1.80000000000020p-1, + (int)0x1.98p5, + 0x1.8000000000002p50 + }, + { // Entry 72 + 0x1.999999999999c0p-1, + (int)0x1.98p5, + 0x1.999999999999cp50 + }, + { // Entry 73 + 0x1.b3333333333360p-1, + (int)0x1.98p5, + 0x1.b333333333336p50 + }, + { // Entry 74 + 0x1.cccccccccccdp-1, + (int)0x1.98p5, + 0x1.cccccccccccd0p50 + }, + { // Entry 75 + 0x1.e66666666666a0p-1, + (int)0x1.98p5, + 0x1.e66666666666ap50 + }, + { // Entry 76 + 0x1.p-1, + (int)0x1.a0p5, + 0x1.0p51 + }, + { // Entry 77 + 0x1.p-1, + (int)0x1.a0p5, + 0x1.0p51 + }, + { // Entry 78 + 0x1.199999999999a0p-1, + (int)0x1.a0p5, + 0x1.199999999999ap51 + }, + { // Entry 79 + 0x1.33333333333340p-1, + (int)0x1.a0p5, + 0x1.3333333333334p51 + }, + { // Entry 80 + 0x1.4ccccccccccce0p-1, + (int)0x1.a0p5, + 0x1.4cccccccccccep51 + }, + { // Entry 81 + 0x1.66666666666680p-1, + (int)0x1.a0p5, + 0x1.6666666666668p51 + }, + { // Entry 82 + 0x1.80000000000020p-1, + (int)0x1.a0p5, + 0x1.8000000000002p51 + }, + { // Entry 83 + 0x1.999999999999c0p-1, + (int)0x1.a0p5, + 0x1.999999999999cp51 + }, + { // Entry 84 + 0x1.b3333333333360p-1, + (int)0x1.a0p5, + 0x1.b333333333336p51 + }, + { // Entry 85 + 0x1.cccccccccccdp-1, + (int)0x1.a0p5, + 0x1.cccccccccccd0p51 + }, + { // Entry 86 + 0x1.e66666666666a0p-1, + (int)0x1.a0p5, + 0x1.e66666666666ap51 + }, + { // Entry 87 + 0x1.p-1, + (int)0x1.a8p5, + 0x1.0p52 + }, + { // Entry 88 + 0x1.p-1, + (int)0x1.a8p5, + 0x1.0p52 + }, + { // Entry 89 + 0x1.199999999999a0p-1, + (int)0x1.a8p5, + 0x1.199999999999ap52 + }, + { // Entry 90 + 0x1.33333333333340p-1, + (int)0x1.a8p5, + 0x1.3333333333334p52 + }, + { // Entry 91 + 0x1.4ccccccccccce0p-1, + (int)0x1.a8p5, + 0x1.4cccccccccccep52 + }, + { // Entry 92 + 0x1.66666666666680p-1, + (int)0x1.a8p5, + 0x1.6666666666668p52 + }, + { // Entry 93 + 0x1.80000000000020p-1, + (int)0x1.a8p5, + 0x1.8000000000002p52 + }, + { // Entry 94 + 0x1.999999999999c0p-1, + (int)0x1.a8p5, + 0x1.999999999999cp52 + }, + { // Entry 95 + 0x1.b3333333333360p-1, + (int)0x1.a8p5, + 0x1.b333333333336p52 + }, + { // Entry 96 + 0x1.cccccccccccdp-1, + (int)0x1.a8p5, + 0x1.cccccccccccd0p52 + }, + { // Entry 97 + 0x1.e66666666666a0p-1, + (int)0x1.a8p5, + 0x1.e66666666666ap52 + }, + { // Entry 98 + 0x1.p-1, + (int)0x1.b0p5, + 0x1.0p53 + }, + { // Entry 99 + 0x1.p-1, + (int)0x1.b0p5, + 0x1.0p53 + }, + { // Entry 100 + 0x1.199999999999a0p-1, + (int)0x1.b0p5, + 0x1.199999999999ap53 + }, + { // Entry 101 + 0x1.33333333333340p-1, + (int)0x1.b0p5, + 0x1.3333333333334p53 + }, + { // Entry 102 + 0x1.4ccccccccccce0p-1, + (int)0x1.b0p5, + 0x1.4cccccccccccep53 + }, + { // Entry 103 + 0x1.66666666666680p-1, + (int)0x1.b0p5, + 0x1.6666666666668p53 + }, + { // Entry 104 + 0x1.80000000000020p-1, + (int)0x1.b0p5, + 0x1.8000000000002p53 + }, + { // Entry 105 + 0x1.999999999999c0p-1, + (int)0x1.b0p5, + 0x1.999999999999cp53 + }, + { // Entry 106 + 0x1.b3333333333360p-1, + (int)0x1.b0p5, + 0x1.b333333333336p53 + }, + { // Entry 107 + 0x1.cccccccccccdp-1, + (int)0x1.b0p5, + 0x1.cccccccccccd0p53 + }, + { // Entry 108 + 0x1.e66666666666a0p-1, + (int)0x1.b0p5, + 0x1.e66666666666ap53 + }, + { // Entry 109 + 0x1.p-1, + (int)0x1.b8p5, + 0x1.0p54 + }, + { // Entry 110 + 0x1.p-1, + (int)-0x1.0040p10, + 0x1.0p-1026 + }, + { // Entry 111 + 0x1.d3333333333340p-1, + (int)-0x1.ff80p9, + 0x1.d333333333334p-1024 + }, + { // Entry 112 + 0x1.b3333333333340p-1, + (int)-0x1.ffp9, + 0x1.b333333333334p-1023 + }, + { // Entry 113 + 0x1.3e666666666670p-1, + (int)-0x1.fe80p9, + 0x1.3e66666666667p-1022 + }, + { // Entry 114 + 0x1.a3333333333340p-1, + (int)-0x1.fe80p9, + 0x1.a333333333334p-1022 + }, + { // Entry 115 + 0x1.04p-1, + (int)-0x1.fep9, + 0x1.040p-1021 + }, + { // Entry 116 + 0x1.36666666666660p-1, + (int)-0x1.fep9, + 0x1.3666666666666p-1021 + }, + { // Entry 117 + 0x1.68ccccccccccc0p-1, + (int)-0x1.fep9, + 0x1.68cccccccccccp-1021 + }, + { // Entry 118 + 0x1.9b333333333320p-1, + (int)-0x1.fep9, + 0x1.9b33333333332p-1021 + }, + { // Entry 119 + 0x1.cd999999999980p-1, + (int)-0x1.fep9, + 0x1.cd99999999998p-1021 + }, + { // Entry 120 + 0x1.ffffffffffffe0p-1, + (int)-0x1.fep9, + 0x1.ffffffffffffep-1021 + }, + { // Entry 121 + 0x1.fffffffffffff0p-1, + (int)0x1.98p5, + 0x1.fffffffffffffp50 + }, + { // Entry 122 + 0x1.p-1, + (int)0x1.a0p5, + 0x1.0p51 + }, + { // Entry 123 + 0x1.00000000000010p-1, + (int)0x1.a0p5, + 0x1.0000000000001p51 + }, + { // Entry 124 + 0x1.fffffffffffff0p-1, + (int)0x1.a0p5, + 0x1.fffffffffffffp51 + }, + { // Entry 125 + 0x1.p-1, + (int)0x1.a8p5, + 0x1.0p52 + }, + { // Entry 126 + 0x1.00000000000010p-1, + (int)0x1.a8p5, + 0x1.0000000000001p52 + }, + { // Entry 127 + 0x1.fffffffffffff0p-1, + (int)0x1.a8p5, + 0x1.fffffffffffffp52 + }, + { // Entry 128 + 0x1.p-1, + (int)0x1.b0p5, + 0x1.0p53 + }, + { // Entry 129 + 0x1.00000000000010p-1, + (int)0x1.b0p5, + 0x1.0000000000001p53 + }, + { // Entry 130 + -0x1.00000000000010p-1, + (int)0x1.a0p5, + -0x1.0000000000001p51 + }, + { // Entry 131 + -0x1.p-1, + (int)0x1.a0p5, + -0x1.0p51 + }, + { // Entry 132 + -0x1.fffffffffffff0p-1, + (int)0x1.98p5, + -0x1.fffffffffffffp50 + }, + { // Entry 133 + -0x1.00000000000010p-1, + (int)0x1.a8p5, + -0x1.0000000000001p52 + }, + { // Entry 134 + -0x1.p-1, + (int)0x1.a8p5, + -0x1.0p52 + }, + { // Entry 135 + -0x1.fffffffffffff0p-1, + (int)0x1.a0p5, + -0x1.fffffffffffffp51 + }, + { // Entry 136 + -0x1.00000000000010p-1, + (int)0x1.b0p5, + -0x1.0000000000001p53 + }, + { // Entry 137 + -0x1.p-1, + (int)0x1.b0p5, + -0x1.0p53 + }, + { // Entry 138 + -0x1.fffffffffffff0p-1, + (int)0x1.a8p5, + -0x1.fffffffffffffp52 + }, + { // Entry 139 + 0x1.fffffffffffff0p-1, + (int)0x1.p10, + 0x1.fffffffffffffp1023 + }, + { // Entry 140 + -0x1.fffffffffffff0p-1, + (int)0x1.p10, + -0x1.fffffffffffffp1023 + }, + { // Entry 141 + 0x1.fffffffffffff0p-1, + (int)-0x1.80p2, + 0x1.fffffffffffffp-7 + }, + { // Entry 142 + 0x1.p-1, + (int)-0x1.40p2, + 0x1.0p-6 + }, + { // Entry 143 + 0x1.00000000000010p-1, + (int)-0x1.40p2, + 0x1.0000000000001p-6 + }, + { // Entry 144 + 0x1.fffffffffffff0p-1, + (int)-0x1.40p2, + 0x1.fffffffffffffp-6 + }, + { // Entry 145 + 0x1.p-1, + (int)-0x1.p2, + 0x1.0p-5 + }, + { // Entry 146 + 0x1.00000000000010p-1, + (int)-0x1.p2, + 0x1.0000000000001p-5 + }, + { // Entry 147 + 0x1.fffffffffffff0p-1, + (int)-0x1.p2, + 0x1.fffffffffffffp-5 + }, + { // Entry 148 + 0x1.p-1, + (int)-0x1.80p1, + 0x1.0p-4 + }, + { // Entry 149 + 0x1.00000000000010p-1, + (int)-0x1.80p1, + 0x1.0000000000001p-4 + }, + { // Entry 150 + 0x1.fffffffffffff0p-1, + (int)-0x1.80p1, + 0x1.fffffffffffffp-4 + }, + { // Entry 151 + 0x1.p-1, + (int)-0x1.p1, + 0x1.0p-3 + }, + { // Entry 152 + 0x1.00000000000010p-1, + (int)-0x1.p1, + 0x1.0000000000001p-3 + }, + { // Entry 153 + 0x1.fffffffffffff0p-1, + (int)-0x1.p1, + 0x1.fffffffffffffp-3 + }, + { // Entry 154 + 0x1.p-1, + (int)-0x1.p0, + 0x1.0p-2 + }, + { // Entry 155 + 0x1.00000000000010p-1, + (int)-0x1.p0, + 0x1.0000000000001p-2 + }, + { // Entry 156 + 0x1.fffffffffffff0p-1, + (int)-0x1.p0, + 0x1.fffffffffffffp-2 + }, + { // Entry 157 + 0x1.p-1, + (int)0.0, + 0x1.0p-1 + }, + { // Entry 158 + 0x1.00000000000010p-1, + (int)0.0, + 0x1.0000000000001p-1 + }, + { // Entry 159 + -0x1.p-1, + (int)-0x1.0c40p10, + -0x1.0p-1074 + }, + { // Entry 160 + -0.0, + (int)0.0, + -0.0 + }, + { // Entry 161 + 0x1.p-1, + (int)-0x1.0c40p10, + 0x1.0p-1074 + }, + { // Entry 162 + 0x1.fffffffffffff0p-1, + (int)0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 163 + 0x1.p-1, + (int)0x1.p0, + 0x1.0p0 + }, + { // Entry 164 + 0x1.00000000000010p-1, + (int)0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 165 + 0x1.fffffffffffff0p-1, + (int)0x1.p0, + 0x1.fffffffffffffp0 + }, + { // Entry 166 + 0x1.p-1, + (int)0x1.p1, + 0x1.0p1 + }, + { // Entry 167 + 0x1.00000000000010p-1, + (int)0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 168 + 0x1.fffffffffffff0p-1, + (int)0x1.p1, + 0x1.fffffffffffffp1 + }, + { // Entry 169 + 0x1.p-1, + (int)0x1.80p1, + 0x1.0p2 + }, + { // Entry 170 + 0x1.00000000000010p-1, + (int)0x1.80p1, + 0x1.0000000000001p2 + }, + { // Entry 171 + 0x1.fffffffffffff0p-1, + (int)0x1.80p1, + 0x1.fffffffffffffp2 + }, + { // Entry 172 + 0x1.p-1, + (int)0x1.p2, + 0x1.0p3 + }, + { // Entry 173 + 0x1.00000000000010p-1, + (int)0x1.p2, + 0x1.0000000000001p3 + }, + { // Entry 174 + 0x1.fffffffffffff0p-1, + (int)0x1.p2, + 0x1.fffffffffffffp3 + }, + { // Entry 175 + 0x1.p-1, + (int)0x1.40p2, + 0x1.0p4 + }, + { // Entry 176 + 0x1.00000000000010p-1, + (int)0x1.40p2, + 0x1.0000000000001p4 + }, + { // Entry 177 + 0x1.fffffffffffff0p-1, + (int)0x1.40p2, + 0x1.fffffffffffffp4 + }, + { // Entry 178 + 0x1.p-1, + (int)0x1.80p2, + 0x1.0p5 + }, + { // Entry 179 + 0x1.00000000000010p-1, + (int)0x1.80p2, + 0x1.0000000000001p5 + }, + { // Entry 180 + 0x1.fffffffffffff0p-1, + (int)0x1.80p2, + 0x1.fffffffffffffp5 + }, + { // Entry 181 + 0x1.p-1, + (int)0x1.c0p2, + 0x1.0p6 + }, + { // Entry 182 + 0x1.00000000000010p-1, + (int)0x1.c0p2, + 0x1.0000000000001p6 + }, + { // Entry 183 + 0x1.fffffffffffff0p-1, + (int)0x1.c0p2, + 0x1.fffffffffffffp6 + }, + { // Entry 184 + 0x1.p-1, + (int)0x1.p3, + 0x1.0p7 + }, + { // Entry 185 + 0x1.00000000000010p-1, + (int)0x1.p3, + 0x1.0000000000001p7 + }, + { // Entry 186 + HUGE_VAL, + (int)0, + HUGE_VAL + }, + { // Entry 187 + -HUGE_VAL, + (int)0, + -HUGE_VAL + }, + { // Entry 188 + 0.0, + (int)0.0, + 0.0 + }, + { // Entry 189 + -0.0, + (int)0.0, + -0.0 + }, + { // Entry 190 + 0x1.fffffffffffff0p-1, + (int)0x1.p10, + 0x1.fffffffffffffp1023 + }, + { // Entry 191 + -0x1.fffffffffffff0p-1, + (int)0x1.p10, + -0x1.fffffffffffffp1023 + }, + { // Entry 192 + 0x1.ffffffffffffe0p-1, + (int)0x1.p10, + 0x1.ffffffffffffep1023 + }, + { // Entry 193 + -0x1.ffffffffffffe0p-1, + (int)0x1.p10, + -0x1.ffffffffffffep1023 + }, + { // Entry 194 + 0x1.921fb54442d180p-1, + (int)0x1.p1, + 0x1.921fb54442d18p1 + }, + { // Entry 195 + -0x1.921fb54442d180p-1, + (int)0x1.p1, + -0x1.921fb54442d18p1 + }, + { // Entry 196 + 0x1.921fb54442d180p-1, + (int)0x1.p0, + 0x1.921fb54442d18p0 + }, + { // Entry 197 + -0x1.921fb54442d180p-1, + (int)0x1.p0, + -0x1.921fb54442d18p0 + }, + { // Entry 198 + 0x1.00000000000010p-1, + (int)0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 199 + -0x1.00000000000010p-1, + (int)0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 200 + 0x1.p-1, + (int)0x1.p0, + 0x1.0p0 + }, + { // Entry 201 + -0x1.p-1, + (int)0x1.p0, + -0x1.0p0 + }, + { // Entry 202 + 0x1.fffffffffffff0p-1, + (int)0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 203 + -0x1.fffffffffffff0p-1, + (int)0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 204 + 0x1.921fb54442d180p-1, + (int)0.0, + 0x1.921fb54442d18p-1 + }, + { // Entry 205 + -0x1.921fb54442d180p-1, + (int)0.0, + -0x1.921fb54442d18p-1 + }, + { // Entry 206 + 0x1.00000000000010p-1, + (int)-0x1.fe80p9, + 0x1.0000000000001p-1022 + }, + { // Entry 207 + -0x1.00000000000010p-1, + (int)-0x1.fe80p9, + -0x1.0000000000001p-1022 + }, + { // Entry 208 + 0x1.p-1, + (int)-0x1.fe80p9, + 0x1.0p-1022 + }, + { // Entry 209 + -0x1.p-1, + (int)-0x1.fe80p9, + -0x1.0p-1022 + }, + { // Entry 210 + 0x1.ffffffffffffe0p-1, + (int)-0x1.ffp9, + 0x1.ffffffffffffep-1023 + }, + { // Entry 211 + -0x1.ffffffffffffe0p-1, + (int)-0x1.ffp9, + -0x1.ffffffffffffep-1023 + }, + { // Entry 212 + 0x1.ffffffffffffc0p-1, + (int)-0x1.ffp9, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 213 + -0x1.ffffffffffffc0p-1, + (int)-0x1.ffp9, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 214 + 0x1.p-1, + (int)-0x1.0cp10, + 0x1.0p-1073 + }, + { // Entry 215 + -0x1.p-1, + (int)-0x1.0cp10, + -0x1.0p-1073 + }, + { // Entry 216 + 0x1.p-1, + (int)-0x1.0c40p10, + 0x1.0p-1074 + }, + { // Entry 217 + -0x1.p-1, + (int)-0x1.0c40p10, + -0x1.0p-1074 + } +}; diff --git a/tests/math_data/frexpf_intel_data.h b/tests/math_data/frexpf_intel_data.h new file mode 100644 index 000000000..dd6ba7d06 --- /dev/null +++ b/tests/math_data/frexpf_intel_data.h @@ -0,0 +1,888 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_int_1_t g_frexpf_intel_data[] = { + { // Entry 0 + 0x1.p-1, + (int)0x1.94p6, + 0x1.p100 + }, + { // Entry 1 + 0x1.19999ap-1, + (int)0x1.94p6, + 0x1.19999ap100 + }, + { // Entry 2 + 0x1.333334p-1, + (int)0x1.94p6, + 0x1.333334p100 + }, + { // Entry 3 + 0x1.4ccccep-1, + (int)0x1.94p6, + 0x1.4ccccep100 + }, + { // Entry 4 + 0x1.666668p-1, + (int)0x1.94p6, + 0x1.666668p100 + }, + { // Entry 5 + 0x1.800002p-1, + (int)0x1.94p6, + 0x1.800002p100 + }, + { // Entry 6 + 0x1.99999cp-1, + (int)0x1.94p6, + 0x1.99999cp100 + }, + { // Entry 7 + 0x1.b33336p-1, + (int)0x1.94p6, + 0x1.b33336p100 + }, + { // Entry 8 + 0x1.ccccd0p-1, + (int)0x1.94p6, + 0x1.ccccd0p100 + }, + { // Entry 9 + 0x1.e6666ap-1, + (int)0x1.94p6, + 0x1.e6666ap100 + }, + { // Entry 10 + 0x1.p-1, + (int)0x1.98p6, + 0x1.p101 + }, + { // Entry 11 + -0x1.p-1, + (int)0x1.98p6, + -0x1.p101 + }, + { // Entry 12 + -0x1.e66666p-1, + (int)0x1.94p6, + -0x1.e66666p100 + }, + { // Entry 13 + -0x1.ccccccp-1, + (int)0x1.94p6, + -0x1.ccccccp100 + }, + { // Entry 14 + -0x1.b33332p-1, + (int)0x1.94p6, + -0x1.b33332p100 + }, + { // Entry 15 + -0x1.999998p-1, + (int)0x1.94p6, + -0x1.999998p100 + }, + { // Entry 16 + -0x1.7ffffep-1, + (int)0x1.94p6, + -0x1.7ffffep100 + }, + { // Entry 17 + -0x1.666664p-1, + (int)0x1.94p6, + -0x1.666664p100 + }, + { // Entry 18 + -0x1.4ccccap-1, + (int)0x1.94p6, + -0x1.4ccccap100 + }, + { // Entry 19 + -0x1.333330p-1, + (int)0x1.94p6, + -0x1.333330p100 + }, + { // Entry 20 + -0x1.199996p-1, + (int)0x1.94p6, + -0x1.199996p100 + }, + { // Entry 21 + -0x1.p-1, + (int)0x1.94p6, + -0x1.p100 + }, + { // Entry 22 + 0x1.p-1, + (int)0x1.60p4, + 0x1.p21 + }, + { // Entry 23 + 0x1.19999ap-1, + (int)0x1.60p4, + 0x1.19999ap21 + }, + { // Entry 24 + 0x1.333334p-1, + (int)0x1.60p4, + 0x1.333334p21 + }, + { // Entry 25 + 0x1.4ccccep-1, + (int)0x1.60p4, + 0x1.4ccccep21 + }, + { // Entry 26 + 0x1.666668p-1, + (int)0x1.60p4, + 0x1.666668p21 + }, + { // Entry 27 + 0x1.800002p-1, + (int)0x1.60p4, + 0x1.800002p21 + }, + { // Entry 28 + 0x1.99999cp-1, + (int)0x1.60p4, + 0x1.99999cp21 + }, + { // Entry 29 + 0x1.b33336p-1, + (int)0x1.60p4, + 0x1.b33336p21 + }, + { // Entry 30 + 0x1.ccccd0p-1, + (int)0x1.60p4, + 0x1.ccccd0p21 + }, + { // Entry 31 + 0x1.e6666ap-1, + (int)0x1.60p4, + 0x1.e6666ap21 + }, + { // Entry 32 + 0x1.p-1, + (int)0x1.70p4, + 0x1.p22 + }, + { // Entry 33 + 0x1.p-1, + (int)0x1.70p4, + 0x1.p22 + }, + { // Entry 34 + 0x1.19999ap-1, + (int)0x1.70p4, + 0x1.19999ap22 + }, + { // Entry 35 + 0x1.333334p-1, + (int)0x1.70p4, + 0x1.333334p22 + }, + { // Entry 36 + 0x1.4ccccep-1, + (int)0x1.70p4, + 0x1.4ccccep22 + }, + { // Entry 37 + 0x1.666668p-1, + (int)0x1.70p4, + 0x1.666668p22 + }, + { // Entry 38 + 0x1.800002p-1, + (int)0x1.70p4, + 0x1.800002p22 + }, + { // Entry 39 + 0x1.99999cp-1, + (int)0x1.70p4, + 0x1.99999cp22 + }, + { // Entry 40 + 0x1.b33336p-1, + (int)0x1.70p4, + 0x1.b33336p22 + }, + { // Entry 41 + 0x1.ccccd0p-1, + (int)0x1.70p4, + 0x1.ccccd0p22 + }, + { // Entry 42 + 0x1.e6666ap-1, + (int)0x1.70p4, + 0x1.e6666ap22 + }, + { // Entry 43 + 0x1.p-1, + (int)0x1.80p4, + 0x1.p23 + }, + { // Entry 44 + 0x1.p-1, + (int)0x1.80p4, + 0x1.p23 + }, + { // Entry 45 + 0x1.19999ap-1, + (int)0x1.80p4, + 0x1.19999ap23 + }, + { // Entry 46 + 0x1.333334p-1, + (int)0x1.80p4, + 0x1.333334p23 + }, + { // Entry 47 + 0x1.4ccccep-1, + (int)0x1.80p4, + 0x1.4ccccep23 + }, + { // Entry 48 + 0x1.666668p-1, + (int)0x1.80p4, + 0x1.666668p23 + }, + { // Entry 49 + 0x1.800002p-1, + (int)0x1.80p4, + 0x1.800002p23 + }, + { // Entry 50 + 0x1.99999cp-1, + (int)0x1.80p4, + 0x1.99999cp23 + }, + { // Entry 51 + 0x1.b33336p-1, + (int)0x1.80p4, + 0x1.b33336p23 + }, + { // Entry 52 + 0x1.ccccd0p-1, + (int)0x1.80p4, + 0x1.ccccd0p23 + }, + { // Entry 53 + 0x1.e6666ap-1, + (int)0x1.80p4, + 0x1.e6666ap23 + }, + { // Entry 54 + 0x1.p-1, + (int)0x1.90p4, + 0x1.p24 + }, + { // Entry 55 + 0x1.p-1, + (int)0x1.90p4, + 0x1.p24 + }, + { // Entry 56 + 0x1.19999ap-1, + (int)0x1.90p4, + 0x1.19999ap24 + }, + { // Entry 57 + 0x1.333334p-1, + (int)0x1.90p4, + 0x1.333334p24 + }, + { // Entry 58 + 0x1.4ccccep-1, + (int)0x1.90p4, + 0x1.4ccccep24 + }, + { // Entry 59 + 0x1.666668p-1, + (int)0x1.90p4, + 0x1.666668p24 + }, + { // Entry 60 + 0x1.800002p-1, + (int)0x1.90p4, + 0x1.800002p24 + }, + { // Entry 61 + 0x1.99999cp-1, + (int)0x1.90p4, + 0x1.99999cp24 + }, + { // Entry 62 + 0x1.b33336p-1, + (int)0x1.90p4, + 0x1.b33336p24 + }, + { // Entry 63 + 0x1.ccccd0p-1, + (int)0x1.90p4, + 0x1.ccccd0p24 + }, + { // Entry 64 + 0x1.e6666ap-1, + (int)0x1.90p4, + 0x1.e6666ap24 + }, + { // Entry 65 + 0x1.p-1, + (int)0x1.a0p4, + 0x1.p25 + }, + { // Entry 66 + 0x1.p-1, + (int)-0x1.02p7, + 0x1.p-130 + }, + { // Entry 67 + 0x1.d33330p-1, + (int)-0x1.fcp6, + 0x1.d33330p-128 + }, + { // Entry 68 + 0x1.b33330p-1, + (int)-0x1.f8p6, + 0x1.b33330p-127 + }, + { // Entry 69 + 0x1.3e6664p-1, + (int)-0x1.f4p6, + 0x1.3e6664p-126 + }, + { // Entry 70 + 0x1.a33330p-1, + (int)-0x1.f4p6, + 0x1.a33330p-126 + }, + { // Entry 71 + 0x1.03fffep-1, + (int)-0x1.f0p6, + 0x1.03fffep-125 + }, + { // Entry 72 + 0x1.366664p-1, + (int)-0x1.f0p6, + 0x1.366664p-125 + }, + { // Entry 73 + 0x1.68cccap-1, + (int)-0x1.f0p6, + 0x1.68cccap-125 + }, + { // Entry 74 + 0x1.9b3330p-1, + (int)-0x1.f0p6, + 0x1.9b3330p-125 + }, + { // Entry 75 + 0x1.cd9996p-1, + (int)-0x1.f0p6, + 0x1.cd9996p-125 + }, + { // Entry 76 + 0x1.fffffcp-1, + (int)-0x1.f0p6, + 0x1.fffffcp-125 + }, + { // Entry 77 + 0x1.fffffep-1, + (int)0x1.60p4, + 0x1.fffffep21 + }, + { // Entry 78 + 0x1.p-1, + (int)0x1.70p4, + 0x1.p22 + }, + { // Entry 79 + 0x1.000002p-1, + (int)0x1.70p4, + 0x1.000002p22 + }, + { // Entry 80 + 0x1.fffffep-1, + (int)0x1.70p4, + 0x1.fffffep22 + }, + { // Entry 81 + 0x1.p-1, + (int)0x1.80p4, + 0x1.p23 + }, + { // Entry 82 + 0x1.000002p-1, + (int)0x1.80p4, + 0x1.000002p23 + }, + { // Entry 83 + 0x1.fffffep-1, + (int)0x1.80p4, + 0x1.fffffep23 + }, + { // Entry 84 + 0x1.p-1, + (int)0x1.90p4, + 0x1.p24 + }, + { // Entry 85 + 0x1.000002p-1, + (int)0x1.90p4, + 0x1.000002p24 + }, + { // Entry 86 + -0x1.000002p-1, + (int)0x1.70p4, + -0x1.000002p22 + }, + { // Entry 87 + -0x1.p-1, + (int)0x1.70p4, + -0x1.p22 + }, + { // Entry 88 + -0x1.fffffep-1, + (int)0x1.60p4, + -0x1.fffffep21 + }, + { // Entry 89 + -0x1.000002p-1, + (int)0x1.80p4, + -0x1.000002p23 + }, + { // Entry 90 + -0x1.p-1, + (int)0x1.80p4, + -0x1.p23 + }, + { // Entry 91 + -0x1.fffffep-1, + (int)0x1.70p4, + -0x1.fffffep22 + }, + { // Entry 92 + -0x1.000002p-1, + (int)0x1.90p4, + -0x1.000002p24 + }, + { // Entry 93 + -0x1.p-1, + (int)0x1.90p4, + -0x1.p24 + }, + { // Entry 94 + -0x1.fffffep-1, + (int)0x1.80p4, + -0x1.fffffep23 + }, + { // Entry 95 + 0x1.fffffep-1, + (int)0x1.p7, + 0x1.fffffep127 + }, + { // Entry 96 + -0x1.fffffep-1, + (int)0x1.p7, + -0x1.fffffep127 + }, + { // Entry 97 + 0x1.fffffep-1, + (int)-0x1.80p2, + 0x1.fffffep-7 + }, + { // Entry 98 + 0x1.p-1, + (int)-0x1.40p2, + 0x1.p-6 + }, + { // Entry 99 + 0x1.000002p-1, + (int)-0x1.40p2, + 0x1.000002p-6 + }, + { // Entry 100 + 0x1.fffffep-1, + (int)-0x1.40p2, + 0x1.fffffep-6 + }, + { // Entry 101 + 0x1.p-1, + (int)-0x1.p2, + 0x1.p-5 + }, + { // Entry 102 + 0x1.000002p-1, + (int)-0x1.p2, + 0x1.000002p-5 + }, + { // Entry 103 + 0x1.fffffep-1, + (int)-0x1.p2, + 0x1.fffffep-5 + }, + { // Entry 104 + 0x1.p-1, + (int)-0x1.80p1, + 0x1.p-4 + }, + { // Entry 105 + 0x1.000002p-1, + (int)-0x1.80p1, + 0x1.000002p-4 + }, + { // Entry 106 + 0x1.fffffep-1, + (int)-0x1.80p1, + 0x1.fffffep-4 + }, + { // Entry 107 + 0x1.p-1, + (int)-0x1.p1, + 0x1.p-3 + }, + { // Entry 108 + 0x1.000002p-1, + (int)-0x1.p1, + 0x1.000002p-3 + }, + { // Entry 109 + 0x1.fffffep-1, + (int)-0x1.p1, + 0x1.fffffep-3 + }, + { // Entry 110 + 0x1.p-1, + (int)-0x1.p0, + 0x1.p-2 + }, + { // Entry 111 + 0x1.000002p-1, + (int)-0x1.p0, + 0x1.000002p-2 + }, + { // Entry 112 + 0x1.fffffep-1, + (int)-0x1.p0, + 0x1.fffffep-2 + }, + { // Entry 113 + 0x1.p-1, + (int)0.0, + 0x1.p-1 + }, + { // Entry 114 + 0x1.000002p-1, + (int)0.0, + 0x1.000002p-1 + }, + { // Entry 115 + -0x1.p-1, + (int)-0x1.28p7, + -0x1.p-149 + }, + { // Entry 116 + 0.0, + (int)0.0, + 0.0 + }, + { // Entry 117 + 0x1.p-1, + (int)-0x1.28p7, + 0x1.p-149 + }, + { // Entry 118 + 0x1.fffffep-1, + (int)0.0, + 0x1.fffffep-1 + }, + { // Entry 119 + 0x1.p-1, + (int)0x1.p0, + 0x1.p0 + }, + { // Entry 120 + 0x1.000002p-1, + (int)0x1.p0, + 0x1.000002p0 + }, + { // Entry 121 + 0x1.fffffep-1, + (int)0x1.p0, + 0x1.fffffep0 + }, + { // Entry 122 + 0x1.p-1, + (int)0x1.p1, + 0x1.p1 + }, + { // Entry 123 + 0x1.000002p-1, + (int)0x1.p1, + 0x1.000002p1 + }, + { // Entry 124 + 0x1.fffffep-1, + (int)0x1.p1, + 0x1.fffffep1 + }, + { // Entry 125 + 0x1.p-1, + (int)0x1.80p1, + 0x1.p2 + }, + { // Entry 126 + 0x1.000002p-1, + (int)0x1.80p1, + 0x1.000002p2 + }, + { // Entry 127 + 0x1.fffffep-1, + (int)0x1.80p1, + 0x1.fffffep2 + }, + { // Entry 128 + 0x1.p-1, + (int)0x1.p2, + 0x1.p3 + }, + { // Entry 129 + 0x1.000002p-1, + (int)0x1.p2, + 0x1.000002p3 + }, + { // Entry 130 + 0x1.fffffep-1, + (int)0x1.p2, + 0x1.fffffep3 + }, + { // Entry 131 + 0x1.p-1, + (int)0x1.40p2, + 0x1.p4 + }, + { // Entry 132 + 0x1.000002p-1, + (int)0x1.40p2, + 0x1.000002p4 + }, + { // Entry 133 + 0x1.fffffep-1, + (int)0x1.40p2, + 0x1.fffffep4 + }, + { // Entry 134 + 0x1.p-1, + (int)0x1.80p2, + 0x1.p5 + }, + { // Entry 135 + 0x1.000002p-1, + (int)0x1.80p2, + 0x1.000002p5 + }, + { // Entry 136 + 0x1.fffffep-1, + (int)0x1.80p2, + 0x1.fffffep5 + }, + { // Entry 137 + 0x1.p-1, + (int)0x1.c0p2, + 0x1.p6 + }, + { // Entry 138 + 0x1.000002p-1, + (int)0x1.c0p2, + 0x1.000002p6 + }, + { // Entry 139 + 0x1.fffffep-1, + (int)0x1.c0p2, + 0x1.fffffep6 + }, + { // Entry 140 + 0x1.p-1, + (int)0x1.p3, + 0x1.p7 + }, + { // Entry 141 + 0x1.000002p-1, + (int)0x1.p3, + 0x1.000002p7 + }, + { // Entry 142 + HUGE_VALF, + (int)0, + HUGE_VALF + }, + { // Entry 143 + -HUGE_VALF, + (int)0, + -HUGE_VALF + }, + { // Entry 144 + 0.0, + (int)0.0, + 0.0f + }, + { // Entry 145 + -0.0, + (int)0.0, + -0.0f + }, + { // Entry 146 + 0x1.fffffep-1, + (int)0x1.p7, + 0x1.fffffep127 + }, + { // Entry 147 + -0x1.fffffep-1, + (int)0x1.p7, + -0x1.fffffep127 + }, + { // Entry 148 + 0x1.fffffcp-1, + (int)0x1.p7, + 0x1.fffffcp127 + }, + { // Entry 149 + -0x1.fffffcp-1, + (int)0x1.p7, + -0x1.fffffcp127 + }, + { // Entry 150 + 0x1.921fb6p-1, + (int)0x1.p1, + 0x1.921fb6p1 + }, + { // Entry 151 + -0x1.921fb6p-1, + (int)0x1.p1, + -0x1.921fb6p1 + }, + { // Entry 152 + 0x1.921fb6p-1, + (int)0x1.p0, + 0x1.921fb6p0 + }, + { // Entry 153 + -0x1.921fb6p-1, + (int)0x1.p0, + -0x1.921fb6p0 + }, + { // Entry 154 + 0x1.000002p-1, + (int)0x1.p0, + 0x1.000002p0 + }, + { // Entry 155 + -0x1.000002p-1, + (int)0x1.p0, + -0x1.000002p0 + }, + { // Entry 156 + 0x1.p-1, + (int)0x1.p0, + 0x1.p0 + }, + { // Entry 157 + -0x1.p-1, + (int)0x1.p0, + -0x1.p0 + }, + { // Entry 158 + 0x1.fffffep-1, + (int)0.0, + 0x1.fffffep-1 + }, + { // Entry 159 + -0x1.fffffep-1, + (int)0.0, + -0x1.fffffep-1 + }, + { // Entry 160 + 0x1.921fb6p-1, + (int)0.0, + 0x1.921fb6p-1 + }, + { // Entry 161 + -0x1.921fb6p-1, + (int)0.0, + -0x1.921fb6p-1 + }, + { // Entry 162 + 0x1.000002p-1, + (int)-0x1.f4p6, + 0x1.000002p-126 + }, + { // Entry 163 + -0x1.000002p-1, + (int)-0x1.f4p6, + -0x1.000002p-126 + }, + { // Entry 164 + 0x1.p-1, + (int)-0x1.f4p6, + 0x1.p-126 + }, + { // Entry 165 + -0x1.p-1, + (int)-0x1.f4p6, + -0x1.p-126 + }, + { // Entry 166 + 0x1.fffffcp-1, + (int)-0x1.f8p6, + 0x1.fffffcp-127 + }, + { // Entry 167 + -0x1.fffffcp-1, + (int)-0x1.f8p6, + -0x1.fffffcp-127 + }, + { // Entry 168 + 0x1.fffff8p-1, + (int)-0x1.f8p6, + 0x1.fffff8p-127 + }, + { // Entry 169 + -0x1.fffff8p-1, + (int)-0x1.f8p6, + -0x1.fffff8p-127 + }, + { // Entry 170 + 0x1.p-1, + (int)-0x1.26p7, + 0x1.p-148 + }, + { // Entry 171 + -0x1.p-1, + (int)-0x1.26p7, + -0x1.p-148 + }, + { // Entry 172 + 0x1.p-1, + (int)-0x1.28p7, + 0x1.p-149 + }, + { // Entry 173 + -0x1.p-1, + (int)-0x1.28p7, + -0x1.p-149 + } +}; diff --git a/tests/math_data/hypot_intel_data.h b/tests/math_data/hypot_intel_data.h new file mode 100644 index 000000000..41bfddefc --- /dev/null +++ b/tests/math_data/hypot_intel_data.h @@ -0,0 +1,2788 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_hypot_intel_data[] = { + { // Entry 0 + 0x1.74334f2872bf324a8b6c0ffaf2f4ee3dp0, + -0x1.0b2502b3f7656p0, + 0x1.032a74c8e2bbdp0 + }, + { // Entry 1 + 0x1.21c9123e6cbbf812953910371e275dc7p3, + -0x1.21c9107b0e488p3, + 0x1.ff77fffffffffp-9 + }, + { // Entry 2 + 0x1.ad09d0c85a9b738fbeb590492c45108fp-21, + -0x1.3db5af72d9074p-21, + 0x1.2054976e47184p-21 + }, + { // Entry 3 + 0x1.6a1f7b584e052800e5d5eb2c842defa6p-1, + -0x1.47200db32f88cp-1, + -0x1.36a049ab1eee0p-2 + }, + { // Entry 4 + 0x1.893eff10a04aed61358d3d5b6481eebcp-425, + -0x1.5a9c9453941a0p-426, + -0x1.60ff7b7326510p-425 + }, + { // Entry 5 + 0x1.94c583ada5b5218962e6ed1568fead12p0, + -0x1.7ffffffffffffp0, + 0x1.0000000000003p-1 + }, + { // Entry 6 + 0x1.97cfe6e25cd448cf5dbcb52213679796p-11, + -0x1.8e38e38e38e37p-11, + -0x1.5fad40a57eb38p-13 + }, + { // Entry 7 + 0x1.9e661829e5ee17ffba1d22ecf0580873p421, + -0x1.9897fbb0fa747p418, + 0x1.9b3d45740c34cp421 + }, + { // Entry 8 + 0x1.c7653d4e9e6c77fe2eb3fc6720505db6p-11, + -0x1.bbbbbbbbbbbbcp-11, + -0x1.9999999999c33p-13 + }, + { // Entry 9 + 0x1.ddffe6e5a3a8384016ed35f115bc095ep-11, + -0x1.e9131abf0b717p-14, + 0x1.da12f684bda24p-11 + }, + { // Entry 10 + 0x1.7158b50ca33488012d796eb6f1a7589bp0, + -0x1.f5723be0cafb4p-1, + 0x1.0f35b6d1e4e0fp0 + }, + { // Entry 11 + 0x1.00007fffdffff7ffe2000dfff64007afp0, + -0x1.ffffffffffffdp-1, + 0x1.ffffffffffffcp-9 + }, + { // Entry 12 + 0x1.fffffffep-1043, + 0.0, + 0x1.fffffffe0p-1043 + }, + { // Entry 13 + 0x1.199999999999a0p0, + 0x1.0p-1074, + -0x1.199999999999ap0 + }, + { // Entry 14 + 0x1.aaaaaaaaaaaaa0p0, + 0x1.0p-1074, + -0x1.aaaaaaaaaaaaap0 + }, + { // Entry 15 + 0x1.b87065d24cee52b080d32543ca9cfc19p-1, + 0x1.0000000000001p-1, + -0x1.6666666666668p-1 + }, + { // Entry 16 + 0x1.43596ffaa74788558d1fbef5bc6654e5p0, + 0x1.0000000000001p-2, + -0x1.3cf3cf3cf3cf4p0 + }, + { // Entry 17 + 0x1.4ccccccccccd08000000000000627627p-2, + 0x1.0000000000001p-3, + -0x1.3333333333337p-2 + }, + { // Entry 18 + 0x1.801554bda99c72d8de8e8d0810523d56p0, + 0x1.0000000000001p-5, + 0x1.8000000000001p0 + }, + { // Entry 19 + 0x1.74b50ce2454308015045eece9494acfbp-3, + 0x1.0000000000001p-7, + -0x1.745d1745d0e18p-3 + }, + { // Entry 20 + 0x1.28ff91ab72d727facf9be8fbd129e05ep-2, + 0x1.0000000000080p-3, + 0x1.0c0p-2 + }, + { // Entry 21 + 0x1.000033d5ab09e8017b9fe870280d1247p9, + 0x1.0000000000aeep9, + 0x1.45d1745d1745ep0 + }, + { // Entry 22 + 0x1.07e0f670c16e48e1e7c24e5939e31f55p-3, + 0x1.00000009880p-3, + 0x1.ffffff8cfffffp-6 + }, + { // Entry 23 + 0x1.b596b5878e25800001094dfd216cf693p-1, + 0x1.00000040ed435p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 24 + 0x1.0008ffd80967981d0efdf34de42be658p-4, + 0x1.0000007ffffdep-10, + 0x1.0000fffffffffp-4 + }, + { // Entry 25 + 0x1.6a09e8e19116080994af0efbde159838p-20, + 0x1.0000037ffffdfp-20, + 0x1.00000000110p-20 + }, + { // Entry 26 + 0x1.00009ec452a8c81c490f9ba38768ce7cp-3, + 0x1.0000043ffffdfp-3, + 0x1.19453808ca296p-11 + }, + { // Entry 27 + 0x1.b879b2c3faae37fe5d8254c1a9443fd6p-1, + 0x1.000fffffff6c8p-1, + -0x1.6666666666668p-1 + }, + { // Entry 28 + 0x1.6b9824a5d9fefc6fac3c06f2beba6d16p0, + 0x1.001p0, + 0x1.0222222222223p0 + }, + { // Entry 29 + 0x1.6b1dc233c08aacf04d42b3d293e12a49p0, + 0x1.0016f5e74bfddp0, + -0x1.016eb68415ab1p0 + }, + { // Entry 30 + 0x1.778d27690518dd41bd73ad488f2a2174p-27, + 0x1.00a436e9442ddp-27, + 0x1.122dc42e12491p-27 + }, + { // Entry 31 + 0x1.6c9ed56d3e093800300f2c229b359a3dp0, + 0x1.01b59372d3dp0, + -0x1.01f11caa0d8fap0 + }, + { // Entry 32 + 0x1.62e44823f6c828019d99f2ea6e42b44dp-1, + 0x1.0624dd41fac87p-10, + 0x1.62e42fefa39efp-1 + }, + { // Entry 33 + 0x1.62e44823f6c9980000fc0f85b3c55a79p-1, + 0x1.0624dd49c38c9p-10, + 0x1.62e42fefa39efp-1 + }, + { // Entry 34 + 0x1.086b948a12d8c800cf1808a10a5174d9p3, + 0x1.086ac9804c16fp3, + 0x1.47ae147ae1488p-5 + }, + { // Entry 35 + 0x1.74334f2872bf324a8b6c0ffaf2f4ee3dp0, + 0x1.0b2502b3f7656p0, + -0x1.032a74c8e2bbdp0 + }, + { // Entry 36 + 0x1.b174e26559df6801e67982110c79e921p0, + 0x1.0dadec75407d1p0, + 0x1.53594d6535950p0 + }, + { // Entry 37 + 0x1.0fa6ab587be3f81316d103dd56845189p2, + 0x1.0dc27b7edad61p2, + -0x1.fffffffffffdfp-2 + }, + { // Entry 38 + 0x1.0e00000001e77800795b3317cdb8cf48p-1, + 0x1.0e0p-1, + 0x1.00880p-20 + }, + { // Entry 39 + 0x1.1e643a24dde918108702a958a34659bdp1, + 0x1.17261d1fbe70fp1, + -0x1.0p-1 + }, + { // Entry 40 + 0x1.00009ec452a8c81c490f9ba38768ce7cp-3, + 0x1.19453808ca296p-11, + 0x1.0000043ffffdfp-3 + }, + { // Entry 41 + 0x1.1f7648cb9c2928102f301b4e2a6da7f8p3, + 0x1.1f6fb7dbedf31p3, + -0x1.eb851eb851eb2p-4 + }, + { // Entry 42 + 0x1.3fc168b1ba65f7fefcba8c51c9dceebep1, + 0x1.333333334955dp1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 43 + 0x1.d561dc6bbc69b7fffefd4eef36bb45cep-1, + 0x1.33333336ffb33p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 44 + 0x1.b6d63492d208b7fe66769600852b12d8p7, + 0x1.3845636425767p7, + 0x1.34534564561d4p7 + }, + { // Entry 45 + 0x1.b6d63492cf6ddfff7a4bf179a9f2d6cap7, + 0x1.3845636425776p7, + 0x1.3453456452673p7 + }, + { // Entry 46 + 0x1.853a0d5122cef456b05a1510fbead643p6, + 0x1.3bbd9e1fa27b4p6, + 0x1.c7372b6a514bcp5 + }, + { // Entry 47 + 0x1.3fba0ae4ce08b810e8f56ddaf12a7f4fp3, + 0x1.3e1f0f87c3dd1p3, + -0x1.fffffffffffdfp-1 + }, + { // Entry 48 + 0x1.b71be4215a53283d71f5b110a870e894p-11, + 0x1.484e2afe0bbc6p-13, + -0x1.af5ebd7af5ec0p-11 + }, + { // Entry 49 + 0x1.56d07f9feb80d804781ae4305058b676p2, + 0x1.550fe1779c5p2, + -0x1.14f2805f85d24p-1 + }, + { // Entry 50 + 0x1.a52df5c24c89489d50528533a7f35763p2, + 0x1.5555555555556p0, + 0x1.9c71c71c71c69p2 + }, + { // Entry 51 + 0x1.b993cc4482b447ff4f74030e8ba14870p-1, + 0x1.57354071c6426p-3, + -0x1.b1293f6f53880p-1 + }, + { // Entry 52 + 0x1.a7e2abc57f0e380a70c24d675241f120p0, + 0x1.5b2d96cb65bp0, + -0x1.e666666666664p-1 + }, + { // Entry 53 + 0x1.e44d26303c8e703260adac35beb0201ap421, + 0x1.600ec23b7b61ep421, + -0x1.4c92148cef14ap421 + }, + { // Entry 54 + 0x1.f8611701969ccfffff045c3f99fe48f7p-1, + 0x1.6666666dac2fap-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 55 + 0x1.6cc93c4d65368802345842af2282a5eap1, + 0x1.6cc93a754133ep1, + 0x1.257430139p-10 + }, + { // Entry 56 + 0x1.6cc93c4d653688025c9147b5b60441e9p1, + 0x1.6cc93a754133ep1, + 0x1.25743013900c8p-10 + }, + { // Entry 57 + 0x1.6cc93c4d653688025e2d2930daa313d5p1, + 0x1.6cc93a754133ep1, + 0x1.25743013900d0p-10 + }, + { // Entry 58 + 0x1.d488ac97053f37fbba277d07ac43cad5p-20, + 0x1.7p-20, + 0x1.220p-20 + }, + { // Entry 59 + 0x1.400000004cccc800052f1bc6a6c17e88p-1, + 0x1.7ffffffffffffp-2, + 0x1.000000006p-1 + }, + { // Entry 60 + 0x1.ffee8df9517ff7fe75600bb975e5ce61p0, + 0x1.81792910a5db1p-1, + -0x1.da43b5dce0b18p0 + }, + { // Entry 61 + 0x1.9b0a5736513fc7ffab037ae75d04e99ap2, + 0x1.88a4522914881p2, + 0x1.e666666666667p0 + }, + { // Entry 62 + 0x1.a5fa08a755b5c900f2d5cc6751e1ecf9p2, + 0x1.88cb3c9484e2ap0, + 0x1.9a6449e59bb5dp2 + }, + { // Entry 63 + 0x1.8befefed027e87ff6c70308e205c2a19p6, + 0x1.8beea4e1a0873p6, + -0x1.0p-1 + }, + { // Entry 64 + 0x1.96991a72bfd0100000868ffe3e831279p1, + 0x1.8cccccce3bcbdp1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 65 + 0x1.bf7cd9d02c7e220c699cc834fdd4fb41p-4, + 0x1.8ddf4152067fcp-4, + -0x1.999999999999ap-5 + }, + { // Entry 66 + 0x1.76e7ba8bc745280094a71daf10d4a68ep25, + 0x1.97fe3896c80f0p2, + 0x1.76e7ba8bc741bp25 + }, + { // Entry 67 + 0x1.0efacef2e4e81ffffefe587f1ae783b6p0, + 0x1.999999a0c0a0bp-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 68 + 0x1.715e867859a8580001048a1e9e9dff7cp-1, + 0x1.999999b9ce793p-3, + 0x1.62e42fefa39efp-1 + }, + { // Entry 69 + 0x1.6690cd7c39fa4800010745dc1f901919p-1, + 0x1.999999da8ed7ap-4, + 0x1.62e42fefa39efp-1 + }, + { // Entry 70 + 0x1.f65294baeb7788330decefa598e273d5p-11, + 0x1.9dbcc48676f94p-15, + 0x1.f5a814afd6a11p-11 + }, + { // Entry 71 + 0x1.c26cb730864d698c82db5769586bd519p0, + 0x1.a2882f7660c18p-2, + 0x1.b61a64501888ap0 + }, + { // Entry 72 + 0x1.209f4f2c5979e816bf99efe18e6f1cdap1, + 0x1.b8f22f033c872p-3, + 0x1.1f4db533bcddcp1 + }, + { // Entry 73 + 0x1.50225479d4b157fe785588557cc66cdep-10, + 0x1.bd8caaaf99090p-11, + -0x1.f76b23986ff44p-11 + }, + { // Entry 74 + 0x1.060db00245bf781048c529e4efff0afbp25, + 0x1.bffffffffffffp22, + 0x1.0000027ffffdfp25 + }, + { // Entry 75 + 0x1.c8c25b45aba168f0187bb5c3abbc3d16p-11, + 0x1.c06b09e919d94p-11, + -0x1.5b911048a3310p-13 + }, + { // Entry 76 + 0x1.f53b21b5c40249b92a9c223bae43323bp0, + 0x1.c81e6f7fe3993p-2, + -0x1.e8167b6df2ee0p0 + }, + { // Entry 77 + 0x1.f5950f056e39e90cbaac1f89ab36b40ap2, + 0x1.cba2e8ba2e8b7p0, + 0x1.e83e0f83e0f76p2 + }, + { // Entry 78 + 0x1.ddffe6e5a3a8384016ed35f115bc095ep-11, + 0x1.da12f684bda24p-11, + -0x1.e9131abf0b717p-14 + }, + { // Entry 79 + 0x1.7941bb05a39ca7ff5e4553b1fc4d7db9p-423, + 0x1.f8d7bbd7ce920p-426, + -0x1.73f0fd4fd9fd0p-423 + }, + { // Entry 80 + 0x1.b13fad7cb7c50801dede1905f3f366a1p9, + 0x1.f91b91b91b905p2, + 0x1.b13b13b13b130p9 + }, + { // Entry 81 + 0x1.69fd85887947900071fbc08183b8ab23p0, + 0x1.fcf76c540d958p-1, + -0x1.017098d82f95ep0 + }, + { // Entry 82 + 0x1.21c9123e6cbbf812953910371e275dc7p3, + 0x1.ff77fffffffffp-9, + -0x1.21c9107b0e488p3 + }, + { // Entry 83 + 0x1.c66addfec91c411f38e2aacb6ea06a91p-3, + 0x1.ffeffffffffffp-4, + -0x1.7777777777774p-3 + }, + { // Entry 84 + 0x1.4eb522b24186e8254574c77b5f914855p-1, + 0x1.ffeffffffffffp-4, + 0x1.488888888888ap-1 + }, + { // Entry 85 + 0x1.002caffe59b0a7feeda747a94b176ccap4, + 0x1.ffeffffffffffp3, + -0x1.4888888888888p-1 + }, + { // Entry 86 + 0x1.fff28f6f00e797fec43eb25e08b861abp3, + 0x1.ffeffffffffffp3, + -0x1.99999999a7508p-4 + }, + { // Entry 87 + 0x1.00000001fffff7fe0007f00400100ff6p20, + 0x1.fffffbfffffffp4, + 0x1.0p20 + }, + { // Entry 88 + 0x1.0082de91198ee8170bcff2900895b92ap2, + 0x1.ffffffffffdffp-3, + 0x1.0002fffffffdfp2 + }, + { // Entry 89 + 0x1.6a09e667f3c5125ab5042ba7be436cbbp-2, + 0x1.ffffffffffff7p-3, + 0x1.00000000000c0p-2 + }, + { // Entry 90 + 0x1.ffffffffffffb0p500, + 0x1.ffffffffffffbp500, + 0x1.ffffffffffffbp-1 + }, + { // Entry 91 + 0x1.333574eb66a002798d20bb2ca70862e4p-1, + 0x1.ffffffffffffep-3, + 0x1.1745d1745d177p-1 + }, + { // Entry 92 + 0x1.745d1745d17557ffffffffffc41ap-3, + 0x1.ffffffffffffep-28, + 0x1.745d1745d1750p-3 + }, + { // Entry 93 + 0x1.00000000000000007fffffffffffefffp1, + 0x1.ffffffffffffep-32, + -0x1.0p1 + }, + { // Entry 94 + 0x1.7777777777780000015d1745d1745c6cp-4, + 0x1.ffffffffffffep-40, + 0x1.7777777777780p-4 + }, + { // Entry 95 + 0x1.01c5967e49cb581b1ce389659d8f68ecp2, + 0x1.ffffffffffffep1, + -0x1.e2be2be2be2c3p-2 + }, + { // Entry 96 + 0x1.0058d424f448e820225d2e7a25abc0ebp4, + 0x1.ffffffffffffep3, + -0x1.aaaaaaaaaaaa8p-1 + }, + { // Entry 97 + 0x1.6a09e667f3bcdfa9516192a2b726086dp0, + -0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 98 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 99 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + -0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 100 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + -0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 101 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 102 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + -0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 103 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + -0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 104 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 105 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p0, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 106 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 107 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 108 + 0x1.6a09e667f3bcdfa9516192a2b726086dp0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 109 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 110 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 111 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 112 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 113 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 114 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 115 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 116 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 117 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p0, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 118 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 119 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 120 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 121 + 0x1.6a09e667f3bcdfa9516192a2b726086dp0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 122 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 123 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 124 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 125 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 126 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 127 + 0x1.6a09e667f3bcc3608b617397f77caac1p0, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 128 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 129 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 130 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 131 + 0x1.6a09e667f3bcd459022e5304d10b0412p0, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 132 + 0x1.6a09e667f3bcdfa9516192a2b726086dp0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 133 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 134 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 135 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 136 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 137 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 138 + 0x1.01fe03f61bad04b1068572febc925ad1p3, + 0x1.0p0, + 0x1.0p3 + }, + { // Entry 139 + 0x1.01fe03f61bad04b1068572febc925ad1p3, + 0x1.0p3, + 0x1.0p0 + }, + { // Entry 140 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep3, + 0x1.0p3, + 0x1.0p3 + }, + { // Entry 141 + 0x1.00001ffffe00003ffff60001bfffacp9, + 0x1.0p0, + 0x1.0p9 + }, + { // Entry 142 + 0x1.000007ffffe00000fffff600006ffffap10, + 0x1.0p0, + 0x1.0p10 + }, + { // Entry 143 + 0x1.0007ffe000fff6006ffac041fca62cadp9, + 0x1.0p3, + 0x1.0p9 + }, + { // Entry 144 + 0x1.0001fffe0003fff6001bffac0107fca6p10, + 0x1.0p3, + 0x1.0p10 + }, + { // Entry 145 + 0x1.p100, + 0x1.0p0, + 0x1.0p100 + }, + { // Entry 146 + 0x1.p101, + 0x1.0p0, + 0x1.0p101 + }, + { // Entry 147 + 0x1.p100, + 0x1.0p3, + 0x1.0p100 + }, + { // Entry 148 + 0x1.p101, + 0x1.0p3, + 0x1.0p101 + }, + { // Entry 149 + 0x1.00001ffffe00003ffff60001bfffacp9, + 0x1.0p9, + 0x1.0p0 + }, + { // Entry 150 + 0x1.0007ffe000fff6006ffac041fca62cadp9, + 0x1.0p9, + 0x1.0p3 + }, + { // Entry 151 + 0x1.000007ffffe00000fffff600006ffffap10, + 0x1.0p10, + 0x1.0p0 + }, + { // Entry 152 + 0x1.0001fffe0003fff6001bffac0107fca6p10, + 0x1.0p10, + 0x1.0p3 + }, + { // Entry 153 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep9, + 0x1.0p9, + 0x1.0p9 + }, + { // Entry 154 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p10, + 0x1.0p9, + 0x1.0p10 + }, + { // Entry 155 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p10, + 0x1.0p10, + 0x1.0p9 + }, + { // Entry 156 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep10, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 157 + 0x1.p100, + 0x1.0p9, + 0x1.0p100 + }, + { // Entry 158 + 0x1.p101, + 0x1.0p9, + 0x1.0p101 + }, + { // Entry 159 + 0x1.p100, + 0x1.0p10, + 0x1.0p100 + }, + { // Entry 160 + 0x1.p101, + 0x1.0p10, + 0x1.0p101 + }, + { // Entry 161 + 0x1.p100, + 0x1.0p100, + 0x1.0p0 + }, + { // Entry 162 + 0x1.p100, + 0x1.0p100, + 0x1.0p3 + }, + { // Entry 163 + 0x1.p101, + 0x1.0p101, + 0x1.0p0 + }, + { // Entry 164 + 0x1.p101, + 0x1.0p101, + 0x1.0p3 + }, + { // Entry 165 + 0x1.p100, + 0x1.0p100, + 0x1.0p9 + }, + { // Entry 166 + 0x1.p100, + 0x1.0p100, + 0x1.0p10 + }, + { // Entry 167 + 0x1.p101, + 0x1.0p101, + 0x1.0p9 + }, + { // Entry 168 + 0x1.p101, + 0x1.0p101, + 0x1.0p10 + }, + { // Entry 169 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep100, + 0x1.0p100, + 0x1.0p100 + }, + { // Entry 170 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p101, + 0x1.0p100, + 0x1.0p101 + }, + { // Entry 171 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p101, + 0x1.0p101, + 0x1.0p100 + }, + { // Entry 172 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep101, + 0x1.0p101, + 0x1.0p101 + }, + { // Entry 173 + 0x1.ad5336963eefa83d75cf889be3a34d14p2, + 0x1.7ffffffffffffp2, + 0x1.7ffffffffffffp1 + }, + { // Entry 174 + 0x1.ad5336963eefabd15a8840999ed93d89p2, + 0x1.7ffffffffffffp2, + 0x1.8p1 + }, + { // Entry 175 + 0x1.ad5336963eefaf653f40f8975a2db59ep2, + 0x1.7ffffffffffffp2, + 0x1.8000000000001p1 + }, + { // Entry 176 + 0x1.ad5336963eefb68d08b26892d04d4378p2, + 0x1.8p2, + 0x1.7ffffffffffffp1 + }, + { // Entry 177 + 0x1.ad5336963eefba20ed6b20908b64ac4ep2, + 0x1.8p2, + 0x1.8p1 + }, + { // Entry 178 + 0x1.ad5336963eefbdb4d223d88e469a9cc3p2, + 0x1.8p2, + 0x1.8000000000001p1 + }, + { // Entry 179 + 0x1.ad5336963eefc4dc9b954889bd15c17dp2, + 0x1.8000000000001p2, + 0x1.7ffffffffffffp1 + }, + { // Entry 180 + 0x1.ad5336963eefc870804e0087780ea2b2p2, + 0x1.8000000000001p2, + 0x1.8p1 + }, + { // Entry 181 + 0x1.ad5336963eefcc046506b88533260b87p2, + 0x1.8000000000001p2, + 0x1.8000000000001p1 + }, + { // Entry 182 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 183 + 0x1.6a09e667f3bc9bc7762e14ef517466dep-1022, + 0x1.ffffffffffffcp-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 184 + 0x1.6a09e667f3bca717c561548d37e9edb3p-1022, + 0x1.ffffffffffffcp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 185 + 0x1.6a09e667f3bcb2681494942b1eb9f701p-1022, + 0x1.ffffffffffffcp-1023, + 0x1.0p-1022 + }, + { // Entry 186 + 0x1.6a09e667f3bca717c561548d37e9edb3p-1022, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 187 + 0x1.6a09e667f3bcb2681494942b1e04f20ep-1022, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 188 + 0x1.6a09e667f3bcbdb863c7d3c9047a78e3p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 189 + 0x1.6a09e667f3bcb2681494942b1eb9f701p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 190 + 0x1.6a09e667f3bcbdb863c7d3c9047a78e3p-1022, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 191 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 192 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 193 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p512, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511 + }, + { // Entry 194 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p512, + 0x1.fffffffffffffp511, + 0x1.fffffffffffffp511 + }, + { // Entry 195 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p501, + 0x1.fffffffffffffp500, + 0x1.fffffffffffffp500 + }, + { // Entry 196 + 0x1.6a09e667f3bcc3608b617397f77caac1p501, + 0x1.fffffffffffffp500, + 0x1.0p501 + }, + { // Entry 197 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p501, + 0x1.fffffffffffffp500, + 0x1.0000000000001p501 + }, + { // Entry 198 + 0x1.6a09e667f3bcc3608b617397f77caac1p501, + 0x1.0p501, + 0x1.fffffffffffffp500 + }, + { // Entry 199 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep501, + 0x1.0p501, + 0x1.0p501 + }, + { // Entry 200 + 0x1.6a09e667f3bcd459022e5304d10b0412p501, + 0x1.0p501, + 0x1.0000000000001p501 + }, + { // Entry 201 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p501, + 0x1.0000000000001p501, + 0x1.fffffffffffffp500 + }, + { // Entry 202 + 0x1.6a09e667f3bcd459022e5304d10b0412p501, + 0x1.0000000000001p501, + 0x1.0p501 + }, + { // Entry 203 + 0x1.6a09e667f3bcdfa9516192a2b726086dp501, + 0x1.0000000000001p501, + 0x1.0000000000001p501 + }, + { // Entry 204 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-501, + 0x1.fffffffffffffp-502, + 0x1.fffffffffffffp-502 + }, + { // Entry 205 + 0x1.6a09e667f3bcc3608b617397f77caac1p-501, + 0x1.fffffffffffffp-502, + 0x1.0p-501 + }, + { // Entry 206 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-501, + 0x1.fffffffffffffp-502, + 0x1.0000000000001p-501 + }, + { // Entry 207 + 0x1.6a09e667f3bcc3608b617397f77caac1p-501, + 0x1.0p-501, + 0x1.fffffffffffffp-502 + }, + { // Entry 208 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-501, + 0x1.0p-501, + 0x1.0p-501 + }, + { // Entry 209 + 0x1.6a09e667f3bcd459022e5304d10b0412p-501, + 0x1.0p-501, + 0x1.0000000000001p-501 + }, + { // Entry 210 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-501, + 0x1.0000000000001p-501, + 0x1.fffffffffffffp-502 + }, + { // Entry 211 + 0x1.6a09e667f3bcd459022e5304d10b0412p-501, + 0x1.0000000000001p-501, + 0x1.0p-501 + }, + { // Entry 212 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-501, + 0x1.0000000000001p-501, + 0x1.0000000000001p-501 + }, + { // Entry 213 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.fffffffffffffp-502 + }, + { // Entry 214 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.0p-501 + }, + { // Entry 215 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.0000000000001p-501 + }, + { // Entry 216 + 0x1.p501, + 0x1.0p501, + 0x1.fffffffffffffp-502 + }, + { // Entry 217 + 0x1.p501, + 0x1.0p501, + 0x1.0p-501 + }, + { // Entry 218 + 0x1.p501, + 0x1.0p501, + 0x1.0000000000001p-501 + }, + { // Entry 219 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.fffffffffffffp-502 + }, + { // Entry 220 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.0p-501 + }, + { // Entry 221 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.0000000000001p-501 + }, + { // Entry 222 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + -0x1.0p-1074 + }, + { // Entry 223 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + -0.0 + }, + { // Entry 224 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.0p-1074 + }, + { // Entry 225 + 0x1.p501, + 0x1.0p501, + -0x1.0p-1074 + }, + { // Entry 226 + 0x1.p501, + 0x1.0p501, + -0.0 + }, + { // Entry 227 + 0x1.p501, + 0x1.0p501, + 0x1.0p-1074 + }, + { // Entry 228 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + -0x1.0p-1074 + }, + { // Entry 229 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + -0.0 + }, + { // Entry 230 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.0p-1074 + }, + { // Entry 231 + 0x1.fffffffffffff0p-502, + 0x1.fffffffffffffp-502, + -0x1.0p-1074 + }, + { // Entry 232 + 0x1.fffffffffffff0p-502, + 0x1.fffffffffffffp-502, + -0.0 + }, + { // Entry 233 + 0x1.fffffffffffff0p-502, + 0x1.fffffffffffffp-502, + 0x1.0p-1074 + }, + { // Entry 234 + 0x1.p-501, + 0x1.0p-501, + -0x1.0p-1074 + }, + { // Entry 235 + 0x1.p-501, + 0x1.0p-501, + -0.0 + }, + { // Entry 236 + 0x1.p-501, + 0x1.0p-501, + 0x1.0p-1074 + }, + { // Entry 237 + 0x1.00000000000010p-501, + 0x1.0000000000001p-501, + -0x1.0p-1074 + }, + { // Entry 238 + 0x1.00000000000010p-501, + 0x1.0000000000001p-501, + -0.0 + }, + { // Entry 239 + 0x1.00000000000010p-501, + 0x1.0000000000001p-501, + 0x1.0p-1074 + }, + { // Entry 240 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.fffffffffffffp-1 + }, + { // Entry 241 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.0p0 + }, + { // Entry 242 + 0x1.fffffffffffff0p500, + 0x1.fffffffffffffp500, + 0x1.0000000000001p0 + }, + { // Entry 243 + 0x1.p501, + 0x1.0p501, + 0x1.fffffffffffffp-1 + }, + { // Entry 244 + 0x1.p501, + 0x1.0p501, + 0x1.0p0 + }, + { // Entry 245 + 0x1.p501, + 0x1.0p501, + 0x1.0000000000001p0 + }, + { // Entry 246 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.fffffffffffffp-1 + }, + { // Entry 247 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.0p0 + }, + { // Entry 248 + 0x1.00000000000010p501, + 0x1.0000000000001p501, + 0x1.0000000000001p0 + }, + { // Entry 249 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-502, + 0x1.fffffffffffffp-1 + }, + { // Entry 250 + 0x1.p0, + 0x1.fffffffffffffp-502, + 0x1.0p0 + }, + { // Entry 251 + 0x1.00000000000010p0, + 0x1.fffffffffffffp-502, + 0x1.0000000000001p0 + }, + { // Entry 252 + 0x1.fffffffffffff0p-1, + 0x1.0p-501, + 0x1.fffffffffffffp-1 + }, + { // Entry 253 + 0x1.p0, + 0x1.0p-501, + 0x1.0p0 + }, + { // Entry 254 + 0x1.00000000000010p0, + 0x1.0p-501, + 0x1.0000000000001p0 + }, + { // Entry 255 + 0x1.fffffffffffff0p-1, + 0x1.0000000000001p-501, + 0x1.fffffffffffffp-1 + }, + { // Entry 256 + 0x1.p0, + 0x1.0000000000001p-501, + 0x1.0p0 + }, + { // Entry 257 + 0x1.00000000000010p0, + 0x1.0000000000001p-501, + 0x1.0000000000001p0 + }, + { // Entry 258 + 0x1.fffffffffffff000000000000fffffffp49, + 0x1.fffffffffffffp49, + 0x1.fffffffffffffp-1 + }, + { // Entry 259 + 0x1.fffffffffffff0000000000010p49, + 0x1.fffffffffffffp49, + 0x1.0p0 + }, + { // Entry 260 + 0x1.fffffffffffff0000000000010p49, + 0x1.fffffffffffffp49, + 0x1.0000000000001p0 + }, + { // Entry 261 + 0x1.00000000000000000000000007ffffffp50, + 0x1.0p50, + 0x1.fffffffffffffp-1 + }, + { // Entry 262 + 0x1.00000000000000000000000007ffffffp50, + 0x1.0p50, + 0x1.0p0 + }, + { // Entry 263 + 0x1.00000000000000000000000008p50, + 0x1.0p50, + 0x1.0000000000001p0 + }, + { // Entry 264 + 0x1.00000000000010000000000007ffffffp50, + 0x1.0000000000001p50, + 0x1.fffffffffffffp-1 + }, + { // Entry 265 + 0x1.00000000000010000000000007ffffffp50, + 0x1.0000000000001p50, + 0x1.0p0 + }, + { // Entry 266 + 0x1.00000000000010000000000008p50, + 0x1.0000000000001p50, + 0x1.0000000000001p0 + }, + { // Entry 267 + 0x1.fffffffffffff0000000000003ffffffp50, + 0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 268 + 0x1.fffffffffffff0000000000004p50, + 0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 269 + 0x1.fffffffffffff0000000000004p50, + 0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 270 + 0x1.00000000000000000000000001ffffffp51, + 0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 271 + 0x1.00000000000000000000000001ffffffp51, + 0x1.0p51, + 0x1.0p0 + }, + { // Entry 272 + 0x1.00000000000000000000000002p51, + 0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 273 + 0x1.00000000000010000000000001ffffffp51, + 0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 274 + 0x1.00000000000010000000000001ffffffp51, + 0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 275 + 0x1.00000000000010000000000002p51, + 0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 276 + 0x1.fffffffffffff0000000000000ffffffp51, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 277 + 0x1.fffffffffffff0000000000001p51, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 278 + 0x1.fffffffffffff0000000000001p51, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 279 + 0x1.000000000000000000000000007fffffp52, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 280 + 0x1.000000000000000000000000007fffffp52, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 281 + 0x1.0000000000000000000000000080p52, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 282 + 0x1.000000000000100000000000007fffffp52, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 283 + 0x1.000000000000100000000000007fffffp52, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 284 + 0x1.0000000000001000000000000080p52, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 285 + 0x1.fffffffffffff00000000000003fffffp52, + 0x1.fffffffffffffp52, + 0x1.fffffffffffffp-1 + }, + { // Entry 286 + 0x1.fffffffffffff000000000000040p52, + 0x1.fffffffffffffp52, + 0x1.0p0 + }, + { // Entry 287 + 0x1.fffffffffffff000000000000040p52, + 0x1.fffffffffffffp52, + 0x1.0000000000001p0 + }, + { // Entry 288 + 0x1.000000000000000000000000001fffffp53, + 0x1.0p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 289 + 0x1.000000000000000000000000001fffffp53, + 0x1.0p53, + 0x1.0p0 + }, + { // Entry 290 + 0x1.0000000000000000000000000020p53, + 0x1.0p53, + 0x1.0000000000001p0 + }, + { // Entry 291 + 0x1.000000000000100000000000001fffffp53, + 0x1.0000000000001p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 292 + 0x1.000000000000100000000000001fffffp53, + 0x1.0000000000001p53, + 0x1.0p0 + }, + { // Entry 293 + 0x1.0000000000001000000000000020p53, + 0x1.0000000000001p53, + 0x1.0000000000001p0 + }, + { // Entry 294 + 0x1.fffffffffffff00000000000000fffffp53, + 0x1.fffffffffffffp53, + 0x1.fffffffffffffp-1 + }, + { // Entry 295 + 0x1.fffffffffffff000000000000010p53, + 0x1.fffffffffffffp53, + 0x1.0p0 + }, + { // Entry 296 + 0x1.fffffffffffff000000000000010p53, + 0x1.fffffffffffffp53, + 0x1.0000000000001p0 + }, + { // Entry 297 + 0x1.0000000000000000000000000007ffffp54, + 0x1.0p54, + 0x1.fffffffffffffp-1 + }, + { // Entry 298 + 0x1.0000000000000000000000000007ffffp54, + 0x1.0p54, + 0x1.0p0 + }, + { // Entry 299 + 0x1.0000000000000000000000000008p54, + 0x1.0p54, + 0x1.0000000000001p0 + }, + { // Entry 300 + 0x1.0000000000001000000000000007ffffp54, + 0x1.0000000000001p54, + 0x1.fffffffffffffp-1 + }, + { // Entry 301 + 0x1.0000000000001000000000000007ffffp54, + 0x1.0000000000001p54, + 0x1.0p0 + }, + { // Entry 302 + 0x1.0000000000001000000000000008p54, + 0x1.0000000000001p54, + 0x1.0000000000001p0 + }, + { // Entry 303 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-500, + 0x1.fffffffffffffp-501, + 0x1.fffffffffffffp-501 + }, + { // Entry 304 + 0x1.6a09e667f3bcc3608b617397f77caac1p-500, + 0x1.fffffffffffffp-501, + 0x1.0p-500 + }, + { // Entry 305 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-500, + 0x1.fffffffffffffp-501, + 0x1.0000000000001p-500 + }, + { // Entry 306 + 0x1.6a09e667f3bcc3608b617397f77caac1p-500, + 0x1.0p-500, + 0x1.fffffffffffffp-501 + }, + { // Entry 307 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-500, + 0x1.0p-500, + 0x1.0p-500 + }, + { // Entry 308 + 0x1.6a09e667f3bcd459022e5304d10b0412p-500, + 0x1.0p-500, + 0x1.0000000000001p-500 + }, + { // Entry 309 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-500, + 0x1.0000000000001p-500, + 0x1.fffffffffffffp-501 + }, + { // Entry 310 + 0x1.6a09e667f3bcd459022e5304d10b0412p-500, + 0x1.0000000000001p-500, + 0x1.0p-500 + }, + { // Entry 311 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-500, + 0x1.0000000000001p-500, + 0x1.0000000000001p-500 + }, + { // Entry 312 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-60, + 0x1.fffffffffffffp-61, + 0x1.fffffffffffffp-61 + }, + { // Entry 313 + 0x1.6a09e667f3bcc3608b617397f77caac1p-60, + 0x1.fffffffffffffp-61, + 0x1.0p-60 + }, + { // Entry 314 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-60, + 0x1.fffffffffffffp-61, + 0x1.0000000000001p-60 + }, + { // Entry 315 + 0x1.6a09e667f3bcc3608b617397f77caac1p-60, + 0x1.0p-60, + 0x1.fffffffffffffp-61 + }, + { // Entry 316 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-60, + 0x1.0p-60, + 0x1.0p-60 + }, + { // Entry 317 + 0x1.6a09e667f3bcd459022e5304d10b0412p-60, + 0x1.0p-60, + 0x1.0000000000001p-60 + }, + { // Entry 318 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-60, + 0x1.0000000000001p-60, + 0x1.fffffffffffffp-61 + }, + { // Entry 319 + 0x1.6a09e667f3bcd459022e5304d10b0412p-60, + 0x1.0000000000001p-60, + 0x1.0p-60 + }, + { // Entry 320 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-60, + 0x1.0000000000001p-60, + 0x1.0000000000001p-60 + }, + { // Entry 321 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-10, + 0x1.fffffffffffffp-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 322 + 0x1.6a09e667f3bcc3608b617397f77caac1p-10, + 0x1.fffffffffffffp-11, + 0x1.0p-10 + }, + { // Entry 323 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-10, + 0x1.fffffffffffffp-11, + 0x1.0000000000001p-10 + }, + { // Entry 324 + 0x1.6a09e667f3bcc3608b617397f77caac1p-10, + 0x1.0p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 325 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-10, + 0x1.0p-10, + 0x1.0p-10 + }, + { // Entry 326 + 0x1.6a09e667f3bcd459022e5304d10b0412p-10, + 0x1.0p-10, + 0x1.0000000000001p-10 + }, + { // Entry 327 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-10, + 0x1.0000000000001p-10, + 0x1.fffffffffffffp-11 + }, + { // Entry 328 + 0x1.6a09e667f3bcd459022e5304d10b0412p-10, + 0x1.0000000000001p-10, + 0x1.0p-10 + }, + { // Entry 329 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-10, + 0x1.0000000000001p-10, + 0x1.0000000000001p-10 + }, + { // Entry 330 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-1, + 0x1.fffffffffffffp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 331 + 0x1.6a09e667f3bcc3608b617397f77caac1p-1, + 0x1.fffffffffffffp-2, + 0x1.0p-1 + }, + { // Entry 332 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-1, + 0x1.fffffffffffffp-2, + 0x1.0000000000001p-1 + }, + { // Entry 333 + 0x1.6a09e667f3bcc3608b617397f77caac1p-1, + 0x1.0p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 334 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + 0x1.0p-1, + 0x1.0p-1 + }, + { // Entry 335 + 0x1.6a09e667f3bcd459022e5304d10b0412p-1, + 0x1.0p-1, + 0x1.0000000000001p-1 + }, + { // Entry 336 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-1, + 0x1.0000000000001p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 337 + 0x1.6a09e667f3bcd459022e5304d10b0412p-1, + 0x1.0000000000001p-1, + 0x1.0p-1 + }, + { // Entry 338 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-1, + 0x1.0000000000001p-1, + 0x1.0000000000001p-1 + }, + { // Entry 339 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p1, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 340 + 0x1.6a09e667f3bcc3608b617397f77caac1p1, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 341 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p1, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 342 + 0x1.6a09e667f3bcc3608b617397f77caac1p1, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 343 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep1, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 344 + 0x1.6a09e667f3bcd459022e5304d10b0412p1, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 345 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p1, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 346 + 0x1.6a09e667f3bcd459022e5304d10b0412p1, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 347 + 0x1.6a09e667f3bcdfa9516192a2b726086dp1, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 348 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p10, + 0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 349 + 0x1.6a09e667f3bcc3608b617397f77caac1p10, + 0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 350 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p10, + 0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 351 + 0x1.6a09e667f3bcc3608b617397f77caac1p10, + 0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 352 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep10, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 353 + 0x1.6a09e667f3bcd459022e5304d10b0412p10, + 0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 354 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p10, + 0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 355 + 0x1.6a09e667f3bcd459022e5304d10b0412p10, + 0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 356 + 0x1.6a09e667f3bcdfa9516192a2b726086dp10, + 0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 357 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p60, + 0x1.fffffffffffffp59, + 0x1.fffffffffffffp59 + }, + { // Entry 358 + 0x1.6a09e667f3bcc3608b617397f77caac1p60, + 0x1.fffffffffffffp59, + 0x1.0p60 + }, + { // Entry 359 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p60, + 0x1.fffffffffffffp59, + 0x1.0000000000001p60 + }, + { // Entry 360 + 0x1.6a09e667f3bcc3608b617397f77caac1p60, + 0x1.0p60, + 0x1.fffffffffffffp59 + }, + { // Entry 361 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep60, + 0x1.0p60, + 0x1.0p60 + }, + { // Entry 362 + 0x1.6a09e667f3bcd459022e5304d10b0412p60, + 0x1.0p60, + 0x1.0000000000001p60 + }, + { // Entry 363 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p60, + 0x1.0000000000001p60, + 0x1.fffffffffffffp59 + }, + { // Entry 364 + 0x1.6a09e667f3bcd459022e5304d10b0412p60, + 0x1.0000000000001p60, + 0x1.0p60 + }, + { // Entry 365 + 0x1.6a09e667f3bcdfa9516192a2b726086dp60, + 0x1.0000000000001p60, + 0x1.0000000000001p60 + }, + { // Entry 366 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p500, + 0x1.fffffffffffffp499, + 0x1.fffffffffffffp499 + }, + { // Entry 367 + 0x1.6a09e667f3bcc3608b617397f77caac1p500, + 0x1.fffffffffffffp499, + 0x1.0p500 + }, + { // Entry 368 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p500, + 0x1.fffffffffffffp499, + 0x1.0000000000001p500 + }, + { // Entry 369 + 0x1.6a09e667f3bcc3608b617397f77caac1p500, + 0x1.0p500, + 0x1.fffffffffffffp499 + }, + { // Entry 370 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep500, + 0x1.0p500, + 0x1.0p500 + }, + { // Entry 371 + 0x1.6a09e667f3bcd459022e5304d10b0412p500, + 0x1.0p500, + 0x1.0000000000001p500 + }, + { // Entry 372 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p500, + 0x1.0000000000001p500, + 0x1.fffffffffffffp499 + }, + { // Entry 373 + 0x1.6a09e667f3bcd459022e5304d10b0412p500, + 0x1.0000000000001p500, + 0x1.0p500 + }, + { // Entry 374 + 0x1.6a09e667f3bcdfa9516192a2b726086dp500, + 0x1.0000000000001p500, + 0x1.0000000000001p500 + }, + { // Entry 375 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.fffffffffffffp-1 + }, + { // Entry 376 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.0p0 + }, + { // Entry 377 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1022, + 0x1.0000000000001p0 + }, + { // Entry 378 + 0x1.p1023, + 0x1.0p1023, + 0x1.fffffffffffffp-1 + }, + { // Entry 379 + 0x1.p1023, + 0x1.0p1023, + 0x1.0p0 + }, + { // Entry 380 + 0x1.p1023, + 0x1.0p1023, + 0x1.0000000000001p0 + }, + { // Entry 381 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.fffffffffffffp-1 + }, + { // Entry 382 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.0p0 + }, + { // Entry 383 + 0x1.00000000000010p1023, + 0x1.0000000000001p1023, + 0x1.0000000000001p0 + }, + { // Entry 384 + 0x1.778d27690518c71d8d4d782889fc1c38p-27, + 0x1.00a436e9442ebp-27, + 0x1.122dc42e12482p-27 + }, + { // Entry 385 + 0x1.778d27690518d2cbeb1e43a94a18dcbbp-27, + 0x1.00a436e9442ebp-27, + 0x1.122dc42e12483p-27 + }, + { // Entry 386 + 0x1.778d27690518de7a48ef0f2a0a871bb3p-27, + 0x1.00a436e9442ebp-27, + 0x1.122dc42e12484p-27 + }, + { // Entry 387 + 0x1.778d27690518d20ca53cbc1df3f2eff8p-27, + 0x1.00a436e9442ecp-27, + 0x1.122dc42e12482p-27 + }, + { // Entry 388 + 0x1.778d27690518ddbb030d879eb3b8a069p-27, + 0x1.00a436e9442ecp-27, + 0x1.122dc42e12483p-27 + }, + { // Entry 389 + 0x1.778d27690518e96960de531f73cfcf4fp-27, + 0x1.00a436e9442ecp-27, + 0x1.122dc42e12484p-27 + }, + { // Entry 390 + 0x1.778d27690518dcfbbd2c00135e46c6d1p-27, + 0x1.00a436e9442edp-27, + 0x1.122dc42e12482p-27 + }, + { // Entry 391 + 0x1.778d27690518e8aa1afccb941db56731p-27, + 0x1.00a436e9442edp-27, + 0x1.122dc42e12483p-27 + }, + { // Entry 392 + 0x1.778d27690518f45878cd9714dd758605p-27, + 0x1.00a436e9442edp-27, + 0x1.122dc42e12484p-27 + }, + { // Entry 393 + 0x1.74334f2872bf31f2bd78c8d32ad384a6p0, + 0x1.0b2502b3f7655p0, + -0x1.032a74c8e2bbep0 + }, + { // Entry 394 + 0x1.74334f2872bf26ceaa6e8d36067093ffp0, + 0x1.0b2502b3f7655p0, + -0x1.032a74c8e2bbdp0 + }, + { // Entry 395 + 0x1.74334f2872bf1baa97645198e2685868p0, + 0x1.0b2502b3f7655p0, + -0x1.032a74c8e2bbcp0 + }, + { // Entry 396 + 0x1.74334f2872bf3d6e9e764b9816ffdf5ep0, + 0x1.0b2502b3f7656p0, + -0x1.032a74c8e2bbep0 + }, + { // Entry 397 + 0x1.74334f2872bf324a8b6c0ffaf2f4ee3dp0, + 0x1.0b2502b3f7656p0, + -0x1.032a74c8e2bbdp0 + }, + { // Entry 398 + 0x1.74334f2872bf27267861d45dcf44b22bp0, + 0x1.0b2502b3f7656p0, + -0x1.032a74c8e2bbcp0 + }, + { // Entry 399 + 0x1.74334f2872bf48ea7f73ce5d038198c9p0, + 0x1.0b2502b3f7657p0, + -0x1.032a74c8e2bbep0 + }, + { // Entry 400 + 0x1.74334f2872bf3dc66c6992bfdfcea72ep0, + 0x1.0b2502b3f7657p0, + -0x1.032a74c8e2bbdp0 + }, + { // Entry 401 + 0x1.74334f2872bf32a2595f5722bc766aa2p0, + 0x1.0b2502b3f7657p0, + -0x1.032a74c8e2bbcp0 + }, + { // Entry 402 + 0x1.b6d63492cf6c5f0d4a9e41a4ed8f8b94p7, + 0x1.3845636425763p7, + 0x1.3453456452664p7 + }, + { // Entry 403 + 0x1.b6d63492cf6c6a4b20bba441a2ca5ba3p7, + 0x1.3845636425763p7, + 0x1.3453456452665p7 + }, + { // Entry 404 + 0x1.b6d63492cf6c7588f6d906de5850ca51p7, + 0x1.3845636425763p7, + 0x1.3453456452666p7 + }, + { // Entry 405 + 0x1.b6d63492cf6c6a6ff4ee83c89e71f86dp7, + 0x1.3845636425764p7, + 0x1.3453456452664p7 + }, + { // Entry 406 + 0x1.b6d63492cf6c75adcb0be66553621e7ap7, + 0x1.3845636425764p7, + 0x1.3453456452665p7 + }, + { // Entry 407 + 0x1.b6d63492cf6c80eba1294902089de325p7, + 0x1.3845636425764p7, + 0x1.3453456452666p7 + }, + { // Entry 408 + 0x1.b6d63492cf6c75d29f3ec5ec4f9e1dc5p7, + 0x1.3845636425765p7, + 0x1.3453456452664p7 + }, + { // Entry 409 + 0x1.b6d63492cf6c8110755c2889044399cfp7, + 0x1.3845636425765p7, + 0x1.3453456452665p7 + }, + { // Entry 410 + 0x1.b6d63492cf6c8c4e4b798b25b934b477p7, + 0x1.3845636425765p7, + 0x1.3453456452666p7 + }, + { // Entry 411 + 0x1.b6d63492cf6c8c4e4b798b25b934b477p-6, + -0x1.3845636425765p-6, + -0x1.3453456452666p-6 + }, + { // Entry 412 + 0x1.b6d63492cf6c8110755c2889044399cfp-6, + -0x1.3845636425765p-6, + -0x1.3453456452665p-6 + }, + { // Entry 413 + 0x1.b6d63492cf6c75d29f3ec5ec4f9e1dc5p-6, + -0x1.3845636425765p-6, + -0x1.3453456452664p-6 + }, + { // Entry 414 + 0x1.b6d63492cf6c80eba1294902089de325p-6, + -0x1.3845636425764p-6, + -0x1.3453456452666p-6 + }, + { // Entry 415 + 0x1.b6d63492cf6c75adcb0be66553621e7ap-6, + -0x1.3845636425764p-6, + -0x1.3453456452665p-6 + }, + { // Entry 416 + 0x1.b6d63492cf6c6a6ff4ee83c89e71f86dp-6, + -0x1.3845636425764p-6, + -0x1.3453456452664p-6 + }, + { // Entry 417 + 0x1.b6d63492cf6c7588f6d906de5850ca51p-6, + -0x1.3845636425763p-6, + -0x1.3453456452666p-6 + }, + { // Entry 418 + 0x1.b6d63492cf6c6a4b20bba441a2ca5ba3p-6, + -0x1.3845636425763p-6, + -0x1.3453456452665p-6 + }, + { // Entry 419 + 0x1.b6d63492cf6c5f0d4a9e41a4ed8f8b94p-6, + -0x1.3845636425763p-6, + -0x1.3453456452664p-6 + }, + { // Entry 420 + 0x1.9a134186a4136915d6a2f7171812deefp-16, + -0x1.3845636425765p-16, + -0x1.09cc3d7f1c881p-16 + }, + { // Entry 421 + 0x1.9a134186a4135eb6f0c519097d75243dp-16, + -0x1.3845636425765p-16, + -0x1.09cc3d7f1c880p-16 + }, + { // Entry 422 + 0x1.9a134186a41354580ae73afbe33415cfp-16, + -0x1.3845636425765p-16, + -0x1.09cc3d7f1c87fp-16 + }, + { // Entry 423 + 0x1.9a134186a4135ce6bf291d40fc6e4392p-16, + -0x1.3845636425764p-16, + -0x1.09cc3d7f1c881p-16 + }, + { // Entry 424 + 0x1.9a134186a4135287d94b3f336181a757p-16, + -0x1.3845636425764p-16, + -0x1.09cc3d7f1c880p-16 + }, + { // Entry 425 + 0x1.9a134186a4134828f36d6125c6f1b75fp-16, + -0x1.3845636425764p-16, + -0x1.09cc3d7f1c87fp-16 + }, + { // Entry 426 + 0x1.9a134186a41350b7a7af436ae10ccc7ap-16, + -0x1.3845636425763p-16, + -0x1.09cc3d7f1c881p-16 + }, + { // Entry 427 + 0x1.9a134186a4134658c1d1655d45d14eb5p-16, + -0x1.3845636425763p-16, + -0x1.09cc3d7f1c880p-16 + }, + { // Entry 428 + 0x1.9a134186a4133bf9dbf3874faaf27d32p-16, + -0x1.3845636425763p-16, + -0x1.09cc3d7f1c87fp-16 + }, + { // Entry 429 + 0x1.6a09e667f3bcdfa9516192a2b726086dp-6, + -0x1.0000000000001p-6, + -0x1.0000000000001p-6 + }, + { // Entry 430 + 0x1.6a09e667f3bcd459022e5304d10b0412p-6, + -0x1.0000000000001p-6, + -0x1.0p-6 + }, + { // Entry 431 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-6, + -0x1.0000000000001p-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 432 + 0x1.6a09e667f3bcd459022e5304d10b0412p-6, + -0x1.0p-6, + -0x1.0000000000001p-6 + }, + { // Entry 433 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-6, + -0x1.0p-6, + -0x1.0p-6 + }, + { // Entry 434 + 0x1.6a09e667f3bcc3608b617397f77caac1p-6, + -0x1.0p-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 435 + 0x1.6a09e667f3bcceb0da94b335de1f72d2p-6, + -0x1.fffffffffffffp-7, + -0x1.0000000000001p-6 + }, + { // Entry 436 + 0x1.6a09e667f3bcc3608b617397f77caac1p-6, + -0x1.fffffffffffffp-7, + -0x1.0p-6 + }, + { // Entry 437 + 0x1.6a09e667f3bcbdb863c7d3c9044d37a6p-6, + -0x1.fffffffffffffp-7, + -0x1.fffffffffffffp-7 + }, + { // Entry 438 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 439 + 0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 440 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 441 + 0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 442 + 0.0, + -0.0, + -0.0 + }, + { // Entry 443 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 444 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 445 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 446 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 447 + 0x1.1e3779b97f4a732437cef466090d1897p-400, + 0x1.fffffffffffffp-401, + 0x1.fffffffffffffp-402 + }, + { // Entry 448 + 0x1.1e3779b97f4a74ee2a2b5064e6a62857p-400, + 0x1.fffffffffffffp-401, + 0x1.0p-401 + }, + { // Entry 449 + 0x1.1e3779b97f4a78820ee40862a1faa06cp-400, + 0x1.fffffffffffffp-401, + 0x1.0000000000001p-401 + }, + { // Entry 450 + 0x1.1e3779b97f4a7a4c014064617f602b4fp-400, + 0x1.0p-400, + 0x1.fffffffffffffp-402 + }, + { // Entry 451 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p-400, + 0x1.0p-400, + 0x1.0p-401 + }, + { // Entry 452 + 0x1.1e3779b97f4a7fa9d855785e182b5a91p-400, + 0x1.0p-400, + 0x1.0000000000001p-401 + }, + { // Entry 453 + 0x1.1e3779b97f4a889b942344586c28a953p-400, + 0x1.0000000000001p-400, + 0x1.fffffffffffffp-402 + }, + { // Entry 454 + 0x1.1e3779b97f4a8a65867fa057499f6080p-400, + 0x1.0000000000001p-400, + 0x1.0p-401 + }, + { // Entry 455 + 0x1.1e3779b97f4a8df96b38585504af276dp-400, + 0x1.0000000000001p-400, + 0x1.0000000000001p-401 + }, + { // Entry 456 + 0x1.1e3779b97f4a732437cef466090d1897p-511, + 0x1.fffffffffffffp-513, + 0x1.fffffffffffffp-512 + }, + { // Entry 457 + 0x1.1e3779b97f4a7a4c014064617f602b4fp-511, + 0x1.fffffffffffffp-513, + 0x1.0p-511 + }, + { // Entry 458 + 0x1.1e3779b97f4a889b942344586c28a953p-511, + 0x1.fffffffffffffp-513, + 0x1.0000000000001p-511 + }, + { // Entry 459 + 0x1.1e3779b97f4a74ee2a2b5064e6a62857p-511, + 0x1.0p-512, + 0x1.fffffffffffffp-512 + }, + { // Entry 460 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p-511, + 0x1.0p-512, + 0x1.0p-511 + }, + { // Entry 461 + 0x1.1e3779b97f4a8a65867fa057499f6080p-511, + 0x1.0p-512, + 0x1.0000000000001p-511 + }, + { // Entry 462 + 0x1.1e3779b97f4a78820ee40862a1faa06cp-511, + 0x1.0000000000001p-512, + 0x1.fffffffffffffp-512 + }, + { // Entry 463 + 0x1.1e3779b97f4a7fa9d855785e182b5a91p-511, + 0x1.0000000000001p-512, + 0x1.0p-511 + }, + { // Entry 464 + 0x1.1e3779b97f4a8df96b38585504af276dp-511, + 0x1.0000000000001p-512, + 0x1.0000000000001p-511 + }, + { // Entry 465 + 0x1.1e3779b97f4a732437cef466090d1897p1022, + 0x1.fffffffffffffp1021, + 0x1.fffffffffffffp1020 + }, + { // Entry 466 + 0x1.1e3779b97f4a74ee2a2b5064e6a62857p1022, + 0x1.fffffffffffffp1021, + 0x1.0p1021 + }, + { // Entry 467 + 0x1.1e3779b97f4a78820ee40862a1faa06cp1022, + 0x1.fffffffffffffp1021, + 0x1.0000000000001p1021 + }, + { // Entry 468 + 0x1.1e3779b97f4a7a4c014064617f602b4fp1022, + 0x1.0p1022, + 0x1.fffffffffffffp1020 + }, + { // Entry 469 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p1022, + 0x1.0p1022, + 0x1.0p1021 + }, + { // Entry 470 + 0x1.1e3779b97f4a7fa9d855785e182b5a91p1022, + 0x1.0p1022, + 0x1.0000000000001p1021 + }, + { // Entry 471 + 0x1.1e3779b97f4a889b942344586c28a953p1022, + 0x1.0000000000001p1022, + 0x1.fffffffffffffp1020 + }, + { // Entry 472 + 0x1.1e3779b97f4a8a65867fa057499f6080p1022, + 0x1.0000000000001p1022, + 0x1.0p1021 + }, + { // Entry 473 + 0x1.1e3779b97f4a8df96b38585504af276dp1022, + 0x1.0000000000001p1022, + 0x1.0000000000001p1021 + }, + { // Entry 474 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 475 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 476 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 477 + HUGE_VAL, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 478 + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 479 + HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 480 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 481 + HUGE_VAL, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 482 + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 483 + HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 484 + HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 485 + HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 486 + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 487 + HUGE_VAL, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 488 + HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 489 + HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 490 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 491 + HUGE_VAL, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 492 + HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 493 + HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 494 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 495 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 496 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 497 + HUGE_VAL, + 0.0, + HUGE_VAL + }, + { // Entry 498 + HUGE_VAL, + -0.0, + HUGE_VAL + }, + { // Entry 499 + HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 500 + HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 501 + HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 502 + HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 503 + HUGE_VAL, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 504 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 505 + HUGE_VAL, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 506 + HUGE_VAL, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 507 + HUGE_VAL, + 0.0, + -HUGE_VAL + }, + { // Entry 508 + HUGE_VAL, + -0.0, + -HUGE_VAL + }, + { // Entry 509 + HUGE_VAL, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 510 + HUGE_VAL, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 511 + HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 512 + 0x1.fffffffffffff0p1023, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 513 + 0x1.p-1022, + 0.0, + 0x1.0p-1022 + }, + { // Entry 514 + 0x1.p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 515 + 0.0, + 0.0, + 0.0 + }, + { // Entry 516 + 0.0, + 0.0, + -0.0 + }, + { // Entry 517 + 0x1.p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 518 + 0x1.p-1022, + 0.0, + -0x1.0p-1022 + }, + { // Entry 519 + 0x1.fffffffffffff0p1023, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 520 + 0x1.fffffffffffff0p1023, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 521 + 0x1.p-1022, + -0.0, + 0x1.0p-1022 + }, + { // Entry 522 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 523 + 0.0, + -0.0, + 0.0 + }, + { // Entry 524 + 0.0, + -0.0, + -0.0 + }, + { // Entry 525 + 0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 526 + 0x1.p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 527 + 0x1.fffffffffffff0p1023, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 528 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 529 + 0x1.p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 530 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 531 + 0x1.p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 532 + 0x1.p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 533 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 534 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 535 + 0x1.p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 536 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 537 + 0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 538 + 0x1.p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 539 + 0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 540 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 541 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 542 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 543 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 544 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 545 + HUGE_VAL, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 546 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 547 + 0x1.000000000000000000000000007fffffp-1022, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 548 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 549 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1074, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 550 + 0x1.40p2, + 0x1.8p1, + 0x1.0p2 + }, + { // Entry 551 + 0x1.40p2, + 0x1.8p1, + -0x1.0p2 + }, + { // Entry 552 + 0x1.a0p3, + 0x1.4p2, + 0x1.8p3 + }, + { // Entry 553 + 0x1.a0p3, + 0x1.4p2, + -0x1.8p3 + } +}; diff --git a/tests/math_data/hypotf_intel_data.h b/tests/math_data/hypotf_intel_data.h new file mode 100644 index 000000000..fd4334b34 --- /dev/null +++ b/tests/math_data/hypotf_intel_data.h @@ -0,0 +1,2373 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_hypotf_intel_data[] = { + { // Entry 0 + 0x1.804fa3000c7ebdf47434f397ec84c7a0p3, + -0x1.3372aep3, + 0x1.cd2cfap2 + }, + { // Entry 1 + 0x1.75d046fff6326da34cade3039156d2ecp3, + -0x1.3372b0p3, + -0x1.a94388p2 + }, + { // Entry 2 + 0x1.9a134b0022862e28be8459544c0a0179p-16, + -0x1.38456cp-16, + -0x1.09cc42p-16 + }, + { // Entry 3 + 0x1.55555e0000000000000000125fff8890p-101, + -0x1.55555ep-101, + 0x1.c0p-147 + }, + { // Entry 4 + 0x1.f6c65800001e1be1724156e80ea39f54p-41, + -0x1.5cp-62, + -0x1.f6c658p-41 + }, + { // Entry 5 + 0x1.75298b006e4054fd81616e2f820cb18ap4, + -0x1.6b91b0p4, + -0x1.5046aep2 + }, + { // Entry 6 + 0x1.7ffffc0055555a38da2bfed0dc82cd7ap0, + -0x1.7ffffcp0, + 0x1.000006p-16 + }, + { // Entry 7 + 0x1.f13b56fc46bed2325ccd2c7cd5e69632p21, + -0x1.f12bp21, + 0x1.fddffep15 + }, + { // Entry 8 + 0x1.555570p-2, + 0x1.p-149, + 0x1.555570p-2 + }, + { // Entry 9 + 0x1.55553ap100, + 0x1.p0, + 0x1.55553ap100 + }, + { // Entry 10 + 0x1.6a09eaa611765e10631270d5de08ee6ep100, + 0x1.000006p100, + 0x1.p100 + }, + { // Entry 11 + 0x1.6a099efd14740b74de47d3287c3ef106p-19, + 0x1.000024p-19, + 0x1.fffeeep-20 + }, + { // Entry 12 + 0x1.6a15e5005f98a0819477ee86c40c70a6p0, + 0x1.0142b2p0, + -0x1.fd9982p-1 + }, + { // Entry 13 + 0x1.7c02c30005404c762e561df458868db8p6, + 0x1.077f4cp6, + 0x1.11d1ecp6 + }, + { // Entry 14 + 0x1.eb772efc48db2565eb91a892b9109e1ap2, + 0x1.198cc0p0, + -0x1.e66626p2 + }, + { // Entry 15 + 0x1.fdecbd00002c3d202ee051ddfe076387p9, + 0x1.1bd856p1, + 0x1.fdec6ep9 + }, + { // Entry 16 + 0x1.800000001affffffff0d0000001115ffp-23, + 0x1.20p-40, + 0x1.80p-23 + }, + { // Entry 17 + 0x1.2004d7000c9e59b6c319a40f068137f1p6, + 0x1.20p6, + 0x1.a66670p-1 + }, + { // Entry 18 + 0x1.38031300000fffd7a4800dc6d8c127c4p1, + 0x1.3160acp1, + -0x1.p-1 + }, + { // Entry 19 + 0x1.814cee00298d8fda8ba443fa2826cc78p9, + 0x1.41f070p2, + 0x1.814ad4p9 + }, + { // Entry 20 + 0x1.ba86e8ff3abb57bc63ed628576cbf719p100, + 0x1.60p100, + 0x1.0c30c4p100 + }, + { // Entry 21 + 0x1.276275p-10, + 0x1.627626p-11, + 0x1.d89d88p-11 + }, + { // Entry 22 + 0x1.30e418fc6e8f1e1342c13fc83cd67621p3, + 0x1.74acc6p-1, + -0x1.30p3 + }, + { // Entry 23 + 0x1.fe01f0fc1044c738957a70f05fc15f48p3, + 0x1.758fc2p-2, + 0x1.fddfbcp3 + }, + { // Entry 24 + 0x1.000009p0, + 0x1.80p-10, + 0x1.ffffeep-1 + }, + { // Entry 25 + 0x1.4000030000066666570a3d851eb86f69p3, + 0x1.80000ap2, + 0x1.p3 + }, + { // Entry 26 + 0x1.8bb3cb0000954ddd1ba4ba3d1be7bcb3p0, + 0x1.88603ep0, + -0x1.99999ap-3 + }, + { // Entry 27 + 0x1.068c070000048279abdd7e2cb99727aep1, + 0x1.8bab4ap-1, + -0x1.e66674p0 + }, + { // Entry 28 + 0x1.8f827b00115def47c454b3599143d2eap10, + 0x1.8f827ap10, + 0x1.c454b0p-2 + }, + { // Entry 29 + 0x1.a6645cfc2ab00e5f4a76893e77c93e80p0, + 0x1.9287e2p0, + -0x1.p-1 + }, + { // Entry 30 + 0x1.1bcf0effffc79fbfe4638ed7c7f20ad3p1, + 0x1.938d28p-1, + 0x1.094590p1 + }, + { // Entry 31 + 0x1.10d8ce00004de00b92c66641b1a95fc7p0, + 0x1.9e874ap-1, + 0x1.62e42ep-1 + }, + { // Entry 32 + 0x1.fc516efc69a62ca47aa82a4c310ba6c3p-2, + 0x1.af1948p-6, + -0x1.fb9a80p-2 + }, + { // Entry 33 + 0x1.e9e6a4fc2ddde87638b4684564e14ce6p-3, + 0x1.b81272p-5, + -0x1.dd633ep-3 + }, + { // Entry 34 + 0x1.7396f60007c18075d8efd4c838b91544p-1, + 0x1.b89068p-3, + 0x1.62e42ep-1 + }, + { // Entry 35 + 0x1.c2c3acfcf40d75a5ea60e9c114443950p1, + 0x1.c1a088p1, + -0x1.p-2 + }, + { // Entry 36 + 0x1.a43e960006dba02d6beb1d2c1eeaeceap-1, + 0x1.c2250cp-2, + 0x1.62e42ep-1 + }, + { // Entry 37 + 0x1.1efb1b00082040053780041dc6b1f307p0, + 0x1.c317a0p-1, + 0x1.62e42ep-1 + }, + { // Entry 38 + 0x1.58e36d0000017c0ab31fb608eac90731p3, + 0x1.ce38bap2, + 0x1.ffffccp2 + }, + { // Entry 39 + 0x1.fcef76fc92680470b1a17bd9b4b35c4ap-1, + 0x1.d1e90ap-1, + -0x1.999958p-2 + }, + { // Entry 40 + 0x1.ed06b0fc3e0586fd61429f9f743c6d47p0, + 0x1.dc1edcp0, + -0x1.p-1 + }, + { // Entry 41 + 0x1.af9c310000012fae75588f7c15db9873p-1, + 0x1.eb4822p-2, + 0x1.62e42ep-1 + }, + { // Entry 42 + 0x1.fffc00fc05b6516a140feda87b19a0a1p2, + 0x1.fbffbep-10, + 0x1.fffcp2 + }, + { // Entry 43 + 0x1.ff7cc2fc27e17feee79397d1019b42f2p1, + 0x1.fbfffep-3, + 0x1.fe8040p1 + }, + { // Entry 44 + 0x1.fe01f0fc1044c738957a70f05fc15f48p3, + 0x1.fddfbcp3, + 0x1.758fc2p-2 + }, + { // Entry 45 + 0x1.f13b56fc46bed2325ccd2c7cd5e69632p21, + 0x1.fddffep15, + -0x1.f12bp21 + }, + { // Entry 46 + 0x1.c48a1cfcd1996ebda81b01af08af23dfp0, + 0x1.ff7ffep-3, + 0x1.c0p0 + }, + { // Entry 47 + 0x1.ff87fb000001c07920c4dcf4f126de76p7, + 0x1.ff8ffep1, + 0x1.ff77fep7 + }, + { // Entry 48 + 0x1.ffffffff8007fffff001ffeffc00bff3p-127, + 0x1.ffe0p-138, + 0x1.fffffcp-127 + }, + { // Entry 49 + 0x1.01fbfb00000001fc0fda76cb886d48a6p2, + 0x1.fffbfep1, + 0x1.fff9fep-2 + }, + { // Entry 50 + 0x1.1e376efdd5824c75e9a0b3b7ea4e60bcp21, + 0x1.ffffc0p20, + 0x1.000050p20 + }, + { // Entry 51 + 0x1.1e376efdd469e54558718854476503e6p-19, + 0x1.ffffc6p-20, + 0x1.000044p-20 + }, + { // Entry 52 + 0x1.fffff0ffffffc0000e200069ec031c2ep6, + 0x1.fffff8p-6, + 0x1.fffff0p6 + }, + { // Entry 53 + 0x1.6a09e4fde9d71619ea1b09860fc404c9p0, + 0x1.fffffcp-1, + 0x1.p0 + }, + { // Entry 54 + 0x1.fffff8ffffffc0000320000aec00269ep-2, + 0x1.fffffcp-14, + 0x1.fffff8p-2 + }, + { // Entry 55 + 0x1.800000000000001555550000005554bdp-24, + 0x1.fffffcp-54, + -0x1.80p-24 + }, + { // Entry 56 + 0x1.fffffcfffffdc000009fffffac000035p10, + 0x1.fffffcp10, + 0x1.fffffcp-2 + }, + { // Entry 57 + 0x1.fffffd000001c00002a000032c000275p12, + 0x1.fffffcp12, + -0x1.p1 + }, + { // Entry 58 + 0x1.fffffcffffffc00000a00000ec000176p12, + 0x1.fffffcp12, + 0x1.fffffep0 + }, + { // Entry 59 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p0, + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 60 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 61 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + -0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 62 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 63 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 64 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 65 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + -0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 66 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 67 + 0x1.6a09e4fde9d66114f6320ab3ef821653p0, + -0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 68 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 69 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 70 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 71 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 72 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 73 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 74 + 0x1.6a09e4fde9d66114f6320ab3ef821653p0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 75 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 76 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 77 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 78 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 79 + 0x1.6a09e4fde9d66114f6320ab3ef821653p0, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 80 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 81 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 82 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 83 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 84 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 85 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 86 + 0x1.6a09e4fde9d66114f6320ab3ef821653p0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 87 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 88 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 89 + 0x1.6a09e5b2eec9c250117a2e237528575cp0, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 90 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 91 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 92 + 0x1.6a09e71cf8b1944db3c8e462b0886601p0, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 93 + 0x1.6a09e7d1fda3e601624311059df7157bp0, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 94 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 95 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 96 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 97 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 98 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 99 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 100 + 0x1.01fe03f61bad04b1068572febc925ad1p3, + 0x1.p0, + 0x1.p3 + }, + { // Entry 101 + 0x1.01fe03f61bad04b1068572febc925ad1p3, + 0x1.p3, + 0x1.p0 + }, + { // Entry 102 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep3, + 0x1.p3, + 0x1.p3 + }, + { // Entry 103 + 0x1.00001ffffe00003ffff60001bfffacp9, + 0x1.p0, + 0x1.p9 + }, + { // Entry 104 + 0x1.000007ffffe00000fffff600006ffffap10, + 0x1.p0, + 0x1.p10 + }, + { // Entry 105 + 0x1.0007ffe000fff6006ffac041fca62cadp9, + 0x1.p3, + 0x1.p9 + }, + { // Entry 106 + 0x1.0001fffe0003fff6001bffac0107fca6p10, + 0x1.p3, + 0x1.p10 + }, + { // Entry 107 + 0x1.p100, + 0x1.p0, + 0x1.p100 + }, + { // Entry 108 + 0x1.p101, + 0x1.p0, + 0x1.p101 + }, + { // Entry 109 + 0x1.p100, + 0x1.p3, + 0x1.p100 + }, + { // Entry 110 + 0x1.p101, + 0x1.p3, + 0x1.p101 + }, + { // Entry 111 + 0x1.00001ffffe00003ffff60001bfffacp9, + 0x1.p9, + 0x1.p0 + }, + { // Entry 112 + 0x1.0007ffe000fff6006ffac041fca62cadp9, + 0x1.p9, + 0x1.p3 + }, + { // Entry 113 + 0x1.000007ffffe00000fffff600006ffffap10, + 0x1.p10, + 0x1.p0 + }, + { // Entry 114 + 0x1.0001fffe0003fff6001bffac0107fca6p10, + 0x1.p10, + 0x1.p3 + }, + { // Entry 115 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep9, + 0x1.p9, + 0x1.p9 + }, + { // Entry 116 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p10, + 0x1.p9, + 0x1.p10 + }, + { // Entry 117 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p10, + 0x1.p10, + 0x1.p9 + }, + { // Entry 118 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep10, + 0x1.p10, + 0x1.p10 + }, + { // Entry 119 + 0x1.p100, + 0x1.p9, + 0x1.p100 + }, + { // Entry 120 + 0x1.p101, + 0x1.p9, + 0x1.p101 + }, + { // Entry 121 + 0x1.p100, + 0x1.p10, + 0x1.p100 + }, + { // Entry 122 + 0x1.p101, + 0x1.p10, + 0x1.p101 + }, + { // Entry 123 + 0x1.p100, + 0x1.p100, + 0x1.p0 + }, + { // Entry 124 + 0x1.p100, + 0x1.p100, + 0x1.p3 + }, + { // Entry 125 + 0x1.p101, + 0x1.p101, + 0x1.p0 + }, + { // Entry 126 + 0x1.p101, + 0x1.p101, + 0x1.p3 + }, + { // Entry 127 + 0x1.p100, + 0x1.p100, + 0x1.p9 + }, + { // Entry 128 + 0x1.p100, + 0x1.p100, + 0x1.p10 + }, + { // Entry 129 + 0x1.p101, + 0x1.p101, + 0x1.p9 + }, + { // Entry 130 + 0x1.p101, + 0x1.p101, + 0x1.p10 + }, + { // Entry 131 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep100, + 0x1.p100, + 0x1.p100 + }, + { // Entry 132 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p101, + 0x1.p100, + 0x1.p101 + }, + { // Entry 133 + 0x1.1e3779b97f4a7c15f39cc0605cedc834p101, + 0x1.p101, + 0x1.p100 + }, + { // Entry 134 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep101, + 0x1.p101, + 0x1.p101 + }, + { // Entry 135 + 0x1.ad533459cffc47225872f4a951e3eb94p2, + 0x1.7ffffep2, + 0x1.7ffffep1 + }, + { // Entry 136 + 0x1.ad5334cc4c939b314f9ca7280b7b2232p2, + 0x1.7ffffep2, + 0x1.80p1 + }, + { // Entry 137 + 0x1.ad53353ec92b695ec60ef2256f96f6bcp2, + 0x1.7ffffep2, + 0x1.800002p1 + }, + { // Entry 138 + 0x1.ad533623c258e030759a4ee61d10fcc3p2, + 0x1.80p2, + 0x1.7ffffep1 + }, + { // Entry 139 + 0x1.ad5336963eefba20ed6b20908b64ac4ep2, + 0x1.80p2, + 0x1.80p1 + }, + { // Entry 140 + 0x1.ad533708bb870e2fe4436964fee071dep2, + 0x1.80p2, + 0x1.800002p1 + }, + { // Entry 141 + 0x1.ad5337edb4b5f35d10e52ba46980f177p2, + 0x1.800002p2, + 0x1.7ffffep1 + }, + { // Entry 142 + 0x1.ad533860314c532f0a41112392b8f610p2, + 0x1.800002p2, + 0x1.80p1 + }, + { // Entry 143 + 0x1.ad5338d2ade32d1f82634c77c4e56d07p2, + 0x1.800002p2, + 0x1.800002p1 + }, + { // Entry 144 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 145 + 0x1.6a09e0bfcc232939bfd6f09afe47e193p-126, + 0x1.fffff8p-127, + 0x1.fffff8p-127 + }, + { // Entry 146 + 0x1.6a09e229d60a463271f3020c29b89eb0p-126, + 0x1.fffff8p-127, + 0x1.fffffcp-127 + }, + { // Entry 147 + 0x1.6a09e393dff2cd350be1111ca28a749bp-126, + 0x1.fffff8p-127, + 0x1.p-126 + }, + { // Entry 148 + 0x1.6a09e229d60a463271f3020c29b89eb0p-126, + 0x1.fffffcp-127, + 0x1.fffff8p-127 + }, + { // Entry 149 + 0x1.6a09e393dfeff92139690200f46eaf69p-126, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 150 + 0x1.6a09e4fde9d71619ea1b09860fc404c9p-126, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 151 + 0x1.6a09e393dff2cd350be1111ca28a749bp-126, + 0x1.p-126, + 0x1.fffff8p-127 + }, + { // Entry 152 + 0x1.6a09e4fde9d71619ea1b09860fc404c9p-126, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 153 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 154 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 155 + 0x1.6a09e4fde9d66114f6320ab3ef821653p64, + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 156 + 0x1.6a09e4fde9d66114f6320ab3ef821653p64, + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 157 + 0x1.6a09e4fde9d66114f6320ab3ef821653p53, + 0x1.fffffep52, + 0x1.fffffep52 + }, + { // Entry 158 + 0x1.6a09e5b2eec9c250117a2e237528575cp53, + 0x1.fffffep52, + 0x1.p53 + }, + { // Entry 159 + 0x1.6a09e71cf8b1944db3c8e462b0886601p53, + 0x1.fffffep52, + 0x1.000002p53 + }, + { // Entry 160 + 0x1.6a09e5b2eec9c250117a2e237528575cp53, + 0x1.p53, + 0x1.fffffep52 + }, + { // Entry 161 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep53, + 0x1.p53, + 0x1.p53 + }, + { // Entry 162 + 0x1.6a09e7d1fda3e601624311059df7157bp53, + 0x1.p53, + 0x1.000002p53 + }, + { // Entry 163 + 0x1.6a09e71cf8b1944db3c8e462b0886601p53, + 0x1.000002p53, + 0x1.fffffep52 + }, + { // Entry 164 + 0x1.6a09e7d1fda3e601624311059df7157bp53, + 0x1.000002p53, + 0x1.p53 + }, + { // Entry 165 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p53, + 0x1.000002p53, + 0x1.000002p53 + }, + { // Entry 166 + 0x1.6a09e4fde9d66114f6320ab3ef821653p-53, + 0x1.fffffep-54, + 0x1.fffffep-54 + }, + { // Entry 167 + 0x1.6a09e5b2eec9c250117a2e237528575cp-53, + 0x1.fffffep-54, + 0x1.p-53 + }, + { // Entry 168 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-53, + 0x1.fffffep-54, + 0x1.000002p-53 + }, + { // Entry 169 + 0x1.6a09e5b2eec9c250117a2e237528575cp-53, + 0x1.p-53, + 0x1.fffffep-54 + }, + { // Entry 170 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-53, + 0x1.p-53, + 0x1.p-53 + }, + { // Entry 171 + 0x1.6a09e7d1fda3e601624311059df7157bp-53, + 0x1.p-53, + 0x1.000002p-53 + }, + { // Entry 172 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-53, + 0x1.000002p-53, + 0x1.fffffep-54 + }, + { // Entry 173 + 0x1.6a09e7d1fda3e601624311059df7157bp-53, + 0x1.000002p-53, + 0x1.p-53 + }, + { // Entry 174 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p-53, + 0x1.000002p-53, + 0x1.000002p-53 + }, + { // Entry 175 + 0x1.fffffep52, + 0x1.fffffep52, + 0x1.fffffep-54 + }, + { // Entry 176 + 0x1.fffffep52, + 0x1.fffffep52, + 0x1.p-53 + }, + { // Entry 177 + 0x1.fffffep52, + 0x1.fffffep52, + 0x1.000002p-53 + }, + { // Entry 178 + 0x1.p53, + 0x1.p53, + 0x1.fffffep-54 + }, + { // Entry 179 + 0x1.p53, + 0x1.p53, + 0x1.p-53 + }, + { // Entry 180 + 0x1.p53, + 0x1.p53, + 0x1.000002p-53 + }, + { // Entry 181 + 0x1.000002p53, + 0x1.000002p53, + 0x1.fffffep-54 + }, + { // Entry 182 + 0x1.000002p53, + 0x1.000002p53, + 0x1.p-53 + }, + { // Entry 183 + 0x1.000002p53, + 0x1.000002p53, + 0x1.000002p-53 + }, + { // Entry 184 + 0x1.fffffep52, + 0x1.fffffep52, + -0x1.p-149 + }, + { // Entry 185 + 0x1.fffffep52, + 0x1.fffffep52, + 0.0 + }, + { // Entry 186 + 0x1.fffffep52, + 0x1.fffffep52, + 0x1.p-149 + }, + { // Entry 187 + 0x1.p53, + 0x1.p53, + -0x1.p-149 + }, + { // Entry 188 + 0x1.p53, + 0x1.p53, + 0.0 + }, + { // Entry 189 + 0x1.p53, + 0x1.p53, + 0x1.p-149 + }, + { // Entry 190 + 0x1.000002p53, + 0x1.000002p53, + -0x1.p-149 + }, + { // Entry 191 + 0x1.000002p53, + 0x1.000002p53, + 0.0 + }, + { // Entry 192 + 0x1.000002p53, + 0x1.000002p53, + 0x1.p-149 + }, + { // Entry 193 + 0x1.fffffep-54, + 0x1.fffffep-54, + -0x1.p-149 + }, + { // Entry 194 + 0x1.fffffep-54, + 0x1.fffffep-54, + 0.0 + }, + { // Entry 195 + 0x1.fffffep-54, + 0x1.fffffep-54, + 0x1.p-149 + }, + { // Entry 196 + 0x1.p-53, + 0x1.p-53, + -0x1.p-149 + }, + { // Entry 197 + 0x1.p-53, + 0x1.p-53, + 0.0 + }, + { // Entry 198 + 0x1.p-53, + 0x1.p-53, + 0x1.p-149 + }, + { // Entry 199 + 0x1.000002p-53, + 0x1.000002p-53, + -0x1.p-149 + }, + { // Entry 200 + 0x1.000002p-53, + 0x1.000002p-53, + 0.0 + }, + { // Entry 201 + 0x1.000002p-53, + 0x1.000002p-53, + 0x1.p-149 + }, + { // Entry 202 + 0x1.fffffe000000000000000000003fffffp52, + 0x1.fffffep52, + 0x1.fffffep-1 + }, + { // Entry 203 + 0x1.fffffe0000000000000000000040p52, + 0x1.fffffep52, + 0x1.p0 + }, + { // Entry 204 + 0x1.fffffe00000000000000000000400001p52, + 0x1.fffffep52, + 0x1.000002p0 + }, + { // Entry 205 + 0x1.000000000000000000000000001fffffp53, + 0x1.p53, + 0x1.fffffep-1 + }, + { // Entry 206 + 0x1.000000000000000000000000001fffffp53, + 0x1.p53, + 0x1.p0 + }, + { // Entry 207 + 0x1.0000000000000000000000000020p53, + 0x1.p53, + 0x1.000002p0 + }, + { // Entry 208 + 0x1.000002000000000000000000001fffffp53, + 0x1.000002p53, + 0x1.fffffep-1 + }, + { // Entry 209 + 0x1.000002000000000000000000001fffffp53, + 0x1.000002p53, + 0x1.p0 + }, + { // Entry 210 + 0x1.0000020000000000000000000020p53, + 0x1.000002p53, + 0x1.000002p0 + }, + { // Entry 211 + 0x1.fffffe000000000000000000003fffffp-1, + 0x1.fffffep-54, + 0x1.fffffep-1 + }, + { // Entry 212 + 0x1.000000000000000000000000001fffffp0, + 0x1.fffffep-54, + 0x1.p0 + }, + { // Entry 213 + 0x1.000002000000000000000000001fffffp0, + 0x1.fffffep-54, + 0x1.000002p0 + }, + { // Entry 214 + 0x1.fffffe0000000000000000000040p-1, + 0x1.p-53, + 0x1.fffffep-1 + }, + { // Entry 215 + 0x1.000000000000000000000000001fffffp0, + 0x1.p-53, + 0x1.p0 + }, + { // Entry 216 + 0x1.000002000000000000000000001fffffp0, + 0x1.p-53, + 0x1.000002p0 + }, + { // Entry 217 + 0x1.fffffe00000000000000000000400001p-1, + 0x1.000002p-53, + 0x1.fffffep-1 + }, + { // Entry 218 + 0x1.0000000000000000000000000020p0, + 0x1.000002p-53, + 0x1.p0 + }, + { // Entry 219 + 0x1.0000020000000000000000000020p0, + 0x1.000002p-53, + 0x1.000002p0 + }, + { // Entry 220 + 0x1.fffffe00003fffffbffffc000004p20, + 0x1.fffffep20, + 0x1.fffffep-1 + }, + { // Entry 221 + 0x1.fffffe00004000003ffffc3ffff440p20, + 0x1.fffffep20, + 0x1.p0 + }, + { // Entry 222 + 0x1.fffffe00004000013ffffe3fffd63fffp20, + 0x1.fffffep20, + 0x1.000002p0 + }, + { // Entry 223 + 0x1.00000000001fffffbffffe200008p21, + 0x1.p21, + 0x1.fffffep-1 + }, + { // Entry 224 + 0x1.00000000001ffffffffffep21, + 0x1.p21, + 0x1.p0 + }, + { // Entry 225 + 0x1.00000000002000007ffffe7ffff0p21, + 0x1.p21, + 0x1.000002p0 + }, + { // Entry 226 + 0x1.00000200001fffff7fffff200011bfffp21, + 0x1.000002p21, + 0x1.fffffep-1 + }, + { // Entry 227 + 0x1.00000200001fffffbffffe80000bp21, + 0x1.000002p21, + 0x1.p0 + }, + { // Entry 228 + 0x1.00000200002000003ffffdfffffcp21, + 0x1.000002p21, + 0x1.000002p0 + }, + { // Entry 229 + 0x1.fffffe00000fffffefffffc0000040p21, + 0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 230 + 0x1.fffffe00001000000fffffcfffff50p21, + 0x1.fffffep21, + 0x1.p0 + }, + { // Entry 231 + 0x1.fffffe00001000005000004ffffdcfffp21, + 0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 232 + 0x1.000000000007ffffefffffe8000080p22, + 0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 233 + 0x1.000000000007ffffffffffe0p22, + 0x1.p22, + 0x1.p0 + }, + { // Entry 234 + 0x1.00000000000800001ffffffffffeffffp22, + 0x1.p22, + 0x1.000002p0 + }, + { // Entry 235 + 0x1.000002000007ffffe00000280000afffp22, + 0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 236 + 0x1.000002000007fffff000000000007fffp22, + 0x1.000002p22, + 0x1.p0 + }, + { // Entry 237 + 0x1.00000200000800000fffffdfffffc0p22, + 0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 238 + 0x1.fffffe000003fffffbfffffc000004p22, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 239 + 0x1.fffffe000004000003fffffffffff7ffp22, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 240 + 0x1.fffffe00000400001400001ffffff7ffp22, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 241 + 0x1.000000000001fffffc000000000007ffp23, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 242 + 0x1.000000000001fffffffffffep23, + 0x1.p23, + 0x1.p0 + }, + { // Entry 243 + 0x1.000000000002000008000005ffffefffp23, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 244 + 0x1.000002000001fffff800000fffffefffp23, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 245 + 0x1.000002000001fffffc000005fffffbffp23, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 246 + 0x1.000002000002000003fffffdfffffcp23, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 247 + 0x1.fffffe000000fffffeffffffc0000040p23, + 0x1.fffffep23, + 0x1.fffffep-1 + }, + { // Entry 248 + 0x1.fffffe000001000001000000c000003fp23, + 0x1.fffffep23, + 0x1.p0 + }, + { // Entry 249 + 0x1.fffffe000001000005000008c000063fp23, + 0x1.fffffep23, + 0x1.000002p0 + }, + { // Entry 250 + 0x1.0000000000007fffff0000006000007fp24, + 0x1.p24, + 0x1.fffffep-1 + }, + { // Entry 251 + 0x1.0000000000007fffffffffffe0p24, + 0x1.p24, + 0x1.p0 + }, + { // Entry 252 + 0x1.000000000000800002000001dffffeffp24, + 0x1.p24, + 0x1.000002p0 + }, + { // Entry 253 + 0x1.0000020000007ffffe0000045ffff840p24, + 0x1.000002p24, + 0x1.fffffep-1 + }, + { // Entry 254 + 0x1.0000020000007fffff000001dffffcc0p24, + 0x1.000002p24, + 0x1.p0 + }, + { // Entry 255 + 0x1.000002000000800000ffffffdfffffc0p24, + 0x1.000002p24, + 0x1.000002p0 + }, + { // Entry 256 + 0x1.fffffe0000003fffffbffffffc000004p24, + 0x1.fffffep24, + 0x1.fffffep-1 + }, + { // Entry 257 + 0x1.fffffe0000004000004000003c000034p24, + 0x1.fffffep24, + 0x1.p0 + }, + { // Entry 258 + 0x1.fffffe0000004000014000023c000214p24, + 0x1.fffffep24, + 0x1.000002p0 + }, + { // Entry 259 + 0x1.0000000000001fffffc000001e000007p25, + 0x1.p25, + 0x1.fffffep-1 + }, + { // Entry 260 + 0x1.0000000000001ffffffffffffep25, + 0x1.p25, + 0x1.p0 + }, + { // Entry 261 + 0x1.0000000000002000008000007dffffefp25, + 0x1.p25, + 0x1.000002p0 + }, + { // Entry 262 + 0x1.0000020000001fffff8000011dfffdd4p25, + 0x1.000002p25, + 0x1.fffffep-1 + }, + { // Entry 263 + 0x1.0000020000001fffffc000007dffff0cp25, + 0x1.000002p25, + 0x1.p0 + }, + { // Entry 264 + 0x1.0000020000002000003ffffffdfffffcp25, + 0x1.000002p25, + 0x1.000002p0 + }, + { // Entry 265 + 0x1.6a09e4fde9d66114f6320ab3ef821653p-60, + 0x1.fffffep-61, + 0x1.fffffep-61 + }, + { // Entry 266 + 0x1.6a09e5b2eec9c250117a2e237528575cp-60, + 0x1.fffffep-61, + 0x1.p-60 + }, + { // Entry 267 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-60, + 0x1.fffffep-61, + 0x1.000002p-60 + }, + { // Entry 268 + 0x1.6a09e5b2eec9c250117a2e237528575cp-60, + 0x1.p-60, + 0x1.fffffep-61 + }, + { // Entry 269 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-60, + 0x1.p-60, + 0x1.p-60 + }, + { // Entry 270 + 0x1.6a09e7d1fda3e601624311059df7157bp-60, + 0x1.p-60, + 0x1.000002p-60 + }, + { // Entry 271 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-60, + 0x1.000002p-60, + 0x1.fffffep-61 + }, + { // Entry 272 + 0x1.6a09e7d1fda3e601624311059df7157bp-60, + 0x1.000002p-60, + 0x1.p-60 + }, + { // Entry 273 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p-60, + 0x1.000002p-60, + 0x1.000002p-60 + }, + { // Entry 274 + 0x1.6a09e4fde9d66114f6320ab3ef821653p-10, + 0x1.fffffep-11, + 0x1.fffffep-11 + }, + { // Entry 275 + 0x1.6a09e5b2eec9c250117a2e237528575cp-10, + 0x1.fffffep-11, + 0x1.p-10 + }, + { // Entry 276 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-10, + 0x1.fffffep-11, + 0x1.000002p-10 + }, + { // Entry 277 + 0x1.6a09e5b2eec9c250117a2e237528575cp-10, + 0x1.p-10, + 0x1.fffffep-11 + }, + { // Entry 278 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-10, + 0x1.p-10, + 0x1.p-10 + }, + { // Entry 279 + 0x1.6a09e7d1fda3e601624311059df7157bp-10, + 0x1.p-10, + 0x1.000002p-10 + }, + { // Entry 280 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-10, + 0x1.000002p-10, + 0x1.fffffep-11 + }, + { // Entry 281 + 0x1.6a09e7d1fda3e601624311059df7157bp-10, + 0x1.000002p-10, + 0x1.p-10 + }, + { // Entry 282 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p-10, + 0x1.000002p-10, + 0x1.000002p-10 + }, + { // Entry 283 + 0x1.6a09e4fde9d66114f6320ab3ef821653p-1, + 0x1.fffffep-2, + 0x1.fffffep-2 + }, + { // Entry 284 + 0x1.6a09e5b2eec9c250117a2e237528575cp-1, + 0x1.fffffep-2, + 0x1.p-1 + }, + { // Entry 285 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-1, + 0x1.fffffep-2, + 0x1.000002p-1 + }, + { // Entry 286 + 0x1.6a09e5b2eec9c250117a2e237528575cp-1, + 0x1.p-1, + 0x1.fffffep-2 + }, + { // Entry 287 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + 0x1.p-1, + 0x1.p-1 + }, + { // Entry 288 + 0x1.6a09e7d1fda3e601624311059df7157bp-1, + 0x1.p-1, + 0x1.000002p-1 + }, + { // Entry 289 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-1, + 0x1.000002p-1, + 0x1.fffffep-2 + }, + { // Entry 290 + 0x1.6a09e7d1fda3e601624311059df7157bp-1, + 0x1.000002p-1, + 0x1.p-1 + }, + { // Entry 291 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p-1, + 0x1.000002p-1, + 0x1.000002p-1 + }, + { // Entry 292 + 0x1.6a09e4fde9d66114f6320ab3ef821653p1, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 293 + 0x1.6a09e5b2eec9c250117a2e237528575cp1, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 294 + 0x1.6a09e71cf8b1944db3c8e462b0886601p1, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 295 + 0x1.6a09e5b2eec9c250117a2e237528575cp1, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 296 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep1, + 0x1.p1, + 0x1.p1 + }, + { // Entry 297 + 0x1.6a09e7d1fda3e601624311059df7157bp1, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 298 + 0x1.6a09e71cf8b1944db3c8e462b0886601p1, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 299 + 0x1.6a09e7d1fda3e601624311059df7157bp1, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 300 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p1, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 301 + 0x1.6a09e4fde9d66114f6320ab3ef821653p10, + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 302 + 0x1.6a09e5b2eec9c250117a2e237528575cp10, + 0x1.fffffep9, + 0x1.p10 + }, + { // Entry 303 + 0x1.6a09e71cf8b1944db3c8e462b0886601p10, + 0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 304 + 0x1.6a09e5b2eec9c250117a2e237528575cp10, + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 305 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep10, + 0x1.p10, + 0x1.p10 + }, + { // Entry 306 + 0x1.6a09e7d1fda3e601624311059df7157bp10, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 307 + 0x1.6a09e71cf8b1944db3c8e462b0886601p10, + 0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 308 + 0x1.6a09e7d1fda3e601624311059df7157bp10, + 0x1.000002p10, + 0x1.p10 + }, + { // Entry 309 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p10, + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 310 + 0x1.6a09e4fde9d66114f6320ab3ef821653p60, + 0x1.fffffep59, + 0x1.fffffep59 + }, + { // Entry 311 + 0x1.6a09e5b2eec9c250117a2e237528575cp60, + 0x1.fffffep59, + 0x1.p60 + }, + { // Entry 312 + 0x1.6a09e71cf8b1944db3c8e462b0886601p60, + 0x1.fffffep59, + 0x1.000002p60 + }, + { // Entry 313 + 0x1.6a09e5b2eec9c250117a2e237528575cp60, + 0x1.p60, + 0x1.fffffep59 + }, + { // Entry 314 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep60, + 0x1.p60, + 0x1.p60 + }, + { // Entry 315 + 0x1.6a09e7d1fda3e601624311059df7157bp60, + 0x1.p60, + 0x1.000002p60 + }, + { // Entry 316 + 0x1.6a09e71cf8b1944db3c8e462b0886601p60, + 0x1.000002p60, + 0x1.fffffep59 + }, + { // Entry 317 + 0x1.6a09e7d1fda3e601624311059df7157bp60, + 0x1.000002p60, + 0x1.p60 + }, + { // Entry 318 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p60, + 0x1.000002p60, + 0x1.000002p60 + }, + { // Entry 319 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.fffffep-1 + }, + { // Entry 320 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.p0 + }, + { // Entry 321 + 0x1.fffffep126, + 0x1.fffffep126, + 0x1.000002p0 + }, + { // Entry 322 + 0x1.p127, + 0x1.p127, + 0x1.fffffep-1 + }, + { // Entry 323 + 0x1.p127, + 0x1.p127, + 0x1.p0 + }, + { // Entry 324 + 0x1.p127, + 0x1.p127, + 0x1.000002p0 + }, + { // Entry 325 + 0x1.000002p127, + 0x1.000002p127, + 0x1.fffffep-1 + }, + { // Entry 326 + 0x1.000002p127, + 0x1.000002p127, + 0x1.p0 + }, + { // Entry 327 + 0x1.000002p127, + 0x1.000002p127, + 0x1.000002p0 + }, + { // Entry 328 + 0x1.778d23d44b55c4e7b10db1b757f6ee55p-27, + 0x1.00a434p-27, + 0x1.122dc2p-27 + }, + { // Entry 329 + 0x1.778d254a171118efb3206477d0250ecdp-27, + 0x1.00a434p-27, + 0x1.122dc4p-27 + }, + { // Entry 330 + 0x1.778d26bfe2cdb2f186ce7d3b1303e445p-27, + 0x1.00a434p-27, + 0x1.122dc6p-27 + }, + { // Entry 331 + 0x1.778d25322e53c575779bf8453dfa3d1cp-27, + 0x1.00a436p-27, + 0x1.122dc2p-27 + }, + { // Entry 332 + 0x1.778d26a7fa0dbd3d308d85a2de5329b5p-27, + 0x1.00a436p-27, + 0x1.122dc4p-27 + }, + { // Entry 333 + 0x1.778d281dc5c8fafebca0051d801423f2p-27, + 0x1.00a436p-27, + 0x1.122dc6p-27 + }, + { // Entry 334 + 0x1.778d269011533a0fa573ec7af086bc32p-27, + 0x1.00a438p-27, + 0x1.122dc2p-27 + }, + { // Entry 335 + 0x1.778d2805dd0bd597165aecc2378bac1cp-27, + 0x1.00a438p-27, + 0x1.122dc4p-27 + }, + { // Entry 336 + 0x1.778d297ba8c5b7185be86b37ed71b7e7p-27, + 0x1.00a438p-27, + 0x1.122dc6p-27 + }, + { // Entry 337 + 0x1.74334e106cbed9ae84bc8c76dd5c5713p0, + 0x1.0b25p0, + -0x1.032a76p0 + }, + { // Entry 338 + 0x1.74334cabea5b8f74d5d14c94e0c759e1p0, + 0x1.0b25p0, + -0x1.032a74p0 + }, + { // Entry 339 + 0x1.74334b4767f9b00f6266f798ce03fe56p0, + 0x1.0b25p0, + -0x1.032a72p0 + }, + { // Entry 340 + 0x1.74334f7fe8dc915f56954cb730ec4eacp0, + 0x1.0b2502p0, + -0x1.032a76p0 + }, + { // Entry 341 + 0x1.74334e1b667aa723bef8bd9997e318dbp0, + 0x1.0b2502p0, + -0x1.032a74p0 + }, + { // Entry 342 + 0x1.74334cb6e41a27bc64192c7623c9095ep0, + 0x1.0b2502p0, + -0x1.032a72p0 + }, + { // Entry 343 + 0x1.743350ef64fb9e8af653c2c33082504fp0, + 0x1.0b2504p0, + -0x1.032a76p0 + }, + { // Entry 344 + 0x1.74334f8ae29b144d7495e8f3d356be7fp0, + 0x1.0b2504p0, + -0x1.032a74p0 + }, + { // Entry 345 + 0x1.74334e26603bf4e430d12029be7e9e50p0, + 0x1.0b2504p0, + -0x1.032a72p0 + }, + { // Entry 346 + 0x1.b6d62fc6f7a81ec948a1141efc6052a7p7, + 0x1.384560p7, + 0x1.345342p7 + }, + { // Entry 347 + 0x1.b6d6312eb26c5bc486b92f8cf55694f0p7, + 0x1.384560p7, + 0x1.345344p7 + }, + { // Entry 348 + 0x1.b6d632966d31c73a4041badc1888237dp7, + 0x1.384560p7, + 0x1.345346p7 + }, + { // Entry 349 + 0x1.b6d631334cf2c0ff05d0de26ff401478p7, + 0x1.384562p7, + 0x1.345342p7 + }, + { // Entry 350 + 0x1.b6d6329b07b5d35237676d0ef4b9f426p7, + 0x1.384562p7, + 0x1.345344p7 + }, + { // Entry 351 + 0x1.b6d63402c27a141fe55cef1e3465ad6dp7, + 0x1.384562p7, + 0x1.345346p7 + }, + { // Entry 352 + 0x1.b6d6329fa23e8a16b9bb93298235048cp7, + 0x1.384564p7, + 0x1.345342p7 + }, + { // Entry 353 + 0x1.b6d634075d0071c1dfcec3418989e05ep7, + 0x1.384564p7, + 0x1.345344p7 + }, + { // Entry 354 + 0x1.b6d6356f17c387e7832f69c16c81e0ccp7, + 0x1.384564p7, + 0x1.345346p7 + }, + { // Entry 355 + 0x1.b6d6356f17c387e7832f69c16c81e0ccp-6, + -0x1.384564p-6, + -0x1.345346p-6 + }, + { // Entry 356 + 0x1.b6d634075d0071c1dfcec3418989e05ep-6, + -0x1.384564p-6, + -0x1.345344p-6 + }, + { // Entry 357 + 0x1.b6d6329fa23e8a16b9bb93298235048cp-6, + -0x1.384564p-6, + -0x1.345342p-6 + }, + { // Entry 358 + 0x1.b6d63402c27a141fe55cef1e3465ad6dp-6, + -0x1.384562p-6, + -0x1.345346p-6 + }, + { // Entry 359 + 0x1.b6d6329b07b5d35237676d0ef4b9f426p-6, + -0x1.384562p-6, + -0x1.345344p-6 + }, + { // Entry 360 + 0x1.b6d631334cf2c0ff05d0de26ff401478p-6, + -0x1.384562p-6, + -0x1.345342p-6 + }, + { // Entry 361 + 0x1.b6d632966d31c73a4041badc1888237dp-6, + -0x1.384560p-6, + -0x1.345346p-6 + }, + { // Entry 362 + 0x1.b6d6312eb26c5bc486b92f8cf55694f0p-6, + -0x1.384560p-6, + -0x1.345344p-6 + }, + { // Entry 363 + 0x1.b6d62fc6f7a81ec948a1141efc6052a7p-6, + -0x1.384560p-6, + -0x1.345342p-6 + }, + { // Entry 364 + 0x1.9a134250dd50582b3680d82375c95486p-16, + -0x1.384564p-16, + -0x1.09cc3ep-16 + }, + { // Entry 365 + 0x1.9a1341050095587ce0ff2f690abe3130p-16, + -0x1.384564p-16, + -0x1.09cc3cp-16 + }, + { // Entry 366 + 0x1.9a133fb923dbcb7f9d68db36361f7a4cp-16, + -0x1.384564p-16, + -0x1.09cc3ap-16 + }, + { // Entry 367 + 0x1.9a1340cafa61a0e627789b5e20463d1fp-16, + -0x1.384562p-16, + -0x1.09cc3ep-16 + }, + { // Entry 368 + 0x1.9a133f7f1da565b1a938b5bc2a05ad2bp-16, + -0x1.384562p-16, + -0x1.09cc3cp-16 + }, + { // Entry 369 + 0x1.9a133e3340ea9d2e3c45e546f2b30188p-16, + -0x1.384562p-16, + -0x1.09cc3ap-16 + }, + { // Entry 370 + 0x1.9a133f451773f6322dcdf8373e99ef77p-16, + -0x1.384560p-16, + -0x1.09cc3ep-16 + }, + { // Entry 371 + 0x1.9a133df93ab67f77855132975a6d3aa2p-16, + -0x1.384560p-16, + -0x1.09cc3cp-16 + }, + { // Entry 372 + 0x1.9a133cad5dfa7b6ded8342c2ed23507ep-16, + -0x1.384560p-16, + -0x1.09cc3ap-16 + }, + { // Entry 373 + 0x1.6a09e93c078998f02c8d24cce0bc4b13p-6, + -0x1.000002p-6, + -0x1.000002p-6 + }, + { // Entry 374 + 0x1.6a09e7d1fda3e601624311059df7157bp-6, + -0x1.000002p-6, + -0x1.p-6 + }, + { // Entry 375 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-6, + -0x1.000002p-6, + -0x1.fffffep-7 + }, + { // Entry 376 + 0x1.6a09e7d1fda3e601624311059df7157bp-6, + -0x1.p-6, + -0x1.000002p-6 + }, + { // Entry 377 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-6, + -0x1.p-6, + -0x1.p-6 + }, + { // Entry 378 + 0x1.6a09e5b2eec9c250117a2e237528575cp-6, + -0x1.p-6, + -0x1.fffffep-7 + }, + { // Entry 379 + 0x1.6a09e71cf8b1944db3c8e462b0886601p-6, + -0x1.fffffep-7, + -0x1.000002p-6 + }, + { // Entry 380 + 0x1.6a09e5b2eec9c250117a2e237528575cp-6, + -0x1.fffffep-7, + -0x1.p-6 + }, + { // Entry 381 + 0x1.6a09e4fde9d66114f6320ab3ef821653p-6, + -0x1.fffffep-7, + -0x1.fffffep-7 + }, + { // Entry 382 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 383 + 0x1.p-149, + -0x1.p-149, + 0.0 + }, + { // Entry 384 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 385 + 0x1.p-149, + 0.0, + -0x1.p-149 + }, + { // Entry 386 + 0.0, + 0.0, + 0.0 + }, + { // Entry 387 + 0x1.p-149, + 0.0, + 0x1.p-149 + }, + { // Entry 388 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 389 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 390 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 391 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 392 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 393 + HUGE_VALF, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 394 + HUGE_VALF, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 395 + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 396 + HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 397 + HUGE_VALF, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 398 + HUGE_VALF, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 399 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 400 + HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 401 + HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 402 + HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 403 + HUGE_VALF, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 404 + HUGE_VALF, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 405 + HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 406 + HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 407 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 408 + HUGE_VALF, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 409 + HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 410 + HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 411 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 412 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 413 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 414 + HUGE_VALF, + 0.0f, + HUGE_VALF + }, + { // Entry 415 + HUGE_VALF, + -0.0f, + HUGE_VALF + }, + { // Entry 416 + HUGE_VALF, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 417 + HUGE_VALF, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 418 + HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 419 + HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 420 + HUGE_VALF, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 421 + HUGE_VALF, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 422 + HUGE_VALF, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 423 + HUGE_VALF, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 424 + HUGE_VALF, + 0.0f, + -HUGE_VALF + }, + { // Entry 425 + HUGE_VALF, + -0.0f, + -HUGE_VALF + }, + { // Entry 426 + HUGE_VALF, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 427 + HUGE_VALF, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 428 + HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 429 + 0x1.fffffep127, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 430 + 0x1.p-126, + 0.0f, + 0x1.p-126 + }, + { // Entry 431 + 0x1.p-149, + 0.0f, + 0x1.p-149 + }, + { // Entry 432 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 433 + 0.0, + 0.0f, + -0.0f + }, + { // Entry 434 + 0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 435 + 0x1.p-126, + 0.0f, + -0x1.p-126 + }, + { // Entry 436 + 0x1.fffffep127, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 437 + 0x1.fffffep127, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 438 + 0x1.p-126, + -0.0f, + 0x1.p-126 + }, + { // Entry 439 + 0x1.p-149, + -0.0f, + 0x1.p-149 + }, + { // Entry 440 + 0.0, + -0.0f, + 0.0f + }, + { // Entry 441 + 0.0, + -0.0f, + -0.0f + }, + { // Entry 442 + 0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 443 + 0x1.p-126, + -0.0f, + -0x1.p-126 + }, + { // Entry 444 + 0x1.fffffep127, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 445 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 446 + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 447 + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 448 + 0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 449 + 0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 450 + 0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 451 + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 452 + 0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 453 + 0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 454 + 0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 455 + 0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 456 + 0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 457 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 458 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 459 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 460 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 461 + 0x1.fffffep127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 462 + HUGE_VALF, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 463 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 464 + 0x1.000000000001fffffffffffep-126, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 465 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 466 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-149, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 467 + 0x1.40p2, + 0x1.80p1, + 0x1.p2 + }, + { // Entry 468 + 0x1.40p2, + 0x1.80p1, + -0x1.p2 + }, + { // Entry 469 + 0x1.a0p3, + 0x1.40p2, + 0x1.80p3 + }, + { // Entry 470 + 0x1.a0p3, + 0x1.40p2, + -0x1.80p3 + } +}; diff --git a/tests/math_data/ilogb_intel_data.h b/tests/math_data/ilogb_intel_data.h new file mode 100644 index 000000000..50a3a7fb8 --- /dev/null +++ b/tests/math_data/ilogb_intel_data.h @@ -0,0 +1,890 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_int_1_t g_ilogb_intel_data[] = { + { // Entry 0 + (int)0x1.90p6, + 0x1.0p100 + }, + { // Entry 1 + (int)0x1.90p6, + 0x1.199999999999ap100 + }, + { // Entry 2 + (int)0x1.90p6, + 0x1.3333333333334p100 + }, + { // Entry 3 + (int)0x1.90p6, + 0x1.4cccccccccccep100 + }, + { // Entry 4 + (int)0x1.90p6, + 0x1.6666666666668p100 + }, + { // Entry 5 + (int)0x1.90p6, + 0x1.8000000000002p100 + }, + { // Entry 6 + (int)0x1.90p6, + 0x1.999999999999cp100 + }, + { // Entry 7 + (int)0x1.90p6, + 0x1.b333333333336p100 + }, + { // Entry 8 + (int)0x1.90p6, + 0x1.cccccccccccd0p100 + }, + { // Entry 9 + (int)0x1.90p6, + 0x1.e66666666666ap100 + }, + { // Entry 10 + (int)0x1.94p6, + 0x1.0p101 + }, + { // Entry 11 + (int)0x1.90p7, + 0x1.0p200 + }, + { // Entry 12 + (int)0x1.90p7, + 0x1.199999999999ap200 + }, + { // Entry 13 + (int)0x1.90p7, + 0x1.3333333333334p200 + }, + { // Entry 14 + (int)0x1.90p7, + 0x1.4cccccccccccep200 + }, + { // Entry 15 + (int)0x1.90p7, + 0x1.6666666666668p200 + }, + { // Entry 16 + (int)0x1.90p7, + 0x1.8000000000002p200 + }, + { // Entry 17 + (int)0x1.90p7, + 0x1.999999999999cp200 + }, + { // Entry 18 + (int)0x1.90p7, + 0x1.b333333333336p200 + }, + { // Entry 19 + (int)0x1.90p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 20 + (int)0x1.90p7, + 0x1.e66666666666ap200 + }, + { // Entry 21 + (int)0x1.92p7, + 0x1.0p201 + }, + { // Entry 22 + (int)0x1.f4p9, + 0x1.0p1000 + }, + { // Entry 23 + (int)0x1.f4p9, + 0x1.199999999999ap1000 + }, + { // Entry 24 + (int)0x1.f4p9, + 0x1.3333333333334p1000 + }, + { // Entry 25 + (int)0x1.f4p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 26 + (int)0x1.f4p9, + 0x1.6666666666668p1000 + }, + { // Entry 27 + (int)0x1.f4p9, + 0x1.8000000000002p1000 + }, + { // Entry 28 + (int)0x1.f4p9, + 0x1.999999999999cp1000 + }, + { // Entry 29 + (int)0x1.f4p9, + 0x1.b333333333336p1000 + }, + { // Entry 30 + (int)0x1.f4p9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 31 + (int)0x1.f4p9, + 0x1.e66666666666ap1000 + }, + { // Entry 32 + (int)0x1.f480p9, + 0x1.0p1001 + }, + { // Entry 33 + (int)0x1.94p6, + -0x1.0p101 + }, + { // Entry 34 + (int)0x1.90p6, + -0x1.e666666666666p100 + }, + { // Entry 35 + (int)0x1.90p6, + -0x1.cccccccccccccp100 + }, + { // Entry 36 + (int)0x1.90p6, + -0x1.b333333333332p100 + }, + { // Entry 37 + (int)0x1.90p6, + -0x1.9999999999998p100 + }, + { // Entry 38 + (int)0x1.90p6, + -0x1.7fffffffffffep100 + }, + { // Entry 39 + (int)0x1.90p6, + -0x1.6666666666664p100 + }, + { // Entry 40 + (int)0x1.90p6, + -0x1.4cccccccccccap100 + }, + { // Entry 41 + (int)0x1.90p6, + -0x1.3333333333330p100 + }, + { // Entry 42 + (int)0x1.90p6, + -0x1.1999999999996p100 + }, + { // Entry 43 + (int)0x1.90p6, + -0x1.0p100 + }, + { // Entry 44 + (int)0x1.92p7, + -0x1.0p201 + }, + { // Entry 45 + (int)0x1.90p7, + -0x1.e666666666666p200 + }, + { // Entry 46 + (int)0x1.90p7, + -0x1.cccccccccccccp200 + }, + { // Entry 47 + (int)0x1.90p7, + -0x1.b333333333332p200 + }, + { // Entry 48 + (int)0x1.90p7, + -0x1.9999999999998p200 + }, + { // Entry 49 + (int)0x1.90p7, + -0x1.7fffffffffffep200 + }, + { // Entry 50 + (int)0x1.90p7, + -0x1.6666666666664p200 + }, + { // Entry 51 + (int)0x1.90p7, + -0x1.4cccccccccccap200 + }, + { // Entry 52 + (int)0x1.90p7, + -0x1.3333333333330p200 + }, + { // Entry 53 + (int)0x1.90p7, + -0x1.1999999999996p200 + }, + { // Entry 54 + (int)0x1.90p7, + -0x1.0p200 + }, + { // Entry 55 + (int)0x1.f480p9, + -0x1.0p1001 + }, + { // Entry 56 + (int)0x1.f4p9, + -0x1.e666666666666p1000 + }, + { // Entry 57 + (int)0x1.f4p9, + -0x1.cccccccccccccp1000 + }, + { // Entry 58 + (int)0x1.f4p9, + -0x1.b333333333332p1000 + }, + { // Entry 59 + (int)0x1.f4p9, + -0x1.9999999999998p1000 + }, + { // Entry 60 + (int)0x1.f4p9, + -0x1.7fffffffffffep1000 + }, + { // Entry 61 + (int)0x1.f4p9, + -0x1.6666666666664p1000 + }, + { // Entry 62 + (int)0x1.f4p9, + -0x1.4cccccccccccap1000 + }, + { // Entry 63 + (int)0x1.f4p9, + -0x1.3333333333330p1000 + }, + { // Entry 64 + (int)0x1.f4p9, + -0x1.1999999999996p1000 + }, + { // Entry 65 + (int)0x1.f4p9, + -0x1.0p1000 + }, + { // Entry 66 + (int)0x1.90p5, + 0x1.0p50 + }, + { // Entry 67 + (int)0x1.90p5, + 0x1.199999999999ap50 + }, + { // Entry 68 + (int)0x1.90p5, + 0x1.3333333333334p50 + }, + { // Entry 69 + (int)0x1.90p5, + 0x1.4cccccccccccep50 + }, + { // Entry 70 + (int)0x1.90p5, + 0x1.6666666666668p50 + }, + { // Entry 71 + (int)0x1.90p5, + 0x1.8000000000002p50 + }, + { // Entry 72 + (int)0x1.90p5, + 0x1.999999999999cp50 + }, + { // Entry 73 + (int)0x1.90p5, + 0x1.b333333333336p50 + }, + { // Entry 74 + (int)0x1.90p5, + 0x1.cccccccccccd0p50 + }, + { // Entry 75 + (int)0x1.90p5, + 0x1.e66666666666ap50 + }, + { // Entry 76 + (int)0x1.98p5, + 0x1.0p51 + }, + { // Entry 77 + (int)0x1.98p5, + 0x1.0p51 + }, + { // Entry 78 + (int)0x1.98p5, + 0x1.199999999999ap51 + }, + { // Entry 79 + (int)0x1.98p5, + 0x1.3333333333334p51 + }, + { // Entry 80 + (int)0x1.98p5, + 0x1.4cccccccccccep51 + }, + { // Entry 81 + (int)0x1.98p5, + 0x1.6666666666668p51 + }, + { // Entry 82 + (int)0x1.98p5, + 0x1.8000000000002p51 + }, + { // Entry 83 + (int)0x1.98p5, + 0x1.999999999999cp51 + }, + { // Entry 84 + (int)0x1.98p5, + 0x1.b333333333336p51 + }, + { // Entry 85 + (int)0x1.98p5, + 0x1.cccccccccccd0p51 + }, + { // Entry 86 + (int)0x1.98p5, + 0x1.e66666666666ap51 + }, + { // Entry 87 + (int)0x1.a0p5, + 0x1.0p52 + }, + { // Entry 88 + (int)0x1.a0p5, + 0x1.0p52 + }, + { // Entry 89 + (int)0x1.a0p5, + 0x1.199999999999ap52 + }, + { // Entry 90 + (int)0x1.a0p5, + 0x1.3333333333334p52 + }, + { // Entry 91 + (int)0x1.a0p5, + 0x1.4cccccccccccep52 + }, + { // Entry 92 + (int)0x1.a0p5, + 0x1.6666666666668p52 + }, + { // Entry 93 + (int)0x1.a0p5, + 0x1.8000000000002p52 + }, + { // Entry 94 + (int)0x1.a0p5, + 0x1.999999999999cp52 + }, + { // Entry 95 + (int)0x1.a0p5, + 0x1.b333333333336p52 + }, + { // Entry 96 + (int)0x1.a0p5, + 0x1.cccccccccccd0p52 + }, + { // Entry 97 + (int)0x1.a0p5, + 0x1.e66666666666ap52 + }, + { // Entry 98 + (int)0x1.a8p5, + 0x1.0p53 + }, + { // Entry 99 + (int)0x1.a8p5, + 0x1.0p53 + }, + { // Entry 100 + (int)0x1.a8p5, + 0x1.199999999999ap53 + }, + { // Entry 101 + (int)0x1.a8p5, + 0x1.3333333333334p53 + }, + { // Entry 102 + (int)0x1.a8p5, + 0x1.4cccccccccccep53 + }, + { // Entry 103 + (int)0x1.a8p5, + 0x1.6666666666668p53 + }, + { // Entry 104 + (int)0x1.a8p5, + 0x1.8000000000002p53 + }, + { // Entry 105 + (int)0x1.a8p5, + 0x1.999999999999cp53 + }, + { // Entry 106 + (int)0x1.a8p5, + 0x1.b333333333336p53 + }, + { // Entry 107 + (int)0x1.a8p5, + 0x1.cccccccccccd0p53 + }, + { // Entry 108 + (int)0x1.a8p5, + 0x1.e66666666666ap53 + }, + { // Entry 109 + (int)0x1.b0p5, + 0x1.0p54 + }, + { // Entry 110 + (int)-0x1.0080p10, + 0x1.0p-1026 + }, + { // Entry 111 + (int)-0x1.p10, + 0x1.d333333333334p-1024 + }, + { // Entry 112 + (int)-0x1.ff80p9, + 0x1.b333333333334p-1023 + }, + { // Entry 113 + (int)-0x1.ffp9, + 0x1.3e66666666667p-1022 + }, + { // Entry 114 + (int)-0x1.ffp9, + 0x1.a333333333334p-1022 + }, + { // Entry 115 + (int)-0x1.fe80p9, + 0x1.040p-1021 + }, + { // Entry 116 + (int)-0x1.fe80p9, + 0x1.3666666666666p-1021 + }, + { // Entry 117 + (int)-0x1.fe80p9, + 0x1.68cccccccccccp-1021 + }, + { // Entry 118 + (int)-0x1.fe80p9, + 0x1.9b33333333332p-1021 + }, + { // Entry 119 + (int)-0x1.fe80p9, + 0x1.cd99999999998p-1021 + }, + { // Entry 120 + (int)-0x1.fe80p9, + 0x1.ffffffffffffep-1021 + }, + { // Entry 121 + (int)0x1.90p5, + 0x1.fffffffffffffp50 + }, + { // Entry 122 + (int)0x1.98p5, + 0x1.0p51 + }, + { // Entry 123 + (int)0x1.98p5, + 0x1.0000000000001p51 + }, + { // Entry 124 + (int)0x1.98p5, + 0x1.fffffffffffffp51 + }, + { // Entry 125 + (int)0x1.a0p5, + 0x1.0p52 + }, + { // Entry 126 + (int)0x1.a0p5, + 0x1.0000000000001p52 + }, + { // Entry 127 + (int)0x1.a0p5, + 0x1.fffffffffffffp52 + }, + { // Entry 128 + (int)0x1.a8p5, + 0x1.0p53 + }, + { // Entry 129 + (int)0x1.a8p5, + 0x1.0000000000001p53 + }, + { // Entry 130 + (int)0x1.98p5, + -0x1.0000000000001p51 + }, + { // Entry 131 + (int)0x1.98p5, + -0x1.0p51 + }, + { // Entry 132 + (int)0x1.90p5, + -0x1.fffffffffffffp50 + }, + { // Entry 133 + (int)0x1.a0p5, + -0x1.0000000000001p52 + }, + { // Entry 134 + (int)0x1.a0p5, + -0x1.0p52 + }, + { // Entry 135 + (int)0x1.98p5, + -0x1.fffffffffffffp51 + }, + { // Entry 136 + (int)0x1.a8p5, + -0x1.0000000000001p53 + }, + { // Entry 137 + (int)0x1.a8p5, + -0x1.0p53 + }, + { // Entry 138 + (int)0x1.a0p5, + -0x1.fffffffffffffp52 + }, + { // Entry 139 + (int)0x1.ff80p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 140 + (int)0x1.ff80p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 141 + (int)-0x1.c0p2, + 0x1.fffffffffffffp-7 + }, + { // Entry 142 + (int)-0x1.80p2, + 0x1.0p-6 + }, + { // Entry 143 + (int)-0x1.80p2, + 0x1.0000000000001p-6 + }, + { // Entry 144 + (int)-0x1.80p2, + 0x1.fffffffffffffp-6 + }, + { // Entry 145 + (int)-0x1.40p2, + 0x1.0p-5 + }, + { // Entry 146 + (int)-0x1.40p2, + 0x1.0000000000001p-5 + }, + { // Entry 147 + (int)-0x1.40p2, + 0x1.fffffffffffffp-5 + }, + { // Entry 148 + (int)-0x1.p2, + 0x1.0p-4 + }, + { // Entry 149 + (int)-0x1.p2, + 0x1.0000000000001p-4 + }, + { // Entry 150 + (int)-0x1.p2, + 0x1.fffffffffffffp-4 + }, + { // Entry 151 + (int)-0x1.80p1, + 0x1.0p-3 + }, + { // Entry 152 + (int)-0x1.80p1, + 0x1.0000000000001p-3 + }, + { // Entry 153 + (int)-0x1.80p1, + 0x1.fffffffffffffp-3 + }, + { // Entry 154 + (int)-0x1.p1, + 0x1.0p-2 + }, + { // Entry 155 + (int)-0x1.p1, + 0x1.0000000000001p-2 + }, + { // Entry 156 + (int)-0x1.p1, + 0x1.fffffffffffffp-2 + }, + { // Entry 157 + (int)-0x1.p0, + 0x1.0p-1 + }, + { // Entry 158 + (int)-0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 159 + (int)-0x1.0c80p10, + -0x1.0p-1074 + }, + { // Entry 160 + (int)-0x1.fffffffcp30, + -0.0 + }, + { // Entry 161 + (int)-0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 162 + (int)-0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 163 + (int)0.0, + 0x1.0p0 + }, + { // Entry 164 + (int)0.0, + 0x1.0000000000001p0 + }, + { // Entry 165 + (int)0.0, + 0x1.fffffffffffffp0 + }, + { // Entry 166 + (int)0x1.p0, + 0x1.0p1 + }, + { // Entry 167 + (int)0x1.p0, + 0x1.0000000000001p1 + }, + { // Entry 168 + (int)0x1.p0, + 0x1.fffffffffffffp1 + }, + { // Entry 169 + (int)0x1.p1, + 0x1.0p2 + }, + { // Entry 170 + (int)0x1.p1, + 0x1.0000000000001p2 + }, + { // Entry 171 + (int)0x1.p1, + 0x1.fffffffffffffp2 + }, + { // Entry 172 + (int)0x1.80p1, + 0x1.0p3 + }, + { // Entry 173 + (int)0x1.80p1, + 0x1.0000000000001p3 + }, + { // Entry 174 + (int)0x1.80p1, + 0x1.fffffffffffffp3 + }, + { // Entry 175 + (int)0x1.p2, + 0x1.0p4 + }, + { // Entry 176 + (int)0x1.p2, + 0x1.0000000000001p4 + }, + { // Entry 177 + (int)0x1.p2, + 0x1.fffffffffffffp4 + }, + { // Entry 178 + (int)0x1.40p2, + 0x1.0p5 + }, + { // Entry 179 + (int)0x1.40p2, + 0x1.0000000000001p5 + }, + { // Entry 180 + (int)0x1.40p2, + 0x1.fffffffffffffp5 + }, + { // Entry 181 + (int)0x1.80p2, + 0x1.0p6 + }, + { // Entry 182 + (int)0x1.80p2, + 0x1.0000000000001p6 + }, + { // Entry 183 + (int)0x1.80p2, + 0x1.fffffffffffffp6 + }, + { // Entry 184 + (int)0x1.c0p2, + 0x1.0p7 + }, + { // Entry 185 + (int)0x1.c0p2, + 0x1.0000000000001p7 + }, + { // Entry 186 + (int)0x1.fffffffcp30, + HUGE_VAL + }, + { // Entry 187 + (int)0x1.fffffffcp30, + -HUGE_VAL + }, + { // Entry 188 + (int)-0x1.fffffffcp30, + 0.0 + }, + { // Entry 189 + (int)-0x1.fffffffcp30, + -0.0 + }, + { // Entry 190 + (int)0x1.ff80p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 191 + (int)0x1.ff80p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 192 + (int)0x1.ff80p9, + 0x1.ffffffffffffep1023 + }, + { // Entry 193 + (int)0x1.ff80p9, + -0x1.ffffffffffffep1023 + }, + { // Entry 194 + (int)0x1.p0, + 0x1.921fb54442d18p1 + }, + { // Entry 195 + (int)0x1.p0, + -0x1.921fb54442d18p1 + }, + { // Entry 196 + (int)0.0, + 0x1.921fb54442d18p0 + }, + { // Entry 197 + (int)0.0, + -0x1.921fb54442d18p0 + }, + { // Entry 198 + (int)0.0, + 0x1.0000000000001p0 + }, + { // Entry 199 + (int)0.0, + -0x1.0000000000001p0 + }, + { // Entry 200 + (int)0.0, + 0x1.0p0 + }, + { // Entry 201 + (int)0.0, + -0x1.0p0 + }, + { // Entry 202 + (int)-0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 203 + (int)-0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 204 + (int)-0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 205 + (int)-0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 206 + (int)-0x1.ffp9, + 0x1.0000000000001p-1022 + }, + { // Entry 207 + (int)-0x1.ffp9, + -0x1.0000000000001p-1022 + }, + { // Entry 208 + (int)-0x1.ffp9, + 0x1.0p-1022 + }, + { // Entry 209 + (int)-0x1.ffp9, + -0x1.0p-1022 + }, + { // Entry 210 + (int)-0x1.ff80p9, + 0x1.ffffffffffffep-1023 + }, + { // Entry 211 + (int)-0x1.ff80p9, + -0x1.ffffffffffffep-1023 + }, + { // Entry 212 + (int)-0x1.ff80p9, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 213 + (int)-0x1.ff80p9, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 214 + (int)-0x1.0c40p10, + 0x1.0p-1073 + }, + { // Entry 215 + (int)-0x1.0c40p10, + -0x1.0p-1073 + }, + { // Entry 216 + (int)-0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 217 + (int)-0x1.0c80p10, + -0x1.0p-1074 + } +}; diff --git a/tests/math_data/ilogbf_intel_data.h b/tests/math_data/ilogbf_intel_data.h new file mode 100644 index 000000000..ef08fa3fe --- /dev/null +++ b/tests/math_data/ilogbf_intel_data.h @@ -0,0 +1,714 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_int_1_t g_ilogbf_intel_data[] = { + { // Entry 0 + (int)0x1.90p6, + 0x1.p100 + }, + { // Entry 1 + (int)0x1.90p6, + 0x1.19999ap100 + }, + { // Entry 2 + (int)0x1.90p6, + 0x1.333334p100 + }, + { // Entry 3 + (int)0x1.90p6, + 0x1.4ccccep100 + }, + { // Entry 4 + (int)0x1.90p6, + 0x1.666668p100 + }, + { // Entry 5 + (int)0x1.90p6, + 0x1.800002p100 + }, + { // Entry 6 + (int)0x1.90p6, + 0x1.99999cp100 + }, + { // Entry 7 + (int)0x1.90p6, + 0x1.b33336p100 + }, + { // Entry 8 + (int)0x1.90p6, + 0x1.ccccd0p100 + }, + { // Entry 9 + (int)0x1.90p6, + 0x1.e6666ap100 + }, + { // Entry 10 + (int)0x1.94p6, + 0x1.p101 + }, + { // Entry 11 + (int)0x1.94p6, + -0x1.p101 + }, + { // Entry 12 + (int)0x1.90p6, + -0x1.e66666p100 + }, + { // Entry 13 + (int)0x1.90p6, + -0x1.ccccccp100 + }, + { // Entry 14 + (int)0x1.90p6, + -0x1.b33332p100 + }, + { // Entry 15 + (int)0x1.90p6, + -0x1.999998p100 + }, + { // Entry 16 + (int)0x1.90p6, + -0x1.7ffffep100 + }, + { // Entry 17 + (int)0x1.90p6, + -0x1.666664p100 + }, + { // Entry 18 + (int)0x1.90p6, + -0x1.4ccccap100 + }, + { // Entry 19 + (int)0x1.90p6, + -0x1.333330p100 + }, + { // Entry 20 + (int)0x1.90p6, + -0x1.199996p100 + }, + { // Entry 21 + (int)0x1.90p6, + -0x1.p100 + }, + { // Entry 22 + (int)0x1.50p4, + 0x1.p21 + }, + { // Entry 23 + (int)0x1.50p4, + 0x1.19999ap21 + }, + { // Entry 24 + (int)0x1.50p4, + 0x1.333334p21 + }, + { // Entry 25 + (int)0x1.50p4, + 0x1.4ccccep21 + }, + { // Entry 26 + (int)0x1.50p4, + 0x1.666668p21 + }, + { // Entry 27 + (int)0x1.50p4, + 0x1.800002p21 + }, + { // Entry 28 + (int)0x1.50p4, + 0x1.99999cp21 + }, + { // Entry 29 + (int)0x1.50p4, + 0x1.b33336p21 + }, + { // Entry 30 + (int)0x1.50p4, + 0x1.ccccd0p21 + }, + { // Entry 31 + (int)0x1.50p4, + 0x1.e6666ap21 + }, + { // Entry 32 + (int)0x1.60p4, + 0x1.p22 + }, + { // Entry 33 + (int)0x1.60p4, + 0x1.p22 + }, + { // Entry 34 + (int)0x1.60p4, + 0x1.19999ap22 + }, + { // Entry 35 + (int)0x1.60p4, + 0x1.333334p22 + }, + { // Entry 36 + (int)0x1.60p4, + 0x1.4ccccep22 + }, + { // Entry 37 + (int)0x1.60p4, + 0x1.666668p22 + }, + { // Entry 38 + (int)0x1.60p4, + 0x1.800002p22 + }, + { // Entry 39 + (int)0x1.60p4, + 0x1.99999cp22 + }, + { // Entry 40 + (int)0x1.60p4, + 0x1.b33336p22 + }, + { // Entry 41 + (int)0x1.60p4, + 0x1.ccccd0p22 + }, + { // Entry 42 + (int)0x1.60p4, + 0x1.e6666ap22 + }, + { // Entry 43 + (int)0x1.70p4, + 0x1.p23 + }, + { // Entry 44 + (int)0x1.70p4, + 0x1.p23 + }, + { // Entry 45 + (int)0x1.70p4, + 0x1.19999ap23 + }, + { // Entry 46 + (int)0x1.70p4, + 0x1.333334p23 + }, + { // Entry 47 + (int)0x1.70p4, + 0x1.4ccccep23 + }, + { // Entry 48 + (int)0x1.70p4, + 0x1.666668p23 + }, + { // Entry 49 + (int)0x1.70p4, + 0x1.800002p23 + }, + { // Entry 50 + (int)0x1.70p4, + 0x1.99999cp23 + }, + { // Entry 51 + (int)0x1.70p4, + 0x1.b33336p23 + }, + { // Entry 52 + (int)0x1.70p4, + 0x1.ccccd0p23 + }, + { // Entry 53 + (int)0x1.70p4, + 0x1.e6666ap23 + }, + { // Entry 54 + (int)0x1.80p4, + 0x1.p24 + }, + { // Entry 55 + (int)0x1.80p4, + 0x1.p24 + }, + { // Entry 56 + (int)0x1.80p4, + 0x1.19999ap24 + }, + { // Entry 57 + (int)0x1.80p4, + 0x1.333334p24 + }, + { // Entry 58 + (int)0x1.80p4, + 0x1.4ccccep24 + }, + { // Entry 59 + (int)0x1.80p4, + 0x1.666668p24 + }, + { // Entry 60 + (int)0x1.80p4, + 0x1.800002p24 + }, + { // Entry 61 + (int)0x1.80p4, + 0x1.99999cp24 + }, + { // Entry 62 + (int)0x1.80p4, + 0x1.b33336p24 + }, + { // Entry 63 + (int)0x1.80p4, + 0x1.ccccd0p24 + }, + { // Entry 64 + (int)0x1.80p4, + 0x1.e6666ap24 + }, + { // Entry 65 + (int)0x1.90p4, + 0x1.p25 + }, + { // Entry 66 + (int)-0x1.04p7, + 0x1.p-130 + }, + { // Entry 67 + (int)-0x1.p7, + 0x1.d33330p-128 + }, + { // Entry 68 + (int)-0x1.fcp6, + 0x1.b33330p-127 + }, + { // Entry 69 + (int)-0x1.f8p6, + 0x1.3e6664p-126 + }, + { // Entry 70 + (int)-0x1.f8p6, + 0x1.a33330p-126 + }, + { // Entry 71 + (int)-0x1.f4p6, + 0x1.03fffep-125 + }, + { // Entry 72 + (int)-0x1.f4p6, + 0x1.366664p-125 + }, + { // Entry 73 + (int)-0x1.f4p6, + 0x1.68cccap-125 + }, + { // Entry 74 + (int)-0x1.f4p6, + 0x1.9b3330p-125 + }, + { // Entry 75 + (int)-0x1.f4p6, + 0x1.cd9996p-125 + }, + { // Entry 76 + (int)-0x1.f4p6, + 0x1.fffffcp-125 + }, + { // Entry 77 + (int)0x1.50p4, + 0x1.fffffep21 + }, + { // Entry 78 + (int)0x1.60p4, + 0x1.p22 + }, + { // Entry 79 + (int)0x1.60p4, + 0x1.000002p22 + }, + { // Entry 80 + (int)0x1.60p4, + 0x1.fffffep22 + }, + { // Entry 81 + (int)0x1.70p4, + 0x1.p23 + }, + { // Entry 82 + (int)0x1.70p4, + 0x1.000002p23 + }, + { // Entry 83 + (int)0x1.70p4, + 0x1.fffffep23 + }, + { // Entry 84 + (int)0x1.80p4, + 0x1.p24 + }, + { // Entry 85 + (int)0x1.80p4, + 0x1.000002p24 + }, + { // Entry 86 + (int)0x1.60p4, + -0x1.000002p22 + }, + { // Entry 87 + (int)0x1.60p4, + -0x1.p22 + }, + { // Entry 88 + (int)0x1.50p4, + -0x1.fffffep21 + }, + { // Entry 89 + (int)0x1.70p4, + -0x1.000002p23 + }, + { // Entry 90 + (int)0x1.70p4, + -0x1.p23 + }, + { // Entry 91 + (int)0x1.60p4, + -0x1.fffffep22 + }, + { // Entry 92 + (int)0x1.80p4, + -0x1.000002p24 + }, + { // Entry 93 + (int)0x1.80p4, + -0x1.p24 + }, + { // Entry 94 + (int)0x1.70p4, + -0x1.fffffep23 + }, + { // Entry 95 + (int)0x1.fcp6, + 0x1.fffffep127 + }, + { // Entry 96 + (int)0x1.fcp6, + -0x1.fffffep127 + }, + { // Entry 97 + (int)-0x1.c0p2, + 0x1.fffffep-7 + }, + { // Entry 98 + (int)-0x1.80p2, + 0x1.p-6 + }, + { // Entry 99 + (int)-0x1.80p2, + 0x1.000002p-6 + }, + { // Entry 100 + (int)-0x1.80p2, + 0x1.fffffep-6 + }, + { // Entry 101 + (int)-0x1.40p2, + 0x1.p-5 + }, + { // Entry 102 + (int)-0x1.40p2, + 0x1.000002p-5 + }, + { // Entry 103 + (int)-0x1.40p2, + 0x1.fffffep-5 + }, + { // Entry 104 + (int)-0x1.p2, + 0x1.p-4 + }, + { // Entry 105 + (int)-0x1.p2, + 0x1.000002p-4 + }, + { // Entry 106 + (int)-0x1.p2, + 0x1.fffffep-4 + }, + { // Entry 107 + (int)-0x1.80p1, + 0x1.p-3 + }, + { // Entry 108 + (int)-0x1.80p1, + 0x1.000002p-3 + }, + { // Entry 109 + (int)-0x1.80p1, + 0x1.fffffep-3 + }, + { // Entry 110 + (int)-0x1.p1, + 0x1.p-2 + }, + { // Entry 111 + (int)-0x1.p1, + 0x1.000002p-2 + }, + { // Entry 112 + (int)-0x1.p1, + 0x1.fffffep-2 + }, + { // Entry 113 + (int)-0x1.p0, + 0x1.p-1 + }, + { // Entry 114 + (int)-0x1.p0, + 0x1.000002p-1 + }, + { // Entry 115 + (int)-0x1.2ap7, + -0x1.p-149 + }, + { // Entry 116 + (int)-0x1.fffffffcp30, + 0.0 + }, + { // Entry 117 + (int)-0x1.2ap7, + 0x1.p-149 + }, + { // Entry 118 + (int)-0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 119 + (int)0.0, + 0x1.p0 + }, + { // Entry 120 + (int)0.0, + 0x1.000002p0 + }, + { // Entry 121 + (int)0.0, + 0x1.fffffep0 + }, + { // Entry 122 + (int)0x1.p0, + 0x1.p1 + }, + { // Entry 123 + (int)0x1.p0, + 0x1.000002p1 + }, + { // Entry 124 + (int)0x1.p0, + 0x1.fffffep1 + }, + { // Entry 125 + (int)0x1.p1, + 0x1.p2 + }, + { // Entry 126 + (int)0x1.p1, + 0x1.000002p2 + }, + { // Entry 127 + (int)0x1.p1, + 0x1.fffffep2 + }, + { // Entry 128 + (int)0x1.80p1, + 0x1.p3 + }, + { // Entry 129 + (int)0x1.80p1, + 0x1.000002p3 + }, + { // Entry 130 + (int)0x1.80p1, + 0x1.fffffep3 + }, + { // Entry 131 + (int)0x1.p2, + 0x1.p4 + }, + { // Entry 132 + (int)0x1.p2, + 0x1.000002p4 + }, + { // Entry 133 + (int)0x1.p2, + 0x1.fffffep4 + }, + { // Entry 134 + (int)0x1.40p2, + 0x1.p5 + }, + { // Entry 135 + (int)0x1.40p2, + 0x1.000002p5 + }, + { // Entry 136 + (int)0x1.40p2, + 0x1.fffffep5 + }, + { // Entry 137 + (int)0x1.80p2, + 0x1.p6 + }, + { // Entry 138 + (int)0x1.80p2, + 0x1.000002p6 + }, + { // Entry 139 + (int)0x1.80p2, + 0x1.fffffep6 + }, + { // Entry 140 + (int)0x1.c0p2, + 0x1.p7 + }, + { // Entry 141 + (int)0x1.c0p2, + 0x1.000002p7 + }, + { // Entry 142 + (int)0x1.fffffffcp30, + HUGE_VALF + }, + { // Entry 143 + (int)0x1.fffffffcp30, + -HUGE_VALF + }, + { // Entry 144 + (int)-0x1.fffffffcp30, + 0.0f + }, + { // Entry 145 + (int)-0x1.fffffffcp30, + -0.0f + }, + { // Entry 146 + (int)0x1.fcp6, + 0x1.fffffep127 + }, + { // Entry 147 + (int)0x1.fcp6, + -0x1.fffffep127 + }, + { // Entry 148 + (int)0x1.fcp6, + 0x1.fffffcp127 + }, + { // Entry 149 + (int)0x1.fcp6, + -0x1.fffffcp127 + }, + { // Entry 150 + (int)0x1.p0, + 0x1.921fb6p1 + }, + { // Entry 151 + (int)0x1.p0, + -0x1.921fb6p1 + }, + { // Entry 152 + (int)0.0, + 0x1.921fb6p0 + }, + { // Entry 153 + (int)0.0, + -0x1.921fb6p0 + }, + { // Entry 154 + (int)0.0, + 0x1.000002p0 + }, + { // Entry 155 + (int)0.0, + -0x1.000002p0 + }, + { // Entry 156 + (int)0.0, + 0x1.p0 + }, + { // Entry 157 + (int)0.0, + -0x1.p0 + }, + { // Entry 158 + (int)-0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 159 + (int)-0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 160 + (int)-0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 161 + (int)-0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 162 + (int)-0x1.f8p6, + 0x1.000002p-126 + }, + { // Entry 163 + (int)-0x1.f8p6, + -0x1.000002p-126 + }, + { // Entry 164 + (int)-0x1.f8p6, + 0x1.p-126 + }, + { // Entry 165 + (int)-0x1.f8p6, + -0x1.p-126 + }, + { // Entry 166 + (int)-0x1.fcp6, + 0x1.fffffcp-127 + }, + { // Entry 167 + (int)-0x1.fcp6, + -0x1.fffffcp-127 + }, + { // Entry 168 + (int)-0x1.fcp6, + 0x1.fffff8p-127 + }, + { // Entry 169 + (int)-0x1.fcp6, + -0x1.fffff8p-127 + }, + { // Entry 170 + (int)-0x1.28p7, + 0x1.p-148 + }, + { // Entry 171 + (int)-0x1.28p7, + -0x1.p-148 + }, + { // Entry 172 + (int)-0x1.2ap7, + 0x1.p-149 + }, + { // Entry 173 + (int)-0x1.2ap7, + -0x1.p-149 + } +}; diff --git a/tests/math_data/ldexp_intel_data.h b/tests/math_data/ldexp_intel_data.h new file mode 100644 index 000000000..5d4ad1acc --- /dev/null +++ b/tests/math_data/ldexp_intel_data.h @@ -0,0 +1,4348 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_ldexp_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074, + (int)-10 + }, + { // Entry 1 + -0x1.55555555555560p-1024, + -0x1.5555555555556p-2, + (int)-1022 + }, + { // Entry 2 + -0x1.6db6db6db6db70p-1023, + -0x1.6db6db6db6db7p-1, + (int)-1022 + }, + { // Entry 3 + -0x1.8e38e38e38e390p-1023, + -0x1.8e38e38e38e39p-1, + (int)-1022 + }, + { // Entry 4 + 0.0, + 0x1.0p-1074, + (int)-1 + }, + { // Entry 5 + 0.0, + 0x1.0p-1074, + (int)-10 + }, + { // Entry 6 + 0.0, + 0x1.0p-1074, + (int)-47 + }, + { // Entry 7 + 0x1.p-1064, + 0x1.0p-1074, + (int)10 + }, + { // Entry 8 + 0x1.p-51, + 0x1.0p-1074, + (int)1023 + }, + { // Entry 9 + 0x1.29e4129e4129e0p-1024, + 0x1.29e4129e4129ep-7, + (int)-1017 + }, + { // Entry 10 + HUGE_VAL, + 0x1.8e147ae147ae1p0, + (int)2147483647 + }, + { // Entry 11 + 0.0, + 0x1.dddddddddddddp-2, + (int)-1073 + }, + { // Entry 12 + 0x1.e0p-48, + 0x1.ep-1071, + (int)1023 + }, + { // Entry 13 + 0.0, + 0x1.f7df7df7df7dfp-2, + (int)-1073 + }, + { // Entry 14 + 0.0, + 0x1.ffffffffffff0p-2, + (int)-1073 + }, + { // Entry 15 + 0x1.ffffffffffffc0p-1033, + 0x1.ffffffffffffcp-1023, + (int)-10 + }, + { // Entry 16 + 0x1.ffffffffffffc0p-1022, + 0x1.ffffffffffffcp-1023, + (int)1 + }, + { // Entry 17 + 0x1.ffffffffffffe0p-1070, + 0x1.ffffffffffffep-1023, + (int)-47 + }, + { // Entry 18 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 19 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)2147483647 + }, + { // Entry 20 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)2147483647 + }, + { // Entry 21 + -0x1.p-10, + -0x1.0p0, + (int)-10 + }, + { // Entry 22 + -0x1.p-9, + -0x1.0p0, + (int)-9 + }, + { // Entry 23 + -0x1.p-8, + -0x1.0p0, + (int)-8 + }, + { // Entry 24 + -0x1.p-7, + -0x1.0p0, + (int)-7 + }, + { // Entry 25 + -0x1.p-6, + -0x1.0p0, + (int)-6 + }, + { // Entry 26 + -0x1.p-5, + -0x1.0p0, + (int)-5 + }, + { // Entry 27 + -0x1.p-4, + -0x1.0p0, + (int)-4 + }, + { // Entry 28 + -0x1.p-3, + -0x1.0p0, + (int)-3 + }, + { // Entry 29 + -0x1.p-2, + -0x1.0p0, + (int)-2 + }, + { // Entry 30 + -0x1.p-1, + -0x1.0p0, + (int)-1 + }, + { // Entry 31 + -0x1.p0, + -0x1.0p0, + (int)0 + }, + { // Entry 32 + -0x1.p1, + -0x1.0p0, + (int)1 + }, + { // Entry 33 + -0x1.p2, + -0x1.0p0, + (int)2 + }, + { // Entry 34 + -0x1.p3, + -0x1.0p0, + (int)3 + }, + { // Entry 35 + -0x1.p4, + -0x1.0p0, + (int)4 + }, + { // Entry 36 + -0x1.p5, + -0x1.0p0, + (int)5 + }, + { // Entry 37 + -0x1.p6, + -0x1.0p0, + (int)6 + }, + { // Entry 38 + -0x1.p7, + -0x1.0p0, + (int)7 + }, + { // Entry 39 + -0x1.p8, + -0x1.0p0, + (int)8 + }, + { // Entry 40 + -0x1.p9, + -0x1.0p0, + (int)9 + }, + { // Entry 41 + -0x1.p10, + -0x1.0p0, + (int)10 + }, + { // Entry 42 + -0x1.d1745d1745d170p-11, + -0x1.d1745d1745d17p-1, + (int)-10 + }, + { // Entry 43 + -0x1.d1745d1745d170p-10, + -0x1.d1745d1745d17p-1, + (int)-9 + }, + { // Entry 44 + -0x1.d1745d1745d170p-9, + -0x1.d1745d1745d17p-1, + (int)-8 + }, + { // Entry 45 + -0x1.d1745d1745d170p-8, + -0x1.d1745d1745d17p-1, + (int)-7 + }, + { // Entry 46 + -0x1.d1745d1745d170p-7, + -0x1.d1745d1745d17p-1, + (int)-6 + }, + { // Entry 47 + -0x1.d1745d1745d170p-6, + -0x1.d1745d1745d17p-1, + (int)-5 + }, + { // Entry 48 + -0x1.d1745d1745d170p-5, + -0x1.d1745d1745d17p-1, + (int)-4 + }, + { // Entry 49 + -0x1.d1745d1745d170p-4, + -0x1.d1745d1745d17p-1, + (int)-3 + }, + { // Entry 50 + -0x1.d1745d1745d170p-3, + -0x1.d1745d1745d17p-1, + (int)-2 + }, + { // Entry 51 + -0x1.d1745d1745d170p-2, + -0x1.d1745d1745d17p-1, + (int)-1 + }, + { // Entry 52 + -0x1.d1745d1745d170p-1, + -0x1.d1745d1745d17p-1, + (int)0 + }, + { // Entry 53 + -0x1.d1745d1745d170p0, + -0x1.d1745d1745d17p-1, + (int)1 + }, + { // Entry 54 + -0x1.d1745d1745d170p1, + -0x1.d1745d1745d17p-1, + (int)2 + }, + { // Entry 55 + -0x1.d1745d1745d170p2, + -0x1.d1745d1745d17p-1, + (int)3 + }, + { // Entry 56 + -0x1.d1745d1745d170p3, + -0x1.d1745d1745d17p-1, + (int)4 + }, + { // Entry 57 + -0x1.d1745d1745d170p4, + -0x1.d1745d1745d17p-1, + (int)5 + }, + { // Entry 58 + -0x1.d1745d1745d170p5, + -0x1.d1745d1745d17p-1, + (int)6 + }, + { // Entry 59 + -0x1.d1745d1745d170p6, + -0x1.d1745d1745d17p-1, + (int)7 + }, + { // Entry 60 + -0x1.d1745d1745d170p7, + -0x1.d1745d1745d17p-1, + (int)8 + }, + { // Entry 61 + -0x1.d1745d1745d170p8, + -0x1.d1745d1745d17p-1, + (int)9 + }, + { // Entry 62 + -0x1.d1745d1745d170p9, + -0x1.d1745d1745d17p-1, + (int)10 + }, + { // Entry 63 + -0x1.a2e8ba2e8ba2e0p-11, + -0x1.a2e8ba2e8ba2ep-1, + (int)-10 + }, + { // Entry 64 + -0x1.a2e8ba2e8ba2e0p-10, + -0x1.a2e8ba2e8ba2ep-1, + (int)-9 + }, + { // Entry 65 + -0x1.a2e8ba2e8ba2e0p-9, + -0x1.a2e8ba2e8ba2ep-1, + (int)-8 + }, + { // Entry 66 + -0x1.a2e8ba2e8ba2e0p-8, + -0x1.a2e8ba2e8ba2ep-1, + (int)-7 + }, + { // Entry 67 + -0x1.a2e8ba2e8ba2e0p-7, + -0x1.a2e8ba2e8ba2ep-1, + (int)-6 + }, + { // Entry 68 + -0x1.a2e8ba2e8ba2e0p-6, + -0x1.a2e8ba2e8ba2ep-1, + (int)-5 + }, + { // Entry 69 + -0x1.a2e8ba2e8ba2e0p-5, + -0x1.a2e8ba2e8ba2ep-1, + (int)-4 + }, + { // Entry 70 + -0x1.a2e8ba2e8ba2e0p-4, + -0x1.a2e8ba2e8ba2ep-1, + (int)-3 + }, + { // Entry 71 + -0x1.a2e8ba2e8ba2e0p-3, + -0x1.a2e8ba2e8ba2ep-1, + (int)-2 + }, + { // Entry 72 + -0x1.a2e8ba2e8ba2e0p-2, + -0x1.a2e8ba2e8ba2ep-1, + (int)-1 + }, + { // Entry 73 + -0x1.a2e8ba2e8ba2e0p-1, + -0x1.a2e8ba2e8ba2ep-1, + (int)0 + }, + { // Entry 74 + -0x1.a2e8ba2e8ba2e0p0, + -0x1.a2e8ba2e8ba2ep-1, + (int)1 + }, + { // Entry 75 + -0x1.a2e8ba2e8ba2e0p1, + -0x1.a2e8ba2e8ba2ep-1, + (int)2 + }, + { // Entry 76 + -0x1.a2e8ba2e8ba2e0p2, + -0x1.a2e8ba2e8ba2ep-1, + (int)3 + }, + { // Entry 77 + -0x1.a2e8ba2e8ba2e0p3, + -0x1.a2e8ba2e8ba2ep-1, + (int)4 + }, + { // Entry 78 + -0x1.a2e8ba2e8ba2e0p4, + -0x1.a2e8ba2e8ba2ep-1, + (int)5 + }, + { // Entry 79 + -0x1.a2e8ba2e8ba2e0p5, + -0x1.a2e8ba2e8ba2ep-1, + (int)6 + }, + { // Entry 80 + -0x1.a2e8ba2e8ba2e0p6, + -0x1.a2e8ba2e8ba2ep-1, + (int)7 + }, + { // Entry 81 + -0x1.a2e8ba2e8ba2e0p7, + -0x1.a2e8ba2e8ba2ep-1, + (int)8 + }, + { // Entry 82 + -0x1.a2e8ba2e8ba2e0p8, + -0x1.a2e8ba2e8ba2ep-1, + (int)9 + }, + { // Entry 83 + -0x1.a2e8ba2e8ba2e0p9, + -0x1.a2e8ba2e8ba2ep-1, + (int)10 + }, + { // Entry 84 + -0x1.745d1745d17450p-11, + -0x1.745d1745d1745p-1, + (int)-10 + }, + { // Entry 85 + -0x1.745d1745d17450p-10, + -0x1.745d1745d1745p-1, + (int)-9 + }, + { // Entry 86 + -0x1.745d1745d17450p-9, + -0x1.745d1745d1745p-1, + (int)-8 + }, + { // Entry 87 + -0x1.745d1745d17450p-8, + -0x1.745d1745d1745p-1, + (int)-7 + }, + { // Entry 88 + -0x1.745d1745d17450p-7, + -0x1.745d1745d1745p-1, + (int)-6 + }, + { // Entry 89 + -0x1.745d1745d17450p-6, + -0x1.745d1745d1745p-1, + (int)-5 + }, + { // Entry 90 + -0x1.745d1745d17450p-5, + -0x1.745d1745d1745p-1, + (int)-4 + }, + { // Entry 91 + -0x1.745d1745d17450p-4, + -0x1.745d1745d1745p-1, + (int)-3 + }, + { // Entry 92 + -0x1.745d1745d17450p-3, + -0x1.745d1745d1745p-1, + (int)-2 + }, + { // Entry 93 + -0x1.745d1745d17450p-2, + -0x1.745d1745d1745p-1, + (int)-1 + }, + { // Entry 94 + -0x1.745d1745d17450p-1, + -0x1.745d1745d1745p-1, + (int)0 + }, + { // Entry 95 + -0x1.745d1745d17450p0, + -0x1.745d1745d1745p-1, + (int)1 + }, + { // Entry 96 + -0x1.745d1745d17450p1, + -0x1.745d1745d1745p-1, + (int)2 + }, + { // Entry 97 + -0x1.745d1745d17450p2, + -0x1.745d1745d1745p-1, + (int)3 + }, + { // Entry 98 + -0x1.745d1745d17450p3, + -0x1.745d1745d1745p-1, + (int)4 + }, + { // Entry 99 + -0x1.745d1745d17450p4, + -0x1.745d1745d1745p-1, + (int)5 + }, + { // Entry 100 + -0x1.745d1745d17450p5, + -0x1.745d1745d1745p-1, + (int)6 + }, + { // Entry 101 + -0x1.745d1745d17450p6, + -0x1.745d1745d1745p-1, + (int)7 + }, + { // Entry 102 + -0x1.745d1745d17450p7, + -0x1.745d1745d1745p-1, + (int)8 + }, + { // Entry 103 + -0x1.745d1745d17450p8, + -0x1.745d1745d1745p-1, + (int)9 + }, + { // Entry 104 + -0x1.745d1745d17450p9, + -0x1.745d1745d1745p-1, + (int)10 + }, + { // Entry 105 + -0x1.45d1745d1745c0p-11, + -0x1.45d1745d1745cp-1, + (int)-10 + }, + { // Entry 106 + -0x1.45d1745d1745c0p-10, + -0x1.45d1745d1745cp-1, + (int)-9 + }, + { // Entry 107 + -0x1.45d1745d1745c0p-9, + -0x1.45d1745d1745cp-1, + (int)-8 + }, + { // Entry 108 + -0x1.45d1745d1745c0p-8, + -0x1.45d1745d1745cp-1, + (int)-7 + }, + { // Entry 109 + -0x1.45d1745d1745c0p-7, + -0x1.45d1745d1745cp-1, + (int)-6 + }, + { // Entry 110 + -0x1.45d1745d1745c0p-6, + -0x1.45d1745d1745cp-1, + (int)-5 + }, + { // Entry 111 + -0x1.45d1745d1745c0p-5, + -0x1.45d1745d1745cp-1, + (int)-4 + }, + { // Entry 112 + -0x1.45d1745d1745c0p-4, + -0x1.45d1745d1745cp-1, + (int)-3 + }, + { // Entry 113 + -0x1.45d1745d1745c0p-3, + -0x1.45d1745d1745cp-1, + (int)-2 + }, + { // Entry 114 + -0x1.45d1745d1745c0p-2, + -0x1.45d1745d1745cp-1, + (int)-1 + }, + { // Entry 115 + -0x1.45d1745d1745c0p-1, + -0x1.45d1745d1745cp-1, + (int)0 + }, + { // Entry 116 + -0x1.45d1745d1745c0p0, + -0x1.45d1745d1745cp-1, + (int)1 + }, + { // Entry 117 + -0x1.45d1745d1745c0p1, + -0x1.45d1745d1745cp-1, + (int)2 + }, + { // Entry 118 + -0x1.45d1745d1745c0p2, + -0x1.45d1745d1745cp-1, + (int)3 + }, + { // Entry 119 + -0x1.45d1745d1745c0p3, + -0x1.45d1745d1745cp-1, + (int)4 + }, + { // Entry 120 + -0x1.45d1745d1745c0p4, + -0x1.45d1745d1745cp-1, + (int)5 + }, + { // Entry 121 + -0x1.45d1745d1745c0p5, + -0x1.45d1745d1745cp-1, + (int)6 + }, + { // Entry 122 + -0x1.45d1745d1745c0p6, + -0x1.45d1745d1745cp-1, + (int)7 + }, + { // Entry 123 + -0x1.45d1745d1745c0p7, + -0x1.45d1745d1745cp-1, + (int)8 + }, + { // Entry 124 + -0x1.45d1745d1745c0p8, + -0x1.45d1745d1745cp-1, + (int)9 + }, + { // Entry 125 + -0x1.45d1745d1745c0p9, + -0x1.45d1745d1745cp-1, + (int)10 + }, + { // Entry 126 + -0x1.1745d1745d1730p-11, + -0x1.1745d1745d173p-1, + (int)-10 + }, + { // Entry 127 + -0x1.1745d1745d1730p-10, + -0x1.1745d1745d173p-1, + (int)-9 + }, + { // Entry 128 + -0x1.1745d1745d1730p-9, + -0x1.1745d1745d173p-1, + (int)-8 + }, + { // Entry 129 + -0x1.1745d1745d1730p-8, + -0x1.1745d1745d173p-1, + (int)-7 + }, + { // Entry 130 + -0x1.1745d1745d1730p-7, + -0x1.1745d1745d173p-1, + (int)-6 + }, + { // Entry 131 + -0x1.1745d1745d1730p-6, + -0x1.1745d1745d173p-1, + (int)-5 + }, + { // Entry 132 + -0x1.1745d1745d1730p-5, + -0x1.1745d1745d173p-1, + (int)-4 + }, + { // Entry 133 + -0x1.1745d1745d1730p-4, + -0x1.1745d1745d173p-1, + (int)-3 + }, + { // Entry 134 + -0x1.1745d1745d1730p-3, + -0x1.1745d1745d173p-1, + (int)-2 + }, + { // Entry 135 + -0x1.1745d1745d1730p-2, + -0x1.1745d1745d173p-1, + (int)-1 + }, + { // Entry 136 + -0x1.1745d1745d1730p-1, + -0x1.1745d1745d173p-1, + (int)0 + }, + { // Entry 137 + -0x1.1745d1745d1730p0, + -0x1.1745d1745d173p-1, + (int)1 + }, + { // Entry 138 + -0x1.1745d1745d1730p1, + -0x1.1745d1745d173p-1, + (int)2 + }, + { // Entry 139 + -0x1.1745d1745d1730p2, + -0x1.1745d1745d173p-1, + (int)3 + }, + { // Entry 140 + -0x1.1745d1745d1730p3, + -0x1.1745d1745d173p-1, + (int)4 + }, + { // Entry 141 + -0x1.1745d1745d1730p4, + -0x1.1745d1745d173p-1, + (int)5 + }, + { // Entry 142 + -0x1.1745d1745d1730p5, + -0x1.1745d1745d173p-1, + (int)6 + }, + { // Entry 143 + -0x1.1745d1745d1730p6, + -0x1.1745d1745d173p-1, + (int)7 + }, + { // Entry 144 + -0x1.1745d1745d1730p7, + -0x1.1745d1745d173p-1, + (int)8 + }, + { // Entry 145 + -0x1.1745d1745d1730p8, + -0x1.1745d1745d173p-1, + (int)9 + }, + { // Entry 146 + -0x1.1745d1745d1730p9, + -0x1.1745d1745d173p-1, + (int)10 + }, + { // Entry 147 + -0x1.d1745d1745d140p-12, + -0x1.d1745d1745d14p-2, + (int)-10 + }, + { // Entry 148 + -0x1.d1745d1745d140p-11, + -0x1.d1745d1745d14p-2, + (int)-9 + }, + { // Entry 149 + -0x1.d1745d1745d140p-10, + -0x1.d1745d1745d14p-2, + (int)-8 + }, + { // Entry 150 + -0x1.d1745d1745d140p-9, + -0x1.d1745d1745d14p-2, + (int)-7 + }, + { // Entry 151 + -0x1.d1745d1745d140p-8, + -0x1.d1745d1745d14p-2, + (int)-6 + }, + { // Entry 152 + -0x1.d1745d1745d140p-7, + -0x1.d1745d1745d14p-2, + (int)-5 + }, + { // Entry 153 + -0x1.d1745d1745d140p-6, + -0x1.d1745d1745d14p-2, + (int)-4 + }, + { // Entry 154 + -0x1.d1745d1745d140p-5, + -0x1.d1745d1745d14p-2, + (int)-3 + }, + { // Entry 155 + -0x1.d1745d1745d140p-4, + -0x1.d1745d1745d14p-2, + (int)-2 + }, + { // Entry 156 + -0x1.d1745d1745d140p-3, + -0x1.d1745d1745d14p-2, + (int)-1 + }, + { // Entry 157 + -0x1.d1745d1745d140p-2, + -0x1.d1745d1745d14p-2, + (int)0 + }, + { // Entry 158 + -0x1.d1745d1745d140p-1, + -0x1.d1745d1745d14p-2, + (int)1 + }, + { // Entry 159 + -0x1.d1745d1745d140p0, + -0x1.d1745d1745d14p-2, + (int)2 + }, + { // Entry 160 + -0x1.d1745d1745d140p1, + -0x1.d1745d1745d14p-2, + (int)3 + }, + { // Entry 161 + -0x1.d1745d1745d140p2, + -0x1.d1745d1745d14p-2, + (int)4 + }, + { // Entry 162 + -0x1.d1745d1745d140p3, + -0x1.d1745d1745d14p-2, + (int)5 + }, + { // Entry 163 + -0x1.d1745d1745d140p4, + -0x1.d1745d1745d14p-2, + (int)6 + }, + { // Entry 164 + -0x1.d1745d1745d140p5, + -0x1.d1745d1745d14p-2, + (int)7 + }, + { // Entry 165 + -0x1.d1745d1745d140p6, + -0x1.d1745d1745d14p-2, + (int)8 + }, + { // Entry 166 + -0x1.d1745d1745d140p7, + -0x1.d1745d1745d14p-2, + (int)9 + }, + { // Entry 167 + -0x1.d1745d1745d140p8, + -0x1.d1745d1745d14p-2, + (int)10 + }, + { // Entry 168 + -0x1.745d1745d17420p-12, + -0x1.745d1745d1742p-2, + (int)-10 + }, + { // Entry 169 + -0x1.745d1745d17420p-11, + -0x1.745d1745d1742p-2, + (int)-9 + }, + { // Entry 170 + -0x1.745d1745d17420p-10, + -0x1.745d1745d1742p-2, + (int)-8 + }, + { // Entry 171 + -0x1.745d1745d17420p-9, + -0x1.745d1745d1742p-2, + (int)-7 + }, + { // Entry 172 + -0x1.745d1745d17420p-8, + -0x1.745d1745d1742p-2, + (int)-6 + }, + { // Entry 173 + -0x1.745d1745d17420p-7, + -0x1.745d1745d1742p-2, + (int)-5 + }, + { // Entry 174 + -0x1.745d1745d17420p-6, + -0x1.745d1745d1742p-2, + (int)-4 + }, + { // Entry 175 + -0x1.745d1745d17420p-5, + -0x1.745d1745d1742p-2, + (int)-3 + }, + { // Entry 176 + -0x1.745d1745d17420p-4, + -0x1.745d1745d1742p-2, + (int)-2 + }, + { // Entry 177 + -0x1.745d1745d17420p-3, + -0x1.745d1745d1742p-2, + (int)-1 + }, + { // Entry 178 + -0x1.745d1745d17420p-2, + -0x1.745d1745d1742p-2, + (int)0 + }, + { // Entry 179 + -0x1.745d1745d17420p-1, + -0x1.745d1745d1742p-2, + (int)1 + }, + { // Entry 180 + -0x1.745d1745d17420p0, + -0x1.745d1745d1742p-2, + (int)2 + }, + { // Entry 181 + -0x1.745d1745d17420p1, + -0x1.745d1745d1742p-2, + (int)3 + }, + { // Entry 182 + -0x1.745d1745d17420p2, + -0x1.745d1745d1742p-2, + (int)4 + }, + { // Entry 183 + -0x1.745d1745d17420p3, + -0x1.745d1745d1742p-2, + (int)5 + }, + { // Entry 184 + -0x1.745d1745d17420p4, + -0x1.745d1745d1742p-2, + (int)6 + }, + { // Entry 185 + -0x1.745d1745d17420p5, + -0x1.745d1745d1742p-2, + (int)7 + }, + { // Entry 186 + -0x1.745d1745d17420p6, + -0x1.745d1745d1742p-2, + (int)8 + }, + { // Entry 187 + -0x1.745d1745d17420p7, + -0x1.745d1745d1742p-2, + (int)9 + }, + { // Entry 188 + -0x1.745d1745d17420p8, + -0x1.745d1745d1742p-2, + (int)10 + }, + { // Entry 189 + -0x1.1745d1745d17p-12, + -0x1.1745d1745d170p-2, + (int)-10 + }, + { // Entry 190 + -0x1.1745d1745d17p-11, + -0x1.1745d1745d170p-2, + (int)-9 + }, + { // Entry 191 + -0x1.1745d1745d17p-10, + -0x1.1745d1745d170p-2, + (int)-8 + }, + { // Entry 192 + -0x1.1745d1745d17p-9, + -0x1.1745d1745d170p-2, + (int)-7 + }, + { // Entry 193 + -0x1.1745d1745d17p-8, + -0x1.1745d1745d170p-2, + (int)-6 + }, + { // Entry 194 + -0x1.1745d1745d17p-7, + -0x1.1745d1745d170p-2, + (int)-5 + }, + { // Entry 195 + -0x1.1745d1745d17p-6, + -0x1.1745d1745d170p-2, + (int)-4 + }, + { // Entry 196 + -0x1.1745d1745d17p-5, + -0x1.1745d1745d170p-2, + (int)-3 + }, + { // Entry 197 + -0x1.1745d1745d17p-4, + -0x1.1745d1745d170p-2, + (int)-2 + }, + { // Entry 198 + -0x1.1745d1745d17p-3, + -0x1.1745d1745d170p-2, + (int)-1 + }, + { // Entry 199 + -0x1.1745d1745d17p-2, + -0x1.1745d1745d170p-2, + (int)0 + }, + { // Entry 200 + -0x1.1745d1745d17p-1, + -0x1.1745d1745d170p-2, + (int)1 + }, + { // Entry 201 + -0x1.1745d1745d17p0, + -0x1.1745d1745d170p-2, + (int)2 + }, + { // Entry 202 + -0x1.1745d1745d17p1, + -0x1.1745d1745d170p-2, + (int)3 + }, + { // Entry 203 + -0x1.1745d1745d17p2, + -0x1.1745d1745d170p-2, + (int)4 + }, + { // Entry 204 + -0x1.1745d1745d17p3, + -0x1.1745d1745d170p-2, + (int)5 + }, + { // Entry 205 + -0x1.1745d1745d17p4, + -0x1.1745d1745d170p-2, + (int)6 + }, + { // Entry 206 + -0x1.1745d1745d17p5, + -0x1.1745d1745d170p-2, + (int)7 + }, + { // Entry 207 + -0x1.1745d1745d17p6, + -0x1.1745d1745d170p-2, + (int)8 + }, + { // Entry 208 + -0x1.1745d1745d17p7, + -0x1.1745d1745d170p-2, + (int)9 + }, + { // Entry 209 + -0x1.1745d1745d17p8, + -0x1.1745d1745d170p-2, + (int)10 + }, + { // Entry 210 + -0x1.745d1745d173d0p-13, + -0x1.745d1745d173dp-3, + (int)-10 + }, + { // Entry 211 + -0x1.745d1745d173d0p-12, + -0x1.745d1745d173dp-3, + (int)-9 + }, + { // Entry 212 + -0x1.745d1745d173d0p-11, + -0x1.745d1745d173dp-3, + (int)-8 + }, + { // Entry 213 + -0x1.745d1745d173d0p-10, + -0x1.745d1745d173dp-3, + (int)-7 + }, + { // Entry 214 + -0x1.745d1745d173d0p-9, + -0x1.745d1745d173dp-3, + (int)-6 + }, + { // Entry 215 + -0x1.745d1745d173d0p-8, + -0x1.745d1745d173dp-3, + (int)-5 + }, + { // Entry 216 + -0x1.745d1745d173d0p-7, + -0x1.745d1745d173dp-3, + (int)-4 + }, + { // Entry 217 + -0x1.745d1745d173d0p-6, + -0x1.745d1745d173dp-3, + (int)-3 + }, + { // Entry 218 + -0x1.745d1745d173d0p-5, + -0x1.745d1745d173dp-3, + (int)-2 + }, + { // Entry 219 + -0x1.745d1745d173d0p-4, + -0x1.745d1745d173dp-3, + (int)-1 + }, + { // Entry 220 + -0x1.745d1745d173d0p-3, + -0x1.745d1745d173dp-3, + (int)0 + }, + { // Entry 221 + -0x1.745d1745d173d0p-2, + -0x1.745d1745d173dp-3, + (int)1 + }, + { // Entry 222 + -0x1.745d1745d173d0p-1, + -0x1.745d1745d173dp-3, + (int)2 + }, + { // Entry 223 + -0x1.745d1745d173d0p0, + -0x1.745d1745d173dp-3, + (int)3 + }, + { // Entry 224 + -0x1.745d1745d173d0p1, + -0x1.745d1745d173dp-3, + (int)4 + }, + { // Entry 225 + -0x1.745d1745d173d0p2, + -0x1.745d1745d173dp-3, + (int)5 + }, + { // Entry 226 + -0x1.745d1745d173d0p3, + -0x1.745d1745d173dp-3, + (int)6 + }, + { // Entry 227 + -0x1.745d1745d173d0p4, + -0x1.745d1745d173dp-3, + (int)7 + }, + { // Entry 228 + -0x1.745d1745d173d0p5, + -0x1.745d1745d173dp-3, + (int)8 + }, + { // Entry 229 + -0x1.745d1745d173d0p6, + -0x1.745d1745d173dp-3, + (int)9 + }, + { // Entry 230 + -0x1.745d1745d173d0p7, + -0x1.745d1745d173dp-3, + (int)10 + }, + { // Entry 231 + -0x1.745d1745d17340p-14, + -0x1.745d1745d1734p-4, + (int)-10 + }, + { // Entry 232 + -0x1.745d1745d17340p-13, + -0x1.745d1745d1734p-4, + (int)-9 + }, + { // Entry 233 + -0x1.745d1745d17340p-12, + -0x1.745d1745d1734p-4, + (int)-8 + }, + { // Entry 234 + -0x1.745d1745d17340p-11, + -0x1.745d1745d1734p-4, + (int)-7 + }, + { // Entry 235 + -0x1.745d1745d17340p-10, + -0x1.745d1745d1734p-4, + (int)-6 + }, + { // Entry 236 + -0x1.745d1745d17340p-9, + -0x1.745d1745d1734p-4, + (int)-5 + }, + { // Entry 237 + -0x1.745d1745d17340p-8, + -0x1.745d1745d1734p-4, + (int)-4 + }, + { // Entry 238 + -0x1.745d1745d17340p-7, + -0x1.745d1745d1734p-4, + (int)-3 + }, + { // Entry 239 + -0x1.745d1745d17340p-6, + -0x1.745d1745d1734p-4, + (int)-2 + }, + { // Entry 240 + -0x1.745d1745d17340p-5, + -0x1.745d1745d1734p-4, + (int)-1 + }, + { // Entry 241 + -0x1.745d1745d17340p-4, + -0x1.745d1745d1734p-4, + (int)0 + }, + { // Entry 242 + -0x1.745d1745d17340p-3, + -0x1.745d1745d1734p-4, + (int)1 + }, + { // Entry 243 + -0x1.745d1745d17340p-2, + -0x1.745d1745d1734p-4, + (int)2 + }, + { // Entry 244 + -0x1.745d1745d17340p-1, + -0x1.745d1745d1734p-4, + (int)3 + }, + { // Entry 245 + -0x1.745d1745d17340p0, + -0x1.745d1745d1734p-4, + (int)4 + }, + { // Entry 246 + -0x1.745d1745d17340p1, + -0x1.745d1745d1734p-4, + (int)5 + }, + { // Entry 247 + -0x1.745d1745d17340p2, + -0x1.745d1745d1734p-4, + (int)6 + }, + { // Entry 248 + -0x1.745d1745d17340p3, + -0x1.745d1745d1734p-4, + (int)7 + }, + { // Entry 249 + -0x1.745d1745d17340p4, + -0x1.745d1745d1734p-4, + (int)8 + }, + { // Entry 250 + -0x1.745d1745d17340p5, + -0x1.745d1745d1734p-4, + (int)9 + }, + { // Entry 251 + -0x1.745d1745d17340p6, + -0x1.745d1745d1734p-4, + (int)10 + }, + { // Entry 252 + 0x1.20p-62, + 0x1.2p-52, + (int)-10 + }, + { // Entry 253 + 0x1.20p-61, + 0x1.2p-52, + (int)-9 + }, + { // Entry 254 + 0x1.20p-60, + 0x1.2p-52, + (int)-8 + }, + { // Entry 255 + 0x1.20p-59, + 0x1.2p-52, + (int)-7 + }, + { // Entry 256 + 0x1.20p-58, + 0x1.2p-52, + (int)-6 + }, + { // Entry 257 + 0x1.20p-57, + 0x1.2p-52, + (int)-5 + }, + { // Entry 258 + 0x1.20p-56, + 0x1.2p-52, + (int)-4 + }, + { // Entry 259 + 0x1.20p-55, + 0x1.2p-52, + (int)-3 + }, + { // Entry 260 + 0x1.20p-54, + 0x1.2p-52, + (int)-2 + }, + { // Entry 261 + 0x1.20p-53, + 0x1.2p-52, + (int)-1 + }, + { // Entry 262 + 0x1.20p-52, + 0x1.2p-52, + (int)0 + }, + { // Entry 263 + 0x1.20p-51, + 0x1.2p-52, + (int)1 + }, + { // Entry 264 + 0x1.20p-50, + 0x1.2p-52, + (int)2 + }, + { // Entry 265 + 0x1.20p-49, + 0x1.2p-52, + (int)3 + }, + { // Entry 266 + 0x1.20p-48, + 0x1.2p-52, + (int)4 + }, + { // Entry 267 + 0x1.20p-47, + 0x1.2p-52, + (int)5 + }, + { // Entry 268 + 0x1.20p-46, + 0x1.2p-52, + (int)6 + }, + { // Entry 269 + 0x1.20p-45, + 0x1.2p-52, + (int)7 + }, + { // Entry 270 + 0x1.20p-44, + 0x1.2p-52, + (int)8 + }, + { // Entry 271 + 0x1.20p-43, + 0x1.2p-52, + (int)9 + }, + { // Entry 272 + 0x1.20p-42, + 0x1.2p-52, + (int)10 + }, + { // Entry 273 + 0x1.745d1745d17580p-14, + 0x1.745d1745d1758p-4, + (int)-10 + }, + { // Entry 274 + 0x1.745d1745d17580p-13, + 0x1.745d1745d1758p-4, + (int)-9 + }, + { // Entry 275 + 0x1.745d1745d17580p-12, + 0x1.745d1745d1758p-4, + (int)-8 + }, + { // Entry 276 + 0x1.745d1745d17580p-11, + 0x1.745d1745d1758p-4, + (int)-7 + }, + { // Entry 277 + 0x1.745d1745d17580p-10, + 0x1.745d1745d1758p-4, + (int)-6 + }, + { // Entry 278 + 0x1.745d1745d17580p-9, + 0x1.745d1745d1758p-4, + (int)-5 + }, + { // Entry 279 + 0x1.745d1745d17580p-8, + 0x1.745d1745d1758p-4, + (int)-4 + }, + { // Entry 280 + 0x1.745d1745d17580p-7, + 0x1.745d1745d1758p-4, + (int)-3 + }, + { // Entry 281 + 0x1.745d1745d17580p-6, + 0x1.745d1745d1758p-4, + (int)-2 + }, + { // Entry 282 + 0x1.745d1745d17580p-5, + 0x1.745d1745d1758p-4, + (int)-1 + }, + { // Entry 283 + 0x1.745d1745d17580p-4, + 0x1.745d1745d1758p-4, + (int)0 + }, + { // Entry 284 + 0x1.745d1745d17580p-3, + 0x1.745d1745d1758p-4, + (int)1 + }, + { // Entry 285 + 0x1.745d1745d17580p-2, + 0x1.745d1745d1758p-4, + (int)2 + }, + { // Entry 286 + 0x1.745d1745d17580p-1, + 0x1.745d1745d1758p-4, + (int)3 + }, + { // Entry 287 + 0x1.745d1745d17580p0, + 0x1.745d1745d1758p-4, + (int)4 + }, + { // Entry 288 + 0x1.745d1745d17580p1, + 0x1.745d1745d1758p-4, + (int)5 + }, + { // Entry 289 + 0x1.745d1745d17580p2, + 0x1.745d1745d1758p-4, + (int)6 + }, + { // Entry 290 + 0x1.745d1745d17580p3, + 0x1.745d1745d1758p-4, + (int)7 + }, + { // Entry 291 + 0x1.745d1745d17580p4, + 0x1.745d1745d1758p-4, + (int)8 + }, + { // Entry 292 + 0x1.745d1745d17580p5, + 0x1.745d1745d1758p-4, + (int)9 + }, + { // Entry 293 + 0x1.745d1745d17580p6, + 0x1.745d1745d1758p-4, + (int)10 + }, + { // Entry 294 + 0x1.745d1745d174f0p-13, + 0x1.745d1745d174fp-3, + (int)-10 + }, + { // Entry 295 + 0x1.745d1745d174f0p-12, + 0x1.745d1745d174fp-3, + (int)-9 + }, + { // Entry 296 + 0x1.745d1745d174f0p-11, + 0x1.745d1745d174fp-3, + (int)-8 + }, + { // Entry 297 + 0x1.745d1745d174f0p-10, + 0x1.745d1745d174fp-3, + (int)-7 + }, + { // Entry 298 + 0x1.745d1745d174f0p-9, + 0x1.745d1745d174fp-3, + (int)-6 + }, + { // Entry 299 + 0x1.745d1745d174f0p-8, + 0x1.745d1745d174fp-3, + (int)-5 + }, + { // Entry 300 + 0x1.745d1745d174f0p-7, + 0x1.745d1745d174fp-3, + (int)-4 + }, + { // Entry 301 + 0x1.745d1745d174f0p-6, + 0x1.745d1745d174fp-3, + (int)-3 + }, + { // Entry 302 + 0x1.745d1745d174f0p-5, + 0x1.745d1745d174fp-3, + (int)-2 + }, + { // Entry 303 + 0x1.745d1745d174f0p-4, + 0x1.745d1745d174fp-3, + (int)-1 + }, + { // Entry 304 + 0x1.745d1745d174f0p-3, + 0x1.745d1745d174fp-3, + (int)0 + }, + { // Entry 305 + 0x1.745d1745d174f0p-2, + 0x1.745d1745d174fp-3, + (int)1 + }, + { // Entry 306 + 0x1.745d1745d174f0p-1, + 0x1.745d1745d174fp-3, + (int)2 + }, + { // Entry 307 + 0x1.745d1745d174f0p0, + 0x1.745d1745d174fp-3, + (int)3 + }, + { // Entry 308 + 0x1.745d1745d174f0p1, + 0x1.745d1745d174fp-3, + (int)4 + }, + { // Entry 309 + 0x1.745d1745d174f0p2, + 0x1.745d1745d174fp-3, + (int)5 + }, + { // Entry 310 + 0x1.745d1745d174f0p3, + 0x1.745d1745d174fp-3, + (int)6 + }, + { // Entry 311 + 0x1.745d1745d174f0p4, + 0x1.745d1745d174fp-3, + (int)7 + }, + { // Entry 312 + 0x1.745d1745d174f0p5, + 0x1.745d1745d174fp-3, + (int)8 + }, + { // Entry 313 + 0x1.745d1745d174f0p6, + 0x1.745d1745d174fp-3, + (int)9 + }, + { // Entry 314 + 0x1.745d1745d174f0p7, + 0x1.745d1745d174fp-3, + (int)10 + }, + { // Entry 315 + 0x1.1745d1745d1790p-12, + 0x1.1745d1745d179p-2, + (int)-10 + }, + { // Entry 316 + 0x1.1745d1745d1790p-11, + 0x1.1745d1745d179p-2, + (int)-9 + }, + { // Entry 317 + 0x1.1745d1745d1790p-10, + 0x1.1745d1745d179p-2, + (int)-8 + }, + { // Entry 318 + 0x1.1745d1745d1790p-9, + 0x1.1745d1745d179p-2, + (int)-7 + }, + { // Entry 319 + 0x1.1745d1745d1790p-8, + 0x1.1745d1745d179p-2, + (int)-6 + }, + { // Entry 320 + 0x1.1745d1745d1790p-7, + 0x1.1745d1745d179p-2, + (int)-5 + }, + { // Entry 321 + 0x1.1745d1745d1790p-6, + 0x1.1745d1745d179p-2, + (int)-4 + }, + { // Entry 322 + 0x1.1745d1745d1790p-5, + 0x1.1745d1745d179p-2, + (int)-3 + }, + { // Entry 323 + 0x1.1745d1745d1790p-4, + 0x1.1745d1745d179p-2, + (int)-2 + }, + { // Entry 324 + 0x1.1745d1745d1790p-3, + 0x1.1745d1745d179p-2, + (int)-1 + }, + { // Entry 325 + 0x1.1745d1745d1790p-2, + 0x1.1745d1745d179p-2, + (int)0 + }, + { // Entry 326 + 0x1.1745d1745d1790p-1, + 0x1.1745d1745d179p-2, + (int)1 + }, + { // Entry 327 + 0x1.1745d1745d1790p0, + 0x1.1745d1745d179p-2, + (int)2 + }, + { // Entry 328 + 0x1.1745d1745d1790p1, + 0x1.1745d1745d179p-2, + (int)3 + }, + { // Entry 329 + 0x1.1745d1745d1790p2, + 0x1.1745d1745d179p-2, + (int)4 + }, + { // Entry 330 + 0x1.1745d1745d1790p3, + 0x1.1745d1745d179p-2, + (int)5 + }, + { // Entry 331 + 0x1.1745d1745d1790p4, + 0x1.1745d1745d179p-2, + (int)6 + }, + { // Entry 332 + 0x1.1745d1745d1790p5, + 0x1.1745d1745d179p-2, + (int)7 + }, + { // Entry 333 + 0x1.1745d1745d1790p6, + 0x1.1745d1745d179p-2, + (int)8 + }, + { // Entry 334 + 0x1.1745d1745d1790p7, + 0x1.1745d1745d179p-2, + (int)9 + }, + { // Entry 335 + 0x1.1745d1745d1790p8, + 0x1.1745d1745d179p-2, + (int)10 + }, + { // Entry 336 + 0x1.745d1745d174a0p-12, + 0x1.745d1745d174ap-2, + (int)-10 + }, + { // Entry 337 + 0x1.745d1745d174a0p-11, + 0x1.745d1745d174ap-2, + (int)-9 + }, + { // Entry 338 + 0x1.745d1745d174a0p-10, + 0x1.745d1745d174ap-2, + (int)-8 + }, + { // Entry 339 + 0x1.745d1745d174a0p-9, + 0x1.745d1745d174ap-2, + (int)-7 + }, + { // Entry 340 + 0x1.745d1745d174a0p-8, + 0x1.745d1745d174ap-2, + (int)-6 + }, + { // Entry 341 + 0x1.745d1745d174a0p-7, + 0x1.745d1745d174ap-2, + (int)-5 + }, + { // Entry 342 + 0x1.745d1745d174a0p-6, + 0x1.745d1745d174ap-2, + (int)-4 + }, + { // Entry 343 + 0x1.745d1745d174a0p-5, + 0x1.745d1745d174ap-2, + (int)-3 + }, + { // Entry 344 + 0x1.745d1745d174a0p-4, + 0x1.745d1745d174ap-2, + (int)-2 + }, + { // Entry 345 + 0x1.745d1745d174a0p-3, + 0x1.745d1745d174ap-2, + (int)-1 + }, + { // Entry 346 + 0x1.745d1745d174a0p-2, + 0x1.745d1745d174ap-2, + (int)0 + }, + { // Entry 347 + 0x1.745d1745d174a0p-1, + 0x1.745d1745d174ap-2, + (int)1 + }, + { // Entry 348 + 0x1.745d1745d174a0p0, + 0x1.745d1745d174ap-2, + (int)2 + }, + { // Entry 349 + 0x1.745d1745d174a0p1, + 0x1.745d1745d174ap-2, + (int)3 + }, + { // Entry 350 + 0x1.745d1745d174a0p2, + 0x1.745d1745d174ap-2, + (int)4 + }, + { // Entry 351 + 0x1.745d1745d174a0p3, + 0x1.745d1745d174ap-2, + (int)5 + }, + { // Entry 352 + 0x1.745d1745d174a0p4, + 0x1.745d1745d174ap-2, + (int)6 + }, + { // Entry 353 + 0x1.745d1745d174a0p5, + 0x1.745d1745d174ap-2, + (int)7 + }, + { // Entry 354 + 0x1.745d1745d174a0p6, + 0x1.745d1745d174ap-2, + (int)8 + }, + { // Entry 355 + 0x1.745d1745d174a0p7, + 0x1.745d1745d174ap-2, + (int)9 + }, + { // Entry 356 + 0x1.745d1745d174a0p8, + 0x1.745d1745d174ap-2, + (int)10 + }, + { // Entry 357 + 0x1.d1745d1745d1c0p-12, + 0x1.d1745d1745d1cp-2, + (int)-10 + }, + { // Entry 358 + 0x1.d1745d1745d1c0p-11, + 0x1.d1745d1745d1cp-2, + (int)-9 + }, + { // Entry 359 + 0x1.d1745d1745d1c0p-10, + 0x1.d1745d1745d1cp-2, + (int)-8 + }, + { // Entry 360 + 0x1.d1745d1745d1c0p-9, + 0x1.d1745d1745d1cp-2, + (int)-7 + }, + { // Entry 361 + 0x1.d1745d1745d1c0p-8, + 0x1.d1745d1745d1cp-2, + (int)-6 + }, + { // Entry 362 + 0x1.d1745d1745d1c0p-7, + 0x1.d1745d1745d1cp-2, + (int)-5 + }, + { // Entry 363 + 0x1.d1745d1745d1c0p-6, + 0x1.d1745d1745d1cp-2, + (int)-4 + }, + { // Entry 364 + 0x1.d1745d1745d1c0p-5, + 0x1.d1745d1745d1cp-2, + (int)-3 + }, + { // Entry 365 + 0x1.d1745d1745d1c0p-4, + 0x1.d1745d1745d1cp-2, + (int)-2 + }, + { // Entry 366 + 0x1.d1745d1745d1c0p-3, + 0x1.d1745d1745d1cp-2, + (int)-1 + }, + { // Entry 367 + 0x1.d1745d1745d1c0p-2, + 0x1.d1745d1745d1cp-2, + (int)0 + }, + { // Entry 368 + 0x1.d1745d1745d1c0p-1, + 0x1.d1745d1745d1cp-2, + (int)1 + }, + { // Entry 369 + 0x1.d1745d1745d1c0p0, + 0x1.d1745d1745d1cp-2, + (int)2 + }, + { // Entry 370 + 0x1.d1745d1745d1c0p1, + 0x1.d1745d1745d1cp-2, + (int)3 + }, + { // Entry 371 + 0x1.d1745d1745d1c0p2, + 0x1.d1745d1745d1cp-2, + (int)4 + }, + { // Entry 372 + 0x1.d1745d1745d1c0p3, + 0x1.d1745d1745d1cp-2, + (int)5 + }, + { // Entry 373 + 0x1.d1745d1745d1c0p4, + 0x1.d1745d1745d1cp-2, + (int)6 + }, + { // Entry 374 + 0x1.d1745d1745d1c0p5, + 0x1.d1745d1745d1cp-2, + (int)7 + }, + { // Entry 375 + 0x1.d1745d1745d1c0p6, + 0x1.d1745d1745d1cp-2, + (int)8 + }, + { // Entry 376 + 0x1.d1745d1745d1c0p7, + 0x1.d1745d1745d1cp-2, + (int)9 + }, + { // Entry 377 + 0x1.d1745d1745d1c0p8, + 0x1.d1745d1745d1cp-2, + (int)10 + }, + { // Entry 378 + 0x1.1745d1745d1770p-11, + 0x1.1745d1745d177p-1, + (int)-10 + }, + { // Entry 379 + 0x1.1745d1745d1770p-10, + 0x1.1745d1745d177p-1, + (int)-9 + }, + { // Entry 380 + 0x1.1745d1745d1770p-9, + 0x1.1745d1745d177p-1, + (int)-8 + }, + { // Entry 381 + 0x1.1745d1745d1770p-8, + 0x1.1745d1745d177p-1, + (int)-7 + }, + { // Entry 382 + 0x1.1745d1745d1770p-7, + 0x1.1745d1745d177p-1, + (int)-6 + }, + { // Entry 383 + 0x1.1745d1745d1770p-6, + 0x1.1745d1745d177p-1, + (int)-5 + }, + { // Entry 384 + 0x1.1745d1745d1770p-5, + 0x1.1745d1745d177p-1, + (int)-4 + }, + { // Entry 385 + 0x1.1745d1745d1770p-4, + 0x1.1745d1745d177p-1, + (int)-3 + }, + { // Entry 386 + 0x1.1745d1745d1770p-3, + 0x1.1745d1745d177p-1, + (int)-2 + }, + { // Entry 387 + 0x1.1745d1745d1770p-2, + 0x1.1745d1745d177p-1, + (int)-1 + }, + { // Entry 388 + 0x1.1745d1745d1770p-1, + 0x1.1745d1745d177p-1, + (int)0 + }, + { // Entry 389 + 0x1.1745d1745d1770p0, + 0x1.1745d1745d177p-1, + (int)1 + }, + { // Entry 390 + 0x1.1745d1745d1770p1, + 0x1.1745d1745d177p-1, + (int)2 + }, + { // Entry 391 + 0x1.1745d1745d1770p2, + 0x1.1745d1745d177p-1, + (int)3 + }, + { // Entry 392 + 0x1.1745d1745d1770p3, + 0x1.1745d1745d177p-1, + (int)4 + }, + { // Entry 393 + 0x1.1745d1745d1770p4, + 0x1.1745d1745d177p-1, + (int)5 + }, + { // Entry 394 + 0x1.1745d1745d1770p5, + 0x1.1745d1745d177p-1, + (int)6 + }, + { // Entry 395 + 0x1.1745d1745d1770p6, + 0x1.1745d1745d177p-1, + (int)7 + }, + { // Entry 396 + 0x1.1745d1745d1770p7, + 0x1.1745d1745d177p-1, + (int)8 + }, + { // Entry 397 + 0x1.1745d1745d1770p8, + 0x1.1745d1745d177p-1, + (int)9 + }, + { // Entry 398 + 0x1.1745d1745d1770p9, + 0x1.1745d1745d177p-1, + (int)10 + }, + { // Entry 399 + 0x1.45d1745d1746p-11, + 0x1.45d1745d17460p-1, + (int)-10 + }, + { // Entry 400 + 0x1.45d1745d1746p-10, + 0x1.45d1745d17460p-1, + (int)-9 + }, + { // Entry 401 + 0x1.45d1745d1746p-9, + 0x1.45d1745d17460p-1, + (int)-8 + }, + { // Entry 402 + 0x1.45d1745d1746p-8, + 0x1.45d1745d17460p-1, + (int)-7 + }, + { // Entry 403 + 0x1.45d1745d1746p-7, + 0x1.45d1745d17460p-1, + (int)-6 + }, + { // Entry 404 + 0x1.45d1745d1746p-6, + 0x1.45d1745d17460p-1, + (int)-5 + }, + { // Entry 405 + 0x1.45d1745d1746p-5, + 0x1.45d1745d17460p-1, + (int)-4 + }, + { // Entry 406 + 0x1.45d1745d1746p-4, + 0x1.45d1745d17460p-1, + (int)-3 + }, + { // Entry 407 + 0x1.45d1745d1746p-3, + 0x1.45d1745d17460p-1, + (int)-2 + }, + { // Entry 408 + 0x1.45d1745d1746p-2, + 0x1.45d1745d17460p-1, + (int)-1 + }, + { // Entry 409 + 0x1.45d1745d1746p-1, + 0x1.45d1745d17460p-1, + (int)0 + }, + { // Entry 410 + 0x1.45d1745d1746p0, + 0x1.45d1745d17460p-1, + (int)1 + }, + { // Entry 411 + 0x1.45d1745d1746p1, + 0x1.45d1745d17460p-1, + (int)2 + }, + { // Entry 412 + 0x1.45d1745d1746p2, + 0x1.45d1745d17460p-1, + (int)3 + }, + { // Entry 413 + 0x1.45d1745d1746p3, + 0x1.45d1745d17460p-1, + (int)4 + }, + { // Entry 414 + 0x1.45d1745d1746p4, + 0x1.45d1745d17460p-1, + (int)5 + }, + { // Entry 415 + 0x1.45d1745d1746p5, + 0x1.45d1745d17460p-1, + (int)6 + }, + { // Entry 416 + 0x1.45d1745d1746p6, + 0x1.45d1745d17460p-1, + (int)7 + }, + { // Entry 417 + 0x1.45d1745d1746p7, + 0x1.45d1745d17460p-1, + (int)8 + }, + { // Entry 418 + 0x1.45d1745d1746p8, + 0x1.45d1745d17460p-1, + (int)9 + }, + { // Entry 419 + 0x1.45d1745d1746p9, + 0x1.45d1745d17460p-1, + (int)10 + }, + { // Entry 420 + 0x1.745d1745d17490p-11, + 0x1.745d1745d1749p-1, + (int)-10 + }, + { // Entry 421 + 0x1.745d1745d17490p-10, + 0x1.745d1745d1749p-1, + (int)-9 + }, + { // Entry 422 + 0x1.745d1745d17490p-9, + 0x1.745d1745d1749p-1, + (int)-8 + }, + { // Entry 423 + 0x1.745d1745d17490p-8, + 0x1.745d1745d1749p-1, + (int)-7 + }, + { // Entry 424 + 0x1.745d1745d17490p-7, + 0x1.745d1745d1749p-1, + (int)-6 + }, + { // Entry 425 + 0x1.745d1745d17490p-6, + 0x1.745d1745d1749p-1, + (int)-5 + }, + { // Entry 426 + 0x1.745d1745d17490p-5, + 0x1.745d1745d1749p-1, + (int)-4 + }, + { // Entry 427 + 0x1.745d1745d17490p-4, + 0x1.745d1745d1749p-1, + (int)-3 + }, + { // Entry 428 + 0x1.745d1745d17490p-3, + 0x1.745d1745d1749p-1, + (int)-2 + }, + { // Entry 429 + 0x1.745d1745d17490p-2, + 0x1.745d1745d1749p-1, + (int)-1 + }, + { // Entry 430 + 0x1.745d1745d17490p-1, + 0x1.745d1745d1749p-1, + (int)0 + }, + { // Entry 431 + 0x1.745d1745d17490p0, + 0x1.745d1745d1749p-1, + (int)1 + }, + { // Entry 432 + 0x1.745d1745d17490p1, + 0x1.745d1745d1749p-1, + (int)2 + }, + { // Entry 433 + 0x1.745d1745d17490p2, + 0x1.745d1745d1749p-1, + (int)3 + }, + { // Entry 434 + 0x1.745d1745d17490p3, + 0x1.745d1745d1749p-1, + (int)4 + }, + { // Entry 435 + 0x1.745d1745d17490p4, + 0x1.745d1745d1749p-1, + (int)5 + }, + { // Entry 436 + 0x1.745d1745d17490p5, + 0x1.745d1745d1749p-1, + (int)6 + }, + { // Entry 437 + 0x1.745d1745d17490p6, + 0x1.745d1745d1749p-1, + (int)7 + }, + { // Entry 438 + 0x1.745d1745d17490p7, + 0x1.745d1745d1749p-1, + (int)8 + }, + { // Entry 439 + 0x1.745d1745d17490p8, + 0x1.745d1745d1749p-1, + (int)9 + }, + { // Entry 440 + 0x1.745d1745d17490p9, + 0x1.745d1745d1749p-1, + (int)10 + }, + { // Entry 441 + 0x1.a2e8ba2e8ba320p-11, + 0x1.a2e8ba2e8ba32p-1, + (int)-10 + }, + { // Entry 442 + 0x1.a2e8ba2e8ba320p-10, + 0x1.a2e8ba2e8ba32p-1, + (int)-9 + }, + { // Entry 443 + 0x1.a2e8ba2e8ba320p-9, + 0x1.a2e8ba2e8ba32p-1, + (int)-8 + }, + { // Entry 444 + 0x1.a2e8ba2e8ba320p-8, + 0x1.a2e8ba2e8ba32p-1, + (int)-7 + }, + { // Entry 445 + 0x1.a2e8ba2e8ba320p-7, + 0x1.a2e8ba2e8ba32p-1, + (int)-6 + }, + { // Entry 446 + 0x1.a2e8ba2e8ba320p-6, + 0x1.a2e8ba2e8ba32p-1, + (int)-5 + }, + { // Entry 447 + 0x1.a2e8ba2e8ba320p-5, + 0x1.a2e8ba2e8ba32p-1, + (int)-4 + }, + { // Entry 448 + 0x1.a2e8ba2e8ba320p-4, + 0x1.a2e8ba2e8ba32p-1, + (int)-3 + }, + { // Entry 449 + 0x1.a2e8ba2e8ba320p-3, + 0x1.a2e8ba2e8ba32p-1, + (int)-2 + }, + { // Entry 450 + 0x1.a2e8ba2e8ba320p-2, + 0x1.a2e8ba2e8ba32p-1, + (int)-1 + }, + { // Entry 451 + 0x1.a2e8ba2e8ba320p-1, + 0x1.a2e8ba2e8ba32p-1, + (int)0 + }, + { // Entry 452 + 0x1.a2e8ba2e8ba320p0, + 0x1.a2e8ba2e8ba32p-1, + (int)1 + }, + { // Entry 453 + 0x1.a2e8ba2e8ba320p1, + 0x1.a2e8ba2e8ba32p-1, + (int)2 + }, + { // Entry 454 + 0x1.a2e8ba2e8ba320p2, + 0x1.a2e8ba2e8ba32p-1, + (int)3 + }, + { // Entry 455 + 0x1.a2e8ba2e8ba320p3, + 0x1.a2e8ba2e8ba32p-1, + (int)4 + }, + { // Entry 456 + 0x1.a2e8ba2e8ba320p4, + 0x1.a2e8ba2e8ba32p-1, + (int)5 + }, + { // Entry 457 + 0x1.a2e8ba2e8ba320p5, + 0x1.a2e8ba2e8ba32p-1, + (int)6 + }, + { // Entry 458 + 0x1.a2e8ba2e8ba320p6, + 0x1.a2e8ba2e8ba32p-1, + (int)7 + }, + { // Entry 459 + 0x1.a2e8ba2e8ba320p7, + 0x1.a2e8ba2e8ba32p-1, + (int)8 + }, + { // Entry 460 + 0x1.a2e8ba2e8ba320p8, + 0x1.a2e8ba2e8ba32p-1, + (int)9 + }, + { // Entry 461 + 0x1.a2e8ba2e8ba320p9, + 0x1.a2e8ba2e8ba32p-1, + (int)10 + }, + { // Entry 462 + 0x1.d1745d1745d1b0p-11, + 0x1.d1745d1745d1bp-1, + (int)-10 + }, + { // Entry 463 + 0x1.d1745d1745d1b0p-10, + 0x1.d1745d1745d1bp-1, + (int)-9 + }, + { // Entry 464 + 0x1.d1745d1745d1b0p-9, + 0x1.d1745d1745d1bp-1, + (int)-8 + }, + { // Entry 465 + 0x1.d1745d1745d1b0p-8, + 0x1.d1745d1745d1bp-1, + (int)-7 + }, + { // Entry 466 + 0x1.d1745d1745d1b0p-7, + 0x1.d1745d1745d1bp-1, + (int)-6 + }, + { // Entry 467 + 0x1.d1745d1745d1b0p-6, + 0x1.d1745d1745d1bp-1, + (int)-5 + }, + { // Entry 468 + 0x1.d1745d1745d1b0p-5, + 0x1.d1745d1745d1bp-1, + (int)-4 + }, + { // Entry 469 + 0x1.d1745d1745d1b0p-4, + 0x1.d1745d1745d1bp-1, + (int)-3 + }, + { // Entry 470 + 0x1.d1745d1745d1b0p-3, + 0x1.d1745d1745d1bp-1, + (int)-2 + }, + { // Entry 471 + 0x1.d1745d1745d1b0p-2, + 0x1.d1745d1745d1bp-1, + (int)-1 + }, + { // Entry 472 + 0x1.d1745d1745d1b0p-1, + 0x1.d1745d1745d1bp-1, + (int)0 + }, + { // Entry 473 + 0x1.d1745d1745d1b0p0, + 0x1.d1745d1745d1bp-1, + (int)1 + }, + { // Entry 474 + 0x1.d1745d1745d1b0p1, + 0x1.d1745d1745d1bp-1, + (int)2 + }, + { // Entry 475 + 0x1.d1745d1745d1b0p2, + 0x1.d1745d1745d1bp-1, + (int)3 + }, + { // Entry 476 + 0x1.d1745d1745d1b0p3, + 0x1.d1745d1745d1bp-1, + (int)4 + }, + { // Entry 477 + 0x1.d1745d1745d1b0p4, + 0x1.d1745d1745d1bp-1, + (int)5 + }, + { // Entry 478 + 0x1.d1745d1745d1b0p5, + 0x1.d1745d1745d1bp-1, + (int)6 + }, + { // Entry 479 + 0x1.d1745d1745d1b0p6, + 0x1.d1745d1745d1bp-1, + (int)7 + }, + { // Entry 480 + 0x1.d1745d1745d1b0p7, + 0x1.d1745d1745d1bp-1, + (int)8 + }, + { // Entry 481 + 0x1.d1745d1745d1b0p8, + 0x1.d1745d1745d1bp-1, + (int)9 + }, + { // Entry 482 + 0x1.d1745d1745d1b0p9, + 0x1.d1745d1745d1bp-1, + (int)10 + }, + { // Entry 483 + 0x1.p-10, + 0x1.0p0, + (int)-10 + }, + { // Entry 484 + 0x1.p-9, + 0x1.0p0, + (int)-9 + }, + { // Entry 485 + 0x1.p-8, + 0x1.0p0, + (int)-8 + }, + { // Entry 486 + 0x1.p-7, + 0x1.0p0, + (int)-7 + }, + { // Entry 487 + 0x1.p-6, + 0x1.0p0, + (int)-6 + }, + { // Entry 488 + 0x1.p-5, + 0x1.0p0, + (int)-5 + }, + { // Entry 489 + 0x1.p-4, + 0x1.0p0, + (int)-4 + }, + { // Entry 490 + 0x1.p-3, + 0x1.0p0, + (int)-3 + }, + { // Entry 491 + 0x1.p-2, + 0x1.0p0, + (int)-2 + }, + { // Entry 492 + 0x1.p-1, + 0x1.0p0, + (int)-1 + }, + { // Entry 493 + 0x1.p0, + 0x1.0p0, + (int)0 + }, + { // Entry 494 + 0x1.p1, + 0x1.0p0, + (int)1 + }, + { // Entry 495 + 0x1.p2, + 0x1.0p0, + (int)2 + }, + { // Entry 496 + 0x1.p3, + 0x1.0p0, + (int)3 + }, + { // Entry 497 + 0x1.p4, + 0x1.0p0, + (int)4 + }, + { // Entry 498 + 0x1.p5, + 0x1.0p0, + (int)5 + }, + { // Entry 499 + 0x1.p6, + 0x1.0p0, + (int)6 + }, + { // Entry 500 + 0x1.p7, + 0x1.0p0, + (int)7 + }, + { // Entry 501 + 0x1.p8, + 0x1.0p0, + (int)8 + }, + { // Entry 502 + 0x1.p9, + 0x1.0p0, + (int)9 + }, + { // Entry 503 + 0x1.p10, + 0x1.0p0, + (int)10 + }, + { // Entry 504 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1023, + (int)-1023 + }, + { // Entry 505 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + (int)-1022 + }, + { // Entry 506 + 0x1.fffffffffffff0p23, + 0x1.fffffffffffffp1023, + (int)-1000 + }, + { // Entry 507 + 0x1.fffffffffffff0p24, + 0x1.fffffffffffffp1023, + (int)-999 + }, + { // Entry 508 + 0x1.fffffffffffff0p1013, + 0x1.fffffffffffffp1023, + (int)-10 + }, + { // Entry 509 + 0x1.fffffffffffff0p1014, + 0x1.fffffffffffffp1023, + (int)-9 + }, + { // Entry 510 + 0x1.fffffffffffff0p1015, + 0x1.fffffffffffffp1023, + (int)-8 + }, + { // Entry 511 + 0x1.fffffffffffff0p1016, + 0x1.fffffffffffffp1023, + (int)-7 + }, + { // Entry 512 + 0x1.fffffffffffff0p1017, + 0x1.fffffffffffffp1023, + (int)-6 + }, + { // Entry 513 + 0x1.fffffffffffff0p1018, + 0x1.fffffffffffffp1023, + (int)-5 + }, + { // Entry 514 + 0x1.fffffffffffff0p1019, + 0x1.fffffffffffffp1023, + (int)-4 + }, + { // Entry 515 + 0x1.fffffffffffff0p1020, + 0x1.fffffffffffffp1023, + (int)-3 + }, + { // Entry 516 + 0x1.fffffffffffff0p1021, + 0x1.fffffffffffffp1023, + (int)-2 + }, + { // Entry 517 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1023, + (int)-1 + }, + { // Entry 518 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 519 + 0x1.p-51, + 0x1.0p-1074, + (int)1023 + }, + { // Entry 520 + 0x1.p-52, + 0x1.0p-1074, + (int)1022 + }, + { // Entry 521 + 0x1.p-74, + 0x1.0p-1074, + (int)1000 + }, + { // Entry 522 + 0x1.p-75, + 0x1.0p-1074, + (int)999 + }, + { // Entry 523 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 524 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 525 + 0x1.p-1072, + 0x1.0p-1074, + (int)2 + }, + { // Entry 526 + 0x1.p-1071, + 0x1.0p-1074, + (int)3 + }, + { // Entry 527 + 0x1.p-1070, + 0x1.0p-1074, + (int)4 + }, + { // Entry 528 + 0x1.p-1069, + 0x1.0p-1074, + (int)5 + }, + { // Entry 529 + 0x1.p-1068, + 0x1.0p-1074, + (int)6 + }, + { // Entry 530 + 0x1.p-1067, + 0x1.0p-1074, + (int)7 + }, + { // Entry 531 + 0x1.p-1066, + 0x1.0p-1074, + (int)8 + }, + { // Entry 532 + 0x1.p-1065, + 0x1.0p-1074, + (int)9 + }, + { // Entry 533 + 0x1.p-1064, + 0x1.0p-1074, + (int)10 + }, + { // Entry 534 + 0x1.p-1025, + 0x1.0p-2, + (int)-1023 + }, + { // Entry 535 + 0x1.p-1024, + 0x1.0p-2, + (int)-1022 + }, + { // Entry 536 + 0x1.p-1024, + 0x1.0p-1, + (int)-1023 + }, + { // Entry 537 + 0x1.p-1023, + 0x1.0p-1, + (int)-1022 + }, + { // Entry 538 + 0x1.80p-1024, + 0x1.8p-1, + (int)-1023 + }, + { // Entry 539 + 0x1.80p-1023, + 0x1.8p-1, + (int)-1022 + }, + { // Entry 540 + 0.0, + 0x1.0p-2, + (int)-1074 + }, + { // Entry 541 + 0.0, + 0x1.0p-2, + (int)-1073 + }, + { // Entry 542 + 0.0, + 0x1.0p-1, + (int)-1074 + }, + { // Entry 543 + 0x1.p-1074, + 0x1.0p-1, + (int)-1073 + }, + { // Entry 544 + 0.0, + 0x1.8p-1, + (int)-1074 + }, + { // Entry 545 + 0x1.80p-1074, + 0x1.8p-1, + (int)-1073 + }, + { // Entry 546 + 0x1.p1023, + 0x1.0p0, + (int)1023 + }, + { // Entry 547 + 0x1.p1022, + 0x1.0p0, + (int)1022 + }, + { // Entry 548 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 549 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 550 + 0x1.p-1072, + 0x1.0p-1074, + (int)2 + }, + { // Entry 551 + 0x1.p-1071, + 0x1.0p-1074, + (int)3 + }, + { // Entry 552 + 0x1.p-1070, + 0x1.0p-1074, + (int)4 + }, + { // Entry 553 + 0x1.p-1069, + 0x1.0p-1074, + (int)5 + }, + { // Entry 554 + 0x1.p-1068, + 0x1.0p-1074, + (int)6 + }, + { // Entry 555 + 0x1.p-1067, + 0x1.0p-1074, + (int)7 + }, + { // Entry 556 + 0x1.p-1066, + 0x1.0p-1074, + (int)8 + }, + { // Entry 557 + 0x1.p-1065, + 0x1.0p-1074, + (int)9 + }, + { // Entry 558 + 0x1.p-1064, + 0x1.0p-1074, + (int)10 + }, + { // Entry 559 + 0x1.p-1063, + 0x1.0p-1074, + (int)11 + }, + { // Entry 560 + 0x1.p-1062, + 0x1.0p-1074, + (int)12 + }, + { // Entry 561 + 0x1.p-1061, + 0x1.0p-1074, + (int)13 + }, + { // Entry 562 + 0x1.p-1060, + 0x1.0p-1074, + (int)14 + }, + { // Entry 563 + 0x1.p-1059, + 0x1.0p-1074, + (int)15 + }, + { // Entry 564 + 0x1.p-1058, + 0x1.0p-1074, + (int)16 + }, + { // Entry 565 + 0x1.p-1057, + 0x1.0p-1074, + (int)17 + }, + { // Entry 566 + 0x1.p-1056, + 0x1.0p-1074, + (int)18 + }, + { // Entry 567 + 0x1.p-1055, + 0x1.0p-1074, + (int)19 + }, + { // Entry 568 + 0x1.p-1054, + 0x1.0p-1074, + (int)20 + }, + { // Entry 569 + 0x1.p-1053, + 0x1.0p-1074, + (int)21 + }, + { // Entry 570 + 0x1.p-1052, + 0x1.0p-1074, + (int)22 + }, + { // Entry 571 + 0x1.p-1051, + 0x1.0p-1074, + (int)23 + }, + { // Entry 572 + 0x1.p-1050, + 0x1.0p-1074, + (int)24 + }, + { // Entry 573 + 0x1.p-1049, + 0x1.0p-1074, + (int)25 + }, + { // Entry 574 + 0x1.p-1048, + 0x1.0p-1074, + (int)26 + }, + { // Entry 575 + 0x1.p-1047, + 0x1.0p-1074, + (int)27 + }, + { // Entry 576 + 0x1.p-1046, + 0x1.0p-1074, + (int)28 + }, + { // Entry 577 + 0x1.p-1045, + 0x1.0p-1074, + (int)29 + }, + { // Entry 578 + 0x1.p-1044, + 0x1.0p-1074, + (int)30 + }, + { // Entry 579 + 0x1.p-1043, + 0x1.0p-1074, + (int)31 + }, + { // Entry 580 + 0x1.p-1042, + 0x1.0p-1074, + (int)32 + }, + { // Entry 581 + 0x1.p-1041, + 0x1.0p-1074, + (int)33 + }, + { // Entry 582 + 0x1.p-1040, + 0x1.0p-1074, + (int)34 + }, + { // Entry 583 + 0x1.p-1039, + 0x1.0p-1074, + (int)35 + }, + { // Entry 584 + 0x1.p-1038, + 0x1.0p-1074, + (int)36 + }, + { // Entry 585 + 0x1.p-1037, + 0x1.0p-1074, + (int)37 + }, + { // Entry 586 + 0x1.p-1036, + 0x1.0p-1074, + (int)38 + }, + { // Entry 587 + 0x1.p-1035, + 0x1.0p-1074, + (int)39 + }, + { // Entry 588 + 0x1.p-1034, + 0x1.0p-1074, + (int)40 + }, + { // Entry 589 + 0x1.p-1033, + 0x1.0p-1074, + (int)41 + }, + { // Entry 590 + 0x1.p-1032, + 0x1.0p-1074, + (int)42 + }, + { // Entry 591 + 0x1.p-1031, + 0x1.0p-1074, + (int)43 + }, + { // Entry 592 + 0x1.p-1030, + 0x1.0p-1074, + (int)44 + }, + { // Entry 593 + 0x1.p-1029, + 0x1.0p-1074, + (int)45 + }, + { // Entry 594 + 0x1.p-1028, + 0x1.0p-1074, + (int)46 + }, + { // Entry 595 + 0x1.p-1027, + 0x1.0p-1074, + (int)47 + }, + { // Entry 596 + 0x1.p-1026, + 0x1.0p-1074, + (int)48 + }, + { // Entry 597 + 0x1.p-1025, + 0x1.0p-1074, + (int)49 + }, + { // Entry 598 + 0x1.p-1024, + 0x1.0p-1074, + (int)50 + }, + { // Entry 599 + 0x1.p-1023, + 0x1.0p-1074, + (int)51 + }, + { // Entry 600 + 0x1.p-1022, + 0x1.0p-1074, + (int)52 + }, + { // Entry 601 + 0x1.p-1021, + 0x1.0p-1074, + (int)53 + }, + { // Entry 602 + 0x1.p-1020, + 0x1.0p-1074, + (int)54 + }, + { // Entry 603 + 0x1.p-1019, + 0x1.0p-1074, + (int)55 + }, + { // Entry 604 + 0x1.p-1018, + 0x1.0p-1074, + (int)56 + }, + { // Entry 605 + 0x1.p-1017, + 0x1.0p-1074, + (int)57 + }, + { // Entry 606 + 0x1.p-1016, + 0x1.0p-1074, + (int)58 + }, + { // Entry 607 + 0x1.p-1015, + 0x1.0p-1074, + (int)59 + }, + { // Entry 608 + 0x1.p-1014, + 0x1.0p-1074, + (int)60 + }, + { // Entry 609 + 0x1.p-1013, + 0x1.0p-1074, + (int)61 + }, + { // Entry 610 + 0x1.p-1012, + 0x1.0p-1074, + (int)62 + }, + { // Entry 611 + 0x1.p-1011, + 0x1.0p-1074, + (int)63 + }, + { // Entry 612 + 0x1.p-1010, + 0x1.0p-1074, + (int)64 + }, + { // Entry 613 + 0x1.p-1009, + 0x1.0p-1074, + (int)65 + }, + { // Entry 614 + 0x1.p-1008, + 0x1.0p-1074, + (int)66 + }, + { // Entry 615 + 0x1.p-1007, + 0x1.0p-1074, + (int)67 + }, + { // Entry 616 + 0x1.p-1006, + 0x1.0p-1074, + (int)68 + }, + { // Entry 617 + 0x1.p-1005, + 0x1.0p-1074, + (int)69 + }, + { // Entry 618 + 0x1.p-1004, + 0x1.0p-1074, + (int)70 + }, + { // Entry 619 + 0x1.p-1003, + 0x1.0p-1074, + (int)71 + }, + { // Entry 620 + 0x1.p-1002, + 0x1.0p-1074, + (int)72 + }, + { // Entry 621 + 0x1.p-1001, + 0x1.0p-1074, + (int)73 + }, + { // Entry 622 + 0x1.p-1000, + 0x1.0p-1074, + (int)74 + }, + { // Entry 623 + 0x1.p-999, + 0x1.0p-1074, + (int)75 + }, + { // Entry 624 + 0x1.p-998, + 0x1.0p-1074, + (int)76 + }, + { // Entry 625 + 0x1.p-997, + 0x1.0p-1074, + (int)77 + }, + { // Entry 626 + 0x1.p-996, + 0x1.0p-1074, + (int)78 + }, + { // Entry 627 + 0x1.p-995, + 0x1.0p-1074, + (int)79 + }, + { // Entry 628 + 0x1.p-994, + 0x1.0p-1074, + (int)80 + }, + { // Entry 629 + 0x1.p-993, + 0x1.0p-1074, + (int)81 + }, + { // Entry 630 + 0x1.p-992, + 0x1.0p-1074, + (int)82 + }, + { // Entry 631 + 0x1.p-991, + 0x1.0p-1074, + (int)83 + }, + { // Entry 632 + 0x1.p-990, + 0x1.0p-1074, + (int)84 + }, + { // Entry 633 + 0x1.p-989, + 0x1.0p-1074, + (int)85 + }, + { // Entry 634 + 0x1.p-988, + 0x1.0p-1074, + (int)86 + }, + { // Entry 635 + 0x1.p-987, + 0x1.0p-1074, + (int)87 + }, + { // Entry 636 + 0x1.p-986, + 0x1.0p-1074, + (int)88 + }, + { // Entry 637 + 0x1.p-985, + 0x1.0p-1074, + (int)89 + }, + { // Entry 638 + 0x1.p-984, + 0x1.0p-1074, + (int)90 + }, + { // Entry 639 + 0x1.p-983, + 0x1.0p-1074, + (int)91 + }, + { // Entry 640 + 0x1.p-982, + 0x1.0p-1074, + (int)92 + }, + { // Entry 641 + 0x1.p-981, + 0x1.0p-1074, + (int)93 + }, + { // Entry 642 + 0x1.p-980, + 0x1.0p-1074, + (int)94 + }, + { // Entry 643 + 0x1.p-979, + 0x1.0p-1074, + (int)95 + }, + { // Entry 644 + 0x1.p-978, + 0x1.0p-1074, + (int)96 + }, + { // Entry 645 + 0x1.p-977, + 0x1.0p-1074, + (int)97 + }, + { // Entry 646 + 0x1.p-976, + 0x1.0p-1074, + (int)98 + }, + { // Entry 647 + 0x1.p-975, + 0x1.0p-1074, + (int)99 + }, + { // Entry 648 + 0x1.p-974, + 0x1.0p-1074, + (int)100 + }, + { // Entry 649 + 0x1.p-973, + 0x1.0p-1074, + (int)101 + }, + { // Entry 650 + 0x1.p-972, + 0x1.0p-1074, + (int)102 + }, + { // Entry 651 + 0x1.p-971, + 0x1.0p-1074, + (int)103 + }, + { // Entry 652 + 0x1.p-970, + 0x1.0p-1074, + (int)104 + }, + { // Entry 653 + 0x1.p-969, + 0x1.0p-1074, + (int)105 + }, + { // Entry 654 + 0x1.p-968, + 0x1.0p-1074, + (int)106 + }, + { // Entry 655 + 0x1.p-967, + 0x1.0p-1074, + (int)107 + }, + { // Entry 656 + 0x1.p-966, + 0x1.0p-1074, + (int)108 + }, + { // Entry 657 + 0x1.p-965, + 0x1.0p-1074, + (int)109 + }, + { // Entry 658 + 0x1.p-964, + 0x1.0p-1074, + (int)110 + }, + { // Entry 659 + 0x1.p-963, + 0x1.0p-1074, + (int)111 + }, + { // Entry 660 + 0x1.p-962, + 0x1.0p-1074, + (int)112 + }, + { // Entry 661 + 0x1.p-961, + 0x1.0p-1074, + (int)113 + }, + { // Entry 662 + 0x1.p-960, + 0x1.0p-1074, + (int)114 + }, + { // Entry 663 + 0x1.p-959, + 0x1.0p-1074, + (int)115 + }, + { // Entry 664 + 0x1.p-958, + 0x1.0p-1074, + (int)116 + }, + { // Entry 665 + 0x1.p-957, + 0x1.0p-1074, + (int)117 + }, + { // Entry 666 + 0x1.p-956, + 0x1.0p-1074, + (int)118 + }, + { // Entry 667 + 0x1.p-955, + 0x1.0p-1074, + (int)119 + }, + { // Entry 668 + 0x1.p-954, + 0x1.0p-1074, + (int)120 + }, + { // Entry 669 + 0x1.p-953, + 0x1.0p-1074, + (int)121 + }, + { // Entry 670 + 0x1.p-952, + 0x1.0p-1074, + (int)122 + }, + { // Entry 671 + 0x1.p-951, + 0x1.0p-1074, + (int)123 + }, + { // Entry 672 + 0x1.p-950, + 0x1.0p-1074, + (int)124 + }, + { // Entry 673 + 0x1.p-949, + 0x1.0p-1074, + (int)125 + }, + { // Entry 674 + 0x1.p-948, + 0x1.0p-1074, + (int)126 + }, + { // Entry 675 + 0x1.p-947, + 0x1.0p-1074, + (int)127 + }, + { // Entry 676 + 0x1.p-946, + 0x1.0p-1074, + (int)128 + }, + { // Entry 677 + 0x1.p-945, + 0x1.0p-1074, + (int)129 + }, + { // Entry 678 + 0x1.p-944, + 0x1.0p-1074, + (int)130 + }, + { // Entry 679 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 680 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 681 + 0x1.ffffffffffffe0p-1021, + 0x1.ffffffffffffep-1023, + (int)2 + }, + { // Entry 682 + 0x1.ffffffffffffe0p-1020, + 0x1.ffffffffffffep-1023, + (int)3 + }, + { // Entry 683 + 0x1.ffffffffffffe0p-1019, + 0x1.ffffffffffffep-1023, + (int)4 + }, + { // Entry 684 + 0x1.ffffffffffffe0p-1018, + 0x1.ffffffffffffep-1023, + (int)5 + }, + { // Entry 685 + 0x1.ffffffffffffe0p-1017, + 0x1.ffffffffffffep-1023, + (int)6 + }, + { // Entry 686 + 0x1.ffffffffffffe0p-1016, + 0x1.ffffffffffffep-1023, + (int)7 + }, + { // Entry 687 + 0x1.ffffffffffffe0p-1015, + 0x1.ffffffffffffep-1023, + (int)8 + }, + { // Entry 688 + 0x1.ffffffffffffe0p-1014, + 0x1.ffffffffffffep-1023, + (int)9 + }, + { // Entry 689 + 0x1.ffffffffffffe0p-1013, + 0x1.ffffffffffffep-1023, + (int)10 + }, + { // Entry 690 + 0x1.ffffffffffffe0p-1012, + 0x1.ffffffffffffep-1023, + (int)11 + }, + { // Entry 691 + 0x1.ffffffffffffe0p-1011, + 0x1.ffffffffffffep-1023, + (int)12 + }, + { // Entry 692 + 0x1.ffffffffffffe0p-1010, + 0x1.ffffffffffffep-1023, + (int)13 + }, + { // Entry 693 + 0x1.ffffffffffffe0p-1009, + 0x1.ffffffffffffep-1023, + (int)14 + }, + { // Entry 694 + 0x1.ffffffffffffe0p-1008, + 0x1.ffffffffffffep-1023, + (int)15 + }, + { // Entry 695 + 0x1.ffffffffffffe0p-1007, + 0x1.ffffffffffffep-1023, + (int)16 + }, + { // Entry 696 + 0x1.ffffffffffffe0p-1006, + 0x1.ffffffffffffep-1023, + (int)17 + }, + { // Entry 697 + 0x1.ffffffffffffe0p-1005, + 0x1.ffffffffffffep-1023, + (int)18 + }, + { // Entry 698 + 0x1.ffffffffffffe0p-1004, + 0x1.ffffffffffffep-1023, + (int)19 + }, + { // Entry 699 + 0x1.ffffffffffffe0p-1003, + 0x1.ffffffffffffep-1023, + (int)20 + }, + { // Entry 700 + 0x1.ffffffffffffe0p-1002, + 0x1.ffffffffffffep-1023, + (int)21 + }, + { // Entry 701 + 0x1.ffffffffffffe0p-1001, + 0x1.ffffffffffffep-1023, + (int)22 + }, + { // Entry 702 + 0x1.ffffffffffffe0p-1000, + 0x1.ffffffffffffep-1023, + (int)23 + }, + { // Entry 703 + 0x1.ffffffffffffe0p-999, + 0x1.ffffffffffffep-1023, + (int)24 + }, + { // Entry 704 + 0x1.ffffffffffffe0p-998, + 0x1.ffffffffffffep-1023, + (int)25 + }, + { // Entry 705 + 0x1.ffffffffffffe0p-997, + 0x1.ffffffffffffep-1023, + (int)26 + }, + { // Entry 706 + 0x1.ffffffffffffe0p-996, + 0x1.ffffffffffffep-1023, + (int)27 + }, + { // Entry 707 + 0x1.ffffffffffffe0p-995, + 0x1.ffffffffffffep-1023, + (int)28 + }, + { // Entry 708 + 0x1.ffffffffffffe0p-994, + 0x1.ffffffffffffep-1023, + (int)29 + }, + { // Entry 709 + 0x1.ffffffffffffe0p-993, + 0x1.ffffffffffffep-1023, + (int)30 + }, + { // Entry 710 + 0x1.ffffffffffffe0p-992, + 0x1.ffffffffffffep-1023, + (int)31 + }, + { // Entry 711 + 0x1.ffffffffffffe0p-991, + 0x1.ffffffffffffep-1023, + (int)32 + }, + { // Entry 712 + 0x1.ffffffffffffe0p-990, + 0x1.ffffffffffffep-1023, + (int)33 + }, + { // Entry 713 + 0x1.ffffffffffffe0p-989, + 0x1.ffffffffffffep-1023, + (int)34 + }, + { // Entry 714 + 0x1.ffffffffffffe0p-988, + 0x1.ffffffffffffep-1023, + (int)35 + }, + { // Entry 715 + 0x1.ffffffffffffe0p-987, + 0x1.ffffffffffffep-1023, + (int)36 + }, + { // Entry 716 + 0x1.ffffffffffffe0p-986, + 0x1.ffffffffffffep-1023, + (int)37 + }, + { // Entry 717 + 0x1.ffffffffffffe0p-985, + 0x1.ffffffffffffep-1023, + (int)38 + }, + { // Entry 718 + 0x1.ffffffffffffe0p-984, + 0x1.ffffffffffffep-1023, + (int)39 + }, + { // Entry 719 + 0x1.ffffffffffffe0p-983, + 0x1.ffffffffffffep-1023, + (int)40 + }, + { // Entry 720 + 0x1.ffffffffffffe0p-982, + 0x1.ffffffffffffep-1023, + (int)41 + }, + { // Entry 721 + 0x1.ffffffffffffe0p-981, + 0x1.ffffffffffffep-1023, + (int)42 + }, + { // Entry 722 + 0x1.ffffffffffffe0p-980, + 0x1.ffffffffffffep-1023, + (int)43 + }, + { // Entry 723 + 0x1.ffffffffffffe0p-979, + 0x1.ffffffffffffep-1023, + (int)44 + }, + { // Entry 724 + 0x1.ffffffffffffe0p-978, + 0x1.ffffffffffffep-1023, + (int)45 + }, + { // Entry 725 + 0x1.ffffffffffffe0p-977, + 0x1.ffffffffffffep-1023, + (int)46 + }, + { // Entry 726 + 0x1.ffffffffffffe0p-976, + 0x1.ffffffffffffep-1023, + (int)47 + }, + { // Entry 727 + 0x1.ffffffffffffe0p-975, + 0x1.ffffffffffffep-1023, + (int)48 + }, + { // Entry 728 + 0x1.ffffffffffffe0p-974, + 0x1.ffffffffffffep-1023, + (int)49 + }, + { // Entry 729 + 0x1.ffffffffffffe0p-973, + 0x1.ffffffffffffep-1023, + (int)50 + }, + { // Entry 730 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + (int)51 + }, + { // Entry 731 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + (int)52 + }, + { // Entry 732 + 0x1.ffffffffffffe0p-970, + 0x1.ffffffffffffep-1023, + (int)53 + }, + { // Entry 733 + 0x1.ffffffffffffe0p-969, + 0x1.ffffffffffffep-1023, + (int)54 + }, + { // Entry 734 + 0x1.ffffffffffffe0p-968, + 0x1.ffffffffffffep-1023, + (int)55 + }, + { // Entry 735 + 0x1.ffffffffffffe0p-967, + 0x1.ffffffffffffep-1023, + (int)56 + }, + { // Entry 736 + 0x1.ffffffffffffe0p-966, + 0x1.ffffffffffffep-1023, + (int)57 + }, + { // Entry 737 + 0x1.ffffffffffffe0p-965, + 0x1.ffffffffffffep-1023, + (int)58 + }, + { // Entry 738 + 0x1.ffffffffffffe0p-964, + 0x1.ffffffffffffep-1023, + (int)59 + }, + { // Entry 739 + 0x1.ffffffffffffe0p-963, + 0x1.ffffffffffffep-1023, + (int)60 + }, + { // Entry 740 + 0x1.ffffffffffffe0p-962, + 0x1.ffffffffffffep-1023, + (int)61 + }, + { // Entry 741 + 0x1.ffffffffffffe0p-961, + 0x1.ffffffffffffep-1023, + (int)62 + }, + { // Entry 742 + 0x1.ffffffffffffe0p-960, + 0x1.ffffffffffffep-1023, + (int)63 + }, + { // Entry 743 + 0x1.ffffffffffffe0p-959, + 0x1.ffffffffffffep-1023, + (int)64 + }, + { // Entry 744 + 0x1.ffffffffffffe0p-958, + 0x1.ffffffffffffep-1023, + (int)65 + }, + { // Entry 745 + 0x1.ffffffffffffe0p-957, + 0x1.ffffffffffffep-1023, + (int)66 + }, + { // Entry 746 + 0x1.ffffffffffffe0p-956, + 0x1.ffffffffffffep-1023, + (int)67 + }, + { // Entry 747 + 0x1.ffffffffffffe0p-955, + 0x1.ffffffffffffep-1023, + (int)68 + }, + { // Entry 748 + 0x1.ffffffffffffe0p-954, + 0x1.ffffffffffffep-1023, + (int)69 + }, + { // Entry 749 + 0x1.ffffffffffffe0p-953, + 0x1.ffffffffffffep-1023, + (int)70 + }, + { // Entry 750 + 0x1.ffffffffffffe0p-952, + 0x1.ffffffffffffep-1023, + (int)71 + }, + { // Entry 751 + 0x1.ffffffffffffe0p-951, + 0x1.ffffffffffffep-1023, + (int)72 + }, + { // Entry 752 + 0x1.ffffffffffffe0p-950, + 0x1.ffffffffffffep-1023, + (int)73 + }, + { // Entry 753 + 0x1.ffffffffffffe0p-949, + 0x1.ffffffffffffep-1023, + (int)74 + }, + { // Entry 754 + 0x1.ffffffffffffe0p-948, + 0x1.ffffffffffffep-1023, + (int)75 + }, + { // Entry 755 + 0x1.ffffffffffffe0p-947, + 0x1.ffffffffffffep-1023, + (int)76 + }, + { // Entry 756 + 0x1.ffffffffffffe0p-946, + 0x1.ffffffffffffep-1023, + (int)77 + }, + { // Entry 757 + 0x1.ffffffffffffe0p-945, + 0x1.ffffffffffffep-1023, + (int)78 + }, + { // Entry 758 + 0x1.ffffffffffffe0p-944, + 0x1.ffffffffffffep-1023, + (int)79 + }, + { // Entry 759 + 0x1.ffffffffffffe0p-943, + 0x1.ffffffffffffep-1023, + (int)80 + }, + { // Entry 760 + 0x1.ffffffffffffe0p-942, + 0x1.ffffffffffffep-1023, + (int)81 + }, + { // Entry 761 + 0x1.ffffffffffffe0p-941, + 0x1.ffffffffffffep-1023, + (int)82 + }, + { // Entry 762 + 0x1.ffffffffffffe0p-940, + 0x1.ffffffffffffep-1023, + (int)83 + }, + { // Entry 763 + 0x1.ffffffffffffe0p-939, + 0x1.ffffffffffffep-1023, + (int)84 + }, + { // Entry 764 + 0x1.ffffffffffffe0p-938, + 0x1.ffffffffffffep-1023, + (int)85 + }, + { // Entry 765 + 0x1.ffffffffffffe0p-937, + 0x1.ffffffffffffep-1023, + (int)86 + }, + { // Entry 766 + 0x1.ffffffffffffe0p-936, + 0x1.ffffffffffffep-1023, + (int)87 + }, + { // Entry 767 + 0x1.ffffffffffffe0p-935, + 0x1.ffffffffffffep-1023, + (int)88 + }, + { // Entry 768 + 0x1.ffffffffffffe0p-934, + 0x1.ffffffffffffep-1023, + (int)89 + }, + { // Entry 769 + 0x1.ffffffffffffe0p-933, + 0x1.ffffffffffffep-1023, + (int)90 + }, + { // Entry 770 + 0x1.ffffffffffffe0p-932, + 0x1.ffffffffffffep-1023, + (int)91 + }, + { // Entry 771 + 0x1.ffffffffffffe0p-931, + 0x1.ffffffffffffep-1023, + (int)92 + }, + { // Entry 772 + 0x1.ffffffffffffe0p-930, + 0x1.ffffffffffffep-1023, + (int)93 + }, + { // Entry 773 + 0x1.ffffffffffffe0p-929, + 0x1.ffffffffffffep-1023, + (int)94 + }, + { // Entry 774 + 0x1.ffffffffffffe0p-928, + 0x1.ffffffffffffep-1023, + (int)95 + }, + { // Entry 775 + 0x1.ffffffffffffe0p-927, + 0x1.ffffffffffffep-1023, + (int)96 + }, + { // Entry 776 + 0x1.ffffffffffffe0p-926, + 0x1.ffffffffffffep-1023, + (int)97 + }, + { // Entry 777 + 0x1.ffffffffffffe0p-925, + 0x1.ffffffffffffep-1023, + (int)98 + }, + { // Entry 778 + 0x1.ffffffffffffe0p-924, + 0x1.ffffffffffffep-1023, + (int)99 + }, + { // Entry 779 + 0x1.ffffffffffffe0p-923, + 0x1.ffffffffffffep-1023, + (int)100 + }, + { // Entry 780 + 0x1.ffffffffffffe0p-922, + 0x1.ffffffffffffep-1023, + (int)101 + }, + { // Entry 781 + 0x1.ffffffffffffe0p-921, + 0x1.ffffffffffffep-1023, + (int)102 + }, + { // Entry 782 + 0x1.ffffffffffffe0p-920, + 0x1.ffffffffffffep-1023, + (int)103 + }, + { // Entry 783 + 0x1.ffffffffffffe0p-919, + 0x1.ffffffffffffep-1023, + (int)104 + }, + { // Entry 784 + 0x1.ffffffffffffe0p-918, + 0x1.ffffffffffffep-1023, + (int)105 + }, + { // Entry 785 + 0x1.ffffffffffffe0p-917, + 0x1.ffffffffffffep-1023, + (int)106 + }, + { // Entry 786 + 0x1.ffffffffffffe0p-916, + 0x1.ffffffffffffep-1023, + (int)107 + }, + { // Entry 787 + 0x1.ffffffffffffe0p-915, + 0x1.ffffffffffffep-1023, + (int)108 + }, + { // Entry 788 + 0x1.ffffffffffffe0p-914, + 0x1.ffffffffffffep-1023, + (int)109 + }, + { // Entry 789 + 0x1.ffffffffffffe0p-913, + 0x1.ffffffffffffep-1023, + (int)110 + }, + { // Entry 790 + 0x1.ffffffffffffe0p-912, + 0x1.ffffffffffffep-1023, + (int)111 + }, + { // Entry 791 + 0x1.ffffffffffffe0p-911, + 0x1.ffffffffffffep-1023, + (int)112 + }, + { // Entry 792 + 0x1.ffffffffffffe0p-910, + 0x1.ffffffffffffep-1023, + (int)113 + }, + { // Entry 793 + 0x1.ffffffffffffe0p-909, + 0x1.ffffffffffffep-1023, + (int)114 + }, + { // Entry 794 + 0x1.ffffffffffffe0p-908, + 0x1.ffffffffffffep-1023, + (int)115 + }, + { // Entry 795 + 0x1.ffffffffffffe0p-907, + 0x1.ffffffffffffep-1023, + (int)116 + }, + { // Entry 796 + 0x1.ffffffffffffe0p-906, + 0x1.ffffffffffffep-1023, + (int)117 + }, + { // Entry 797 + 0x1.ffffffffffffe0p-905, + 0x1.ffffffffffffep-1023, + (int)118 + }, + { // Entry 798 + 0x1.ffffffffffffe0p-904, + 0x1.ffffffffffffep-1023, + (int)119 + }, + { // Entry 799 + 0x1.ffffffffffffe0p-903, + 0x1.ffffffffffffep-1023, + (int)120 + }, + { // Entry 800 + 0x1.ffffffffffffe0p-902, + 0x1.ffffffffffffep-1023, + (int)121 + }, + { // Entry 801 + 0x1.ffffffffffffe0p-901, + 0x1.ffffffffffffep-1023, + (int)122 + }, + { // Entry 802 + 0x1.ffffffffffffe0p-900, + 0x1.ffffffffffffep-1023, + (int)123 + }, + { // Entry 803 + 0x1.ffffffffffffe0p-899, + 0x1.ffffffffffffep-1023, + (int)124 + }, + { // Entry 804 + 0x1.ffffffffffffe0p-898, + 0x1.ffffffffffffep-1023, + (int)125 + }, + { // Entry 805 + 0x1.ffffffffffffe0p-897, + 0x1.ffffffffffffep-1023, + (int)126 + }, + { // Entry 806 + 0x1.ffffffffffffe0p-896, + 0x1.ffffffffffffep-1023, + (int)127 + }, + { // Entry 807 + 0x1.ffffffffffffe0p-895, + 0x1.ffffffffffffep-1023, + (int)128 + }, + { // Entry 808 + 0x1.ffffffffffffe0p-894, + 0x1.ffffffffffffep-1023, + (int)129 + }, + { // Entry 809 + 0x1.ffffffffffffe0p-893, + 0x1.ffffffffffffep-1023, + (int)130 + }, + { // Entry 810 + 0x1.p0, + 0x1.0p-1074, + (int)1074 + }, + { // Entry 811 + 0x1.p-1, + 0x1.0p-1074, + (int)1073 + }, + { // Entry 812 + 0x1.ffffffffffffe0p51, + 0x1.ffffffffffffep-1023, + (int)1074 + }, + { // Entry 813 + 0x1.ffffffffffffe0p50, + 0x1.ffffffffffffep-1023, + (int)1073 + }, + { // Entry 814 + 0x1.p-1022, + 0x1.0p-1074, + (int)52 + }, + { // Entry 815 + 0x1.p-1023, + 0x1.0p-1074, + (int)51 + }, + { // Entry 816 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + (int)52 + }, + { // Entry 817 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + (int)51 + }, + { // Entry 818 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 819 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 820 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 821 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 822 + 0.0, + 0.0, + (int)0 + }, + { // Entry 823 + -0.0, + -0.0, + (int)0 + }, + { // Entry 824 + 0.0, + 0.0, + (int)1 + }, + { // Entry 825 + -0.0, + -0.0, + (int)1 + }, + { // Entry 826 + 0.0, + 0.0, + (int)-1 + }, + { // Entry 827 + -0.0, + -0.0, + (int)-1 + }, + { // Entry 828 + 0.0, + 0.0, + (int)127 + }, + { // Entry 829 + -0.0, + -0.0, + (int)127 + }, + { // Entry 830 + 0.0, + 0.0, + (int)-127 + }, + { // Entry 831 + -0.0, + -0.0, + (int)-127 + }, + { // Entry 832 + HUGE_VAL, + HUGE_VAL, + (int)0 + }, + { // Entry 833 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 834 + 0x1.p-1022, + 0x1.0p-1022, + (int)0 + }, + { // Entry 835 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 836 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 837 + -0x1.p-1074, + -0x1.0p-1074, + (int)0 + }, + { // Entry 838 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 839 + -0x1.p-1022, + -0x1.0p-1022, + (int)0 + }, + { // Entry 840 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 841 + -HUGE_VAL, + -HUGE_VAL, + (int)0 + }, + { // Entry 842 + HUGE_VAL, + HUGE_VAL, + (int)1 + }, + { // Entry 843 + -HUGE_VAL, + -HUGE_VAL, + (int)1 + }, + { // Entry 844 + HUGE_VAL, + HUGE_VAL, + (int)-1 + }, + { // Entry 845 + -HUGE_VAL, + -HUGE_VAL, + (int)-1 + }, + { // Entry 846 + HUGE_VAL, + HUGE_VAL, + (int)127 + }, + { // Entry 847 + -HUGE_VAL, + -HUGE_VAL, + (int)127 + }, + { // Entry 848 + HUGE_VAL, + HUGE_VAL, + (int)-127 + }, + { // Entry 849 + -HUGE_VAL, + -HUGE_VAL, + (int)-127 + }, + { // Entry 850 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)1 + }, + { // Entry 851 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)127 + }, + { // Entry 852 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + (int)1 + }, + { // Entry 853 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + (int)127 + }, + { // Entry 854 + HUGE_VAL, + 0x1.0p-1022, + (int)40000 + }, + { // Entry 855 + HUGE_VAL, + 0x1.0p-1074, + (int)40000 + }, + { // Entry 856 + -HUGE_VAL, + -0x1.0p-1022, + (int)40000 + }, + { // Entry 857 + -HUGE_VAL, + -0x1.0p-1074, + (int)40000 + }, + { // Entry 858 + 0x1.p-1023, + 0x1.0p-1022, + (int)-1 + }, + { // Entry 859 + 0x1.ffffffffffffe0p-1024, + 0x1.ffffffffffffep-1023, + (int)-1 + }, + { // Entry 860 + 0.0, + 0x1.0p-1074, + (int)-1 + }, + { // Entry 861 + -0.0, + -0x1.0p-1074, + (int)-1 + }, + { // Entry 862 + -0x1.ffffffffffffe0p-1024, + -0x1.ffffffffffffep-1023, + (int)-1 + }, + { // Entry 863 + -0x1.p-1023, + -0x1.0p-1022, + (int)-1 + }, + { // Entry 864 + 0.0, + 0x1.fffffffffffffp1023, + (int)-40000 + }, + { // Entry 865 + -0.0, + -0x1.fffffffffffffp1023, + (int)-40000 + } +}; diff --git a/tests/math_data/ldexpf_intel_data.h b/tests/math_data/ldexpf_intel_data.h new file mode 100644 index 000000000..b74ed93da --- /dev/null +++ b/tests/math_data/ldexpf_intel_data.h @@ -0,0 +1,4288 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_ldexpf_intel_data[] = { + { // Entry 0 + -0.0f, + -0x1.p-149, + (int)-10 + }, + { // Entry 1 + -0x1.555554p-128, + -0x1.555554p-2, + (int)-126 + }, + { // Entry 2 + -0x1.6db6dcp-128, + -0x1.6db6dcp-1, + (int)-127 + }, + { // Entry 3 + -0x1.8e38e4p-128, + -0x1.8e38e4p-1, + (int)-127 + }, + { // Entry 4 + 0.0f, + 0x1.p-149, + (int)-1 + }, + { // Entry 5 + 0.0f, + 0x1.p-149, + (int)-10 + }, + { // Entry 6 + 0x1.29e412p-127, + 0x1.29e412p-7, + (int)-120 + }, + { // Entry 7 + 0.0f, + 0x1.dddddep-2, + (int)-148 + }, + { // Entry 8 + 0.0f, + 0x1.ffff60p-127, + (int)-23 + }, + { // Entry 9 + 0.0f, + 0x1.ffff84p-127, + (int)-23 + }, + { // Entry 10 + 0x1.fffff8p-137, + 0x1.fffff8p-127, + (int)-10 + }, + { // Entry 11 + 0.0f, + 0x1.fffffep127, + (int)(-2147483647-1) + }, + { // Entry 12 + HUGE_VALF, + 0x1.fffffep127, + (int)2147483647 + }, + { // Entry 13 + -0x1.p-10, + -0x1.p0, + (int)-10 + }, + { // Entry 14 + -0x1.p-9, + -0x1.p0, + (int)-9 + }, + { // Entry 15 + -0x1.p-8, + -0x1.p0, + (int)-8 + }, + { // Entry 16 + -0x1.p-7, + -0x1.p0, + (int)-7 + }, + { // Entry 17 + -0x1.p-6, + -0x1.p0, + (int)-6 + }, + { // Entry 18 + -0x1.p-5, + -0x1.p0, + (int)-5 + }, + { // Entry 19 + -0x1.p-4, + -0x1.p0, + (int)-4 + }, + { // Entry 20 + -0x1.p-3, + -0x1.p0, + (int)-3 + }, + { // Entry 21 + -0x1.p-2, + -0x1.p0, + (int)-2 + }, + { // Entry 22 + -0x1.p-1, + -0x1.p0, + (int)-1 + }, + { // Entry 23 + -0x1.p0, + -0x1.p0, + (int)0 + }, + { // Entry 24 + -0x1.p1, + -0x1.p0, + (int)1 + }, + { // Entry 25 + -0x1.p2, + -0x1.p0, + (int)2 + }, + { // Entry 26 + -0x1.p3, + -0x1.p0, + (int)3 + }, + { // Entry 27 + -0x1.p4, + -0x1.p0, + (int)4 + }, + { // Entry 28 + -0x1.p5, + -0x1.p0, + (int)5 + }, + { // Entry 29 + -0x1.p6, + -0x1.p0, + (int)6 + }, + { // Entry 30 + -0x1.p7, + -0x1.p0, + (int)7 + }, + { // Entry 31 + -0x1.p8, + -0x1.p0, + (int)8 + }, + { // Entry 32 + -0x1.p9, + -0x1.p0, + (int)9 + }, + { // Entry 33 + -0x1.p10, + -0x1.p0, + (int)10 + }, + { // Entry 34 + -0x1.d1745cp-11, + -0x1.d1745cp-1, + (int)-10 + }, + { // Entry 35 + -0x1.d1745cp-10, + -0x1.d1745cp-1, + (int)-9 + }, + { // Entry 36 + -0x1.d1745cp-9, + -0x1.d1745cp-1, + (int)-8 + }, + { // Entry 37 + -0x1.d1745cp-8, + -0x1.d1745cp-1, + (int)-7 + }, + { // Entry 38 + -0x1.d1745cp-7, + -0x1.d1745cp-1, + (int)-6 + }, + { // Entry 39 + -0x1.d1745cp-6, + -0x1.d1745cp-1, + (int)-5 + }, + { // Entry 40 + -0x1.d1745cp-5, + -0x1.d1745cp-1, + (int)-4 + }, + { // Entry 41 + -0x1.d1745cp-4, + -0x1.d1745cp-1, + (int)-3 + }, + { // Entry 42 + -0x1.d1745cp-3, + -0x1.d1745cp-1, + (int)-2 + }, + { // Entry 43 + -0x1.d1745cp-2, + -0x1.d1745cp-1, + (int)-1 + }, + { // Entry 44 + -0x1.d1745cp-1, + -0x1.d1745cp-1, + (int)0 + }, + { // Entry 45 + -0x1.d1745cp0, + -0x1.d1745cp-1, + (int)1 + }, + { // Entry 46 + -0x1.d1745cp1, + -0x1.d1745cp-1, + (int)2 + }, + { // Entry 47 + -0x1.d1745cp2, + -0x1.d1745cp-1, + (int)3 + }, + { // Entry 48 + -0x1.d1745cp3, + -0x1.d1745cp-1, + (int)4 + }, + { // Entry 49 + -0x1.d1745cp4, + -0x1.d1745cp-1, + (int)5 + }, + { // Entry 50 + -0x1.d1745cp5, + -0x1.d1745cp-1, + (int)6 + }, + { // Entry 51 + -0x1.d1745cp6, + -0x1.d1745cp-1, + (int)7 + }, + { // Entry 52 + -0x1.d1745cp7, + -0x1.d1745cp-1, + (int)8 + }, + { // Entry 53 + -0x1.d1745cp8, + -0x1.d1745cp-1, + (int)9 + }, + { // Entry 54 + -0x1.d1745cp9, + -0x1.d1745cp-1, + (int)10 + }, + { // Entry 55 + -0x1.a2e8b8p-11, + -0x1.a2e8b8p-1, + (int)-10 + }, + { // Entry 56 + -0x1.a2e8b8p-10, + -0x1.a2e8b8p-1, + (int)-9 + }, + { // Entry 57 + -0x1.a2e8b8p-9, + -0x1.a2e8b8p-1, + (int)-8 + }, + { // Entry 58 + -0x1.a2e8b8p-8, + -0x1.a2e8b8p-1, + (int)-7 + }, + { // Entry 59 + -0x1.a2e8b8p-7, + -0x1.a2e8b8p-1, + (int)-6 + }, + { // Entry 60 + -0x1.a2e8b8p-6, + -0x1.a2e8b8p-1, + (int)-5 + }, + { // Entry 61 + -0x1.a2e8b8p-5, + -0x1.a2e8b8p-1, + (int)-4 + }, + { // Entry 62 + -0x1.a2e8b8p-4, + -0x1.a2e8b8p-1, + (int)-3 + }, + { // Entry 63 + -0x1.a2e8b8p-3, + -0x1.a2e8b8p-1, + (int)-2 + }, + { // Entry 64 + -0x1.a2e8b8p-2, + -0x1.a2e8b8p-1, + (int)-1 + }, + { // Entry 65 + -0x1.a2e8b8p-1, + -0x1.a2e8b8p-1, + (int)0 + }, + { // Entry 66 + -0x1.a2e8b8p0, + -0x1.a2e8b8p-1, + (int)1 + }, + { // Entry 67 + -0x1.a2e8b8p1, + -0x1.a2e8b8p-1, + (int)2 + }, + { // Entry 68 + -0x1.a2e8b8p2, + -0x1.a2e8b8p-1, + (int)3 + }, + { // Entry 69 + -0x1.a2e8b8p3, + -0x1.a2e8b8p-1, + (int)4 + }, + { // Entry 70 + -0x1.a2e8b8p4, + -0x1.a2e8b8p-1, + (int)5 + }, + { // Entry 71 + -0x1.a2e8b8p5, + -0x1.a2e8b8p-1, + (int)6 + }, + { // Entry 72 + -0x1.a2e8b8p6, + -0x1.a2e8b8p-1, + (int)7 + }, + { // Entry 73 + -0x1.a2e8b8p7, + -0x1.a2e8b8p-1, + (int)8 + }, + { // Entry 74 + -0x1.a2e8b8p8, + -0x1.a2e8b8p-1, + (int)9 + }, + { // Entry 75 + -0x1.a2e8b8p9, + -0x1.a2e8b8p-1, + (int)10 + }, + { // Entry 76 + -0x1.745d14p-11, + -0x1.745d14p-1, + (int)-10 + }, + { // Entry 77 + -0x1.745d14p-10, + -0x1.745d14p-1, + (int)-9 + }, + { // Entry 78 + -0x1.745d14p-9, + -0x1.745d14p-1, + (int)-8 + }, + { // Entry 79 + -0x1.745d14p-8, + -0x1.745d14p-1, + (int)-7 + }, + { // Entry 80 + -0x1.745d14p-7, + -0x1.745d14p-1, + (int)-6 + }, + { // Entry 81 + -0x1.745d14p-6, + -0x1.745d14p-1, + (int)-5 + }, + { // Entry 82 + -0x1.745d14p-5, + -0x1.745d14p-1, + (int)-4 + }, + { // Entry 83 + -0x1.745d14p-4, + -0x1.745d14p-1, + (int)-3 + }, + { // Entry 84 + -0x1.745d14p-3, + -0x1.745d14p-1, + (int)-2 + }, + { // Entry 85 + -0x1.745d14p-2, + -0x1.745d14p-1, + (int)-1 + }, + { // Entry 86 + -0x1.745d14p-1, + -0x1.745d14p-1, + (int)0 + }, + { // Entry 87 + -0x1.745d14p0, + -0x1.745d14p-1, + (int)1 + }, + { // Entry 88 + -0x1.745d14p1, + -0x1.745d14p-1, + (int)2 + }, + { // Entry 89 + -0x1.745d14p2, + -0x1.745d14p-1, + (int)3 + }, + { // Entry 90 + -0x1.745d14p3, + -0x1.745d14p-1, + (int)4 + }, + { // Entry 91 + -0x1.745d14p4, + -0x1.745d14p-1, + (int)5 + }, + { // Entry 92 + -0x1.745d14p5, + -0x1.745d14p-1, + (int)6 + }, + { // Entry 93 + -0x1.745d14p6, + -0x1.745d14p-1, + (int)7 + }, + { // Entry 94 + -0x1.745d14p7, + -0x1.745d14p-1, + (int)8 + }, + { // Entry 95 + -0x1.745d14p8, + -0x1.745d14p-1, + (int)9 + }, + { // Entry 96 + -0x1.745d14p9, + -0x1.745d14p-1, + (int)10 + }, + { // Entry 97 + -0x1.45d170p-11, + -0x1.45d170p-1, + (int)-10 + }, + { // Entry 98 + -0x1.45d170p-10, + -0x1.45d170p-1, + (int)-9 + }, + { // Entry 99 + -0x1.45d170p-9, + -0x1.45d170p-1, + (int)-8 + }, + { // Entry 100 + -0x1.45d170p-8, + -0x1.45d170p-1, + (int)-7 + }, + { // Entry 101 + -0x1.45d170p-7, + -0x1.45d170p-1, + (int)-6 + }, + { // Entry 102 + -0x1.45d170p-6, + -0x1.45d170p-1, + (int)-5 + }, + { // Entry 103 + -0x1.45d170p-5, + -0x1.45d170p-1, + (int)-4 + }, + { // Entry 104 + -0x1.45d170p-4, + -0x1.45d170p-1, + (int)-3 + }, + { // Entry 105 + -0x1.45d170p-3, + -0x1.45d170p-1, + (int)-2 + }, + { // Entry 106 + -0x1.45d170p-2, + -0x1.45d170p-1, + (int)-1 + }, + { // Entry 107 + -0x1.45d170p-1, + -0x1.45d170p-1, + (int)0 + }, + { // Entry 108 + -0x1.45d170p0, + -0x1.45d170p-1, + (int)1 + }, + { // Entry 109 + -0x1.45d170p1, + -0x1.45d170p-1, + (int)2 + }, + { // Entry 110 + -0x1.45d170p2, + -0x1.45d170p-1, + (int)3 + }, + { // Entry 111 + -0x1.45d170p3, + -0x1.45d170p-1, + (int)4 + }, + { // Entry 112 + -0x1.45d170p4, + -0x1.45d170p-1, + (int)5 + }, + { // Entry 113 + -0x1.45d170p5, + -0x1.45d170p-1, + (int)6 + }, + { // Entry 114 + -0x1.45d170p6, + -0x1.45d170p-1, + (int)7 + }, + { // Entry 115 + -0x1.45d170p7, + -0x1.45d170p-1, + (int)8 + }, + { // Entry 116 + -0x1.45d170p8, + -0x1.45d170p-1, + (int)9 + }, + { // Entry 117 + -0x1.45d170p9, + -0x1.45d170p-1, + (int)10 + }, + { // Entry 118 + -0x1.1745ccp-11, + -0x1.1745ccp-1, + (int)-10 + }, + { // Entry 119 + -0x1.1745ccp-10, + -0x1.1745ccp-1, + (int)-9 + }, + { // Entry 120 + -0x1.1745ccp-9, + -0x1.1745ccp-1, + (int)-8 + }, + { // Entry 121 + -0x1.1745ccp-8, + -0x1.1745ccp-1, + (int)-7 + }, + { // Entry 122 + -0x1.1745ccp-7, + -0x1.1745ccp-1, + (int)-6 + }, + { // Entry 123 + -0x1.1745ccp-6, + -0x1.1745ccp-1, + (int)-5 + }, + { // Entry 124 + -0x1.1745ccp-5, + -0x1.1745ccp-1, + (int)-4 + }, + { // Entry 125 + -0x1.1745ccp-4, + -0x1.1745ccp-1, + (int)-3 + }, + { // Entry 126 + -0x1.1745ccp-3, + -0x1.1745ccp-1, + (int)-2 + }, + { // Entry 127 + -0x1.1745ccp-2, + -0x1.1745ccp-1, + (int)-1 + }, + { // Entry 128 + -0x1.1745ccp-1, + -0x1.1745ccp-1, + (int)0 + }, + { // Entry 129 + -0x1.1745ccp0, + -0x1.1745ccp-1, + (int)1 + }, + { // Entry 130 + -0x1.1745ccp1, + -0x1.1745ccp-1, + (int)2 + }, + { // Entry 131 + -0x1.1745ccp2, + -0x1.1745ccp-1, + (int)3 + }, + { // Entry 132 + -0x1.1745ccp3, + -0x1.1745ccp-1, + (int)4 + }, + { // Entry 133 + -0x1.1745ccp4, + -0x1.1745ccp-1, + (int)5 + }, + { // Entry 134 + -0x1.1745ccp5, + -0x1.1745ccp-1, + (int)6 + }, + { // Entry 135 + -0x1.1745ccp6, + -0x1.1745ccp-1, + (int)7 + }, + { // Entry 136 + -0x1.1745ccp7, + -0x1.1745ccp-1, + (int)8 + }, + { // Entry 137 + -0x1.1745ccp8, + -0x1.1745ccp-1, + (int)9 + }, + { // Entry 138 + -0x1.1745ccp9, + -0x1.1745ccp-1, + (int)10 + }, + { // Entry 139 + -0x1.d17452p-12, + -0x1.d17452p-2, + (int)-10 + }, + { // Entry 140 + -0x1.d17452p-11, + -0x1.d17452p-2, + (int)-9 + }, + { // Entry 141 + -0x1.d17452p-10, + -0x1.d17452p-2, + (int)-8 + }, + { // Entry 142 + -0x1.d17452p-9, + -0x1.d17452p-2, + (int)-7 + }, + { // Entry 143 + -0x1.d17452p-8, + -0x1.d17452p-2, + (int)-6 + }, + { // Entry 144 + -0x1.d17452p-7, + -0x1.d17452p-2, + (int)-5 + }, + { // Entry 145 + -0x1.d17452p-6, + -0x1.d17452p-2, + (int)-4 + }, + { // Entry 146 + -0x1.d17452p-5, + -0x1.d17452p-2, + (int)-3 + }, + { // Entry 147 + -0x1.d17452p-4, + -0x1.d17452p-2, + (int)-2 + }, + { // Entry 148 + -0x1.d17452p-3, + -0x1.d17452p-2, + (int)-1 + }, + { // Entry 149 + -0x1.d17452p-2, + -0x1.d17452p-2, + (int)0 + }, + { // Entry 150 + -0x1.d17452p-1, + -0x1.d17452p-2, + (int)1 + }, + { // Entry 151 + -0x1.d17452p0, + -0x1.d17452p-2, + (int)2 + }, + { // Entry 152 + -0x1.d17452p1, + -0x1.d17452p-2, + (int)3 + }, + { // Entry 153 + -0x1.d17452p2, + -0x1.d17452p-2, + (int)4 + }, + { // Entry 154 + -0x1.d17452p3, + -0x1.d17452p-2, + (int)5 + }, + { // Entry 155 + -0x1.d17452p4, + -0x1.d17452p-2, + (int)6 + }, + { // Entry 156 + -0x1.d17452p5, + -0x1.d17452p-2, + (int)7 + }, + { // Entry 157 + -0x1.d17452p6, + -0x1.d17452p-2, + (int)8 + }, + { // Entry 158 + -0x1.d17452p7, + -0x1.d17452p-2, + (int)9 + }, + { // Entry 159 + -0x1.d17452p8, + -0x1.d17452p-2, + (int)10 + }, + { // Entry 160 + -0x1.745d0cp-12, + -0x1.745d0cp-2, + (int)-10 + }, + { // Entry 161 + -0x1.745d0cp-11, + -0x1.745d0cp-2, + (int)-9 + }, + { // Entry 162 + -0x1.745d0cp-10, + -0x1.745d0cp-2, + (int)-8 + }, + { // Entry 163 + -0x1.745d0cp-9, + -0x1.745d0cp-2, + (int)-7 + }, + { // Entry 164 + -0x1.745d0cp-8, + -0x1.745d0cp-2, + (int)-6 + }, + { // Entry 165 + -0x1.745d0cp-7, + -0x1.745d0cp-2, + (int)-5 + }, + { // Entry 166 + -0x1.745d0cp-6, + -0x1.745d0cp-2, + (int)-4 + }, + { // Entry 167 + -0x1.745d0cp-5, + -0x1.745d0cp-2, + (int)-3 + }, + { // Entry 168 + -0x1.745d0cp-4, + -0x1.745d0cp-2, + (int)-2 + }, + { // Entry 169 + -0x1.745d0cp-3, + -0x1.745d0cp-2, + (int)-1 + }, + { // Entry 170 + -0x1.745d0cp-2, + -0x1.745d0cp-2, + (int)0 + }, + { // Entry 171 + -0x1.745d0cp-1, + -0x1.745d0cp-2, + (int)1 + }, + { // Entry 172 + -0x1.745d0cp0, + -0x1.745d0cp-2, + (int)2 + }, + { // Entry 173 + -0x1.745d0cp1, + -0x1.745d0cp-2, + (int)3 + }, + { // Entry 174 + -0x1.745d0cp2, + -0x1.745d0cp-2, + (int)4 + }, + { // Entry 175 + -0x1.745d0cp3, + -0x1.745d0cp-2, + (int)5 + }, + { // Entry 176 + -0x1.745d0cp4, + -0x1.745d0cp-2, + (int)6 + }, + { // Entry 177 + -0x1.745d0cp5, + -0x1.745d0cp-2, + (int)7 + }, + { // Entry 178 + -0x1.745d0cp6, + -0x1.745d0cp-2, + (int)8 + }, + { // Entry 179 + -0x1.745d0cp7, + -0x1.745d0cp-2, + (int)9 + }, + { // Entry 180 + -0x1.745d0cp8, + -0x1.745d0cp-2, + (int)10 + }, + { // Entry 181 + -0x1.1745c6p-12, + -0x1.1745c6p-2, + (int)-10 + }, + { // Entry 182 + -0x1.1745c6p-11, + -0x1.1745c6p-2, + (int)-9 + }, + { // Entry 183 + -0x1.1745c6p-10, + -0x1.1745c6p-2, + (int)-8 + }, + { // Entry 184 + -0x1.1745c6p-9, + -0x1.1745c6p-2, + (int)-7 + }, + { // Entry 185 + -0x1.1745c6p-8, + -0x1.1745c6p-2, + (int)-6 + }, + { // Entry 186 + -0x1.1745c6p-7, + -0x1.1745c6p-2, + (int)-5 + }, + { // Entry 187 + -0x1.1745c6p-6, + -0x1.1745c6p-2, + (int)-4 + }, + { // Entry 188 + -0x1.1745c6p-5, + -0x1.1745c6p-2, + (int)-3 + }, + { // Entry 189 + -0x1.1745c6p-4, + -0x1.1745c6p-2, + (int)-2 + }, + { // Entry 190 + -0x1.1745c6p-3, + -0x1.1745c6p-2, + (int)-1 + }, + { // Entry 191 + -0x1.1745c6p-2, + -0x1.1745c6p-2, + (int)0 + }, + { // Entry 192 + -0x1.1745c6p-1, + -0x1.1745c6p-2, + (int)1 + }, + { // Entry 193 + -0x1.1745c6p0, + -0x1.1745c6p-2, + (int)2 + }, + { // Entry 194 + -0x1.1745c6p1, + -0x1.1745c6p-2, + (int)3 + }, + { // Entry 195 + -0x1.1745c6p2, + -0x1.1745c6p-2, + (int)4 + }, + { // Entry 196 + -0x1.1745c6p3, + -0x1.1745c6p-2, + (int)5 + }, + { // Entry 197 + -0x1.1745c6p4, + -0x1.1745c6p-2, + (int)6 + }, + { // Entry 198 + -0x1.1745c6p5, + -0x1.1745c6p-2, + (int)7 + }, + { // Entry 199 + -0x1.1745c6p6, + -0x1.1745c6p-2, + (int)8 + }, + { // Entry 200 + -0x1.1745c6p7, + -0x1.1745c6p-2, + (int)9 + }, + { // Entry 201 + -0x1.1745c6p8, + -0x1.1745c6p-2, + (int)10 + }, + { // Entry 202 + -0x1.745dp-13, + -0x1.745dp-3, + (int)-10 + }, + { // Entry 203 + -0x1.745dp-12, + -0x1.745dp-3, + (int)-9 + }, + { // Entry 204 + -0x1.745dp-11, + -0x1.745dp-3, + (int)-8 + }, + { // Entry 205 + -0x1.745dp-10, + -0x1.745dp-3, + (int)-7 + }, + { // Entry 206 + -0x1.745dp-9, + -0x1.745dp-3, + (int)-6 + }, + { // Entry 207 + -0x1.745dp-8, + -0x1.745dp-3, + (int)-5 + }, + { // Entry 208 + -0x1.745dp-7, + -0x1.745dp-3, + (int)-4 + }, + { // Entry 209 + -0x1.745dp-6, + -0x1.745dp-3, + (int)-3 + }, + { // Entry 210 + -0x1.745dp-5, + -0x1.745dp-3, + (int)-2 + }, + { // Entry 211 + -0x1.745dp-4, + -0x1.745dp-3, + (int)-1 + }, + { // Entry 212 + -0x1.745dp-3, + -0x1.745dp-3, + (int)0 + }, + { // Entry 213 + -0x1.745dp-2, + -0x1.745dp-3, + (int)1 + }, + { // Entry 214 + -0x1.745dp-1, + -0x1.745dp-3, + (int)2 + }, + { // Entry 215 + -0x1.745dp0, + -0x1.745dp-3, + (int)3 + }, + { // Entry 216 + -0x1.745dp1, + -0x1.745dp-3, + (int)4 + }, + { // Entry 217 + -0x1.745dp2, + -0x1.745dp-3, + (int)5 + }, + { // Entry 218 + -0x1.745dp3, + -0x1.745dp-3, + (int)6 + }, + { // Entry 219 + -0x1.745dp4, + -0x1.745dp-3, + (int)7 + }, + { // Entry 220 + -0x1.745dp5, + -0x1.745dp-3, + (int)8 + }, + { // Entry 221 + -0x1.745dp6, + -0x1.745dp-3, + (int)9 + }, + { // Entry 222 + -0x1.745dp7, + -0x1.745dp-3, + (int)10 + }, + { // Entry 223 + -0x1.745ce8p-14, + -0x1.745ce8p-4, + (int)-10 + }, + { // Entry 224 + -0x1.745ce8p-13, + -0x1.745ce8p-4, + (int)-9 + }, + { // Entry 225 + -0x1.745ce8p-12, + -0x1.745ce8p-4, + (int)-8 + }, + { // Entry 226 + -0x1.745ce8p-11, + -0x1.745ce8p-4, + (int)-7 + }, + { // Entry 227 + -0x1.745ce8p-10, + -0x1.745ce8p-4, + (int)-6 + }, + { // Entry 228 + -0x1.745ce8p-9, + -0x1.745ce8p-4, + (int)-5 + }, + { // Entry 229 + -0x1.745ce8p-8, + -0x1.745ce8p-4, + (int)-4 + }, + { // Entry 230 + -0x1.745ce8p-7, + -0x1.745ce8p-4, + (int)-3 + }, + { // Entry 231 + -0x1.745ce8p-6, + -0x1.745ce8p-4, + (int)-2 + }, + { // Entry 232 + -0x1.745ce8p-5, + -0x1.745ce8p-4, + (int)-1 + }, + { // Entry 233 + -0x1.745ce8p-4, + -0x1.745ce8p-4, + (int)0 + }, + { // Entry 234 + -0x1.745ce8p-3, + -0x1.745ce8p-4, + (int)1 + }, + { // Entry 235 + -0x1.745ce8p-2, + -0x1.745ce8p-4, + (int)2 + }, + { // Entry 236 + -0x1.745ce8p-1, + -0x1.745ce8p-4, + (int)3 + }, + { // Entry 237 + -0x1.745ce8p0, + -0x1.745ce8p-4, + (int)4 + }, + { // Entry 238 + -0x1.745ce8p1, + -0x1.745ce8p-4, + (int)5 + }, + { // Entry 239 + -0x1.745ce8p2, + -0x1.745ce8p-4, + (int)6 + }, + { // Entry 240 + -0x1.745ce8p3, + -0x1.745ce8p-4, + (int)7 + }, + { // Entry 241 + -0x1.745ce8p4, + -0x1.745ce8p-4, + (int)8 + }, + { // Entry 242 + -0x1.745ce8p5, + -0x1.745ce8p-4, + (int)9 + }, + { // Entry 243 + -0x1.745ce8p6, + -0x1.745ce8p-4, + (int)10 + }, + { // Entry 244 + 0x1.80p-33, + 0x1.80p-23, + (int)-10 + }, + { // Entry 245 + 0x1.80p-32, + 0x1.80p-23, + (int)-9 + }, + { // Entry 246 + 0x1.80p-31, + 0x1.80p-23, + (int)-8 + }, + { // Entry 247 + 0x1.80p-30, + 0x1.80p-23, + (int)-7 + }, + { // Entry 248 + 0x1.80p-29, + 0x1.80p-23, + (int)-6 + }, + { // Entry 249 + 0x1.80p-28, + 0x1.80p-23, + (int)-5 + }, + { // Entry 250 + 0x1.80p-27, + 0x1.80p-23, + (int)-4 + }, + { // Entry 251 + 0x1.80p-26, + 0x1.80p-23, + (int)-3 + }, + { // Entry 252 + 0x1.80p-25, + 0x1.80p-23, + (int)-2 + }, + { // Entry 253 + 0x1.80p-24, + 0x1.80p-23, + (int)-1 + }, + { // Entry 254 + 0x1.80p-23, + 0x1.80p-23, + (int)0 + }, + { // Entry 255 + 0x1.80p-22, + 0x1.80p-23, + (int)1 + }, + { // Entry 256 + 0x1.80p-21, + 0x1.80p-23, + (int)2 + }, + { // Entry 257 + 0x1.80p-20, + 0x1.80p-23, + (int)3 + }, + { // Entry 258 + 0x1.80p-19, + 0x1.80p-23, + (int)4 + }, + { // Entry 259 + 0x1.80p-18, + 0x1.80p-23, + (int)5 + }, + { // Entry 260 + 0x1.80p-17, + 0x1.80p-23, + (int)6 + }, + { // Entry 261 + 0x1.80p-16, + 0x1.80p-23, + (int)7 + }, + { // Entry 262 + 0x1.80p-15, + 0x1.80p-23, + (int)8 + }, + { // Entry 263 + 0x1.80p-14, + 0x1.80p-23, + (int)9 + }, + { // Entry 264 + 0x1.80p-13, + 0x1.80p-23, + (int)10 + }, + { // Entry 265 + 0x1.745d48p-14, + 0x1.745d48p-4, + (int)-10 + }, + { // Entry 266 + 0x1.745d48p-13, + 0x1.745d48p-4, + (int)-9 + }, + { // Entry 267 + 0x1.745d48p-12, + 0x1.745d48p-4, + (int)-8 + }, + { // Entry 268 + 0x1.745d48p-11, + 0x1.745d48p-4, + (int)-7 + }, + { // Entry 269 + 0x1.745d48p-10, + 0x1.745d48p-4, + (int)-6 + }, + { // Entry 270 + 0x1.745d48p-9, + 0x1.745d48p-4, + (int)-5 + }, + { // Entry 271 + 0x1.745d48p-8, + 0x1.745d48p-4, + (int)-4 + }, + { // Entry 272 + 0x1.745d48p-7, + 0x1.745d48p-4, + (int)-3 + }, + { // Entry 273 + 0x1.745d48p-6, + 0x1.745d48p-4, + (int)-2 + }, + { // Entry 274 + 0x1.745d48p-5, + 0x1.745d48p-4, + (int)-1 + }, + { // Entry 275 + 0x1.745d48p-4, + 0x1.745d48p-4, + (int)0 + }, + { // Entry 276 + 0x1.745d48p-3, + 0x1.745d48p-4, + (int)1 + }, + { // Entry 277 + 0x1.745d48p-2, + 0x1.745d48p-4, + (int)2 + }, + { // Entry 278 + 0x1.745d48p-1, + 0x1.745d48p-4, + (int)3 + }, + { // Entry 279 + 0x1.745d48p0, + 0x1.745d48p-4, + (int)4 + }, + { // Entry 280 + 0x1.745d48p1, + 0x1.745d48p-4, + (int)5 + }, + { // Entry 281 + 0x1.745d48p2, + 0x1.745d48p-4, + (int)6 + }, + { // Entry 282 + 0x1.745d48p3, + 0x1.745d48p-4, + (int)7 + }, + { // Entry 283 + 0x1.745d48p4, + 0x1.745d48p-4, + (int)8 + }, + { // Entry 284 + 0x1.745d48p5, + 0x1.745d48p-4, + (int)9 + }, + { // Entry 285 + 0x1.745d48p6, + 0x1.745d48p-4, + (int)10 + }, + { // Entry 286 + 0x1.745d30p-13, + 0x1.745d30p-3, + (int)-10 + }, + { // Entry 287 + 0x1.745d30p-12, + 0x1.745d30p-3, + (int)-9 + }, + { // Entry 288 + 0x1.745d30p-11, + 0x1.745d30p-3, + (int)-8 + }, + { // Entry 289 + 0x1.745d30p-10, + 0x1.745d30p-3, + (int)-7 + }, + { // Entry 290 + 0x1.745d30p-9, + 0x1.745d30p-3, + (int)-6 + }, + { // Entry 291 + 0x1.745d30p-8, + 0x1.745d30p-3, + (int)-5 + }, + { // Entry 292 + 0x1.745d30p-7, + 0x1.745d30p-3, + (int)-4 + }, + { // Entry 293 + 0x1.745d30p-6, + 0x1.745d30p-3, + (int)-3 + }, + { // Entry 294 + 0x1.745d30p-5, + 0x1.745d30p-3, + (int)-2 + }, + { // Entry 295 + 0x1.745d30p-4, + 0x1.745d30p-3, + (int)-1 + }, + { // Entry 296 + 0x1.745d30p-3, + 0x1.745d30p-3, + (int)0 + }, + { // Entry 297 + 0x1.745d30p-2, + 0x1.745d30p-3, + (int)1 + }, + { // Entry 298 + 0x1.745d30p-1, + 0x1.745d30p-3, + (int)2 + }, + { // Entry 299 + 0x1.745d30p0, + 0x1.745d30p-3, + (int)3 + }, + { // Entry 300 + 0x1.745d30p1, + 0x1.745d30p-3, + (int)4 + }, + { // Entry 301 + 0x1.745d30p2, + 0x1.745d30p-3, + (int)5 + }, + { // Entry 302 + 0x1.745d30p3, + 0x1.745d30p-3, + (int)6 + }, + { // Entry 303 + 0x1.745d30p4, + 0x1.745d30p-3, + (int)7 + }, + { // Entry 304 + 0x1.745d30p5, + 0x1.745d30p-3, + (int)8 + }, + { // Entry 305 + 0x1.745d30p6, + 0x1.745d30p-3, + (int)9 + }, + { // Entry 306 + 0x1.745d30p7, + 0x1.745d30p-3, + (int)10 + }, + { // Entry 307 + 0x1.1745dep-12, + 0x1.1745dep-2, + (int)-10 + }, + { // Entry 308 + 0x1.1745dep-11, + 0x1.1745dep-2, + (int)-9 + }, + { // Entry 309 + 0x1.1745dep-10, + 0x1.1745dep-2, + (int)-8 + }, + { // Entry 310 + 0x1.1745dep-9, + 0x1.1745dep-2, + (int)-7 + }, + { // Entry 311 + 0x1.1745dep-8, + 0x1.1745dep-2, + (int)-6 + }, + { // Entry 312 + 0x1.1745dep-7, + 0x1.1745dep-2, + (int)-5 + }, + { // Entry 313 + 0x1.1745dep-6, + 0x1.1745dep-2, + (int)-4 + }, + { // Entry 314 + 0x1.1745dep-5, + 0x1.1745dep-2, + (int)-3 + }, + { // Entry 315 + 0x1.1745dep-4, + 0x1.1745dep-2, + (int)-2 + }, + { // Entry 316 + 0x1.1745dep-3, + 0x1.1745dep-2, + (int)-1 + }, + { // Entry 317 + 0x1.1745dep-2, + 0x1.1745dep-2, + (int)0 + }, + { // Entry 318 + 0x1.1745dep-1, + 0x1.1745dep-2, + (int)1 + }, + { // Entry 319 + 0x1.1745dep0, + 0x1.1745dep-2, + (int)2 + }, + { // Entry 320 + 0x1.1745dep1, + 0x1.1745dep-2, + (int)3 + }, + { // Entry 321 + 0x1.1745dep2, + 0x1.1745dep-2, + (int)4 + }, + { // Entry 322 + 0x1.1745dep3, + 0x1.1745dep-2, + (int)5 + }, + { // Entry 323 + 0x1.1745dep4, + 0x1.1745dep-2, + (int)6 + }, + { // Entry 324 + 0x1.1745dep5, + 0x1.1745dep-2, + (int)7 + }, + { // Entry 325 + 0x1.1745dep6, + 0x1.1745dep-2, + (int)8 + }, + { // Entry 326 + 0x1.1745dep7, + 0x1.1745dep-2, + (int)9 + }, + { // Entry 327 + 0x1.1745dep8, + 0x1.1745dep-2, + (int)10 + }, + { // Entry 328 + 0x1.745d24p-12, + 0x1.745d24p-2, + (int)-10 + }, + { // Entry 329 + 0x1.745d24p-11, + 0x1.745d24p-2, + (int)-9 + }, + { // Entry 330 + 0x1.745d24p-10, + 0x1.745d24p-2, + (int)-8 + }, + { // Entry 331 + 0x1.745d24p-9, + 0x1.745d24p-2, + (int)-7 + }, + { // Entry 332 + 0x1.745d24p-8, + 0x1.745d24p-2, + (int)-6 + }, + { // Entry 333 + 0x1.745d24p-7, + 0x1.745d24p-2, + (int)-5 + }, + { // Entry 334 + 0x1.745d24p-6, + 0x1.745d24p-2, + (int)-4 + }, + { // Entry 335 + 0x1.745d24p-5, + 0x1.745d24p-2, + (int)-3 + }, + { // Entry 336 + 0x1.745d24p-4, + 0x1.745d24p-2, + (int)-2 + }, + { // Entry 337 + 0x1.745d24p-3, + 0x1.745d24p-2, + (int)-1 + }, + { // Entry 338 + 0x1.745d24p-2, + 0x1.745d24p-2, + (int)0 + }, + { // Entry 339 + 0x1.745d24p-1, + 0x1.745d24p-2, + (int)1 + }, + { // Entry 340 + 0x1.745d24p0, + 0x1.745d24p-2, + (int)2 + }, + { // Entry 341 + 0x1.745d24p1, + 0x1.745d24p-2, + (int)3 + }, + { // Entry 342 + 0x1.745d24p2, + 0x1.745d24p-2, + (int)4 + }, + { // Entry 343 + 0x1.745d24p3, + 0x1.745d24p-2, + (int)5 + }, + { // Entry 344 + 0x1.745d24p4, + 0x1.745d24p-2, + (int)6 + }, + { // Entry 345 + 0x1.745d24p5, + 0x1.745d24p-2, + (int)7 + }, + { // Entry 346 + 0x1.745d24p6, + 0x1.745d24p-2, + (int)8 + }, + { // Entry 347 + 0x1.745d24p7, + 0x1.745d24p-2, + (int)9 + }, + { // Entry 348 + 0x1.745d24p8, + 0x1.745d24p-2, + (int)10 + }, + { // Entry 349 + 0x1.d1746ap-12, + 0x1.d1746ap-2, + (int)-10 + }, + { // Entry 350 + 0x1.d1746ap-11, + 0x1.d1746ap-2, + (int)-9 + }, + { // Entry 351 + 0x1.d1746ap-10, + 0x1.d1746ap-2, + (int)-8 + }, + { // Entry 352 + 0x1.d1746ap-9, + 0x1.d1746ap-2, + (int)-7 + }, + { // Entry 353 + 0x1.d1746ap-8, + 0x1.d1746ap-2, + (int)-6 + }, + { // Entry 354 + 0x1.d1746ap-7, + 0x1.d1746ap-2, + (int)-5 + }, + { // Entry 355 + 0x1.d1746ap-6, + 0x1.d1746ap-2, + (int)-4 + }, + { // Entry 356 + 0x1.d1746ap-5, + 0x1.d1746ap-2, + (int)-3 + }, + { // Entry 357 + 0x1.d1746ap-4, + 0x1.d1746ap-2, + (int)-2 + }, + { // Entry 358 + 0x1.d1746ap-3, + 0x1.d1746ap-2, + (int)-1 + }, + { // Entry 359 + 0x1.d1746ap-2, + 0x1.d1746ap-2, + (int)0 + }, + { // Entry 360 + 0x1.d1746ap-1, + 0x1.d1746ap-2, + (int)1 + }, + { // Entry 361 + 0x1.d1746ap0, + 0x1.d1746ap-2, + (int)2 + }, + { // Entry 362 + 0x1.d1746ap1, + 0x1.d1746ap-2, + (int)3 + }, + { // Entry 363 + 0x1.d1746ap2, + 0x1.d1746ap-2, + (int)4 + }, + { // Entry 364 + 0x1.d1746ap3, + 0x1.d1746ap-2, + (int)5 + }, + { // Entry 365 + 0x1.d1746ap4, + 0x1.d1746ap-2, + (int)6 + }, + { // Entry 366 + 0x1.d1746ap5, + 0x1.d1746ap-2, + (int)7 + }, + { // Entry 367 + 0x1.d1746ap6, + 0x1.d1746ap-2, + (int)8 + }, + { // Entry 368 + 0x1.d1746ap7, + 0x1.d1746ap-2, + (int)9 + }, + { // Entry 369 + 0x1.d1746ap8, + 0x1.d1746ap-2, + (int)10 + }, + { // Entry 370 + 0x1.1745d8p-11, + 0x1.1745d8p-1, + (int)-10 + }, + { // Entry 371 + 0x1.1745d8p-10, + 0x1.1745d8p-1, + (int)-9 + }, + { // Entry 372 + 0x1.1745d8p-9, + 0x1.1745d8p-1, + (int)-8 + }, + { // Entry 373 + 0x1.1745d8p-8, + 0x1.1745d8p-1, + (int)-7 + }, + { // Entry 374 + 0x1.1745d8p-7, + 0x1.1745d8p-1, + (int)-6 + }, + { // Entry 375 + 0x1.1745d8p-6, + 0x1.1745d8p-1, + (int)-5 + }, + { // Entry 376 + 0x1.1745d8p-5, + 0x1.1745d8p-1, + (int)-4 + }, + { // Entry 377 + 0x1.1745d8p-4, + 0x1.1745d8p-1, + (int)-3 + }, + { // Entry 378 + 0x1.1745d8p-3, + 0x1.1745d8p-1, + (int)-2 + }, + { // Entry 379 + 0x1.1745d8p-2, + 0x1.1745d8p-1, + (int)-1 + }, + { // Entry 380 + 0x1.1745d8p-1, + 0x1.1745d8p-1, + (int)0 + }, + { // Entry 381 + 0x1.1745d8p0, + 0x1.1745d8p-1, + (int)1 + }, + { // Entry 382 + 0x1.1745d8p1, + 0x1.1745d8p-1, + (int)2 + }, + { // Entry 383 + 0x1.1745d8p2, + 0x1.1745d8p-1, + (int)3 + }, + { // Entry 384 + 0x1.1745d8p3, + 0x1.1745d8p-1, + (int)4 + }, + { // Entry 385 + 0x1.1745d8p4, + 0x1.1745d8p-1, + (int)5 + }, + { // Entry 386 + 0x1.1745d8p5, + 0x1.1745d8p-1, + (int)6 + }, + { // Entry 387 + 0x1.1745d8p6, + 0x1.1745d8p-1, + (int)7 + }, + { // Entry 388 + 0x1.1745d8p7, + 0x1.1745d8p-1, + (int)8 + }, + { // Entry 389 + 0x1.1745d8p8, + 0x1.1745d8p-1, + (int)9 + }, + { // Entry 390 + 0x1.1745d8p9, + 0x1.1745d8p-1, + (int)10 + }, + { // Entry 391 + 0x1.45d17cp-11, + 0x1.45d17cp-1, + (int)-10 + }, + { // Entry 392 + 0x1.45d17cp-10, + 0x1.45d17cp-1, + (int)-9 + }, + { // Entry 393 + 0x1.45d17cp-9, + 0x1.45d17cp-1, + (int)-8 + }, + { // Entry 394 + 0x1.45d17cp-8, + 0x1.45d17cp-1, + (int)-7 + }, + { // Entry 395 + 0x1.45d17cp-7, + 0x1.45d17cp-1, + (int)-6 + }, + { // Entry 396 + 0x1.45d17cp-6, + 0x1.45d17cp-1, + (int)-5 + }, + { // Entry 397 + 0x1.45d17cp-5, + 0x1.45d17cp-1, + (int)-4 + }, + { // Entry 398 + 0x1.45d17cp-4, + 0x1.45d17cp-1, + (int)-3 + }, + { // Entry 399 + 0x1.45d17cp-3, + 0x1.45d17cp-1, + (int)-2 + }, + { // Entry 400 + 0x1.45d17cp-2, + 0x1.45d17cp-1, + (int)-1 + }, + { // Entry 401 + 0x1.45d17cp-1, + 0x1.45d17cp-1, + (int)0 + }, + { // Entry 402 + 0x1.45d17cp0, + 0x1.45d17cp-1, + (int)1 + }, + { // Entry 403 + 0x1.45d17cp1, + 0x1.45d17cp-1, + (int)2 + }, + { // Entry 404 + 0x1.45d17cp2, + 0x1.45d17cp-1, + (int)3 + }, + { // Entry 405 + 0x1.45d17cp3, + 0x1.45d17cp-1, + (int)4 + }, + { // Entry 406 + 0x1.45d17cp4, + 0x1.45d17cp-1, + (int)5 + }, + { // Entry 407 + 0x1.45d17cp5, + 0x1.45d17cp-1, + (int)6 + }, + { // Entry 408 + 0x1.45d17cp6, + 0x1.45d17cp-1, + (int)7 + }, + { // Entry 409 + 0x1.45d17cp7, + 0x1.45d17cp-1, + (int)8 + }, + { // Entry 410 + 0x1.45d17cp8, + 0x1.45d17cp-1, + (int)9 + }, + { // Entry 411 + 0x1.45d17cp9, + 0x1.45d17cp-1, + (int)10 + }, + { // Entry 412 + 0x1.745d20p-11, + 0x1.745d20p-1, + (int)-10 + }, + { // Entry 413 + 0x1.745d20p-10, + 0x1.745d20p-1, + (int)-9 + }, + { // Entry 414 + 0x1.745d20p-9, + 0x1.745d20p-1, + (int)-8 + }, + { // Entry 415 + 0x1.745d20p-8, + 0x1.745d20p-1, + (int)-7 + }, + { // Entry 416 + 0x1.745d20p-7, + 0x1.745d20p-1, + (int)-6 + }, + { // Entry 417 + 0x1.745d20p-6, + 0x1.745d20p-1, + (int)-5 + }, + { // Entry 418 + 0x1.745d20p-5, + 0x1.745d20p-1, + (int)-4 + }, + { // Entry 419 + 0x1.745d20p-4, + 0x1.745d20p-1, + (int)-3 + }, + { // Entry 420 + 0x1.745d20p-3, + 0x1.745d20p-1, + (int)-2 + }, + { // Entry 421 + 0x1.745d20p-2, + 0x1.745d20p-1, + (int)-1 + }, + { // Entry 422 + 0x1.745d20p-1, + 0x1.745d20p-1, + (int)0 + }, + { // Entry 423 + 0x1.745d20p0, + 0x1.745d20p-1, + (int)1 + }, + { // Entry 424 + 0x1.745d20p1, + 0x1.745d20p-1, + (int)2 + }, + { // Entry 425 + 0x1.745d20p2, + 0x1.745d20p-1, + (int)3 + }, + { // Entry 426 + 0x1.745d20p3, + 0x1.745d20p-1, + (int)4 + }, + { // Entry 427 + 0x1.745d20p4, + 0x1.745d20p-1, + (int)5 + }, + { // Entry 428 + 0x1.745d20p5, + 0x1.745d20p-1, + (int)6 + }, + { // Entry 429 + 0x1.745d20p6, + 0x1.745d20p-1, + (int)7 + }, + { // Entry 430 + 0x1.745d20p7, + 0x1.745d20p-1, + (int)8 + }, + { // Entry 431 + 0x1.745d20p8, + 0x1.745d20p-1, + (int)9 + }, + { // Entry 432 + 0x1.745d20p9, + 0x1.745d20p-1, + (int)10 + }, + { // Entry 433 + 0x1.a2e8c4p-11, + 0x1.a2e8c4p-1, + (int)-10 + }, + { // Entry 434 + 0x1.a2e8c4p-10, + 0x1.a2e8c4p-1, + (int)-9 + }, + { // Entry 435 + 0x1.a2e8c4p-9, + 0x1.a2e8c4p-1, + (int)-8 + }, + { // Entry 436 + 0x1.a2e8c4p-8, + 0x1.a2e8c4p-1, + (int)-7 + }, + { // Entry 437 + 0x1.a2e8c4p-7, + 0x1.a2e8c4p-1, + (int)-6 + }, + { // Entry 438 + 0x1.a2e8c4p-6, + 0x1.a2e8c4p-1, + (int)-5 + }, + { // Entry 439 + 0x1.a2e8c4p-5, + 0x1.a2e8c4p-1, + (int)-4 + }, + { // Entry 440 + 0x1.a2e8c4p-4, + 0x1.a2e8c4p-1, + (int)-3 + }, + { // Entry 441 + 0x1.a2e8c4p-3, + 0x1.a2e8c4p-1, + (int)-2 + }, + { // Entry 442 + 0x1.a2e8c4p-2, + 0x1.a2e8c4p-1, + (int)-1 + }, + { // Entry 443 + 0x1.a2e8c4p-1, + 0x1.a2e8c4p-1, + (int)0 + }, + { // Entry 444 + 0x1.a2e8c4p0, + 0x1.a2e8c4p-1, + (int)1 + }, + { // Entry 445 + 0x1.a2e8c4p1, + 0x1.a2e8c4p-1, + (int)2 + }, + { // Entry 446 + 0x1.a2e8c4p2, + 0x1.a2e8c4p-1, + (int)3 + }, + { // Entry 447 + 0x1.a2e8c4p3, + 0x1.a2e8c4p-1, + (int)4 + }, + { // Entry 448 + 0x1.a2e8c4p4, + 0x1.a2e8c4p-1, + (int)5 + }, + { // Entry 449 + 0x1.a2e8c4p5, + 0x1.a2e8c4p-1, + (int)6 + }, + { // Entry 450 + 0x1.a2e8c4p6, + 0x1.a2e8c4p-1, + (int)7 + }, + { // Entry 451 + 0x1.a2e8c4p7, + 0x1.a2e8c4p-1, + (int)8 + }, + { // Entry 452 + 0x1.a2e8c4p8, + 0x1.a2e8c4p-1, + (int)9 + }, + { // Entry 453 + 0x1.a2e8c4p9, + 0x1.a2e8c4p-1, + (int)10 + }, + { // Entry 454 + 0x1.d17468p-11, + 0x1.d17468p-1, + (int)-10 + }, + { // Entry 455 + 0x1.d17468p-10, + 0x1.d17468p-1, + (int)-9 + }, + { // Entry 456 + 0x1.d17468p-9, + 0x1.d17468p-1, + (int)-8 + }, + { // Entry 457 + 0x1.d17468p-8, + 0x1.d17468p-1, + (int)-7 + }, + { // Entry 458 + 0x1.d17468p-7, + 0x1.d17468p-1, + (int)-6 + }, + { // Entry 459 + 0x1.d17468p-6, + 0x1.d17468p-1, + (int)-5 + }, + { // Entry 460 + 0x1.d17468p-5, + 0x1.d17468p-1, + (int)-4 + }, + { // Entry 461 + 0x1.d17468p-4, + 0x1.d17468p-1, + (int)-3 + }, + { // Entry 462 + 0x1.d17468p-3, + 0x1.d17468p-1, + (int)-2 + }, + { // Entry 463 + 0x1.d17468p-2, + 0x1.d17468p-1, + (int)-1 + }, + { // Entry 464 + 0x1.d17468p-1, + 0x1.d17468p-1, + (int)0 + }, + { // Entry 465 + 0x1.d17468p0, + 0x1.d17468p-1, + (int)1 + }, + { // Entry 466 + 0x1.d17468p1, + 0x1.d17468p-1, + (int)2 + }, + { // Entry 467 + 0x1.d17468p2, + 0x1.d17468p-1, + (int)3 + }, + { // Entry 468 + 0x1.d17468p3, + 0x1.d17468p-1, + (int)4 + }, + { // Entry 469 + 0x1.d17468p4, + 0x1.d17468p-1, + (int)5 + }, + { // Entry 470 + 0x1.d17468p5, + 0x1.d17468p-1, + (int)6 + }, + { // Entry 471 + 0x1.d17468p6, + 0x1.d17468p-1, + (int)7 + }, + { // Entry 472 + 0x1.d17468p7, + 0x1.d17468p-1, + (int)8 + }, + { // Entry 473 + 0x1.d17468p8, + 0x1.d17468p-1, + (int)9 + }, + { // Entry 474 + 0x1.d17468p9, + 0x1.d17468p-1, + (int)10 + }, + { // Entry 475 + 0x1.p-10, + 0x1.p0, + (int)-10 + }, + { // Entry 476 + 0x1.p-9, + 0x1.p0, + (int)-9 + }, + { // Entry 477 + 0x1.p-8, + 0x1.p0, + (int)-8 + }, + { // Entry 478 + 0x1.p-7, + 0x1.p0, + (int)-7 + }, + { // Entry 479 + 0x1.p-6, + 0x1.p0, + (int)-6 + }, + { // Entry 480 + 0x1.p-5, + 0x1.p0, + (int)-5 + }, + { // Entry 481 + 0x1.p-4, + 0x1.p0, + (int)-4 + }, + { // Entry 482 + 0x1.p-3, + 0x1.p0, + (int)-3 + }, + { // Entry 483 + 0x1.p-2, + 0x1.p0, + (int)-2 + }, + { // Entry 484 + 0x1.p-1, + 0x1.p0, + (int)-1 + }, + { // Entry 485 + 0x1.p0, + 0x1.p0, + (int)0 + }, + { // Entry 486 + 0x1.p1, + 0x1.p0, + (int)1 + }, + { // Entry 487 + 0x1.p2, + 0x1.p0, + (int)2 + }, + { // Entry 488 + 0x1.p3, + 0x1.p0, + (int)3 + }, + { // Entry 489 + 0x1.p4, + 0x1.p0, + (int)4 + }, + { // Entry 490 + 0x1.p5, + 0x1.p0, + (int)5 + }, + { // Entry 491 + 0x1.p6, + 0x1.p0, + (int)6 + }, + { // Entry 492 + 0x1.p7, + 0x1.p0, + (int)7 + }, + { // Entry 493 + 0x1.p8, + 0x1.p0, + (int)8 + }, + { // Entry 494 + 0x1.p9, + 0x1.p0, + (int)9 + }, + { // Entry 495 + 0x1.p10, + 0x1.p0, + (int)10 + }, + { // Entry 496 + 0x1.fffffep0, + 0x1.fffffep127, + (int)-127 + }, + { // Entry 497 + 0x1.fffffep1, + 0x1.fffffep127, + (int)-126 + }, + { // Entry 498 + 0x1.fffffep117, + 0x1.fffffep127, + (int)-10 + }, + { // Entry 499 + 0x1.fffffep118, + 0x1.fffffep127, + (int)-9 + }, + { // Entry 500 + 0x1.fffffep119, + 0x1.fffffep127, + (int)-8 + }, + { // Entry 501 + 0x1.fffffep120, + 0x1.fffffep127, + (int)-7 + }, + { // Entry 502 + 0x1.fffffep121, + 0x1.fffffep127, + (int)-6 + }, + { // Entry 503 + 0x1.fffffep122, + 0x1.fffffep127, + (int)-5 + }, + { // Entry 504 + 0x1.fffffep123, + 0x1.fffffep127, + (int)-4 + }, + { // Entry 505 + 0x1.fffffep124, + 0x1.fffffep127, + (int)-3 + }, + { // Entry 506 + 0x1.fffffep125, + 0x1.fffffep127, + (int)-2 + }, + { // Entry 507 + 0x1.fffffep126, + 0x1.fffffep127, + (int)-1 + }, + { // Entry 508 + 0x1.fffffep127, + 0x1.fffffep127, + (int)0 + }, + { // Entry 509 + 0x1.p-22, + 0x1.p-149, + (int)127 + }, + { // Entry 510 + 0x1.p-23, + 0x1.p-149, + (int)126 + }, + { // Entry 511 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 512 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 513 + 0x1.p-147, + 0x1.p-149, + (int)2 + }, + { // Entry 514 + 0x1.p-146, + 0x1.p-149, + (int)3 + }, + { // Entry 515 + 0x1.p-145, + 0x1.p-149, + (int)4 + }, + { // Entry 516 + 0x1.p-144, + 0x1.p-149, + (int)5 + }, + { // Entry 517 + 0x1.p-143, + 0x1.p-149, + (int)6 + }, + { // Entry 518 + 0x1.p-142, + 0x1.p-149, + (int)7 + }, + { // Entry 519 + 0x1.p-141, + 0x1.p-149, + (int)8 + }, + { // Entry 520 + 0x1.p-140, + 0x1.p-149, + (int)9 + }, + { // Entry 521 + 0x1.p-139, + 0x1.p-149, + (int)10 + }, + { // Entry 522 + 0x1.p-129, + 0x1.p-2, + (int)-127 + }, + { // Entry 523 + 0x1.p-128, + 0x1.p-2, + (int)-126 + }, + { // Entry 524 + 0x1.p-128, + 0x1.p-1, + (int)-127 + }, + { // Entry 525 + 0x1.p-127, + 0x1.p-1, + (int)-126 + }, + { // Entry 526 + 0x1.80p-128, + 0x1.80p-1, + (int)-127 + }, + { // Entry 527 + 0x1.80p-127, + 0x1.80p-1, + (int)-126 + }, + { // Entry 528 + 0.0f, + 0x1.p-2, + (int)-149 + }, + { // Entry 529 + 0.0f, + 0x1.p-2, + (int)-148 + }, + { // Entry 530 + 0.0f, + 0x1.p-1, + (int)-149 + }, + { // Entry 531 + 0x1.p-149, + 0x1.p-1, + (int)-148 + }, + { // Entry 532 + 0.0f, + 0x1.80p-1, + (int)-149 + }, + { // Entry 533 + 0x1.80p-149, + 0x1.80p-1, + (int)-148 + }, + { // Entry 534 + 0x1.p127, + 0x1.p0, + (int)127 + }, + { // Entry 535 + 0x1.p126, + 0x1.p0, + (int)126 + }, + { // Entry 536 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 537 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 538 + 0x1.p-147, + 0x1.p-149, + (int)2 + }, + { // Entry 539 + 0x1.p-146, + 0x1.p-149, + (int)3 + }, + { // Entry 540 + 0x1.p-145, + 0x1.p-149, + (int)4 + }, + { // Entry 541 + 0x1.p-144, + 0x1.p-149, + (int)5 + }, + { // Entry 542 + 0x1.p-143, + 0x1.p-149, + (int)6 + }, + { // Entry 543 + 0x1.p-142, + 0x1.p-149, + (int)7 + }, + { // Entry 544 + 0x1.p-141, + 0x1.p-149, + (int)8 + }, + { // Entry 545 + 0x1.p-140, + 0x1.p-149, + (int)9 + }, + { // Entry 546 + 0x1.p-139, + 0x1.p-149, + (int)10 + }, + { // Entry 547 + 0x1.p-138, + 0x1.p-149, + (int)11 + }, + { // Entry 548 + 0x1.p-137, + 0x1.p-149, + (int)12 + }, + { // Entry 549 + 0x1.p-136, + 0x1.p-149, + (int)13 + }, + { // Entry 550 + 0x1.p-135, + 0x1.p-149, + (int)14 + }, + { // Entry 551 + 0x1.p-134, + 0x1.p-149, + (int)15 + }, + { // Entry 552 + 0x1.p-133, + 0x1.p-149, + (int)16 + }, + { // Entry 553 + 0x1.p-132, + 0x1.p-149, + (int)17 + }, + { // Entry 554 + 0x1.p-131, + 0x1.p-149, + (int)18 + }, + { // Entry 555 + 0x1.p-130, + 0x1.p-149, + (int)19 + }, + { // Entry 556 + 0x1.p-129, + 0x1.p-149, + (int)20 + }, + { // Entry 557 + 0x1.p-128, + 0x1.p-149, + (int)21 + }, + { // Entry 558 + 0x1.p-127, + 0x1.p-149, + (int)22 + }, + { // Entry 559 + 0x1.p-126, + 0x1.p-149, + (int)23 + }, + { // Entry 560 + 0x1.p-125, + 0x1.p-149, + (int)24 + }, + { // Entry 561 + 0x1.p-124, + 0x1.p-149, + (int)25 + }, + { // Entry 562 + 0x1.p-123, + 0x1.p-149, + (int)26 + }, + { // Entry 563 + 0x1.p-122, + 0x1.p-149, + (int)27 + }, + { // Entry 564 + 0x1.p-121, + 0x1.p-149, + (int)28 + }, + { // Entry 565 + 0x1.p-120, + 0x1.p-149, + (int)29 + }, + { // Entry 566 + 0x1.p-119, + 0x1.p-149, + (int)30 + }, + { // Entry 567 + 0x1.p-118, + 0x1.p-149, + (int)31 + }, + { // Entry 568 + 0x1.p-117, + 0x1.p-149, + (int)32 + }, + { // Entry 569 + 0x1.p-116, + 0x1.p-149, + (int)33 + }, + { // Entry 570 + 0x1.p-115, + 0x1.p-149, + (int)34 + }, + { // Entry 571 + 0x1.p-114, + 0x1.p-149, + (int)35 + }, + { // Entry 572 + 0x1.p-113, + 0x1.p-149, + (int)36 + }, + { // Entry 573 + 0x1.p-112, + 0x1.p-149, + (int)37 + }, + { // Entry 574 + 0x1.p-111, + 0x1.p-149, + (int)38 + }, + { // Entry 575 + 0x1.p-110, + 0x1.p-149, + (int)39 + }, + { // Entry 576 + 0x1.p-109, + 0x1.p-149, + (int)40 + }, + { // Entry 577 + 0x1.p-108, + 0x1.p-149, + (int)41 + }, + { // Entry 578 + 0x1.p-107, + 0x1.p-149, + (int)42 + }, + { // Entry 579 + 0x1.p-106, + 0x1.p-149, + (int)43 + }, + { // Entry 580 + 0x1.p-105, + 0x1.p-149, + (int)44 + }, + { // Entry 581 + 0x1.p-104, + 0x1.p-149, + (int)45 + }, + { // Entry 582 + 0x1.p-103, + 0x1.p-149, + (int)46 + }, + { // Entry 583 + 0x1.p-102, + 0x1.p-149, + (int)47 + }, + { // Entry 584 + 0x1.p-101, + 0x1.p-149, + (int)48 + }, + { // Entry 585 + 0x1.p-100, + 0x1.p-149, + (int)49 + }, + { // Entry 586 + 0x1.p-99, + 0x1.p-149, + (int)50 + }, + { // Entry 587 + 0x1.p-98, + 0x1.p-149, + (int)51 + }, + { // Entry 588 + 0x1.p-97, + 0x1.p-149, + (int)52 + }, + { // Entry 589 + 0x1.p-96, + 0x1.p-149, + (int)53 + }, + { // Entry 590 + 0x1.p-95, + 0x1.p-149, + (int)54 + }, + { // Entry 591 + 0x1.p-94, + 0x1.p-149, + (int)55 + }, + { // Entry 592 + 0x1.p-93, + 0x1.p-149, + (int)56 + }, + { // Entry 593 + 0x1.p-92, + 0x1.p-149, + (int)57 + }, + { // Entry 594 + 0x1.p-91, + 0x1.p-149, + (int)58 + }, + { // Entry 595 + 0x1.p-90, + 0x1.p-149, + (int)59 + }, + { // Entry 596 + 0x1.p-89, + 0x1.p-149, + (int)60 + }, + { // Entry 597 + 0x1.p-88, + 0x1.p-149, + (int)61 + }, + { // Entry 598 + 0x1.p-87, + 0x1.p-149, + (int)62 + }, + { // Entry 599 + 0x1.p-86, + 0x1.p-149, + (int)63 + }, + { // Entry 600 + 0x1.p-85, + 0x1.p-149, + (int)64 + }, + { // Entry 601 + 0x1.p-84, + 0x1.p-149, + (int)65 + }, + { // Entry 602 + 0x1.p-83, + 0x1.p-149, + (int)66 + }, + { // Entry 603 + 0x1.p-82, + 0x1.p-149, + (int)67 + }, + { // Entry 604 + 0x1.p-81, + 0x1.p-149, + (int)68 + }, + { // Entry 605 + 0x1.p-80, + 0x1.p-149, + (int)69 + }, + { // Entry 606 + 0x1.p-79, + 0x1.p-149, + (int)70 + }, + { // Entry 607 + 0x1.p-78, + 0x1.p-149, + (int)71 + }, + { // Entry 608 + 0x1.p-77, + 0x1.p-149, + (int)72 + }, + { // Entry 609 + 0x1.p-76, + 0x1.p-149, + (int)73 + }, + { // Entry 610 + 0x1.p-75, + 0x1.p-149, + (int)74 + }, + { // Entry 611 + 0x1.p-74, + 0x1.p-149, + (int)75 + }, + { // Entry 612 + 0x1.p-73, + 0x1.p-149, + (int)76 + }, + { // Entry 613 + 0x1.p-72, + 0x1.p-149, + (int)77 + }, + { // Entry 614 + 0x1.p-71, + 0x1.p-149, + (int)78 + }, + { // Entry 615 + 0x1.p-70, + 0x1.p-149, + (int)79 + }, + { // Entry 616 + 0x1.p-69, + 0x1.p-149, + (int)80 + }, + { // Entry 617 + 0x1.p-68, + 0x1.p-149, + (int)81 + }, + { // Entry 618 + 0x1.p-67, + 0x1.p-149, + (int)82 + }, + { // Entry 619 + 0x1.p-66, + 0x1.p-149, + (int)83 + }, + { // Entry 620 + 0x1.p-65, + 0x1.p-149, + (int)84 + }, + { // Entry 621 + 0x1.p-64, + 0x1.p-149, + (int)85 + }, + { // Entry 622 + 0x1.p-63, + 0x1.p-149, + (int)86 + }, + { // Entry 623 + 0x1.p-62, + 0x1.p-149, + (int)87 + }, + { // Entry 624 + 0x1.p-61, + 0x1.p-149, + (int)88 + }, + { // Entry 625 + 0x1.p-60, + 0x1.p-149, + (int)89 + }, + { // Entry 626 + 0x1.p-59, + 0x1.p-149, + (int)90 + }, + { // Entry 627 + 0x1.p-58, + 0x1.p-149, + (int)91 + }, + { // Entry 628 + 0x1.p-57, + 0x1.p-149, + (int)92 + }, + { // Entry 629 + 0x1.p-56, + 0x1.p-149, + (int)93 + }, + { // Entry 630 + 0x1.p-55, + 0x1.p-149, + (int)94 + }, + { // Entry 631 + 0x1.p-54, + 0x1.p-149, + (int)95 + }, + { // Entry 632 + 0x1.p-53, + 0x1.p-149, + (int)96 + }, + { // Entry 633 + 0x1.p-52, + 0x1.p-149, + (int)97 + }, + { // Entry 634 + 0x1.p-51, + 0x1.p-149, + (int)98 + }, + { // Entry 635 + 0x1.p-50, + 0x1.p-149, + (int)99 + }, + { // Entry 636 + 0x1.p-49, + 0x1.p-149, + (int)100 + }, + { // Entry 637 + 0x1.p-48, + 0x1.p-149, + (int)101 + }, + { // Entry 638 + 0x1.p-47, + 0x1.p-149, + (int)102 + }, + { // Entry 639 + 0x1.p-46, + 0x1.p-149, + (int)103 + }, + { // Entry 640 + 0x1.p-45, + 0x1.p-149, + (int)104 + }, + { // Entry 641 + 0x1.p-44, + 0x1.p-149, + (int)105 + }, + { // Entry 642 + 0x1.p-43, + 0x1.p-149, + (int)106 + }, + { // Entry 643 + 0x1.p-42, + 0x1.p-149, + (int)107 + }, + { // Entry 644 + 0x1.p-41, + 0x1.p-149, + (int)108 + }, + { // Entry 645 + 0x1.p-40, + 0x1.p-149, + (int)109 + }, + { // Entry 646 + 0x1.p-39, + 0x1.p-149, + (int)110 + }, + { // Entry 647 + 0x1.p-38, + 0x1.p-149, + (int)111 + }, + { // Entry 648 + 0x1.p-37, + 0x1.p-149, + (int)112 + }, + { // Entry 649 + 0x1.p-36, + 0x1.p-149, + (int)113 + }, + { // Entry 650 + 0x1.p-35, + 0x1.p-149, + (int)114 + }, + { // Entry 651 + 0x1.p-34, + 0x1.p-149, + (int)115 + }, + { // Entry 652 + 0x1.p-33, + 0x1.p-149, + (int)116 + }, + { // Entry 653 + 0x1.p-32, + 0x1.p-149, + (int)117 + }, + { // Entry 654 + 0x1.p-31, + 0x1.p-149, + (int)118 + }, + { // Entry 655 + 0x1.p-30, + 0x1.p-149, + (int)119 + }, + { // Entry 656 + 0x1.p-29, + 0x1.p-149, + (int)120 + }, + { // Entry 657 + 0x1.p-28, + 0x1.p-149, + (int)121 + }, + { // Entry 658 + 0x1.p-27, + 0x1.p-149, + (int)122 + }, + { // Entry 659 + 0x1.p-26, + 0x1.p-149, + (int)123 + }, + { // Entry 660 + 0x1.p-25, + 0x1.p-149, + (int)124 + }, + { // Entry 661 + 0x1.p-24, + 0x1.p-149, + (int)125 + }, + { // Entry 662 + 0x1.p-23, + 0x1.p-149, + (int)126 + }, + { // Entry 663 + 0x1.p-22, + 0x1.p-149, + (int)127 + }, + { // Entry 664 + 0x1.p-21, + 0x1.p-149, + (int)128 + }, + { // Entry 665 + 0x1.p-20, + 0x1.p-149, + (int)129 + }, + { // Entry 666 + 0x1.p-19, + 0x1.p-149, + (int)130 + }, + { // Entry 667 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 668 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + (int)1 + }, + { // Entry 669 + 0x1.fffffcp-125, + 0x1.fffffcp-127, + (int)2 + }, + { // Entry 670 + 0x1.fffffcp-124, + 0x1.fffffcp-127, + (int)3 + }, + { // Entry 671 + 0x1.fffffcp-123, + 0x1.fffffcp-127, + (int)4 + }, + { // Entry 672 + 0x1.fffffcp-122, + 0x1.fffffcp-127, + (int)5 + }, + { // Entry 673 + 0x1.fffffcp-121, + 0x1.fffffcp-127, + (int)6 + }, + { // Entry 674 + 0x1.fffffcp-120, + 0x1.fffffcp-127, + (int)7 + }, + { // Entry 675 + 0x1.fffffcp-119, + 0x1.fffffcp-127, + (int)8 + }, + { // Entry 676 + 0x1.fffffcp-118, + 0x1.fffffcp-127, + (int)9 + }, + { // Entry 677 + 0x1.fffffcp-117, + 0x1.fffffcp-127, + (int)10 + }, + { // Entry 678 + 0x1.fffffcp-116, + 0x1.fffffcp-127, + (int)11 + }, + { // Entry 679 + 0x1.fffffcp-115, + 0x1.fffffcp-127, + (int)12 + }, + { // Entry 680 + 0x1.fffffcp-114, + 0x1.fffffcp-127, + (int)13 + }, + { // Entry 681 + 0x1.fffffcp-113, + 0x1.fffffcp-127, + (int)14 + }, + { // Entry 682 + 0x1.fffffcp-112, + 0x1.fffffcp-127, + (int)15 + }, + { // Entry 683 + 0x1.fffffcp-111, + 0x1.fffffcp-127, + (int)16 + }, + { // Entry 684 + 0x1.fffffcp-110, + 0x1.fffffcp-127, + (int)17 + }, + { // Entry 685 + 0x1.fffffcp-109, + 0x1.fffffcp-127, + (int)18 + }, + { // Entry 686 + 0x1.fffffcp-108, + 0x1.fffffcp-127, + (int)19 + }, + { // Entry 687 + 0x1.fffffcp-107, + 0x1.fffffcp-127, + (int)20 + }, + { // Entry 688 + 0x1.fffffcp-106, + 0x1.fffffcp-127, + (int)21 + }, + { // Entry 689 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + (int)22 + }, + { // Entry 690 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + (int)23 + }, + { // Entry 691 + 0x1.fffffcp-103, + 0x1.fffffcp-127, + (int)24 + }, + { // Entry 692 + 0x1.fffffcp-102, + 0x1.fffffcp-127, + (int)25 + }, + { // Entry 693 + 0x1.fffffcp-101, + 0x1.fffffcp-127, + (int)26 + }, + { // Entry 694 + 0x1.fffffcp-100, + 0x1.fffffcp-127, + (int)27 + }, + { // Entry 695 + 0x1.fffffcp-99, + 0x1.fffffcp-127, + (int)28 + }, + { // Entry 696 + 0x1.fffffcp-98, + 0x1.fffffcp-127, + (int)29 + }, + { // Entry 697 + 0x1.fffffcp-97, + 0x1.fffffcp-127, + (int)30 + }, + { // Entry 698 + 0x1.fffffcp-96, + 0x1.fffffcp-127, + (int)31 + }, + { // Entry 699 + 0x1.fffffcp-95, + 0x1.fffffcp-127, + (int)32 + }, + { // Entry 700 + 0x1.fffffcp-94, + 0x1.fffffcp-127, + (int)33 + }, + { // Entry 701 + 0x1.fffffcp-93, + 0x1.fffffcp-127, + (int)34 + }, + { // Entry 702 + 0x1.fffffcp-92, + 0x1.fffffcp-127, + (int)35 + }, + { // Entry 703 + 0x1.fffffcp-91, + 0x1.fffffcp-127, + (int)36 + }, + { // Entry 704 + 0x1.fffffcp-90, + 0x1.fffffcp-127, + (int)37 + }, + { // Entry 705 + 0x1.fffffcp-89, + 0x1.fffffcp-127, + (int)38 + }, + { // Entry 706 + 0x1.fffffcp-88, + 0x1.fffffcp-127, + (int)39 + }, + { // Entry 707 + 0x1.fffffcp-87, + 0x1.fffffcp-127, + (int)40 + }, + { // Entry 708 + 0x1.fffffcp-86, + 0x1.fffffcp-127, + (int)41 + }, + { // Entry 709 + 0x1.fffffcp-85, + 0x1.fffffcp-127, + (int)42 + }, + { // Entry 710 + 0x1.fffffcp-84, + 0x1.fffffcp-127, + (int)43 + }, + { // Entry 711 + 0x1.fffffcp-83, + 0x1.fffffcp-127, + (int)44 + }, + { // Entry 712 + 0x1.fffffcp-82, + 0x1.fffffcp-127, + (int)45 + }, + { // Entry 713 + 0x1.fffffcp-81, + 0x1.fffffcp-127, + (int)46 + }, + { // Entry 714 + 0x1.fffffcp-80, + 0x1.fffffcp-127, + (int)47 + }, + { // Entry 715 + 0x1.fffffcp-79, + 0x1.fffffcp-127, + (int)48 + }, + { // Entry 716 + 0x1.fffffcp-78, + 0x1.fffffcp-127, + (int)49 + }, + { // Entry 717 + 0x1.fffffcp-77, + 0x1.fffffcp-127, + (int)50 + }, + { // Entry 718 + 0x1.fffffcp-76, + 0x1.fffffcp-127, + (int)51 + }, + { // Entry 719 + 0x1.fffffcp-75, + 0x1.fffffcp-127, + (int)52 + }, + { // Entry 720 + 0x1.fffffcp-74, + 0x1.fffffcp-127, + (int)53 + }, + { // Entry 721 + 0x1.fffffcp-73, + 0x1.fffffcp-127, + (int)54 + }, + { // Entry 722 + 0x1.fffffcp-72, + 0x1.fffffcp-127, + (int)55 + }, + { // Entry 723 + 0x1.fffffcp-71, + 0x1.fffffcp-127, + (int)56 + }, + { // Entry 724 + 0x1.fffffcp-70, + 0x1.fffffcp-127, + (int)57 + }, + { // Entry 725 + 0x1.fffffcp-69, + 0x1.fffffcp-127, + (int)58 + }, + { // Entry 726 + 0x1.fffffcp-68, + 0x1.fffffcp-127, + (int)59 + }, + { // Entry 727 + 0x1.fffffcp-67, + 0x1.fffffcp-127, + (int)60 + }, + { // Entry 728 + 0x1.fffffcp-66, + 0x1.fffffcp-127, + (int)61 + }, + { // Entry 729 + 0x1.fffffcp-65, + 0x1.fffffcp-127, + (int)62 + }, + { // Entry 730 + 0x1.fffffcp-64, + 0x1.fffffcp-127, + (int)63 + }, + { // Entry 731 + 0x1.fffffcp-63, + 0x1.fffffcp-127, + (int)64 + }, + { // Entry 732 + 0x1.fffffcp-62, + 0x1.fffffcp-127, + (int)65 + }, + { // Entry 733 + 0x1.fffffcp-61, + 0x1.fffffcp-127, + (int)66 + }, + { // Entry 734 + 0x1.fffffcp-60, + 0x1.fffffcp-127, + (int)67 + }, + { // Entry 735 + 0x1.fffffcp-59, + 0x1.fffffcp-127, + (int)68 + }, + { // Entry 736 + 0x1.fffffcp-58, + 0x1.fffffcp-127, + (int)69 + }, + { // Entry 737 + 0x1.fffffcp-57, + 0x1.fffffcp-127, + (int)70 + }, + { // Entry 738 + 0x1.fffffcp-56, + 0x1.fffffcp-127, + (int)71 + }, + { // Entry 739 + 0x1.fffffcp-55, + 0x1.fffffcp-127, + (int)72 + }, + { // Entry 740 + 0x1.fffffcp-54, + 0x1.fffffcp-127, + (int)73 + }, + { // Entry 741 + 0x1.fffffcp-53, + 0x1.fffffcp-127, + (int)74 + }, + { // Entry 742 + 0x1.fffffcp-52, + 0x1.fffffcp-127, + (int)75 + }, + { // Entry 743 + 0x1.fffffcp-51, + 0x1.fffffcp-127, + (int)76 + }, + { // Entry 744 + 0x1.fffffcp-50, + 0x1.fffffcp-127, + (int)77 + }, + { // Entry 745 + 0x1.fffffcp-49, + 0x1.fffffcp-127, + (int)78 + }, + { // Entry 746 + 0x1.fffffcp-48, + 0x1.fffffcp-127, + (int)79 + }, + { // Entry 747 + 0x1.fffffcp-47, + 0x1.fffffcp-127, + (int)80 + }, + { // Entry 748 + 0x1.fffffcp-46, + 0x1.fffffcp-127, + (int)81 + }, + { // Entry 749 + 0x1.fffffcp-45, + 0x1.fffffcp-127, + (int)82 + }, + { // Entry 750 + 0x1.fffffcp-44, + 0x1.fffffcp-127, + (int)83 + }, + { // Entry 751 + 0x1.fffffcp-43, + 0x1.fffffcp-127, + (int)84 + }, + { // Entry 752 + 0x1.fffffcp-42, + 0x1.fffffcp-127, + (int)85 + }, + { // Entry 753 + 0x1.fffffcp-41, + 0x1.fffffcp-127, + (int)86 + }, + { // Entry 754 + 0x1.fffffcp-40, + 0x1.fffffcp-127, + (int)87 + }, + { // Entry 755 + 0x1.fffffcp-39, + 0x1.fffffcp-127, + (int)88 + }, + { // Entry 756 + 0x1.fffffcp-38, + 0x1.fffffcp-127, + (int)89 + }, + { // Entry 757 + 0x1.fffffcp-37, + 0x1.fffffcp-127, + (int)90 + }, + { // Entry 758 + 0x1.fffffcp-36, + 0x1.fffffcp-127, + (int)91 + }, + { // Entry 759 + 0x1.fffffcp-35, + 0x1.fffffcp-127, + (int)92 + }, + { // Entry 760 + 0x1.fffffcp-34, + 0x1.fffffcp-127, + (int)93 + }, + { // Entry 761 + 0x1.fffffcp-33, + 0x1.fffffcp-127, + (int)94 + }, + { // Entry 762 + 0x1.fffffcp-32, + 0x1.fffffcp-127, + (int)95 + }, + { // Entry 763 + 0x1.fffffcp-31, + 0x1.fffffcp-127, + (int)96 + }, + { // Entry 764 + 0x1.fffffcp-30, + 0x1.fffffcp-127, + (int)97 + }, + { // Entry 765 + 0x1.fffffcp-29, + 0x1.fffffcp-127, + (int)98 + }, + { // Entry 766 + 0x1.fffffcp-28, + 0x1.fffffcp-127, + (int)99 + }, + { // Entry 767 + 0x1.fffffcp-27, + 0x1.fffffcp-127, + (int)100 + }, + { // Entry 768 + 0x1.fffffcp-26, + 0x1.fffffcp-127, + (int)101 + }, + { // Entry 769 + 0x1.fffffcp-25, + 0x1.fffffcp-127, + (int)102 + }, + { // Entry 770 + 0x1.fffffcp-24, + 0x1.fffffcp-127, + (int)103 + }, + { // Entry 771 + 0x1.fffffcp-23, + 0x1.fffffcp-127, + (int)104 + }, + { // Entry 772 + 0x1.fffffcp-22, + 0x1.fffffcp-127, + (int)105 + }, + { // Entry 773 + 0x1.fffffcp-21, + 0x1.fffffcp-127, + (int)106 + }, + { // Entry 774 + 0x1.fffffcp-20, + 0x1.fffffcp-127, + (int)107 + }, + { // Entry 775 + 0x1.fffffcp-19, + 0x1.fffffcp-127, + (int)108 + }, + { // Entry 776 + 0x1.fffffcp-18, + 0x1.fffffcp-127, + (int)109 + }, + { // Entry 777 + 0x1.fffffcp-17, + 0x1.fffffcp-127, + (int)110 + }, + { // Entry 778 + 0x1.fffffcp-16, + 0x1.fffffcp-127, + (int)111 + }, + { // Entry 779 + 0x1.fffffcp-15, + 0x1.fffffcp-127, + (int)112 + }, + { // Entry 780 + 0x1.fffffcp-14, + 0x1.fffffcp-127, + (int)113 + }, + { // Entry 781 + 0x1.fffffcp-13, + 0x1.fffffcp-127, + (int)114 + }, + { // Entry 782 + 0x1.fffffcp-12, + 0x1.fffffcp-127, + (int)115 + }, + { // Entry 783 + 0x1.fffffcp-11, + 0x1.fffffcp-127, + (int)116 + }, + { // Entry 784 + 0x1.fffffcp-10, + 0x1.fffffcp-127, + (int)117 + }, + { // Entry 785 + 0x1.fffffcp-9, + 0x1.fffffcp-127, + (int)118 + }, + { // Entry 786 + 0x1.fffffcp-8, + 0x1.fffffcp-127, + (int)119 + }, + { // Entry 787 + 0x1.fffffcp-7, + 0x1.fffffcp-127, + (int)120 + }, + { // Entry 788 + 0x1.fffffcp-6, + 0x1.fffffcp-127, + (int)121 + }, + { // Entry 789 + 0x1.fffffcp-5, + 0x1.fffffcp-127, + (int)122 + }, + { // Entry 790 + 0x1.fffffcp-4, + 0x1.fffffcp-127, + (int)123 + }, + { // Entry 791 + 0x1.fffffcp-3, + 0x1.fffffcp-127, + (int)124 + }, + { // Entry 792 + 0x1.fffffcp-2, + 0x1.fffffcp-127, + (int)125 + }, + { // Entry 793 + 0x1.fffffcp-1, + 0x1.fffffcp-127, + (int)126 + }, + { // Entry 794 + 0x1.fffffcp0, + 0x1.fffffcp-127, + (int)127 + }, + { // Entry 795 + 0x1.fffffcp1, + 0x1.fffffcp-127, + (int)128 + }, + { // Entry 796 + 0x1.fffffcp2, + 0x1.fffffcp-127, + (int)129 + }, + { // Entry 797 + 0x1.fffffcp3, + 0x1.fffffcp-127, + (int)130 + }, + { // Entry 798 + 0x1.p0, + 0x1.p-149, + (int)149 + }, + { // Entry 799 + 0x1.p-1, + 0x1.p-149, + (int)148 + }, + { // Entry 800 + 0x1.fffffcp22, + 0x1.fffffcp-127, + (int)149 + }, + { // Entry 801 + 0x1.fffffcp21, + 0x1.fffffcp-127, + (int)148 + }, + { // Entry 802 + 0x1.p-126, + 0x1.p-149, + (int)23 + }, + { // Entry 803 + 0x1.p-127, + 0x1.p-149, + (int)22 + }, + { // Entry 804 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + (int)23 + }, + { // Entry 805 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + (int)22 + }, + { // Entry 806 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 807 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 808 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 809 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + (int)1 + }, + { // Entry 810 + 0.0, + 0.0f, + (int)0 + }, + { // Entry 811 + -0.0, + -0.0f, + (int)0 + }, + { // Entry 812 + 0.0, + 0.0f, + (int)1 + }, + { // Entry 813 + -0.0, + -0.0f, + (int)1 + }, + { // Entry 814 + 0.0, + 0.0f, + (int)-1 + }, + { // Entry 815 + -0.0, + -0.0f, + (int)-1 + }, + { // Entry 816 + 0.0, + 0.0f, + (int)127 + }, + { // Entry 817 + -0.0, + -0.0f, + (int)127 + }, + { // Entry 818 + 0.0, + 0.0f, + (int)-127 + }, + { // Entry 819 + -0.0, + -0.0f, + (int)-127 + }, + { // Entry 820 + HUGE_VALF, + HUGE_VALF, + (int)0 + }, + { // Entry 821 + 0x1.fffffep127, + 0x1.fffffep127, + (int)0 + }, + { // Entry 822 + 0x1.p-126, + 0x1.p-126, + (int)0 + }, + { // Entry 823 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 824 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 825 + -0x1.p-149, + -0x1.p-149, + (int)0 + }, + { // Entry 826 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + (int)0 + }, + { // Entry 827 + -0x1.p-126, + -0x1.p-126, + (int)0 + }, + { // Entry 828 + -0x1.fffffep127, + -0x1.fffffep127, + (int)0 + }, + { // Entry 829 + -HUGE_VALF, + -HUGE_VALF, + (int)0 + }, + { // Entry 830 + HUGE_VALF, + HUGE_VALF, + (int)1 + }, + { // Entry 831 + -HUGE_VALF, + -HUGE_VALF, + (int)1 + }, + { // Entry 832 + HUGE_VALF, + HUGE_VALF, + (int)-1 + }, + { // Entry 833 + -HUGE_VALF, + -HUGE_VALF, + (int)-1 + }, + { // Entry 834 + HUGE_VALF, + HUGE_VALF, + (int)127 + }, + { // Entry 835 + -HUGE_VALF, + -HUGE_VALF, + (int)127 + }, + { // Entry 836 + HUGE_VALF, + HUGE_VALF, + (int)-127 + }, + { // Entry 837 + -HUGE_VALF, + -HUGE_VALF, + (int)-127 + }, + { // Entry 838 + HUGE_VALF, + 0x1.fffffep127, + (int)1 + }, + { // Entry 839 + HUGE_VALF, + 0x1.fffffep127, + (int)127 + }, + { // Entry 840 + -HUGE_VALF, + -0x1.fffffep127, + (int)1 + }, + { // Entry 841 + -HUGE_VALF, + -0x1.fffffep127, + (int)127 + }, + { // Entry 842 + HUGE_VALF, + 0x1.p-126, + (int)40000 + }, + { // Entry 843 + HUGE_VALF, + 0x1.p-149, + (int)40000 + }, + { // Entry 844 + -HUGE_VALF, + -0x1.p-126, + (int)40000 + }, + { // Entry 845 + -HUGE_VALF, + -0x1.p-149, + (int)40000 + }, + { // Entry 846 + 0x1.p-127, + 0x1.p-126, + (int)-1 + }, + { // Entry 847 + 0x1.fffffcp-128, + 0x1.fffffcp-127, + (int)-1 + }, + { // Entry 848 + 0.0f, + 0x1.p-149, + (int)-1 + }, + { // Entry 849 + -0.0f, + -0x1.p-149, + (int)-1 + }, + { // Entry 850 + -0x1.fffffcp-128, + -0x1.fffffcp-127, + (int)-1 + }, + { // Entry 851 + -0x1.p-127, + -0x1.p-126, + (int)-1 + }, + { // Entry 852 + 0.0f, + 0x1.fffffep127, + (int)-40000 + }, + { // Entry 853 + -0.0f, + -0x1.fffffep127, + (int)-40000 + } +}; diff --git a/tests/math_data/log10_intel_data.h b/tests/math_data/log10_intel_data.h new file mode 100644 index 000000000..ae8a9bd2d --- /dev/null +++ b/tests/math_data/log10_intel_data.h @@ -0,0 +1,1474 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log10_intel_data[] = { + { // Entry 0 + -0x1.a7d9a8edb47be8052ee10d61f72bedb3p3, + 0x1.0000000000001p-44 + }, + { // Entry 1 + -0x1.b64cb76a2c1767fe0cb381da5b9ce962p6, + 0x1.0000000000001p-364 + }, + { // Entry 2 + -0x1.ce61cf8e9227b7ffbbc2258f06b00848p-1, + 0x1.000000007p-3 + }, + { // Entry 3 + -0x1.ce61cf8e9227b7ffd109efcb25d89632p0, + 0x1.00000000ep-6 + }, + { // Entry 4 + 0x1.dd4f85658431780003c8d7bebe51f836p-33, + 0x1.0000000225863p0 + }, + { // Entry 5 + -0x1.815182473f60d80043383683153332aap3, + 0x1.0000006p-40 + }, + { // Entry 6 + -0x1.c4bfc5e08f300001961133d67a8ae8f8p5, + 0x1.000001cp-188 + }, + { // Entry 7 + -0x1.3428e5a6db26b002262970cb294f81p0, + 0x1.00380p-4 + }, + { // Entry 8 + -0x1.8a593abb7a102800f94e99ea178864eep7, + 0x1.00380p-655 + }, + { // Entry 9 + 0x1.e1a95d2d9ba1dfa58b2f8e5fdf0a1b54p4, + 0x1.0080402010080p100 + }, + { // Entry 10 + 0x1.fdc9fc7b9d3258675b494256b7928fc6p-11, + 0x1.0092e4b92e4a0p0 + }, + { // Entry 11 + 0x1.159c1712e74c68277fba58fe711f8027p-10, + 0x1.00ap0 + }, + { // Entry 12 + 0x1.bd94e520279af862fe39c005f4682635p-10, + 0x1.01010p0 + }, + { // Entry 13 + 0x1.828f82071564e84adb4af8ee9eed7b5ep-9, + 0x1.01be8f10cdap0 + }, + { // Entry 14 + 0x1.9fb8cdcda6c2645e174538ea88aed24ap-9, + 0x1.01e05e9614213p0 + }, + { // Entry 15 + 0x1.a37a0053a01f959dff9d7ed8c0738223p-9, + 0x1.01e4b95a8d930p0 + }, + { // Entry 16 + 0x1.a605801cb85f27525bcda3da5f201ad1p-9, + 0x1.01e7acfc057dap0 + }, + { // Entry 17 + 0x1.a619cc7168fac569791c99d75180265dp-9, + 0x1.01e7c4870a56dp0 + }, + { // Entry 18 + 0x1.bafb8ddcf618275fe4ba979af560a660p-9, + 0x1.01fffe0p0 + }, + { // Entry 19 + 0x1.cf3f4e32847f4ffcdca9e1a8a08a4547p0, + 0x1.020p6 + }, + { // Entry 20 + 0x1.bafd4774dbc9b71fc01c9b281b1290d1p-9, + 0x1.020000006p0 + }, + { // Entry 21 + 0x1.bbaa41582bd4b75516bf1e86eef4bba8p-9, + 0x1.0200c8b461357p0 + }, + { // Entry 22 + 0x1.ec0d5a07492628986cc18f5d6a668867p-9, + 0x1.0238f392a2110p0 + }, + { // Entry 23 + 0x1.4c9795fd1f7e88009e3273bf7835f084p-7, + 0x1.060dae8131baap0 + }, + { // Entry 24 + 0x1.78b4ee43af1c080139a43926058a6e46p-7, + 0x1.06ddf6ab94edcp0 + }, + { // Entry 25 + -0x1.93ca96452c85680041ebe338f63d139ap2, + 0x1.076899d38cc30p-21 + }, + { // Entry 26 + 0x1.ab09f93221f40000194c663bebd78f55p-7, + 0x1.07cc640f96a18p0 + }, + { // Entry 27 + 0x1.6671b365d15bb76f5080cc3658e2519ep-6, + 0x1.0d39f5fc24fa3p0 + }, + { // Entry 28 + 0x1.671a9b1bc6da7fffc947cfdb4dd24e3ap-6, + 0x1.0d405a1bfe7p0 + }, + { // Entry 29 + 0x1.dd9de2ebee648801272900e785c996b3p-6, + 0x1.11c602d8a1b64p0 + }, + { // Entry 30 + 0x1.4b55b84c74ca87ff3d23b3b83347c50fp-1, + 0x1.1c0p2 + }, + { // Entry 31 + -0x1.9897e85148d75fffff988e06dd8eae5ep4, + 0x1.1f8b0260ccc08p-85 + }, + { // Entry 32 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-3, + 0x1.2p-1 + }, + { // Entry 33 + 0x1.de288434c35c582817ddb245949a59a7p-5, + 0x1.24d3540217b15p0 + }, + { // Entry 34 + -0x1.ee30e065377edd211ae67f49d114a8dep-3, + 0x1.25bde8b09bc9fp-1 + }, + { // Entry 35 + -0x1.bef28412a9d80800871c59a8425d3aa6p0, + 0x1.262p-6 + }, + { // Entry 36 + 0x1.f25d629171aaeb2276907167a9aecd6ep-5, + 0x1.267e4cfc99f93p0 + }, + { // Entry 37 + -0x1.9080890e2f1798003a7f3166289a2555p2, + 0x1.288p-21 + }, + { // Entry 38 + -0x1.e561065b019c7c8d498e8c78464330bap-3, + 0x1.28aa9f2515f87p-1 + }, + { // Entry 39 + -0x1.acdc65a935a5e7fbeb2a0414dae29db6p-1, + 0x1.29a74a135d178p-3 + }, + { // Entry 40 + -0x1.ef0c55090466e7fc5d2be8b017aa1eb5p4, + 0x1.29ba33c33bb58p-103 + }, + { // Entry 41 + -0x1.d8d9a2cfb79d0b2ce6db09b403fbdef1p-3, + 0x1.2cep-1 + }, + { // Entry 42 + 0x1.44538ea06035a000000e7cc1825ca422p-4, + 0x1.33333353c89c5p0 + }, + { // Entry 43 + 0x1.p0, + 0x1.4p3 + }, + { // Entry 44 + 0x1.9c899ddb7cc3a80106bd92d9f30607adp-4, + 0x1.42d14b4da920cp0 + }, + { // Entry 45 + -0x1.7ddfc5b2002037feab4460e64664b09dp3, + 0x1.480p-40 + }, + { // Entry 46 + 0x1.a8eec6065bd99ffffff2293a34b1917dp-2, + 0x1.4cccccd6ceda7p1 + }, + { // Entry 47 + 0x1.d2b644665f10c7fffff2e1d2418998f5p-4, + 0x1.4ccccceca919dp0 + }, + { // Entry 48 + 0x1.d3bdb9847bf709c43457968ca6e28646p-4, + 0x1.4cfe1a8c30ed4p0 + }, + { // Entry 49 + 0x1.d6cf13653b91464319282088eeff4c97p-4, + 0x1.4d913e35aea4ep0 + }, + { // Entry 50 + -0x1.f1225ac4366237fdb303a0597a3c8f4ap-2, + 0x1.4ed318236c85ap-2 + }, + { // Entry 51 + 0x1.f37196430c2beec26b1c31bf38d57f48p-4, + 0x1.52faf510e022dp0 + }, + { // Entry 52 + 0x1.f38c0c8325d85ad659b2174a3ebf6f55p-4, + 0x1.530p0 + }, + { // Entry 53 + 0x1.ffedeac4d176f7d2cde344b7ec70f166p-4, + 0x1.555e30bbda69fp0 + }, + { // Entry 54 + 0x1.ef35aa1c6b1a77fd9de45a1e172b02c6p0, + 0x1.57ee98247d966p6 + }, + { // Entry 55 + -0x1.e280fe9b8cf857fdc3ad0dc812e58d1dp-2, + 0x1.5a05d853c77c9p-2 + }, + { // Entry 56 + -0x1.dae3311da4c40884648c41a830dfe372p-2, + 0x1.6p-2 + }, + { // Entry 57 + -0x1.cbac8ba352de3be2a5cca8fb96402862p-2, + 0x1.6c4p-2 + }, + { // Entry 58 + 0x1.d97edc6cb096a800000c666995420256p-2, + 0x1.7333334217b9ap1 + }, + { // Entry 59 + 0x1.4fb68838ccfa27ff2311eecb508d5928p-3, + 0x1.7563c3887db28p0 + }, + { // Entry 60 + 0x1.f8871c174778c7fff5731acf2ea4467cp0, + 0x1.76000000040p6 + }, + { // Entry 61 + -0x1.f2c14c2f6c5c9dbe7c8284b15fe01787p-4, + 0x1.82d0b42d0b428p-1 + }, + { // Entry 62 + -0x1.db1d990e111ee766e962104fbbf0f003p-4, + 0x1.87fd6da61c3dbp-1 + }, + { // Entry 63 + -0x1.88bdca024f32e80a1de6671b22560759p2, + 0x1.880p-21 + }, + { // Entry 64 + -0x1.d03b8ce6051c97fdd425647f3739d7a7p-4, + 0x1.8a653d99282aap-1 + }, + { // Entry 65 + -0x1.c2d826f6ad5fe8162592cc036e069cedp-4, + 0x1.8d6p-1 + }, + { // Entry 66 + -0x1.c02618e0447d27f9ebb51462d6978f25p-4, + 0x1.8dfa43fe5c91dp-1 + }, + { // Entry 67 + -0x1.eeaa19fc34f817fda340aeb7b652075bp3, + 0x1.915c782e20b7cp-52 + }, + { // Entry 68 + -0x1.977d95879da08ffffff16749a9bc1021p-2, + 0x1.999999f61e1aap-2 + }, + { // Entry 69 + -0x1.65df6512f76d17ffffefc71689395abep-1, + 0x1.99999a5944542p-3 + }, + { // Entry 70 + -0x1.65df64c430555800001074b613f83508p-1, + 0x1.99999aea617cep-3 + }, + { // Entry 71 + -0x1.fffffec8e4ad680000105809fee7c68cp-1, + 0x1.99999bd6ae073p-4 + }, + { // Entry 72 + 0x1.b88245f86df8afffff2313af8a910f6bp0, + 0x1.a48f51c27f3efp5 + }, + { // Entry 73 + 0x1.c03ec805c52c92447268d7949588e608p-3, + 0x1.a7cp0 + }, + { // Entry 74 + 0x1.e37abe09539ad7fdb2cbb9c1975d1fc2p5, + 0x1.b1af286bca208p200 + }, + { // Entry 75 + 0x1.d7f59ab2bcd057ffffffb4bb61effb6fp-3, + 0x1.b33333398e9e6p0 + }, + { // Entry 76 + 0x1.d7f59ae8908aa7ffffef7f3f17823162p-3, + 0x1.b3333353e507cp0 + }, + { // Entry 77 + 0x1.e67b44ba485188898012c0536c604a15p-3, + 0x1.ba5d2e974bap0 + }, + { // Entry 78 + -0x1.d51e74e2235f9001c902f49b3d39be88p-5, + 0x1.c0cp-1 + }, + { // Entry 79 + -0x1.c250b537e74bc8265c7b1b0eb3cb7541p-5, + 0x1.c320c8320c832p-1 + }, + { // Entry 80 + 0x1.c1497aa3ee77f7fcf0bc96c7418f04b6p0, + 0x1.c71c71c71c71ep5 + }, + { // Entry 81 + 0x1.78d835115ae9f7ff0c0680783889e6a1p0, + 0x1.da6d369b4dap4 + }, + { // Entry 82 + -0x1.ee844d23120e6ff4b9d27f8ce30b3cc2p-6, + 0x1.ddap-1 + }, + { // Entry 83 + -0x1.af7bceba1050d7feead6ef91625b91dfp-6, + 0x1.e1dff861891p-1 + }, + { // Entry 84 + 0x1.e3dbd09431d0d7fdf2755b85be8a1676p5, + 0x1.e3b21bc1779ecp200 + }, + { // Entry 85 + -0x1.7aea2aab13a0480729dec748658b34fdp-6, + 0x1.e572b95cae540p-1 + }, + { // Entry 86 + 0x1.c8de2fbafe18580003cdaa774a73d0c0p0, + 0x1.e739ce739ce70p5 + }, + { // Entry 87 + -0x1.0ce446e3ca10c004d63fb70fab6a26ffp-6, + 0x1.ed0340d0340d0p-1 + }, + { // Entry 88 + -0x1.fcf458f6faa4380097af1db4b2910c7dp-7, + 0x1.ee033092fe620p-1 + }, + { // Entry 89 + -0x1.fbe09900f2e9d7e3bbbe0bd455c92038p-7, + 0x1.ee0cc330cc347p-1 + }, + { // Entry 90 + -0x1.f9454ad8c58a6801723d48914bdbc81bp-7, + 0x1.ee23ee5df745dp-1 + }, + { // Entry 91 + 0x1.2c858a2326ced800dd3ed3ad03e0efedp-1, + 0x1.ee8p1 + }, + { // Entry 92 + 0x1.7f694cc35a4da800fb6e6f17a5903e17p1, + 0x1.eebbaeebbaee8p9 + }, + { // Entry 93 + -0x1.e2cfbb4934806fe698638d9325ce0de6p-7, + 0x1.eeebbaeebbaeep-1 + }, + { // Entry 94 + -0x1.c3d0837783cac8005374209e6248fb22p-7, + 0x1.f00000000008bp-1 + }, + { // Entry 95 + -0x1.51824c7587ecc4cae0ebe2a8eae894b0p-7, + 0x1.f3fffffffffffp-1 + }, + { // Entry 96 + -0x1.d0ef7d83c50a77fdf0a9df7625174df6p0, + 0x1.f46p-7 + }, + { // Entry 97 + -0x1.3cad2633010287ec521f3fb1b0e16c34p-7, + 0x1.f4bb83ff25408p-1 + }, + { // Entry 98 + -0x1.30260ecbe5e48801930721a2e427895ap-7, + 0x1.f52c691251919p-1 + }, + { // Entry 99 + 0x1.6937e0674dae37fec020473dcad8c7e5p7, + 0x1.f5a814afd69f4p599 + }, + { // Entry 100 + -0x1.f78887a8d70da00092ac096e0c2a748dp-8, + 0x1.f70588f144d4ep-1 + }, + { // Entry 101 + -0x1.f6f8472e06512801501371ceeb6902c1p-8, + 0x1.f708159aab0fep-1 + }, + { // Entry 102 + -0x1.c575bc711f57f7bcd5e65219b01c819cp-8, + 0x1.f7e849868c907p-1 + }, + { // Entry 103 + -0x1.c03a80ae608087bcec4b95b43cc7cf68p-8, + 0x1.f7fffffffff4cp-1 + }, + { // Entry 104 + 0x1.2d536e42845f97fe560fa7b450804b26p8, + 0x1.f9fe7f9fe7f9cp1000 + }, + { // Entry 105 + -0x1.f568e77ed84b1372c94cff5e7e38e985p-10, + 0x1.fdcp-1 + }, + { // Entry 106 + -0x1.be202babd38921235652db287907f634p-10, + 0x1.fdff6245a12f2p-1 + }, + { // Entry 107 + -0x1.bd96a1d7da0391520e1595e0904768ffp-10, + 0x1.fdffffffffffcp-1 + }, + { // Entry 108 + -0x1.bd96a1d7d9d9b63e5aa7d082a140d738p-10, + 0x1.fdfffffffffffp-1 + }, + { // Entry 109 + -0x1.bd27045bfd1e24767eb1fadda38b82e2p-11, + 0x1.fefffffffffffp-1 + }, + { // Entry 110 + -0x1.bd27045bc77c779853b6fc7b419acb49p-11, + 0x1.ff000000001ecp-1 + }, + { // Entry 111 + -0x1.bd25e056b638d812a81d48bf2dd5c055p-11, + 0x1.ff0000a7c5b2ap-1 + }, + { // Entry 112 + -0x1.bd226529bffa7801b54d1e695f9cf46ap-11, + 0x1.ff0002a7c5b2ap-1 + }, + { // Entry 113 + -0x1.d8c1f8f29d862387133a7814cb061b6dp-12, + 0x1.ff77fffffffffp-1 + }, + { // Entry 114 + -0x1.7c85657289fbe8275c1971e953a6ae71p-12, + 0x1.ff9285e1ae9c8p-1 + }, + { // Entry 115 + -0x1.ea7ebec511a69b37b972d41a517cd884p-13, + 0x1.ffb96e5b96e40p-1 + }, + { // Entry 116 + -0x1.c4e293b148cec847b4e214c76642cd73p-13, + 0x1.ffbed73ec264ep-1 + }, + { // Entry 117 + -0x1.bcd37f1eb06ff7cc110a8bd0efc2804bp-13, + 0x1.ffbffffffffffp-1 + }, + { // Entry 118 + -0x1.bcd37f1eb000bbf841f514e78b0bec67p-13, + 0x1.ffcp-1 + }, + { // Entry 119 + -0x1.8536047fb9d4f3b5cba95cabacae22aep-13, + 0x1.ffc7fffffffffp-1 + }, + { // Entry 120 + 0x1.343573efa4c4c000047648d4f349dfcep-1, + 0x1.ffe4effffffffp1 + }, + { // Entry 121 + -0x1.85236427a08717efc89ebcb159b0b578p-16, + 0x1.fff8fffffffffp-1 + }, + { // Entry 122 + -0x1.e8df7421f041fffffe5b0949761ec657p5, + 0x1.fffa3bfffffffp-204 + }, + { // Entry 123 + -0x1.e2efbc1dc92337d7a679ab6c98fab739p-20, + 0x1.ffff74fffffffp-1 + }, + { // Entry 124 + -0x1.34413657816577fd436fcbc4aa32de88p-2, + 0x1.fffffe7ffffffp-2 + }, + { // Entry 125 + -0x1.d0ca51f95ac197fe1add64b6119cb454p7, + 0x1.ffffff3ffffffp-773 + }, + { // Entry 126 + -0x1.f018f15c0ab6094209fcfe083ebc306ep4, + 0x1.fffffffff1fffp-104 + }, + { // Entry 127 + 0x1.465107258d1d1800062fee82bffbff4cp6, + 0x1.fffffffff9fffp270 + }, + { // Entry 128 + -0x1.9a9adba646d8e7ff39ebe5c5b651ecbcp7, + 0x1.fffffffffdfffp-683 + }, + { // Entry 129 + -0x1.16c0f776836d8ffe515d679ed8a253b1p8, + 0x1.fffffffffdfffp-927 + }, + { // Entry 130 + 0x1.d59b56cd2f3cc80209ce8056d3477a08p7, + 0x1.fffffffffdfffp779 + }, + { // Entry 131 + -0x1.ce61cf8ef372f7fe03b197d05decff0ep-1, + 0x1.fffffffffff8fp-4 + }, + { // Entry 132 + -0x1.c85c8985c199c7fc14d958ba92e399dbp7, + 0x1.fffffffffffe0p-759 + }, + { // Entry 133 + -0x1.bcb7b1526e511ac160e1a3298010d96dp-52, + 0x1.ffffffffffff8p-1 + }, + { // Entry 134 + -0x1.34413509f7a00562d2bf0506ef44e3a5p-3, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 135 + -0x1.8e271da4056a43993fdb13487031fbd4p-4, + 0x1.995255f2d00abp-1 + }, + { // Entry 136 + -0x1.9762be26c2c57dcae0118e0cced6e75ap-5, + 0x1.c89ac57dac58ap-1 + }, + { // Entry 137 + -0x1.c694ace08e5124f7327cd5da1fc480f6p-8, + 0x1.f7e3350888a69p-1 + }, + { // Entry 138 + 0x1.064664d0dd47cb0784b117d2efb0afb2p-5, + 0x1.1395d249b27a4p0 + }, + { // Entry 139 + 0x1.158bee1e56be974c17844d0736925a83p-4, + 0x1.2b3a0a0f20a14p0 + }, + { // Entry 140 + 0x1.9cd10b008ddd739de9e6d843b8ff4092p-4, + 0x1.42de41d48ec84p0 + }, + { // Entry 141 + 0x1.0d42f84798b4be1db02431f73c710b5fp-3, + 0x1.5a827999fcef4p0 + }, + { // Entry 142 + 0x1.47f70647644a538dd717c3f0c99b4f52p-3, + 0x1.7226b15f6b164p0 + }, + { // Entry 143 + 0x1.7f08548e0992552054c82deff65c5a7ep-3, + 0x1.89cae924d93d4p0 + }, + { // Entry 144 + 0x1.b2e37bef02ca65a6b69ef0ef6045fca9p-3, + 0x1.a16f20ea47644p0 + }, + { // Entry 145 + 0x1.e3e31eb5585d6defbecf1003ed8586ddp-3, + 0x1.b91358afb58b4p0 + }, + { // Entry 146 + 0x1.0929d506851b759ac8b971a365bb53bfp-2, + 0x1.d0b7907523b24p0 + }, + { // Entry 147 + 0x1.1f3b144d2903aa0e15b5d3c67d53f91bp-2, + 0x1.e85bc83a91d94p0 + }, + { // Entry 148 + 0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.0p1 + }, + { // Entry 149 + -0x1.34413509f7a00562d2bf0506ef44e3a5p-3, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 150 + -0x1.edc7b28c1cdff646afa1bdcd4e6a02f0p-4, + 0x1.83e609263c011p-1 + }, + { // Entry 151 + -0x1.7af97358b9e0a424fa702e69d4ac3a8cp-4, + 0x1.9dc22be484456p-1 + }, + { // Entry 152 + -0x1.0f218eacb6487dd0c606c3e816e7c3dap-4, + 0x1.b79e4ea2cc89bp-1 + }, + { // Entry 153 + -0x1.52e84950d4c307d9bedea47d3987c01bp-5, + 0x1.d17a716114ce0p-1 + }, + { // Entry 154 + -0x1.2519b7f1cb3d94d33244a6c708ffaefcp-6, + 0x1.eb56941f5d125p-1 + }, + { // Entry 155 + 0x1.1f8102faa9fd301aa54cd13599ef1980p-8, + 0x1.02995b6ed2ab5p0 + }, + { // Entry 156 + 0x1.a30a9d609efc4751d9d20363fa852e63p-6, + 0x1.0f876ccdf6cd8p0 + }, + { // Entry 157 + 0x1.7706e100e01d4da13cc59446df5969d9p-5, + 0x1.1c757e2d1aefbp0 + }, + { // Entry 158 + 0x1.0a965ca3c59fa6843ec39c17298b1aaap-4, + 0x1.29638f8c3f11ep0 + }, + { // Entry 159 + 0x1.564b9e135d1f0f233bd67e02bc5bf6eap-4, + 0x1.3651a0eb63341p0 + }, + { // Entry 160 + 0x1.9ee993b80f2136ca6bfb66b9c7b25428p-4, + 0x1.433fb24a87564p0 + }, + { // Entry 161 + 0x1.e4ae53ebbcefbd04882f10aaa3de86b7p-4, + 0x1.502dc3a9ab787p0 + }, + { // Entry 162 + 0x1.13e87661d64f5246b5a8d69214746331p-3, + 0x1.5d1bd508cf9aap0 + }, + { // Entry 163 + 0x1.34413509f79fd8ff6b6661a93ead623bp-3, + 0x1.6a09e667f3bccp0 + }, + { // Entry 164 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-4, + 0x1.8p-1 + }, + { // Entry 165 + -0x1.5634626b0211c48738b33f07d1594431p-4, + 0x1.a666666666666p-1 + }, + { // Entry 166 + -0x1.76d869b02a035a10797953f058b52ecap-5, + 0x1.cccccccccccccp-1 + }, + { // Entry 167 + -0x1.684bf7fda98a1c59efaac6272939dcd6p-7, + 0x1.f333333333332p-1 + }, + { // Entry 168 + 0x1.5b2a5ca1f47b15b644b33c640923bf35p-6, + 0x1.0ccccccccccccp0 + }, + { // Entry 169 + 0x1.a30a9d609efdd6812008dfbb8239bf8cp-5, + 0x1.1ffffffffffffp0 + }, + { // Entry 170 + 0x1.44538de3b27e4c8bcd11e934e41583aap-4, + 0x1.3333333333332p0 + }, + { // Entry 171 + 0x1.b02b728fb6168040e2c4e5e7fb3809b1p-4, + 0x1.4666666666665p0 + }, + { // Entry 172 + 0x1.0aec6e4a00fec3048feb505070bb4f14p-3, + 0x1.5999999999998p0 + }, + { // Entry 173 + 0x1.3b03499ffcc7d7b28a254f6122a6a4d4p-3, + 0x1.6cccccccccccbp0 + }, + { // Entry 174 + 0x1.68a288b60b7f789784b55146880d9ce1p-3, + 0x1.7fffffffffffep0 + }, + { // Entry 175 + 0.0, + 0x1.0p0 + }, + { // Entry 176 + 0x1.e1a5e2df92e9e5bcc08d3839a3e54697p4, + 0x1.0p100 + }, + { // Entry 177 + 0x1.e24f6e3fe3af5472f332ca85bdbb9d77p4, + 0x1.199999999999ap100 + }, + { // Entry 178 + 0x1.e2ea366d769c64c298e42c7b7a7f4693p4, + 0x1.3333333333334p100 + }, + { // Entry 179 + 0x1.e37899234efc355b9919ffe367a51209p4, + 0x1.4cccccccccccep100 + }, + { // Entry 180 + 0x1.e3fc6d39772e858d4b8607d59bb8d0ddp4, + 0x1.6666666666668p100 + }, + { // Entry 181 + 0x1.e47727f0ff00e5d66a0cd9d066e228c3p4, + 0x1.8000000000002p100 + }, + { // Entry 182 + 0x1.e4e9f6303263e5569760e25883a23773p4, + 0x1.999999999999cp100 + }, + { // Entry 183 + 0x1.e555ce14de677da58c6cbe260334cf1bp4, + 0x1.b333333333336p100 + }, + { // Entry 184 + 0x1.e5bb7b7ee2b364c38d849ed338fa804dp4, + 0x1.cccccccccccd0p100 + }, + { // Entry 185 + 0x1.e61ba9358eaaf702959b2a4bfffdca28p4, + 0x1.e66666666666ap100 + }, + { // Entry 186 + 0x1.e676e7b3bac865798509830704412b23p4, + 0x1.0p101 + }, + { // Entry 187 + 0x1.e1a5e2df92e9e5bcc08d3839a3e54697p5, + 0x1.0p200 + }, + { // Entry 188 + 0x1.e1faa88fbb4c9d17d9e0015fb0d07207p5, + 0x1.199999999999ap200 + }, + { // Entry 189 + 0x1.e2480ca684c3253facb8b25a8f324695p5, + 0x1.3333333333334p200 + }, + { // Entry 190 + 0x1.e28f3e0170f30d8c2cd39c0e85c52c50p5, + 0x1.4cccccccccccep200 + }, + { // Entry 191 + 0x1.e2d1280c850c35a50609a0079fcf0bbap5, + 0x1.6666666666668p200 + }, + { // Entry 192 + 0x1.e30e856848f565c9954d09050563b7adp5, + 0x1.8000000000002p200 + }, + { // Entry 193 + 0x1.e347ec87e2a6e589abf70d4913c3bf05p5, + 0x1.999999999999cp200 + }, + { // Entry 194 + 0x1.e37dd87a38a8b1b1267cfb2fd38d0ad9p5, + 0x1.b333333333336p200 + }, + { // Entry 195 + 0x1.e3b0af2f3acea5402708eb866e6fe372p5, + 0x1.cccccccccccd0p200 + }, + { // Entry 196 + 0x1.e3e0c60a90ca6e5fab143142d1f18860p5, + 0x1.e66666666666ap200 + }, + { // Entry 197 + 0x1.e40e6549a6d9259b22cb5da0541338ddp5, + 0x1.0p201 + }, + { // Entry 198 + 0x1.2d07adcbbbd22f95f8584324066f4c1ep8, + 0x1.0p1000 + }, + { // Entry 199 + 0x1.2d124681c0de86815b829c48c80cb18cp8, + 0x1.199999999999ap1000 + }, + { // Entry 200 + 0x1.2d1bf3049a0d578655ddb26823d8ec1ep8, + 0x1.3333333333334p1000 + }, + { // Entry 201 + 0x1.2d24d92ff793548fe5e10f9ea2ab48d5p8, + 0x1.4cccccccccccep1000 + }, + { // Entry 202 + 0x1.2d2d16715a1679930107d01dc5ec84c3p8, + 0x1.6666666666668p1000 + }, + { // Entry 203 + 0x1.2d34c21cd2939f9792f03d3d729f1a41p8, + 0x1.8000000000002p1000 + }, + { // Entry 204 + 0x1.2d3bef00c5c9cf8f95c57dc5f46b1b2cp8, + 0x1.999999999999cp1000 + }, + { // Entry 205 + 0x1.2d42ac7f108a091485163b82cc6444a6p8, + 0x1.b333333333336p1000 + }, + { // Entry 206 + 0x1.2d490755b0cec7866527b98d9fc09fbap8, + 0x1.cccccccccccd0p1000 + }, + { // Entry 207 + 0x1.2d4f0a311b8e40aa55a922452c30d457p8, + 0x1.e66666666666ap1000 + }, + { // Entry 208 + 0x1.2d54be18fe501791c4a007d0dc750a67p8, + 0x1.0p1001 + }, + { // Entry 209 + -0x1.bcb7bf382c6fb3df0029e1e6c04e5b04p-22, + 0x1.ffffep-1 + }, + { // Entry 210 + -0x1.287a794e24640de79fb5dd39033f1c3ap-23, + 0x1.fffff55555555p-1 + }, + { // Entry 211 + 0x1.287a731f2fe08fea55a78b1501306850p-23, + 0x1.0000055555555p0 + }, + { // Entry 212 + 0x1.bcb7a36cb15a8cec0c39b0a7cf2d7858p-22, + 0x1.00001p0 + }, + { // Entry 213 + -0x1.bcb7b155e7c045d88b2ccd879d00dedap-32, + 0x1.fffffff80p-1 + }, + { // Entry 214 + -0x1.287a7888aec95740a166efaf8756eaa1p-33, + 0x1.fffffffd55555p-1 + }, + { // Entry 215 + 0x1.287a719444b61daa0968ca1f55a6be9ap-33, + 0x1.0000000155555p0 + }, + { // Entry 216 + 0x1.bcb7b14ef4e1808ed1e940a65b2d5f0fp-32, + 0x1.000000040p0 + }, + { // Entry 217 + -0x1.bcb7b1526f2f3f0313ef120e2ab88e99p-42, + 0x1.fffffffffe0p-1 + }, + { // Entry 218 + -0x1.2883ba0aa61efb4b5ec5882d1426a118p-43, + 0x1.ffffffffff555p-1 + }, + { // Entry 219 + 0x1.2867ee8f909545d6cd4484a582495a1fp-43, + 0x1.0000000000555p0 + }, + { // Entry 220 + 0x1.bcb7b1526d728751c180c12b004dd665p-42, + 0x1.00000000010p0 + }, + { // Entry 221 + -0x1.bcb7b1526e511ac160e1a3298010d96dp-52, + 0x1.ffffffffffff8p-1 + }, + { // Entry 222 + -0x1.4d89c4fdd2bcba02454565e85cc46f5fp-53, + 0x1.ffffffffffffdp-1 + }, + { // Entry 223 + 0x1.bcb7b1526e50d544ad2cc1ecd3e2a249p-54, + 0x1.0000000000001p0 + }, + { // Entry 224 + 0x1.bcb7b1526e50ab93748d079547463ebfp-52, + 0x1.0000000000004p0 + }, + { // Entry 225 + 0x1.34413509f79fef2da5a350b33a574eb5p8, + 0x1.fffffffffffffp1023 + }, + { // Entry 226 + -0x1.434e6420f4373e5f05171d19e4184d25p8, + 0x1.0p-1074 + }, + { // Entry 227 + -0x1.34413509f7a02cb1a1f65baf60cb15dfp-3, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 228 + -0x1.34413509f7a00562d2bf0506ef44e3a5p-3, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 229 + -0x1.34413509f79fde140387ae5e7f7b691dp-3, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 230 + 0x1.34413509f79fb1b09c2f0b00cd273001p-3, + 0x1.6a09e667f3bcbp0 + }, + { // Entry 231 + 0x1.34413509f79fd8ff6b6661a93ead623bp-3, + 0x1.6a09e667f3bccp0 + }, + { // Entry 232 + 0x1.34413509f7a0004e3a9db851ae76dcc3p-3, + 0x1.6a09e667f3bcdp0 + }, + { // Entry 233 + -0x1.34413509f79ffd16dc9d46ca9e4a0d3cp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 234 + -0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.0p-1 + }, + { // Entry 235 + -0x1.34413509f79fd365a3fd8c7309a4d81dp-2, + 0x1.0000000000001p-1 + }, + { // Entry 236 + -0x1.ffbfc2bbc7808176d5526dc5cbf5abb0p-4, + 0x1.7ffffffffffffp-1 + }, + { // Entry 237 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-4, + 0x1.8p-1 + }, + { // Entry 238 + -0x1.ffbfc2bbc77fed399a36f3aad59232c9p-4, + 0x1.8000000000001p-1 + }, + { // Entry 239 + 0x1.68a288b60b7f9da6d37c2fcd47f77008p-3, + 0x1.7ffffffffffffp0 + }, + { // Entry 240 + 0x1.68a288b60b7fc2b622430e540655f53bp-3, + 0x1.8p0 + }, + { // Entry 241 + 0x1.68a288b60b7fe7c57109ecdac3292c7bp-3, + 0x1.8000000000001p0 + }, + { // Entry 242 + 0x1.2817ce90842c0e5d9ca444ee93c2f2b2p-10, + 0x1.00aaaaaaaaaaap0 + }, + { // Entry 243 + 0x1.2817ce908447c75d5ca081d47714bc4cp-10, + 0x1.00aaaaaaaaaabp0 + }, + { // Entry 244 + 0x1.2817ce908463805d1c9cbeb89ffd7a98p-10, + 0x1.00aaaaaaaaaacp0 + }, + { // Entry 245 + 0x1.34413509f79fe83e404d699ed350adcap-1, + 0x1.fffffffffffffp1 + }, + { // Entry 246 + 0x1.34413509f79fef311f12b35816f922f0p-1, + 0x1.0p2 + }, + { // Entry 247 + 0x1.34413509f79ffd16dc9d46ca9da34859p-1, + 0x1.0000000000001p2 + }, + { // Entry 248 + 0x1.34413509f79fe14b61881fe58fa838a4p-2, + 0x1.fffffffffffffp0 + }, + { // Entry 249 + 0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.0p1 + }, + { // Entry 250 + 0x1.34413509f7a00afc9a27da3d244d6dc3p-2, + 0x1.0000000000001p1 + }, + { // Entry 251 + -0x1.bcb7b1526e50ea1d497c9f189e19715ep-55, + 0x1.fffffffffffffp-1 + }, + { // Entry 252 + 0.0, + 0x1.0p0 + }, + { // Entry 253 + 0x1.bcb7b1526e50d544ad2cc1ecd3e2a249p-54, + 0x1.0000000000001p0 + }, + { // Entry 254 + -0x1.34413509f79ffd16dc9d46ca9e4a0d3cp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 255 + -0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.0p-1 + }, + { // Entry 256 + -0x1.34413509f79fd365a3fd8c7309a4d81dp-2, + 0x1.0000000000001p-1 + }, + { // Entry 257 + -0x1.34413509f79ff623fdd7fd115aa19816p-1, + 0x1.fffffffffffffp-3 + }, + { // Entry 258 + -0x1.34413509f79fef311f12b35816f922f0p-1, + 0x1.0p-2 + }, + { // Entry 259 + -0x1.34413509f79fe14b61881fe5904efd86p-1, + 0x1.0000000000001p-2 + }, + { // Entry 260 + -0x1.ce61cf8ef36fedbc8d6156bd661e298ep-1, + 0x1.fffffffffffffp-4 + }, + { // Entry 261 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p-1, + 0x1.0p-3 + }, + { // Entry 262 + -0x1.ce61cf8ef36fd8e3f11179919bcb8effp-1, + 0x1.0000000000001p-3 + }, + { // Entry 263 + -0x1.34413509f79ff2aa8e755834b8cd5d83p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 264 + -0x1.34413509f79fef311f12b35816f922f0p0, + 0x1.0p-4 + }, + { // Entry 265 + -0x1.34413509f79fe83e404d699ed3a4103bp0, + 0x1.0000000000001p-4 + }, + { // Entry 266 + -0x1.8151824c7587ee76d63a050abe8ba63fp0, + 0x1.fffffffffffffp-6 + }, + { // Entry 267 + -0x1.8151824c7587eafd66d7602e1cb76bacp0, + 0x1.0p-5 + }, + { // Entry 268 + -0x1.8151824c7587e40a88121674d96258f7p0, + 0x1.0000000000001p-5 + }, + { // Entry 269 + -0x1.ce61cf8ef36fea431dfeb1e0c449eefbp0, + 0x1.fffffffffffffp-7 + }, + { // Entry 270 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p0, + 0x1.0p-6 + }, + { // Entry 271 + -0x1.ce61cf8ef36fdfd6cfd6c34adf20a1b3p0, + 0x1.0000000000001p-6 + }, + { // Entry 272 + -0x1.0db90e68b8abf307b2e1af5b65041bdbp1, + 0x1.fffffffffffffp-8 + }, + { // Entry 273 + -0x1.0db90e68b8abf14afb305ced1419fe92p1, + 0x1.0p-7 + }, + { // Entry 274 + -0x1.0db90e68b8abedd18bcdb810726f7537p1, + 0x1.0000000000001p-7 + }, + { // Entry 275 + -0x1.34413509f79ff0edd6c405c667e34039p1, + 0x1.fffffffffffffp-9 + }, + { // Entry 276 + -0x1.34413509f79fef311f12b35816f922f0p1, + 0x1.0p-8 + }, + { // Entry 277 + -0x1.34413509f79febb7afb00e7b754e9995p1, + 0x1.0000000000001p-8 + }, + { // Entry 278 + -0x1.5ac95bab3693eed3faa65c316ac26497p1, + 0x1.fffffffffffffp-10 + }, + { // Entry 279 + -0x1.5ac95bab3693ed1742f509c319d8474ep1, + 0x1.0p-9 + }, + { // Entry 280 + -0x1.5ac95bab3693e99dd39264e6782dbdf3p1, + 0x1.0000000000001p-9 + }, + { // Entry 281 + -0x1.8151824c7587ecba1e88b29c6da188f5p1, + 0x1.fffffffffffffp-11 + }, + { // Entry 282 + -0x1.8151824c7587eafd66d7602e1cb76bacp1, + 0x1.0p-10 + }, + { // Entry 283 + -0x1.8151824c7587e783f774bb517b0ce252p1, + 0x1.0000000000001p-10 + }, + { // Entry 284 + -0x1.f4e9f6303263e66c8a2fb5dd763ef60fp1, + 0x1.fffffffffffffp-14 + }, + { // Entry 285 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.0p-13 + }, + { // Entry 286 + -0x1.f4e9f6303263e136631bbe9283aa4f6cp1, + 0x1.0000000000001p-13 + }, + { // Entry 287 + -0x1.f4e9f6303263e66c8a2fb5dd763ef60fp1, + 0x1.fffffffffffffp-14 + }, + { // Entry 288 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.0p-13 + }, + { // Entry 289 + -0x1.f4e9f6303263e136631bbe9283aa4f6cp1, + 0x1.0000000000001p-13 + }, + { // Entry 290 + -0x1.ce61cf8ef36fedbc8d6156bd661e298ep-1, + 0x1.fffffffffffffp-4 + }, + { // Entry 291 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p-1, + 0x1.0p-3 + }, + { // Entry 292 + -0x1.ce61cf8ef36fd8e3f11179919bcb8effp-1, + 0x1.0000000000001p-3 + }, + { // Entry 293 + -0x1.db11ed766abfc23dad46ff588641095dp-5, + 0x1.bffffffffffffp-1 + }, + { // Entry 294 + -0x1.db11ed766abf432dc3c1bb4167a6eb47p-5, + 0x1.cp-1 + }, + { // Entry 295 + -0x1.db11ed766abec41dda3c772a4d96833ep-5, + 0x1.c000000000001p-1 + }, + { // Entry 296 + -0x1.34413509f79ff2aa8e755834b8cd5d83p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 297 + -0x1.34413509f79fef311f12b35816f922f0p0, + 0x1.0p-4 + }, + { // Entry 298 + -0x1.34413509f79fe83e404d699ed3a4103bp0, + 0x1.0000000000001p-4 + }, + { // Entry 299 + -0x1.cb38fccd8bfea3c5778d26c3e6929b36p-6, + 0x1.dffffffffffffp-1 + }, + { // Entry 300 + -0x1.cb38fccd8bfdb696b29463658b991237p-6, + 0x1.ep-1 + }, + { // Entry 301 + -0x1.cb38fccd8bfcc967ed9ba00738877eb7p-6, + 0x1.e000000000001p-1 + }, + { // Entry 302 + -0x1.8151824c7587ee76d63a050abe8ba63fp0, + 0x1.fffffffffffffp-6 + }, + { // Entry 303 + -0x1.8151824c7587eafd66d7602e1cb76bacp0, + 0x1.0p-5 + }, + { // Entry 304 + -0x1.8151824c7587e40a88121674d96258f7p0, + 0x1.0000000000001p-5 + }, + { // Entry 305 + -0x1.c3d0837784c5d4dc2b470a089b8b6137p-7, + 0x1.effffffffffffp-1 + }, + { // Entry 306 + -0x1.c3d0837784c409cbf85d4dd61d426e1bp-7, + 0x1.fp-1 + }, + { // Entry 307 + -0x1.c3d0837784c23ebbc57391a3adc87461p-7, + 0x1.f000000000001p-1 + }, + { // Entry 308 + -0x1.ce61cf8ef36fea431dfeb1e0c449eefbp0, + 0x1.fffffffffffffp-7 + }, + { // Entry 309 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p0, + 0x1.0p-6 + }, + { // Entry 310 + -0x1.ce61cf8ef36fdfd6cfd6c34adf20a1b3p0, + 0x1.0000000000001p-6 + }, + { // Entry 311 + -0x1.c03a80ae5e08bfbaeb001bb3cc0e0020p-8, + 0x1.f7fffffffffffp-1 + }, + { // Entry 312 + -0x1.c03a80ae5e05382d51f71b0f6602c76ap-8, + 0x1.f80p-1 + }, + { // Entry 313 + -0x1.c03a80ae5e01b09fb8ee1a6b1ca6b823p-8, + 0x1.f800000000001p-1 + }, + { // Entry 314 + -0x1.0db90e68b8abf307b2e1af5b65041bdbp1, + 0x1.fffffffffffffp-8 + }, + { // Entry 315 + -0x1.0db90e68b8abf14afb305ced1419fe92p1, + 0x1.0p-7 + }, + { // Entry 316 + -0x1.0db90e68b8abedd18bcdb810726f7537p1, + 0x1.0000000000001p-7 + }, + { // Entry 317 + -0x1.be76bd77b50331b751b4d8af88fb07ecp-9, + 0x1.fbfffffffffffp-1 + }, + { // Entry 318 + -0x1.be76bd77b4fc30d6cb5e729fc0bd5fa5p-9, + 0x1.fc0p-1 + }, + { // Entry 319 + -0x1.be76bd77b4f52ff645080c9030f7ab79p-9, + 0x1.fc00000000001p-1 + }, + { // Entry 320 + -0x1.34413509f79ff0edd6c405c667e34039p1, + 0x1.fffffffffffffp-9 + }, + { // Entry 321 + -0x1.34413509f79fef311f12b35816f922f0p1, + 0x1.0p-8 + }, + { // Entry 322 + -0x1.34413509f79febb7afb00e7b754e9995p1, + 0x1.0000000000001p-8 + }, + { // Entry 323 + -0x1.bd96a1d7d9d9b63e5aa7d082a140d738p-10, + 0x1.fdfffffffffffp-1 + }, + { // Entry 324 + -0x1.bd96a1d7d9cbc28d1ed88eb987048038p-10, + 0x1.fe0p-1 + }, + { // Entry 325 + -0x1.bd96a1d7d9bdcedbe3094cf0dcd5c0adp-10, + 0x1.fe00000000001p-1 + }, + { // Entry 326 + -0x1.5ac95bab3693eed3faa65c316ac26497p1, + 0x1.fffffffffffffp-10 + }, + { // Entry 327 + -0x1.5ac95bab3693ed1742f509c319d8474ep1, + 0x1.0p-9 + }, + { // Entry 328 + -0x1.5ac95bab3693e99dd39264e6782dbdf3p1, + 0x1.0000000000001p-9 + }, + { // Entry 329 + -0x1.bd27045bfd1e24767eb1fadda38b82e2p-11, + 0x1.fefffffffffffp-1 + }, + { // Entry 330 + -0x1.bd27045bfd024b0eb5a690199f7d311fp-11, + 0x1.ff0p-1 + }, + { // Entry 331 + -0x1.bd27045bfce671a6ec9b25567aa9bb13p-11, + 0x1.ff00000000001p-1 + }, + { // Entry 332 + -0x1.8151824c7587ecba1e88b29c6da188f5p1, + 0x1.fffffffffffffp-11 + }, + { // Entry 333 + -0x1.8151824c7587eafd66d7602e1cb76bacp1, + 0x1.0p-10 + }, + { // Entry 334 + -0x1.8151824c7587e783f774bb517b0ce252p1, + 0x1.0000000000001p-10 + }, + { // Entry 335 + -0x1.bcef518e2998bf2fcdeca6d0c7d243c3p-12, + 0x1.ff7ffffffffffp-1 + }, + { // Entry 336 + -0x1.bcef518e29611a506bc6531e97655414p-12, + 0x1.ff8p-1 + }, + { // Entry 337 + -0x1.bcef518e29297571099fff6e248ec50ep-12, + 0x1.ff80000000001p-1 + }, + { // Entry 338 + -0x1.f4e9f6303263e66c8a2fb5dd763ef60fp1, + 0x1.fffffffffffffp-14 + }, + { // Entry 339 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.0p-13 + }, + { // Entry 340 + -0x1.f4e9f6303263e136631bbe9283aa4f6cp1, + 0x1.0000000000001p-13 + }, + { // Entry 341 + -0x1.bcbea45645848a4be42e2d4ac91c6d9fp-15, + 0x1.ffeffffffffffp-1 + }, + { // Entry 342 + -0x1.bcbea45643c7c4b46503e30e59b7dd28p-15, + 0x1.fffp-1 + }, + { // Entry 343 + -0x1.bcbea456420aff1ce5d998dfd0ef3d8bp-15, + 0x1.fff0000000001p-1 + }, + { // Entry 344 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 345 + 0x1.34413509f79fef2da5a350b33a574eb5p8, + 0x1.fffffffffffffp1023 + }, + { // Entry 346 + 0x1.34413509f79fef2a2c33ee0e5db55eafp8, + 0x1.ffffffffffffep1023 + }, + { // Entry 347 + 0x1.fd14db31ba3bab2b91a5ae782f204d4fp-2, + 0x1.921fb54442d18p1 + }, + { // Entry 348 + 0x1.91a74c4f853777f4e525f640304e54bep-3, + 0x1.921fb54442d18p0 + }, + { // Entry 349 + 0x1.bcb7b1526e50d544ad2cc1ecd3e2a249p-54, + 0x1.0000000000001p0 + }, + { // Entry 350 + 0.0, + 0x1.0p0 + }, + { // Entry 351 + -0x1.bcb7b1526e50ea1d497c9f189e19715ep-55, + 0x1.fffffffffffffp-1 + }, + { // Entry 352 + -0x1.adb63b88d410ccdab1fee0dffb47e244p-4, + 0x1.921fb54442d18p-1 + }, + { // Entry 353 + -0x1.33a7146f72a41f3293a464b4b1aa514cp8, + 0x1.0000000000001p-1022 + }, + { // Entry 354 + -0x1.33a7146f72a41f39868329fe6aeda65ep8, + 0x1.0p-1022 + }, + { // Entry 355 + -0x1.33a7146f72a41f407961ef4824316a9fp8, + 0x1.ffffffffffffep-1023 + }, + { // Entry 356 + -0x1.33a7146f72a41f476c40b491dd759e0ep8, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 357 + -0x1.430153d3b1b9566338cf586d0e128edcp8, + 0x1.0p-1073 + }, + { // Entry 358 + -0x1.434e6420f4373e5f05171d19e4184d25p8, + 0x1.0p-1074 + }, + { // Entry 359 + -HUGE_VAL, + 0.0 + }, + { // Entry 360 + -HUGE_VAL, + -0.0 + }, + { // Entry 361 + 0x1.p0, + 0x1.4p3 + }, + { // Entry 362 + 0x1.p1, + 0x1.9p6 + }, + { // Entry 363 + 0x1.80p1, + 0x1.f40p9 + } +}; diff --git a/tests/math_data/log10f_intel_data.h b/tests/math_data/log10f_intel_data.h new file mode 100644 index 000000000..0f1ac267a --- /dev/null +++ b/tests/math_data/log10f_intel_data.h @@ -0,0 +1,1226 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log10f_intel_data[] = { + { // Entry 0 + -0x1.fe8bfdffff13dd47512c048f491f9b43p3, + 0x1.000022p-53 + }, + { // Entry 1 + -0x1.815170ed4e086e755171000a21e4418ap2, + 0x1.0000a0p-20 + }, + { // Entry 2 + -0x1.fe8beafff5736c97130c9ced1f57d1a3p3, + 0x1.000180p-53 + }, + { // Entry 3 + -0x1.343e0effe0b2cf5c4261140f67bbb9dbp-2, + 0x1.0001d0p-1 + }, + { // Entry 4 + 0x1.bc41b9006f9ea191f8d77992988148e8p-11, + 0x1.007ffep0 + }, + { // Entry 5 + 0x1.286d48f2328d1c51bb42649f1e36f51cp-10, + 0x1.00aadcp0 + }, + { // Entry 6 + 0x1.3c3724fff9a66a1fc88c62753a01a093p-10, + 0x1.00b648p0 + }, + { // Entry 7 + 0x1.b41066a765c47c650e3f2b65383836c5p-10, + 0x1.00fb80p0 + }, + { // Entry 8 + 0x1.b4ede8ab7383b8e1ac6403842ab125e1p-10, + 0x1.00fcp0 + }, + { // Entry 9 + 0x1.b606409a66ace2644d565b3bbe495b4bp-10, + 0x1.00fca2p0 + }, + { // Entry 10 + 0x1.361702fff27220603ff5a74b9a7278a1p-2, + 0x1.010fp1 + }, + { // Entry 11 + 0x1.30ecd6fe9803b26443d0a8c84cf88f49p-9, + 0x1.0160p0 + }, + { // Entry 12 + 0x1.ad1561043e238a54f2968308b5b84a0ap-9, + 0x1.01efdep0 + }, + { // Entry 13 + 0x1.add67b049b9eccb589d59f2e94044d4cp-9, + 0x1.01f0bep0 + }, + { // Entry 14 + 0x1.b4181727e525aa3c9fe9bb81a1ea32f2p-9, + 0x1.01f8p0 + }, + { // Entry 15 + 0x1.ba90af0300546714c91e69807716244bp-9, + 0x1.01ff82p0 + }, + { // Entry 16 + 0x1.bf75c6fdd387cfc33e178c7140ff4a43p-9, + 0x1.020530p0 + }, + { // Entry 17 + 0x1.c160fcfb3f11263df6c5479a7fc1f96ep-9, + 0x1.02076ap0 + }, + { // Entry 18 + 0x1.c3b396fb7cc17548094cdeed806812d7p-9, + 0x1.020a1cp0 + }, + { // Entry 19 + 0x1.041e5efff8637a181cab5a487e534f1cp5, + 0x1.0220p108 + }, + { // Entry 20 + 0x1.deaf41009dde64cb85f68d09d2edf173p-9, + 0x1.02296ep0 + }, + { // Entry 21 + 0x1.ecf47efdaeb10f5ade28ff93f4f44527p-9, + 0x1.023ap0 + }, + { // Entry 22 + 0x1.f514f89756d667a2094b9aa6f5425a94p-8, + 0x1.048cp0 + }, + { // Entry 23 + -0x1.31add3ffcf191eb75b949d0c4b25562ep0, + 0x1.06p-4 + }, + { // Entry 24 + 0x1.5d5eb8fffce13ef5613f5c26350b3ef3p-7, + 0x1.065cd2p0 + }, + { // Entry 25 + 0x1.b02afb003def304a513c84d809f21238p-7, + 0x1.07e4bcp0 + }, + { // Entry 26 + 0x1.e8296b002bba062b42b25642380152e2p-7, + 0x1.08ef12p0 + }, + { // Entry 27 + 0x1.e9c5e90021ec01c297e475abe4ba42p-7, + 0x1.08f6c0p0 + }, + { // Entry 28 + -0x1.7d2b50ffff0186373287a99f0cecd28ep0, + 0x1.09bcp-5 + }, + { // Entry 29 + 0x1.3a62cbffff2834d75a70360f6b9d64cfp0, + 0x1.0e83a0p4 + }, + { // Entry 30 + -0x1.7aa2bc000221055273bfa7fee62d0379p0, + 0x1.0fdcp-5 + }, + { // Entry 31 + 0x1.d5bbd4fffd35c403bb0a652e9334f1e4p0, + 0x1.1180p6 + }, + { // Entry 32 + 0x1.ef425287c21feec9c54e178d894354edp-6, + 0x1.1274p0 + }, + { // Entry 33 + -0x1.29297dffff901bb8ac5190eca10186b9p0, + 0x1.1adcp-4 + }, + { // Entry 34 + 0x1.817dc8fccbc0fb5087e88f554f1908fdp-5, + 0x1.1d4cp0 + }, + { // Entry 35 + 0x1.96aaacfefcf3bb8dcf3d8c94eb1423cap-5, + 0x1.1fp0 + }, + { // Entry 36 + 0x1.a2d9334a67417635918aaf61a00994f0p-5, + 0x1.1ffcp0 + }, + { // Entry 37 + 0x1.e32d32fa5c9d38509a7ba3e2bfb93574p-5, + 0x1.253d24p0 + }, + { // Entry 38 + 0x1.55811effbe311325be81852b0556032cp-1, + 0x1.294a50p2 + }, + { // Entry 39 + -0x1.d7dae0fffee85f639c44d1f94b88a9aap-3, + 0x1.2d363ap-1 + }, + { // Entry 40 + -0x1.9ba71b0001bcb89106e975a5735cc54cp1, + 0x1.3ecf84p-11 + }, + { // Entry 41 + 0x1.p0, + 0x1.40p3 + }, + { // Entry 42 + 0x1.879ecefffff999362de3e56a2a6ed238p2, + 0x1.412668p20 + }, + { // Entry 43 + 0x1.c10343057f36be857e8738b6dfecd5dep-4, + 0x1.498152p0 + }, + { // Entry 44 + 0x1.f237b389b8afaac4cac40f2695df7209p-4, + 0x1.52bf2ap0 + }, + { // Entry 45 + -0x1.e0e8f9e4b17e517c0a47404130e68838p-2, + 0x1.5b43e2p-2 + }, + { // Entry 46 + 0x1.bce8b0000212bd563ade9f93343779fbp-2, + 0x1.5c17p1 + }, + { // Entry 47 + -0x1.d30fa3d9517968762410807be9c7cb7ep-2, + 0x1.663fe0p-2 + }, + { // Entry 48 + 0x1.ca3f98fffffea806640e073c5b17da75p-2, + 0x1.66b06ap1 + }, + { // Entry 49 + -0x1.81bbccfffeb10074d0f87e9e6ab68f3fp-1, + 0x1.695dp-3 + }, + { // Entry 50 + -0x1.3442891155fedc1531e5c4a593f0e2f0p-3, + 0x1.6a095cp-1 + }, + { // Entry 51 + 0x1.f28489002d32f29f766276e96f7f21aap4, + 0x1.6aaaaap103 + }, + { // Entry 52 + -0x1.7d9722fffffee06829536561f0f13e07p-1, + 0x1.7028e2p-3 + }, + { // Entry 53 + 0x1.e39e45d51ccc5ba793598e2a5b79a0dfp-2, + 0x1.7bbf06p1 + }, + { // Entry 54 + -0x1.ffbfcbff9b381c31b8783059f0acf062p-4, + 0x1.7ffffep-1 + }, + { // Entry 55 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-4, + 0x1.80p-1 + }, + { // Entry 56 + -0x1.b40dd238181b3a9e0aacd04028af4a80p-2, + 0x1.801e82p-2 + }, + { // Entry 57 + -0x1.f9043300033a2fda0c9e8b664d0dfae2p-4, + 0x1.8174c4p-1 + }, + { // Entry 58 + -0x1.530ccb00030817c37d1894f62c055194p0, + 0x1.8421p-5 + }, + { // Entry 59 + -0x1.e2278820b34cd516815ccd9af00ec36cp-4, + 0x1.867124p-1 + }, + { // Entry 60 + -0x1.db11ed766abf432dc3c1bb4167a6eb47p-4, + 0x1.88p-1 + }, + { // Entry 61 + 0x1.eb76a4317f935066a9dd258d69495f3bp-3, + 0x1.bcd946p0 + }, + { // Entry 62 + -0x1.e5a7d2fffbde5faba9ad1dafa9f8e25ep-1, + 0x1.cd1eb6p-4 + }, + { // Entry 63 + -0x1.e3e2e8000003707015334e8f6d4e1baep-1, + 0x1.d0cdb4p-4 + }, + { // Entry 64 + -0x1.46b528fff19f0db93b31ce66c94d4faap-1, + 0x1.d739cep-3 + }, + { // Entry 65 + -0x1.ffd158bd0b2827904af6cec4c6e1bbe4p-6, + 0x1.dc7710p-1 + }, + { // Entry 66 + 0x1.c00806bb584a81d2425a4c449277a3c0p-1, + 0x1.dffffep2 + }, + { // Entry 67 + -0x1.a0ed34fffc666da4d52ec02aeafec305p-6, + 0x1.e2dc9ap-1 + }, + { // Entry 68 + 0x1.e61002ffffc2d1e0983851bf24c9ce23p4, + 0x1.e339a2p100 + }, + { // Entry 69 + -0x1.3a6ae8fffd0faf4aca1345a2b412cb11p-6, + 0x1.e9de50p-1 + }, + { // Entry 70 + -0x1.9775a6e35532e99d0cf2384ab86d5473p-7, + 0x1.f18c60p-1 + }, + { // Entry 71 + -0x1.81f977002634432665d65d78d2968a65p2, + 0x1.f40e5ep-21 + }, + { // Entry 72 + -0x1.f62251ffffff968db3edbd69bcf5cfdcp1, + 0x1.f4e26ap-14 + }, + { // Entry 73 + -0x1.14f03effe1727a0c4e49b2a6bad88689p-7, + 0x1.f621f6p-1 + }, + { // Entry 74 + -0x1.f7c3f8ffbdab13a6cac3e1e31df4ebbfp-8, + 0x1.f7047cp-1 + }, + { // Entry 75 + -0x1.f63efaafb8883e9793490850e59689c5p-8, + 0x1.f70b5cp-1 + }, + { // Entry 76 + -0x1.f37d18ffb9ef3b0fef577217ed18e097p-8, + 0x1.f717d6p-1 + }, + { // Entry 77 + -0x1.def364ad9e50296b41e69bbd93d4b89dp-8, + 0x1.f774cep-1 + }, + { // Entry 78 + -0x1.d980a30635055b8d9b54edd672c858a3p-10, + 0x1.fddffep-1 + }, + { // Entry 79 + -0x1.be7cd6ffc9f63979c62763b7424b91b8p-10, + 0x1.fdfef8p-1 + }, + { // Entry 80 + -0x1.a0d0f2971f8c3359f07a6bb4fccab210p-10, + 0x1.fe21p-1 + }, + { // Entry 81 + -0x1.bd2a7f88f7e22e1fbeda7c34e78c5fbfp-11, + 0x1.fefffep-1 + }, + { // Entry 82 + -0x1.ad17eafff3e585f32e96d0e7c6897eaep-11, + 0x1.ff093ap-1 + }, + { // Entry 83 + -0x1.e1b20eab03fb3a4a3c1ca58716aa04d8p2, + 0x1.ff1ffep-26 + }, + { // Entry 84 + -0x1.bd42c8df31e3d447244cc720bd67faadp-12, + 0x1.ff7fe8p-1 + }, + { // Entry 85 + -0x1.bdb1f6cd42c7c46d6967bb003016e45bp-13, + 0x1.ffbfe0p-1 + }, + { // Entry 86 + -0x1.ca749c8706de8e46ee3cf5bf9a96ab1bp-14, + 0x1.ffdf04p-1 + }, + { // Entry 87 + -0x1.c600bcbce645991d16979edbbc0c311fp-14, + 0x1.ffdf56p-1 + }, + { // Entry 88 + -0x1.bd34cc84be200f8cb449c26c3f6763d1p-14, + 0x1.ffdff8p-1 + }, + { // Entry 89 + -0x1.bce164dc339f92c17cc22cb9a07458d6p-14, + 0x1.ffdffep-1 + }, + { // Entry 90 + -0x1.3443d0ffc8b4e8b31ed055e579024a80p-1, + 0x1.fff9fep-3 + }, + { // Entry 91 + -0x1.72de800001549031af6ca96747c1126fp4, + 0x1.fffc7ep-78 + }, + { // Entry 92 + 0x1.344134ff8b51b7a013d2358e0089d30dp5, + 0x1.fffffap127 + }, + { // Entry 93 + -0x1.bcb7b30f2604868dab81d79e1f40443cp-25, + 0x1.fffffcp-1 + }, + { // Entry 94 + -0x1.3441360959c2bf17a59af37357663f09p-3, + 0x1.6a09e6p-1 + }, + { // Entry 95 + -0x1.8e271d6ab5d7ee84106f48e33b8cb8e0p-4, + 0x1.995256p-1 + }, + { // Entry 96 + -0x1.9762ba2f4a2198a2ce8974450be1661fp-5, + 0x1.c89ac6p-1 + }, + { // Entry 97 + -0x1.c694764682002f79a74b22bb7570477ep-8, + 0x1.f7e336p-1 + }, + { // Entry 98 + 0x1.064661197381c71f1a9f9ac21e313749p-5, + 0x1.1395d2p0 + }, + { // Entry 99 + 0x1.158bedc46861d0d27c114033f3db9a96p-4, + 0x1.2b3a0ap0 + }, + { // Entry 100 + 0x1.9cd10befe72cc8a8ecfeacd70aed874ap-4, + 0x1.42de42p0 + }, + { // Entry 101 + 0x1.0d42f94d71eab1a45a4e19f5a1d78fcbp-3, + 0x1.5a827ap0 + }, + { // Entry 102 + 0x1.47f707c940c69c0e2b81a883c7fcf3e2p-3, + 0x1.7226b2p0 + }, + { // Entry 103 + 0x1.7f08567d056a15ac18992a2573074fc1p-3, + 0x1.89caeap0 + }, + { // Entry 104 + 0x1.b2e37e3ec1bd60c78ec0b821ea37604dp-3, + 0x1.a16f22p0 + }, + { // Entry 105 + 0x1.e3e3215b7afa3355ef4ed63c72685ff3p-3, + 0x1.b9135ap0 + }, + { // Entry 106 + 0x1.0929d68063288eaf1594278eb7b2fc8ep-2, + 0x1.d0b792p0 + }, + { // Entry 107 + 0x1.1f3b15ea121ed378638c6e76b1a3108fp-2, + 0x1.e85bcap0 + }, + { // Entry 108 + 0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.p1 + }, + { // Entry 109 + -0x1.3441360959c2bf17a59af37357663f09p-3, + 0x1.6a09e6p-1 + }, + { // Entry 110 + -0x1.edc7b7d1726b9d3a32996762d45e780ap-4, + 0x1.83e608p-1 + }, + { // Entry 111 + -0x1.7af97b7bce8afc77122afb0375a2da53p-4, + 0x1.9dc22ap-1 + }, + { // Entry 112 + -0x1.0f219957375a31be41be4c43a6916104p-4, + 0x1.b79e4cp-1 + }, + { // Entry 113 + -0x1.52e86324d08348db62a1b30a19674a5cp-5, + 0x1.d17a6ep-1 + }, + { // Entry 114 + -0x1.2519f3a5667aea40e1f962a1f5d85c21p-6, + 0x1.eb5690p-1 + }, + { // Entry 115 + 0x1.1f80654567c5aa07e1d9578dfde75b1fp-8, + 0x1.02995ap0 + }, + { // Entry 116 + 0x1.a30a884b48ced10372c3c1f79d81055bp-6, + 0x1.0f876cp0 + }, + { // Entry 117 + 0x1.7706deccbe15df9c9101690cc9b736b0p-5, + 0x1.1c757ep0 + }, + { // Entry 118 + 0x1.0a965f582ad2d2cc3962364e72fabf4bp-4, + 0x1.296390p0 + }, + { // Entry 119 + 0x1.564ba4450402b6d51b22231ee30056ecp-4, + 0x1.3651a2p0 + }, + { // Entry 120 + 0x1.9ee99d1f81cea5262e8e5fa8308a4f10p-4, + 0x1.433fb4p0 + }, + { // Entry 121 + 0x1.e4ae6049c4561ba2e5b54e4aef7ec1f7p-4, + 0x1.502dc6p0 + }, + { // Entry 122 + 0x1.13e87df00be5c8e58f5f6baa00a8e9a8p-3, + 0x1.5d1bd8p0 + }, + { // Entry 123 + 0x1.3441340a957d1f4a988a733cd68c06d7p-3, + 0x1.6a09e6p0 + }, + { // Entry 124 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-4, + 0x1.80p-1 + }, + { // Entry 125 + -0x1.5634641a3fd51681f12d3df90719aed0p-4, + 0x1.a66666p-1 + }, + { // Entry 126 + -0x1.76d86fdd61d0265fd8416f7297bd494fp-5, + 0x1.ccccccp-1 + }, + { // Entry 127 + -0x1.684c1a332d5dc3307d73c7ba25168d0fp-7, + 0x1.f33332p-1 + }, + { // Entry 128 + 0x1.5b2a4774a2de2143d8ff5f649a50863bp-6, + 0x1.0cccccp0 + }, + { // Entry 129 + 0x1.a30a9d609efe9c281982d7df7ae69259p-5, + 0x1.20p0 + }, + { // Entry 130 + 0x1.445392859c560c3c9ed56125e21ba584p-4, + 0x1.333334p0 + }, + { // Entry 131 + 0x1.b02b7b4804d6e3346e6f30fb0ed80ed8p-4, + 0x1.466668p0 + }, + { // Entry 132 + 0x1.0aec747738c557211b21410621b26f8fp-3, + 0x1.59999cp0 + }, + { // Entry 133 + 0x1.3b03516d50b3544158f589c768f946e6p-3, + 0x1.6cccd0p0 + }, + { // Entry 134 + 0x1.68a288b60b7fc2b622430e540655f53bp-3, + 0x1.80p0 + }, + { // Entry 135 + 0.0, + 0x1.p0 + }, + { // Entry 136 + 0x1.e1a5e2df92e9e5bcc08d3839a3e54697p4, + 0x1.p100 + }, + { // Entry 137 + 0x1.e24f6e426a8bf8a9e67a7799f8b17451p4, + 0x1.19999ap100 + }, + { // Entry 138 + 0x1.e2ea367218863bc8fd2c0d9ac9c7623cp4, + 0x1.333334p100 + }, + { // Entry 139 + 0x1.e3789929b904e81bc6f0e5158f365203p4, + 0x1.4ccccep100 + }, + { // Entry 140 + 0x1.e3fc6d41682d18d8c703d601ddc1fa20p4, + 0x1.666668p100 + }, + { // Entry 141 + 0x1.e47727fa42d490cc96bad253a3656436p4, + 0x1.800002p100 + }, + { // Entry 142 + 0x1.e4e9f63a9eb204cd2dcd94b7ceca28a7p4, + 0x1.99999cp100 + }, + { // Entry 143 + 0x1.e555ce20504ed691954bc10e175867a8p4, + 0x1.b33336p100 + }, + { // Entry 144 + 0x1.e5bb7b8b3d22f0a25afb3f6c6877e417p4, + 0x1.ccccd0p100 + }, + { // Entry 145 + 0x1.e61ba942b928956af0bafc1ad04f0b20p4, + 0x1.e6666ap100 + }, + { // Entry 146 + 0x1.e676e7b3bac865798509830704412b23p4, + 0x1.p101 + }, + { // Entry 147 + -0x1.bcb7bf382c6fb3df0029e1e6c04e5b04p-22, + 0x1.ffffe0p-1 + }, + { // Entry 148 + -0x1.15f2d18a6400ab03be90bfceaa5447fbp-23, + 0x1.fffff6p-1 + }, + { // Entry 149 + 0x1.4d89c115357d535c8f9533338e6883eap-23, + 0x1.000006p0 + }, + { // Entry 150 + 0x1.bcb7a36cb15a8cec0c39b0a7cf2d7858p-22, + 0x1.000010p0 + }, + { // Entry 151 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 152 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 153 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 154 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 155 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 156 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 157 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 158 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 159 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 160 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 161 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 162 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 163 + 0x1.344135067e308acf8abe721a7991fdb7p5, + 0x1.fffffep127 + }, + { // Entry 164 + -0x1.66d3e7bd9a402c6f2e2bc4c48abe02abp5, + 0x1.p-149 + }, + { // Entry 165 + -0x1.34413af333ae8c86c135ab5278494452p-3, + 0x1.6a09e4p-1 + }, + { // Entry 166 + -0x1.3441360959c2bf17a59af37357663f09p-3, + 0x1.6a09e6p-1 + }, + { // Entry 167 + -0x1.3441311f7fdde48753477d6b1af5d93dp-3, + 0x1.6a09e8p-1 + }, + { // Entry 168 + 0x1.34412f20bb9151db7cefbb5db5a9018ep-3, + 0x1.6a09e4p0 + }, + { // Entry 169 + 0x1.3441340a957d1f4a988a733cd68c06d7p-3, + 0x1.6a09e6p0 + }, + { // Entry 170 + 0x1.344138f46f61f9daeadde94512fc6ca3p-3, + 0x1.6a09e8p0 + }, + { // Entry 171 + -0x1.344136c6af521ffb49335226ca8bbf4ap-2, + 0x1.fffffep-2 + }, + { // Entry 172 + -0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.p-1 + }, + { // Entry 173 + -0x1.344131908840c3c3db4f515285b11c22p-2, + 0x1.000002p-1 + }, + { // Entry 174 + -0x1.ffbfcbff9b381c31b8783059f0acf062p-4, + 0x1.7ffffep-1 + }, + { // Entry 175 + -0x1.ffbfc2bbc780375837c4b0b84f38a14ap-4, + 0x1.80p-1 + }, + { // Entry 176 + -0x1.ffbfb977f3d4acee4eb0b360dbc6ec48p-4, + 0x1.800002p-1 + }, + { // Entry 177 + 0x1.68a2841421a3d04961e94e83359bcdafp-3, + 0x1.7ffffep0 + }, + { // Entry 178 + 0x1.68a288b60b7fc2b622430e540655f53bp-3, + 0x1.80p0 + }, + { // Entry 179 + 0x1.68a28d57f55587eb16cd0cffc00ecfbcp-3, + 0x1.800002p0 + }, + { // Entry 180 + 0x1.28132fbb336f7bcb34b70b00867dc9d5p-10, + 0x1.00aaa8p0 + }, + { // Entry 181 + 0x1.2816a6db3131b6eda414e69eae447c9dp-10, + 0x1.00aaaap0 + }, + { // Entry 182 + 0x1.281a1dfb280a4dd9abcda3a702e5258dp-10, + 0x1.00aaacp0 + }, + { // Entry 183 + 0x1.3441342b9bc6d6cc0a0263f0bd2fd4c3p-1, + 0x1.fffffep1 + }, + { // Entry 184 + 0x1.34413509f79fef311f12b35816f922f0p-1, + 0x1.p2 + }, + { // Entry 185 + 0x1.344136c6af4f84e7c0f4645adf9d2657p-1, + 0x1.000002p2 + }, + { // Entry 186 + 0x1.3441334d3fedbe66f4f2148963668696p-2, + 0x1.fffffep0 + }, + { // Entry 187 + 0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.p1 + }, + { // Entry 188 + 0x1.3441388366ff1a9e62d6155da84129bep-2, + 0x1.000002p1 + }, + { // Entry 189 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 190 + 0.0, + 0x1.p0 + }, + { // Entry 191 + 0x1.bcb7af95b6a1e1b102c8a40366dc2f73p-25, + 0x1.000002p0 + }, + { // Entry 192 + -0x1.344136c6af521ffb49335226ca8bbf4ap-2, + 0x1.fffffep-2 + }, + { // Entry 193 + -0x1.34413509f79fef311f12b35816f922f0p-2, + 0x1.p-1 + }, + { // Entry 194 + -0x1.344131908840c3c3db4f515285b11c22p-2, + 0x1.000002p-1 + }, + { // Entry 195 + -0x1.344135e853790796342302bf70c2711dp-1, + 0x1.fffffep-3 + }, + { // Entry 196 + -0x1.34413509f79fef311f12b35816f922f0p-1, + 0x1.p-2 + }, + { // Entry 197 + -0x1.3441334d3ff0597a7d3102554e551f89p-1, + 0x1.000002p-2 + }, + { // Entry 198 + -0x1.ce61d06d4f48ff2ec3ac5c6b7c3f0295p-1, + 0x1.fffffep-4 + }, + { // Entry 199 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p-1, + 0x1.p-3 + }, + { // Entry 200 + -0x1.ce61cdd23bc051130cba5c0159d1b101p-1, + 0x1.000002p-3 + }, + { // Entry 201 + -0x1.34413579258c7b63a99adb0bc3ddca06p0, + 0x1.fffffep-5 + }, + { // Entry 202 + -0x1.34413509f79fef311f12b35816f922f0p0, + 0x1.p-4 + }, + { // Entry 203 + -0x1.3441342b9bc82455ce21dad6b2a7213cp0, + 0x1.000002p-4 + }, + { // Entry 204 + -0x1.815182bba374772ff15f87e1c99c12c2p0, + 0x1.fffffep-6 + }, + { // Entry 205 + -0x1.8151824c7587eafd66d7602e1cb76bacp0, + 0x1.p-5 + }, + { // Entry 206 + -0x1.8151816e19b0202215e687acb86569f8p0, + 0x1.000002p-5 + }, + { // Entry 207 + -0x1.ce61cffe215c72fc392434b7cf5a5b7ep0, + 0x1.fffffep-7 + }, + { // Entry 208 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p0, + 0x1.p-6 + }, + { // Entry 209 + -0x1.ce61ceb097981bee5dab3482be23b2b5p0, + 0x1.000002p-6 + }, + { // Entry 210 + -0x1.0db90ea04fa23764407470c6ea8c521dp1, + 0x1.fffffep-8 + }, + { // Entry 211 + -0x1.0db90e68b8abf14afb305ced1419fe92p1, + 0x1.p-7 + }, + { // Entry 212 + -0x1.0db90df98ac00bdd52b7f0ac61f0fdb8p1, + 0x1.000002p-7 + }, + { // Entry 213 + -0x1.344135418e96354a6456c731ed6b767bp1, + 0x1.fffffep-9 + }, + { // Entry 214 + -0x1.34413509f79fef311f12b35816f922f0p1, + 0x1.p-8 + }, + { // Entry 215 + -0x1.3441349ac9b409c3769a471764d02216p1, + 0x1.000002p-8 + }, + { // Entry 216 + -0x1.5ac95be2cd8a333088391d9cf04a9ad9p1, + 0x1.fffffep-10 + }, + { // Entry 217 + -0x1.5ac95bab3693ed1742f509c319d8474ep1, + 0x1.p-9 + }, + { // Entry 218 + -0x1.5ac95b3c08a807a99a7c9d8267af4674p1, + 0x1.000002p-9 + }, + { // Entry 219 + -0x1.815182840c7e3116ac1b7407f329bf37p1, + 0x1.fffffep-11 + }, + { // Entry 220 + -0x1.8151824c7587eafd66d7602e1cb76bacp1, + 0x1.p-10 + }, + { // Entry 221 + -0x1.815181dd479c058fbe5ef3ed6a8e6ad2p1, + 0x1.000002p-10 + }, + { // Entry 222 + -0x1.f4e9f667c95a2ac917c27748fbc72c51p1, + 0x1.fffffep-14 + }, + { // Entry 223 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.p-13 + }, + { // Entry 224 + -0x1.f4e9f5c10477ff422a05f72e732bd7ecp1, + 0x1.000002p-13 + }, + { // Entry 225 + -0x1.f4e9f667c95a2ac917c27748fbc72c51p1, + 0x1.fffffep-14 + }, + { // Entry 226 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.p-13 + }, + { // Entry 227 + -0x1.f4e9f5c10477ff422a05f72e732bd7ecp1, + 0x1.000002p-13 + }, + { // Entry 228 + -0x1.ce61d06d4f48ff2ec3ac5c6b7c3f0295p-1, + 0x1.fffffep-4 + }, + { // Entry 229 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p-1, + 0x1.p-3 + }, + { // Entry 230 + -0x1.ce61cdd23bc051130cba5c0159d1b101p-1, + 0x1.000002p-3 + }, + { // Entry 231 + -0x1.db11fd5867f8ff1cca049f4cb4fd8694p-5, + 0x1.bffffep-1 + }, + { // Entry 232 + -0x1.db11ed766abf432dc3c1bb4167a6eb47p-5, + 0x1.c0p-1 + }, + { // Entry 233 + -0x1.db11dd946d97ae16f51ada8f25bd4cc1p-5, + 0x1.c00002p-1 + }, + { // Entry 234 + -0x1.34413579258c7b63a99adb0bc3ddca06p0, + 0x1.fffffep-5 + }, + { // Entry 235 + -0x1.34413509f79fef311f12b35816f922f0p0, + 0x1.p-4 + }, + { // Entry 236 + -0x1.3441342b9bc82455ce21dad6b2a7213cp0, + 0x1.000002p-4 + }, + { // Entry 237 + -0x1.cb391a7364ac9eed883817f1ffc2150cp-6, + 0x1.dffffep-1 + }, + { // Entry 238 + -0x1.cb38fccd8bfdb696b29463658b991237p-6, + 0x1.e0p-1 + }, + { // Entry 239 + -0x1.cb38df27b36e6e15dbf9aa6e26e0527bp-6, + 0x1.e00002p-1 + }, + { // Entry 240 + -0x1.815182bba374772ff15f87e1c99c12c2p0, + 0x1.fffffep-6 + }, + { // Entry 241 + -0x1.8151824c7587eafd66d7602e1cb76bacp0, + 0x1.p-5 + }, + { // Entry 242 + -0x1.8151816e19b0202215e687acb86569f8p0, + 0x1.000002p-5 + }, + { // Entry 243 + -0x1.c3d0bcd98b3edf45205cfdbb6aed1917p-7, + 0x1.effffep-1 + }, + { // Entry 244 + -0x1.c3d0837784c409cbf85d4dd61d426e1bp-7, + 0x1.f0p-1 + }, + { // Entry 245 + -0x1.c3d04a157e84703859e1417a8c326212p-7, + 0x1.f00002p-1 + }, + { // Entry 246 + -0x1.ce61cffe215c72fc392434b7cf5a5b7ep0, + 0x1.fffffep-7 + }, + { // Entry 247 + -0x1.ce61cf8ef36fe6c9ae9c0d042275b468p0, + 0x1.p-6 + }, + { // Entry 248 + -0x1.ce61ceb097981bee5dab3482be23b2b5p0, + 0x1.000002p-6 + }, + { // Entry 249 + -0x1.c03af1a0115fb694dfc7e5305e350297p-8, + 0x1.f7fffep-1 + }, + { // Entry 250 + -0x1.c03a80ae5e05382d51f71b0f6602c76ap-8, + 0x1.f8p-1 + }, + { // Entry 251 + -0x1.c03a0fbcab1d766b7c26660812478675p-8, + 0x1.f80002p-1 + }, + { // Entry 252 + -0x1.0db90ea04fa23764407470c6ea8c521dp1, + 0x1.fffffep-8 + }, + { // Entry 253 + -0x1.0db90e68b8abf14afb305ced1419fe92p1, + 0x1.p-7 + }, + { // Entry 254 + -0x1.0db90df98ac00bdd52b7f0ac61f0fdb8p1, + 0x1.000002p-7 + }, + { // Entry 255 + -0x1.be779d93c637ed8142930d32c760672cp-9, + 0x1.fbfffep-1 + }, + { // Entry 256 + -0x1.be76bd77b4fc30d6cb5e729fc0bd5fa5p-9, + 0x1.fcp-1 + }, + { // Entry 257 + -0x1.be75dd5ba4a253fcbfcde28906782f81p-9, + 0x1.fc0002p-1 + }, + { // Entry 258 + -0x1.344135418e96354a6456c731ed6b767bp1, + 0x1.fffffep-9 + }, + { // Entry 259 + -0x1.34413509f79fef311f12b35816f922f0p1, + 0x1.p-8 + }, + { // Entry 260 + -0x1.3441349ac9b409c3769a471764d02216p1, + 0x1.000002p-8 + }, + { // Entry 261 + -0x1.bd98604e0225c5f5bcfcaf2d317a9cb8p-10, + 0x1.fdfffep-1 + }, + { // Entry 262 + -0x1.bd96a1d7d9cbc28d1ed88eb987048038p-10, + 0x1.fep-1 + }, + { // Entry 263 + -0x1.bd94e361b331f5825874683d16a4fa02p-10, + 0x1.fe0002p-1 + }, + { // Entry 264 + -0x1.5ac95be2cd8a333088391d9cf04a9ad9p1, + 0x1.fffffep-10 + }, + { // Entry 265 + -0x1.5ac95bab3693ed1742f509c319d8474ep1, + 0x1.p-9 + }, + { // Entry 266 + -0x1.5ac95b3c08a807a99a7c9d8267af4674p1, + 0x1.000002p-9 + }, + { // Entry 267 + -0x1.bd2a7f88f7e22e1fbeda7c34e78c5fbfp-11, + 0x1.fefffep-1 + }, + { // Entry 268 + -0x1.bd27045bfd024b0eb5a690199f7d311fp-11, + 0x1.ffp-1 + }, + { // Entry 269 + -0x1.bd23892f059f536c854c6b13c5a3b7bfp-11, + 0x1.ff0002p-1 + }, + { // Entry 270 + -0x1.815182840c7e3116ac1b7407f329bf37p1, + 0x1.fffffep-11 + }, + { // Entry 271 + -0x1.8151824c7587eafd66d7602e1cb76bacp1, + 0x1.p-10 + }, + { // Entry 272 + -0x1.815181dd479c058fbe5ef3ed6a8e6ad2p1, + 0x1.000002p-10 + }, + { // Entry 273 + -0x1.bcf6462a1921118a3b66f92fb7c60797p-12, + 0x1.ff7ffep-1 + }, + { // Entry 274 + -0x1.bcef518e29611a506bc6531e97655414p-12, + 0x1.ff80p-1 + }, + { // Entry 275 + -0x1.bce85cf240977c99419983a95dfa8d28p-12, + 0x1.ff8002p-1 + }, + { // Entry 276 + -0x1.f4e9f667c95a2ac917c27748fbc72c51p1, + 0x1.fffffep-14 + }, + { // Entry 277 + -0x1.f4e9f6303263e4afd27e636f2554d8c6p1, + 0x1.p-13 + }, + { // Entry 278 + -0x1.f4e9f5c10477ff422a05f72e732bd7ecp1, + 0x1.000002p-13 + }, + { // Entry 279 + -0x1.bcf63d094f7a45ef4f9d2bcde45ded2fp-15, + 0x1.ffeffep-1 + }, + { // Entry 280 + -0x1.bcbea45643c7c4b46503e30e59b7dd28p-15, + 0x1.fff0p-1 + }, + { // Entry 281 + -0x1.bc870ba36fafb33cddcf17f055436437p-15, + 0x1.fff002p-1 + }, + { // Entry 282 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 283 + 0x1.344135067e308acf8abe721a7991fdb7p5, + 0x1.fffffep127 + }, + { // Entry 284 + 0x1.3441350304c122f48700992168f1c477p5, + 0x1.fffffcp127 + }, + { // Entry 285 + 0x1.fd14dc015a2443dc8d1c9a7a4ead7c44p-2, + 0x1.921fb6p1 + }, + { // Entry 286 + 0x1.91a74deec508a956dc13ce446f68b2a7p-3, + 0x1.921fb6p0 + }, + { // Entry 287 + 0x1.bcb7af95b6a1e1b102c8a40366dc2f73p-25, + 0x1.000002p0 + }, + { // Entry 288 + 0.0, + 0x1.p0 + }, + { // Entry 289 + -0x1.bcb7b230ca2a209eceb3929c5a02ff59p-26, + 0x1.fffffep-1 + }, + { // Entry 290 + -0x1.adb6384a546e6a16c42330d77d132671p-4, + 0x1.921fb6p-1 + }, + { // Entry 291 + -0x1.2f70302edce2b11d800ee1c6ab7aae56p5, + 0x1.000002p-126 + }, + { // Entry 292 + -0x1.2f703035cfc16f745a96688ab69d3e64p5, + 0x1.p-126 + }, + { // Entry 293 + -0x1.2f70303cc2a03bb0f2a882c164a49cddp5, + 0x1.fffffcp-127 + }, + { // Entry 294 + -0x1.2f703043b57f15d3487cc76186a378f6p5, + 0x1.fffff8p-127 + }, + { // Entry 295 + -0x1.646b65538650ec90cbed9f5dda901065p5, + 0x1.p-148 + }, + { // Entry 296 + -0x1.66d3e7bd9a402c6f2e2bc4c48abe02abp5, + 0x1.p-149 + }, + { // Entry 297 + -HUGE_VALF, + 0.0f + }, + { // Entry 298 + -HUGE_VALF, + -0.0f + }, + { // Entry 299 + 0x1.p0, + 0x1.40p3 + }, + { // Entry 300 + 0x1.p1, + 0x1.90p6 + }, + { // Entry 301 + 0x1.80p1, + 0x1.f4p9 + } +}; diff --git a/tests/math_data/log1p_intel_data.h b/tests/math_data/log1p_intel_data.h new file mode 100644 index 000000000..12118ea3d --- /dev/null +++ b/tests/math_data/log1p_intel_data.h @@ -0,0 +1,1486 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log1p_intel_data[] = { + { // Entry 0 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 1 + -0x1.0415d89e74446809b5d7e16e90dcfb17p-5, + -0x1.0000000000002p-5 + }, + { // Entry 2 + -0x1.269621334db92803beb76a16b5547d4dp-2, + -0x1.000000180p-2 + }, + { // Entry 3 + -0x1.00080000000008008002000000555d55p-52, + -0x1.00080p-52 + }, + { // Entry 4 + -0x1.001000000040080040001559559556b2p-41, + -0x1.001p-41 + }, + { // Entry 5 + -0x1.65724c2110f35416c9322de1fbce6ea0p-2, + -0x1.2dba262a7c8b0p-2 + }, + { // Entry 6 + -0x1.5af4179028eb7638f1145bd433d6c831p-11, + -0x1.5ad6b5ad6b5b0p-11 + }, + { // Entry 7 + -0x1.74fc36f06cd5b7ffd79b0ff90a64bb6ep-6, + -0x1.70c58e67b7aeap-6 + }, + { // Entry 8 + -0x1.d62e0cd7372ac11cfb2f285d279dc3d4p-2, + -0x1.7905b82a1839dp-2 + }, + { // Entry 9 + -0x1.7d9c1debf082f7fe3df487d0e4823676p-6, + -0x1.793331eece596p-6 + }, + { // Entry 10 + -0x1.e148a1a2726cbfb45f343d2e78b71a51p-2, + -0x1.7ffffffffffffp-2 + }, + { // Entry 11 + -0x1.9baf61134c048801e3731883b65290b3p-5, + -0x1.9182fde7e3318p-5 + }, + { // Entry 12 + -0x1.ff93ccbd3124237a5b3cf16c47c915c9p-2, + -0x1.92a7fc86dcbd9p-2 + }, + { // Entry 13 + -0x1.8feb5ba3c5b0d7fddffe1b9133bd3827p0, + -0x1.94a5294a5294cp-1 + }, + { // Entry 14 + -0x1.e265a1d9483178002922dd984d33f198p-4, + -0x1.c712d0d7f0490p-4 + }, + { // Entry 15 + -0x1.cd4e4c03a55707e868994265170eefb8p-10, + -0x1.cce673399cce8p-10 + }, + { // Entry 16 + -0x1.e5df7f9b307ac000115f8473c90fb515p-9, + -0x1.e4f93e4f93e50p-9 + }, + { // Entry 17 + -0x1.f96ef48ecd4037fe220ffae33fef5d04p-5, + -0x1.ea28302403580p-5 + }, + { // Entry 18 + -0x1.fdd09f73d7f688dd5508c770fe7b7a9fp-5, + -0x1.ee4675d0ac9aap-5 + }, + { // Entry 19 + -0x1.ffffffffffe4b72dd5ac98791a728e1fp-5, + -0x1.f0540438fd429p-5 + }, + { // Entry 20 + -0x1.ff7fac9bb11607daf86980492f147eedp-10, + -0x1.ff0001ffffffep-10 + }, + { // Entry 21 + -0x1.ffe7fffffffff7ff40047fffffaaaaaap-54, + -0x1.ffe7fffffffffp-54 + }, + { // Entry 22 + -0x1.4cb9ed50b6bc79d44d301801ce0ff6f3p4, + -0x1.fffffff801fffp-1 + }, + { // Entry 23 + -0x1.57cd0e3026827bbcd5d3d6a532515bd1p4, + -0x1.fffffffbfffffp-1 + }, + { // Entry 24 + -0x1.002005545508732d7b57a1ec86bd5c7ap-10, + -0x1.fffffffc0p-11 + }, + { // Entry 25 + -0x1.08598b57c1806001dbb99c0aebf44bdep-4, + -0x1.fffffffc0003fp-5 + }, + { // Entry 26 + -0x1.08598b58e3a06001bf513750331fb25cp-4, + -0x1.fffffffe1ffffp-5 + }, + { // Entry 27 + -0x1.ffffffff000007fffffff800002aacaap-54, + -0x1.ffffffff0p-54 + }, + { // Entry 28 + -0x1.00000000001ff7fffffff54d55555547p-40, + -0x1.ffffffffff3ffp-41 + }, + { // Entry 29 + -0x1.ffffffffffffeffffffffffffeaaaaaap-53, + -0x1.ffffffffffffep-53 + }, + { // Entry 30 + 0x1.ffffffffff0000000000aaaaaaaaaa2ap-41, + 0x1.0p-40 + }, + { // Entry 31 + 0x1.ffffffffffffffffffffffffffffffp-121, + 0x1.0p-120 + }, + { // Entry 32 + 0.0, + 0x1.0p-1074 + }, + { // Entry 33 + 0x1.fffffffffffffffffffffffffeaaaaaap-52, + 0x1.0000000000001p-51 + }, + { // Entry 34 + 0x1.00000000000007ffffffffffff555555p-52, + 0x1.0000000000001p-52 + }, + { // Entry 35 + 0x1.9f323ecbf9855480be2cbc494f93df36p-2, + 0x1.0000000000007p-1 + }, + { // Entry 36 + 0x1.ffffffffffc0000000000aaaaaaaaaa8p-42, + 0x1.00000000002p-41 + }, + { // Entry 37 + 0x1.ffffffffffdffffffffffaaaaaaaaaaep-42, + 0x1.00000000003p-41 + }, + { // Entry 38 + 0x1.ffe002ae6a31006877edb3328bd3ae91p-12, + 0x1.00000001fffffp-11 + }, + { // Entry 39 + 0x1.9f323f094c68a8000013901093412da6p-2, + 0x1.0000002dfe2afp-1 + }, + { // Entry 40 + 0x1.9f323f094c692800000be5b40e615d2dp-2, + 0x1.0000002dfe2b5p-1 + }, + { // Entry 41 + 0x1.193ea82ad0308976a42437ffabe62762p0, + 0x1.000000cp1 + }, + { // Entry 42 + 0x1.f0b21b0c9a27f7973092bef2b8a18d80p-5, + 0x1.00080p-4 + }, + { // Entry 43 + 0x1.1ace1631f668001f17e5430537a94f9fp5, + 0x1.00080p51 + }, + { // Entry 44 + 0x1.000fffffffbff7ffc0001559559556a2p-41, + 0x1.001p-41 + }, + { // Entry 45 + 0x1.f31cdeeb3cd4c7c0a3e945ad856befcbp4, + 0x1.00cp45 + }, + { // Entry 46 + 0x1.206360b7e569587b36009d7c942d4f3cp5, + 0x1.014p52 + }, + { // Entry 47 + 0x1.f333a5f5edb1b76e16684e60b7181719p-5, + 0x1.015cdfc51f91cp-4 + }, + { // Entry 48 + 0x1.64892563f80250000b60adaac677e2eap-1, + 0x1.01a5a2b15fc5cp0 + }, + { // Entry 49 + 0x1.0482afcf527d98002bc41c40cd3b44c5p-23, + 0x1.0482b0d86c362p-23 + }, + { // Entry 50 + 0x1.045dcf2cb15f57fe3f2ed152226368c8p-5, + 0x1.088c59ac8c7d1p-5 + }, + { // Entry 51 + 0x1.015e05876e3e67fff047c696eba44ba2p-4, + 0x1.09ap-4 + }, + { // Entry 52 + 0x1.0b6515d81d9732694cd7ec512fc6f1b4p-11, + 0x1.0b768b5ad8019p-11 + }, + { // Entry 53 + 0x1.b346a1d28f44d7fdcee7a0bd07405845p-2, + 0x1.0f35566ed3cc2p-1 + }, + { // Entry 54 + 0x1.b3cce9b7221757feb43dcf531070c894p0, + 0x1.1f27c14e425b9p2 + }, + { // Entry 55 + 0x1.fbc379bd13a6b00091e8da2307a3712fp-3, + 0x1.202p-2 + }, + { // Entry 56 + 0x1.2140a33ee4f537fe4de38bae4056e098p-5, + 0x1.266b753946441p-5 + }, + { // Entry 57 + 0x1.d6bfbea5ab7fd4c43b30348da32e2a7dp-2, + 0x1.2ad0c02f60402p-1 + }, + { // Entry 58 + 0x1.c09da5a8b37876f669efaffd93412f9ap0, + 0x1.312e7b7be62a5p2 + }, + { // Entry 59 + 0x1.e3a91d4d7516cb9db08fd3c3cf7d40cap-2, + 0x1.351a8d46a35p-1 + }, + { // Entry 60 + 0x1.f128f5faf06ecb35c83b1131cf5d73d5p-2, + 0x1.4p-1 + }, + { // Entry 61 + 0x1.f1ee31f14d4f17ffde2f2fe766dfc318p-2, + 0x1.40a0502814080p-1 + }, + { // Entry 62 + 0x1.41e3e450b6073001c502b22fec3ab4d7p-5, + 0x1.484c43acc194cp-5 + }, + { // Entry 63 + 0x1.4d9ff934d99f37ff40fd39eb618dcd3ap-21, + 0x1.4dap-21 + }, + { // Entry 64 + 0x1.a0711f9b475687ffffd2981b5b49910ep2, + 0x1.4e5fffff0p9 + }, + { // Entry 65 + 0x1.e1905175711a17c09fd40254fad72ae8p4, + 0x1.56f3052920ef0p43 + }, + { // Entry 66 + 0x1.4f7ef3b13e1fa800361c4277dfa1092ap-4, + 0x1.5d9e6884d6ac2p-4 + }, + { // Entry 67 + 0x1.e45c01e8c233cffe5ac108bc6c123bfap0, + 0x1.688p2 + }, + { // Entry 68 + 0x1.c34366179d4258048e0ec51c6fefd58cp-1, + 0x1.6a09e667f3bcbp0 + }, + { // Entry 69 + 0x1.e2af1644433ac7c03096da53cf28c18ap4, + 0x1.6fd1ffb140878p43 + }, + { // Entry 70 + 0x1.6392a510033287ffc3d40d8ce33d1627p-4, + 0x1.73767fd8537b3p-4 + }, + { // Entry 71 + 0x1.d36a35aaae768800f77be0b2a29e40b7p-1, + 0x1.7dd89e50e078ep0 + }, + { // Entry 72 + 0x1.83ffed9f8129180039f0eacf23501c34p-20, + 0x1.840p-20 + }, + { // Entry 73 + 0x1.8996381ef2cb67ff2c1a031d8e88fa81p-8, + 0x1.8ac562b158ac4p-8 + }, + { // Entry 74 + 0x1.926499264fd877fe77bab85881dbab74p-43, + 0x1.926499265p-43 + }, + { // Entry 75 + 0x1.e737cb23865c6b921552ad81d572b729p-1, + 0x1.970p0 + }, + { // Entry 76 + 0x1.588c2de5e88db000000ea4e59847d15cp-2, + 0x1.99999a1030f9dp-2 + }, + { // Entry 77 + 0x1.588c2df2c02057ffffefc30ff25d79ddp-2, + 0x1.99999a222b93fp-2 + }, + { // Entry 78 + 0x1.756501be3e242800001019cd7cd7ce3fp-3, + 0x1.99999a598c15cp-3 + }, + { // Entry 79 + 0x1.756502257dbf5000000bc0ddc72156fap-3, + 0x1.99999ad572033p-3 + }, + { // Entry 80 + 0x1.8663f9903e12effffff039fafc6b5f67p-4, + 0x1.99999bc8ec375p-4 + }, + { // Entry 81 + 0x1.9bd8abb150fbd005aa9e2ed5a074a08ep-21, + 0x1.9bd8b60b96e2fp-21 + }, + { // Entry 82 + 0x1.9955bad1e36537ffd7fd8448d392de25p-7, + 0x1.9be6f9be6f9b1p-7 + }, + { // Entry 83 + 0x1.5ba06e3fb01a2d107ec5201223f00bbbp-2, + 0x1.9dead086a58cdp-2 + }, + { // Entry 84 + 0x1.5f1a557f41f26cc673db4f91686a3758p-2, + 0x1.a2ce8df554b2cp-2 + }, + { // Entry 85 + 0x1.62405ebd6ab333837c8a77026ab4aae8p-2, + 0x1.a74p-2 + }, + { // Entry 86 + 0x1.f5f73d69114c2b85b3b151d45a33d0e5p-1, + 0x1.aa6p0 + }, + { // Entry 87 + 0x1.b229fbeca7781fffe6f5fdb97b7242c6p-5, + 0x1.bdep-5 + }, + { // Entry 88 + 0x1.bc21a8cfe0c4178b34990a731d3fbd15p-5, + 0x1.c86432190c8p-5 + }, + { // Entry 89 + 0x1.07952367af5c880000105e2b54a5a062p0, + 0x1.cccccced2ed7ep0 + }, + { // Entry 90 + 0x1.c1de8bc3181ba001c1b60c40eff90650p-5, + 0x1.ce7375b5023c4p-5 + }, + { // Entry 91 + 0x1.d59efda67795a800fddf8c5bba4a60b3p-43, + 0x1.d59efda677cb8p-43 + }, + { // Entry 92 + 0x1.d80158c4069057ff768740aa80c0bd66p-7, + 0x1.db6bcf502f3e0p-7 + }, + { // Entry 93 + 0x1.dfeabe29b510312e8367f414b0511949p-11, + 0x1.e022fd930f86ap-11 + }, + { // Entry 94 + 0x1.8a9a59caf11980a5915d2b6b7cf2553dp-2, + 0x1.e16b24d38d1b2p-2 + }, + { // Entry 95 + 0x1.8f11e873662c77e1769d569868a65e72p-2, + 0x1.e80p-2 + }, + { // Entry 96 + 0x1.dd166106e87f37622aac2c908d6aaf91p-5, + 0x1.eb40e151fad81p-5 + }, + { // Entry 97 + 0x1.ec80ffffffc4b7fe6ff009824ddc235ap-43, + 0x1.ec80fffffffffp-43 + }, + { // Entry 98 + 0x1.edf52c2e34740b24b736dca45fb4ae9ep-13, + 0x1.ee0410e3b1d24p-13 + }, + { // Entry 99 + 0x1.f02717d855569ffe85bb9f224358afeap-6, + 0x1.f7bdd6789c670p-6 + }, + { // Entry 100 + 0x1.fbfffffffe07e80000029aea55555174p-40, + 0x1.fbfffffffffffp-40 + }, + { // Entry 101 + 0x1.fbfffffffe07f80000029aca95555174p-40, + 0x1.fc0p-40 + }, + { // Entry 102 + 0x1.367799dc39a238068eae0d5339eafee2p5, + 0x1.fc00000000006p55 + }, + { // Entry 103 + 0x1.ffc7ffffff0027fcf000aa82af0a71p-41, + 0x1.ffc7fffffffffp-41 + }, + { // Entry 104 + 0x1.ffdfffffffffe800fff8000000aa9aabp-54, + 0x1.ffdffffffffffp-54 + }, + { // Entry 105 + 0x1.fff7fffffefff7fff000aab2aa8aa9ffp-41, + 0x1.fff7fffffffffp-41 + }, + { // Entry 106 + 0x1.fff7ffffffffe8003fff800000aaa6aap-54, + 0x1.fff7fffffffffp-54 + }, + { // Entry 107 + 0x1.c55179395a000800ddc334790469d4dep7, + 0x1.fffffe3ffffffp326 + }, + { // Entry 108 + 0x1.ffc00aa4ac10abd44706d89cf12892a3p-11, + 0x1.fffffffbfffffp-11 + }, + { // Entry 109 + 0x1.ffc00aa7ab50ebc44bf56111ce332375p-11, + 0x1.ffffffff0p-11 + }, + { // Entry 110 + 0x1.25e4f7b2737f9fc486612173c6596892p5, + 0x1.ffffffffffff8p52 + }, + { // Entry 111 + 0x1.62e42fefa39ef33793c7673007e1ed5ep9, + 0x1.ffffffffffff8p1023 + }, + { // Entry 112 + 0x1.9f323ecbf98489d61382119eae69348bp-2, + 0x1.ffffffffffffbp-2 + }, + { // Entry 113 + 0x1.5ca72d17ed3ea80089ae65dfafc1e2b2p8, + 0x1.ffffffffffffep502 + }, + { // Entry 114 + 0x1.11d14e1fcb72edcb28a032e083a6f199p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 115 + 0x1.2ccac6c8f41b74d6b733c9141c0bece5p-1, + 0x1.995255f2d00abp-1 + }, + { // Entry 116 + 0x1.466a9269707376e50187259ee2b04818p-1, + 0x1.c89ac57dac58ap-1 + }, + { // Entry 117 + 0x1.5ed1a7dce11ace55a3cdbe341ee88222p-1, + 0x1.f7e3350888a69p-1 + }, + { // Entry 118 + 0x1.761c7d9dddc01d509dcb9b4ebceca84ep-1, + 0x1.1395d249b27a4p0 + }, + { // Entry 119 + 0x1.8c63d27d4ca03daba8c98a232b2380f0p-1, + 0x1.2b3a0a0f20a14p0 + }, + { // Entry 120 + 0x1.a1bd4c77d55363ab3b61dc89f7812c71p-1, + 0x1.42de41d48ec84p0 + }, + { // Entry 121 + 0x1.b63bf7baf5eaa6eadec65ed0408ff964p-1, + 0x1.5a827999fcef4p0 + }, + { // Entry 122 + 0x1.c9f0ad341cbebd1d84ae0c2674a34983p-1, + 0x1.7226b15f6b164p0 + }, + { // Entry 123 + 0x1.dcea661b59e7f2a61f64bc6d943ab5aep-1, + 0x1.89cae924d93d4p0 + }, + { // Entry 124 + 0x1.ef36808e501ff5bc97de3be617ad08b5p-1, + 0x1.a16f20ea47644p0 + }, + { // Entry 125 + 0x1.00707c29c4643ea6f53f2c0edcf3f90ep0, + 0x1.b91358afb58b4p0 + }, + { // Entry 126 + 0x1.08fa4b129d365103d8615b0fee830753p0, + 0x1.d0b7907523b24p0 + }, + { // Entry 127 + 0x1.113d8baca8608c19974ff89c21cc8d16p0, + 0x1.e85bc83a91d94p0 + }, + { // Entry 128 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.0p1 + }, + { // Entry 129 + 0x1.11d14e1fcb72edcb28a032e083a6f199p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 130 + 0x1.26990e07e25825de21cb52e655390d9ap-1, + 0x1.8e3e170bf282dp-1 + }, + { // Entry 131 + 0x1.3a914a1db8cc3855d200ca3202e23d04p-1, + 0x1.b27247aff148ep-1 + }, + { // Entry 132 + 0x1.4dc997cbf2ed6806315c6962614b41f2p-1, + 0x1.d6a67853f00efp-1 + }, + { // Entry 133 + 0x1.604fdb515451526fcf632e2255d97ef2p-1, + 0x1.fadaa8f7eed50p-1 + }, + { // Entry 134 + 0x1.72308447c51665ec8f42f6c1c2f51294p-1, + 0x1.0f876ccdf6cd9p0 + }, + { // Entry 135 + 0x1.8376bff406f913a3579a23f2e932df57p-1, + 0x1.21a1851ff630ap0 + }, + { // Entry 136 + 0x1.942ca35e8f18f3591aded43add2260dbp-1, + 0x1.33bb9d71f593bp0 + }, + { // Entry 137 + 0x1.a45b4ec4852597b4ab8fdd6275a5c1f7p-1, + 0x1.45d5b5c3f4f6cp0 + }, + { // Entry 138 + 0x1.b40b0b9a489f168f5ffc2c60ac5bd06ap-1, + 0x1.57efce15f459dp0 + }, + { // Entry 139 + 0x1.c34366179d426545cadbc394096e719bp-1, + 0x1.6a09e667f3bccp0 + }, + { // Entry 140 + 0x1.1e85f5e7040d03dec59a5f3e3c6be5cfp-1, + 0x1.8p-1 + }, + { // Entry 141 + 0x1.34024ac47b6fcebf994c642ef7a882adp-1, + 0x1.a666666666666p-1 + }, + { // Entry 142 + 0x1.48a11293d785b50c2a3feb14c3680501p-1, + 0x1.cccccccccccccp-1 + }, + { // Entry 143 + 0x1.5c73760b3c362e51806f6a2fcb5402b3p-1, + 0x1.f333333333332p-1 + }, + { // Entry 144 + 0x1.6f88b286b22f0a5f70b8ce35df42c80ap-1, + 0x1.0ccccccccccccp0 + }, + { // Entry 145 + 0x1.81ee60afb5018aaa0181c98fe3d11e57p-1, + 0x1.1ffffffffffffp0 + }, + { // Entry 146 + 0x1.93b0aee21c2c6f1afb29632c77f0434bp-1, + 0x1.3333333333332p0 + }, + { // Entry 147 + 0x1.a4da91c611dbcf17d743bad01121e91dp-1, + 0x1.4666666666665p0 + }, + { // Entry 148 + 0x1.b575ed0743492c8aacff60d5920dffc4p-1, + 0x1.5999999999998p0 + }, + { // Entry 149 + 0x1.c58bb5a60978a15095fe55861acca737p-1, + 0x1.6cccccccccccbp0 + }, + { // Entry 150 + 0x1.d5240f0e0e07606e918e49626c8f05e6p-1, + 0x1.7fffffffffffep0 + }, + { // Entry 151 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.0p0 + }, + { // Entry 152 + 0x1.7bdf362e9666e2dc442baf4dc625807dp-1, + 0x1.199999999999ap0 + }, + { // Entry 153 + 0x1.93b0aee21c2c8c3240fad7898f606525p-1, + 0x1.3333333333334p0 + }, + { // Entry 154 + 0x1.aa73108717b6b240250c5393b356e40ap-1, + 0x1.4cccccccccccep0 + }, + { // Entry 155 + 0x1.c03d703735f8e1920627f4336073fe78p-1, + 0x1.6666666666668p0 + }, + { // Entry 156 + 0x1.d5240f0e0e0793a1c4c17c959fc23919p-1, + 0x1.8000000000002p0 + }, + { // Entry 157 + 0x1.e938cbceb16defcbb921fdd58d5dd567p-1, + 0x1.999999999999cp0 + }, + { // Entry 158 + 0x1.fc8b7f138bdeb93fee2e78b4fe3e0831p-1, + 0x1.b333333333336p0 + }, + { // Entry 159 + 0x1.0795235c1ea1ca8c0592ee75b4579a8ep0, + 0x1.cccccccccccd0p0 + }, + { // Entry 160 + 0x1.1090e20315213b2ddb45c328435c3ca7p0, + 0x1.e66666666666ap0 + }, + { // Entry 161 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.0p1 + }, + { // Entry 162 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.0p-1 + }, + { // Entry 163 + -0x1.3217b0fd2b116908897cb1050beea205p-1, + -0x1.ccccccccccccdp-2 + }, + { // Entry 164 + -0x1.058aefa811451fc7cc1184d75997dc44p-1, + -0x1.999999999999ap-2 + }, + { // Entry 165 + -0x1.b91f28212ba0379f7a6379b28d1ba9b7p-2, + -0x1.6666666666667p-2 + }, + { // Entry 166 + -0x1.6d3c324e13f4fe9befad50a0273411c8p-2, + -0x1.3333333333334p-2 + }, + { // Entry 167 + -0x1.269621134db93cd9140cbcc16037fb86p-2, + -0x1.0000000000001p-2 + }, + { // Entry 168 + -0x1.c8ff7c79a9a24ac25d81ef2ffc2a24aep-3, + -0x1.999999999999cp-3 + }, + { // Entry 169 + -0x1.4cd6b9796417b5f11f10de290430b32bp-3, + -0x1.3333333333336p-3 + }, + { // Entry 170 + -0x1.af8e8210a41636e61283e0400e72f380p-4, + -0x1.999999999999fp-4 + }, + { // Entry 171 + -0x1.a431d5bcc1942814e94f55ea2e15d5f4p-5, + -0x1.99999999999a4p-5 + }, + { // Entry 172 + -0x1.400000000000032000000000000a6aaap-54, + -0x1.4p-54 + }, + { // Entry 173 + 0.0, + 0.0 + }, + { // Entry 174 + 0x1.8fb063ef2c7e9cdd4f691425091f8212p-5, + 0x1.999999999999ap-5 + }, + { // Entry 175 + 0x1.8663f793c46c6f8f982725b4f7100a62p-4, + 0x1.999999999999ap-4 + }, + { // Entry 176 + 0x1.1e3b825dd05ec3fb503515bb34638d41p-3, + 0x1.3333333333334p-3 + }, + { // Entry 177 + 0x1.7565011e496768e9c982340d63fd99bep-3, + 0x1.999999999999ap-3 + }, + { // Entry 178 + 0x1.c8ff7c79a9a21ac25d81ef2ffb9a24aep-3, + 0x1.0p-2 + }, + { // Entry 179 + 0x1.0ca937be1b9dbb5e7217a3726f197837p-2, + 0x1.3333333333333p-2 + }, + { // Entry 180 + 0x1.334e9e47d07f44b44307069827b79584p-2, + 0x1.6666666666666p-2 + }, + { // Entry 181 + 0x1.588c2d913348f380eebceb76c4296aeap-2, + 0x1.9999999999999p-2 + }, + { // Entry 182 + 0x1.7c7b282d0d46adc1a6a2b9d712581488p-2, + 0x1.cccccccccccccp-2 + }, + { // Entry 183 + 0x1.9f323ecbf984b480be2cbc495a69348bp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 184 + -0x1.7f7427b73e38f503b99f86230b9f8fa9p1, + -0x1.e666666666666p-1 + }, + { // Entry 185 + -0x1.26bb1bbb5551382dd4adac5709a61451p1, + -0x1.cccccccccccccp-1 + }, + { // Entry 186 + -0x1.e5a9a7c3ac414090cf257ef11203a29dp0, + -0x1.b333333333332p-1 + }, + { // Entry 187 + -0x1.9c041f7ed8d2f6afdf77a5160f5931f4p0, + -0x1.9999999999998p-1 + }, + { // Entry 188 + -0x1.62e42fefa39eb35793c767300fe5ed5ep0, + -0x1.7fffffffffffep-1 + }, + { // Entry 189 + -0x1.34378fcbda71c6e50541cb590e10abedp0, + -0x1.6666666666664p-1 + }, + { // Entry 190 + -0x1.0cc1248b56cc74c07caa7576f1233f0cp0, + -0x1.4cccccccccccap-1 + }, + { // Entry 191 + -0x1.d5240f0e0e06fa082b27e2fc16cc768ap-1, + -0x1.3333333333330p-1 + }, + { // Entry 192 + -0x1.98d60031b8212e345617e33819904bcep-1, + -0x1.1999999999996p-1 + }, + { // Entry 193 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.0p-1 + }, + { // Entry 194 + 0x1.1542457337d42e1c6b73c89d866ba171p6, + 0x1.0p100 + }, + { // Entry 195 + 0x1.15a3de711cc5494e20ce2f7e3974c4edp6, + 0x1.199999999999ap100 + }, + { // Entry 196 + 0x1.15fcf7f3c6f8e1f8e05889b78d1212e9p6, + 0x1.3333333333334p100 + }, + { // Entry 197 + 0x1.164eeeaaf5efcc1553be7dcad167cc55p6, + 0x1.4cccccccccccep100 + }, + { // Entry 198 + 0x1.169ad1a0c907775fec628588fd1aeadcp6, + 0x1.6666666666668p100 + }, + { // Entry 199 + 0x1.16e177b203cdb330ec31f559cfad3551p6, + 0x1.8000000000002p100 + }, + { // Entry 200 + 0x1.17238e14da469b55b96c96744e61203ap6, + 0x1.999999999999cp100 + }, + { // Entry 201 + 0x1.1761a2765a6960abe5cf92c0959da837p6, + 0x1.b333333333336p100 + }, + { // Entry 202 + 0x1.179c2a3292f266ff2833283af2c71bb8p6, + 0x1.cccccccccccd0p100 + }, + { // Entry 203 + 0x1.17d387985f833a0d4069f79c1b97242fp6, + 0x1.e66666666666ap100 + }, + { // Entry 204 + 0x1.18080dd3171b6c031a9b576be65b6d4cp6, + 0x1.0p101 + }, + { // Entry 205 + 0x1.1542457337d42e1c6b73c89d862ba171p7, + 0x1.0p200 + }, + { // Entry 206 + 0x1.157311f22a4cbbb54620fc0ddfb31be9p7, + 0x1.199999999999ap200 + }, + { // Entry 207 + 0x1.159f9eb37f66880aa5e6292a89842f82p7, + 0x1.3333333333334p200 + }, + { // Entry 208 + 0x1.15c89a0f16e1fd18df9923342bb11959p7, + 0x1.4cccccccccccep200 + }, + { // Entry 209 + 0x1.15ee8b8a006dd2be2beb2713418c6ab9p7, + 0x1.6666666666668p200 + }, + { // Entry 210 + 0x1.1611de929dd0f0a6abd2defbaad7160cp7, + 0x1.8000000000002p200 + }, + { // Entry 211 + 0x1.1632e9c4090d64b912702f88ea3260d6p7, + 0x1.999999999999cp200 + }, + { // Entry 212 + 0x1.1651f3f4c91ec76428a1adaf0dd1d201p7, + 0x1.b333333333336p200 + }, + { // Entry 213 + 0x1.166f37d2e5634a8dc9d3786c3c679778p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 214 + 0x1.168ae685cbabb414d5eee01cd0d08b3cp7, + 0x1.e66666666666ap200 + }, + { // Entry 215 + 0x1.16a529a32777cd0fc3079004b633875fp7, + 0x1.0p201 + }, + { // Entry 216 + 0x1.5a92d6d005c939a38650bac4e7b689cep9, + 0x1.0p1000 + }, + { // Entry 217 + 0x1.5a9f09efc2675d09bcfc07a0fe18686cp9, + 0x1.199999999999ap1000 + }, + { // Entry 218 + 0x1.5aaa2d2017add01f14ed52e8288cad52p9, + 0x1.3333333333334p1000 + }, + { // Entry 219 + 0x1.5ab46bf6fd8cad62a35a116a9117e7c8p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 220 + 0x1.5abde855b7efa2cbf66e9262568ebc20p9, + 0x1.6666666666668p1000 + }, + { // Entry 221 + 0x1.5ac6bd17df486a461668805c70e166f4p9, + 0x1.8000000000002p1000 + }, + { // Entry 222 + 0x1.5aceffe43a17874ab00fd47fc0b839a7p9, + 0x1.999999999999cp1000 + }, + { // Entry 223 + 0x1.5ad6c2706a1bdff5759c340949a015f2p9, + 0x1.b333333333336p1000 + }, + { // Entry 224 + 0x1.5ade1367f12d00bfdde8a6b895458750p9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 225 + 0x1.5ae4ff14aabf1b21a0ef80a4ba5fc441p9, + 0x1.e66666666666ap1000 + }, + { // Entry 226 + 0x1.5aeb8fdc01b221605c35ac9eb3b88349p9, + 0x1.0p1001 + }, + { // Entry 227 + 0x1.62e42fefa39ef35393c7673007e5dd5ep9, + 0x1.fffffffffffffp1023 + }, + { // Entry 228 + 0.0, + 0x1.0p-1074 + }, + { // Entry 229 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 230 + 0x1.11d14e1fcb72e46bc706b21c5008b9f1p-1, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 231 + 0x1.11d14e1fcb72edcb28a032e083a6f199p-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 232 + 0x1.11d14e1fcb72f72a8a39b3a4b7193d0ep-1, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 233 + -0x1.3a5abf07b788ff1b06e03c7b74301bb8p0, + -0x1.6a09e667f3bcdp-1 + }, + { // Entry 234 + -0x1.3a5abf07b788e3cab7acfcdd8e180c5dp0, + -0x1.6a09e667f3bccp-1 + }, + { // Entry 235 + -0x1.3a5abf07b788c87a6879bd3faaea06e8p0, + -0x1.6a09e667f3bcbp-1 + }, + { // Entry 236 + 0x1.c34366179d4258048e0ec51c6fefd58cp-1, + 0x1.6a09e667f3bcbp0 + }, + { // Entry 237 + 0x1.c34366179d426545cadbc394096e719bp-1, + 0x1.6a09e667f3bccp0 + }, + { // Entry 238 + 0x1.c34366179d42728707a8c20ba2953544p-1, + 0x1.6a09e667f3bcdp0 + }, + { // Entry 239 + 0x1.9f323ecbf984b480be2cbc495a69348bp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 240 + 0x1.9f323ecbf984bf2b68d766f405221819p-2, + 0x1.0p-1 + }, + { // Entry 241 + 0x1.9f323ecbf984d480be2cbc495a3e89e1p-2, + 0x1.0000000000001p-1 + }, + { // Entry 242 + 0x1.1e85f5e7040cfaba33513aabf3326da5p-1, + 0x1.7ffffffffffffp-1 + }, + { // Entry 243 + 0x1.1e85f5e7040d03dec59a5f3e3c6be5cfp-1, + 0x1.8p-1 + }, + { // Entry 244 + 0x1.1e85f5e7040d0d0357e383d0857b9238p-1, + 0x1.8000000000001p-1 + }, + { // Entry 245 + -0x1.62e42fefa39f135793c7673009e5ed5ep0, + -0x1.8000000000001p-1 + }, + { // Entry 246 + -0x1.62e42fefa39ef35793c7673007e5ed5ep0, + -0x1.8p-1 + }, + { // Entry 247 + -0x1.62e42fefa39ed35793c7673009e5ed5ep0, + -0x1.7ffffffffffffp-1 + }, + { // Entry 248 + 0x1.d5240f0e0e076d3b5e5b162f39d6b3fap-1, + 0x1.7ffffffffffffp0 + }, + { // Entry 249 + 0x1.d5240f0e0e077a082b27e2fc06cc768ap-1, + 0x1.8p0 + }, + { // Entry 250 + 0x1.d5240f0e0e0786d4f7f4afc8d3704d94p-1, + 0x1.8000000000001p0 + }, + { // Entry 251 + -0x1.25e4f7b2737fa18486612173c68a6892p5, + -0x1.fffffffffffffp-1 + }, + { // Entry 252 + 0x1.9c041f7ed8d3304979113eafa0de50acp0, + 0x1.fffffffffffffp1 + }, + { // Entry 253 + 0x1.9c041f7ed8d336afdf77a516075931f4p0, + 0x1.0p2 + }, + { // Entry 254 + 0x1.9c041f7ed8d3437cac4471e2d3d4133bp0, + 0x1.0000000000001p2 + }, + { // Entry 255 + 0x1.193ea7aad030a4214ec437ffafd7ee7cp0, + 0x1.fffffffffffffp0 + }, + { // Entry 256 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.0p1 + }, + { // Entry 257 + 0x1.193ea7aad030b4214ec437ffafad43d2p0, + 0x1.0000000000001p1 + }, + { // Entry 258 + 0x1.62e42fefa39eeb5793c7673007d5ed5ep-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 259 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.0p0 + }, + { // Entry 260 + 0x1.62e42fefa39f035793c7673007a5ed5ep-1, + 0x1.0000000000001p0 + }, + { // Entry 261 + 0x1.9f323ecbf984b480be2cbc495a69348bp-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 262 + 0x1.9f323ecbf984bf2b68d766f405221819p-2, + 0x1.0p-1 + }, + { // Entry 263 + 0x1.9f323ecbf984d480be2cbc495a3e89e1p-2, + 0x1.0000000000001p-1 + }, + { // Entry 264 + 0x1.c8ff7c79a9a20df590b522632ec31a70p-3, + 0x1.fffffffffffffp-3 + }, + { // Entry 265 + 0x1.c8ff7c79a9a21ac25d81ef2ffb9a24aep-3, + 0x1.0p-2 + }, + { // Entry 266 + 0x1.c8ff7c79a9a2345bf71b88c9950ac885p-3, + 0x1.0000000000001p-2 + }, + { // Entry 267 + 0x1.e27076e2af2e5065c4f1c53c5ba22021p-4, + 0x1.fffffffffffffp-4 + }, + { // Entry 268 + 0x1.e27076e2af2e5e9ea87ffe1fe9e155dbp-4, + 0x1.0p-3 + }, + { // Entry 269 + 0x1.e27076e2af2e7b106f9c6fe70639d447p-4, + 0x1.0000000000001p-3 + }, + { // Entry 270 + 0x1.f0a30c01162a5708bd8807dfa41c78f8p-5, + 0x1.fffffffffffffp-5 + }, + { // Entry 271 + 0x1.f0a30c01162a6617cc9716eeb32f131ap-5, + 0x1.0p-4 + }, + { // Entry 272 + 0x1.f0a30c01162a8435eab5350cd13f04eep-5, + 0x1.0000000000001p-4 + }, + { // Entry 273 + 0x1.f829b0e7832ff54baec8fe6c44c511fdp-6, + 0x1.fffffffffffffp-6 + }, + { // Entry 274 + 0x1.f829b0e7833004cf8fc13c7bc8a7ebabp-6, + 0x1.0p-5 + }, + { // Entry 275 + 0x1.f829b0e7833023d751b1b89ad0625665p-6, + 0x1.0000000000001p-5 + }, + { // Entry 276 + 0x1.fc0a8b0fc03e2d38f1978c3b9c1379b6p-7, + 0x1.fffffffffffffp-7 + }, + { // Entry 277 + 0x1.fc0a8b0fc03e3cf9eda74d37abd56df5p-7, + 0x1.0p-6 + }, + { // Entry 278 + 0x1.fc0a8b0fc03e5c7be5c6cf2fcb538558p-7, + 0x1.0000000000001p-6 + }, + { // Entry 279 + 0x1.fe02a6b106787fe3370f3b19ca72746ep-8, + 0x1.fffffffffffffp-8 + }, + { // Entry 280 + 0x1.fe02a6b106788fc37690391dc282d2b3p-8, + 0x1.0p-7 + }, + { // Entry 281 + 0x1.fe02a6b10678af83f5923525b2a09b1bp-8, + 0x1.0000000000001p-7 + }, + { // Entry 282 + 0x1.ff00aa2b10bbf4b076c559c4c4c719a8p-9, + 0x1.fffffffffffffp-9 + }, + { // Entry 283 + 0x1.ff00aa2b10bc04a086b569b4d4b76919p-9, + 0x1.0p-8 + }, + { // Entry 284 + 0x1.ff00aa2b10bc2480a6958994f4968af6p-9, + 0x1.0000000000001p-8 + }, + { // Entry 285 + 0x1.ff802a9ab10e579274ea53f96c2ac73bp-10, + 0x1.fffffffffffffp-10 + }, + { // Entry 286 + 0x1.ff802a9ab10e678a78e854f8ec6ac72bp-10, + 0x1.0p-9 + }, + { // Entry 287 + 0x1.ff802a9ab10e877a80e456f7ecea07cap-10, + 0x1.0000000000001p-9 + }, + { // Entry 288 + 0x1.ffc00aa8ab10ebc44c055914cd3364b9p-11, + 0x1.fffffffffffffp-11 + }, + { // Entry 289 + 0x1.ffc00aa8ab10fbc04d051924c9347471p-11, + 0x1.0p-10 + }, + { // Entry 290 + 0x1.ffc00aa8ab111bb84f049944c1363411p-11, + 0x1.0000000000001p-10 + }, + { // Entry 291 + 0x1.fff8002aa9aaa11166638b10aec3e0a4p-14, + 0x1.fffffffffffffp-14 + }, + { // Entry 292 + 0x1.fff8002aa9aab110e6678af0afc3daa4p-14, + 0x1.0p-13 + }, + { // Entry 293 + 0x1.fff8002aa9aad10fe66f8ab0b1c3c2a5p-14, + 0x1.0000000000001p-13 + }, + { // Entry 294 + -0x1.62e42fefa39f135793c7673008e5ed5ep-1, + -0x1.0000000000001p-1 + }, + { // Entry 295 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.0p-1 + }, + { // Entry 296 + -0x1.62e42fefa39ee35793c767300825ed5ep-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 297 + -0x1.269621134db93cd9140cbcc16037fb86p-2, + -0x1.0000000000001p-2 + }, + { // Entry 298 + -0x1.269621134db92783beb7676c0aa9c2a3p-2, + -0x1.0p-2 + }, + { // Entry 299 + -0x1.269621134db91cd9140cbcc1600d50dbp-2, + -0x1.fffffffffffffp-3 + }, + { // Entry 300 + -0x1.1178e8227e47d02c5d4668ebc04628aep-3, + -0x1.0000000000001p-3 + }, + { // Entry 301 + -0x1.1178e8227e47bde338b41fc72de81e3bp-3, + -0x1.0p-3 + }, + { // Entry 302 + -0x1.1178e8227e47b4bea66afb34e4c8c56ap-3, + -0x1.fffffffffffffp-4 + }, + { // Entry 303 + -0x1.08598b59e3a0799b50ead061448cec6cp-4, + -0x1.0000000000001p-4 + }, + { // Entry 304 + -0x1.08598b59e3a0688a3fd9bf503372c12fp-4, + -0x1.0p-4 + }, + { // Entry 305 + -0x1.08598b59e3a06001b75136c7aaec7f32p-4, + -0x1.fffffffffffffp-5 + }, + { // Entry 306 + -0x1.0415d89e7444578594cf9f5e0caf2971p-5, + -0x1.0000000000001p-5 + }, + { // Entry 307 + -0x1.0415d89e7444470173c75d4d8889de0ep-5, + -0x1.0p-5 + }, + { // Entry 308 + -0x1.0415d89e74443ebf63433c45467a6ab5p-5, + -0x1.fffffffffffffp-6 + }, + { // Entry 309 + -0x1.02056589358484e027b146bdd7feaee1p-6, + -0x1.0000000000001p-6 + }, + { // Entry 310 + -0x1.020565893584749f23a105b9c7bb9a6fp-6, + -0x1.0p-6 + }, + { // Entry 311 + -0x1.0205658935846c7ea198e537bf9b9c7fp-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 312 + -0x1.010157588de722ad0cdb84fde21218d8p-7, + -0x1.0000000000001p-7 + }, + { // Entry 313 + -0x1.010157588de7128ccc5a82f9da00f48bp-7, + -0x1.0p-7 + }, + { // Entry 314 + -0x1.010157588de70a7cac1a01f7d5f9256ep-7, + -0x1.fffffffffffffp-8 + }, + { // Entry 315 + -0x1.0080559588b367f5a8f34d9dadc40b3ap-8, + -0x1.0000000000001p-8 + }, + { // Entry 316 + -0x1.0080559588b357e598e33d8d9db37a29p-8, + -0x1.0p-8 + }, + { // Entry 317 + -0x1.0080559588b34fdd90db358595ab9261p-8, + -0x1.fffffffffffffp-9 + }, + { // Entry 318 + -0x1.0040155d5889ee786b20efc1400f5ea4p-9, + -0x1.0000000000001p-9 + }, + { // Entry 319 + -0x1.0040155d5889de70671eeec0bfcefe53p-9, + -0x1.0p-9 + }, + { // Entry 320 + -0x1.0040155d5889d66c651dee407faefe5bp-9, + -0x1.fffffffffffffp-10 + }, + { // Entry 321 + -0x1.002005565588a3397dd822048abe2755p-10, + -0x1.0000000000001p-10 + }, + { // Entry 322 + -0x1.00200556558893357cd7e1f486bd0705p-10, + -0x1.0p-10 + }, + { // Entry 323 + -0x1.0020055655888b337c57c1ec84bc8ee9p-10, + -0x1.fffffffffffffp-11 + }, + { // Entry 324 + -0x1.0004001555d568891de2704b038ca596p-13, + -0x1.0000000000001p-13 + }, + { // Entry 325 + -0x1.0004001555d558889dde702b028c9996p-13, + -0x1.0p-13 + }, + { // Entry 326 + -0x1.0004001555d550885ddc701b020c9696p-13, + -0x1.fffffffffffffp-14 + }, + { // Entry 327 + 0x1.73242d45267376d3a2a0a820c4902335p-1, + 0x1.1082b577d34eap0 + }, + { // Entry 328 + 0x1.73242d4526738653ad4a41d5fe7ea6c1p-1, + 0x1.1082b577d34ebp0 + }, + { // Entry 329 + 0x1.73242d45267395d3b7f3db8b37f509a8p-1, + 0x1.1082b577d34ecp0 + }, + { // Entry 330 + 0x1.73242d452673a553c29d754070f34beap-1, + 0x1.1082b577d34edp0 + }, + { // Entry 331 + 0x1.73242d452673b4d3cd470ef5a9796d86p-1, + 0x1.1082b577d34eep0 + }, + { // Entry 332 + 0x1.73242d452673c453d7f0a8aae1876e7ep-1, + 0x1.1082b577d34efp0 + }, + { // Entry 333 + 0x1.73242d452673d3d3e29a4260191d4ecfp-1, + 0x1.1082b577d34f0p0 + }, + { // Entry 334 + -0x1.00000000000018ade0e8cb684e083468p-4, + -0x1.f0540438fd5c6p-5 + }, + { // Entry 335 + -0x1.0000000000001029cb3d0ccdd73ea85ap-4, + -0x1.f0540438fd5c5p-5 + }, + { // Entry 336 + -0x1.00000000000007a5b5914e336079a4a5p-4, + -0x1.f0540438fd5c4p-5 + }, + { // Entry 337 + -0x1.fffffffffffffe433fcb1f31d3725290p-5, + -0x1.f0540438fd5c3p-5 + }, + { // Entry 338 + -0x1.ffffffffffffed3b1473a1fce5fa6c86p-5, + -0x1.f0540438fd5c2p-5 + }, + { // Entry 339 + -0x1.ffffffffffffdc32e91c24c7f88b972cp-5, + -0x1.f0540438fd5c1p-5 + }, + { // Entry 340 + -0x1.ffffffffffffcb2abdc4a7930b25d282p-5, + -0x1.f0540438fd5c0p-5 + }, + { // Entry 341 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 342 + 0x1.62e42fefa39ef35393c7673007e5dd5ep9, + 0x1.fffffffffffffp1023 + }, + { // Entry 343 + 0x1.62e42fefa39ef34f93c7673007e5ad5ep9, + 0x1.ffffffffffffep1023 + }, + { // Entry 344 + 0x1.6bcbed09f00aece2ea800b6af0f24a0bp0, + 0x1.921fb54442d18p1 + }, + { // Entry 345 + 0x1.e3703db0ab119bed3e763f434dd7c4fbp-1, + 0x1.921fb54442d18p0 + }, + { // Entry 346 + 0x1.62e42fefa39f035793c7673007a5ed5ep-1, + 0x1.0000000000001p0 + }, + { // Entry 347 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.0p0 + }, + { // Entry 348 + -HUGE_VAL, + -0x1.0p0 + }, + { // Entry 349 + 0x1.62e42fefa39eeb5793c7673007d5ed5ep-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 350 + -0x1.25e4f7b2737fa18486612173c68a6892p5, + -0x1.fffffffffffffp-1 + }, + { // Entry 351 + 0x1.28c6c3a79fe295c7ca64ed982642adcfp-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 352 + -0x1.89f9ff0c761bc5454f17ec539e887d37p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 353 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 354 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 355 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 356 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 357 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 358 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 359 + 0x1.ffffffffffffbfffffffffffffffffffp-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 360 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 361 + 0x1.ffffffffffffffffffffffffffffffffp-1074, + 0x1.0p-1073 + }, + { // Entry 362 + -0x1.p-1073, + -0x1.0p-1073 + }, + { // Entry 363 + 0.0, + 0x1.0p-1074 + }, + { // Entry 364 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 365 + 0.0, + 0.0 + }, + { // Entry 366 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/log1pf_intel_data.h b/tests/math_data/log1pf_intel_data.h new file mode 100644 index 000000000..3519a634f --- /dev/null +++ b/tests/math_data/log1pf_intel_data.h @@ -0,0 +1,1182 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log1pf_intel_data[] = { + { // Entry 0 + -0x1.630430efae4a1e08a52dd228f774747ap-1, + -0x1.0010p-1 + }, + { // Entry 1 + -0x1.0a6a950320b815309cee76c6c346aa8ap-6, + -0x1.084310p-6 + }, + { // Entry 2 + -0x1.4592f4df3c22380a8a7a6bd256a231c9p-2, + -0x1.16e480p-2 + }, + { // Entry 3 + -0x1.5362b6deece53e28930e0d75f3b0e969p-2, + -0x1.20e0p-2 + }, + { // Entry 4 + -0x1.66ea0edec29ccaccbbc9459e55583852p-2, + -0x1.2ec3p-2 + }, + { // Entry 5 + -0x1.e5ee02ef643742b40691cfbbe5c34235p-1, + -0x1.39ce80p-1 + }, + { // Entry 6 + -0x1.ee2a156b413e4fe8b48e04a1a81d7d1fp-2, + -0x1.88p-2 + }, + { // Entry 7 + -0x1.af8967d890ceb5ae2c25ac22be3d5d14p-4, + -0x1.999502p-4 + }, + { // Entry 8 + -0x1.c50e9e00c0346f0253e08a684bbb9a7ep-7, + -0x1.c1f080p-7 + }, + { // Entry 9 + -0x1.d240ed01404debfca8485f4159238678p-7, + -0x1.cef3c0p-7 + }, + { // Entry 10 + -0x1.e3d6ff014fb650f40fcce84889424dadp-7, + -0x1.e04906p-7 + }, + { // Entry 11 + -0x1.e3dbcb012249a6d99fa2c2ccddddacc7p-7, + -0x1.e04dc0p-7 + }, + { // Entry 12 + -0x1.e9924b01a753cecfd33f2d536b84f02fp-7, + -0x1.e5eeb0p-7 + }, + { // Entry 13 + -0x1.f82ba0e78ab204f65a17734933732987p-6, + -0x1.f07ep-6 + }, + { // Entry 14 + -0x1.f9c13b02072dd9618b9803ed7ddfbabep-7, + -0x1.f5df2ep-7 + }, + { // Entry 15 + -0x1.fa2f5d01c871d22cde70cc085ced02ebp-7, + -0x1.f64ba0p-7 + }, + { // Entry 16 + -0x1.fb1175021cc3e1272f3c6b103248fc29p-7, + -0x1.f72a40p-7 + }, + { // Entry 17 + -0x1.fd69f70227b4fea60671e68dcb4dee6cp-7, + -0x1.f97984p-7 + }, + { // Entry 18 + -0x1.62c42eefb8f3c8a68360fc37186210edp-1, + -0x1.ffdffep-2 + }, + { // Entry 19 + -0x1.fffffdfffffaaaaaa6aaaab111112666p-24, + -0x1.fffffcp-24 + }, + { // Entry 20 + 0x1.ff802a9ab10e678a78e854f8ec6ac72bp-10, + 0x1.p-9 + }, + { // Entry 21 + 0x1.ffc00aa8ab10fbc04d051924c9347471p-11, + 0x1.p-10 + }, + { // Entry 22 + 0x1.fffff00000aaaaa2aaab11110bbbbc04p-21, + 0x1.p-20 + }, + { // Entry 23 + 0x1.fffff800002aaaa9aaaab11110e66667p-22, + 0x1.p-21 + }, + { // Entry 24 + 0x1.ffffffffffffffffffffffffffffffp-121, + 0x1.p-120 + }, + { // Entry 25 + 0.0f, + 0x1.p-149 + }, + { // Entry 26 + 0x1.fc0a8effff421db6014956cf936c5246p-7, + 0x1.000002p-6 + }, + { // Entry 27 + 0x1.ffffc40009aaa8e9ab0190ff8c14b319p-19, + 0x1.000002p-18 + }, + { // Entry 28 + 0x1.000000fffffd55555755555888887dddp-23, + 0x1.000002p-23 + }, + { // Entry 29 + 0x1.000001ffffbfffff0000145555d5554ep-41, + 0x1.000002p-41 + }, + { // Entry 30 + 0x1.e270851b92b64555fb421203aa0bcb5cp-4, + 0x1.000008p-3 + }, + { // Entry 31 + 0x1.193ead002577c5e89dc7604b89fc7cebp0, + 0x1.000008p1 + }, + { // Entry 32 + 0x1.193f3cfff9f7d6d8965e4e6b818cb622p0, + 0x1.0000e0p1 + }, + { // Entry 33 + 0x1.ffd006a99ad908d29312234ef301f8a7p-11, + 0x1.0008p-10 + }, + { // Entry 34 + 0x1.f2a7c700004b00f1cb775536c5857252p-5, + 0x1.01128cp-4 + }, + { // Entry 35 + 0x1.cabc19000311437879afccdb6fc91aafp-3, + 0x1.0116p-2 + }, + { // Entry 36 + 0x1.20794701579253647a43cecd04c093e2p4, + 0x1.01fffep26 + }, + { // Entry 37 + 0x1.02d59bfffebbee3ec0c159b239188c69p-7, + 0x1.03dcp-7 + }, + { // Entry 38 + 0x1.ea5f11000fca3ff94bceefddbe67b553p-4, + 0x1.047752p-3 + }, + { // Entry 39 + 0x1.be69c4ffffedd2cb5e5f046e949251cap-2, + 0x1.17c5f0p-1 + }, + { // Entry 40 + 0x1.f40ade790277455219208e6cbce12c81p-3, + 0x1.1b30p-2 + }, + { // Entry 41 + 0x1.b17d614548b69a74509e9d003c096acdp0, + 0x1.1cp2 + }, + { // Entry 42 + 0x1.c4017efffec839b96cd1a043d59e5735p-2, + 0x1.1c1cp-1 + }, + { // Entry 43 + 0x1.6fb67efffb26578a0527f61362ac8fa8p-8, + 0x1.70bf14p-8 + }, + { // Entry 44 + 0x1.7b9b982b27d8fd65f78363d3dedc97b2p-14, + 0x1.7b9ffep-14 + }, + { // Entry 45 + 0x1.4402c0fffffff1ee8f659da5ea3af296p-2, + 0x1.7d2286p-2 + }, + { // Entry 46 + 0x1.453252ffffff9b941dfd07fbfe366e98p3, + 0x1.94d4eap14 + }, + { // Entry 47 + 0x1.981eb6000011b05ecb59c7545ff929fap-4, + 0x1.ad250ap-4 + }, + { // Entry 48 + 0x1.ff1e1e73e713dc5a44e45f9c3f28b7c8p-1, + 0x1.b6ae94p0 + }, + { // Entry 49 + 0x1.990193ffffdd6f9fee37f808cd2663abp-3, + 0x1.c4b528p-3 + }, + { // Entry 50 + 0x1.cd15fefff69640aea34534134c884cf5p-14, + 0x1.cd1c7cp-14 + }, + { // Entry 51 + 0x1.d29b864c3678db9fafb9295703bb2bc1p-7, + 0x1.d5f20ep-7 + }, + { // Entry 52 + 0x1.db8be7c511d00e008415288ce9a25163p-8, + 0x1.dd46aap-8 + }, + { // Entry 53 + 0x1.9a37cb000006cf9ac9e3b0eedec553ffp-2, + 0x1.f88cf6p-2 + }, + { // Entry 54 + 0x1.0b2148000d52175d80c54887b0d4a470p2, + 0x1.ffbffep5 + }, + { // Entry 55 + 0x1.fc090efffd0dee6eb02f2fa5b5d354afp-7, + 0x1.fffe7ep-7 + }, + { // Entry 56 + 0x1.193e2700053065bd8378fbbd3b637eb6p0, + 0x1.fffe7ep0 + }, + { // Entry 57 + 0x1.f82970e7831004cf7a6be71673528989p-6, + 0x1.ffffbep-6 + }, + { // Entry 58 + 0x1.193ea500258270930f8e7d7af244dcffp0, + 0x1.fffff8p0 + }, + { // Entry 59 + 0x1.fffff400004aaaa88aaabb11108d1115p-22, + 0x1.fffffcp-22 + }, + { // Entry 60 + 0x1.11d14de2e6a77280841e892fac90ccfap-1, + 0x1.6a09e6p-1 + }, + { // Entry 61 + 0x1.2ccac6d04834d03c513a0f03d4c89b83p-1, + 0x1.995256p-1 + }, + { // Entry 62 + 0x1.466a92ae5453d95b0ba6631497388e92p-1, + 0x1.c89ac6p-1 + }, + { // Entry 63 + 0x1.5ed1a85999ba7b8b5440ce7e5a6b56f2p-1, + 0x1.f7e336p-1 + }, + { // Entry 64 + 0x1.761c7d56e25f3f7369eb2e8d33b8209cp-1, + 0x1.1395d2p0 + }, + { // Entry 65 + 0x1.8c63d26f597f171e4d44ff4b30356555p-1, + 0x1.2b3a0ap0 + }, + { // Entry 66 + 0x1.a1bd4c9e41df1dbc9bdcf52548fe75b2p-1, + 0x1.42de42p0 + }, + { // Entry 67 + 0x1.b63bf811a5f2ac93a5d17ec91bb5daabp-1, + 0x1.5a827ap0 + }, + { // Entry 68 + 0x1.c9f0adb76b4112afacd4ebe2a82850c6p-1, + 0x1.7226b2p0 + }, + { // Entry 69 + 0x1.dcea66c807b8ed92f41a4c7968b5559fp-1, + 0x1.89caeap0 + }, + { // Entry 70 + 0x1.ef368161759d5a9bb2da51833d2b502bp-1, + 0x1.a16f22p0 + }, + { // Entry 71 + 0x1.00707ca544fcb52315ebafd578b872b3p0, + 0x1.b9135ap0 + }, + { // Entry 72 + 0x1.08fa4b9ede8a0b58b4cad9c182b5bc7ap0, + 0x1.d0b792p0 + }, + { // Entry 73 + 0x1.113d8c489a020b1485aeadcbd8328e39p0, + 0x1.e85bcap0 + }, + { // Entry 74 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.p1 + }, + { // Entry 75 + 0x1.11d14de2e6a77280841e892fac90ccfap-1, + 0x1.6a09e6p-1 + }, + { // Entry 76 + 0x1.26990d712acaf377db999b7a4d6f0d77p-1, + 0x1.8e3e16p-1 + }, + { // Entry 77 + 0x1.3a9149340db314ea32356ecefac481p-1, + 0x1.b27246p-1 + }, + { // Entry 78 + 0x1.4dc99695710c65b9bcf0bb6b8edd5d21p-1, + 0x1.d6a676p-1 + }, + { // Entry 79 + 0x1.604fd9d3719dfe935e33ddc7d697914bp-1, + 0x1.fadaa6p-1 + }, + { // Entry 80 + 0x1.7230837fde6a8438b4a457e20a8e06fep-1, + 0x1.0f876cp0 + }, + { // Entry 81 + 0x1.8376bee5d088c50a9458bc6f7ae9a783p-1, + 0x1.21a184p0 + }, + { // Entry 82 + 0x1.942ca20e8cddd1db45fd28a8128ba122p-1, + 0x1.33bb9cp0 + }, + { // Entry 83 + 0x1.a45b4d36cf3486c62245ff3fa2915f6fp-1, + 0x1.45d5b4p0 + }, + { // Entry 84 + 0x1.b40b09d2982dde5fa679cf307e5857c2p-1, + 0x1.57efccp0 + }, + { // Entry 85 + 0x1.c343641957c53687deafd15a44326c6cp-1, + 0x1.6a09e4p0 + }, + { // Entry 86 + 0x1.1e85f5e7040d03dec59a5f3e3c6be5cfp-1, + 0x1.80p-1 + }, + { // Entry 87 + 0x1.34024a8c5f61c82ac61e318087908df6p-1, + 0x1.a66666p-1 + }, + { // Entry 88 + 0x1.48a112280d6abde96ac67b1fb5ecb146p-1, + 0x1.ccccccp-1 + }, + { // Entry 89 + 0x1.5c73756fb0dea2087cd90d8b7bc997a9p-1, + 0x1.f33332p-1 + }, + { // Entry 90 + 0x1.6f88b1bee42272ff0a57db75096d585ep-1, + 0x1.0cccccp0 + }, + { // Entry 91 + 0x1.81ee60afb50199b91090d89ef318de90p-1, + 0x1.20p0 + }, + { // Entry 92 + 0x1.93b0af9c4ab8019e279f9c3bc8a37955p-1, + 0x1.333334p0 + }, + { // Entry 93 + 0x1.a4da932e285ccc3fc07f118701145a41p-1, + 0x1.466668p0 + }, + { // Entry 94 + 0x1.b575ef12280c4d1b4f06a46e25e8a4a6p-1, + 0x1.59999cp0 + }, + { // Entry 95 + 0x1.c58bb849aa7457a9abbdac063833d724p-1, + 0x1.6cccd0p0 + }, + { // Entry 96 + 0x1.d5240f0e0e077a082b27e2fc06cc768ap-1, + 0x1.80p0 + }, + { // Entry 97 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.p0 + }, + { // Entry 98 + 0x1.7bdf36901c7f350041da6ef1304395cep-1, + 0x1.19999ap0 + }, + { // Entry 99 + 0x1.93b0af9c4ab8019e279f9c3bc8a37955p-1, + 0x1.333334p0 + }, + { // Entry 100 + 0x1.aa731192391a8863f4bfe8452991c141p-1, + 0x1.4ccccep0 + }, + { // Entry 101 + 0x1.c03d718c8b4dafcae9e8be78cf83cbf4p-1, + 0x1.666668p0 + }, + { // Entry 102 + 0x1.d52410a7a7a06fcabadb6d90a4a19793p-1, + 0x1.800002p0 + }, + { // Entry 103 + 0x1.e938cda74ef6d0be179304b52619eb82p-1, + 0x1.99999cp0 + }, + { // Entry 104 + 0x1.fc8b8126826242614b481d83aaec3cbdp-1, + 0x1.b33336p0 + }, + { // Entry 105 + 0x1.07952480b0ea35a6256b2037158f39fdp0, + 0x1.ccccd0p0 + }, + { // Entry 106 + 0x1.1090e340e02935eda17728b57dbb2974p0, + 0x1.e6666ap0 + }, + { // Entry 107 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.p1 + }, + { // Entry 108 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.p-1 + }, + { // Entry 109 + -0x1.3217b042fc85e510ffef322447286167p-1, + -0x1.ccccccp-2 + }, + { // Entry 110 + -0x1.058aee52bbf036e43da60fe740480ec8p-1, + -0x1.999998p-2 + }, + { // Entry 111 + -0x1.b91f246ff08e2be21ff79355d363de75p-2, + -0x1.666664p-2 + }, + { // Entry 112 + -0x1.6d3c2dbbcad2f6c5b9711be3c95acd83p-2, + -0x1.333330p-2 + }, + { // Entry 113 + -0x1.26961d134dbb2783bd621217b5546c80p-2, + -0x1.fffffap-3 + }, + { // Entry 114 + -0x1.c8ff7579a9a52ac25bb899dbd264ce86p-3, + -0x1.999994p-3 + }, + { // Entry 115 + -0x1.4cd6b35b45fbb9ed92ccfd7f10d29dfcp-3, + -0x1.33332ep-3 + }, + { // Entry 116 + -0x1.af8e7765f96eba7449d2e369edb815d8p-4, + -0x1.999990p-4 + }, + { // Entry 117 + -0x1.a431c11b1271b3c8501cfaf9d3319015p-5, + -0x1.999986p-5 + }, + { // Entry 118 + 0.0, + 0.0 + }, + { // Entry 119 + 0.0, + 0.0 + }, + { // Entry 120 + 0x1.8fb06450b296f7b66ab1a549ae4826a2p-5, + 0x1.99999ap-5 + }, + { // Entry 121 + 0x1.8663f7f0dbb23a23b18a99f13b06839ap-4, + 0x1.99999ap-4 + }, + { // Entry 122 + 0x1.1e3b830fe6a17974c7bd84c4e3eab82cp-3, + 0x1.333334p-3 + }, + { // Entry 123 + 0x1.756501739ebcb722ad1079954ab64abbp-3, + 0x1.99999ap-3 + }, + { // Entry 124 + 0x1.c8ff7c79a9a21ac25d81ef2ffb9a24aep-3, + 0x1.p-2 + }, + { // Entry 125 + 0x1.0ca9385ba5764f40265b8842277dec27p-2, + 0x1.333334p-2 + }, + { // Entry 126 + 0x1.334e9f7738caf691d9028f70d0039fefp-2, + 0x1.666668p-2 + }, + { // Entry 127 + 0x1.588c2f480eb6532d57552d24a22c18b8p-2, + 0x1.99999cp-2 + }, + { // Entry 128 + 0x1.7c7b2a6204723e0ab52a960a21dbe461p-2, + 0x1.ccccd0p-2 + }, + { // Entry 129 + 0x1.9f323ecbf984bf2b68d766f405221819p-2, + 0x1.p-1 + }, + { // Entry 130 + -0x1.7f7425b73e3d1503aef4db985cf47e98p1, + -0x1.e66666p-1 + }, + { // Entry 131 + -0x1.26bb19bb5555582dca0301cc5afb0340p1, + -0x1.ccccccp-1 + }, + { // Entry 132 + -0x1.e5a9a3c3ac498090b9d029dbb4ad807ap0, + -0x1.b33332p-1 + }, + { // Entry 133 + -0x1.9c041b7ed8db36afca225000b2030fd2p0, + -0x1.999998p-1 + }, + { // Entry 134 + -0x1.62e42befa3a6f3577e72121ab28fcb3cp0, + -0x1.7ffffep-1 + }, + { // Entry 135 + -0x1.34378bcbda7a06e4efec7643b0ba89cbp0, + -0x1.666664p-1 + }, + { // Entry 136 + -0x1.0cc1208b56d4b4c06755206193cd1ceap0, + -0x1.4ccccap-1 + }, + { // Entry 137 + -0x1.d524070e0e177a08007d38d15c203245p-1, + -0x1.333330p-1 + }, + { // Entry 138 + -0x1.98d5f831b831ae342b6d390d5ee4078ap-1, + -0x1.199996p-1 + }, + { // Entry 139 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.p-1 + }, + { // Entry 140 + 0x1.1542457337d42e1c6b73c89d866ba171p6, + 0x1.p100 + }, + { // Entry 141 + 0x1.15a3de7291226038f89b79079de74b15p6, + 0x1.19999ap100 + }, + { // Entry 142 + 0x1.15fcf7f671a38b9552200b4c17f03284p6, + 0x1.333334p100 + }, + { // Entry 143 + 0x1.164eeeaea72addd7387b5fd890994481p6, + 0x1.4ccccep100 + }, + { // Entry 144 + 0x1.169ad1a55b50990c54e1e650029fc95ap6, + 0x1.666668p100 + }, + { // Entry 145 + 0x1.16e177b7592304a2b3519037089451c5p6, + 0x1.800002p100 + }, + { // Entry 146 + 0x1.17238e1ada469675b97116744955a040p6, + 0x1.99999cp100 + }, + { // Entry 147 + 0x1.1761a27cf0fff16c1e86b183310631dfp6, + 0x1.b33336p100 + }, + { // Entry 148 + 0x1.179c2a39af642757a6a61b00bba160aep6, + 0x1.ccccd0p100 + }, + { // Entry 149 + 0x1.17d3879ff3b917735e3bb947a1e5476fp6, + 0x1.e6666ap100 + }, + { // Entry 150 + 0x1.18080dd3171b6c031a9b576be65b6d4cp6, + 0x1.p101 + }, + { // Entry 151 + 0x1.62e42feba39ef15793c611dab1909808p6, + 0x1.fffffep127 + }, + { // Entry 152 + 0.0f, + 0x1.p-149 + }, + { // Entry 153 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 154 + 0x1.11d14cb6fa73c6e3e2b32fdc2e39187cp-1, + 0x1.6a09e4p-1 + }, + { // Entry 155 + 0x1.11d14de2e6a77280841e892fac90ccfap-1, + 0x1.6a09e6p-1 + }, + { // Entry 156 + 0x1.11d14f0ed2da6e6c589fb5f4332d476fp-1, + 0x1.6a09e8p-1 + }, + { // Entry 157 + -0x1.3a5ac1c04c5f3b4913b799da9d738173p0, + -0x1.6a09e8p-1 + }, + { // Entry 158 + -0x1.3a5abe5642755d2215d06656abb38c5dp0, + -0x1.6a09e6p-1 + }, + { // Entry 159 + -0x1.3a5abaec38972722a15fd1d5c0a89c36p0, + -0x1.6a09e4p-1 + }, + { // Entry 160 + 0x1.c343641957c53687deafd15a44326c6cp-1, + 0x1.6a09e4p0 + }, + { // Entry 161 + 0x1.c34365c17f5fcd5f0800083c5f3f2de3p-1, + 0x1.6a09e6p0 + }, + { // Entry 162 + 0x1.c3436769a6f904d49759471bcfce4490p-1, + 0x1.6a09e8p0 + }, + { // Entry 163 + 0x1.9f323d76a42f30f2853c89b7f554a97bp-2, + 0x1.fffffep-2 + }, + { // Entry 164 + 0x1.9f323ecbf984bf2b68d766f405221819p-2, + 0x1.p-1 + }, + { // Entry 165 + 0x1.9f324176a42e8647db03a6298d08cf83p-2, + 0x1.000002p-1 + }, + { // Entry 166 + 0x1.1e85f4c271c38bb4f9b938ae62856a75p-1, + 0x1.7ffffep-1 + }, + { // Entry 167 + 0x1.1e85f5e7040d03dec59a5f3e3c6be5cfp-1, + 0x1.80p-1 + }, + { // Entry 168 + 0x1.1e85f70b9655d4d98c420da42f457a6ep-1, + 0x1.800002p-1 + }, + { // Entry 169 + -0x1.62e433efa3a6f357a91cbcc55d3c0f80p0, + -0x1.800002p-1 + }, + { // Entry 170 + -0x1.62e42fefa39ef35793c7673007e5ed5ep0, + -0x1.80p-1 + }, + { // Entry 171 + -0x1.62e42befa3a6f3577e72121ab28fcb3cp0, + -0x1.7ffffep-1 + }, + { // Entry 172 + 0x1.d5240d74746d3c9786f9771f52074ef3p-1, + 0x1.7ffffep0 + }, + { // Entry 173 + 0x1.d5240f0e0e077a082b27e2fc06cc768ap-1, + 0x1.80p0 + }, + { // Entry 174 + 0x1.d52410a7a7a06fcabadb6d90a4a19793p-1, + 0x1.800002p0 + }, + { // Entry 175 + -0x1.0a2b23f3bab73681aed58d6405ec7206p4, + -0x1.fffffep-1 + }, + { // Entry 176 + 0x1.9c041eb20c0617f78d606f27acf69e28p0, + 0x1.fffffep1 + }, + { // Entry 177 + 0x1.9c041f7ed8d336afdf77a516075931f4p0, + 0x1.p2 + }, + { // Entry 178 + 0x1.9c042118726b889b65f3e3e28e3e4e66p0, + 0x1.000002p2 + }, + { // Entry 179 + 0x1.193ea7002585c5e86b1cb66b1832016cp0, + 0x1.fffffep0 + }, + { // Entry 180 + 0x1.193ea7aad030a976a4198d55053b7cb5p0, + 0x1.p1 + }, + { // Entry 181 + 0x1.193ea90025851b3dc15599f89374611bp0, + 0x1.000002p1 + }, + { // Entry 182 + 0x1.62e42eefa39eb35793b211daaa909805p-1, + 0x1.fffffep-1 + }, + { // Entry 183 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.p0 + }, + { // Entry 184 + 0x1.62e431efa39df357947211da3290986fp-1, + 0x1.000002p0 + }, + { // Entry 185 + 0x1.9f323d76a42f30f2853c89b7f554a97bp-2, + 0x1.fffffep-2 + }, + { // Entry 186 + 0x1.9f323ecbf984bf2b68d766f405221819p-2, + 0x1.p-1 + }, + { // Entry 187 + 0x1.9f324176a42e8647db03a6298d08cf83p-2, + 0x1.000002p-1 + }, + { // Entry 188 + 0x1.c8ff7ae010085833015383537a710bf7p-3, + 0x1.fffffep-3 + }, + { // Entry 189 + 0x1.c8ff7c79a9a21ac25d81ef2ffb9a24aep-3, + 0x1.p-2 + }, + { // Entry 190 + 0x1.c8ff7facdcd4aa1e86a3628ed2816e49p-3, + 0x1.000002p-2 + }, + { // Entry 191 + 0x1.e270751b92bc7e3985ba2b4eda27e177p-4, + 0x1.fffffep-4 + }, + { // Entry 192 + 0x1.e27076e2af2e5e9ea87ffe1fe9e155dbp-4, + 0x1.p-3 + }, + { // Entry 193 + 0x1.e2707a70e81187b4c829d7073485c254p-4, + 0x1.000002p-3 + }, + { // Entry 194 + 0x1.f0a30a1f34487609a04c201edd1f6224p-5, + 0x1.fffffep-5 + }, + { // Entry 195 + 0x1.f0a30c01162a6617cc9716eeb32f131ap-5, + 0x1.p-4 + }, + { // Entry 196 + 0x1.f0a30fc4d9edf12a66bd3268f53eb247p-5, + 0x1.000002p-4 + }, + { // Entry 197 + 0x1.f829aef70710f587dcdc1e46f5c8fc28p-6, + 0x1.fffffep-6 + }, + { // Entry 198 + 0x1.f829b0e7833004cf8fc13c7bc8a7ebabp-6, + 0x1.p-5 + }, + { // Entry 199 + 0x1.f829b4c87b6df63c671750b0d49bd0d0p-6, + 0x1.000002p-5 + }, + { // Entry 200 + 0x1.fc0a8917a0bc40f9af9b81ceffb6876ap-7, + 0x1.fffffep-7 + }, + { // Entry 201 + 0x1.fc0a8b0fc03e3cf9eda74d37abd56df5p-7, + 0x1.p-6 + }, + { // Entry 202 + 0x1.fc0a8effff421db6014956cf936c5246p-7, + 0x1.000002p-6 + }, + { // Entry 203 + 0x1.fe02a4b4fe886e0adfcd9bf770796795p-8, + 0x1.fffffep-8 + }, + { // Entry 204 + 0x1.fe02a6b106788fc37690391dc282d2b3p-8, + 0x1.p-7 + }, + { // Entry 205 + 0x1.fe02aaa91658c7641591cbf711392789p-8, + 0x1.000002p-7 + }, + { // Entry 206 + 0x1.ff00a82d0ebe01a481bb62141d1d53b5p-9, + 0x1.fffffep-9 + }, + { // Entry 207 + 0x1.ff00aa2b10bc04a086b569b4d4b76919p-9, + 0x1.p-8 + }, + { // Entry 208 + 0x1.ff00ae2714b804a47ec15f0e31f390edp-9, + 0x1.000002p-8 + }, + { // Entry 209 + 0x1.ff80289bb08ea6eb088098a49a71d9d9p-10, + 0x1.fffffep-10 + }, + { // Entry 210 + 0x1.ff802a9ab10e678a78e854f8ec6ac72bp-10, + 0x1.p-9 + }, + { // Entry 211 + 0x1.ff802e98b20de5cc57794db0a1879185p-10, + 0x1.000002p-9 + }, + { // Entry 212 + 0x1.ffc008a92af1037e6d78fd20e4e62f56p-11, + 0x1.fffffep-11 + }, + { // Entry 213 + 0x1.ffc00aa8ab10fbc04d051924c9347471p-11, + 0x1.p-10 + }, + { // Entry 214 + 0x1.ffc00ea7ab50eac4cbd56964e4284cb6p-11, + 0x1.000002p-10 + }, + { // Entry 215 + 0x1.fff7fe2ab9aa310ce6c785f0bd1aefcfp-14, + 0x1.fffffep-14 + }, + { // Entry 216 + 0x1.fff8002aa9aab110e6678af0afc3daa4p-14, + 0x1.p-13 + }, + { // Entry 217 + 0x1.fff8042a89abb0e8e8a770f314eeb25dp-14, + 0x1.000002p-13 + }, + { // Entry 218 + -0x1.62e433efa3a2f357991cbc8d5d3b4f80p-1, + -0x1.000002p-1 + }, + { // Entry 219 + -0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + -0x1.p-1 + }, + { // Entry 220 + -0x1.62e42defa39ff357931cbc85dd3b424dp-1, + -0x1.fffffep-2 + }, + { // Entry 221 + -0x1.269623bdf864b5bca2aac313becfafc7p-2, + -0x1.000002p-2 + }, + { // Entry 222 + -0x1.269621134db92783beb7676c0aa9c2a3p-2, + -0x1.p-2 + }, + { // Entry 223 + -0x1.26961fbdf8640b11f78e514c72f59cb5p-2, + -0x1.fffffep-3 + }, + { // Entry 224 + -0x1.1178ea6ba2da5a9f4da9ec87413daa29p-3, + -0x1.000002p-3 + }, + { // Entry 225 + -0x1.1178e8227e47bde338b41fc72de81e3bp-3, + -0x1.p-3 + }, + { // Entry 226 + -0x1.1178e6fdebfeae36d034bf0026e7ba26p-3, + -0x1.fffffep-4 + }, + { // Entry 227 + -0x1.08598d7c05c2af150ef0536d3a6bec43p-4, + -0x1.000002p-4 + }, + { // Entry 228 + -0x1.08598b59e3a0688a3fd9bf503372c12fp-4, + -0x1.p-4 + }, + { // Entry 229 + -0x1.08598a48d28f60935a04940d6d173246p-4, + -0x1.fffffep-5 + }, + { // Entry 230 + -0x1.0415daaef8656050097e0aa39f7eb53ep-5, + -0x1.000002p-5 + }, + { // Entry 231 + -0x1.0415d89e7444470173c75d4d8889de0ep-5, + -0x1.p-5 + }, + { // Entry 232 + -0x1.0415d7963233c7238cd1a9779dfbd10fp-5, + -0x1.fffffep-6 + }, + { // Entry 233 + -0x1.02056791560685012dd216873106670ep-6, + -0x1.000002p-6 + }, + { // Entry 234 + -0x1.020565893584749f23a105b9c7bb9a6fp-6, + -0x1.p-6 + }, + { // Entry 235 + -0x1.020564852543729f44a720c573005c5fp-6, + -0x1.fffffep-7 + }, + { // Entry 236 + -0x1.0101595c95f736dd7dddd4f4a84fc30ep-7, + -0x1.000002p-7 + }, + { // Entry 237 + -0x1.010157588de7128ccc5a82f9da00f48bp-7, + -0x1.p-7 + }, + { // Entry 238 + -0x1.0101565689df037097f9d05a2038a6fep-7, + -0x1.fffffep-8 + }, + { // Entry 239 + -0x1.008057978ab55beba0ed4c4e688b0fddp-8, + -0x1.000002p-8 + }, + { // Entry 240 + -0x1.0080559588b357e598e33d8d9db37a29p-8, + -0x1.p-8 + }, + { // Entry 241 + -0x1.0080549487b2576599643eb948ddce3cp-8, + -0x1.fffffep-9 + }, + { // Entry 242 + -0x1.0040175e590a1f9177e773be9c970fbep-9, + -0x1.000002p-9 + }, + { // Entry 243 + -0x1.0040155d5889de70671eeec0bfcefe53p-9, + -0x1.p-9 + }, + { // Entry 244 + -0x1.0040145cd849bea09f4b0cbe55e0522ap-9, + -0x1.fffffep-10 + }, + { // Entry 245 + -0x1.00200756d5a89bb7bd700a29d438709dp-10, + -0x1.000002p-10 + }, + { // Entry 246 + -0x1.00200556558893357cd7e1f486bd0705p-10, + -0x1.p-10 + }, + { // Entry 247 + -0x1.0020045615788f548c9dd3ebcc957ecfp-10, + -0x1.fffffep-11 + }, + { // Entry 248 + -0x1.0004021565d5d89c9efe7d2c354c8573p-13, + -0x1.000002p-13 + }, + { // Entry 249 + -0x1.0004001555d558889dde702b028c9996p-13, + -0x1.p-13 + }, + { // Entry 250 + -0x1.0003ff154dd5188a9e0e72ab0936642cp-13, + -0x1.fffffep-14 + }, + { // Entry 251 + 0x1.732426090cb8287b20767f822cff213fp-1, + 0x1.1082aep0 + }, + { // Entry 252 + 0x1.732427f90e136dae43644376436d483ap-1, + 0x1.1082b0p0 + }, + { // Entry 253 + 0x1.732429e90f6cd25ec74c889c28bbeb0dp-1, + 0x1.1082b2p0 + }, + { // Entry 254 + 0x1.73242bd910c4568cafd24e8cbead4f8cp-1, + 0x1.1082b4p0 + }, + { // Entry 255 + 0x1.73242dc91219fa38009894d655459f92p-1, + 0x1.1082b6p0 + }, + { // Entry 256 + 0x1.73242fb9136dbd60bd425afcaacb11f0p-1, + 0x1.1082b8p0 + }, + { // Entry 257 + 0x1.732431a914bfa006e972a078ebc6136bp-1, + 0x1.1082bap0 + }, + { // Entry 258 + -0x1.0000031332fb3170f147bbabd5a5dbe2p-4, + -0x1.f0540ap-5 + }, + { // Entry 259 + -0x1.00000202b0458e4ed1041496e7335a4dp-4, + -0x1.f05408p-5 + }, + { // Entry 260 + -0x1.000000f22d8ffd4e110ab2e7abbf098bp-4, + -0x1.f05406p-5 + }, + { // Entry 261 + -0x1.ffffffc355b4fcdd62b25a0e3f78a172p-5, + -0x1.f05404p-5 + }, + { // Entry 262 + -0x1.fffffda2504a236163da32bc8033b657p-5, + -0x1.f05402p-5 + }, + { // Entry 263 + -0x1.fffffb814adf6e2825881cac148330d7p-5, + -0x1.f054p-5 + }, + { // Entry 264 + -0x1.fffff9604574dd31a7b744aef831786ep-5, + -0x1.f053fep-5 + }, + { // Entry 265 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 266 + 0x1.62e42feba39ef15793c611dab1909808p6, + 0x1.fffffep127 + }, + { // Entry 267 + 0x1.62e42fe7a39eeb5793bcbc854d3b429ap6, + 0x1.fffffcp127 + }, + { // Entry 268 + 0x1.6bcbed6499137a6d8cb88a3b46fe313bp0, + 0x1.921fb6p1 + }, + { // Entry 269 + 0x1.e3703e42b92e44cc4a16c64759347ba9p-1, + 0x1.921fb6p0 + }, + { // Entry 270 + 0x1.62e431efa39df357947211da3290986fp-1, + 0x1.000002p0 + }, + { // Entry 271 + 0x1.62e42fefa39ef35793c7673007e5ed5ep-1, + 0x1.p0 + }, + { // Entry 272 + -HUGE_VALF, + -0x1.p0 + }, + { // Entry 273 + 0x1.62e42eefa39eb35793b211daaa909805p-1, + 0x1.fffffep-1 + }, + { // Entry 274 + -0x1.0a2b23f3bab73681aed58d6405ec7206p4, + -0x1.fffffep-1 + }, + { // Entry 275 + 0x1.28c6c410c6e97e86ac65cbbaf9be56e1p-1, + 0x1.921fb6p-1 + }, + { // Entry 276 + -0x1.89fa00c1dfad872a5efe4c31eb7dddb5p0, + -0x1.921fb6p-1 + }, + { // Entry 277 + 0x1.000001fffffffffffffffffffffffffdp-126, + 0x1.000002p-126 + }, + { // Entry 278 + -0x1.00000200000000000000000000000002p-126, + -0x1.000002p-126 + }, + { // Entry 279 + 0x1.fffffffffffffffffffffffffffffffcp-127, + 0x1.p-126 + }, + { // Entry 280 + -0x1.00000000000000000000000000000002p-126, + -0x1.p-126 + }, + { // Entry 281 + 0x1.fffffbfffffffffffffffffffffffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 282 + -0x1.fffffc00000000000000000000000003p-127, + -0x1.fffffcp-127 + }, + { // Entry 283 + 0x1.fffff7fffffffffffffffffffffffffcp-127, + 0x1.fffff8p-127 + }, + { // Entry 284 + -0x1.fffff800000000000000000000000003p-127, + -0x1.fffff8p-127 + }, + { // Entry 285 + 0x1.ffffffffffffffffffffffffffffffffp-149, + 0x1.p-148 + }, + { // Entry 286 + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 287 + 0.0f, + 0x1.p-149 + }, + { // Entry 288 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 289 + 0.0, + 0.0f + }, + { // Entry 290 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/log2_intel_data.h b/tests/math_data/log2_intel_data.h new file mode 100644 index 000000000..8a4fb7920 --- /dev/null +++ b/tests/math_data/log2_intel_data.h @@ -0,0 +1,1422 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log2_intel_data[] = { + { // Entry 0 + -0x1.fefffffffffffff4755c4d6a3e815099p9, + 0x1.0000000000001p-1022 + }, + { // Entry 1 + -0x1.dfffffffffa3a7ffc265aaf2255b6929p3, + 0x1.0000000002001p-15 + }, + { // Entry 2 + 0x1.14ff58be06e4eb0f63ba8e7579bab913p-37, + 0x1.00000000060p0 + }, + { // Entry 3 + 0x1.14ff5a1566a9a8000208af7208121486p-26, + 0x1.0000003000004p0 + }, + { // Entry 4 + 0x1.4329e6fafed4ec17674fb20107ee4738p-24, + 0x1.000000ep0 + }, + { // Entry 5 + 0x1.f2d8fc80dac97800003cbce6797ac725p-22, + 0x1.0000056719764p0 + }, + { // Entry 6 + 0x1.dc413771d9f3c80050b7ef09134bfc65p-10, + 0x1.005294a5294a4p0 + }, + { // Entry 7 + 0x1.f94f46da272ae87214f66783dc0012aep-10, + 0x1.00579f3c8a71dp0 + }, + { // Entry 8 + 0x1.5af457c06976d86934e812fcabd086a0p-9, + 0x1.00785b0addce9p0 + }, + { // Entry 9 + 0x1.9002e361d485cbe42f7c524eb194d904p6, + 0x1.0080402010080p100 + }, + { // Entry 10 + 0x1.ebccc1095cfa8866ace79cfc00544c63p-9, + 0x1.00aaaaaaaa9abp0 + }, + { // Entry 11 + 0x1.6fe50b6ef08517f8e37b001794f4441cp-7, + 0x1.020p0 + }, + { // Entry 12 + -0x1.f15f624786a9ffffff74dc63a8516430p-1, + 0x1.051eb856134c8p-1 + }, + { // Entry 13 + 0x1.d73e46341148efff33d83f08a3113bb1p-6, + 0x1.0527acc8ad0c0p0 + }, + { // Entry 14 + 0x1.06844f3329cf480160c9207b0fe9686dp-5, + 0x1.05bffd7177f90p0 + }, + { // Entry 15 + 0x1.6d16ccbfe831300071d2e127dcadc62cp-5, + 0x1.080813d392eeap0 + }, + { // Entry 16 + 0x1.bd735eb18cf5e801185222972fe7d7f7p-5, + 0x1.09d53e5078566p0 + }, + { // Entry 17 + 0x1.883a578a2144d80000082236bb975a7bp6, + 0x1.0a4fea894ce63p98 + }, + { // Entry 18 + 0x1.e52bb32dde0e37835b09979ee48eb915p-5, + 0x1.0aba57c4ca2d2p0 + }, + { // Entry 19 + 0x1.8c4d60a6f91cffffffc4db521ec23052p1, + 0x1.11a2ad570fc84p3 + }, + { // Entry 20 + 0x1.3c10652cd2c037b722d8c301a9cbb787p-3, + 0x1.1ce739ce739cdp0 + }, + { // Entry 21 + 0x1.25a57ea54060affffd6e2b38d8a6e680p3, + 0x1.214e5031c9c98p9 + }, + { // Entry 22 + -0x1.95d8976fa2bec7fffe44e71ab30da275p-1, + 0x1.2790a7a4ac2e0p-1 + }, + { // Entry 23 + 0x1.ad532cd7cfc0c800fec9752b0728c5e1p-3, + 0x1.280958add66e8p0 + }, + { // Entry 24 + -0x1.92a321a719e2f7ffffa46c9962f213fcp-1, + 0x1.28da10faa7922p-1 + }, + { // Entry 25 + 0x1.f00d883a5154c80b7cdca07e1f4c03b7p-3, + 0x1.2ecc5d98bb317p0 + }, + { // Entry 26 + -0x1.79538de327eb0000008a31eeec5b4479p-1, + 0x1.333333363af15p-1 + }, + { // Entry 27 + -0x1.79538dd93df7d800008833cc9d230deap-1, + 0x1.3333333a5a724p-1 + }, + { // Entry 28 + 0x1.83988d0dfa3b6fffff7c315d9eb388a3p-2, + 0x1.4ccccccd37c59p0 + }, + { // Entry 29 + 0x1.83988d1cb5af2ffffffb364351973dbfp-2, + 0x1.4cccccd08960ap0 + }, + { // Entry 30 + 0x1.60e6235281e10fffff72c07b47d5653ap0, + 0x1.4cccccdabef48p1 + }, + { // Entry 31 + 0x1.325fe221441468000004dbe427ffcc6ap1, + 0x1.5049964882f16p2 + }, + { // Entry 32 + -0x1.95c01a39fbdf57ffa2ec6f697886f6abp0, + 0x1.55555555554d3p-2 + }, + { // Entry 33 + 0x1.b219b408ac406801297f9c0f313a0abcp-2, + 0x1.57715d9c62be2p0 + }, + { // Entry 34 + -0x1.14c560fe68af880e0a0f337d55565281p-1, + 0x1.6p-1 + }, + { // Entry 35 + -0x1.5140ccfbc94ba7fc14cae25af1322e19p3, + 0x1.6057ff1745294p-11 + }, + { // Entry 36 + 0x1.7c44eecc79d9080000884a87ce09a1e3p0, + 0x1.6666667712026p1 + }, + { // Entry 37 + 0x1.f44c3b80ce1b7f53077e2d0ba2df3c58p-2, + 0x1.672ea4c8ed13cp0 + }, + { // Entry 38 + 0x1.7e3d59b76fecf800001f276bfc801af5p0, + 0x1.685132bfb7bd6p1 + }, + { // Entry 39 + -0x1.a02b5ec4fc7c87ff9784e19a86accb9ep2, + 0x1.696p-7 + }, + { // Entry 40 + 0x1.fffffffffff39d44979cc67bcf7dedfap-2, + 0x1.6a09e667f3b9cp0 + }, + { // Entry 41 + -0x1.ffffffffffe3d5cb0585a3840c91514cp-2, + 0x1.6a09e667f3c3bp-1 + }, + { // Entry 42 + -0x1.ebe47960e3c087fe4e5268625f5a697ap-2, + 0x1.6f0p-1 + }, + { // Entry 43 + -0x1.9e9716d1cb72c80133c5f0f373cd97d0p2, + 0x1.6f9be6f9be6f8p-7 + }, + { // Entry 44 + 0x1.182ffdcced70affff9846eab53e769dfp-1, + 0x1.761702ac1314cp0 + }, + { // Entry 45 + -0x1.c5272484399d1fffa79b8c4ab89ea8bcp-2, + 0x1.78c0475799b40p-1 + }, + { // Entry 46 + -0x1.c1bae6863c7b178789fef871a533f17ap-2, + 0x1.79ap-1 + }, + { // Entry 47 + -0x1.b7fcec2565ee77fbd36d69837dd95420p1, + 0x1.7a17944879f04p-4 + }, + { // Entry 48 + 0x1.95c01a410a1af7ffffffff18ac20bc4fp0, + 0x1.8000000756038p1 + }, + { // Entry 49 + -0x1.b5a2a91024a237fc250d48b7dfc575f6p6, + 0x1.81a6a65785de5p-110 + }, + { // Entry 50 + -0x1.5b2c3da19723a80db6a0480592812599p0, + 0x1.9p-2 + }, + { // Entry 51 + -0x1.9596d761c3c1f000942a87960c4e6acap2, + 0x1.954p-7 + }, + { // Entry 52 + -0x1.361f7a0f40acf80008a3cdbb56ef43a3p-2, + 0x1.9f0d1c4a85df8p-1 + }, + { // Entry 53 + -0x1.a64a14ea31ff27ffffc6e0491c00ece0p1, + 0x1.a01f56d5c8bf5p-4 + }, + { // Entry 54 + 0x1.36bda7028a6c18000436ccebd654b112p3, + 0x1.a2f4704a7b7fcp9 + }, + { // Entry 55 + -0x1.9162c8a7c89d6fff3b61696cc0cb7b08p2, + 0x1.a82p-7 + }, + { // Entry 56 + -0x1.3df5f27f08238fff3d930b0aa7b67e19p0, + 0x1.b0ec3b0ec3b0cp-2 + }, + { // Entry 57 + 0x1.c20a0d80f7dc7000c26cf4f5584981e6p0, + 0x1.b0ec3b0ec3b0cp1 + }, + { // Entry 58 + 0x1.f32d6c73fe4eb00000998f802fd894a2p2, + 0x1.bd9cec1c72c90p7 + }, + { // Entry 59 + -0x1.4f575b7d4160880182c6f69306d03c28p-3, + 0x1.c910ef0d6d89fp-1 + }, + { // Entry 60 + -0x1.4f278abffb110801a3d7edcb79ee5f32p-3, + 0x1.c91854af9ee26p-1 + }, + { // Entry 61 + -0x1.285378da90d7e7fb008eedf0a10fba48p-3, + 0x1.cf243ff1971a1p-1 + }, + { // Entry 62 + 0x1.b74949020f785800105ca3140afb53b5p-1, + 0x1.d00000080p0 + }, + { // Entry 63 + -0x1.020fbb4ae01c67fa85f5128eef800678p-3, + 0x1.d52db96328edcp-1 + }, + { // Entry 64 + 0x1.730a8d241efbb7fffff32ce95a694993p1, + 0x1.dd4d6407c04c0p2 + }, + { // Entry 65 + -0x1.7d06d263cf06e8013519197ee311d70dp-4, + 0x1.e007446d5317ap-1 + }, + { // Entry 66 + -0x1.651a043e59908801518f9ad8a730b006p-4, + 0x1.e1f9cfe4da365p-1 + }, + { // Entry 67 + -0x1.c315ace83f6d87ffd47ee348821be931p-5, + 0x1.ecd393ee2a22dp-1 + }, + { // Entry 68 + -0x1.c1a2dd30e92c97fe1e8a8927bca88d09p-5, + 0x1.ece30a99708f3p-1 + }, + { // Entry 69 + -0x1.31811414c9f457fedb339a2a59aa6a15p-5, + 0x1.f2ef441966b20p-1 + }, + { // Entry 70 + -0x1.ff54d4e01906700082476686f339feb0p-6, + 0x1.f50b068c69ab9p-1 + }, + { // Entry 71 + -0x1.fe4764e025a7a8010db1b6cf13da17afp-6, + 0x1.f510bcafa535bp-1 + }, + { // Entry 72 + -0x1.e9c8fb8a7a8ff9f9d482d43f89c910f1p-6, + 0x1.f58p-1 + }, + { // Entry 73 + -0x1.cff929eee46f28012d55ba72f9106a3fp-6, + 0x1.f60c45b178d4dp-1 + }, + { // Entry 74 + -0x1.cfbe0973d009a801f32a0b405f64c8fbp-6, + 0x1.f60d8730dc09ap-1 + }, + { // Entry 75 + -0x1.aef13de1197f92a24897297a335df9e7p-6, + 0x1.f6cp-1 + }, + { // Entry 76 + -0x1.a2551c8f2ac46800ba85b1a1eae0a6e2p-6, + 0x1.f704add85e4a5p-1 + }, + { // Entry 77 + -0x1.a21fbdfed5c5a801e2269de517fa7ab6p-6, + 0x1.f705d098ffd9dp-1 + }, + { // Entry 78 + -0x1.a0b920176bda5800c044f6f904f1595cp-6, + 0x1.f70d7261c2ba0p-1 + }, + { // Entry 79 + -0x1.c587cdb2b5cc67cae4990a6eaf50ba8cp-9, + 0x1.fec603682f6b8p-1 + }, + { // Entry 80 + -0x1.7c16ffe1cccb47d5379db27f7b490df5p-9, + 0x1.fef8ce70306d5p-1 + }, + { // Entry 81 + -0x1.71b0ea42e4e818440ecc7e467e125d9cp-9, + 0x1.ff0000000000cp-1 + }, + { // Entry 82 + -0x1.71b0ea42c98838d39811a1f869da817dp-9, + 0x1.ff0000000013bp-1 + }, + { // Entry 83 + -0x1.fe3672e0fc0b17be54e4caf20434a198p-10, + 0x1.ff4f4b00a4f8ep-1 + }, + { // Entry 84 + -0x1.f914d523f178576eeb72527f2b70a29cp-10, + 0x1.ff5111a810580p-1 + }, + { // Entry 85 + -0x1.f914d523ee66777286ccfd4913235594p-10, + 0x1.ff5111a810591p-1 + }, + { // Entry 86 + -0x1.de7e861144ac97832a4e3a5d92856809p-10, + 0x1.ff5a457a5e13ep-1 + }, + { // Entry 87 + -0x1.b6d5736af0ac97d260200b6dea2e4c1bp-10, + 0x1.ff67fffffffffp-1 + }, + { // Entry 88 + -0x1.54c6cf781fa087d33241ec17c4837255p-10, + 0x1.ff89f2f328ed2p-1 + }, + { // Entry 89 + -0x1.fb243353a93b57621a8538f059d9ae9cp-11, + 0x1.ffa826070f4cbp-1 + }, + { // Entry 90 + -0x1.b82668250050d778d8993a10e828c390p-11, + 0x1.ffb3bffffffffp-1 + }, + { // Entry 91 + -0x1.c0050ccaf8b8980002bd379e2a6c6214p2, + 0x1.ffe3fffffc050p-8 + }, + { // Entry 92 + -0x1.7d4120671257680005a86d606dcf2f32p-14, + 0x1.fff7bdf17bdefp-1 + }, + { // Entry 93 + -0x1.018000b8aaf5a80007b2db4c192253cbp10, + 0x1.fffbfffff5ep-1031 + }, + { // Entry 94 + -0x1.14ff72b62bdf4ffe64fb34d59dd51e74p-18, + 0x1.ffff9ffffffffp-1 + }, + { // Entry 95 + -0x1.f8000171548d6801817dc6695b1d7bb1p5, + 0x1.ffffcp-64 + }, + { // Entry 96 + -0x1.fe4a9a023f0577fdff3db84b62d9f2eap-21, + 0x1.ffffe9e4b0628p-1 + }, + { // Entry 97 + -0x1.fa4ac0aba3c2a7fc024396607228ba9dp-21, + 0x1.ffffea110b39dp-1 + }, + { // Entry 98 + -0x1.d6a5b47f4af0f7fd4f300c0b6918c63fp-21, + 0x1.ffffeb9c5b2d8p-1 + }, + { // Entry 99 + -0x1.715477c9d1f81923f8738f56fafb397bp-29, + 0x1.ffffffeffffffp-1 + }, + { // Entry 100 + -0x1.886a76622be3cab6d2103fbee1307674p-36, + 0x1.ffffffffddfffp-1 + }, + { // Entry 101 + -0x1.1500ca1283b5a7fbb9fa255a6b5e382bp-37, + 0x1.fffffffff3fffp-1 + }, + { // Entry 102 + -0x1.8000000000b8b0007b35bf2c5e4202cep1, + 0x1.fffffffffdfffp-4 + }, + { // Entry 103 + -0x1.00000000005c58003d9adf962f210167p2, + 0x1.fffffffffdfffp-5 + }, + { // Entry 104 + -0x1.40000000005c58003d9adf962f210167p2, + 0x1.fffffffffdfffp-6 + }, + { // Entry 105 + -0x1.c0000000005c58003d9adf962f210167p2, + 0x1.fffffffffdfffp-8 + }, + { // Entry 106 + 0x1.7fffffffff474fff84ca40d3a1bdfd31p1, + 0x1.fffffffffdfffp2 + }, + { // Entry 107 + -0x1.9f7f051d0f361814496a13788aa1cd5fp-50, + 0x1.ffffffffffff7p-1 + }, + { // Entry 108 + -0x1.000000000000126e8d1ea7de883e83ddp-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 109 + -0x1.5614640c6fbc486cb295b10f8abd6939p-2, + 0x1.962b5f9438d25p-1 + }, + { // Entry 110 + -0x1.7b67e3d8e1879c50407e8e09ca62d7c2p-3, + 0x1.c24cd8c07de7ep-1 + }, + { // Entry 111 + -0x1.9cab985fe1d8d99581e09a95c3fac8e5p-5, + 0x1.ee6e51ecc2fd7p-1 + }, + { // Entry 112 + 0x1.2ae04a51c9bc0b1821ec386516792b26p-4, + 0x1.0d47e58c84098p0 + }, + { // Entry 113 + 0x1.7e235191cc46bfaed961bbad6075fcacp-3, + 0x1.2358a222a6944p0 + }, + { // Entry 114 + 0x1.2aebb4eed34bf42bc5448a189070885ap-2, + 0x1.39695eb8c91f0p0 + }, + { // Entry 115 + 0x1.8f6e7fe9764c2e91cb4ffe5f0bc8c5bdp-2, + 0x1.4f7a1b4eeba9cp0 + }, + { // Entry 116 + 0x1.ed89a2dc1bb787ab7102598199c4314ep-2, + 0x1.658ad7e50e348p0 + }, + { // Entry 117 + 0x1.2300d01a02b0f4c423375f5f27dc7268p-1, + 0x1.7b9b947b30bf4p0 + }, + { // Entry 118 + 0x1.4cbcd1db0cd52626c88c135def6fe9adp-1, + 0x1.91ac5111534a0p0 + }, + { // Entry 119 + 0x1.743d53168a525134e8343eebcf59fe0ep-1, + 0x1.a7bd0da775d4cp0 + }, + { // Entry 120 + 0x1.99bc604e5748bb53276e45341eb98a06p-1, + 0x1.bdcdca3d985f8p0 + }, + { // Entry 121 + 0x1.bd6b9ae6661c8790715131587a707f63p-1, + 0x1.d3de86d3baea4p0 + }, + { // Entry 122 + 0x1.df75c6b861b93599aaeb3776b6013c7dp-1, + 0x1.e9ef4369dd750p0 + }, + { // Entry 123 + 0x1.ffffffffffffa3aae26b51f401dccee2p-1, + 0x1.ffffffffffffcp0 + }, + { // Entry 124 + -0x1.000000000000126e8d1ea7de883e83ddp-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 125 + -0x1.733246b9a317f0bca830a0c588c3277bp-2, + 0x1.8e3e170bf282dp-1 + }, + { // Entry 126 + -0x1.e54e37a9c4bd980cfe450419c6f883fcp-3, + 0x1.b27247aff148ep-1 + }, + { // Entry 127 + -0x1.f19dcbcf827de4f7d32b492b04a24c27p-4, + 0x1.d6a67853f00efp-1 + }, + { // Entry 128 + -0x1.dd88a259f451a87b03861bb7688f43cep-7, + 0x1.fadaa8f7eed50p-1 + }, + { // Entry 129 + 0x1.5c01a39fbd67e68597bbe1ac26c6be25p-4, + 0x1.0f876ccdf6cd9p0 + }, + { // Entry 130 + 0x1.6cb0f6865c8e97c69cfca0255e6776bap-3, + 0x1.21a1851ff630ap0 + }, + { // Entry 131 + 0x1.0fe8572e5293c2a44ea258726691bcdep-2, + 0x1.33bb9d71f593bp0 + }, + { // Entry 132 + 0x1.64594d130cfbbf489ca3faaa8e6ee937p-2, + 0x1.45d5b5c3f4f6cp0 + }, + { // Entry 133 + 0x1.b439310b4187ea516fa4708c4226a66dp-2, + 0x1.57efce15f459dp0 + }, + { // Entry 134 + 0x1.ffffffffffffdb22e5c2b042ef82f844p-2, + 0x1.6a09e667f3bccp0 + }, + { // Entry 135 + -0x1.a8ff971810a5e1817fd3b7d7e5d148bbp-2, + 0x1.8p-1 + }, + { // Entry 136 + -0x1.1c31ddd1b3bdb7e45c68feca52877fddp-2, + 0x1.a666666666666p-1 + }, + { // Entry 137 + -0x1.374d65d9e60937e1e9c3af53f2460781p-3, + 0x1.cccccccccccccp-1 + }, + { // Entry 138 + -0x1.2b38505f8a2a84910fe2def6e099c1a4p-5, + 0x1.f333333333332p-1 + }, + { // Entry 139 + 0x1.20508f547ede543575d3d1c5271c8aebp-4, + 0x1.0ccccccccccccp0 + }, + { // Entry 140 + 0x1.5c01a39fbd67d5d476c5408b1c684536p-3, + 0x1.1ffffffffffffp0 + }, + { // Entry 141 + 0x1.0d58e42b1da11244cfd82a2743f07a46p-2, + 0x1.3333333333332p0 + }, + { // Entry 142 + 0x1.66e8c01641ed632aa3e56de7648499cdp-2, + 0x1.4666666666665p0 + }, + { // Entry 143 + 0x1.bb59b5fafc553e2891d2d31fea53fcb0p-2, + 0x1.5999999999998p0 + }, + { // Entry 144 + 0x1.059cccf99870a58ae5bee787b5da3e26p-1, + 0x1.6cccccccccccbp0 + }, + { // Entry 145 + 0x1.2b803473f7acd1b12c5db00c0f9d85f7p-1, + 0x1.7fffffffffffep0 + }, + { // Entry 146 + 0.0, + 0x1.0p0 + }, + { // Entry 147 + 0x1.199b728cb9d0c325536aa229a8894fd2p-3, + 0x1.199999999999ap0 + }, + { // Entry 148 + 0x1.0d58e42b1da1ac2801254c3b38d1f6e5p-2, + 0x1.3333333333334p0 + }, + { // Entry 149 + 0x1.83988d0c1f611efc28e37b6de8f0d25ep-2, + 0x1.4cccccccccccep0 + }, + { // Entry 150 + 0x1.f113baed305e266df10e8a16d5d1b604p-2, + 0x1.6666666666668p0 + }, + { // Entry 151 + 0x1.2b803473f7ad4ccd53ce981c057004fdp-1, + 0x1.8000000000002p0 + }, + { // Entry 152 + 0x1.5b2c3da19723ed4d8ccfca8e89888f01p-1, + 0x1.999999999999cp0 + }, + { // Entry 153 + 0x1.87f42b97294a21112b6763a4c5b15c5ep-1, + 0x1.b333333333336p0 + }, + { // Entry 154 + 0x1.b22ca689867e189efbc280384c02430cp-1, + 0x1.cccccccccccd0p0 + }, + { // Entry 155 + 0x1.da1c9885a0c428156893856b99d4ce5ap-1, + 0x1.e66666666666ap0 + }, + { // Entry 156 + 0x1.p0, + 0x1.0p1 + }, + { // Entry 157 + 0x1.90p6, + 0x1.0p100 + }, + { // Entry 158 + 0x1.908ccdb9465ce86192a9b55114d444a7p6, + 0x1.199999999999ap100 + }, + { // Entry 159 + 0x1.910d58e42b1da1ac2801254c3b38d1f6p6, + 0x1.3333333333334p100 + }, + { // Entry 160 + 0x1.9183988d0c1f611efc28e37b6de8f0d2p6, + 0x1.4cccccccccccep100 + }, + { // Entry 161 + 0x1.91f113baed305e266df10e8a16d5d1b6p6, + 0x1.6666666666668p100 + }, + { // Entry 162 + 0x1.92570068e7ef5a999aa79d30380ae009p6, + 0x1.8000000000002p100 + }, + { // Entry 163 + 0x1.92b6587b432e47da9b199f951d13111ep6, + 0x1.999999999999cp100 + }, + { // Entry 164 + 0x1.930fe8572e5294422256cec7498b62b8p6, + 0x1.b333333333336p100 + }, + { // Entry 165 + 0x1.9364594d130cfc313df7850070980486p6, + 0x1.cccccccccccd0p100 + }, + { // Entry 166 + 0x1.93b439310b4188502ad1270ad733a99cp6, + 0x1.e66666666666ap100 + }, + { // Entry 167 + 0x1.94p6, + 0x1.0p101 + }, + { // Entry 168 + 0x1.90p7, + 0x1.0p200 + }, + { // Entry 169 + 0x1.904666dca32e7430c954daa88a6a2253p7, + 0x1.199999999999ap200 + }, + { // Entry 170 + 0x1.9086ac72158ed0d6140092a61d9c68fbp7, + 0x1.3333333333334p200 + }, + { // Entry 171 + 0x1.90c1cc46860fb08f7e1471bdb6f47869p7, + 0x1.4cccccccccccep200 + }, + { // Entry 172 + 0x1.90f889dd76982f1336f887450b6ae8dbp7, + 0x1.6666666666668p200 + }, + { // Entry 173 + 0x1.912b803473f7ad4ccd53ce981c057004p7, + 0x1.8000000000002p200 + }, + { // Entry 174 + 0x1.915b2c3da19723ed4d8ccfca8e89888fp7, + 0x1.999999999999cp200 + }, + { // Entry 175 + 0x1.9187f42b97294a21112b6763a4c5b15cp7, + 0x1.b333333333336p200 + }, + { // Entry 176 + 0x1.91b22ca689867e189efbc280384c0243p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 177 + 0x1.91da1c9885a0c428156893856b99d4cep7, + 0x1.e66666666666ap200 + }, + { // Entry 178 + 0x1.92p7, + 0x1.0p201 + }, + { // Entry 179 + 0x1.f4p9, + 0x1.0p1000 + }, + { // Entry 180 + 0x1.f41199b728cb9d0c325536aa229a8894p9, + 0x1.199999999999ap1000 + }, + { // Entry 181 + 0x1.f421ab1c8563b435850024a987671a3ep9, + 0x1.3333333333334p1000 + }, + { // Entry 182 + 0x1.f4307311a183ec23df851c6f6dbd1e1ap9, + 0x1.4cccccccccccep1000 + }, + { // Entry 183 + 0x1.f43e22775da60bc4cdbe21d142daba36p9, + 0x1.6666666666668p1000 + }, + { // Entry 184 + 0x1.f44ae00d1cfdeb533354f3a607015c01p9, + 0x1.8000000000002p1000 + }, + { // Entry 185 + 0x1.f456cb0f6865c8fb536333f2a3a26223p9, + 0x1.999999999999cp1000 + }, + { // Entry 186 + 0x1.f461fd0ae5ca5288444ad9d8e9316c57p9, + 0x1.b333333333336p1000 + }, + { // Entry 187 + 0x1.f46c8b29a2619f8627bef0a00e130090p9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 188 + 0x1.f47687262168310a055a24e15ae67533p9, + 0x1.e66666666666ap1000 + }, + { // Entry 189 + 0x1.f480p9, + 0x1.0p1001 + }, + { // Entry 190 + -0x1.715481dd5c5d93663255eca7ba82aeb6p-20, + 0x1.ffffep-1 + }, + { // Entry 191 + -0x1.71547c180a27f362d17a1f59be1bb55dp-21, + 0x1.fffffp-1 + }, + { // Entry 192 + 0.0, + 0x1.0p0 + }, + { // Entry 193 + 0x1.7154708d66755d9fe119ed1e85c13f40p-21, + 0x1.0000080p0 + }, + { // Entry 194 + 0x1.71546ac814f867d7a99ac240f177d35fp-20, + 0x1.00001p0 + }, + { // Entry 195 + -0x1.715476559ad8ce249f3237b562a13af0p-30, + 0x1.fffffff80p-1 + }, + { // Entry 196 + -0x1.71547654298457cc21b07cded2333ea6p-31, + 0x1.fffffffc0p-1 + }, + { // Entry 197 + 0.0, + 0x1.0p0 + }, + { // Entry 198 + 0x1.7154765146db6b26b150b9ea12c16a1ap-31, + 0x1.000000020p0 + }, + { // Entry 199 + 0x1.7154764fd586f4d9be72b1a943d27a16p-30, + 0x1.000000040p0 + }, + { // Entry 200 + -0x1.71547652b8e88bb2a66c90adb569ed7cp-40, + 0x1.fffffffffe0p-1 + }, + { // Entry 201 + -0x1.71547652b88c369511be286039f5fb20p-41, + 0x1.ffffffffff0p-1 + }, + { // Entry 202 + 0.0, + 0x1.0p0 + }, + { // Entry 203 + 0x1.71547652b7d38c59e862106f7e37730ap-41, + 0x1.00000000008p0 + }, + { // Entry 204 + 0x1.71547652b777373c53b460cc3decdcc6p-40, + 0x1.00000000010p0 + }, + { // Entry 205 + -0x1.71547652b8300fa20bda54a6d61b2f2ap-50, + 0x1.ffffffffffff8p-1 + }, + { // Entry 206 + -0x1.71547652b82ff88cc4752923d23e6580p-51, + 0x1.ffffffffffffcp-1 + }, + { // Entry 207 + 0.0, + 0x1.0p0 + }, + { // Entry 208 + 0x1.71547652b82fca6235aad21dd60f75dep-51, + 0x1.0000000000002p0 + }, + { // Entry 209 + 0x1.71547652b82fb34cee45a69addbd4fe6p-50, + 0x1.0000000000004p0 + }, + { // Entry 210 + 0x1.fffffffffffffffa3aae26b51f40630cp9, + 0x1.fffffffffffffp1023 + }, + { // Entry 211 + -0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 212 + -0x1.00000000000033138899b7a32401fb1cp-1, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 213 + -0x1.000000000000126e8d1ea7de883e83ddp-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 214 + -0x1.ffffffffffffe39323473033dbd8c22ap-2, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 215 + 0x1.ffffffffffff99d8eecc90b9b7fc09c7p-2, + 0x1.6a09e667f3bcbp0 + }, + { // Entry 216 + 0x1.ffffffffffffdb22e5c2b042ef82f844p-2, + 0x1.6a09e667f3bccp0 + }, + { // Entry 217 + 0x1.0000000000000e366e5c67e612139eeap-1, + 0x1.6a09e667f3bcdp0 + }, + { // Entry 218 + -0x1.0000000000000b8aa3b295c17f39e677p0, + 0x1.fffffffffffffp-2 + }, + { // Entry 219 + -0x1.p0, + 0x1.0p-1 + }, + { // Entry 220 + -0x1.ffffffffffffd1d57135a8fa054264d4p-1, + 0x1.0000000000001p-1 + }, + { // Entry 221 + -0x1.a8ff971810a61f0f938c2bdfe202d351p-2, + 0x1.7ffffffffffffp-1 + }, + { // Entry 222 + -0x1.a8ff971810a5e1817fd3b7d7e5d148bbp-2, + 0x1.8p-1 + }, + { // Entry 223 + -0x1.a8ff971810a5a3f36c1b43cfec30544cp-2, + 0x1.8000000000001p-1 + }, + { // Entry 224 + 0x1.2b803473f7acf0783639ea100efe9657p-1, + 0x1.7ffffffffffffp0 + }, + { // Entry 225 + 0x1.2b803473f7ad0f3f401624140d175ba2p-1, + 0x1.8p0 + }, + { // Entry 226 + 0x1.2b803473f7ad2e0649f25e1809e7d5d9p-1, + 0x1.8000000000001p0 + }, + { // Entry 227 + 0x1.ebccc1098ad858c1fcb8223ebc3a2d89p-9, + 0x1.00aaaaaaaaaaap0 + }, + { // Entry 228 + 0x1.ebccc1098b06649e343f78ac72257de7p-9, + 0x1.00aaaaaaaaaabp0 + }, + { // Entry 229 + 0x1.ebccc1098b34707a6bc6cf17493ced63p-9, + 0x1.00aaaaaaaaaacp0 + }, + { // Entry 230 + 0x1.fffffffffffff4755c4d6a3e80c61988p0, + 0x1.fffffffffffffp1 + }, + { // Entry 231 + 0x1.p1, + 0x1.0p2 + }, + { // Entry 232 + 0x1.0000000000000b8aa3b295c17eaf66cap1, + 0x1.0000000000001p2 + }, + { // Entry 233 + 0x1.ffffffffffffe8eab89ad47d018c3311p-1, + 0x1.fffffffffffffp0 + }, + { // Entry 234 + 0x1.p0, + 0x1.0p1 + }, + { // Entry 235 + 0x1.000000000000171547652b82fd5ecd95p0, + 0x1.0000000000001p1 + }, + { // Entry 236 + -0x1.71547652b82fe73ccee9488191df220fp-53, + 0x1.fffffffffffffp-1 + }, + { // Entry 237 + 0.0, + 0x1.0p0 + }, + { // Entry 238 + 0x1.71547652b82fd5ecd95d67df53a9dd50p-52, + 0x1.0000000000001p0 + }, + { // Entry 239 + -0x1.0000000000000b8aa3b295c17f39e677p0, + 0x1.fffffffffffffp-2 + }, + { // Entry 240 + -0x1.p0, + 0x1.0p-1 + }, + { // Entry 241 + -0x1.ffffffffffffd1d57135a8fa054264d4p-1, + 0x1.0000000000001p-1 + }, + { // Entry 242 + -0x1.00000000000005c551d94ae0bf9cf33bp1, + 0x1.fffffffffffffp-3 + }, + { // Entry 243 + -0x1.p1, + 0x1.0p-2 + }, + { // Entry 244 + -0x1.ffffffffffffe8eab89ad47d02a1326ap0, + 0x1.0000000000001p-2 + }, + { // Entry 245 + -0x1.80000000000005c551d94ae0bf9cf33bp1, + 0x1.fffffffffffffp-4 + }, + { // Entry 246 + -0x1.80p1, + 0x1.0p-3 + }, + { // Entry 247 + -0x1.7ffffffffffff4755c4d6a3e81509935p1, + 0x1.0000000000001p-3 + }, + { // Entry 248 + -0x1.00000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-5 + }, + { // Entry 249 + -0x1.p2, + 0x1.0p-4 + }, + { // Entry 250 + -0x1.fffffffffffff4755c4d6a3e81509935p1, + 0x1.0000000000001p-4 + }, + { // Entry 251 + -0x1.40000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-6 + }, + { // Entry 252 + -0x1.40p2, + 0x1.0p-5 + }, + { // Entry 253 + -0x1.3ffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-5 + }, + { // Entry 254 + -0x1.80000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-7 + }, + { // Entry 255 + -0x1.80p2, + 0x1.0p-6 + }, + { // Entry 256 + -0x1.7ffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-6 + }, + { // Entry 257 + -0x1.c0000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-8 + }, + { // Entry 258 + -0x1.c0p2, + 0x1.0p-7 + }, + { // Entry 259 + -0x1.bffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-7 + }, + { // Entry 260 + -0x1.0000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-9 + }, + { // Entry 261 + -0x1.p3, + 0x1.0p-8 + }, + { // Entry 262 + -0x1.fffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-8 + }, + { // Entry 263 + -0x1.2000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-10 + }, + { // Entry 264 + -0x1.20p3, + 0x1.0p-9 + }, + { // Entry 265 + -0x1.1ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-9 + }, + { // Entry 266 + -0x1.4000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-11 + }, + { // Entry 267 + -0x1.40p3, + 0x1.0p-10 + }, + { // Entry 268 + -0x1.3ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-10 + }, + { // Entry 269 + -0x1.a000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-14 + }, + { // Entry 270 + -0x1.a0p3, + 0x1.0p-13 + }, + { // Entry 271 + -0x1.9ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-13 + }, + { // Entry 272 + -0x1.a000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-14 + }, + { // Entry 273 + -0x1.a0p3, + 0x1.0p-13 + }, + { // Entry 274 + -0x1.9ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-13 + }, + { // Entry 275 + -0x1.80000000000005c551d94ae0bf9cf33bp1, + 0x1.fffffffffffffp-4 + }, + { // Entry 276 + -0x1.80p1, + 0x1.0p-3 + }, + { // Entry 277 + -0x1.7ffffffffffff4755c4d6a3e81509935p1, + 0x1.0000000000001p-3 + }, + { // Entry 278 + -0x1.8a8980abfbd38fec8261ce5ac7b2b316p-3, + 0x1.bffffffffffffp-1 + }, + { // Entry 279 + -0x1.8a8980abfbd32666a9b7e2df60d2bdc6p-3, + 0x1.cp-1 + }, + { // Entry 280 + -0x1.8a8980abfbd2bce0d10df763fdb79032p-3, + 0x1.c000000000001p-1 + }, + { // Entry 281 + -0x1.00000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-5 + }, + { // Entry 282 + -0x1.p2, + 0x1.0p-4 + }, + { // Entry 283 + -0x1.fffffffffffff4755c4d6a3e81509935p1, + 0x1.0000000000001p-4 + }, + { // Entry 284 + -0x1.7d60496cfbb58b6d8d05c60c1e4defa0p-4, + 0x1.dffffffffffffp-1 + }, + { // Entry 285 + -0x1.7d60496cfbb4c673b4511f8c2b4e4fb7p-4, + 0x1.ep-1 + }, + { // Entry 286 + -0x1.7d60496cfbb40179db9c790c3edf8c5cp-4, + 0x1.e000000000001p-1 + }, + { // Entry 287 + -0x1.40000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-6 + }, + { // Entry 288 + -0x1.40p2, + 0x1.0p-5 + }, + { // Entry 289 + -0x1.3ffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-5 + }, + { // Entry 290 + -0x1.77394c9d958ed31cc5d7c5bf657ce7c7p-5, + 0x1.effffffffffffp-1 + }, + { // Entry 291 + -0x1.77394c9d958d55de5c380fe0871d757fp-5, + 0x1.fp-1 + }, + { // Entry 292 + -0x1.77394c9d958bd89ff2985a01b50a5933p-5, + 0x1.f000000000001p-1 + }, + { // Entry 293 + -0x1.80000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-7 + }, + { // Entry 294 + -0x1.80p2, + 0x1.0p-6 + }, + { // Entry 295 + -0x1.7ffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-6 + }, + { // Entry 296 + -0x1.743ee861f35851c7beb5800ff025220ap-6, + 0x1.f7fffffffffffp-1 + }, + { // Entry 297 + -0x1.743ee861f3556365483611f7c0bf059fp-6, + 0x1.f80p-1 + }, + { // Entry 298 + -0x1.743ee861f3527502d1b6a3dfa92b465cp-6, + 0x1.f800000000001p-1 + }, + { // Entry 299 + -0x1.c0000000000002e2a8eca5705fce799dp2, + 0x1.fffffffffffffp-8 + }, + { // Entry 300 + -0x1.c0p2, + 0x1.0p-7 + }, + { // Entry 301 + -0x1.bffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-7 + }, + { // Entry 302 + -0x1.72c7ba20f73846a992511c7918df1e3ep-7, + 0x1.fbfffffffffffp-1 + }, + { // Entry 303 + -0x1.72c7ba20f73275b5d184a2c615b70ad4p-7, + 0x1.fc0p-1 + }, + { // Entry 304 + -0x1.72c7ba20f72ca4c210b8291341746042p-7, + 0x1.fc00000000001p-1 + }, + { // Entry 305 + -0x1.0000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-9 + }, + { // Entry 306 + -0x1.p3, + 0x1.0p-8 + }, + { // Entry 307 + -0x1.fffffffffffffa3aae26b51f40a84c9ap2, + 0x1.0000000000001p-8 + }, + { // Entry 308 + -0x1.720d9c06a84180a8de11db415a9c19bfp-8, + 0x1.fdfffffffffffp-1 + }, + { // Entry 309 + -0x1.720d9c06a835ea6ef18f977e5d8a37abp-8, + 0x1.fe0p-1 + }, + { // Entry 310 + -0x1.720d9c06a82a5435050d53bbbd8733d9p-8, + 0x1.fe00000000001p-1 + }, + { // Entry 311 + -0x1.2000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-10 + }, + { // Entry 312 + -0x1.20p3, + 0x1.0p-9 + }, + { // Entry 313 + -0x1.1ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-9 + }, + { // Entry 314 + -0x1.71b0ea42e614c339acd1274e85c99f12p-9, + 0x1.fefffffffffffp-1 + }, + { // Entry 315 + -0x1.71b0ea42e5fda261dbbd1a498f533398p-9, + 0x1.ff0p-1 + }, + { // Entry 316 + -0x1.71b0ea42e5e6818a0aa90d455240385fp-9, + 0x1.ff00000000001p-1 + }, + { // Entry 317 + -0x1.4000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-11 + }, + { // Entry 318 + -0x1.40p3, + 0x1.0p-10 + }, + { // Entry 319 + -0x1.3ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-10 + }, + { // Entry 320 + -0x1.7182a894b6ca8f7bca8c2f767eabc572p-10, + 0x1.ff7ffffffffffp-1 + }, + { // Entry 321 + -0x1.7182a894b69c595f7920cea1619c6e57p-10, + 0x1.ff8p-1 + }, + { // Entry 322 + -0x1.7182a894b66e234327b56dcdb69a7d21p-10, + 0x1.ff80000000001p-1 + }, + { // Entry 323 + -0x1.a000000000000171547652b82fe73ccep3, + 0x1.fffffffffffffp-14 + }, + { // Entry 324 + -0x1.a0p3, + 0x1.0p-13 + }, + { // Entry 325 + -0x1.9ffffffffffffd1d57135a8fa054264dp3, + 0x1.0000000000001p-13 + }, + { // Entry 326 + -0x1.715a3bc35aaead4b7ce65d43632af0adp-13, + 0x1.ffeffffffffffp-1 + }, + { // Entry 327 + -0x1.715a3bc3593d4d4a2a239745f6427420p-13, + 0x1.fffp-1 + }, + { // Entry 328 + -0x1.715a3bc357cbed48d760d15414b65d0dp-13, + 0x1.fff0000000001p-1 + }, + { // Entry 329 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 330 + 0x1.fffffffffffffffa3aae26b51f40630cp9, + 0x1.fffffffffffffp1023 + }, + { // Entry 331 + 0x1.fffffffffffffff4755c4d6a3e8097eep9, + 0x1.ffffffffffffep1023 + }, + { // Entry 332 + 0x1.a6c873498ddf71a36f477a776fb34e4bp0, + 0x1.921fb54442d18p1 + }, + { // Entry 333 + 0x1.4d90e6931bbee346de8ef4eedf669c96p-1, + 0x1.921fb54442d18p0 + }, + { // Entry 334 + 0x1.71547652b82fd5ecd95d67df53a9dd50p-52, + 0x1.0000000000001p0 + }, + { // Entry 335 + 0.0, + 0x1.0p0 + }, + { // Entry 336 + -0x1.71547652b82fe73ccee9488191df220fp-53, + 0x1.fffffffffffffp-1 + }, + { // Entry 337 + -0x1.64de32d9c882397242e216224132c6d2p-2, + 0x1.921fb54442d18p-1 + }, + { // Entry 338 + -0x1.fefffffffffffff4755c4d6a3e815099p9, + 0x1.0000000000001p-1022 + }, + { // Entry 339 + -0x1.ffp9, + 0x1.0p-1022 + }, + { // Entry 340 + -0x1.ff0000000000000b8aa3b295c17f6811p9, + 0x1.ffffffffffffep-1023 + }, + { // Entry 341 + -0x1.ff000000000000171547652b82ff88ccp9, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 342 + -0x1.0c40p10, + 0x1.0p-1073 + }, + { // Entry 343 + -0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 344 + -HUGE_VAL, + 0.0 + }, + { // Entry 345 + -HUGE_VAL, + -0.0 + }, + { // Entry 346 + 0x1.f4p6, + 0x1.0p125 + }, + { // Entry 347 + -0x1.fcp6, + 0x1.0p-127 + }, + { // Entry 348 + 0x1.p0, + 0x1.0p1 + }, + { // Entry 349 + 0x1.p1, + 0x1.0p2 + }, + { // Entry 350 + -0x1.p0, + 0x1.0p-1 + } +}; diff --git a/tests/math_data/log2f_intel_data.h b/tests/math_data/log2f_intel_data.h new file mode 100644 index 000000000..666a84ef9 --- /dev/null +++ b/tests/math_data/log2f_intel_data.h @@ -0,0 +1,1150 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_log2f_intel_data[] = { + { // Entry 0 + 0x1.715419fdb96231bd1fa15f37bfa42910p-17, + 0x1.000080p0 + }, + { // Entry 1 + 0x1.14fe88ff5753fa56dc27bca056285672p-15, + 0x1.000180p0 + }, + { // Entry 2 + 0x1.715305002e4ae466ed064a01ae55204ep-15, + 0x1.0002p0 + }, + { // Entry 3 + 0x1.4327b20433837a3e2c610a392bbd295ap-14, + 0x1.000380p0 + }, + { // Entry 4 + 0x1.64531effed17eb9b0a93b3ccaa24f82bp-13, + 0x1.0007b8p0 + }, + { // Entry 5 + -0x1.ffe7a4ffff5f125cad7f0468b55a873cp2, + 0x1.004390p-8 + }, + { // Entry 6 + -0x1.4fdd63002e000ea74a80c91b771feb2ep4, + 0x1.0181p-21 + }, + { // Entry 7 + 0x1.61382d01166a5f656628676dd57287c3p-7, + 0x1.01eb80p0 + }, + { // Entry 8 + 0x1.67ea1b041aeef5d06d27db173c4a8ec3p-7, + 0x1.01f4dap0 + }, + { // Entry 9 + 0x1.6f089703fa8b836209e806374014eeeap-7, + 0x1.01feccp0 + }, + { // Entry 10 + 0x1.d8c5b9000072814ba11dc07e3e55730cp-6, + 0x1.052cp0 + }, + { // Entry 11 + 0x1.65ad73003698ae3b6629d42d6d969d65p-5, + 0x1.07ddb4p0 + }, + { // Entry 12 + 0x1.671b720031bff18c21d3c6680b607a97p-5, + 0x1.07e5e0p0 + }, + { // Entry 13 + -0x1.bd01820013d2bdf2e708a03b63cad894p2, + 0x1.0870p-7 + }, + { // Entry 14 + 0x1.bc8a3f002d49ff2fff61bbc88ca84366p-5, + 0x1.09d0p0 + }, + { // Entry 15 + 0x1.d15cfd000ba18b834668273db43a54f4p-5, + 0x1.0a48p0 + }, + { // Entry 16 + 0x1.254503fffff2c7469f0c551c58628c75p-4, + 0x1.0d0686p0 + }, + { // Entry 17 + 0x1.8972445dbe2011fbaf76774ecaa1886bp-4, + 0x1.11a0p0 + }, + { // Entry 18 + -0x1.4e0dddfffd1fadff896c773a983cb069p4, + 0x1.1684p-21 + }, + { // Entry 19 + -0x1.6d9f4300000188d5e28bf9ecd7eb48a3p1, + 0x1.1ac9bcp-3 + }, + { // Entry 20 + 0x1.3e8666fed9e0919054d1723c7bfa2a2ep-3, + 0x1.1d24p0 + }, + { // Entry 21 + -0x1.a9967dfffdea2f22e87a3d2cfb4653e0p-1, + 0x1.1fc530p-1 + }, + { // Entry 22 + -0x1.ac7b430000002b16a835260d35f73f3bp0, + 0x1.40f572p-2 + }, + { // Entry 23 + -0x1.50fd36ffff7b1fe211b2f1e467a808c6p1, + 0x1.4a37aap-3 + }, + { // Entry 24 + -0x1.68e3e700011eed1c8bdf78a5004ec845p4, + 0x1.5c5780p-23 + }, + { // Entry 25 + -0x1.14c560fe68af880e0a0f337d55565281p-1, + 0x1.60p-1 + }, + { // Entry 26 + 0x1.eee0f9e9bd541c2161fbaa601ad44f9dp-2, + 0x1.65ddfap0 + }, + { // Entry 27 + 0x1.ffff6b715e229192074dd520e800523dp-2, + 0x1.6a09c2p0 + }, + { // Entry 28 + 0x1.ffffb4e49986d923a4e540f03b1da0dap-2, + 0x1.6a09d4p0 + }, + { // Entry 29 + -0x1.000008fd564a8532198fd9c602596351p-1, + 0x1.6a09e2p-1 + }, + { // Entry 30 + -0x1.5e7df5fe538ab34efb515ac93b443d55p2, + 0x1.70p-6 + }, + { // Entry 31 + 0x1.3719d8ffda8ee27c20ca5d36ce40a19bp3, + 0x1.a63c60p9 + }, + { // Entry 32 + -0x1.95152a001cb0000297a418bc58741cd8p6, + 0x1.a86a40p-102 + }, + { // Entry 33 + -0x1.a86d52000000dde9cc8582ca6f4adf02p3, + 0x1.aa932cp-14 + }, + { // Entry 34 + -0x1.a65bf4fffdc2eb6e2bba1e155731485cp3, + 0x1.be1dacp-14 + }, + { // Entry 35 + 0x1.19e96affffe46969e091319af39bf01dp3, + 0x1.c0be08p8 + }, + { // Entry 36 + -0x1.6b2194fffbcc473e6b408598b11c0b76p-3, + 0x1.c4c990p-1 + }, + { // Entry 37 + -0x1.b0747afff09129e7c27981832371a2b7p-4, + 0x1.dbde6cp-1 + }, + { // Entry 38 + -0x1.a31d90fffdc06fa674e6c77e0d27325ep3, + 0x1.de9690p-14 + }, + { // Entry 39 + -0x1.7d61ebfff707baf0a4babc7a455fdedap-4, + 0x1.dfffdep-1 + }, + { // Entry 40 + -0x1.8be3350000129024f1746df09b18e1c0p1, + 0x1.e01448p-4 + }, + { // Entry 41 + -0x1.2dab68ffff653aa0f522110f165fc6cdp-4, + 0x1.e684aep-1 + }, + { // Entry 42 + -0x1.1ddc06ffe493eb9e838bc57f1692f071p-5, + 0x1.f3c3c0p-1 + }, + { // Entry 43 + -0x1.fe5c28b51763fd9e597b74b77eaef363p-6, + 0x1.f5104cp-1 + }, + { // Entry 44 + -0x1.fb46c8ffb297bc8b36ec72bf8f845dafp-6, + 0x1.f52108p-1 + }, + { // Entry 45 + -0x1.83a4382bc0ca76ba53a02f5c39dd1105p1, + 0x1.f600a8p-4 + }, + { // Entry 46 + -0x1.c5685effd6dc60c465f6d4566400ea1bp-6, + 0x1.f645bcp-1 + }, + { // Entry 47 + -0x1.c0daa2ffe3fde42c220d9cdd6dba636bp-6, + 0x1.f65e82p-1 + }, + { // Entry 48 + -0x1.a0ab3effb22b2baa230d01d368f486cfp-6, + 0x1.f70dbep-1 + }, + { // Entry 49 + -0x1.9993e6b5eebc60c6416982df9bf027cdp-6, + 0x1.f73462p-1 + }, + { // Entry 50 + -0x1.90db40b3d98bebe6e068b72646536233p-6, + 0x1.f763ecp-1 + }, + { // Entry 51 + -0x1.805ce6d1eec4e554c05d1277b7a61f1ep-6, + 0x1.f7bde0p-1 + }, + { // Entry 52 + -0x1.71c5270003e7400a82571e14d211b1abp-9, + 0x1.fefff2p-1 + }, + { // Entry 53 + -0x1.4fd0950000f9ea163e3b6b379b806a27p-9, + 0x1.ff1770p-1 + }, + { // Entry 54 + -0x1.802e2bfffffc33f278fa52402320f10ap1, + 0x1.ff800cp-4 + }, + { // Entry 55 + -0x1.718867c39aac5ee37685394fe9bfd749p-13, + 0x1.ffeffep-1 + }, + { // Entry 56 + -0x1.72c684e5cfc146d2275210812c0c7f68p-16, + 0x1.fffdfep-1 + }, + { // Entry 57 + -0x1.71552efd6e75c155bd4e4ed94f59a26ap-16, + 0x1.fffep-1 + }, + { // Entry 58 + -0x1.48ef5e00535d9165bbb9b9a8c056f797p-18, + 0x1.ffff8ep-1 + }, + { // Entry 59 + -0x1.71547935612438aa6af6b5495892e719p-22, + 0x1.fffff8p-1 + }, + { // Entry 60 + -0x1.715477c40ca820a04d97be4efccd95a9p-23, + 0x1.fffffcp-1 + }, + { // Entry 61 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 62 + -0x1.000000d4175ddebaa6cc9d6112365229p-1, + 0x1.6a09e6p-1 + }, + { // Entry 63 + -0x1.561462846d15350ee6248ecd4c1b002bp-2, + 0x1.962b60p-1 + }, + { // Entry 64 + -0x1.7b67dba86e896c0a53d2c939ef0d29bfp-3, + 0x1.c24cdap-1 + }, + { // Entry 65 + -0x1.9cab66c58143f2a800e68dbb02f54331p-5, + 0x1.ee6e54p-1 + }, + { // Entry 66 + 0x1.2ae054380d16d8f59673a7e3928246cdp-4, + 0x1.0d47e6p0 + }, + { // Entry 67 + 0x1.7e23503264c4ad371b8f163c4f9aef26p-3, + 0x1.2358a2p0 + }, + { // Entry 68 + 0x1.2aebb187ce6ee362d3103a2200b286e2p-2, + 0x1.39695ep0 + }, + { // Entry 69 + 0x1.8f6e7a2697b530fad3d12a9d6a8f1d3ap-2, + 0x1.4f7a1ap0 + }, + { // Entry 70 + 0x1.ed899b07eb9cb8af2c927ecf12ec7cbep-2, + 0x1.658ad6p0 + }, + { // Entry 71 + 0x1.2300cb4606615b744653e167d86f2813p-1, + 0x1.7b9b92p0 + }, + { // Entry 72 + 0x1.4cbccc36deb50dd3e00c1a4eca18d57ep-1, + 0x1.91ac4ep0 + }, + { // Entry 73 + 0x1.743d4cb7d92562e1484f862b688a46fbp-1, + 0x1.a7bd0ap0 + }, + { // Entry 74 + 0x1.99bc5947999b190ccc67cef041311282p-1, + 0x1.bdcdc6p0 + }, + { // Entry 75 + 0x1.bd6b934775bef13a6359e331efe67a11p-1, + 0x1.d3de82p0 + }, + { // Entry 76 + 0x1.df75be8ef439ce361ebbb13fff3a7b53p-1, + 0x1.e9ef3ep0 + }, + { // Entry 77 + 0x1.fffff758052d13b69dd6c8d6740a3357p-1, + 0x1.fffffap0 + }, + { // Entry 78 + -0x1.000000d4175ddebaa6cc9d6112365229p-1, + 0x1.6a09e6p-1 + }, + { // Entry 79 + -0x1.73324a9b9d2895d79d8ddf07a502bep-2, + 0x1.8e3e16p-1 + }, + { // Entry 80 + -0x1.e54e432361189c3353cc06c2dd27d736p-3, + 0x1.b27246p-1 + }, + { // Entry 81 + -0x1.f19de909d7e63fd264a2c312d0c1789dp-4, + 0x1.d6a676p-1 + }, + { // Entry 82 + -0x1.dd89b738d21d0221c908b8a0c32f1212p-7, + 0x1.fadaa6p-1 + }, + { // Entry 83 + 0x1.5c01921d594ace74709e134409d4ed24p-4, + 0x1.0f876cp0 + }, + { // Entry 84 + 0x1.6cb0eb0cc03326cfabdb68ecee7aba40p-3, + 0x1.21a184p0 + }, + { // Entry 85 + 0x1.0fe8503e467106a65788ddb3a15f5375p-2, + 0x1.33bb9cp0 + }, + { // Entry 86 + 0x1.64594511e637e6f93b5cb2912b99abedp-2, + 0x1.45d5b4p0 + }, + { // Entry 87 + 0x1.b4392815bf92113e75eb0dd2b26fd740p-2, + 0x1.57efccp0 + }, + { // Entry 88 + 0x1.fffff62e925d61652c914504dc3ee2cep-2, + 0x1.6a09e4p0 + }, + { // Entry 89 + -0x1.a8ff971810a5e1817fd3b7d7e5d148bbp-2, + 0x1.80p-1 + }, + { // Entry 90 + -0x1.1c31df37d71943eb77829a1feb37b99ap-2, + 0x1.a66666p-1 + }, + { // Entry 91 + -0x1.374d6afb125968a0c493df15bf69e438p-3, + 0x1.ccccccp-1 + }, + { // Entry 92 + -0x1.2b386cc87f9a4eee785d4a5dbce887b7p-5, + 0x1.f33332p-1 + }, + { // Entry 93 + 0x1.20507dbe3011bddb9a9b123c4341bc4cp-4, + 0x1.0cccccp0 + }, + { // Entry 94 + 0x1.5c01a39fbd6879fa00b120a068badd12p-3, + 0x1.20p0 + }, + { // Entry 95 + 0x1.0d58e803fedbad8f59d5947b2a21a425p-2, + 0x1.333334p0 + }, + { // Entry 96 + 0x1.66e8c754261d0ebda20c00ad74e85091p-2, + 0x1.466668p0 + }, + { // Entry 97 + 0x1.bb59c03d54eb4b10a384046c38ed39fdp-2, + 0x1.59999cp0 + }, + { // Entry 98 + 0x1.059cd374571eb31852640bb553677c83p-1, + 0x1.6cccd0p0 + }, + { // Entry 99 + 0x1.2b803473f7ad0f3f401624140d175ba2p-1, + 0x1.80p0 + }, + { // Entry 100 + 0.0, + 0x1.p0 + }, + { // Entry 101 + 0x1.199b76bf23e221a6231fc33bca41b607p-3, + 0x1.19999ap0 + }, + { // Entry 102 + 0x1.0d58e803fedbad8f59d5947b2a21a425p-2, + 0x1.333334p0 + }, + { // Entry 103 + 0x1.8398925fcd61fbf1aa81ef798b08bb2cp-2, + 0x1.4ccccep0 + }, + { // Entry 104 + 0x1.f113c1858de496d814a68e82919d673bp-2, + 0x1.666668p0 + }, + { // Entry 105 + 0x1.2b80384cd8e605e99a5cd99f34293888p-1, + 0x1.800002p0 + }, + { // Entry 106 + 0x1.5b2c41f5948361383f498e179a6dd347p-1, + 0x1.99999cp0 + }, + { // Entry 107 + 0x1.87f43057c707ec89ca00835fb95f66d7p-1, + 0x1.b33336p0 + }, + { // Entry 108 + 0x1.b22cabaab2c8964911abde220f5f415cp-1, + 0x1.ccccd0p0 + }, + { // Entry 109 + 0x1.da1c9dfd31a7706146ef266c16ed655dp-1, + 0x1.e6666ap0 + }, + { // Entry 110 + 0x1.p0, + 0x1.p1 + }, + { // Entry 111 + 0x1.90p6, + 0x1.p100 + }, + { // Entry 112 + 0x1.908ccdbb5f91f110d3118fe19de520dbp6, + 0x1.19999ap100 + }, + { // Entry 113 + 0x1.910d58e803fedbad8f59d5947b2a21a4p6, + 0x1.333334p100 + }, + { // Entry 114 + 0x1.918398925fcd61fbf1aa81ef798b08bbp6, + 0x1.4ccccep100 + }, + { // Entry 115 + 0x1.91f113c1858de496d814a68e82919d67p6, + 0x1.666668p100 + }, + { // Entry 116 + 0x1.9257007099b1cc0bd334b9b33e685271p6, + 0x1.800002p100 + }, + { // Entry 117 + 0x1.92b65883eb2906c2707e931c2f34dba6p6, + 0x1.99999cp100 + }, + { // Entry 118 + 0x1.930fe860af8e0fd913940106bf72becdp6, + 0x1.b33336p100 + }, + { // Entry 119 + 0x1.936459575565912c922357bc441ebe82p6, + 0x1.ccccd0p100 + }, + { // Entry 120 + 0x1.93b4393bfa634ee0c28dde4cd82ddacap6, + 0x1.e6666ap100 + }, + { // Entry 121 + 0x1.94p6, + 0x1.p101 + }, + { // Entry 122 + -0x1.715481dd5c5d93663255eca7ba82aeb6p-20, + 0x1.ffffe0p-1 + }, + { // Entry 123 + -0x1.71547c180a27f362d17a1f59be1bb55dp-21, + 0x1.fffff0p-1 + }, + { // Entry 124 + 0.0, + 0x1.p0 + }, + { // Entry 125 + 0x1.7154708d66755d9fe119ed1e85c13f40p-21, + 0x1.000008p0 + }, + { // Entry 126 + 0x1.71546ac814f867d7a99ac240f177d35fp-20, + 0x1.000010p0 + }, + { // Entry 127 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 128 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 129 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 130 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 131 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 132 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 133 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 134 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 135 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 136 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 137 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 138 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 139 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 140 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 141 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 142 + 0x1.fffffffa3aae23d27651e8410cc825cbp6, + 0x1.fffffep127 + }, + { // Entry 143 + -0x1.2ap7, + 0x1.p-149 + }, + { // Entry 144 + -0x1.000004e8b6d14f4d69b75d7d91e08e98p-1, + 0x1.6a09e4p-1 + }, + { // Entry 145 + -0x1.000000d4175ddebaa6cc9d6112365229p-1, + 0x1.6a09e6p-1 + }, + { // Entry 146 + -0x1.fffff97eefe066f380fa3704987b9811p-2, + 0x1.6a09e8p-1 + }, + { // Entry 147 + 0x1.fffff62e925d61652c914504dc3ee2cep-2, + 0x1.6a09e4p0 + }, + { // Entry 148 + 0x1.fffffe57d144428ab266c53ddb935bacp-2, + 0x1.6a09e6p0 + }, + { // Entry 149 + 0x1.00000340880fcc863f82e47db3c233f7p-1, + 0x1.6a09e8p0 + }, + { // Entry 150 + -0x1.0000017154770b626b85efbccdf68d2ep0, + 0x1.fffffep-2 + }, + { // Entry 151 + -0x1.p0, + 0x1.p-1 + }, + { // Entry 152 + -0x1.fffffa3aae2c7a711213405fc20a11b8p-1, + 0x1.000002p-1 + }, + { // Entry 153 + -0x1.a8ff9ec9d322112ed31f244bceb1ec85p-2, + 0x1.7ffffep-1 + }, + { // Entry 154 + -0x1.a8ff971810a5e1817fd3b7d7e5d148bbp-2, + 0x1.80p-1 + }, + { // Entry 155 + -0x1.a8ff8f664e33f42ccb464cc197ad8eefp-2, + 0x1.800002p-1 + }, + { // Entry 156 + 0x1.2b80309b166ef76896706dda18a709bdp-1, + 0x1.7ffffep0 + }, + { // Entry 157 + 0x1.2b803473f7ad0f3f401624140d175ba2p-1, + 0x1.80p0 + }, + { // Entry 158 + 0x1.2b80384cd8e605e99a5cd99f34293888p-1, + 0x1.800002p0 + }, + { // Entry 159 + 0x1.ebc51464ccd66f10e7d234a2a0ce225fp-9, + 0x1.00aaa8p0 + }, + { // Entry 160 + 0x1.ebcad5e05d58c6ddfd6c09c193fb3e3ep-9, + 0x1.00aaaap0 + }, + { // Entry 161 + 0x1.ebd0975be25fcf1843facabaa7aa7b51p-9, + 0x1.00aaacp0 + }, + { // Entry 162 + 0x1.fffffe8eab88f49d947a1043320972d1p0, + 0x1.fffffep1 + }, + { // Entry 163 + 0x1.p1, + 0x1.p2 + }, + { // Entry 164 + 0x1.000001715474e163bb7b2fe80f7d7b91p1, + 0x1.000002p2 + }, + { // Entry 165 + 0x1.fffffd1d5711e93b28f420866412e5a2p-1, + 0x1.fffffep0 + }, + { // Entry 166 + 0x1.p0, + 0x1.p1 + }, + { // Entry 167 + 0x1.000002e2a8e9c2c776f65fd01efaf723p0, + 0x1.000002p1 + }, + { // Entry 168 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 169 + 0.0, + 0x1.p0 + }, + { // Entry 170 + 0x1.715474e163bb7b2fe80f7d7b91f1851cp-23, + 0x1.000002p0 + }, + { // Entry 171 + -0x1.0000017154770b626b85efbccdf68d2ep0, + 0x1.fffffep-2 + }, + { // Entry 172 + -0x1.p0, + 0x1.p-1 + }, + { // Entry 173 + -0x1.fffffa3aae2c7a711213405fc20a11b8p-1, + 0x1.000002p-1 + }, + { // Entry 174 + -0x1.000000b8aa3b85b135c2f7de66fb4697p1, + 0x1.fffffep-3 + }, + { // Entry 175 + -0x1.p1, + 0x1.p-2 + }, + { // Entry 176 + -0x1.fffffd1d57163d388909a02fe10508dcp0, + 0x1.000002p-2 + }, + { // Entry 177 + -0x1.800000b8aa3b85b135c2f7de66fb4697p1, + 0x1.fffffep-4 + }, + { // Entry 178 + -0x1.80p1, + 0x1.p-3 + }, + { // Entry 179 + -0x1.7ffffe8eab8b1e9c4484d017f082846ep1, + 0x1.000002p-3 + }, + { // Entry 180 + -0x1.0000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-5 + }, + { // Entry 181 + -0x1.p2, + 0x1.p-4 + }, + { // Entry 182 + -0x1.fffffe8eab8b1e9c4484d017f082846ep1, + 0x1.000002p-4 + }, + { // Entry 183 + -0x1.4000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-6 + }, + { // Entry 184 + -0x1.40p2, + 0x1.p-5 + }, + { // Entry 185 + -0x1.3fffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-5 + }, + { // Entry 186 + -0x1.8000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-7 + }, + { // Entry 187 + -0x1.80p2, + 0x1.p-6 + }, + { // Entry 188 + -0x1.7fffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-6 + }, + { // Entry 189 + -0x1.c000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-8 + }, + { // Entry 190 + -0x1.c0p2, + 0x1.p-7 + }, + { // Entry 191 + -0x1.bfffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-7 + }, + { // Entry 192 + -0x1.0000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-9 + }, + { // Entry 193 + -0x1.p3, + 0x1.p-8 + }, + { // Entry 194 + -0x1.ffffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-8 + }, + { // Entry 195 + -0x1.2000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-10 + }, + { // Entry 196 + -0x1.20p3, + 0x1.p-9 + }, + { // Entry 197 + -0x1.1fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-9 + }, + { // Entry 198 + -0x1.4000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-11 + }, + { // Entry 199 + -0x1.40p3, + 0x1.p-10 + }, + { // Entry 200 + -0x1.3fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-10 + }, + { // Entry 201 + -0x1.a000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-14 + }, + { // Entry 202 + -0x1.a0p3, + 0x1.p-13 + }, + { // Entry 203 + -0x1.9fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-13 + }, + { // Entry 204 + -0x1.a000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-14 + }, + { // Entry 205 + -0x1.a0p3, + 0x1.p-13 + }, + { // Entry 206 + -0x1.9fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-13 + }, + { // Entry 207 + -0x1.800000b8aa3b85b135c2f7de66fb4697p1, + 0x1.fffffep-4 + }, + { // Entry 208 + -0x1.80p1, + 0x1.p-3 + }, + { // Entry 209 + -0x1.7ffffe8eab8b1e9c4484d017f082846ep1, + 0x1.000002p-3 + }, + { // Entry 210 + -0x1.8a898ddcb6efed6595efafc5e077a1cbp-3, + 0x1.bffffep-1 + }, + { // Entry 211 + -0x1.8a8980abfbd32666a9b7e2df60d2bdc6p-3, + 0x1.c0p-1 + }, + { // Entry 212 + -0x1.8a89737b40c57286b134031126c9c7edp-3, + 0x1.c00002p-1 + }, + { // Entry 213 + -0x1.0000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-5 + }, + { // Entry 214 + -0x1.p2, + 0x1.p-4 + }, + { // Entry 215 + -0x1.fffffe8eab8b1e9c4484d017f082846ep1, + 0x1.000002p-4 + }, + { // Entry 216 + -0x1.7d60620c36d87cfcd8babf751edc0c8bp-4, + 0x1.dffffep-1 + }, + { // Entry 217 + -0x1.7d60496cfbb4c673b4511f8c2b4e4fb7p-4, + 0x1.e0p-1 + }, + { // Entry 218 + -0x1.7d6030cdc0ab535cca1fd50552237b1ep-4, + 0x1.e00002p-1 + }, + { // Entry 219 + -0x1.4000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-6 + }, + { // Entry 220 + -0x1.40p2, + 0x1.p-5 + }, + { // Entry 221 + -0x1.3fffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-5 + }, + { // Entry 222 + -0x1.77397c4562d9e54641f615a6ca2b27bap-5, + 0x1.effffep-1 + }, + { // Entry 223 + -0x1.77394c9d958d55de5c380fe0871d757fp-5, + 0x1.f0p-1 + }, + { // Entry 224 + -0x1.77391cf5c871f7ce6a0d60c3fcc8c0a3p-5, + 0x1.f00002p-1 + }, + { // Entry 225 + -0x1.8000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-7 + }, + { // Entry 226 + -0x1.80p2, + 0x1.p-6 + }, + { // Entry 227 + -0x1.7fffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-6 + }, + { // Entry 228 + -0x1.743f462e4254f5e2be25b8506028d08ap-6, + 0x1.f7fffep-1 + }, + { // Entry 229 + -0x1.743ee861f3556365483611f7c0bf059fp-6, + 0x1.f8p-1 + }, + { // Entry 230 + -0x1.743e8a95a4b51a5c74be0d5ae65aab1bp-6, + 0x1.f80002p-1 + }, + { // Entry 231 + -0x1.c000005c551dc2d89ae17bef337da34bp2, + 0x1.fffffep-8 + }, + { // Entry 232 + -0x1.c0p2, + 0x1.p-7 + }, + { // Entry 233 + -0x1.bfffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-7 + }, + { // Entry 234 + -0x1.72c8743f6fa9cfbe1e287ad19aca6d67p-7, + 0x1.fbfffep-1 + }, + { // Entry 235 + -0x1.72c7ba20f73275b5d184a2c615b70ad4p-7, + 0x1.fcp-1 + }, + { // Entry 236 + -0x1.72c700027f76b150e530a12360d1566ap-7, + 0x1.fc0002p-1 + }, + { // Entry 237 + -0x1.0000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-9 + }, + { // Entry 238 + -0x1.p3, + 0x1.p-8 + }, + { // Entry 239 + -0x1.ffffff4755c58f4e2242680bf8414237p2, + 0x1.000002p-8 + }, + { // Entry 240 + -0x1.720f0ecde68050a44c9a2eb30002eb02p-8, + 0x1.fdfffep-1 + }, + { // Entry 241 + -0x1.720d9c06a835ea6ef18f977e5d8a37abp-8, + 0x1.fep-1 + }, + { // Entry 242 + -0x1.720c293f6b5fbfb29fd6cb29447e6957p-8, + 0x1.fe0002p-1 + }, + { // Entry 243 + -0x1.2000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-10 + }, + { // Entry 244 + -0x1.20p3, + 0x1.p-9 + }, + { // Entry 245 + -0x1.1fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-9 + }, + { // Entry 246 + -0x1.71b3ce5de192eae3e822586249ef1031p-9, + 0x1.fefffep-1 + }, + { // Entry 247 + -0x1.71b0ea42e5fda261dbbd1a498f533398p-9, + 0x1.ffp-1 + }, + { // Entry 248 + -0x1.71ae0627ed4de7a0d25affc95a315118p-9, + 0x1.ff0002p-1 + }, + { // Entry 249 + -0x1.4000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-11 + }, + { // Entry 250 + -0x1.40p3, + 0x1.p-10 + }, + { // Entry 251 + -0x1.3fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-10 + }, + { // Entry 252 + -0x1.71886f5843ade047bd2d072e96484a61p-10, + 0x1.ff7ffep-1 + }, + { // Entry 253 + -0x1.7182a894b69c595f7920cea1619c6e57p-10, + 0x1.ff80p-1 + }, + { // Entry 254 + -0x1.717ce1d12f53080ec86587c1ed76029bp-10, + 0x1.ff8002p-1 + }, + { // Entry 255 + -0x1.a000002e2a8ee16c4d70bdf799bed1a5p3, + 0x1.fffffep-14 + }, + { // Entry 256 + -0x1.a0p3, + 0x1.p-13 + }, + { // Entry 257 + -0x1.9fffffa3aae2c7a711213405fc20a11bp3, + 0x1.000002p-13 + }, + { // Entry 258 + -0x1.718867c39aac5ee37685394fe9bfd749p-13, + 0x1.ffeffep-1 + }, + { // Entry 259 + -0x1.715a3bc3593d4d4a2a239745f6427420p-13, + 0x1.fff0p-1 + }, + { // Entry 260 + -0x1.712c0fc345fbad46c2c9f3884df7233ep-13, + 0x1.fff002p-1 + }, + { // Entry 261 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 262 + 0x1.fffffffa3aae23d27651e8410cc825cbp6, + 0x1.fffffep127 + }, + { // Entry 263 + 0x1.fffffff4755c41df9abefafd93420d88p6, + 0x1.fffffcp127 + }, + { // Entry 264 + 0x1.a6c873f5fb93d2711418c769ccf4818ap0, + 0x1.921fb6p1 + }, + { // Entry 265 + 0x1.4d90e7ebf727a4e228318ed399e90315p-1, + 0x1.921fb6p0 + }, + { // Entry 266 + 0x1.715474e163bb7b2fe80f7d7b91f1851cp-23, + 0x1.000002p0 + }, + { // Entry 267 + 0.0, + 0x1.p0 + }, + { // Entry 268 + -0x1.7154770b626b85efbccdf68d2e9789f9p-24, + 0x1.fffffep-1 + }, + { // Entry 269 + -0x1.64de302811b0b63baf9ce258cc2df9d5p-2, + 0x1.921fb6p-1 + }, + { // Entry 270 + -0x1.f7fffff4755c58f4e2242680bf841423p6, + 0x1.000002p-126 + }, + { // Entry 271 + -0x1.f8p6, + 0x1.p-126 + }, + { // Entry 272 + -0x1.f800000b8aa3be20654105026cbdf277p6, + 0x1.fffffcp-127 + }, + { // Entry 273 + -0x1.f80000171547935612438aa6af6b5495p6, + 0x1.fffff8p-127 + }, + { // Entry 274 + -0x1.28p7, + 0x1.p-148 + }, + { // Entry 275 + -0x1.2ap7, + 0x1.p-149 + }, + { // Entry 276 + -HUGE_VALF, + 0.0f + }, + { // Entry 277 + -HUGE_VALF, + -0.0f + }, + { // Entry 278 + 0x1.f4p6, + 0x1.p125 + }, + { // Entry 279 + -0x1.fcp6, + 0x1.p-127 + }, + { // Entry 280 + 0x1.p0, + 0x1.p1 + }, + { // Entry 281 + 0x1.p1, + 0x1.p2 + }, + { // Entry 282 + -0x1.p0, + 0x1.p-1 + } +}; diff --git a/tests/math_log_intel_data.h b/tests/math_data/log_intel_data.h similarity index 100% rename from tests/math_log_intel_data.h rename to tests/math_data/log_intel_data.h diff --git a/tests/math_data/logb_intel_data.h b/tests/math_data/logb_intel_data.h new file mode 100644 index 000000000..4657014bf --- /dev/null +++ b/tests/math_data/logb_intel_data.h @@ -0,0 +1,898 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_logb_intel_data[] = { + { // Entry 0 + -0x1.0c80p10, + -0x1.0p-1074 + }, + { // Entry 1 + -0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 2 + 0x1.90p6, + 0x1.0p100 + }, + { // Entry 3 + 0x1.90p6, + 0x1.199999999999ap100 + }, + { // Entry 4 + 0x1.90p6, + 0x1.3333333333334p100 + }, + { // Entry 5 + 0x1.90p6, + 0x1.4cccccccccccep100 + }, + { // Entry 6 + 0x1.90p6, + 0x1.6666666666668p100 + }, + { // Entry 7 + 0x1.90p6, + 0x1.8000000000002p100 + }, + { // Entry 8 + 0x1.90p6, + 0x1.999999999999cp100 + }, + { // Entry 9 + 0x1.90p6, + 0x1.b333333333336p100 + }, + { // Entry 10 + 0x1.90p6, + 0x1.cccccccccccd0p100 + }, + { // Entry 11 + 0x1.90p6, + 0x1.e66666666666ap100 + }, + { // Entry 12 + 0x1.94p6, + 0x1.0p101 + }, + { // Entry 13 + 0x1.90p7, + 0x1.0p200 + }, + { // Entry 14 + 0x1.90p7, + 0x1.199999999999ap200 + }, + { // Entry 15 + 0x1.90p7, + 0x1.3333333333334p200 + }, + { // Entry 16 + 0x1.90p7, + 0x1.4cccccccccccep200 + }, + { // Entry 17 + 0x1.90p7, + 0x1.6666666666668p200 + }, + { // Entry 18 + 0x1.90p7, + 0x1.8000000000002p200 + }, + { // Entry 19 + 0x1.90p7, + 0x1.999999999999cp200 + }, + { // Entry 20 + 0x1.90p7, + 0x1.b333333333336p200 + }, + { // Entry 21 + 0x1.90p7, + 0x1.cccccccccccd0p200 + }, + { // Entry 22 + 0x1.90p7, + 0x1.e66666666666ap200 + }, + { // Entry 23 + 0x1.92p7, + 0x1.0p201 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.0p1000 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.199999999999ap1000 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.3333333333334p1000 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.4cccccccccccep1000 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.6666666666668p1000 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.8000000000002p1000 + }, + { // Entry 30 + 0x1.f4p9, + 0x1.999999999999cp1000 + }, + { // Entry 31 + 0x1.f4p9, + 0x1.b333333333336p1000 + }, + { // Entry 32 + 0x1.f4p9, + 0x1.cccccccccccd0p1000 + }, + { // Entry 33 + 0x1.f4p9, + 0x1.e66666666666ap1000 + }, + { // Entry 34 + 0x1.f480p9, + 0x1.0p1001 + }, + { // Entry 35 + 0x1.94p6, + -0x1.0p101 + }, + { // Entry 36 + 0x1.90p6, + -0x1.e666666666666p100 + }, + { // Entry 37 + 0x1.90p6, + -0x1.cccccccccccccp100 + }, + { // Entry 38 + 0x1.90p6, + -0x1.b333333333332p100 + }, + { // Entry 39 + 0x1.90p6, + -0x1.9999999999998p100 + }, + { // Entry 40 + 0x1.90p6, + -0x1.7fffffffffffep100 + }, + { // Entry 41 + 0x1.90p6, + -0x1.6666666666664p100 + }, + { // Entry 42 + 0x1.90p6, + -0x1.4cccccccccccap100 + }, + { // Entry 43 + 0x1.90p6, + -0x1.3333333333330p100 + }, + { // Entry 44 + 0x1.90p6, + -0x1.1999999999996p100 + }, + { // Entry 45 + 0x1.90p6, + -0x1.0p100 + }, + { // Entry 46 + 0x1.92p7, + -0x1.0p201 + }, + { // Entry 47 + 0x1.90p7, + -0x1.e666666666666p200 + }, + { // Entry 48 + 0x1.90p7, + -0x1.cccccccccccccp200 + }, + { // Entry 49 + 0x1.90p7, + -0x1.b333333333332p200 + }, + { // Entry 50 + 0x1.90p7, + -0x1.9999999999998p200 + }, + { // Entry 51 + 0x1.90p7, + -0x1.7fffffffffffep200 + }, + { // Entry 52 + 0x1.90p7, + -0x1.6666666666664p200 + }, + { // Entry 53 + 0x1.90p7, + -0x1.4cccccccccccap200 + }, + { // Entry 54 + 0x1.90p7, + -0x1.3333333333330p200 + }, + { // Entry 55 + 0x1.90p7, + -0x1.1999999999996p200 + }, + { // Entry 56 + 0x1.90p7, + -0x1.0p200 + }, + { // Entry 57 + 0x1.f480p9, + -0x1.0p1001 + }, + { // Entry 58 + 0x1.f4p9, + -0x1.e666666666666p1000 + }, + { // Entry 59 + 0x1.f4p9, + -0x1.cccccccccccccp1000 + }, + { // Entry 60 + 0x1.f4p9, + -0x1.b333333333332p1000 + }, + { // Entry 61 + 0x1.f4p9, + -0x1.9999999999998p1000 + }, + { // Entry 62 + 0x1.f4p9, + -0x1.7fffffffffffep1000 + }, + { // Entry 63 + 0x1.f4p9, + -0x1.6666666666664p1000 + }, + { // Entry 64 + 0x1.f4p9, + -0x1.4cccccccccccap1000 + }, + { // Entry 65 + 0x1.f4p9, + -0x1.3333333333330p1000 + }, + { // Entry 66 + 0x1.f4p9, + -0x1.1999999999996p1000 + }, + { // Entry 67 + 0x1.f4p9, + -0x1.0p1000 + }, + { // Entry 68 + 0x1.90p5, + 0x1.0p50 + }, + { // Entry 69 + 0x1.90p5, + 0x1.199999999999ap50 + }, + { // Entry 70 + 0x1.90p5, + 0x1.3333333333334p50 + }, + { // Entry 71 + 0x1.90p5, + 0x1.4cccccccccccep50 + }, + { // Entry 72 + 0x1.90p5, + 0x1.6666666666668p50 + }, + { // Entry 73 + 0x1.90p5, + 0x1.8000000000002p50 + }, + { // Entry 74 + 0x1.90p5, + 0x1.999999999999cp50 + }, + { // Entry 75 + 0x1.90p5, + 0x1.b333333333336p50 + }, + { // Entry 76 + 0x1.90p5, + 0x1.cccccccccccd0p50 + }, + { // Entry 77 + 0x1.90p5, + 0x1.e66666666666ap50 + }, + { // Entry 78 + 0x1.98p5, + 0x1.0p51 + }, + { // Entry 79 + 0x1.98p5, + 0x1.0p51 + }, + { // Entry 80 + 0x1.98p5, + 0x1.199999999999ap51 + }, + { // Entry 81 + 0x1.98p5, + 0x1.3333333333334p51 + }, + { // Entry 82 + 0x1.98p5, + 0x1.4cccccccccccep51 + }, + { // Entry 83 + 0x1.98p5, + 0x1.6666666666668p51 + }, + { // Entry 84 + 0x1.98p5, + 0x1.8000000000002p51 + }, + { // Entry 85 + 0x1.98p5, + 0x1.999999999999cp51 + }, + { // Entry 86 + 0x1.98p5, + 0x1.b333333333336p51 + }, + { // Entry 87 + 0x1.98p5, + 0x1.cccccccccccd0p51 + }, + { // Entry 88 + 0x1.98p5, + 0x1.e66666666666ap51 + }, + { // Entry 89 + 0x1.a0p5, + 0x1.0p52 + }, + { // Entry 90 + 0x1.a0p5, + 0x1.0p52 + }, + { // Entry 91 + 0x1.a0p5, + 0x1.199999999999ap52 + }, + { // Entry 92 + 0x1.a0p5, + 0x1.3333333333334p52 + }, + { // Entry 93 + 0x1.a0p5, + 0x1.4cccccccccccep52 + }, + { // Entry 94 + 0x1.a0p5, + 0x1.6666666666668p52 + }, + { // Entry 95 + 0x1.a0p5, + 0x1.8000000000002p52 + }, + { // Entry 96 + 0x1.a0p5, + 0x1.999999999999cp52 + }, + { // Entry 97 + 0x1.a0p5, + 0x1.b333333333336p52 + }, + { // Entry 98 + 0x1.a0p5, + 0x1.cccccccccccd0p52 + }, + { // Entry 99 + 0x1.a0p5, + 0x1.e66666666666ap52 + }, + { // Entry 100 + 0x1.a8p5, + 0x1.0p53 + }, + { // Entry 101 + 0x1.a8p5, + 0x1.0p53 + }, + { // Entry 102 + 0x1.a8p5, + 0x1.199999999999ap53 + }, + { // Entry 103 + 0x1.a8p5, + 0x1.3333333333334p53 + }, + { // Entry 104 + 0x1.a8p5, + 0x1.4cccccccccccep53 + }, + { // Entry 105 + 0x1.a8p5, + 0x1.6666666666668p53 + }, + { // Entry 106 + 0x1.a8p5, + 0x1.8000000000002p53 + }, + { // Entry 107 + 0x1.a8p5, + 0x1.999999999999cp53 + }, + { // Entry 108 + 0x1.a8p5, + 0x1.b333333333336p53 + }, + { // Entry 109 + 0x1.a8p5, + 0x1.cccccccccccd0p53 + }, + { // Entry 110 + 0x1.a8p5, + 0x1.e66666666666ap53 + }, + { // Entry 111 + 0x1.b0p5, + 0x1.0p54 + }, + { // Entry 112 + -0x1.0080p10, + 0x1.0p-1026 + }, + { // Entry 113 + -0x1.p10, + 0x1.d333333333334p-1024 + }, + { // Entry 114 + -0x1.ff80p9, + 0x1.b333333333334p-1023 + }, + { // Entry 115 + -0x1.ffp9, + 0x1.3e66666666667p-1022 + }, + { // Entry 116 + -0x1.ffp9, + 0x1.a333333333334p-1022 + }, + { // Entry 117 + -0x1.fe80p9, + 0x1.040p-1021 + }, + { // Entry 118 + -0x1.fe80p9, + 0x1.3666666666666p-1021 + }, + { // Entry 119 + -0x1.fe80p9, + 0x1.68cccccccccccp-1021 + }, + { // Entry 120 + -0x1.fe80p9, + 0x1.9b33333333332p-1021 + }, + { // Entry 121 + -0x1.fe80p9, + 0x1.cd99999999998p-1021 + }, + { // Entry 122 + -0x1.fe80p9, + 0x1.ffffffffffffep-1021 + }, + { // Entry 123 + 0x1.90p5, + 0x1.fffffffffffffp50 + }, + { // Entry 124 + 0x1.98p5, + 0x1.0p51 + }, + { // Entry 125 + 0x1.98p5, + 0x1.0000000000001p51 + }, + { // Entry 126 + 0x1.98p5, + 0x1.fffffffffffffp51 + }, + { // Entry 127 + 0x1.a0p5, + 0x1.0p52 + }, + { // Entry 128 + 0x1.a0p5, + 0x1.0000000000001p52 + }, + { // Entry 129 + 0x1.a0p5, + 0x1.fffffffffffffp52 + }, + { // Entry 130 + 0x1.a8p5, + 0x1.0p53 + }, + { // Entry 131 + 0x1.a8p5, + 0x1.0000000000001p53 + }, + { // Entry 132 + 0x1.98p5, + -0x1.0000000000001p51 + }, + { // Entry 133 + 0x1.98p5, + -0x1.0p51 + }, + { // Entry 134 + 0x1.90p5, + -0x1.fffffffffffffp50 + }, + { // Entry 135 + 0x1.a0p5, + -0x1.0000000000001p52 + }, + { // Entry 136 + 0x1.a0p5, + -0x1.0p52 + }, + { // Entry 137 + 0x1.98p5, + -0x1.fffffffffffffp51 + }, + { // Entry 138 + 0x1.a8p5, + -0x1.0000000000001p53 + }, + { // Entry 139 + 0x1.a8p5, + -0x1.0p53 + }, + { // Entry 140 + 0x1.a0p5, + -0x1.fffffffffffffp52 + }, + { // Entry 141 + 0x1.ff80p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 142 + 0x1.ff80p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 143 + -0x1.c0p2, + 0x1.fffffffffffffp-7 + }, + { // Entry 144 + -0x1.80p2, + 0x1.0p-6 + }, + { // Entry 145 + -0x1.80p2, + 0x1.0000000000001p-6 + }, + { // Entry 146 + -0x1.80p2, + 0x1.fffffffffffffp-6 + }, + { // Entry 147 + -0x1.40p2, + 0x1.0p-5 + }, + { // Entry 148 + -0x1.40p2, + 0x1.0000000000001p-5 + }, + { // Entry 149 + -0x1.40p2, + 0x1.fffffffffffffp-5 + }, + { // Entry 150 + -0x1.p2, + 0x1.0p-4 + }, + { // Entry 151 + -0x1.p2, + 0x1.0000000000001p-4 + }, + { // Entry 152 + -0x1.p2, + 0x1.fffffffffffffp-4 + }, + { // Entry 153 + -0x1.80p1, + 0x1.0p-3 + }, + { // Entry 154 + -0x1.80p1, + 0x1.0000000000001p-3 + }, + { // Entry 155 + -0x1.80p1, + 0x1.fffffffffffffp-3 + }, + { // Entry 156 + -0x1.p1, + 0x1.0p-2 + }, + { // Entry 157 + -0x1.p1, + 0x1.0000000000001p-2 + }, + { // Entry 158 + -0x1.p1, + 0x1.fffffffffffffp-2 + }, + { // Entry 159 + -0x1.p0, + 0x1.0p-1 + }, + { // Entry 160 + -0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 161 + -0x1.0c80p10, + -0x1.0p-1074 + }, + { // Entry 162 + -HUGE_VAL, + -0.0 + }, + { // Entry 163 + -0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 164 + -0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 165 + 0.0, + 0x1.0p0 + }, + { // Entry 166 + 0.0, + 0x1.0000000000001p0 + }, + { // Entry 167 + 0.0, + 0x1.fffffffffffffp0 + }, + { // Entry 168 + 0x1.p0, + 0x1.0p1 + }, + { // Entry 169 + 0x1.p0, + 0x1.0000000000001p1 + }, + { // Entry 170 + 0x1.p0, + 0x1.fffffffffffffp1 + }, + { // Entry 171 + 0x1.p1, + 0x1.0p2 + }, + { // Entry 172 + 0x1.p1, + 0x1.0000000000001p2 + }, + { // Entry 173 + 0x1.p1, + 0x1.fffffffffffffp2 + }, + { // Entry 174 + 0x1.80p1, + 0x1.0p3 + }, + { // Entry 175 + 0x1.80p1, + 0x1.0000000000001p3 + }, + { // Entry 176 + 0x1.80p1, + 0x1.fffffffffffffp3 + }, + { // Entry 177 + 0x1.p2, + 0x1.0p4 + }, + { // Entry 178 + 0x1.p2, + 0x1.0000000000001p4 + }, + { // Entry 179 + 0x1.p2, + 0x1.fffffffffffffp4 + }, + { // Entry 180 + 0x1.40p2, + 0x1.0p5 + }, + { // Entry 181 + 0x1.40p2, + 0x1.0000000000001p5 + }, + { // Entry 182 + 0x1.40p2, + 0x1.fffffffffffffp5 + }, + { // Entry 183 + 0x1.80p2, + 0x1.0p6 + }, + { // Entry 184 + 0x1.80p2, + 0x1.0000000000001p6 + }, + { // Entry 185 + 0x1.80p2, + 0x1.fffffffffffffp6 + }, + { // Entry 186 + 0x1.c0p2, + 0x1.0p7 + }, + { // Entry 187 + 0x1.c0p2, + 0x1.0000000000001p7 + }, + { // Entry 188 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 189 + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 190 + 0x1.ff80p9, + 0x1.fffffffffffffp1023 + }, + { // Entry 191 + 0x1.ff80p9, + -0x1.fffffffffffffp1023 + }, + { // Entry 192 + 0x1.ff80p9, + 0x1.ffffffffffffep1023 + }, + { // Entry 193 + 0x1.ff80p9, + -0x1.ffffffffffffep1023 + }, + { // Entry 194 + 0x1.p0, + 0x1.921fb54442d18p1 + }, + { // Entry 195 + 0x1.p0, + -0x1.921fb54442d18p1 + }, + { // Entry 196 + 0.0, + 0x1.921fb54442d18p0 + }, + { // Entry 197 + 0.0, + -0x1.921fb54442d18p0 + }, + { // Entry 198 + 0.0, + 0x1.0000000000001p0 + }, + { // Entry 199 + 0.0, + -0x1.0000000000001p0 + }, + { // Entry 200 + 0.0, + 0x1.0p0 + }, + { // Entry 201 + 0.0, + -0x1.0p0 + }, + { // Entry 202 + -0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 203 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 204 + -0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 205 + -0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 206 + -0x1.ffp9, + 0x1.0000000000001p-1022 + }, + { // Entry 207 + -0x1.ffp9, + -0x1.0000000000001p-1022 + }, + { // Entry 208 + -0x1.ffp9, + 0x1.0p-1022 + }, + { // Entry 209 + -0x1.ffp9, + -0x1.0p-1022 + }, + { // Entry 210 + -0x1.ff80p9, + 0x1.ffffffffffffep-1023 + }, + { // Entry 211 + -0x1.ff80p9, + -0x1.ffffffffffffep-1023 + }, + { // Entry 212 + -0x1.ff80p9, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 213 + -0x1.ff80p9, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 214 + -0x1.0c40p10, + 0x1.0p-1073 + }, + { // Entry 215 + -0x1.0c40p10, + -0x1.0p-1073 + }, + { // Entry 216 + -0x1.0c80p10, + 0x1.0p-1074 + }, + { // Entry 217 + -0x1.0c80p10, + -0x1.0p-1074 + }, + { // Entry 218 + -HUGE_VAL, + 0.0 + }, + { // Entry 219 + -HUGE_VAL, + -0.0 + } +}; diff --git a/tests/math_data/logbf_intel_data.h b/tests/math_data/logbf_intel_data.h new file mode 100644 index 000000000..1ad3c035b --- /dev/null +++ b/tests/math_data/logbf_intel_data.h @@ -0,0 +1,714 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_logbf_intel_data[] = { + { // Entry 0 + 0x1.90p6, + 0x1.p100 + }, + { // Entry 1 + 0x1.90p6, + 0x1.19999ap100 + }, + { // Entry 2 + 0x1.90p6, + 0x1.333334p100 + }, + { // Entry 3 + 0x1.90p6, + 0x1.4ccccep100 + }, + { // Entry 4 + 0x1.90p6, + 0x1.666668p100 + }, + { // Entry 5 + 0x1.90p6, + 0x1.800002p100 + }, + { // Entry 6 + 0x1.90p6, + 0x1.99999cp100 + }, + { // Entry 7 + 0x1.90p6, + 0x1.b33336p100 + }, + { // Entry 8 + 0x1.90p6, + 0x1.ccccd0p100 + }, + { // Entry 9 + 0x1.90p6, + 0x1.e6666ap100 + }, + { // Entry 10 + 0x1.94p6, + 0x1.p101 + }, + { // Entry 11 + 0x1.94p6, + -0x1.p101 + }, + { // Entry 12 + 0x1.90p6, + -0x1.e66666p100 + }, + { // Entry 13 + 0x1.90p6, + -0x1.ccccccp100 + }, + { // Entry 14 + 0x1.90p6, + -0x1.b33332p100 + }, + { // Entry 15 + 0x1.90p6, + -0x1.999998p100 + }, + { // Entry 16 + 0x1.90p6, + -0x1.7ffffep100 + }, + { // Entry 17 + 0x1.90p6, + -0x1.666664p100 + }, + { // Entry 18 + 0x1.90p6, + -0x1.4ccccap100 + }, + { // Entry 19 + 0x1.90p6, + -0x1.333330p100 + }, + { // Entry 20 + 0x1.90p6, + -0x1.199996p100 + }, + { // Entry 21 + 0x1.90p6, + -0x1.p100 + }, + { // Entry 22 + 0x1.50p4, + 0x1.p21 + }, + { // Entry 23 + 0x1.50p4, + 0x1.19999ap21 + }, + { // Entry 24 + 0x1.50p4, + 0x1.333334p21 + }, + { // Entry 25 + 0x1.50p4, + 0x1.4ccccep21 + }, + { // Entry 26 + 0x1.50p4, + 0x1.666668p21 + }, + { // Entry 27 + 0x1.50p4, + 0x1.800002p21 + }, + { // Entry 28 + 0x1.50p4, + 0x1.99999cp21 + }, + { // Entry 29 + 0x1.50p4, + 0x1.b33336p21 + }, + { // Entry 30 + 0x1.50p4, + 0x1.ccccd0p21 + }, + { // Entry 31 + 0x1.50p4, + 0x1.e6666ap21 + }, + { // Entry 32 + 0x1.60p4, + 0x1.p22 + }, + { // Entry 33 + 0x1.60p4, + 0x1.p22 + }, + { // Entry 34 + 0x1.60p4, + 0x1.19999ap22 + }, + { // Entry 35 + 0x1.60p4, + 0x1.333334p22 + }, + { // Entry 36 + 0x1.60p4, + 0x1.4ccccep22 + }, + { // Entry 37 + 0x1.60p4, + 0x1.666668p22 + }, + { // Entry 38 + 0x1.60p4, + 0x1.800002p22 + }, + { // Entry 39 + 0x1.60p4, + 0x1.99999cp22 + }, + { // Entry 40 + 0x1.60p4, + 0x1.b33336p22 + }, + { // Entry 41 + 0x1.60p4, + 0x1.ccccd0p22 + }, + { // Entry 42 + 0x1.60p4, + 0x1.e6666ap22 + }, + { // Entry 43 + 0x1.70p4, + 0x1.p23 + }, + { // Entry 44 + 0x1.70p4, + 0x1.p23 + }, + { // Entry 45 + 0x1.70p4, + 0x1.19999ap23 + }, + { // Entry 46 + 0x1.70p4, + 0x1.333334p23 + }, + { // Entry 47 + 0x1.70p4, + 0x1.4ccccep23 + }, + { // Entry 48 + 0x1.70p4, + 0x1.666668p23 + }, + { // Entry 49 + 0x1.70p4, + 0x1.800002p23 + }, + { // Entry 50 + 0x1.70p4, + 0x1.99999cp23 + }, + { // Entry 51 + 0x1.70p4, + 0x1.b33336p23 + }, + { // Entry 52 + 0x1.70p4, + 0x1.ccccd0p23 + }, + { // Entry 53 + 0x1.70p4, + 0x1.e6666ap23 + }, + { // Entry 54 + 0x1.80p4, + 0x1.p24 + }, + { // Entry 55 + 0x1.80p4, + 0x1.p24 + }, + { // Entry 56 + 0x1.80p4, + 0x1.19999ap24 + }, + { // Entry 57 + 0x1.80p4, + 0x1.333334p24 + }, + { // Entry 58 + 0x1.80p4, + 0x1.4ccccep24 + }, + { // Entry 59 + 0x1.80p4, + 0x1.666668p24 + }, + { // Entry 60 + 0x1.80p4, + 0x1.800002p24 + }, + { // Entry 61 + 0x1.80p4, + 0x1.99999cp24 + }, + { // Entry 62 + 0x1.80p4, + 0x1.b33336p24 + }, + { // Entry 63 + 0x1.80p4, + 0x1.ccccd0p24 + }, + { // Entry 64 + 0x1.80p4, + 0x1.e6666ap24 + }, + { // Entry 65 + 0x1.90p4, + 0x1.p25 + }, + { // Entry 66 + -0x1.04p7, + 0x1.p-130 + }, + { // Entry 67 + -0x1.p7, + 0x1.d33330p-128 + }, + { // Entry 68 + -0x1.fcp6, + 0x1.b33330p-127 + }, + { // Entry 69 + -0x1.f8p6, + 0x1.3e6664p-126 + }, + { // Entry 70 + -0x1.f8p6, + 0x1.a33330p-126 + }, + { // Entry 71 + -0x1.f4p6, + 0x1.03fffep-125 + }, + { // Entry 72 + -0x1.f4p6, + 0x1.366664p-125 + }, + { // Entry 73 + -0x1.f4p6, + 0x1.68cccap-125 + }, + { // Entry 74 + -0x1.f4p6, + 0x1.9b3330p-125 + }, + { // Entry 75 + -0x1.f4p6, + 0x1.cd9996p-125 + }, + { // Entry 76 + -0x1.f4p6, + 0x1.fffffcp-125 + }, + { // Entry 77 + 0x1.50p4, + 0x1.fffffep21 + }, + { // Entry 78 + 0x1.60p4, + 0x1.p22 + }, + { // Entry 79 + 0x1.60p4, + 0x1.000002p22 + }, + { // Entry 80 + 0x1.60p4, + 0x1.fffffep22 + }, + { // Entry 81 + 0x1.70p4, + 0x1.p23 + }, + { // Entry 82 + 0x1.70p4, + 0x1.000002p23 + }, + { // Entry 83 + 0x1.70p4, + 0x1.fffffep23 + }, + { // Entry 84 + 0x1.80p4, + 0x1.p24 + }, + { // Entry 85 + 0x1.80p4, + 0x1.000002p24 + }, + { // Entry 86 + 0x1.60p4, + -0x1.000002p22 + }, + { // Entry 87 + 0x1.60p4, + -0x1.p22 + }, + { // Entry 88 + 0x1.50p4, + -0x1.fffffep21 + }, + { // Entry 89 + 0x1.70p4, + -0x1.000002p23 + }, + { // Entry 90 + 0x1.70p4, + -0x1.p23 + }, + { // Entry 91 + 0x1.60p4, + -0x1.fffffep22 + }, + { // Entry 92 + 0x1.80p4, + -0x1.000002p24 + }, + { // Entry 93 + 0x1.80p4, + -0x1.p24 + }, + { // Entry 94 + 0x1.70p4, + -0x1.fffffep23 + }, + { // Entry 95 + 0x1.fcp6, + 0x1.fffffep127 + }, + { // Entry 96 + 0x1.fcp6, + -0x1.fffffep127 + }, + { // Entry 97 + -0x1.c0p2, + 0x1.fffffep-7 + }, + { // Entry 98 + -0x1.80p2, + 0x1.p-6 + }, + { // Entry 99 + -0x1.80p2, + 0x1.000002p-6 + }, + { // Entry 100 + -0x1.80p2, + 0x1.fffffep-6 + }, + { // Entry 101 + -0x1.40p2, + 0x1.p-5 + }, + { // Entry 102 + -0x1.40p2, + 0x1.000002p-5 + }, + { // Entry 103 + -0x1.40p2, + 0x1.fffffep-5 + }, + { // Entry 104 + -0x1.p2, + 0x1.p-4 + }, + { // Entry 105 + -0x1.p2, + 0x1.000002p-4 + }, + { // Entry 106 + -0x1.p2, + 0x1.fffffep-4 + }, + { // Entry 107 + -0x1.80p1, + 0x1.p-3 + }, + { // Entry 108 + -0x1.80p1, + 0x1.000002p-3 + }, + { // Entry 109 + -0x1.80p1, + 0x1.fffffep-3 + }, + { // Entry 110 + -0x1.p1, + 0x1.p-2 + }, + { // Entry 111 + -0x1.p1, + 0x1.000002p-2 + }, + { // Entry 112 + -0x1.p1, + 0x1.fffffep-2 + }, + { // Entry 113 + -0x1.p0, + 0x1.p-1 + }, + { // Entry 114 + -0x1.p0, + 0x1.000002p-1 + }, + { // Entry 115 + -0x1.2ap7, + -0x1.p-149 + }, + { // Entry 116 + -HUGE_VALF, + 0.0 + }, + { // Entry 117 + -0x1.2ap7, + 0x1.p-149 + }, + { // Entry 118 + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 119 + 0.0, + 0x1.p0 + }, + { // Entry 120 + 0.0, + 0x1.000002p0 + }, + { // Entry 121 + 0.0, + 0x1.fffffep0 + }, + { // Entry 122 + 0x1.p0, + 0x1.p1 + }, + { // Entry 123 + 0x1.p0, + 0x1.000002p1 + }, + { // Entry 124 + 0x1.p0, + 0x1.fffffep1 + }, + { // Entry 125 + 0x1.p1, + 0x1.p2 + }, + { // Entry 126 + 0x1.p1, + 0x1.000002p2 + }, + { // Entry 127 + 0x1.p1, + 0x1.fffffep2 + }, + { // Entry 128 + 0x1.80p1, + 0x1.p3 + }, + { // Entry 129 + 0x1.80p1, + 0x1.000002p3 + }, + { // Entry 130 + 0x1.80p1, + 0x1.fffffep3 + }, + { // Entry 131 + 0x1.p2, + 0x1.p4 + }, + { // Entry 132 + 0x1.p2, + 0x1.000002p4 + }, + { // Entry 133 + 0x1.p2, + 0x1.fffffep4 + }, + { // Entry 134 + 0x1.40p2, + 0x1.p5 + }, + { // Entry 135 + 0x1.40p2, + 0x1.000002p5 + }, + { // Entry 136 + 0x1.40p2, + 0x1.fffffep5 + }, + { // Entry 137 + 0x1.80p2, + 0x1.p6 + }, + { // Entry 138 + 0x1.80p2, + 0x1.000002p6 + }, + { // Entry 139 + 0x1.80p2, + 0x1.fffffep6 + }, + { // Entry 140 + 0x1.c0p2, + 0x1.p7 + }, + { // Entry 141 + 0x1.c0p2, + 0x1.000002p7 + }, + { // Entry 142 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 143 + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 144 + 0x1.fcp6, + 0x1.fffffep127 + }, + { // Entry 145 + 0x1.fcp6, + -0x1.fffffep127 + }, + { // Entry 146 + 0x1.fcp6, + 0x1.fffffcp127 + }, + { // Entry 147 + 0x1.fcp6, + -0x1.fffffcp127 + }, + { // Entry 148 + 0x1.p0, + 0x1.921fb6p1 + }, + { // Entry 149 + 0x1.p0, + -0x1.921fb6p1 + }, + { // Entry 150 + 0.0, + 0x1.921fb6p0 + }, + { // Entry 151 + 0.0, + -0x1.921fb6p0 + }, + { // Entry 152 + 0.0, + 0x1.000002p0 + }, + { // Entry 153 + 0.0, + -0x1.000002p0 + }, + { // Entry 154 + 0.0, + 0x1.p0 + }, + { // Entry 155 + 0.0, + -0x1.p0 + }, + { // Entry 156 + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 157 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 158 + -0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 159 + -0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 160 + -0x1.f8p6, + 0x1.000002p-126 + }, + { // Entry 161 + -0x1.f8p6, + -0x1.000002p-126 + }, + { // Entry 162 + -0x1.f8p6, + 0x1.p-126 + }, + { // Entry 163 + -0x1.f8p6, + -0x1.p-126 + }, + { // Entry 164 + -0x1.fcp6, + 0x1.fffffcp-127 + }, + { // Entry 165 + -0x1.fcp6, + -0x1.fffffcp-127 + }, + { // Entry 166 + -0x1.fcp6, + 0x1.fffff8p-127 + }, + { // Entry 167 + -0x1.fcp6, + -0x1.fffff8p-127 + }, + { // Entry 168 + -0x1.28p7, + 0x1.p-148 + }, + { // Entry 169 + -0x1.28p7, + -0x1.p-148 + }, + { // Entry 170 + -0x1.2ap7, + 0x1.p-149 + }, + { // Entry 171 + -0x1.2ap7, + -0x1.p-149 + }, + { // Entry 172 + -HUGE_VALF, + 0.0f + }, + { // Entry 173 + -HUGE_VALF, + -0.0f + } +}; diff --git a/tests/math_logf_intel_data.h b/tests/math_data/logf_intel_data.h similarity index 100% rename from tests/math_logf_intel_data.h rename to tests/math_data/logf_intel_data.h diff --git a/tests/math_data/modf_intel_data.h b/tests/math_data/modf_intel_data.h new file mode 100644 index 000000000..9af7e1bdd --- /dev/null +++ b/tests/math_data/modf_intel_data.h @@ -0,0 +1,1858 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_2_1_t g_modf_intel_data[] = { + { // Entry 0 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0, + -0.0 + }, + { // Entry 2 + 0x1.p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 3 + 0x1.fffffffffffff0p-2, + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0x1.p-1, + 0.0, + 0x1.0p-1 + }, + { // Entry 5 + 0x1.00000000000010p-1, + 0.0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0x1.fffffffffffff0p-1, + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0.0, + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p-52, + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.ffffffffffffc0p-2, + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p-1, + 0x1.p0, + 0x1.8p0 + }, + { // Entry 11 + 0x1.00000000000020p-1, + 0x1.p0, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.ffffffffffffe0p-1, + 0x1.p0, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0.0, + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.p-51, + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.ffffffffffff80p-2, + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.p-1, + 0x1.p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.00000000000040p-1, + 0x1.p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.fffffffffff8p-1, + 0x1.8cp6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0.0, + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.p-46, + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.fffffffffff0p-2, + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.p-1, + 0x1.90p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.000000000008p-1, + 0x1.90p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.ffffffffffc0p-1, + 0x1.f380p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0.0, + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.p-43, + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.ffffffffff80p-2, + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.p-1, + 0x1.f4p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.000000000040p-1, + 0x1.f4p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.c0p-1, + 0x1.ffffffffffff80p49, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0.0, + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.p-2, + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.80p-1, + 0x1.ffffffffffffc0p50, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0.0, + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.p-1, + 0x1.p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.p-1, + 0x1.ffffffffffffe0p51, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0.0, + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0.0, + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0.0, + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0.0, + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0.0, + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0.0, + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0.0, + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0.0, + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0.0, + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0x1.00000000000010p-1, + -0.0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0x1.p-1, + -0.0, + -0x1.0p-1 + }, + { // Entry 48 + -0x1.fffffffffffff0p-2, + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p-52, + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0.0, + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0x1.fffffffffffff0p-1, + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.00000000000020p-1, + -0x1.p0, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p-1, + -0x1.p0, + -0x1.8p0 + }, + { // Entry 54 + -0x1.ffffffffffffc0p-2, + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.p-51, + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0.0, + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.ffffffffffffe0p-1, + -0x1.p0, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.00000000000040p-1, + -0x1.p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.p-1, + -0x1.p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.ffffffffffff80p-2, + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.p-46, + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0.0, + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.fffffffffff8p-1, + -0x1.8cp6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.000000000008p-1, + -0x1.90p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.p-1, + -0x1.90p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.fffffffffff0p-2, + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.p-43, + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0.0, + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.ffffffffffc0p-1, + -0x1.f380p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.000000000040p-1, + -0x1.f4p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.p-1, + -0x1.f4p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.ffffffffff80p-2, + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.p-2, + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0.0, + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.c0p-1, + -0x1.ffffffffffff80p49, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.p-1, + -0x1.p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0.0, + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.80p-1, + -0x1.ffffffffffffc0p50, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0.0, + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0.0, + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.p-1, + -0x1.ffffffffffffe0p51, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0.0, + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0.0, + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0.0, + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0.0, + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0.0, + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0.0, + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0.0, + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.fffffcp-1, + 0x1.fffffff8p29, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0.0, + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.p-22, + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.ffffe8p-1, + 0x1.fffffff4p30, + 0x1.fffffff7ffffdp30 + }, + { // Entry 93 + 0x1.fffff0p-1, + 0x1.fffffff4p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 94 + 0x1.fffff8p-1, + 0x1.fffffff4p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 95 + 0.0, + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 96 + 0x1.p-22, + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 97 + 0x1.p-21, + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 98 + 0x1.80p-21, + 0x1.fffffff8p30, + 0x1.fffffff800003p30 + }, + { // Entry 99 + 0x1.ffffd0p-2, + 0x1.fffffff8p30, + 0x1.fffffff9ffffdp30 + }, + { // Entry 100 + 0x1.ffffe0p-2, + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 101 + 0x1.fffff0p-2, + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 102 + 0x1.p-1, + 0x1.fffffff8p30, + 0x1.fffffffa0p30 + }, + { // Entry 103 + 0x1.000008p-1, + 0x1.fffffff8p30, + 0x1.fffffffa00001p30 + }, + { // Entry 104 + 0x1.000010p-1, + 0x1.fffffff8p30, + 0x1.fffffffa00002p30 + }, + { // Entry 105 + 0x1.000018p-1, + 0x1.fffffff8p30, + 0x1.fffffffa00003p30 + }, + { // Entry 106 + 0x1.ffffe8p-1, + 0x1.fffffff8p30, + 0x1.fffffffbffffdp30 + }, + { // Entry 107 + 0x1.fffff0p-1, + 0x1.fffffff8p30, + 0x1.fffffffbffffep30 + }, + { // Entry 108 + 0x1.fffff8p-1, + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 109 + 0.0, + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 110 + 0x1.p-22, + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 111 + 0x1.p-21, + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 112 + 0x1.80p-21, + 0x1.fffffffcp30, + 0x1.fffffffc00003p30 + }, + { // Entry 113 + 0x1.ffffd0p-2, + 0x1.fffffffcp30, + 0x1.fffffffdffffdp30 + }, + { // Entry 114 + 0x1.ffffe0p-2, + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 115 + 0x1.fffff0p-2, + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 116 + 0x1.p-1, + 0x1.fffffffcp30, + 0x1.fffffffe0p30 + }, + { // Entry 117 + 0x1.000008p-1, + 0x1.fffffffcp30, + 0x1.fffffffe00001p30 + }, + { // Entry 118 + 0x1.000010p-1, + 0x1.fffffffcp30, + 0x1.fffffffe00002p30 + }, + { // Entry 119 + 0x1.000018p-1, + 0x1.fffffffcp30, + 0x1.fffffffe00003p30 + }, + { // Entry 120 + 0x1.ffffe8p-1, + 0x1.fffffffcp30, + 0x1.ffffffffffffdp30 + }, + { // Entry 121 + 0x1.fffff0p-1, + 0x1.fffffffcp30, + 0x1.ffffffffffffep30 + }, + { // Entry 122 + 0x1.fffff8p-1, + 0x1.fffffffcp30, + 0x1.fffffffffffffp30 + }, + { // Entry 123 + 0.0, + 0x1.p31, + 0x1.0p31 + }, + { // Entry 124 + 0x1.p-21, + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 125 + 0x1.p-20, + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 126 + 0x1.80p-20, + 0x1.p31, + 0x1.0000000000003p31 + }, + { // Entry 127 + 0x1.ffffa0p-2, + 0x1.p31, + 0x1.00000000ffffdp31 + }, + { // Entry 128 + 0x1.ffffc0p-2, + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 129 + 0x1.ffffe0p-2, + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 130 + 0x1.p-1, + 0x1.p31, + 0x1.000000010p31 + }, + { // Entry 131 + 0x1.000010p-1, + 0x1.p31, + 0x1.0000000100001p31 + }, + { // Entry 132 + 0x1.000020p-1, + 0x1.p31, + 0x1.0000000100002p31 + }, + { // Entry 133 + 0x1.000030p-1, + 0x1.p31, + 0x1.0000000100003p31 + }, + { // Entry 134 + 0.0, + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 135 + 0.0, + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 136 + 0.0, + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 137 + 0.0, + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 138 + 0.0, + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 139 + 0.0, + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 140 + 0.0, + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 141 + 0.0, + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 142 + 0.0, + 0x1.p31, + 0x1.0p31 + }, + { // Entry 143 + 0.0, + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 144 + -0x1.p-22, + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 145 + -0.0, + -0x1.p30, + -0x1.0p30 + }, + { // Entry 146 + -0x1.fffffcp-1, + -0x1.fffffff8p29, + -0x1.fffffffffffffp29 + }, + { // Entry 147 + -0x1.80p-21, + -0x1.fffffff8p30, + -0x1.fffffff800003p30 + }, + { // Entry 148 + -0x1.p-21, + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 149 + -0x1.p-22, + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 150 + -0.0, + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 151 + -0x1.fffff8p-1, + -0x1.fffffff4p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 152 + -0x1.fffff0p-1, + -0x1.fffffff4p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 153 + -0x1.ffffe8p-1, + -0x1.fffffff4p30, + -0x1.fffffff7ffffdp30 + }, + { // Entry 154 + -0x1.000018p-1, + -0x1.fffffff8p30, + -0x1.fffffffa00003p30 + }, + { // Entry 155 + -0x1.000010p-1, + -0x1.fffffff8p30, + -0x1.fffffffa00002p30 + }, + { // Entry 156 + -0x1.000008p-1, + -0x1.fffffff8p30, + -0x1.fffffffa00001p30 + }, + { // Entry 157 + -0x1.p-1, + -0x1.fffffff8p30, + -0x1.fffffffa0p30 + }, + { // Entry 158 + -0x1.fffff0p-2, + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 159 + -0x1.ffffe0p-2, + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 160 + -0x1.ffffd0p-2, + -0x1.fffffff8p30, + -0x1.fffffff9ffffdp30 + }, + { // Entry 161 + -0x1.80p-21, + -0x1.fffffffcp30, + -0x1.fffffffc00003p30 + }, + { // Entry 162 + -0x1.p-21, + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 163 + -0x1.p-22, + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 164 + -0.0, + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 165 + -0x1.fffff8p-1, + -0x1.fffffff8p30, + -0x1.fffffffbfffffp30 + }, + { // Entry 166 + -0x1.fffff0p-1, + -0x1.fffffff8p30, + -0x1.fffffffbffffep30 + }, + { // Entry 167 + -0x1.ffffe8p-1, + -0x1.fffffff8p30, + -0x1.fffffffbffffdp30 + }, + { // Entry 168 + -0x1.000018p-1, + -0x1.fffffffcp30, + -0x1.fffffffe00003p30 + }, + { // Entry 169 + -0x1.000010p-1, + -0x1.fffffffcp30, + -0x1.fffffffe00002p30 + }, + { // Entry 170 + -0x1.000008p-1, + -0x1.fffffffcp30, + -0x1.fffffffe00001p30 + }, + { // Entry 171 + -0x1.p-1, + -0x1.fffffffcp30, + -0x1.fffffffe0p30 + }, + { // Entry 172 + -0x1.fffff0p-2, + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 173 + -0x1.ffffe0p-2, + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 174 + -0x1.ffffd0p-2, + -0x1.fffffffcp30, + -0x1.fffffffdffffdp30 + }, + { // Entry 175 + -0x1.80p-20, + -0x1.p31, + -0x1.0000000000003p31 + }, + { // Entry 176 + -0x1.p-20, + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 177 + -0x1.p-21, + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 178 + -0.0, + -0x1.p31, + -0x1.0p31 + }, + { // Entry 179 + -0x1.fffff8p-1, + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 180 + -0x1.fffff0p-1, + -0x1.fffffffcp30, + -0x1.ffffffffffffep30 + }, + { // Entry 181 + -0x1.ffffe8p-1, + -0x1.fffffffcp30, + -0x1.ffffffffffffdp30 + }, + { // Entry 182 + -0x1.000030p-1, + -0x1.p31, + -0x1.0000000100003p31 + }, + { // Entry 183 + -0x1.000020p-1, + -0x1.p31, + -0x1.0000000100002p31 + }, + { // Entry 184 + -0x1.000010p-1, + -0x1.p31, + -0x1.0000000100001p31 + }, + { // Entry 185 + -0x1.p-1, + -0x1.p31, + -0x1.000000010p31 + }, + { // Entry 186 + -0x1.ffffe0p-2, + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 187 + -0x1.ffffc0p-2, + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 188 + -0x1.ffffa0p-2, + -0x1.p31, + -0x1.00000000ffffdp31 + }, + { // Entry 189 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 190 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 191 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 192 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 193 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 194 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 195 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 196 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 197 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 198 + -0.0, + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 199 + 0.0, + 0x1.ffffffffffffd0p61, + 0x1.ffffffffffffdp61 + }, + { // Entry 200 + 0.0, + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 201 + 0.0, + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 202 + 0.0, + 0x1.p62, + 0x1.0p62 + }, + { // Entry 203 + 0.0, + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 204 + 0.0, + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 205 + 0.0, + 0x1.00000000000030p62, + 0x1.0000000000003p62 + }, + { // Entry 206 + 0.0, + 0x1.ffffffffffffd0p62, + 0x1.ffffffffffffdp62 + }, + { // Entry 207 + 0.0, + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 208 + 0.0, + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 209 + 0.0, + 0x1.p63, + 0x1.0p63 + }, + { // Entry 210 + 0.0, + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 211 + 0.0, + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 212 + 0.0, + 0x1.00000000000030p63, + 0x1.0000000000003p63 + }, + { // Entry 213 + 0.0, + 0x1.ffffffffffffd0p63, + 0x1.ffffffffffffdp63 + }, + { // Entry 214 + 0.0, + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 215 + 0.0, + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 216 + 0.0, + 0x1.p64, + 0x1.0p64 + }, + { // Entry 217 + 0.0, + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 218 + 0.0, + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 219 + 0.0, + 0x1.00000000000030p64, + 0x1.0000000000003p64 + }, + { // Entry 220 + -0.0, + -0x1.00000000000030p62, + -0x1.0000000000003p62 + }, + { // Entry 221 + -0.0, + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 222 + -0.0, + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 223 + -0.0, + -0x1.p62, + -0x1.0p62 + }, + { // Entry 224 + -0.0, + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 225 + -0.0, + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 226 + -0.0, + -0x1.ffffffffffffd0p61, + -0x1.ffffffffffffdp61 + }, + { // Entry 227 + -0.0, + -0x1.00000000000030p63, + -0x1.0000000000003p63 + }, + { // Entry 228 + -0.0, + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 229 + -0.0, + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 230 + -0.0, + -0x1.p63, + -0x1.0p63 + }, + { // Entry 231 + -0.0, + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 232 + -0.0, + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 233 + -0.0, + -0x1.ffffffffffffd0p62, + -0x1.ffffffffffffdp62 + }, + { // Entry 234 + -0.0, + -0x1.00000000000030p64, + -0x1.0000000000003p64 + }, + { // Entry 235 + -0.0, + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 236 + -0.0, + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 237 + -0.0, + -0x1.p64, + -0x1.0p64 + }, + { // Entry 238 + -0.0, + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 239 + -0.0, + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 240 + -0.0, + -0x1.ffffffffffffd0p63, + -0x1.ffffffffffffdp63 + }, + { // Entry 241 + 0.0, + 0x1.p62, + 0x1.0p62 + }, + { // Entry 242 + 0.0, + 0x1.40p62, + 0x1.4p62 + }, + { // Entry 243 + 0.0, + 0x1.80p62, + 0x1.8p62 + }, + { // Entry 244 + 0.0, + 0x1.c0p62, + 0x1.cp62 + }, + { // Entry 245 + 0.0, + 0x1.p63, + 0x1.0p63 + }, + { // Entry 246 + 0.0, + 0x1.p63, + 0x1.0p63 + }, + { // Entry 247 + 0.0, + 0x1.40p63, + 0x1.4p63 + }, + { // Entry 248 + 0.0, + 0x1.80p63, + 0x1.8p63 + }, + { // Entry 249 + 0.0, + 0x1.c0p63, + 0x1.cp63 + }, + { // Entry 250 + 0.0, + 0x1.p64, + 0x1.0p64 + }, + { // Entry 251 + -0.0, + -0x1.p62, + -0x1.0p62 + }, + { // Entry 252 + -0.0, + -0x1.40p62, + -0x1.4p62 + }, + { // Entry 253 + -0.0, + -0x1.80p62, + -0x1.8p62 + }, + { // Entry 254 + -0.0, + -0x1.c0p62, + -0x1.cp62 + }, + { // Entry 255 + -0.0, + -0x1.p63, + -0x1.0p63 + }, + { // Entry 256 + -0.0, + -0x1.p63, + -0x1.0p63 + }, + { // Entry 257 + -0.0, + -0x1.40p63, + -0x1.4p63 + }, + { // Entry 258 + -0.0, + -0x1.80p63, + -0x1.8p63 + }, + { // Entry 259 + -0.0, + -0x1.c0p63, + -0x1.cp63 + }, + { // Entry 260 + -0.0, + -0x1.p64, + -0x1.0p64 + }, + { // Entry 261 + 0x1.fffff8p-1, + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 262 + 0.0, + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 263 + 0x1.p-22, + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 264 + -0x1.p-21, + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 265 + -0.0, + -0x1.p31, + -0x1.0p31 + }, + { // Entry 266 + -0x1.fffff8p-1, + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 267 + 0x1.ffffffffffffc0p-1, + 0x1.80p1, + 0x1.fffffffffffffp1 + }, + { // Entry 268 + 0.0, + 0x1.p2, + 0x1.0p2 + }, + { // Entry 269 + 0x1.p-50, + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 270 + 0x1.ffffffffffff80p-1, + 0x1.c0p2, + 0x1.fffffffffffffp2 + }, + { // Entry 271 + 0.0, + 0x1.p3, + 0x1.0p3 + }, + { // Entry 272 + 0x1.p-49, + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 273 + 0x1.ffffffffffffp-1, + 0x1.e0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 274 + 0.0, + 0x1.p4, + 0x1.0p4 + }, + { // Entry 275 + 0x1.p-48, + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 276 + 0x1.fffffffffffep-1, + 0x1.f0p4, + 0x1.fffffffffffffp4 + }, + { // Entry 277 + 0.0, + 0x1.p5, + 0x1.0p5 + }, + { // Entry 278 + 0x1.p-47, + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 279 + 0x1.fffffffffffcp-1, + 0x1.f8p5, + 0x1.fffffffffffffp5 + }, + { // Entry 280 + 0.0, + 0x1.p6, + 0x1.0p6 + }, + { // Entry 281 + 0x1.p-46, + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 282 + 0x1.fffffffffff8p-1, + 0x1.fcp6, + 0x1.fffffffffffffp6 + }, + { // Entry 283 + 0.0, + 0x1.p7, + 0x1.0p7 + }, + { // Entry 284 + 0x1.p-45, + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 285 + 0x1.fffffffffff0p-1, + 0x1.fep7, + 0x1.fffffffffffffp7 + }, + { // Entry 286 + 0.0, + 0x1.p8, + 0x1.0p8 + }, + { // Entry 287 + 0x1.p-44, + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 288 + 0x1.ffffffffffe0p-1, + 0x1.ffp8, + 0x1.fffffffffffffp8 + }, + { // Entry 289 + 0.0, + 0x1.p9, + 0x1.0p9 + }, + { // Entry 290 + 0x1.p-43, + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 291 + 0x1.ffffffffffc0p-1, + 0x1.ff80p9, + 0x1.fffffffffffffp9 + }, + { // Entry 292 + 0.0, + 0x1.p10, + 0x1.0p10 + }, + { // Entry 293 + 0x1.p-42, + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 294 + 0x1.ffffffffff80p-1, + 0x1.ffc0p10, + 0x1.fffffffffffffp10 + }, + { // Entry 295 + 0.0, + 0x1.p11, + 0x1.0p11 + }, + { // Entry 296 + 0x1.p-41, + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 297 + 0x1.ffffffffffp-1, + 0x1.ffe0p11, + 0x1.fffffffffffffp11 + }, + { // Entry 298 + 0.0, + 0x1.p12, + 0x1.0p12 + }, + { // Entry 299 + 0x1.p-40, + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 300 + 0x1.ffffffffffffp-2, + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 301 + 0x1.p-1, + 0x1.p2, + 0x1.2p2 + }, + { // Entry 302 + 0x1.00000000000080p-1, + 0x1.p2, + 0x1.2000000000001p2 + }, + { // Entry 303 + 0x1.fffffffffffep-2, + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 304 + 0x1.p-1, + 0x1.p3, + 0x1.1p3 + }, + { // Entry 305 + 0x1.000000000001p-1, + 0x1.p3, + 0x1.1000000000001p3 + }, + { // Entry 306 + 0x1.fffffffffffcp-2, + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 307 + 0x1.p-1, + 0x1.p4, + 0x1.080p4 + }, + { // Entry 308 + 0x1.000000000002p-1, + 0x1.p4, + 0x1.0800000000001p4 + }, + { // Entry 309 + 0x1.fffffffffff8p-2, + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 310 + 0x1.p-1, + 0x1.p5, + 0x1.040p5 + }, + { // Entry 311 + 0x1.000000000004p-1, + 0x1.p5, + 0x1.0400000000001p5 + }, + { // Entry 312 + 0x1.fffffffffff0p-2, + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 313 + 0x1.p-1, + 0x1.p6, + 0x1.020p6 + }, + { // Entry 314 + 0x1.000000000008p-1, + 0x1.p6, + 0x1.0200000000001p6 + }, + { // Entry 315 + 0x1.ffffffffffe0p-2, + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 316 + 0x1.p-1, + 0x1.p7, + 0x1.010p7 + }, + { // Entry 317 + 0x1.000000000010p-1, + 0x1.p7, + 0x1.0100000000001p7 + }, + { // Entry 318 + 0x1.ffffffffffc0p-2, + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 319 + 0x1.p-1, + 0x1.p8, + 0x1.008p8 + }, + { // Entry 320 + 0x1.000000000020p-1, + 0x1.p8, + 0x1.0080000000001p8 + }, + { // Entry 321 + 0x1.ffffffffff80p-2, + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 322 + 0x1.p-1, + 0x1.p9, + 0x1.004p9 + }, + { // Entry 323 + 0x1.000000000040p-1, + 0x1.p9, + 0x1.0040000000001p9 + }, + { // Entry 324 + 0x1.ffffffffffp-2, + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 325 + 0x1.p-1, + 0x1.p10, + 0x1.002p10 + }, + { // Entry 326 + 0x1.000000000080p-1, + 0x1.p10, + 0x1.0020000000001p10 + }, + { // Entry 327 + 0x1.ffffffffffp-2, + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 328 + 0x1.p-1, + 0x1.0040p10, + 0x1.006p10 + }, + { // Entry 329 + 0x1.000000000080p-1, + 0x1.0040p10, + 0x1.0060000000001p10 + }, + { // Entry 330 + 0x1.fffffffffep-2, + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 331 + 0x1.p-1, + 0x1.p11, + 0x1.001p11 + }, + { // Entry 332 + 0x1.0000000001p-1, + 0x1.p11, + 0x1.0010000000001p11 + }, + { // Entry 333 + 0x1.fffffffffcp-2, + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 334 + 0x1.p-1, + 0x1.p12, + 0x1.00080p12 + }, + { // Entry 335 + 0x1.0000000002p-1, + 0x1.p12, + 0x1.0008000000001p12 + }, + { // Entry 336 + 0.0, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 337 + -0.0, + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 338 + 0.0, + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 339 + -0.0, + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 340 + 0.0, + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 341 + -0.0, + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 342 + 0x1.21fb54442d18p-3, + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 343 + -0x1.21fb54442d18p-3, + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 344 + 0x1.243f6a8885a3p-1, + 0x1.p0, + 0x1.921fb54442d18p0 + }, + { // Entry 345 + -0x1.243f6a8885a3p-1, + -0x1.p0, + -0x1.921fb54442d18p0 + }, + { // Entry 346 + 0x1.p-52, + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 347 + -0x1.p-52, + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 348 + 0.0, + 0x1.p0, + 0x1.0p0 + }, + { // Entry 349 + -0.0, + -0x1.p0, + -0x1.0p0 + }, + { // Entry 350 + 0x1.fffffffffffff0p-1, + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 351 + -0x1.fffffffffffff0p-1, + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 352 + 0x1.921fb54442d180p-1, + 0.0, + 0x1.921fb54442d18p-1 + }, + { // Entry 353 + -0x1.921fb54442d180p-1, + -0.0, + -0x1.921fb54442d18p-1 + }, + { // Entry 354 + 0x1.00000000000010p-1022, + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 355 + -0x1.00000000000010p-1022, + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 356 + 0x1.p-1022, + 0.0, + 0x1.0p-1022 + }, + { // Entry 357 + -0x1.p-1022, + -0.0, + -0x1.0p-1022 + }, + { // Entry 358 + 0x1.ffffffffffffe0p-1023, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 359 + -0x1.ffffffffffffe0p-1023, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 360 + 0x1.ffffffffffffc0p-1023, + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 361 + -0x1.ffffffffffffc0p-1023, + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 362 + 0x1.p-1073, + 0.0, + 0x1.0p-1073 + }, + { // Entry 363 + -0x1.p-1073, + -0.0, + -0x1.0p-1073 + }, + { // Entry 364 + 0x1.p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 365 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 366 + 0.0, + 0.0, + 0.0 + }, + { // Entry 367 + -0.0, + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/modff_intel_data.h b/tests/math_data/modff_intel_data.h new file mode 100644 index 000000000..f28f5c912 --- /dev/null +++ b/tests/math_data/modff_intel_data.h @@ -0,0 +1,1858 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_2_1_t g_modff_intel_data[] = { + { // Entry 0 + -0x1.p-149, + -0.0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0, + 0.0 + }, + { // Entry 2 + 0x1.p-149, + 0.0, + 0x1.p-149 + }, + { // Entry 3 + 0x1.fffffep-2, + 0.0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0x1.p-1, + 0.0, + 0x1.p-1 + }, + { // Entry 5 + 0x1.000002p-1, + 0.0, + 0x1.000002p-1 + }, + { // Entry 6 + 0x1.fffffep-1, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0.0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p-23, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.fffff8p-2, + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p-1, + 0x1.p0, + 0x1.80p0 + }, + { // Entry 11 + 0x1.000004p-1, + 0x1.p0, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.fffffcp-1, + 0x1.p0, + 0x1.fffffep0 + }, + { // Entry 13 + 0.0, + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.p-22, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.fffff0p-2, + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.p-1, + 0x1.p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.000008p-1, + 0x1.p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.ffffp-1, + 0x1.8cp6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0.0, + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.p-17, + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.fffep-2, + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.p-1, + 0x1.90p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.0001p-1, + 0x1.90p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.fff8p-1, + 0x1.f380p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0.0, + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.p-14, + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.fff0p-2, + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.p-1, + 0x1.f4p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.0008p-1, + 0x1.f4p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.c0p-1, + 0x1.fffff0p20, + 0x1.fffffep20 + }, + { // Entry 31 + 0.0, + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.p-2, + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.80p-1, + 0x1.fffff8p21, + 0x1.fffffep21 + }, + { // Entry 34 + 0.0, + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.p-1, + 0x1.p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.p-1, + 0x1.fffffcp22, + 0x1.fffffep22 + }, + { // Entry 37 + 0.0, + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0.0, + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0.0, + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0.0, + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0.0, + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0.0, + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0.0, + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0.0, + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0x1.000002p-1, + -0.0, + -0x1.000002p-1 + }, + { // Entry 47 + -0x1.p-1, + -0.0, + -0x1.p-1 + }, + { // Entry 48 + -0x1.fffffep-2, + -0.0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p-23, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 50 + -0.0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0x1.fffffep-1, + -0.0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.000004p-1, + -0x1.p0, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p-1, + -0x1.p0, + -0x1.80p0 + }, + { // Entry 54 + -0x1.fffff8p-2, + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.p-22, + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 56 + -0.0, + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.fffffcp-1, + -0x1.p0, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.000008p-1, + -0x1.p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.p-1, + -0x1.p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.fffff0p-2, + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.p-17, + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 62 + -0.0, + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.ffffp-1, + -0x1.8cp6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.0001p-1, + -0x1.90p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.p-1, + -0x1.90p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.fffep-2, + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.p-14, + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0.0, + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.fff8p-1, + -0x1.f380p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.0008p-1, + -0x1.f4p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.p-1, + -0x1.f4p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.fff0p-2, + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.p-2, + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 74 + -0.0, + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.c0p-1, + -0x1.fffff0p20, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.p-1, + -0x1.p22, + -0x1.000002p22 + }, + { // Entry 77 + -0.0, + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.80p-1, + -0x1.fffff8p21, + -0x1.fffffep21 + }, + { // Entry 79 + -0.0, + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0.0, + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.p-1, + -0x1.fffffcp22, + -0x1.fffffep22 + }, + { // Entry 82 + -0.0, + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0.0, + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0.0, + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0.0, + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0.0, + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0.0, + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0.0, + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0.0, + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0.0, + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 93 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 94 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 95 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 96 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 97 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 98 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 99 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 100 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 101 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 102 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 103 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 104 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 105 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 106 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 107 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 113 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 114 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 115 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 116 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 117 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 118 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 119 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 120 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 121 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 122 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 123 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 125 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 126 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 127 + 0.0, + 0x1.fffffap30, + 0x1.fffffap30 + }, + { // Entry 128 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 129 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 130 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0.0, + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 132 + 0.0, + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 133 + 0.0, + 0x1.000006p31, + 0x1.000006p31 + }, + { // Entry 134 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 135 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 136 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 137 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 138 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 139 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 140 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 141 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 142 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 143 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 144 + -0.0, + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 145 + -0.0, + -0x1.p30, + -0x1.p30 + }, + { // Entry 146 + -0.0, + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 147 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 148 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 149 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 150 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 151 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 152 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 153 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 154 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 155 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 161 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 162 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 163 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 164 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 165 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 166 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 167 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 168 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 169 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 170 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 171 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 173 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 174 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 175 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 176 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 177 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 178 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 179 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 180 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 181 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 182 + -0.0, + -0x1.000006p31, + -0x1.000006p31 + }, + { // Entry 183 + -0.0, + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 184 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 185 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 186 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 187 + -0.0, + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 188 + -0.0, + -0x1.fffffap30, + -0x1.fffffap30 + }, + { // Entry 189 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 190 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 191 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 192 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 193 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 194 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 195 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 196 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 197 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 198 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 199 + 0.0, + 0x1.fffffap61, + 0x1.fffffap61 + }, + { // Entry 200 + 0.0, + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 201 + 0.0, + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 202 + 0.0, + 0x1.p62, + 0x1.p62 + }, + { // Entry 203 + 0.0, + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 204 + 0.0, + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 205 + 0.0, + 0x1.000006p62, + 0x1.000006p62 + }, + { // Entry 206 + 0.0, + 0x1.fffffap62, + 0x1.fffffap62 + }, + { // Entry 207 + 0.0, + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 208 + 0.0, + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 209 + 0.0, + 0x1.p63, + 0x1.p63 + }, + { // Entry 210 + 0.0, + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 211 + 0.0, + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 212 + 0.0, + 0x1.000006p63, + 0x1.000006p63 + }, + { // Entry 213 + 0.0, + 0x1.fffffap63, + 0x1.fffffap63 + }, + { // Entry 214 + 0.0, + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 215 + 0.0, + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 216 + 0.0, + 0x1.p64, + 0x1.p64 + }, + { // Entry 217 + 0.0, + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 218 + 0.0, + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 219 + 0.0, + 0x1.000006p64, + 0x1.000006p64 + }, + { // Entry 220 + -0.0, + -0x1.000006p62, + -0x1.000006p62 + }, + { // Entry 221 + -0.0, + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 222 + -0.0, + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 223 + -0.0, + -0x1.p62, + -0x1.p62 + }, + { // Entry 224 + -0.0, + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 225 + -0.0, + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 226 + -0.0, + -0x1.fffffap61, + -0x1.fffffap61 + }, + { // Entry 227 + -0.0, + -0x1.000006p63, + -0x1.000006p63 + }, + { // Entry 228 + -0.0, + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 229 + -0.0, + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 230 + -0.0, + -0x1.p63, + -0x1.p63 + }, + { // Entry 231 + -0.0, + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 232 + -0.0, + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 233 + -0.0, + -0x1.fffffap62, + -0x1.fffffap62 + }, + { // Entry 234 + -0.0, + -0x1.000006p64, + -0x1.000006p64 + }, + { // Entry 235 + -0.0, + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 236 + -0.0, + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 237 + -0.0, + -0x1.p64, + -0x1.p64 + }, + { // Entry 238 + -0.0, + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 239 + -0.0, + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 240 + -0.0, + -0x1.fffffap63, + -0x1.fffffap63 + }, + { // Entry 241 + 0.0, + 0x1.p62, + 0x1.p62 + }, + { // Entry 242 + 0.0, + 0x1.40p62, + 0x1.40p62 + }, + { // Entry 243 + 0.0, + 0x1.80p62, + 0x1.80p62 + }, + { // Entry 244 + 0.0, + 0x1.c0p62, + 0x1.c0p62 + }, + { // Entry 245 + 0.0, + 0x1.p63, + 0x1.p63 + }, + { // Entry 246 + 0.0, + 0x1.p63, + 0x1.p63 + }, + { // Entry 247 + 0.0, + 0x1.40p63, + 0x1.40p63 + }, + { // Entry 248 + 0.0, + 0x1.80p63, + 0x1.80p63 + }, + { // Entry 249 + 0.0, + 0x1.c0p63, + 0x1.c0p63 + }, + { // Entry 250 + 0.0, + 0x1.p64, + 0x1.p64 + }, + { // Entry 251 + -0.0, + -0x1.p62, + -0x1.p62 + }, + { // Entry 252 + -0.0, + -0x1.40p62, + -0x1.40p62 + }, + { // Entry 253 + -0.0, + -0x1.80p62, + -0x1.80p62 + }, + { // Entry 254 + -0.0, + -0x1.c0p62, + -0x1.c0p62 + }, + { // Entry 255 + -0.0, + -0x1.p63, + -0x1.p63 + }, + { // Entry 256 + -0.0, + -0x1.p63, + -0x1.p63 + }, + { // Entry 257 + -0.0, + -0x1.40p63, + -0x1.40p63 + }, + { // Entry 258 + -0.0, + -0x1.80p63, + -0x1.80p63 + }, + { // Entry 259 + -0.0, + -0x1.c0p63, + -0x1.c0p63 + }, + { // Entry 260 + -0.0, + -0x1.p64, + -0x1.p64 + }, + { // Entry 261 + 0.0, + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 262 + 0.0, + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 263 + 0.0, + 0x1.p31, + 0x1.p31 + }, + { // Entry 264 + -0.0, + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 265 + -0.0, + -0x1.p31, + -0x1.p31 + }, + { // Entry 266 + -0.0, + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 267 + 0x1.fffff8p-1, + 0x1.80p1, + 0x1.fffffep1 + }, + { // Entry 268 + 0.0, + 0x1.p2, + 0x1.p2 + }, + { // Entry 269 + 0x1.p-21, + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 270 + 0x1.fffff0p-1, + 0x1.c0p2, + 0x1.fffffep2 + }, + { // Entry 271 + 0.0, + 0x1.p3, + 0x1.p3 + }, + { // Entry 272 + 0x1.p-20, + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 273 + 0x1.ffffe0p-1, + 0x1.e0p3, + 0x1.fffffep3 + }, + { // Entry 274 + 0.0, + 0x1.p4, + 0x1.p4 + }, + { // Entry 275 + 0x1.p-19, + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 276 + 0x1.ffffc0p-1, + 0x1.f0p4, + 0x1.fffffep4 + }, + { // Entry 277 + 0.0, + 0x1.p5, + 0x1.p5 + }, + { // Entry 278 + 0x1.p-18, + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 279 + 0x1.ffff80p-1, + 0x1.f8p5, + 0x1.fffffep5 + }, + { // Entry 280 + 0.0, + 0x1.p6, + 0x1.p6 + }, + { // Entry 281 + 0x1.p-17, + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 282 + 0x1.ffffp-1, + 0x1.fcp6, + 0x1.fffffep6 + }, + { // Entry 283 + 0.0, + 0x1.p7, + 0x1.p7 + }, + { // Entry 284 + 0x1.p-16, + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 285 + 0x1.fffep-1, + 0x1.fep7, + 0x1.fffffep7 + }, + { // Entry 286 + 0.0, + 0x1.p8, + 0x1.p8 + }, + { // Entry 287 + 0x1.p-15, + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 288 + 0x1.fffcp-1, + 0x1.ffp8, + 0x1.fffffep8 + }, + { // Entry 289 + 0.0, + 0x1.p9, + 0x1.p9 + }, + { // Entry 290 + 0x1.p-14, + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 291 + 0x1.fff8p-1, + 0x1.ff80p9, + 0x1.fffffep9 + }, + { // Entry 292 + 0.0, + 0x1.p10, + 0x1.p10 + }, + { // Entry 293 + 0x1.p-13, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 294 + 0x1.fff0p-1, + 0x1.ffc0p10, + 0x1.fffffep10 + }, + { // Entry 295 + 0.0, + 0x1.p11, + 0x1.p11 + }, + { // Entry 296 + 0x1.p-12, + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 297 + 0x1.ffe0p-1, + 0x1.ffe0p11, + 0x1.fffffep11 + }, + { // Entry 298 + 0.0, + 0x1.p12, + 0x1.p12 + }, + { // Entry 299 + 0x1.p-11, + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 300 + 0x1.ffffe0p-2, + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 301 + 0x1.p-1, + 0x1.p2, + 0x1.20p2 + }, + { // Entry 302 + 0x1.000010p-1, + 0x1.p2, + 0x1.200002p2 + }, + { // Entry 303 + 0x1.ffffc0p-2, + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 304 + 0x1.p-1, + 0x1.p3, + 0x1.10p3 + }, + { // Entry 305 + 0x1.000020p-1, + 0x1.p3, + 0x1.100002p3 + }, + { // Entry 306 + 0x1.ffff80p-2, + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 307 + 0x1.p-1, + 0x1.p4, + 0x1.08p4 + }, + { // Entry 308 + 0x1.000040p-1, + 0x1.p4, + 0x1.080002p4 + }, + { // Entry 309 + 0x1.ffffp-2, + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 310 + 0x1.p-1, + 0x1.p5, + 0x1.04p5 + }, + { // Entry 311 + 0x1.000080p-1, + 0x1.p5, + 0x1.040002p5 + }, + { // Entry 312 + 0x1.fffep-2, + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 313 + 0x1.p-1, + 0x1.p6, + 0x1.02p6 + }, + { // Entry 314 + 0x1.0001p-1, + 0x1.p6, + 0x1.020002p6 + }, + { // Entry 315 + 0x1.fffcp-2, + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 316 + 0x1.p-1, + 0x1.p7, + 0x1.01p7 + }, + { // Entry 317 + 0x1.0002p-1, + 0x1.p7, + 0x1.010002p7 + }, + { // Entry 318 + 0x1.fff8p-2, + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 319 + 0x1.p-1, + 0x1.p8, + 0x1.0080p8 + }, + { // Entry 320 + 0x1.0004p-1, + 0x1.p8, + 0x1.008002p8 + }, + { // Entry 321 + 0x1.fff0p-2, + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 322 + 0x1.p-1, + 0x1.p9, + 0x1.0040p9 + }, + { // Entry 323 + 0x1.0008p-1, + 0x1.p9, + 0x1.004002p9 + }, + { // Entry 324 + 0x1.ffe0p-2, + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 325 + 0x1.p-1, + 0x1.p10, + 0x1.0020p10 + }, + { // Entry 326 + 0x1.0010p-1, + 0x1.p10, + 0x1.002002p10 + }, + { // Entry 327 + 0x1.ffe0p-2, + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 328 + 0x1.p-1, + 0x1.0040p10, + 0x1.0060p10 + }, + { // Entry 329 + 0x1.0010p-1, + 0x1.0040p10, + 0x1.006002p10 + }, + { // Entry 330 + 0x1.ffc0p-2, + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 331 + 0x1.p-1, + 0x1.p11, + 0x1.0010p11 + }, + { // Entry 332 + 0x1.0020p-1, + 0x1.p11, + 0x1.001002p11 + }, + { // Entry 333 + 0x1.ff80p-2, + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 334 + 0x1.p-1, + 0x1.p12, + 0x1.0008p12 + }, + { // Entry 335 + 0x1.0040p-1, + 0x1.p12, + 0x1.000802p12 + }, + { // Entry 336 + 0.0, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 337 + -0.0, + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 338 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 339 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 340 + 0.0, + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 341 + -0.0, + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 342 + 0x1.21fb60p-3, + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 343 + -0x1.21fb60p-3, + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 344 + 0x1.243f6cp-1, + 0x1.p0, + 0x1.921fb6p0 + }, + { // Entry 345 + -0x1.243f6cp-1, + -0x1.p0, + -0x1.921fb6p0 + }, + { // Entry 346 + 0x1.p-23, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 347 + -0x1.p-23, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 348 + 0.0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 349 + -0.0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 350 + 0x1.fffffep-1, + 0.0, + 0x1.fffffep-1 + }, + { // Entry 351 + -0x1.fffffep-1, + -0.0, + -0x1.fffffep-1 + }, + { // Entry 352 + 0x1.921fb6p-1, + 0.0, + 0x1.921fb6p-1 + }, + { // Entry 353 + -0x1.921fb6p-1, + -0.0, + -0x1.921fb6p-1 + }, + { // Entry 354 + 0x1.000002p-126, + 0.0, + 0x1.000002p-126 + }, + { // Entry 355 + -0x1.000002p-126, + -0.0, + -0x1.000002p-126 + }, + { // Entry 356 + 0x1.p-126, + 0.0, + 0x1.p-126 + }, + { // Entry 357 + -0x1.p-126, + -0.0, + -0x1.p-126 + }, + { // Entry 358 + 0x1.fffffcp-127, + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 359 + -0x1.fffffcp-127, + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 360 + 0x1.fffff8p-127, + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 361 + -0x1.fffff8p-127, + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 362 + 0x1.p-148, + 0.0, + 0x1.p-148 + }, + { // Entry 363 + -0x1.p-148, + -0.0, + -0x1.p-148 + }, + { // Entry 364 + 0x1.p-149, + 0.0, + 0x1.p-149 + }, + { // Entry 365 + -0x1.p-149, + -0.0, + -0x1.p-149 + }, + { // Entry 366 + 0.0, + 0.0, + 0.0f + }, + { // Entry 367 + -0.0, + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/nearbyint_intel_data.h b/tests/math_data/nearbyint_intel_data.h new file mode 100644 index 000000000..d51cbe46f --- /dev/null +++ b/tests/math_data/nearbyint_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_nearbyint_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0 + }, + { // Entry 2 + 0.0, + 0x1.0p-1074 + }, + { // Entry 3 + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0.0, + 0x1.0p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.p50, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.p51, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.p52, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0x1.p0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0.0, + -0x1.0p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.p50, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.p51, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.p52, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.p30, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.fffffff8p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 93 + 0x1.fffffff8p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 94 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 95 + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 96 + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 97 + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 98 + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 99 + 0x1.fffffff8p30, + 0x1.fffffffa0p30 + }, + { // Entry 100 + 0x1.fffffffcp30, + 0x1.fffffffa00001p30 + }, + { // Entry 101 + 0x1.fffffffcp30, + 0x1.fffffffa00002p30 + }, + { // Entry 102 + 0x1.fffffffcp30, + 0x1.fffffffbffffep30 + }, + { // Entry 103 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 105 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 106 + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 107 + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 108 + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 109 + 0x1.p31, + 0x1.fffffffe0p30 + }, + { // Entry 110 + 0x1.p31, + 0x1.fffffffe00001p30 + }, + { // Entry 111 + 0x1.p31, + 0x1.fffffffe00002p30 + }, + { // Entry 112 + 0x1.p31, + 0x1.ffffffffffffep30 + }, + { // Entry 113 + 0x1.p31, + 0x1.fffffffffffffp30 + }, + { // Entry 114 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 115 + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 116 + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 117 + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 118 + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 119 + 0x1.p31, + 0x1.000000010p31 + }, + { // Entry 120 + 0x1.00000002p31, + 0x1.0000000100001p31 + }, + { // Entry 121 + 0x1.00000002p31, + 0x1.0000000100002p31 + }, + { // Entry 122 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 123 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 124 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 125 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 126 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 127 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 128 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 129 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 130 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 131 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 132 + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 134 + -0x1.p30, + -0x1.fffffffffffffp29 + }, + { // Entry 135 + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 136 + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 137 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 138 + -0x1.fffffff8p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 139 + -0x1.fffffff8p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 140 + -0x1.fffffffcp30, + -0x1.fffffffa00002p30 + }, + { // Entry 141 + -0x1.fffffffcp30, + -0x1.fffffffa00001p30 + }, + { // Entry 142 + -0x1.fffffff8p30, + -0x1.fffffffa0p30 + }, + { // Entry 143 + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 144 + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 145 + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 146 + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 147 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 148 + -0x1.fffffffcp30, + -0x1.fffffffbfffffp30 + }, + { // Entry 149 + -0x1.fffffffcp30, + -0x1.fffffffbffffep30 + }, + { // Entry 150 + -0x1.p31, + -0x1.fffffffe00002p30 + }, + { // Entry 151 + -0x1.p31, + -0x1.fffffffe00001p30 + }, + { // Entry 152 + -0x1.p31, + -0x1.fffffffe0p30 + }, + { // Entry 153 + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 154 + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 155 + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 156 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 158 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 159 + -0x1.p31, + -0x1.ffffffffffffep30 + }, + { // Entry 160 + -0x1.00000002p31, + -0x1.0000000100002p31 + }, + { // Entry 161 + -0x1.00000002p31, + -0x1.0000000100001p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.000000010p31 + }, + { // Entry 163 + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 164 + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 165 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 166 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 167 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 176 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 177 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 178 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 179 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 180 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 181 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 182 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 183 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 184 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 185 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 186 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 187 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 188 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 189 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 190 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 191 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 193 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 194 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 195 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 196 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 198 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 199 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 200 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 201 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 203 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 204 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 205 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 209 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 210 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 211 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 212 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 214 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffffffffffp1 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffffffffffp2 + }, + { // Entry 219 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffffffffffp3 + }, + { // Entry 222 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffffffffffp4 + }, + { // Entry 225 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffffffffffp5 + }, + { // Entry 228 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffffffffffp6 + }, + { // Entry 231 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffffffffffp7 + }, + { // Entry 234 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffffffffffp8 + }, + { // Entry 237 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffffffffffp9 + }, + { // Entry 240 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffffffffffp10 + }, + { // Entry 243 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffffffffffp11 + }, + { // Entry 246 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 249 + 0x1.p2, + 0x1.2p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.2000000000001p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 252 + 0x1.p3, + 0x1.1p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.1000000000001p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 255 + 0x1.p4, + 0x1.080p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.0800000000001p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 258 + 0x1.p5, + 0x1.040p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.0400000000001p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 261 + 0x1.p6, + 0x1.020p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.0200000000001p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 264 + 0x1.p7, + 0x1.010p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.0100000000001p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 267 + 0x1.p8, + 0x1.008p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.0080000000001p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 270 + 0x1.p9, + 0x1.004p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.0040000000001p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 273 + 0x1.p10, + 0x1.002p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.0020000000001p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.006p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.0060000000001p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 279 + 0x1.p11, + 0x1.001p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.0010000000001p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 282 + 0x1.p12, + 0x1.00080p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.0008000000001p12 + }, + { // Entry 284 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 286 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 287 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 289 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb54442d18p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb54442d18p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 302 + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 303 + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 304 + 0.0, + 0x1.0p-1022 + }, + { // Entry 305 + -0.0, + -0x1.0p-1022 + }, + { // Entry 306 + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 307 + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 308 + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 309 + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 310 + 0.0, + 0x1.0p-1073 + }, + { // Entry 311 + -0.0, + -0x1.0p-1073 + }, + { // Entry 312 + 0.0, + 0x1.0p-1074 + }, + { // Entry 313 + -0.0, + -0x1.0p-1074 + }, + { // Entry 314 + 0.0, + 0.0 + }, + { // Entry 315 + -0.0, + -0.0 + }, + { // Entry 316 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 320 + 0.0, + 0x1.fffffp-2 + }, + { // Entry 321 + 0.0, + 0x1.0p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.00001p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffffp-2 + }, + { // Entry 324 + -0.0, + -0x1.0p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.00001p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.80001p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffffp0 + }, + { // Entry 328 + -0x1.p1, + -0x1.80001p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/nearbyintf_intel_data.h b/tests/math_data/nearbyintf_intel_data.h new file mode 100644 index 000000000..a917b77bf --- /dev/null +++ b/tests/math_data/nearbyintf_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_nearbyintf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0 + }, + { // Entry 2 + 0.0, + 0x1.p-149 + }, + { // Entry 3 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0.0, + 0x1.p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.000002p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 13 + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.p21, + 0x1.fffffep20 + }, + { // Entry 31 + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.p22, + 0x1.fffffep21 + }, + { // Entry 34 + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.p23, + 0x1.fffffep22 + }, + { // Entry 37 + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0x1.p0, + -0x1.000002p-1 + }, + { // Entry 47 + -0.0, + -0x1.p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 74 + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.p21, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.p22, + -0x1.000002p22 + }, + { // Entry 77 + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.p22, + -0x1.fffffep21 + }, + { // Entry 79 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.p23, + -0x1.fffffep22 + }, + { // Entry 82 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 93 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 94 + 0x1.p31, + 0x1.p31 + }, + { // Entry 95 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 96 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.p31, + 0x1.p31 + }, + { // Entry 123 + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.p31, + 0x1.p31 + }, + { // Entry 126 + 0x1.p31, + 0x1.p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.p30 + }, + { // Entry 134 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 135 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 136 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 137 + -0x1.p31, + -0x1.p31 + }, + { // Entry 138 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 139 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.p31, + -0x1.p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.p31, + -0x1.p31 + }, + { // Entry 169 + -0x1.p31, + -0x1.p31 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 176 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 177 + 0x1.p62, + 0x1.p62 + }, + { // Entry 178 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 179 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 180 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 181 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 182 + 0x1.p63, + 0x1.p63 + }, + { // Entry 183 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 184 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 185 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 186 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 187 + 0x1.p64, + 0x1.p64 + }, + { // Entry 188 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 189 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 190 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 191 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.p62 + }, + { // Entry 193 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 194 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 195 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 196 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.p63 + }, + { // Entry 198 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 199 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 200 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 201 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.p64 + }, + { // Entry 203 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 204 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 205 + 0x1.p62, + 0x1.p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.p63 + }, + { // Entry 209 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 210 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 211 + 0x1.p31, + 0x1.p31 + }, + { // Entry 212 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.p31 + }, + { // Entry 214 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffep1 + }, + { // Entry 216 + 0x1.p2, + 0x1.p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffep2 + }, + { // Entry 219 + 0x1.p3, + 0x1.p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffep3 + }, + { // Entry 222 + 0x1.p4, + 0x1.p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffep4 + }, + { // Entry 225 + 0x1.p5, + 0x1.p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffep5 + }, + { // Entry 228 + 0x1.p6, + 0x1.p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffep6 + }, + { // Entry 231 + 0x1.p7, + 0x1.p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffep7 + }, + { // Entry 234 + 0x1.p8, + 0x1.p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffep8 + }, + { // Entry 237 + 0x1.p9, + 0x1.p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 240 + 0x1.p10, + 0x1.p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffep10 + }, + { // Entry 243 + 0x1.p11, + 0x1.p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffep11 + }, + { // Entry 246 + 0x1.p12, + 0x1.p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 249 + 0x1.p2, + 0x1.20p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.200002p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 252 + 0x1.p3, + 0x1.10p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.100002p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 255 + 0x1.p4, + 0x1.08p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.080002p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 258 + 0x1.p5, + 0x1.04p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.040002p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 261 + 0x1.p6, + 0x1.02p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.020002p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 264 + 0x1.p7, + 0x1.01p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.010002p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 267 + 0x1.p8, + 0x1.0080p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.008002p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 270 + 0x1.p9, + 0x1.0040p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.004002p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 273 + 0x1.p10, + 0x1.0020p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.002002p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.0060p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.006002p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 279 + 0x1.p11, + 0x1.0010p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.001002p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 282 + 0x1.p12, + 0x1.0008p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.000802p12 + }, + { // Entry 284 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 286 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 287 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 288 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 289 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb6p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb6p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 302 + 0.0, + 0x1.000002p-126 + }, + { // Entry 303 + -0.0, + -0x1.000002p-126 + }, + { // Entry 304 + 0.0, + 0x1.p-126 + }, + { // Entry 305 + -0.0, + -0x1.p-126 + }, + { // Entry 306 + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 307 + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 308 + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 309 + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 310 + 0.0, + 0x1.p-148 + }, + { // Entry 311 + -0.0, + -0x1.p-148 + }, + { // Entry 312 + 0.0, + 0x1.p-149 + }, + { // Entry 313 + -0.0, + -0x1.p-149 + }, + { // Entry 314 + 0.0, + 0.0f + }, + { // Entry 315 + -0.0, + -0.0f + }, + { // Entry 316 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 320 + 0.0, + 0x1.fffff0p-2 + }, + { // Entry 321 + 0.0, + 0x1.p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.000010p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffff0p-2 + }, + { // Entry 324 + -0.0, + -0x1.p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.000010p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.800010p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffff0p0 + }, + { // Entry 328 + -0x1.p1, + -0x1.800010p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data/nextafter_intel_data.h b/tests/math_data/nextafter_intel_data.h new file mode 100644 index 000000000..191dbf608 --- /dev/null +++ b/tests/math_data/nextafter_intel_data.h @@ -0,0 +1,2088 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_nextafter_intel_data[] = { + { // Entry 0 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 2 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 3 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 4 + -0.0, + -0.0, + -0.0 + }, + { // Entry 5 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 6 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 7 + 0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 8 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 9 + 0x1.fffffffffffff0p-1, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 10 + 0x1.p0, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 12 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 13 + 0x1.p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 14 + 0x1.00000000000010p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 15 + 0x1.p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 16 + 0x1.p0, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 17 + 0x1.00000000000010p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 18 + 0x1.ffffffffffffe0p-1, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 19 + 0x1.ffffffffffffe0p-1, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 20 + 0x1.ffffffffffffe0p-1, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 21 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 22 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 23 + 0x1.fffffffffffff0p-1, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 24 + 0x1.p0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 25 + 0x1.p0, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 26 + 0x1.p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 27 + -0x1.p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 28 + -0x1.p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 29 + -0x1.p0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 30 + -0x1.fffffffffffff0p-1, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 31 + -0x1.fffffffffffff0p-1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 32 + -0x1.fffffffffffff0p-1, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 33 + -0x1.ffffffffffffe0p-1, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 34 + -0x1.ffffffffffffe0p-1, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 35 + -0x1.ffffffffffffe0p-1, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 36 + -0x1.00000000000010p0, + -0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 37 + -0x1.p0, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 38 + -0x1.p0, + -0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 39 + -0x1.00000000000010p0, + -0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 40 + -0x1.p0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 41 + -0x1.fffffffffffff0p-1, + -0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 42 + -0x1.p0, + -0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 43 + -0x1.p0, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 44 + -0x1.fffffffffffff0p-1, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 45 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 46 + 0x1.p1, + 0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 47 + 0x1.p1, + 0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 48 + 0x1.fffffffffffff0p0, + 0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 49 + 0x1.p1, + 0x1.0p1, + 0x1.0p1 + }, + { // Entry 50 + 0x1.00000000000010p1, + 0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 51 + 0x1.p1, + 0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 52 + 0x1.p1, + 0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 53 + 0x1.00000000000010p1, + 0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 54 + 0x1.ffffffffffffe0p0, + 0x1.fffffffffffffp0, + -0x1.0000000000001p1 + }, + { // Entry 55 + 0x1.ffffffffffffe0p0, + 0x1.fffffffffffffp0, + -0x1.0p1 + }, + { // Entry 56 + 0x1.ffffffffffffe0p0, + 0x1.fffffffffffffp0, + -0x1.fffffffffffffp0 + }, + { // Entry 57 + 0x1.fffffffffffff0p0, + 0x1.0p1, + -0x1.0000000000001p1 + }, + { // Entry 58 + 0x1.fffffffffffff0p0, + 0x1.0p1, + -0x1.0p1 + }, + { // Entry 59 + 0x1.fffffffffffff0p0, + 0x1.0p1, + -0x1.fffffffffffffp0 + }, + { // Entry 60 + 0x1.p1, + 0x1.0000000000001p1, + -0x1.0000000000001p1 + }, + { // Entry 61 + 0x1.p1, + 0x1.0000000000001p1, + -0x1.0p1 + }, + { // Entry 62 + 0x1.p1, + 0x1.0000000000001p1, + -0x1.fffffffffffffp0 + }, + { // Entry 63 + -0x1.p1, + -0x1.0000000000001p1, + 0x1.fffffffffffffp0 + }, + { // Entry 64 + -0x1.p1, + -0x1.0000000000001p1, + 0x1.0p1 + }, + { // Entry 65 + -0x1.p1, + -0x1.0000000000001p1, + 0x1.0000000000001p1 + }, + { // Entry 66 + -0x1.fffffffffffff0p0, + -0x1.0p1, + 0x1.fffffffffffffp0 + }, + { // Entry 67 + -0x1.fffffffffffff0p0, + -0x1.0p1, + 0x1.0p1 + }, + { // Entry 68 + -0x1.fffffffffffff0p0, + -0x1.0p1, + 0x1.0000000000001p1 + }, + { // Entry 69 + -0x1.ffffffffffffe0p0, + -0x1.fffffffffffffp0, + 0x1.fffffffffffffp0 + }, + { // Entry 70 + -0x1.ffffffffffffe0p0, + -0x1.fffffffffffffp0, + 0x1.0p1 + }, + { // Entry 71 + -0x1.ffffffffffffe0p0, + -0x1.fffffffffffffp0, + 0x1.0000000000001p1 + }, + { // Entry 72 + -0x1.00000000000010p1, + -0x1.0000000000001p1, + -0x1.0000000000001p1 + }, + { // Entry 73 + -0x1.p1, + -0x1.0000000000001p1, + -0x1.0p1 + }, + { // Entry 74 + -0x1.p1, + -0x1.0000000000001p1, + -0x1.fffffffffffffp0 + }, + { // Entry 75 + -0x1.00000000000010p1, + -0x1.0p1, + -0x1.0000000000001p1 + }, + { // Entry 76 + -0x1.p1, + -0x1.0p1, + -0x1.0p1 + }, + { // Entry 77 + -0x1.fffffffffffff0p0, + -0x1.0p1, + -0x1.fffffffffffffp0 + }, + { // Entry 78 + -0x1.p1, + -0x1.fffffffffffffp0, + -0x1.0000000000001p1 + }, + { // Entry 79 + -0x1.p1, + -0x1.fffffffffffffp0, + -0x1.0p1 + }, + { // Entry 80 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp0, + -0x1.fffffffffffffp0 + }, + { // Entry 81 + 0x1.fffffffffffff0p9, + 0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 82 + 0x1.p10, + 0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 83 + 0x1.p10, + 0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 84 + 0x1.fffffffffffff0p9, + 0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 85 + 0x1.p10, + 0x1.0p10, + 0x1.0p10 + }, + { // Entry 86 + 0x1.00000000000010p10, + 0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 87 + 0x1.p10, + 0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 88 + 0x1.p10, + 0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 89 + 0x1.00000000000010p10, + 0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 90 + 0x1.ffffffffffffe0p9, + 0x1.fffffffffffffp9, + -0x1.0000000000001p10 + }, + { // Entry 91 + 0x1.ffffffffffffe0p9, + 0x1.fffffffffffffp9, + -0x1.0p10 + }, + { // Entry 92 + 0x1.ffffffffffffe0p9, + 0x1.fffffffffffffp9, + -0x1.fffffffffffffp9 + }, + { // Entry 93 + 0x1.fffffffffffff0p9, + 0x1.0p10, + -0x1.0000000000001p10 + }, + { // Entry 94 + 0x1.fffffffffffff0p9, + 0x1.0p10, + -0x1.0p10 + }, + { // Entry 95 + 0x1.fffffffffffff0p9, + 0x1.0p10, + -0x1.fffffffffffffp9 + }, + { // Entry 96 + 0x1.p10, + 0x1.0000000000001p10, + -0x1.0000000000001p10 + }, + { // Entry 97 + 0x1.p10, + 0x1.0000000000001p10, + -0x1.0p10 + }, + { // Entry 98 + 0x1.p10, + 0x1.0000000000001p10, + -0x1.fffffffffffffp9 + }, + { // Entry 99 + -0x1.p10, + -0x1.0000000000001p10, + 0x1.fffffffffffffp9 + }, + { // Entry 100 + -0x1.p10, + -0x1.0000000000001p10, + 0x1.0p10 + }, + { // Entry 101 + -0x1.p10, + -0x1.0000000000001p10, + 0x1.0000000000001p10 + }, + { // Entry 102 + -0x1.fffffffffffff0p9, + -0x1.0p10, + 0x1.fffffffffffffp9 + }, + { // Entry 103 + -0x1.fffffffffffff0p9, + -0x1.0p10, + 0x1.0p10 + }, + { // Entry 104 + -0x1.fffffffffffff0p9, + -0x1.0p10, + 0x1.0000000000001p10 + }, + { // Entry 105 + -0x1.ffffffffffffe0p9, + -0x1.fffffffffffffp9, + 0x1.fffffffffffffp9 + }, + { // Entry 106 + -0x1.ffffffffffffe0p9, + -0x1.fffffffffffffp9, + 0x1.0p10 + }, + { // Entry 107 + -0x1.ffffffffffffe0p9, + -0x1.fffffffffffffp9, + 0x1.0000000000001p10 + }, + { // Entry 108 + -0x1.00000000000010p10, + -0x1.0000000000001p10, + -0x1.0000000000001p10 + }, + { // Entry 109 + -0x1.p10, + -0x1.0000000000001p10, + -0x1.0p10 + }, + { // Entry 110 + -0x1.p10, + -0x1.0000000000001p10, + -0x1.fffffffffffffp9 + }, + { // Entry 111 + -0x1.00000000000010p10, + -0x1.0p10, + -0x1.0000000000001p10 + }, + { // Entry 112 + -0x1.p10, + -0x1.0p10, + -0x1.0p10 + }, + { // Entry 113 + -0x1.fffffffffffff0p9, + -0x1.0p10, + -0x1.fffffffffffffp9 + }, + { // Entry 114 + -0x1.p10, + -0x1.fffffffffffffp9, + -0x1.0000000000001p10 + }, + { // Entry 115 + -0x1.p10, + -0x1.fffffffffffffp9, + -0x1.0p10 + }, + { // Entry 116 + -0x1.fffffffffffff0p9, + -0x1.fffffffffffffp9, + -0x1.fffffffffffffp9 + }, + { // Entry 117 + 0x1.fffffffffffff0p99, + 0x1.fffffffffffffp99, + 0x1.fffffffffffffp99 + }, + { // Entry 118 + 0x1.p100, + 0x1.fffffffffffffp99, + 0x1.0p100 + }, + { // Entry 119 + 0x1.p100, + 0x1.fffffffffffffp99, + 0x1.0000000000001p100 + }, + { // Entry 120 + 0x1.fffffffffffff0p99, + 0x1.0p100, + 0x1.fffffffffffffp99 + }, + { // Entry 121 + 0x1.p100, + 0x1.0p100, + 0x1.0p100 + }, + { // Entry 122 + 0x1.00000000000010p100, + 0x1.0p100, + 0x1.0000000000001p100 + }, + { // Entry 123 + 0x1.p100, + 0x1.0000000000001p100, + 0x1.fffffffffffffp99 + }, + { // Entry 124 + 0x1.p100, + 0x1.0000000000001p100, + 0x1.0p100 + }, + { // Entry 125 + 0x1.00000000000010p100, + 0x1.0000000000001p100, + 0x1.0000000000001p100 + }, + { // Entry 126 + 0x1.ffffffffffffe0p99, + 0x1.fffffffffffffp99, + -0x1.0000000000001p100 + }, + { // Entry 127 + 0x1.ffffffffffffe0p99, + 0x1.fffffffffffffp99, + -0x1.0p100 + }, + { // Entry 128 + 0x1.ffffffffffffe0p99, + 0x1.fffffffffffffp99, + -0x1.fffffffffffffp99 + }, + { // Entry 129 + 0x1.fffffffffffff0p99, + 0x1.0p100, + -0x1.0000000000001p100 + }, + { // Entry 130 + 0x1.fffffffffffff0p99, + 0x1.0p100, + -0x1.0p100 + }, + { // Entry 131 + 0x1.fffffffffffff0p99, + 0x1.0p100, + -0x1.fffffffffffffp99 + }, + { // Entry 132 + 0x1.p100, + 0x1.0000000000001p100, + -0x1.0000000000001p100 + }, + { // Entry 133 + 0x1.p100, + 0x1.0000000000001p100, + -0x1.0p100 + }, + { // Entry 134 + 0x1.p100, + 0x1.0000000000001p100, + -0x1.fffffffffffffp99 + }, + { // Entry 135 + -0x1.p100, + -0x1.0000000000001p100, + 0x1.fffffffffffffp99 + }, + { // Entry 136 + -0x1.p100, + -0x1.0000000000001p100, + 0x1.0p100 + }, + { // Entry 137 + -0x1.p100, + -0x1.0000000000001p100, + 0x1.0000000000001p100 + }, + { // Entry 138 + -0x1.fffffffffffff0p99, + -0x1.0p100, + 0x1.fffffffffffffp99 + }, + { // Entry 139 + -0x1.fffffffffffff0p99, + -0x1.0p100, + 0x1.0p100 + }, + { // Entry 140 + -0x1.fffffffffffff0p99, + -0x1.0p100, + 0x1.0000000000001p100 + }, + { // Entry 141 + -0x1.ffffffffffffe0p99, + -0x1.fffffffffffffp99, + 0x1.fffffffffffffp99 + }, + { // Entry 142 + -0x1.ffffffffffffe0p99, + -0x1.fffffffffffffp99, + 0x1.0p100 + }, + { // Entry 143 + -0x1.ffffffffffffe0p99, + -0x1.fffffffffffffp99, + 0x1.0000000000001p100 + }, + { // Entry 144 + -0x1.00000000000010p100, + -0x1.0000000000001p100, + -0x1.0000000000001p100 + }, + { // Entry 145 + -0x1.p100, + -0x1.0000000000001p100, + -0x1.0p100 + }, + { // Entry 146 + -0x1.p100, + -0x1.0000000000001p100, + -0x1.fffffffffffffp99 + }, + { // Entry 147 + -0x1.00000000000010p100, + -0x1.0p100, + -0x1.0000000000001p100 + }, + { // Entry 148 + -0x1.p100, + -0x1.0p100, + -0x1.0p100 + }, + { // Entry 149 + -0x1.fffffffffffff0p99, + -0x1.0p100, + -0x1.fffffffffffffp99 + }, + { // Entry 150 + -0x1.p100, + -0x1.fffffffffffffp99, + -0x1.0000000000001p100 + }, + { // Entry 151 + -0x1.p100, + -0x1.fffffffffffffp99, + -0x1.0p100 + }, + { // Entry 152 + -0x1.fffffffffffff0p99, + -0x1.fffffffffffffp99, + -0x1.fffffffffffffp99 + }, + { // Entry 153 + 0x1.fffffffffffff0p999, + 0x1.fffffffffffffp999, + 0x1.fffffffffffffp999 + }, + { // Entry 154 + 0x1.p1000, + 0x1.fffffffffffffp999, + 0x1.0p1000 + }, + { // Entry 155 + 0x1.p1000, + 0x1.fffffffffffffp999, + 0x1.0000000000001p1000 + }, + { // Entry 156 + 0x1.fffffffffffff0p999, + 0x1.0p1000, + 0x1.fffffffffffffp999 + }, + { // Entry 157 + 0x1.p1000, + 0x1.0p1000, + 0x1.0p1000 + }, + { // Entry 158 + 0x1.00000000000010p1000, + 0x1.0p1000, + 0x1.0000000000001p1000 + }, + { // Entry 159 + 0x1.p1000, + 0x1.0000000000001p1000, + 0x1.fffffffffffffp999 + }, + { // Entry 160 + 0x1.p1000, + 0x1.0000000000001p1000, + 0x1.0p1000 + }, + { // Entry 161 + 0x1.00000000000010p1000, + 0x1.0000000000001p1000, + 0x1.0000000000001p1000 + }, + { // Entry 162 + 0x1.ffffffffffffe0p999, + 0x1.fffffffffffffp999, + -0x1.0000000000001p1000 + }, + { // Entry 163 + 0x1.ffffffffffffe0p999, + 0x1.fffffffffffffp999, + -0x1.0p1000 + }, + { // Entry 164 + 0x1.ffffffffffffe0p999, + 0x1.fffffffffffffp999, + -0x1.fffffffffffffp999 + }, + { // Entry 165 + 0x1.fffffffffffff0p999, + 0x1.0p1000, + -0x1.0000000000001p1000 + }, + { // Entry 166 + 0x1.fffffffffffff0p999, + 0x1.0p1000, + -0x1.0p1000 + }, + { // Entry 167 + 0x1.fffffffffffff0p999, + 0x1.0p1000, + -0x1.fffffffffffffp999 + }, + { // Entry 168 + 0x1.p1000, + 0x1.0000000000001p1000, + -0x1.0000000000001p1000 + }, + { // Entry 169 + 0x1.p1000, + 0x1.0000000000001p1000, + -0x1.0p1000 + }, + { // Entry 170 + 0x1.p1000, + 0x1.0000000000001p1000, + -0x1.fffffffffffffp999 + }, + { // Entry 171 + -0x1.p1000, + -0x1.0000000000001p1000, + 0x1.fffffffffffffp999 + }, + { // Entry 172 + -0x1.p1000, + -0x1.0000000000001p1000, + 0x1.0p1000 + }, + { // Entry 173 + -0x1.p1000, + -0x1.0000000000001p1000, + 0x1.0000000000001p1000 + }, + { // Entry 174 + -0x1.fffffffffffff0p999, + -0x1.0p1000, + 0x1.fffffffffffffp999 + }, + { // Entry 175 + -0x1.fffffffffffff0p999, + -0x1.0p1000, + 0x1.0p1000 + }, + { // Entry 176 + -0x1.fffffffffffff0p999, + -0x1.0p1000, + 0x1.0000000000001p1000 + }, + { // Entry 177 + -0x1.ffffffffffffe0p999, + -0x1.fffffffffffffp999, + 0x1.fffffffffffffp999 + }, + { // Entry 178 + -0x1.ffffffffffffe0p999, + -0x1.fffffffffffffp999, + 0x1.0p1000 + }, + { // Entry 179 + -0x1.ffffffffffffe0p999, + -0x1.fffffffffffffp999, + 0x1.0000000000001p1000 + }, + { // Entry 180 + -0x1.00000000000010p1000, + -0x1.0000000000001p1000, + -0x1.0000000000001p1000 + }, + { // Entry 181 + -0x1.p1000, + -0x1.0000000000001p1000, + -0x1.0p1000 + }, + { // Entry 182 + -0x1.p1000, + -0x1.0000000000001p1000, + -0x1.fffffffffffffp999 + }, + { // Entry 183 + -0x1.00000000000010p1000, + -0x1.0p1000, + -0x1.0000000000001p1000 + }, + { // Entry 184 + -0x1.p1000, + -0x1.0p1000, + -0x1.0p1000 + }, + { // Entry 185 + -0x1.fffffffffffff0p999, + -0x1.0p1000, + -0x1.fffffffffffffp999 + }, + { // Entry 186 + -0x1.p1000, + -0x1.fffffffffffffp999, + -0x1.0000000000001p1000 + }, + { // Entry 187 + -0x1.p1000, + -0x1.fffffffffffffp999, + -0x1.0p1000 + }, + { // Entry 188 + -0x1.fffffffffffff0p999, + -0x1.fffffffffffffp999, + -0x1.fffffffffffffp999 + }, + { // Entry 189 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 190 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 191 + 0x1.fffffffffffff0p1023, + 0x1.ffffffffffffep1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 192 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 193 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 194 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 195 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 196 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 197 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 198 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 199 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 200 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 201 + -0x1.fffffffffffff0p1023, + -0x1.ffffffffffffep1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 202 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 203 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 204 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffdp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 205 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffdp1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 206 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffdp1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 207 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 208 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 209 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 210 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 211 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 212 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 213 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 214 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 215 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffdp1023 + }, + { // Entry 216 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 217 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 218 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 219 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 220 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 221 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 222 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 223 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 224 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 225 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + -0x1.0p-1074 + }, + { // Entry 226 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + -0.0 + }, + { // Entry 227 + 0x1.ffffffffffffd0p1023, + 0x1.ffffffffffffep1023, + 0x1.0p-1074 + }, + { // Entry 228 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 229 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 230 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 231 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 232 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 233 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 234 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 235 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 236 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 237 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + -0x1.0p-1074 + }, + { // Entry 238 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + -0.0 + }, + { // Entry 239 + -0x1.ffffffffffffd0p1023, + -0x1.ffffffffffffep1023, + 0x1.0p-1074 + }, + { // Entry 240 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + -0x1.0p-1074 + }, + { // Entry 241 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + -0.0 + }, + { // Entry 242 + -0x1.ffffffffffffc0p1023, + -0x1.ffffffffffffdp1023, + 0x1.0p-1074 + }, + { // Entry 243 + -0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep1023 + }, + { // Entry 244 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 245 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 246 + 0x1.p-1074, + -0.0, + 0x1.ffffffffffffep1023 + }, + { // Entry 247 + 0x1.p-1074, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 248 + 0x1.p-1074, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 249 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.ffffffffffffep1023 + }, + { // Entry 250 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 251 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 252 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 253 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.ffffffffffffep1023 + }, + { // Entry 254 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.ffffffffffffdp1023 + }, + { // Entry 255 + -0x1.p-1074, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 256 + -0x1.p-1074, + -0.0, + -0x1.ffffffffffffep1023 + }, + { // Entry 257 + -0x1.p-1074, + -0.0, + -0x1.ffffffffffffdp1023 + }, + { // Entry 258 + 0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 259 + 0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep1023 + }, + { // Entry 260 + 0.0, + 0x1.0p-1074, + -0x1.ffffffffffffdp1023 + }, + { // Entry 261 + 0x1.00000fffffffe0p1, + 0x1.00000fffffffep1, + 0x1.00000fffffffep1 + }, + { // Entry 262 + 0x1.00000ffffffff0p1, + 0x1.00000fffffffep1, + 0x1.00000ffffffffp1 + }, + { // Entry 263 + 0x1.00000ffffffff0p1, + 0x1.00000fffffffep1, + 0x1.00001p1 + }, + { // Entry 264 + 0x1.00000fffffffe0p1, + 0x1.00000ffffffffp1, + 0x1.00000fffffffep1 + }, + { // Entry 265 + 0x1.00000ffffffff0p1, + 0x1.00000ffffffffp1, + 0x1.00000ffffffffp1 + }, + { // Entry 266 + 0x1.000010p1, + 0x1.00000ffffffffp1, + 0x1.00001p1 + }, + { // Entry 267 + 0x1.00000ffffffff0p1, + 0x1.00001p1, + 0x1.00000fffffffep1 + }, + { // Entry 268 + 0x1.00000ffffffff0p1, + 0x1.00001p1, + 0x1.00000ffffffffp1 + }, + { // Entry 269 + 0x1.000010p1, + 0x1.00001p1, + 0x1.00001p1 + }, + { // Entry 270 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 271 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 272 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 273 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 274 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 275 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + 0.0 + }, + { // Entry 276 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -0.0 + }, + { // Entry 277 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 278 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 279 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 280 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 281 + 0x1.fffffffffffff0p1023, + HUGE_VAL, + -HUGE_VAL + }, + { // Entry 282 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 283 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 284 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 285 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 286 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 287 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 289 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 290 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 291 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 292 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 293 + 0x1.ffffffffffffe0p1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 294 + 0x1.00000000000010p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 295 + 0x1.00000000000010p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 296 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 297 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 298 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 299 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + 0.0 + }, + { // Entry 300 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0.0 + }, + { // Entry 301 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 302 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 303 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 304 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 305 + 0x1.ffffffffffffe0p-1023, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 306 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 307 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 308 + 0x1.p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 309 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 310 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 311 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 312 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 313 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 314 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 315 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 316 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 317 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 318 + 0x1.p-1073, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 319 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 320 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 321 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 322 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 323 + 0.0, + 0x1.0p-1074, + 0.0 + }, + { // Entry 324 + 0.0, + 0x1.0p-1074, + -0.0 + }, + { // Entry 325 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 326 + 0.0, + 0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 327 + 0.0, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 328 + 0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 329 + 0.0, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 330 + 0x1.p-1074, + 0.0, + HUGE_VAL + }, + { // Entry 331 + 0x1.p-1074, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 332 + 0x1.p-1074, + 0.0, + 0x1.0p-1022 + }, + { // Entry 333 + 0x1.p-1074, + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 334 + 0x1.p-1074, + 0.0, + 0x1.0p-1074 + }, + { // Entry 335 + 0.0, + 0.0, + 0.0 + }, + { // Entry 336 + -0.0, + 0.0, + -0.0 + }, + { // Entry 337 + -0x1.p-1074, + 0.0, + -0x1.0p-1074 + }, + { // Entry 338 + -0x1.p-1074, + 0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 339 + -0x1.p-1074, + 0.0, + -0x1.0p-1022 + }, + { // Entry 340 + -0x1.p-1074, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 341 + -0x1.p-1074, + 0.0, + -HUGE_VAL + }, + { // Entry 342 + 0x1.p-1074, + -0.0, + HUGE_VAL + }, + { // Entry 343 + 0x1.p-1074, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 344 + 0x1.p-1074, + -0.0, + 0x1.0p-1022 + }, + { // Entry 345 + 0x1.p-1074, + -0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 346 + 0x1.p-1074, + -0.0, + 0x1.0p-1074 + }, + { // Entry 347 + 0.0, + -0.0, + 0.0 + }, + { // Entry 348 + -0.0, + -0.0, + -0.0 + }, + { // Entry 349 + -0x1.p-1074, + -0.0, + -0x1.0p-1074 + }, + { // Entry 350 + -0x1.p-1074, + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 351 + -0x1.p-1074, + -0.0, + -0x1.0p-1022 + }, + { // Entry 352 + -0x1.p-1074, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 353 + -0x1.p-1074, + -0.0, + -HUGE_VAL + }, + { // Entry 354 + -0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 355 + -0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 356 + -0.0, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 357 + -0.0, + -0x1.0p-1074, + 0x1.ffffffffffffep-1023 + }, + { // Entry 358 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 359 + -0.0, + -0x1.0p-1074, + 0.0 + }, + { // Entry 360 + -0.0, + -0x1.0p-1074, + -0.0 + }, + { // Entry 361 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 362 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.ffffffffffffep-1023 + }, + { // Entry 363 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 364 + -0x1.p-1073, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 365 + -0x1.p-1073, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 366 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 367 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 368 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1022 + }, + { // Entry 369 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 370 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + 0x1.0p-1074 + }, + { // Entry 371 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 372 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 373 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.0p-1074 + }, + { // Entry 374 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 375 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0x1.0p-1022 + }, + { // Entry 376 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 377 + -0x1.p-1022, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 378 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 379 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 380 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 381 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.ffffffffffffep-1023 + }, + { // Entry 382 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 383 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + 0.0 + }, + { // Entry 384 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0.0 + }, + { // Entry 385 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 386 + -0x1.ffffffffffffe0p-1023, + -0x1.0p-1022, + -0x1.ffffffffffffep-1023 + }, + { // Entry 387 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 388 + -0x1.00000000000010p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 389 + -0x1.00000000000010p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 390 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 391 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 392 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 393 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 394 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 395 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 396 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 397 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 398 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 399 + -0x1.ffffffffffffe0p1023, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 400 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 401 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 402 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 403 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 404 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0x1.0p-1022 + }, + { // Entry 405 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0x1.ffffffffffffep-1023 + }, + { // Entry 406 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0x1.0p-1074 + }, + { // Entry 407 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + 0.0 + }, + { // Entry 408 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0.0 + }, + { // Entry 409 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0x1.0p-1074 + }, + { // Entry 410 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0x1.ffffffffffffep-1023 + }, + { // Entry 411 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0x1.0p-1022 + }, + { // Entry 412 + -0x1.fffffffffffff0p1023, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 413 + -HUGE_VAL, + -HUGE_VAL, + -HUGE_VAL + } +}; diff --git a/tests/math_data/nextafterf_intel_data.h b/tests/math_data/nextafterf_intel_data.h new file mode 100644 index 000000000..f47bce2ea --- /dev/null +++ b/tests/math_data/nextafterf_intel_data.h @@ -0,0 +1,1863 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_nextafterf_intel_data[] = { + { // Entry 0 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 1 + -0.0, + -0x1.p-149, + 0.0 + }, + { // Entry 2 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 3 + -0x1.p-149, + 0.0, + -0x1.p-149 + }, + { // Entry 4 + 0.0, + 0.0, + 0.0 + }, + { // Entry 5 + 0x1.p-149, + 0.0, + 0x1.p-149 + }, + { // Entry 6 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 7 + 0.0, + 0x1.p-149, + 0.0 + }, + { // Entry 8 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 9 + 0x1.fffffep-1, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 10 + 0x1.p0, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 12 + 0x1.fffffep-1, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 13 + 0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 14 + 0x1.000002p0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 15 + 0x1.p0, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 16 + 0x1.p0, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 17 + 0x1.000002p0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 18 + 0x1.fffffcp-1, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 19 + 0x1.fffffcp-1, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 20 + 0x1.fffffcp-1, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 21 + 0x1.fffffep-1, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 22 + 0x1.fffffep-1, + 0x1.p0, + -0x1.p0 + }, + { // Entry 23 + 0x1.fffffep-1, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 24 + 0x1.p0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 25 + 0x1.p0, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 26 + 0x1.p0, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 27 + -0x1.p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 28 + -0x1.p0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 29 + -0x1.p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 30 + -0x1.fffffep-1, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 31 + -0x1.fffffep-1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 32 + -0x1.fffffep-1, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 33 + -0x1.fffffcp-1, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 34 + -0x1.fffffcp-1, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 35 + -0x1.fffffcp-1, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 36 + -0x1.000002p0, + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 37 + -0x1.p0, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 38 + -0x1.p0, + -0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 39 + -0x1.000002p0, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 40 + -0x1.p0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 41 + -0x1.fffffep-1, + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 42 + -0x1.p0, + -0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 43 + -0x1.p0, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 44 + -0x1.fffffep-1, + -0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 45 + 0x1.fffffep0, + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 46 + 0x1.p1, + 0x1.fffffep0, + 0x1.p1 + }, + { // Entry 47 + 0x1.p1, + 0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 48 + 0x1.fffffep0, + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 49 + 0x1.p1, + 0x1.p1, + 0x1.p1 + }, + { // Entry 50 + 0x1.000002p1, + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 51 + 0x1.p1, + 0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 52 + 0x1.p1, + 0x1.000002p1, + 0x1.p1 + }, + { // Entry 53 + 0x1.000002p1, + 0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 54 + 0x1.fffffcp0, + 0x1.fffffep0, + -0x1.000002p1 + }, + { // Entry 55 + 0x1.fffffcp0, + 0x1.fffffep0, + -0x1.p1 + }, + { // Entry 56 + 0x1.fffffcp0, + 0x1.fffffep0, + -0x1.fffffep0 + }, + { // Entry 57 + 0x1.fffffep0, + 0x1.p1, + -0x1.000002p1 + }, + { // Entry 58 + 0x1.fffffep0, + 0x1.p1, + -0x1.p1 + }, + { // Entry 59 + 0x1.fffffep0, + 0x1.p1, + -0x1.fffffep0 + }, + { // Entry 60 + 0x1.p1, + 0x1.000002p1, + -0x1.000002p1 + }, + { // Entry 61 + 0x1.p1, + 0x1.000002p1, + -0x1.p1 + }, + { // Entry 62 + 0x1.p1, + 0x1.000002p1, + -0x1.fffffep0 + }, + { // Entry 63 + -0x1.p1, + -0x1.000002p1, + 0x1.fffffep0 + }, + { // Entry 64 + -0x1.p1, + -0x1.000002p1, + 0x1.p1 + }, + { // Entry 65 + -0x1.p1, + -0x1.000002p1, + 0x1.000002p1 + }, + { // Entry 66 + -0x1.fffffep0, + -0x1.p1, + 0x1.fffffep0 + }, + { // Entry 67 + -0x1.fffffep0, + -0x1.p1, + 0x1.p1 + }, + { // Entry 68 + -0x1.fffffep0, + -0x1.p1, + 0x1.000002p1 + }, + { // Entry 69 + -0x1.fffffcp0, + -0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 70 + -0x1.fffffcp0, + -0x1.fffffep0, + 0x1.p1 + }, + { // Entry 71 + -0x1.fffffcp0, + -0x1.fffffep0, + 0x1.000002p1 + }, + { // Entry 72 + -0x1.000002p1, + -0x1.000002p1, + -0x1.000002p1 + }, + { // Entry 73 + -0x1.p1, + -0x1.000002p1, + -0x1.p1 + }, + { // Entry 74 + -0x1.p1, + -0x1.000002p1, + -0x1.fffffep0 + }, + { // Entry 75 + -0x1.000002p1, + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 76 + -0x1.p1, + -0x1.p1, + -0x1.p1 + }, + { // Entry 77 + -0x1.fffffep0, + -0x1.p1, + -0x1.fffffep0 + }, + { // Entry 78 + -0x1.p1, + -0x1.fffffep0, + -0x1.000002p1 + }, + { // Entry 79 + -0x1.p1, + -0x1.fffffep0, + -0x1.p1 + }, + { // Entry 80 + -0x1.fffffep0, + -0x1.fffffep0, + -0x1.fffffep0 + }, + { // Entry 81 + 0x1.fffffep9, + 0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 82 + 0x1.p10, + 0x1.fffffep9, + 0x1.p10 + }, + { // Entry 83 + 0x1.p10, + 0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 84 + 0x1.fffffep9, + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 85 + 0x1.p10, + 0x1.p10, + 0x1.p10 + }, + { // Entry 86 + 0x1.000002p10, + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 87 + 0x1.p10, + 0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 88 + 0x1.p10, + 0x1.000002p10, + 0x1.p10 + }, + { // Entry 89 + 0x1.000002p10, + 0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 90 + 0x1.fffffcp9, + 0x1.fffffep9, + -0x1.000002p10 + }, + { // Entry 91 + 0x1.fffffcp9, + 0x1.fffffep9, + -0x1.p10 + }, + { // Entry 92 + 0x1.fffffcp9, + 0x1.fffffep9, + -0x1.fffffep9 + }, + { // Entry 93 + 0x1.fffffep9, + 0x1.p10, + -0x1.000002p10 + }, + { // Entry 94 + 0x1.fffffep9, + 0x1.p10, + -0x1.p10 + }, + { // Entry 95 + 0x1.fffffep9, + 0x1.p10, + -0x1.fffffep9 + }, + { // Entry 96 + 0x1.p10, + 0x1.000002p10, + -0x1.000002p10 + }, + { // Entry 97 + 0x1.p10, + 0x1.000002p10, + -0x1.p10 + }, + { // Entry 98 + 0x1.p10, + 0x1.000002p10, + -0x1.fffffep9 + }, + { // Entry 99 + -0x1.p10, + -0x1.000002p10, + 0x1.fffffep9 + }, + { // Entry 100 + -0x1.p10, + -0x1.000002p10, + 0x1.p10 + }, + { // Entry 101 + -0x1.p10, + -0x1.000002p10, + 0x1.000002p10 + }, + { // Entry 102 + -0x1.fffffep9, + -0x1.p10, + 0x1.fffffep9 + }, + { // Entry 103 + -0x1.fffffep9, + -0x1.p10, + 0x1.p10 + }, + { // Entry 104 + -0x1.fffffep9, + -0x1.p10, + 0x1.000002p10 + }, + { // Entry 105 + -0x1.fffffcp9, + -0x1.fffffep9, + 0x1.fffffep9 + }, + { // Entry 106 + -0x1.fffffcp9, + -0x1.fffffep9, + 0x1.p10 + }, + { // Entry 107 + -0x1.fffffcp9, + -0x1.fffffep9, + 0x1.000002p10 + }, + { // Entry 108 + -0x1.000002p10, + -0x1.000002p10, + -0x1.000002p10 + }, + { // Entry 109 + -0x1.p10, + -0x1.000002p10, + -0x1.p10 + }, + { // Entry 110 + -0x1.p10, + -0x1.000002p10, + -0x1.fffffep9 + }, + { // Entry 111 + -0x1.000002p10, + -0x1.p10, + -0x1.000002p10 + }, + { // Entry 112 + -0x1.p10, + -0x1.p10, + -0x1.p10 + }, + { // Entry 113 + -0x1.fffffep9, + -0x1.p10, + -0x1.fffffep9 + }, + { // Entry 114 + -0x1.p10, + -0x1.fffffep9, + -0x1.000002p10 + }, + { // Entry 115 + -0x1.p10, + -0x1.fffffep9, + -0x1.p10 + }, + { // Entry 116 + -0x1.fffffep9, + -0x1.fffffep9, + -0x1.fffffep9 + }, + { // Entry 117 + 0x1.fffffep99, + 0x1.fffffep99, + 0x1.fffffep99 + }, + { // Entry 118 + 0x1.p100, + 0x1.fffffep99, + 0x1.p100 + }, + { // Entry 119 + 0x1.p100, + 0x1.fffffep99, + 0x1.000002p100 + }, + { // Entry 120 + 0x1.fffffep99, + 0x1.p100, + 0x1.fffffep99 + }, + { // Entry 121 + 0x1.p100, + 0x1.p100, + 0x1.p100 + }, + { // Entry 122 + 0x1.000002p100, + 0x1.p100, + 0x1.000002p100 + }, + { // Entry 123 + 0x1.p100, + 0x1.000002p100, + 0x1.fffffep99 + }, + { // Entry 124 + 0x1.p100, + 0x1.000002p100, + 0x1.p100 + }, + { // Entry 125 + 0x1.000002p100, + 0x1.000002p100, + 0x1.000002p100 + }, + { // Entry 126 + 0x1.fffffcp99, + 0x1.fffffep99, + -0x1.000002p100 + }, + { // Entry 127 + 0x1.fffffcp99, + 0x1.fffffep99, + -0x1.p100 + }, + { // Entry 128 + 0x1.fffffcp99, + 0x1.fffffep99, + -0x1.fffffep99 + }, + { // Entry 129 + 0x1.fffffep99, + 0x1.p100, + -0x1.000002p100 + }, + { // Entry 130 + 0x1.fffffep99, + 0x1.p100, + -0x1.p100 + }, + { // Entry 131 + 0x1.fffffep99, + 0x1.p100, + -0x1.fffffep99 + }, + { // Entry 132 + 0x1.p100, + 0x1.000002p100, + -0x1.000002p100 + }, + { // Entry 133 + 0x1.p100, + 0x1.000002p100, + -0x1.p100 + }, + { // Entry 134 + 0x1.p100, + 0x1.000002p100, + -0x1.fffffep99 + }, + { // Entry 135 + -0x1.p100, + -0x1.000002p100, + 0x1.fffffep99 + }, + { // Entry 136 + -0x1.p100, + -0x1.000002p100, + 0x1.p100 + }, + { // Entry 137 + -0x1.p100, + -0x1.000002p100, + 0x1.000002p100 + }, + { // Entry 138 + -0x1.fffffep99, + -0x1.p100, + 0x1.fffffep99 + }, + { // Entry 139 + -0x1.fffffep99, + -0x1.p100, + 0x1.p100 + }, + { // Entry 140 + -0x1.fffffep99, + -0x1.p100, + 0x1.000002p100 + }, + { // Entry 141 + -0x1.fffffcp99, + -0x1.fffffep99, + 0x1.fffffep99 + }, + { // Entry 142 + -0x1.fffffcp99, + -0x1.fffffep99, + 0x1.p100 + }, + { // Entry 143 + -0x1.fffffcp99, + -0x1.fffffep99, + 0x1.000002p100 + }, + { // Entry 144 + -0x1.000002p100, + -0x1.000002p100, + -0x1.000002p100 + }, + { // Entry 145 + -0x1.p100, + -0x1.000002p100, + -0x1.p100 + }, + { // Entry 146 + -0x1.p100, + -0x1.000002p100, + -0x1.fffffep99 + }, + { // Entry 147 + -0x1.000002p100, + -0x1.p100, + -0x1.000002p100 + }, + { // Entry 148 + -0x1.p100, + -0x1.p100, + -0x1.p100 + }, + { // Entry 149 + -0x1.fffffep99, + -0x1.p100, + -0x1.fffffep99 + }, + { // Entry 150 + -0x1.p100, + -0x1.fffffep99, + -0x1.000002p100 + }, + { // Entry 151 + -0x1.p100, + -0x1.fffffep99, + -0x1.p100 + }, + { // Entry 152 + -0x1.fffffep99, + -0x1.fffffep99, + -0x1.fffffep99 + }, + { // Entry 153 + 0x1.fffffcp127, + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 154 + 0x1.fffffep127, + 0x1.fffffcp127, + 0x1.fffffep127 + }, + { // Entry 155 + 0x1.fffffep127, + 0x1.fffffcp127, + 0x1.fffffep127 + }, + { // Entry 156 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.fffffcp127 + }, + { // Entry 157 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 158 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 159 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.fffffcp127 + }, + { // Entry 160 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 161 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 162 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 163 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.fffffcp127 + }, + { // Entry 164 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.fffffap127 + }, + { // Entry 165 + -0x1.fffffep127, + -0x1.fffffcp127, + -0x1.fffffep127 + }, + { // Entry 166 + -0x1.fffffcp127, + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 167 + -0x1.fffffap127, + -0x1.fffffcp127, + -0x1.fffffap127 + }, + { // Entry 168 + -0x1.fffffcp127, + -0x1.fffffap127, + -0x1.fffffep127 + }, + { // Entry 169 + -0x1.fffffcp127, + -0x1.fffffap127, + -0x1.fffffcp127 + }, + { // Entry 170 + -0x1.fffffap127, + -0x1.fffffap127, + -0x1.fffffap127 + }, + { // Entry 171 + 0x1.fffffap127, + 0x1.fffffcp127, + -0x1.fffffep127 + }, + { // Entry 172 + 0x1.fffffap127, + 0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 173 + 0x1.fffffap127, + 0x1.fffffcp127, + -0x1.fffffap127 + }, + { // Entry 174 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 175 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffcp127 + }, + { // Entry 176 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffap127 + }, + { // Entry 177 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 178 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffcp127 + }, + { // Entry 179 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffap127 + }, + { // Entry 180 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.fffffcp127 + }, + { // Entry 181 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 182 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 183 + -0x1.fffffap127, + -0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 184 + -0x1.fffffap127, + -0x1.fffffcp127, + 0x1.fffffep127 + }, + { // Entry 185 + -0x1.fffffap127, + -0x1.fffffcp127, + 0x1.fffffep127 + }, + { // Entry 186 + -0x1.fffff8p127, + -0x1.fffffap127, + 0x1.fffffcp127 + }, + { // Entry 187 + -0x1.fffff8p127, + -0x1.fffffap127, + 0x1.fffffep127 + }, + { // Entry 188 + -0x1.fffff8p127, + -0x1.fffffap127, + 0x1.fffffep127 + }, + { // Entry 189 + 0x1.fffffap127, + 0x1.fffffcp127, + -0x1.p-149 + }, + { // Entry 190 + 0x1.fffffap127, + 0x1.fffffcp127, + 0.0 + }, + { // Entry 191 + 0x1.fffffap127, + 0x1.fffffcp127, + 0x1.p-149 + }, + { // Entry 192 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 193 + 0x1.fffffcp127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 194 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 195 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 196 + 0x1.fffffcp127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 197 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 198 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 199 + -0x1.fffffcp127, + -0x1.fffffep127, + 0.0 + }, + { // Entry 200 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 201 + -0x1.fffffap127, + -0x1.fffffcp127, + -0x1.p-149 + }, + { // Entry 202 + -0x1.fffffap127, + -0x1.fffffcp127, + 0.0 + }, + { // Entry 203 + -0x1.fffffap127, + -0x1.fffffcp127, + 0x1.p-149 + }, + { // Entry 204 + -0x1.fffff8p127, + -0x1.fffffap127, + -0x1.p-149 + }, + { // Entry 205 + -0x1.fffff8p127, + -0x1.fffffap127, + 0.0 + }, + { // Entry 206 + -0x1.fffff8p127, + -0x1.fffffap127, + 0x1.p-149 + }, + { // Entry 207 + -0.0, + -0x1.p-149, + 0x1.fffffcp127 + }, + { // Entry 208 + -0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 209 + -0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 210 + 0x1.p-149, + 0.0, + 0x1.fffffcp127 + }, + { // Entry 211 + 0x1.p-149, + 0.0, + 0x1.fffffep127 + }, + { // Entry 212 + 0x1.p-149, + 0.0, + 0x1.fffffep127 + }, + { // Entry 213 + 0x1.p-148, + 0x1.p-149, + 0x1.fffffcp127 + }, + { // Entry 214 + 0x1.p-148, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 215 + 0x1.p-148, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 216 + -0x1.p-148, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 217 + -0x1.p-148, + -0x1.p-149, + -0x1.fffffcp127 + }, + { // Entry 218 + -0x1.p-148, + -0x1.p-149, + -0x1.fffffap127 + }, + { // Entry 219 + -0x1.p-149, + 0.0, + -0x1.fffffep127 + }, + { // Entry 220 + -0x1.p-149, + 0.0, + -0x1.fffffcp127 + }, + { // Entry 221 + -0x1.p-149, + 0.0, + -0x1.fffffap127 + }, + { // Entry 222 + 0.0, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 223 + 0.0, + 0x1.p-149, + -0x1.fffffcp127 + }, + { // Entry 224 + 0.0, + 0x1.p-149, + -0x1.fffffap127 + }, + { // Entry 225 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 226 + 0x1.fffffep127, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 227 + 0x1.fffffep127, + HUGE_VALF, + 0x1.p-126 + }, + { // Entry 228 + 0x1.fffffep127, + HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 229 + 0x1.fffffep127, + HUGE_VALF, + 0x1.p-149 + }, + { // Entry 230 + 0x1.fffffep127, + HUGE_VALF, + 0.0f + }, + { // Entry 231 + 0x1.fffffep127, + HUGE_VALF, + -0.0f + }, + { // Entry 232 + 0x1.fffffep127, + HUGE_VALF, + -0x1.p-149 + }, + { // Entry 233 + 0x1.fffffep127, + HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 234 + 0x1.fffffep127, + HUGE_VALF, + -0x1.p-126 + }, + { // Entry 235 + 0x1.fffffep127, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 236 + 0x1.fffffep127, + HUGE_VALF, + -HUGE_VALF + }, + { // Entry 237 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 238 + 0x1.fffffep127, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 239 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 240 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 241 + 0x1.fffffcp127, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 242 + 0x1.fffffcp127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 243 + 0x1.fffffcp127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 244 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 245 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 246 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 247 + 0x1.fffffcp127, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 248 + 0x1.fffffcp127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 249 + 0x1.000002p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 250 + 0x1.000002p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 251 + 0x1.p-126, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 252 + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 253 + 0x1.fffffcp-127, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 254 + 0x1.fffffcp-127, + 0x1.p-126, + 0.0f + }, + { // Entry 255 + 0x1.fffffcp-127, + 0x1.p-126, + -0.0f + }, + { // Entry 256 + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 257 + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 258 + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 259 + 0x1.fffffcp-127, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 260 + 0x1.fffffcp-127, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 261 + 0x1.p-126, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 262 + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 263 + 0x1.p-126, + 0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 264 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 265 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 266 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 267 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 268 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 269 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 270 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 271 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 272 + 0x1.fffff8p-127, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 273 + 0x1.p-148, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 274 + 0x1.p-148, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 275 + 0x1.p-148, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 276 + 0x1.p-148, + 0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 277 + 0x1.p-149, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 278 + 0.0, + 0x1.p-149, + 0.0f + }, + { // Entry 279 + 0.0, + 0x1.p-149, + -0.0f + }, + { // Entry 280 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 281 + 0.0, + 0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 282 + 0.0, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 283 + 0.0, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 284 + 0.0, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 285 + 0x1.p-149, + 0.0f, + HUGE_VALF + }, + { // Entry 286 + 0x1.p-149, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 287 + 0x1.p-149, + 0.0f, + 0x1.p-126 + }, + { // Entry 288 + 0x1.p-149, + 0.0f, + 0x1.fffffcp-127 + }, + { // Entry 289 + 0x1.p-149, + 0.0f, + 0x1.p-149 + }, + { // Entry 290 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 291 + -0.0, + 0.0f, + -0.0f + }, + { // Entry 292 + -0x1.p-149, + 0.0f, + -0x1.p-149 + }, + { // Entry 293 + -0x1.p-149, + 0.0f, + -0x1.fffffcp-127 + }, + { // Entry 294 + -0x1.p-149, + 0.0f, + -0x1.p-126 + }, + { // Entry 295 + -0x1.p-149, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 296 + -0x1.p-149, + 0.0f, + -HUGE_VALF + }, + { // Entry 297 + 0x1.p-149, + -0.0f, + HUGE_VALF + }, + { // Entry 298 + 0x1.p-149, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 299 + 0x1.p-149, + -0.0f, + 0x1.p-126 + }, + { // Entry 300 + 0x1.p-149, + -0.0f, + 0x1.fffffcp-127 + }, + { // Entry 301 + 0x1.p-149, + -0.0f, + 0x1.p-149 + }, + { // Entry 302 + 0.0, + -0.0f, + 0.0f + }, + { // Entry 303 + -0.0, + -0.0f, + -0.0f + }, + { // Entry 304 + -0x1.p-149, + -0.0f, + -0x1.p-149 + }, + { // Entry 305 + -0x1.p-149, + -0.0f, + -0x1.fffffcp-127 + }, + { // Entry 306 + -0x1.p-149, + -0.0f, + -0x1.p-126 + }, + { // Entry 307 + -0x1.p-149, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 308 + -0x1.p-149, + -0.0f, + -HUGE_VALF + }, + { // Entry 309 + -0.0, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 310 + -0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 311 + -0.0, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 312 + -0.0, + -0x1.p-149, + 0x1.fffffcp-127 + }, + { // Entry 313 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 314 + -0.0, + -0x1.p-149, + 0.0f + }, + { // Entry 315 + -0.0, + -0x1.p-149, + -0.0f + }, + { // Entry 316 + -0x1.p-149, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 317 + -0x1.p-148, + -0x1.p-149, + -0x1.fffffcp-127 + }, + { // Entry 318 + -0x1.p-148, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 319 + -0x1.p-148, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 320 + -0x1.p-148, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 321 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 322 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 323 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + 0x1.p-126 + }, + { // Entry 324 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 325 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + 0x1.p-149 + }, + { // Entry 326 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 327 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 328 + -0x1.fffff8p-127, + -0x1.fffffcp-127, + -0x1.p-149 + }, + { // Entry 329 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 330 + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.p-126 + }, + { // Entry 331 + -0x1.p-126, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 332 + -0x1.p-126, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 333 + -0x1.fffffcp-127, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 334 + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 335 + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 336 + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.fffffcp-127 + }, + { // Entry 337 + -0x1.fffffcp-127, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 338 + -0x1.fffffcp-127, + -0x1.p-126, + 0.0f + }, + { // Entry 339 + -0x1.fffffcp-127, + -0x1.p-126, + -0.0f + }, + { // Entry 340 + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 341 + -0x1.fffffcp-127, + -0x1.p-126, + -0x1.fffffcp-127 + }, + { // Entry 342 + -0x1.p-126, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 343 + -0x1.000002p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 344 + -0x1.000002p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 345 + -0x1.fffffcp127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 346 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 347 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 348 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.fffffcp-127 + }, + { // Entry 349 + -0x1.fffffcp127, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 350 + -0x1.fffffcp127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 351 + -0x1.fffffcp127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 352 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 353 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.fffffcp-127 + }, + { // Entry 354 + -0x1.fffffcp127, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 355 + -0x1.fffffep127, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 356 + -HUGE_VALF, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 357 + -0x1.fffffep127, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 358 + -0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 359 + -0x1.fffffep127, + -HUGE_VALF, + 0x1.p-126 + }, + { // Entry 360 + -0x1.fffffep127, + -HUGE_VALF, + 0x1.fffffcp-127 + }, + { // Entry 361 + -0x1.fffffep127, + -HUGE_VALF, + 0x1.p-149 + }, + { // Entry 362 + -0x1.fffffep127, + -HUGE_VALF, + 0.0f + }, + { // Entry 363 + -0x1.fffffep127, + -HUGE_VALF, + -0.0f + }, + { // Entry 364 + -0x1.fffffep127, + -HUGE_VALF, + -0x1.p-149 + }, + { // Entry 365 + -0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffcp-127 + }, + { // Entry 366 + -0x1.fffffep127, + -HUGE_VALF, + -0x1.p-126 + }, + { // Entry 367 + -0x1.fffffep127, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 368 + -HUGE_VALF, + -HUGE_VALF, + -HUGE_VALF + } +}; diff --git a/tests/math_pow_intel_data.h b/tests/math_data/pow_intel_data.h similarity index 100% rename from tests/math_pow_intel_data.h rename to tests/math_data/pow_intel_data.h diff --git a/tests/math_powf_intel_data.h b/tests/math_data/powf_intel_data.h similarity index 100% rename from tests/math_powf_intel_data.h rename to tests/math_data/powf_intel_data.h diff --git a/tests/math_data/remainder_intel_data.h b/tests/math_data/remainder_intel_data.h new file mode 100644 index 000000000..721961630 --- /dev/null +++ b/tests/math_data/remainder_intel_data.h @@ -0,0 +1,1308 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_remainder_intel_data[] = { + { // Entry 0 + -0x1.p-51, + -0x1.4p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 1 + 0x1.c0p46, + -0x1.8888888888888p100, + -0x1.1111111111111p95 + }, + { // Entry 2 + 0x1.0c6f7a20p-16, + -0x1.b155555555555p9, + -0x1.b15555db8d126p9 + }, + { // Entry 3 + -0.0, + -0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 4 + -0.0, + -0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 5 + 0.0, + 0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 6 + 0.0, + 0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 7 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p15 + }, + { // Entry 8 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p16 + }, + { // Entry 9 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p15 + }, + { // Entry 10 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p16 + }, + { // Entry 11 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p117 + }, + { // Entry 12 + -0x1.p-117, + -0x1.0p-117, + 0x1.0p118 + }, + { // Entry 13 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p117 + }, + { // Entry 14 + 0x1.p-117, + 0x1.0p-117, + 0x1.0p118 + }, + { // Entry 15 + 0.0, + 0x1.0p15, + -0x1.0p-117 + }, + { // Entry 16 + 0.0, + 0x1.0p15, + 0x1.0p-117 + }, + { // Entry 17 + 0.0, + 0x1.0p16, + -0x1.0p-117 + }, + { // Entry 18 + 0.0, + 0x1.0p16, + 0x1.0p-117 + }, + { // Entry 19 + 0.0, + 0x1.0p15, + 0x1.0p15 + }, + { // Entry 20 + 0x1.p15, + 0x1.0p15, + 0x1.0p16 + }, + { // Entry 21 + 0.0, + 0x1.0p16, + 0x1.0p15 + }, + { // Entry 22 + 0.0, + 0x1.0p16, + 0x1.0p16 + }, + { // Entry 23 + 0x1.p15, + 0x1.0p15, + 0x1.0p117 + }, + { // Entry 24 + 0x1.p15, + 0x1.0p15, + 0x1.0p118 + }, + { // Entry 25 + 0x1.p16, + 0x1.0p16, + 0x1.0p117 + }, + { // Entry 26 + 0x1.p16, + 0x1.0p16, + 0x1.0p118 + }, + { // Entry 27 + 0.0, + 0x1.0p117, + -0x1.0p-117 + }, + { // Entry 28 + 0.0, + 0x1.0p117, + 0x1.0p-117 + }, + { // Entry 29 + 0.0, + 0x1.0p118, + -0x1.0p-117 + }, + { // Entry 30 + 0.0, + 0x1.0p118, + 0x1.0p-117 + }, + { // Entry 31 + 0.0, + 0x1.0p117, + 0x1.0p15 + }, + { // Entry 32 + 0.0, + 0x1.0p117, + 0x1.0p16 + }, + { // Entry 33 + 0.0, + 0x1.0p118, + 0x1.0p15 + }, + { // Entry 34 + 0.0, + 0x1.0p118, + 0x1.0p16 + }, + { // Entry 35 + 0.0, + 0x1.0p117, + 0x1.0p117 + }, + { // Entry 36 + 0x1.p117, + 0x1.0p117, + 0x1.0p118 + }, + { // Entry 37 + 0.0, + 0x1.0p118, + 0x1.0p117 + }, + { // Entry 38 + 0.0, + 0x1.0p118, + 0x1.0p118 + }, + { // Entry 39 + 0.0, + 0x1.9p6, + 0x1.4p3 + }, + { // Entry 40 + 0x1.p0, + 0x1.9p6, + 0x1.6p3 + }, + { // Entry 41 + 0x1.p2, + 0x1.9p6, + 0x1.8p3 + }, + { // Entry 42 + 0x1.p0, + 0x1.940p6, + 0x1.4p3 + }, + { // Entry 43 + 0x1.p1, + 0x1.940p6, + 0x1.6p3 + }, + { // Entry 44 + 0x1.40p2, + 0x1.940p6, + 0x1.8p3 + }, + { // Entry 45 + 0x1.p1, + 0x1.980p6, + 0x1.4p3 + }, + { // Entry 46 + 0x1.80p1, + 0x1.980p6, + 0x1.6p3 + }, + { // Entry 47 + 0x1.80p2, + 0x1.980p6, + 0x1.8p3 + }, + { // Entry 48 + 0x1.80p1, + 0x1.9c0p6, + 0x1.4p3 + }, + { // Entry 49 + 0x1.p2, + 0x1.9c0p6, + 0x1.6p3 + }, + { // Entry 50 + -0x1.40p2, + 0x1.9c0p6, + 0x1.8p3 + }, + { // Entry 51 + 0x1.p2, + 0x1.ap6, + 0x1.4p3 + }, + { // Entry 52 + 0x1.40p2, + 0x1.ap6, + 0x1.6p3 + }, + { // Entry 53 + -0x1.p2, + 0x1.ap6, + 0x1.8p3 + }, + { // Entry 54 + 0x1.40p2, + 0x1.a40p6, + 0x1.4p3 + }, + { // Entry 55 + -0x1.40p2, + 0x1.a40p6, + 0x1.6p3 + }, + { // Entry 56 + -0x1.80p1, + 0x1.a40p6, + 0x1.8p3 + }, + { // Entry 57 + -0x1.p2, + 0x1.a80p6, + 0x1.4p3 + }, + { // Entry 58 + -0x1.p2, + 0x1.a80p6, + 0x1.6p3 + }, + { // Entry 59 + -0x1.p1, + 0x1.a80p6, + 0x1.8p3 + }, + { // Entry 60 + -0x1.80p1, + 0x1.ac0p6, + 0x1.4p3 + }, + { // Entry 61 + -0x1.80p1, + 0x1.ac0p6, + 0x1.6p3 + }, + { // Entry 62 + -0x1.p0, + 0x1.ac0p6, + 0x1.8p3 + }, + { // Entry 63 + -0x1.p1, + 0x1.bp6, + 0x1.4p3 + }, + { // Entry 64 + -0x1.p1, + 0x1.bp6, + 0x1.6p3 + }, + { // Entry 65 + 0.0, + 0x1.bp6, + 0x1.8p3 + }, + { // Entry 66 + -0x1.p0, + 0x1.b40p6, + 0x1.4p3 + }, + { // Entry 67 + -0x1.p0, + 0x1.b40p6, + 0x1.6p3 + }, + { // Entry 68 + 0x1.p0, + 0x1.b40p6, + 0x1.8p3 + }, + { // Entry 69 + 0.0, + 0x1.b80p6, + 0x1.4p3 + }, + { // Entry 70 + 0.0, + 0x1.b80p6, + 0x1.6p3 + }, + { // Entry 71 + 0x1.p1, + 0x1.b80p6, + 0x1.8p3 + }, + { // Entry 72 + -0.0, + -0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 73 + -0x1.p-52, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 74 + -0x1.80p-52, + -0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 75 + 0x1.p-52, + -0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 76 + -0.0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 77 + -0x1.p-53, + -0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 78 + 0x1.80p-52, + -0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 79 + 0x1.p-53, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 80 + -0.0, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 81 + -0x1.80p-52, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 82 + -0x1.p-52, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 83 + -0.0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 84 + -0x1.p-53, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 85 + -0.0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 86 + 0x1.p-52, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 87 + -0.0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 88 + 0x1.p-53, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 89 + 0x1.80p-52, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 90 + -0x1.80p-52, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 91 + -0x1.p-53, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 92 + 0.0, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 93 + -0x1.p-52, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 94 + 0.0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 95 + 0x1.p-53, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 96 + 0.0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 97 + 0x1.p-52, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 98 + 0x1.80p-52, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 99 + 0.0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 100 + -0x1.p-53, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 101 + -0x1.80p-52, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 102 + 0x1.p-53, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 103 + 0.0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 104 + -0x1.p-52, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 105 + 0x1.80p-52, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 106 + 0x1.p-52, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 107 + 0.0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 108 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 109 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 110 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 111 + -0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 112 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 113 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 114 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 115 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 116 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 117 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 118 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 119 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 120 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 121 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 122 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 123 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 124 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 125 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 126 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 127 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 128 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 129 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 130 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 131 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 132 + 0x1.ffffffffffffc0p-3, + -0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 133 + -0x1.p-1, + -0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 134 + -0.0, + -0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 135 + -0x1.p-2, + -0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 136 + -0.0, + -0x1.0p51, + 0x1.0p0 + }, + { // Entry 137 + 0x1.p-1, + -0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 138 + -0.0, + -0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 139 + 0x1.p-2, + -0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 140 + -0x1.00000000000040p-2, + -0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 141 + 0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 142 + -0x1.p-1, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 143 + -0x1.ffffffffffffc0p-2, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 144 + -0x1.ffffffffffffe0p-2, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 145 + 0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 146 + 0x1.p-52, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 147 + -0x1.ffffffffffffc0p-2, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 148 + 0.0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 149 + 0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 150 + -0x1.80p-52, + -0x1.0000000000001p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 151 + -0.0, + -0x1.0000000000001p53, + 0x1.0p0 + }, + { // Entry 152 + -0.0, + -0x1.0000000000001p53, + 0x1.0000000000001p0 + }, + { // Entry 153 + -0x1.p-53, + -0x1.0p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 154 + -0.0, + -0x1.0p53, + 0x1.0p0 + }, + { // Entry 155 + -0x1.p-51, + -0x1.0p53, + 0x1.0000000000001p0 + }, + { // Entry 156 + -0.0, + -0x1.fffffffffffffp52, + 0x1.fffffffffffffp-1 + }, + { // Entry 157 + -0.0, + -0x1.fffffffffffffp52, + 0x1.0p0 + }, + { // Entry 158 + -0x1.80p-51, + -0x1.fffffffffffffp52, + 0x1.0000000000001p0 + }, + { // Entry 159 + 0.0, + 0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 160 + -0x1.p-2, + 0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 161 + 0x1.00000000000040p-2, + 0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 162 + 0x1.p-2, + 0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 163 + 0.0, + 0x1.0p51, + 0x1.0p0 + }, + { // Entry 164 + -0x1.p-1, + 0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 165 + -0x1.ffffffffffffc0p-3, + 0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 166 + 0x1.p-1, + 0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 167 + 0.0, + 0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 168 + 0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 169 + -0x1.p-1, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 170 + -0x1.ffffffffffffc0p-2, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 171 + -0x1.ffffffffffffe0p-2, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 172 + 0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 173 + 0x1.p-52, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 174 + -0x1.ffffffffffffc0p-2, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 175 + 0.0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 176 + 0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 177 + -0.0, + -0x1.0000000000001p53, + -0x1.0000000000001p0 + }, + { // Entry 178 + -0.0, + -0x1.0000000000001p53, + -0x1.0p0 + }, + { // Entry 179 + -0x1.80p-52, + -0x1.0000000000001p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 180 + -0x1.p-51, + -0x1.0p53, + -0x1.0000000000001p0 + }, + { // Entry 181 + -0.0, + -0x1.0p53, + -0x1.0p0 + }, + { // Entry 182 + -0x1.p-53, + -0x1.0p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 183 + -0x1.80p-51, + -0x1.fffffffffffffp52, + -0x1.0000000000001p0 + }, + { // Entry 184 + -0.0, + -0x1.fffffffffffffp52, + -0x1.0p0 + }, + { // Entry 185 + -0.0, + -0x1.fffffffffffffp52, + -0x1.fffffffffffffp-1 + }, + { // Entry 186 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 187 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 188 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 189 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 190 + 0x1.p-1022, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 191 + -0x1.p-1022, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 192 + 0x1.p-1022, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 193 + -0x1.p-1022, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 194 + 0x1.p-1074, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 195 + -0x1.p-1074, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 196 + 0x1.p-1074, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 197 + -0x1.p-1074, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 198 + 0.0, + 0.0, + HUGE_VAL + }, + { // Entry 199 + -0.0, + -0.0, + HUGE_VAL + }, + { // Entry 200 + 0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 201 + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 202 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 203 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 204 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 205 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 206 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 207 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 208 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 209 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 210 + 0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 211 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 212 + -0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 213 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 214 + 0x1.p-1022, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 215 + -0x1.p-1022, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 216 + 0x1.p-1022, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 217 + -0x1.p-1022, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 218 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 219 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 220 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 221 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 222 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 223 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 224 + 0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 225 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 226 + 0.0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 227 + 0.0, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 228 + -0.0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 229 + -0.0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 230 + 0.0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 231 + 0.0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 232 + -0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 233 + -0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 234 + 0x1.p-1074, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 235 + -0x1.p-1074, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 236 + 0x1.p-1074, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 237 + -0x1.p-1074, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 238 + 0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 239 + -0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 240 + 0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 241 + -0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 242 + 0.0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 243 + -0.0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 244 + 0.0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 245 + -0.0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 246 + 0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 247 + -0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 248 + 0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 249 + -0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 250 + -0x1.p0, + 0x1.8p1, + 0x1.0p1 + }, + { // Entry 251 + 0x1.p0, + -0x1.8p1, + 0x1.0p1 + }, + { // Entry 252 + -0x1.p0, + 0x1.8p1, + -0x1.0p1 + }, + { // Entry 253 + 0x1.p0, + -0x1.8p1, + -0x1.0p1 + }, + { // Entry 254 + 0x1.p0, + 0x1.4p2, + 0x1.0p1 + }, + { // Entry 255 + -0x1.p0, + -0x1.4p2, + 0x1.0p1 + }, + { // Entry 256 + 0x1.p0, + 0x1.4p2, + -0x1.0p1 + }, + { // Entry 257 + -0x1.p0, + -0x1.4p2, + -0x1.0p1 + } +}; diff --git a/tests/math_data/remainderf_intel_data.h b/tests/math_data/remainderf_intel_data.h new file mode 100644 index 000000000..94c4af57c --- /dev/null +++ b/tests/math_data/remainderf_intel_data.h @@ -0,0 +1,1293 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_remainderf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.p-117, + -0x1.p-117 + }, + { // Entry 1 + -0.0, + -0x1.p-117, + 0x1.p-117 + }, + { // Entry 2 + 0.0, + 0x1.p-117, + -0x1.p-117 + }, + { // Entry 3 + 0.0, + 0x1.p-117, + 0x1.p-117 + }, + { // Entry 4 + -0x1.p-117, + -0x1.p-117, + 0x1.p15 + }, + { // Entry 5 + -0x1.p-117, + -0x1.p-117, + 0x1.p16 + }, + { // Entry 6 + 0x1.p-117, + 0x1.p-117, + 0x1.p15 + }, + { // Entry 7 + 0x1.p-117, + 0x1.p-117, + 0x1.p16 + }, + { // Entry 8 + -0x1.p-117, + -0x1.p-117, + 0x1.p117 + }, + { // Entry 9 + -0x1.p-117, + -0x1.p-117, + 0x1.p118 + }, + { // Entry 10 + 0x1.p-117, + 0x1.p-117, + 0x1.p117 + }, + { // Entry 11 + 0x1.p-117, + 0x1.p-117, + 0x1.p118 + }, + { // Entry 12 + 0.0, + 0x1.p15, + -0x1.p-117 + }, + { // Entry 13 + 0.0, + 0x1.p15, + 0x1.p-117 + }, + { // Entry 14 + 0.0, + 0x1.p16, + -0x1.p-117 + }, + { // Entry 15 + 0.0, + 0x1.p16, + 0x1.p-117 + }, + { // Entry 16 + 0.0, + 0x1.p15, + 0x1.p15 + }, + { // Entry 17 + 0x1.p15, + 0x1.p15, + 0x1.p16 + }, + { // Entry 18 + 0.0, + 0x1.p16, + 0x1.p15 + }, + { // Entry 19 + 0.0, + 0x1.p16, + 0x1.p16 + }, + { // Entry 20 + 0x1.p15, + 0x1.p15, + 0x1.p117 + }, + { // Entry 21 + 0x1.p15, + 0x1.p15, + 0x1.p118 + }, + { // Entry 22 + 0x1.p16, + 0x1.p16, + 0x1.p117 + }, + { // Entry 23 + 0x1.p16, + 0x1.p16, + 0x1.p118 + }, + { // Entry 24 + 0.0, + 0x1.p117, + -0x1.p-117 + }, + { // Entry 25 + 0.0, + 0x1.p117, + 0x1.p-117 + }, + { // Entry 26 + 0.0, + 0x1.p118, + -0x1.p-117 + }, + { // Entry 27 + 0.0, + 0x1.p118, + 0x1.p-117 + }, + { // Entry 28 + 0.0, + 0x1.p117, + 0x1.p15 + }, + { // Entry 29 + 0.0, + 0x1.p117, + 0x1.p16 + }, + { // Entry 30 + 0.0, + 0x1.p118, + 0x1.p15 + }, + { // Entry 31 + 0.0, + 0x1.p118, + 0x1.p16 + }, + { // Entry 32 + 0.0, + 0x1.p117, + 0x1.p117 + }, + { // Entry 33 + 0x1.p117, + 0x1.p117, + 0x1.p118 + }, + { // Entry 34 + 0.0, + 0x1.p118, + 0x1.p117 + }, + { // Entry 35 + 0.0, + 0x1.p118, + 0x1.p118 + }, + { // Entry 36 + 0.0, + 0x1.90p6, + 0x1.40p3 + }, + { // Entry 37 + 0x1.p0, + 0x1.90p6, + 0x1.60p3 + }, + { // Entry 38 + 0x1.p2, + 0x1.90p6, + 0x1.80p3 + }, + { // Entry 39 + 0x1.p0, + 0x1.94p6, + 0x1.40p3 + }, + { // Entry 40 + 0x1.p1, + 0x1.94p6, + 0x1.60p3 + }, + { // Entry 41 + 0x1.40p2, + 0x1.94p6, + 0x1.80p3 + }, + { // Entry 42 + 0x1.p1, + 0x1.98p6, + 0x1.40p3 + }, + { // Entry 43 + 0x1.80p1, + 0x1.98p6, + 0x1.60p3 + }, + { // Entry 44 + 0x1.80p2, + 0x1.98p6, + 0x1.80p3 + }, + { // Entry 45 + 0x1.80p1, + 0x1.9cp6, + 0x1.40p3 + }, + { // Entry 46 + 0x1.p2, + 0x1.9cp6, + 0x1.60p3 + }, + { // Entry 47 + -0x1.40p2, + 0x1.9cp6, + 0x1.80p3 + }, + { // Entry 48 + 0x1.p2, + 0x1.a0p6, + 0x1.40p3 + }, + { // Entry 49 + 0x1.40p2, + 0x1.a0p6, + 0x1.60p3 + }, + { // Entry 50 + -0x1.p2, + 0x1.a0p6, + 0x1.80p3 + }, + { // Entry 51 + 0x1.40p2, + 0x1.a4p6, + 0x1.40p3 + }, + { // Entry 52 + -0x1.40p2, + 0x1.a4p6, + 0x1.60p3 + }, + { // Entry 53 + -0x1.80p1, + 0x1.a4p6, + 0x1.80p3 + }, + { // Entry 54 + -0x1.p2, + 0x1.a8p6, + 0x1.40p3 + }, + { // Entry 55 + -0x1.p2, + 0x1.a8p6, + 0x1.60p3 + }, + { // Entry 56 + -0x1.p1, + 0x1.a8p6, + 0x1.80p3 + }, + { // Entry 57 + -0x1.80p1, + 0x1.acp6, + 0x1.40p3 + }, + { // Entry 58 + -0x1.80p1, + 0x1.acp6, + 0x1.60p3 + }, + { // Entry 59 + -0x1.p0, + 0x1.acp6, + 0x1.80p3 + }, + { // Entry 60 + -0x1.p1, + 0x1.b0p6, + 0x1.40p3 + }, + { // Entry 61 + -0x1.p1, + 0x1.b0p6, + 0x1.60p3 + }, + { // Entry 62 + 0.0, + 0x1.b0p6, + 0x1.80p3 + }, + { // Entry 63 + -0x1.p0, + 0x1.b4p6, + 0x1.40p3 + }, + { // Entry 64 + -0x1.p0, + 0x1.b4p6, + 0x1.60p3 + }, + { // Entry 65 + 0x1.p0, + 0x1.b4p6, + 0x1.80p3 + }, + { // Entry 66 + 0.0, + 0x1.b8p6, + 0x1.40p3 + }, + { // Entry 67 + 0.0, + 0x1.b8p6, + 0x1.60p3 + }, + { // Entry 68 + 0x1.p1, + 0x1.b8p6, + 0x1.80p3 + }, + { // Entry 69 + -0.0, + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 70 + -0x1.p-23, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 71 + -0x1.80p-23, + -0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 72 + 0x1.p-23, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 73 + -0.0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 74 + -0x1.p-24, + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 75 + 0x1.80p-23, + -0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 76 + 0x1.p-24, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 77 + -0.0, + -0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 78 + -0x1.80p-23, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 79 + -0x1.p-23, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 80 + -0.0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 81 + -0x1.p-24, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 82 + -0.0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 83 + 0x1.p-23, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 84 + -0.0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 85 + 0x1.p-24, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 86 + 0x1.80p-23, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 87 + -0x1.80p-23, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 88 + -0x1.p-24, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 89 + 0.0, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 90 + -0x1.p-23, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 91 + 0.0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 92 + 0x1.p-24, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 93 + 0.0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 94 + 0x1.p-23, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 95 + 0x1.80p-23, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 96 + 0.0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 97 + -0x1.p-24, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 98 + -0x1.80p-23, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 99 + 0x1.p-24, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 100 + 0.0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 101 + -0x1.p-23, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 102 + 0x1.80p-23, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 103 + 0x1.p-23, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 104 + 0.0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 105 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 106 + 0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 107 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 108 + -0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 109 + 0.0, + 0.0, + -0x1.p-149 + }, + { // Entry 110 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 111 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 112 + 0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 113 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 114 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 115 + 0.0, + 0.0, + -0x1.fffffep127 + }, + { // Entry 116 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 117 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 118 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 119 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 120 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 121 + 0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 122 + -0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 123 + -0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 124 + 0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 125 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 126 + 0.0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 127 + -0.0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 128 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 129 + 0x1.fffff8p-3, + -0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 130 + -0x1.p-1, + -0x1.000002p22, + 0x1.p0 + }, + { // Entry 131 + -0.0, + -0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 132 + -0x1.p-2, + -0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 133 + -0.0, + -0x1.p22, + 0x1.p0 + }, + { // Entry 134 + 0x1.p-1, + -0x1.p22, + 0x1.000002p0 + }, + { // Entry 135 + -0.0, + -0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 136 + 0x1.p-2, + -0x1.fffffep21, + 0x1.p0 + }, + { // Entry 137 + -0x1.000008p-2, + -0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 138 + 0.0, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 139 + -0x1.p-1, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 140 + -0x1.fffff8p-2, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 141 + -0x1.fffffcp-2, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 142 + 0.0, + 0x1.p23, + 0x1.p0 + }, + { // Entry 143 + 0x1.p-23, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 144 + -0x1.fffff8p-2, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 145 + 0.0, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 146 + 0.0, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 147 + -0x1.80p-23, + -0x1.000002p24, + 0x1.fffffep-1 + }, + { // Entry 148 + -0.0, + -0x1.000002p24, + 0x1.p0 + }, + { // Entry 149 + -0.0, + -0x1.000002p24, + 0x1.000002p0 + }, + { // Entry 150 + -0x1.p-24, + -0x1.p24, + 0x1.fffffep-1 + }, + { // Entry 151 + -0.0, + -0x1.p24, + 0x1.p0 + }, + { // Entry 152 + -0x1.p-22, + -0x1.p24, + 0x1.000002p0 + }, + { // Entry 153 + -0.0, + -0x1.fffffep23, + 0x1.fffffep-1 + }, + { // Entry 154 + -0.0, + -0x1.fffffep23, + 0x1.p0 + }, + { // Entry 155 + -0x1.80p-22, + -0x1.fffffep23, + 0x1.000002p0 + }, + { // Entry 156 + 0.0, + 0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 157 + -0x1.p-2, + 0x1.fffffep21, + 0x1.p0 + }, + { // Entry 158 + 0x1.000008p-2, + 0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 159 + 0x1.p-2, + 0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 160 + 0.0, + 0x1.p22, + 0x1.p0 + }, + { // Entry 161 + -0x1.p-1, + 0x1.p22, + 0x1.000002p0 + }, + { // Entry 162 + -0x1.fffff8p-3, + 0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 163 + 0x1.p-1, + 0x1.000002p22, + 0x1.p0 + }, + { // Entry 164 + 0.0, + 0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 165 + 0.0, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 166 + -0x1.p-1, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 167 + -0x1.fffff8p-2, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 168 + -0x1.fffffcp-2, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 169 + 0.0, + 0x1.p23, + 0x1.p0 + }, + { // Entry 170 + 0x1.p-23, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 171 + -0x1.fffff8p-2, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 172 + 0.0, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 173 + 0.0, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 174 + -0.0, + -0x1.000002p24, + -0x1.000002p0 + }, + { // Entry 175 + -0.0, + -0x1.000002p24, + -0x1.p0 + }, + { // Entry 176 + -0x1.80p-23, + -0x1.000002p24, + -0x1.fffffep-1 + }, + { // Entry 177 + -0x1.p-22, + -0x1.p24, + -0x1.000002p0 + }, + { // Entry 178 + -0.0, + -0x1.p24, + -0x1.p0 + }, + { // Entry 179 + -0x1.p-24, + -0x1.p24, + -0x1.fffffep-1 + }, + { // Entry 180 + -0x1.80p-22, + -0x1.fffffep23, + -0x1.000002p0 + }, + { // Entry 181 + -0.0, + -0x1.fffffep23, + -0x1.p0 + }, + { // Entry 182 + -0.0, + -0x1.fffffep23, + -0x1.fffffep-1 + }, + { // Entry 183 + 0x1.fffffep127, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 184 + -0x1.fffffep127, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 185 + 0x1.fffffep127, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 186 + -0x1.fffffep127, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 187 + 0x1.p-126, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 188 + -0x1.p-126, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 189 + 0x1.p-126, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 190 + -0x1.p-126, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 191 + 0x1.p-149, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 192 + -0x1.p-149, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 193 + 0x1.p-149, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 194 + -0x1.p-149, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 195 + 0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 196 + -0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 197 + 0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 198 + -0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 199 + 0.0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 200 + 0.0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 201 + -0.0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 202 + -0.0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 203 + 0.0, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 204 + 0.0, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 205 + -0.0, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 206 + -0.0, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 207 + 0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 208 + 0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 209 + -0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 210 + -0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 211 + 0x1.p-126, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 212 + -0x1.p-126, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 213 + 0x1.p-126, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 214 + -0x1.p-126, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 215 + 0x1.p-149, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 216 + -0x1.p-149, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 217 + 0x1.p-149, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 218 + -0x1.p-149, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 219 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 220 + -0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 221 + 0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 222 + -0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 223 + 0.0, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 224 + 0.0, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 225 + -0.0, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 226 + -0.0, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 227 + 0.0, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 228 + 0.0, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 229 + -0.0, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 230 + -0.0, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 231 + 0x1.p-149, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 232 + -0x1.p-149, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 233 + 0x1.p-149, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 234 + -0x1.p-149, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 235 + 0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 236 + -0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 237 + 0.0, + 0.0f, + -0x1.p-126 + }, + { // Entry 238 + -0.0, + -0.0f, + -0x1.p-126 + }, + { // Entry 239 + 0.0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 240 + -0.0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 241 + 0.0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 242 + -0.0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 243 + 0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 244 + -0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 245 + 0.0, + 0.0f, + -0x1.p-149 + }, + { // Entry 246 + -0.0, + -0.0f, + -0x1.p-149 + }, + { // Entry 247 + -0x1.p0, + 0x1.80p1, + 0x1.p1 + }, + { // Entry 248 + 0x1.p0, + -0x1.80p1, + 0x1.p1 + }, + { // Entry 249 + -0x1.p0, + 0x1.80p1, + -0x1.p1 + }, + { // Entry 250 + 0x1.p0, + -0x1.80p1, + -0x1.p1 + }, + { // Entry 251 + 0x1.p0, + 0x1.40p2, + 0x1.p1 + }, + { // Entry 252 + -0x1.p0, + -0x1.40p2, + 0x1.p1 + }, + { // Entry 253 + 0x1.p0, + 0x1.40p2, + -0x1.p1 + }, + { // Entry 254 + -0x1.p0, + -0x1.40p2, + -0x1.p1 + } +}; diff --git a/tests/math_data/remquo_intel_data.h b/tests/math_data/remquo_intel_data.h new file mode 100644 index 000000000..153b6e6c9 --- /dev/null +++ b/tests/math_data/remquo_intel_data.h @@ -0,0 +1,1584 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_int_2_t g_remquo_intel_data[] = { + { // Entry 0 + 0x1.42967268315ap-13, + (int)-0x1.p1, + -0x1.0p-10, + 0x1.2852ce4d062b4p-11 + }, + { // Entry 1 + 0x1.1ab75504464440p14, + (int)0x1.6a3b3618p30, + 0x1.0295fad40a57fp117, + 0x1.45d1745d17465p15 + }, + { // Entry 2 + -0x1.d1a777081861p18, + (int)-0x1.0f62d4b8p30, + 0x1.11f783ee89b08p99, + -0x1.fd6ef47d96f1cp19 + }, + { // Entry 3 + -0x1.b0p3, + (int)-0x1.afe501b0p29, + 0x1.ffffffffffffbp1023, + -0x1.001p10 + }, + { // Entry 4 + -0x1.7d9165c00024p9, + (int)0x1.dd000030p29, + 0x1.ffffffffffffbp1023, + 0x1.0000000000003p14 + }, + { // Entry 5 + -0x1.p-17, + (int)0.0, + 0x1.ffffffffffffdp1023, + 0x1.ffffffffffffep-2 + }, + { // Entry 6 + -0.0, + (int)0x1.p0, + -0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 7 + -0.0, + (int)-0x1.p0, + -0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 8 + 0.0, + (int)-0x1.p0, + 0x1.0p-117, + -0x1.0p-117 + }, + { // Entry 9 + 0.0, + (int)0x1.p0, + 0x1.0p-117, + 0x1.0p-117 + }, + { // Entry 10 + -0x1.p-117, + (int)0.0, + -0x1.0p-117, + 0x1.0p15 + }, + { // Entry 11 + -0x1.p-117, + (int)0.0, + -0x1.0p-117, + 0x1.0p16 + }, + { // Entry 12 + 0x1.p-117, + (int)0.0, + 0x1.0p-117, + 0x1.0p15 + }, + { // Entry 13 + 0x1.p-117, + (int)0.0, + 0x1.0p-117, + 0x1.0p16 + }, + { // Entry 14 + -0x1.p-117, + (int)0.0, + -0x1.0p-117, + 0x1.0p117 + }, + { // Entry 15 + -0x1.p-117, + (int)0.0, + -0x1.0p-117, + 0x1.0p118 + }, + { // Entry 16 + 0x1.p-117, + (int)0.0, + 0x1.0p-117, + 0x1.0p117 + }, + { // Entry 17 + 0x1.p-117, + (int)0.0, + 0x1.0p-117, + 0x1.0p118 + }, + { // Entry 18 + 0.0, + (int)0.0, + 0x1.0p15, + -0x1.0p-117 + }, + { // Entry 19 + 0.0, + (int)0.0, + 0x1.0p15, + 0x1.0p-117 + }, + { // Entry 20 + 0.0, + (int)0.0, + 0x1.0p16, + -0x1.0p-117 + }, + { // Entry 21 + 0.0, + (int)0.0, + 0x1.0p16, + 0x1.0p-117 + }, + { // Entry 22 + 0.0, + (int)0x1.p0, + 0x1.0p15, + 0x1.0p15 + }, + { // Entry 23 + 0x1.p15, + (int)0.0, + 0x1.0p15, + 0x1.0p16 + }, + { // Entry 24 + 0.0, + (int)0x1.p1, + 0x1.0p16, + 0x1.0p15 + }, + { // Entry 25 + 0.0, + (int)0x1.p0, + 0x1.0p16, + 0x1.0p16 + }, + { // Entry 26 + 0x1.p15, + (int)0.0, + 0x1.0p15, + 0x1.0p117 + }, + { // Entry 27 + 0x1.p15, + (int)0.0, + 0x1.0p15, + 0x1.0p118 + }, + { // Entry 28 + 0x1.p16, + (int)0.0, + 0x1.0p16, + 0x1.0p117 + }, + { // Entry 29 + 0x1.p16, + (int)0.0, + 0x1.0p16, + 0x1.0p118 + }, + { // Entry 30 + 0.0, + (int)0.0, + 0x1.0p117, + -0x1.0p-117 + }, + { // Entry 31 + 0.0, + (int)0.0, + 0x1.0p117, + 0x1.0p-117 + }, + { // Entry 32 + 0.0, + (int)0.0, + 0x1.0p118, + -0x1.0p-117 + }, + { // Entry 33 + 0.0, + (int)0.0, + 0x1.0p118, + 0x1.0p-117 + }, + { // Entry 34 + 0.0, + (int)0.0, + 0x1.0p117, + 0x1.0p15 + }, + { // Entry 35 + 0.0, + (int)0.0, + 0x1.0p117, + 0x1.0p16 + }, + { // Entry 36 + 0.0, + (int)0.0, + 0x1.0p118, + 0x1.0p15 + }, + { // Entry 37 + 0.0, + (int)0.0, + 0x1.0p118, + 0x1.0p16 + }, + { // Entry 38 + 0.0, + (int)0x1.p0, + 0x1.0p117, + 0x1.0p117 + }, + { // Entry 39 + 0x1.p117, + (int)0.0, + 0x1.0p117, + 0x1.0p118 + }, + { // Entry 40 + 0.0, + (int)0x1.p1, + 0x1.0p118, + 0x1.0p117 + }, + { // Entry 41 + 0.0, + (int)0x1.p0, + 0x1.0p118, + 0x1.0p118 + }, + { // Entry 42 + 0.0, + (int)0x1.40p3, + 0x1.9p6, + 0x1.4p3 + }, + { // Entry 43 + 0x1.p0, + (int)0x1.20p3, + 0x1.9p6, + 0x1.6p3 + }, + { // Entry 44 + 0x1.p2, + (int)0x1.p3, + 0x1.9p6, + 0x1.8p3 + }, + { // Entry 45 + 0x1.p0, + (int)0x1.40p3, + 0x1.940p6, + 0x1.4p3 + }, + { // Entry 46 + 0x1.p1, + (int)0x1.20p3, + 0x1.940p6, + 0x1.6p3 + }, + { // Entry 47 + 0x1.40p2, + (int)0x1.p3, + 0x1.940p6, + 0x1.8p3 + }, + { // Entry 48 + 0x1.p1, + (int)0x1.40p3, + 0x1.980p6, + 0x1.4p3 + }, + { // Entry 49 + 0x1.80p1, + (int)0x1.20p3, + 0x1.980p6, + 0x1.6p3 + }, + { // Entry 50 + 0x1.80p2, + (int)0x1.p3, + 0x1.980p6, + 0x1.8p3 + }, + { // Entry 51 + 0x1.80p1, + (int)0x1.40p3, + 0x1.9c0p6, + 0x1.4p3 + }, + { // Entry 52 + 0x1.p2, + (int)0x1.20p3, + 0x1.9c0p6, + 0x1.6p3 + }, + { // Entry 53 + -0x1.40p2, + (int)0x1.20p3, + 0x1.9c0p6, + 0x1.8p3 + }, + { // Entry 54 + 0x1.p2, + (int)0x1.40p3, + 0x1.ap6, + 0x1.4p3 + }, + { // Entry 55 + 0x1.40p2, + (int)0x1.20p3, + 0x1.ap6, + 0x1.6p3 + }, + { // Entry 56 + -0x1.p2, + (int)0x1.20p3, + 0x1.ap6, + 0x1.8p3 + }, + { // Entry 57 + 0x1.40p2, + (int)0x1.40p3, + 0x1.a40p6, + 0x1.4p3 + }, + { // Entry 58 + -0x1.40p2, + (int)0x1.40p3, + 0x1.a40p6, + 0x1.6p3 + }, + { // Entry 59 + -0x1.80p1, + (int)0x1.20p3, + 0x1.a40p6, + 0x1.8p3 + }, + { // Entry 60 + -0x1.p2, + (int)0x1.60p3, + 0x1.a80p6, + 0x1.4p3 + }, + { // Entry 61 + -0x1.p2, + (int)0x1.40p3, + 0x1.a80p6, + 0x1.6p3 + }, + { // Entry 62 + -0x1.p1, + (int)0x1.20p3, + 0x1.a80p6, + 0x1.8p3 + }, + { // Entry 63 + -0x1.80p1, + (int)0x1.60p3, + 0x1.ac0p6, + 0x1.4p3 + }, + { // Entry 64 + -0x1.80p1, + (int)0x1.40p3, + 0x1.ac0p6, + 0x1.6p3 + }, + { // Entry 65 + -0x1.p0, + (int)0x1.20p3, + 0x1.ac0p6, + 0x1.8p3 + }, + { // Entry 66 + -0x1.p1, + (int)0x1.60p3, + 0x1.bp6, + 0x1.4p3 + }, + { // Entry 67 + -0x1.p1, + (int)0x1.40p3, + 0x1.bp6, + 0x1.6p3 + }, + { // Entry 68 + 0.0, + (int)0x1.20p3, + 0x1.bp6, + 0x1.8p3 + }, + { // Entry 69 + -0x1.p0, + (int)0x1.60p3, + 0x1.b40p6, + 0x1.4p3 + }, + { // Entry 70 + -0x1.p0, + (int)0x1.40p3, + 0x1.b40p6, + 0x1.6p3 + }, + { // Entry 71 + 0x1.p0, + (int)0x1.20p3, + 0x1.b40p6, + 0x1.8p3 + }, + { // Entry 72 + 0.0, + (int)0x1.60p3, + 0x1.b80p6, + 0x1.4p3 + }, + { // Entry 73 + 0.0, + (int)0x1.40p3, + 0x1.b80p6, + 0x1.6p3 + }, + { // Entry 74 + 0x1.p1, + (int)0x1.20p3, + 0x1.b80p6, + 0x1.8p3 + }, + { // Entry 75 + -0.0, + (int)0x1.p0, + -0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 76 + -0x1.p-52, + (int)0x1.p0, + -0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 77 + -0x1.80p-52, + (int)0x1.p0, + -0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 78 + 0x1.p-52, + (int)0x1.p0, + -0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 79 + -0.0, + (int)0x1.p0, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 80 + -0x1.p-53, + (int)0x1.p0, + -0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 81 + 0x1.80p-52, + (int)0x1.p0, + -0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 82 + 0x1.p-53, + (int)0x1.p0, + -0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 83 + -0.0, + (int)0x1.p0, + -0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 84 + -0x1.80p-52, + (int)-0x1.p0, + -0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 85 + -0x1.p-52, + (int)-0x1.p0, + -0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 86 + -0.0, + (int)-0x1.p0, + -0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 87 + -0x1.p-53, + (int)-0x1.p0, + -0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 88 + -0.0, + (int)-0x1.p0, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 89 + 0x1.p-52, + (int)-0x1.p0, + -0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 90 + -0.0, + (int)-0x1.p0, + -0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 91 + 0x1.p-53, + (int)-0x1.p0, + -0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 92 + 0x1.80p-52, + (int)-0x1.p0, + -0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 93 + -0x1.80p-52, + (int)-0x1.p0, + 0x1.fffffffffffffp-1, + -0x1.0000000000001p0 + }, + { // Entry 94 + -0x1.p-53, + (int)-0x1.p0, + 0x1.fffffffffffffp-1, + -0x1.0p0 + }, + { // Entry 95 + 0.0, + (int)-0x1.p0, + 0x1.fffffffffffffp-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 96 + -0x1.p-52, + (int)-0x1.p0, + 0x1.0p0, + -0x1.0000000000001p0 + }, + { // Entry 97 + 0.0, + (int)-0x1.p0, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 98 + 0x1.p-53, + (int)-0x1.p0, + 0x1.0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 99 + 0.0, + (int)-0x1.p0, + 0x1.0000000000001p0, + -0x1.0000000000001p0 + }, + { // Entry 100 + 0x1.p-52, + (int)-0x1.p0, + 0x1.0000000000001p0, + -0x1.0p0 + }, + { // Entry 101 + 0x1.80p-52, + (int)-0x1.p0, + 0x1.0000000000001p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 102 + 0.0, + (int)0x1.p0, + 0x1.fffffffffffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 103 + -0x1.p-53, + (int)0x1.p0, + 0x1.fffffffffffffp-1, + 0x1.0p0 + }, + { // Entry 104 + -0x1.80p-52, + (int)0x1.p0, + 0x1.fffffffffffffp-1, + 0x1.0000000000001p0 + }, + { // Entry 105 + 0x1.p-53, + (int)0x1.p0, + 0x1.0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 106 + 0.0, + (int)0x1.p0, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 107 + -0x1.p-52, + (int)0x1.p0, + 0x1.0p0, + 0x1.0000000000001p0 + }, + { // Entry 108 + 0x1.80p-52, + (int)0x1.p0, + 0x1.0000000000001p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 109 + 0x1.p-52, + (int)0x1.p0, + 0x1.0000000000001p0, + 0x1.0p0 + }, + { // Entry 110 + 0.0, + (int)0x1.p0, + 0x1.0000000000001p0, + 0x1.0000000000001p0 + }, + { // Entry 111 + -0.0, + (int)-0x1.p0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 112 + -0.0, + (int)0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 113 + 0.0, + (int)0x1.p0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 114 + -0.0, + (int)0x1.p0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 115 + -0.0, + (int)0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 116 + 0.0, + (int)-0x1.p0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 117 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 118 + -0.0, + (int)0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 119 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 120 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 121 + -0.0, + (int)0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 122 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 123 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 124 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 125 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 126 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 127 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 128 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 129 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 130 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 131 + 0.0, + (int)0x1.p0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 132 + 0.0, + (int)-0x1.p0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 133 + -0.0, + (int)-0x1.p0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 134 + -0.0, + (int)0x1.p0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 135 + 0x1.ffffffffffffc0p-3, + (int)-0x1.p0, + -0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 136 + -0x1.p-1, + (int)0.0, + -0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 137 + -0.0, + (int)0.0, + -0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 138 + -0x1.p-2, + (int)0.0, + -0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 139 + -0.0, + (int)0.0, + -0x1.0p51, + 0x1.0p0 + }, + { // Entry 140 + 0x1.p-1, + (int)0.0, + -0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 141 + -0.0, + (int)0.0, + -0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 142 + 0x1.p-2, + (int)0.0, + -0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 143 + -0x1.00000000000040p-2, + (int)-0x1.fffffffcp30, + -0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 144 + 0.0, + (int)0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 145 + -0x1.p-1, + (int)0.0, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 146 + -0x1.ffffffffffffc0p-2, + (int)0x1.fffffffcp30, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 147 + -0x1.ffffffffffffe0p-2, + (int)0x1.p0, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 148 + 0.0, + (int)0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 149 + 0x1.p-52, + (int)0x1.fffffffcp30, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 150 + -0x1.ffffffffffffc0p-2, + (int)0x1.p1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 151 + 0.0, + (int)0x1.p0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 152 + 0.0, + (int)0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 153 + -0x1.80p-52, + (int)-0x1.80p1, + -0x1.0000000000001p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 154 + -0.0, + (int)-0x1.p1, + -0x1.0000000000001p53, + 0x1.0p0 + }, + { // Entry 155 + -0.0, + (int)0.0, + -0x1.0000000000001p53, + 0x1.0000000000001p0 + }, + { // Entry 156 + -0x1.p-53, + (int)-0x1.p0, + -0x1.0p53, + 0x1.fffffffffffffp-1 + }, + { // Entry 157 + -0.0, + (int)0.0, + -0x1.0p53, + 0x1.0p0 + }, + { // Entry 158 + -0x1.p-51, + (int)-0x1.fffffff8p30, + -0x1.0p53, + 0x1.0000000000001p0 + }, + { // Entry 159 + -0.0, + (int)0.0, + -0x1.fffffffffffffp52, + 0x1.fffffffffffffp-1 + }, + { // Entry 160 + -0.0, + (int)-0x1.fffffffcp30, + -0x1.fffffffffffffp52, + 0x1.0p0 + }, + { // Entry 161 + -0x1.80p-51, + (int)-0x1.fffffff4p30, + -0x1.fffffffffffffp52, + 0x1.0000000000001p0 + }, + { // Entry 162 + 0.0, + (int)0.0, + 0x1.fffffffffffffp50, + 0x1.fffffffffffffp-1 + }, + { // Entry 163 + -0x1.p-2, + (int)0.0, + 0x1.fffffffffffffp50, + 0x1.0p0 + }, + { // Entry 164 + 0x1.00000000000040p-2, + (int)0x1.fffffffcp30, + 0x1.fffffffffffffp50, + 0x1.0000000000001p0 + }, + { // Entry 165 + 0x1.p-2, + (int)0.0, + 0x1.0p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 166 + 0.0, + (int)0.0, + 0x1.0p51, + 0x1.0p0 + }, + { // Entry 167 + -0x1.p-1, + (int)0.0, + 0x1.0p51, + 0x1.0000000000001p0 + }, + { // Entry 168 + -0x1.ffffffffffffc0p-3, + (int)0x1.p0, + 0x1.0000000000001p51, + 0x1.fffffffffffffp-1 + }, + { // Entry 169 + 0x1.p-1, + (int)0.0, + 0x1.0000000000001p51, + 0x1.0p0 + }, + { // Entry 170 + 0.0, + (int)0.0, + 0x1.0000000000001p51, + 0x1.0000000000001p0 + }, + { // Entry 171 + 0.0, + (int)0.0, + 0x1.fffffffffffffp51, + 0x1.fffffffffffffp-1 + }, + { // Entry 172 + -0x1.p-1, + (int)0.0, + 0x1.fffffffffffffp51, + 0x1.0p0 + }, + { // Entry 173 + -0x1.ffffffffffffc0p-2, + (int)0x1.fffffffcp30, + 0x1.fffffffffffffp51, + 0x1.0000000000001p0 + }, + { // Entry 174 + -0x1.ffffffffffffe0p-2, + (int)0x1.p0, + 0x1.0p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 175 + 0.0, + (int)0.0, + 0x1.0p52, + 0x1.0p0 + }, + { // Entry 176 + 0x1.p-52, + (int)0x1.fffffffcp30, + 0x1.0p52, + 0x1.0000000000001p0 + }, + { // Entry 177 + -0x1.ffffffffffffc0p-2, + (int)0x1.p1, + 0x1.0000000000001p52, + 0x1.fffffffffffffp-1 + }, + { // Entry 178 + 0.0, + (int)0x1.p0, + 0x1.0000000000001p52, + 0x1.0p0 + }, + { // Entry 179 + 0.0, + (int)0.0, + 0x1.0000000000001p52, + 0x1.0000000000001p0 + }, + { // Entry 180 + -0.0, + (int)0.0, + -0x1.0000000000001p53, + -0x1.0000000000001p0 + }, + { // Entry 181 + -0.0, + (int)0x1.p1, + -0x1.0000000000001p53, + -0x1.0p0 + }, + { // Entry 182 + -0x1.80p-52, + (int)0x1.80p1, + -0x1.0000000000001p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 183 + -0x1.p-51, + (int)0x1.fffffff8p30, + -0x1.0p53, + -0x1.0000000000001p0 + }, + { // Entry 184 + -0.0, + (int)0.0, + -0x1.0p53, + -0x1.0p0 + }, + { // Entry 185 + -0x1.p-53, + (int)0x1.p0, + -0x1.0p53, + -0x1.fffffffffffffp-1 + }, + { // Entry 186 + -0x1.80p-51, + (int)0x1.fffffff4p30, + -0x1.fffffffffffffp52, + -0x1.0000000000001p0 + }, + { // Entry 187 + -0.0, + (int)0x1.fffffffcp30, + -0x1.fffffffffffffp52, + -0x1.0p0 + }, + { // Entry 188 + -0.0, + (int)0.0, + -0x1.fffffffffffffp52, + -0x1.fffffffffffffp-1 + }, + { // Entry 189 + 0x1.fffffffffffff0p1023, + (int)0.0, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 190 + -0x1.fffffffffffff0p1023, + (int)0.0, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 191 + 0x1.fffffffffffff0p1023, + (int)0.0, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 192 + -0x1.fffffffffffff0p1023, + (int)0.0, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 193 + 0x1.p-1022, + (int)0.0, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 194 + -0x1.p-1022, + (int)0.0, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 195 + 0x1.p-1022, + (int)0.0, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 196 + -0x1.p-1022, + (int)0.0, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 197 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 198 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 199 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 200 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 201 + 0.0, + (int)0.0, + 0.0, + HUGE_VAL + }, + { // Entry 202 + -0.0, + (int)0.0, + -0.0, + HUGE_VAL + }, + { // Entry 203 + 0.0, + (int)0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 204 + -0.0, + (int)0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 205 + 0.0, + (int)0x1.p0, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 206 + 0.0, + (int)-0x1.p0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 207 + -0.0, + (int)-0x1.p0, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 208 + -0.0, + (int)0x1.p0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 209 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 210 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 211 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1022 + }, + { // Entry 212 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1022 + }, + { // Entry 213 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 214 + 0.0, + (int)0.0, + 0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 215 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + 0x1.0p-1074 + }, + { // Entry 216 + -0.0, + (int)0.0, + -0x1.fffffffffffffp1023, + -0x1.0p-1074 + }, + { // Entry 217 + 0x1.p-1022, + (int)0.0, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 218 + -0x1.p-1022, + (int)0.0, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 219 + 0x1.p-1022, + (int)0.0, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 220 + -0x1.p-1022, + (int)0.0, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 221 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 222 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 223 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 224 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 225 + 0.0, + (int)0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 226 + -0.0, + (int)0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 227 + 0.0, + (int)0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 228 + -0.0, + (int)0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 229 + 0.0, + (int)0x1.p0, + 0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 230 + 0.0, + (int)-0x1.p0, + 0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 231 + -0.0, + (int)-0x1.p0, + -0x1.0p-1022, + 0x1.0p-1022 + }, + { // Entry 232 + -0.0, + (int)0x1.p0, + -0x1.0p-1022, + -0x1.0p-1022 + }, + { // Entry 233 + 0.0, + (int)0.0, + 0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 234 + 0.0, + (int)0.0, + 0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 235 + -0.0, + (int)0.0, + -0x1.0p-1022, + 0x1.0p-1074 + }, + { // Entry 236 + -0.0, + (int)0.0, + -0x1.0p-1022, + -0x1.0p-1074 + }, + { // Entry 237 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 238 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + 0x1.0p-1022 + }, + { // Entry 239 + 0x1.p-1074, + (int)0.0, + 0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 240 + -0x1.p-1074, + (int)0.0, + -0x1.0p-1074, + -0x1.0p-1022 + }, + { // Entry 241 + 0.0, + (int)0.0, + 0.0, + 0x1.0p-1022 + }, + { // Entry 242 + -0.0, + (int)0.0, + -0.0, + 0x1.0p-1022 + }, + { // Entry 243 + 0.0, + (int)0.0, + 0.0, + -0x1.0p-1022 + }, + { // Entry 244 + -0.0, + (int)0.0, + -0.0, + -0x1.0p-1022 + }, + { // Entry 245 + 0.0, + (int)0x1.p0, + 0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 246 + -0.0, + (int)-0x1.p0, + -0x1.0p-1074, + 0x1.0p-1074 + }, + { // Entry 247 + 0.0, + (int)-0x1.p0, + 0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 248 + -0.0, + (int)0x1.p0, + -0x1.0p-1074, + -0x1.0p-1074 + }, + { // Entry 249 + 0.0, + (int)0.0, + 0.0, + 0x1.0p-1074 + }, + { // Entry 250 + -0.0, + (int)0.0, + -0.0, + 0x1.0p-1074 + }, + { // Entry 251 + 0.0, + (int)0.0, + 0.0, + -0x1.0p-1074 + }, + { // Entry 252 + -0.0, + (int)0.0, + -0.0, + -0x1.0p-1074 + }, + { // Entry 253 + -0x1.p0, + (int)0x1.p1, + 0x1.8p1, + 0x1.0p1 + }, + { // Entry 254 + 0x1.p0, + (int)-0x1.p1, + -0x1.8p1, + 0x1.0p1 + }, + { // Entry 255 + -0x1.p0, + (int)-0x1.p1, + 0x1.8p1, + -0x1.0p1 + }, + { // Entry 256 + 0x1.p0, + (int)0x1.p1, + -0x1.8p1, + -0x1.0p1 + }, + { // Entry 257 + 0x1.p0, + (int)0x1.p1, + 0x1.4p2, + 0x1.0p1 + }, + { // Entry 258 + -0x1.p0, + (int)-0x1.p1, + -0x1.4p2, + 0x1.0p1 + }, + { // Entry 259 + 0x1.p0, + (int)-0x1.p1, + 0x1.4p2, + -0x1.0p1 + }, + { // Entry 260 + -0x1.p0, + (int)0x1.p1, + -0x1.4p2, + -0x1.0p1 + } +}; diff --git a/tests/math_data/remquof_intel_data.h b/tests/math_data/remquof_intel_data.h new file mode 100644 index 000000000..2eebbae93 --- /dev/null +++ b/tests/math_data/remquof_intel_data.h @@ -0,0 +1,1578 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_int_2_t g_remquof_intel_data[] = { + { // Entry 0 + 0x1.72c2c0p18, + (int)-0x1.b37d2b60p28, + -0x1.285308p99, + 0x1.7a4110p19 + }, + { // Entry 1 + -0x1.96dfb0p13, + (int)0x1.212d5d58p30, + 0x1.0295fap117, + 0x1.0cede2p15 + }, + { // Entry 2 + 0x1.fd0030p20, + (int)-0x1.007ff8p22, + 0x1.ffffe6p127, + -0x1.000006p22 + }, + { // Entry 3 + 0x1.4782b0p2, + (int)0x1.4323c158p30, + 0x1.fffff8p127, + 0x1.dffffep4 + }, + { // Entry 4 + -0x1.p-11, + (int)0x1.ffffc0p30, + 0x1.fffffap127, + 0x1.fffffcp-1 + }, + { // Entry 5 + -0.0, + (int)0x1.p0, + -0x1.p-117, + -0x1.p-117 + }, + { // Entry 6 + -0.0, + (int)-0x1.p0, + -0x1.p-117, + 0x1.p-117 + }, + { // Entry 7 + 0.0, + (int)-0x1.p0, + 0x1.p-117, + -0x1.p-117 + }, + { // Entry 8 + 0.0, + (int)0x1.p0, + 0x1.p-117, + 0x1.p-117 + }, + { // Entry 9 + -0x1.p-117, + (int)0.0, + -0x1.p-117, + 0x1.p15 + }, + { // Entry 10 + -0x1.p-117, + (int)0.0, + -0x1.p-117, + 0x1.p16 + }, + { // Entry 11 + 0x1.p-117, + (int)0.0, + 0x1.p-117, + 0x1.p15 + }, + { // Entry 12 + 0x1.p-117, + (int)0.0, + 0x1.p-117, + 0x1.p16 + }, + { // Entry 13 + -0x1.p-117, + (int)0.0, + -0x1.p-117, + 0x1.p117 + }, + { // Entry 14 + -0x1.p-117, + (int)0.0, + -0x1.p-117, + 0x1.p118 + }, + { // Entry 15 + 0x1.p-117, + (int)0.0, + 0x1.p-117, + 0x1.p117 + }, + { // Entry 16 + 0x1.p-117, + (int)0.0, + 0x1.p-117, + 0x1.p118 + }, + { // Entry 17 + 0.0, + (int)0.0, + 0x1.p15, + -0x1.p-117 + }, + { // Entry 18 + 0.0, + (int)0.0, + 0x1.p15, + 0x1.p-117 + }, + { // Entry 19 + 0.0, + (int)0.0, + 0x1.p16, + -0x1.p-117 + }, + { // Entry 20 + 0.0, + (int)0.0, + 0x1.p16, + 0x1.p-117 + }, + { // Entry 21 + 0.0, + (int)0x1.p0, + 0x1.p15, + 0x1.p15 + }, + { // Entry 22 + 0x1.p15, + (int)0.0, + 0x1.p15, + 0x1.p16 + }, + { // Entry 23 + 0.0, + (int)0x1.p1, + 0x1.p16, + 0x1.p15 + }, + { // Entry 24 + 0.0, + (int)0x1.p0, + 0x1.p16, + 0x1.p16 + }, + { // Entry 25 + 0x1.p15, + (int)0.0, + 0x1.p15, + 0x1.p117 + }, + { // Entry 26 + 0x1.p15, + (int)0.0, + 0x1.p15, + 0x1.p118 + }, + { // Entry 27 + 0x1.p16, + (int)0.0, + 0x1.p16, + 0x1.p117 + }, + { // Entry 28 + 0x1.p16, + (int)0.0, + 0x1.p16, + 0x1.p118 + }, + { // Entry 29 + 0.0, + (int)0.0, + 0x1.p117, + -0x1.p-117 + }, + { // Entry 30 + 0.0, + (int)0.0, + 0x1.p117, + 0x1.p-117 + }, + { // Entry 31 + 0.0, + (int)0.0, + 0x1.p118, + -0x1.p-117 + }, + { // Entry 32 + 0.0, + (int)0.0, + 0x1.p118, + 0x1.p-117 + }, + { // Entry 33 + 0.0, + (int)0.0, + 0x1.p117, + 0x1.p15 + }, + { // Entry 34 + 0.0, + (int)0.0, + 0x1.p117, + 0x1.p16 + }, + { // Entry 35 + 0.0, + (int)0.0, + 0x1.p118, + 0x1.p15 + }, + { // Entry 36 + 0.0, + (int)0.0, + 0x1.p118, + 0x1.p16 + }, + { // Entry 37 + 0.0, + (int)0x1.p0, + 0x1.p117, + 0x1.p117 + }, + { // Entry 38 + 0x1.p117, + (int)0.0, + 0x1.p117, + 0x1.p118 + }, + { // Entry 39 + 0.0, + (int)0x1.p1, + 0x1.p118, + 0x1.p117 + }, + { // Entry 40 + 0.0, + (int)0x1.p0, + 0x1.p118, + 0x1.p118 + }, + { // Entry 41 + 0.0, + (int)0x1.40p3, + 0x1.90p6, + 0x1.40p3 + }, + { // Entry 42 + 0x1.p0, + (int)0x1.20p3, + 0x1.90p6, + 0x1.60p3 + }, + { // Entry 43 + 0x1.p2, + (int)0x1.p3, + 0x1.90p6, + 0x1.80p3 + }, + { // Entry 44 + 0x1.p0, + (int)0x1.40p3, + 0x1.94p6, + 0x1.40p3 + }, + { // Entry 45 + 0x1.p1, + (int)0x1.20p3, + 0x1.94p6, + 0x1.60p3 + }, + { // Entry 46 + 0x1.40p2, + (int)0x1.p3, + 0x1.94p6, + 0x1.80p3 + }, + { // Entry 47 + 0x1.p1, + (int)0x1.40p3, + 0x1.98p6, + 0x1.40p3 + }, + { // Entry 48 + 0x1.80p1, + (int)0x1.20p3, + 0x1.98p6, + 0x1.60p3 + }, + { // Entry 49 + 0x1.80p2, + (int)0x1.p3, + 0x1.98p6, + 0x1.80p3 + }, + { // Entry 50 + 0x1.80p1, + (int)0x1.40p3, + 0x1.9cp6, + 0x1.40p3 + }, + { // Entry 51 + 0x1.p2, + (int)0x1.20p3, + 0x1.9cp6, + 0x1.60p3 + }, + { // Entry 52 + -0x1.40p2, + (int)0x1.20p3, + 0x1.9cp6, + 0x1.80p3 + }, + { // Entry 53 + 0x1.p2, + (int)0x1.40p3, + 0x1.a0p6, + 0x1.40p3 + }, + { // Entry 54 + 0x1.40p2, + (int)0x1.20p3, + 0x1.a0p6, + 0x1.60p3 + }, + { // Entry 55 + -0x1.p2, + (int)0x1.20p3, + 0x1.a0p6, + 0x1.80p3 + }, + { // Entry 56 + 0x1.40p2, + (int)0x1.40p3, + 0x1.a4p6, + 0x1.40p3 + }, + { // Entry 57 + -0x1.40p2, + (int)0x1.40p3, + 0x1.a4p6, + 0x1.60p3 + }, + { // Entry 58 + -0x1.80p1, + (int)0x1.20p3, + 0x1.a4p6, + 0x1.80p3 + }, + { // Entry 59 + -0x1.p2, + (int)0x1.60p3, + 0x1.a8p6, + 0x1.40p3 + }, + { // Entry 60 + -0x1.p2, + (int)0x1.40p3, + 0x1.a8p6, + 0x1.60p3 + }, + { // Entry 61 + -0x1.p1, + (int)0x1.20p3, + 0x1.a8p6, + 0x1.80p3 + }, + { // Entry 62 + -0x1.80p1, + (int)0x1.60p3, + 0x1.acp6, + 0x1.40p3 + }, + { // Entry 63 + -0x1.80p1, + (int)0x1.40p3, + 0x1.acp6, + 0x1.60p3 + }, + { // Entry 64 + -0x1.p0, + (int)0x1.20p3, + 0x1.acp6, + 0x1.80p3 + }, + { // Entry 65 + -0x1.p1, + (int)0x1.60p3, + 0x1.b0p6, + 0x1.40p3 + }, + { // Entry 66 + -0x1.p1, + (int)0x1.40p3, + 0x1.b0p6, + 0x1.60p3 + }, + { // Entry 67 + 0.0, + (int)0x1.20p3, + 0x1.b0p6, + 0x1.80p3 + }, + { // Entry 68 + -0x1.p0, + (int)0x1.60p3, + 0x1.b4p6, + 0x1.40p3 + }, + { // Entry 69 + -0x1.p0, + (int)0x1.40p3, + 0x1.b4p6, + 0x1.60p3 + }, + { // Entry 70 + 0x1.p0, + (int)0x1.20p3, + 0x1.b4p6, + 0x1.80p3 + }, + { // Entry 71 + 0.0, + (int)0x1.60p3, + 0x1.b8p6, + 0x1.40p3 + }, + { // Entry 72 + 0.0, + (int)0x1.40p3, + 0x1.b8p6, + 0x1.60p3 + }, + { // Entry 73 + 0x1.p1, + (int)0x1.20p3, + 0x1.b8p6, + 0x1.80p3 + }, + { // Entry 74 + -0.0, + (int)0x1.p0, + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 75 + -0x1.p-23, + (int)0x1.p0, + -0x1.000002p0, + -0x1.p0 + }, + { // Entry 76 + -0x1.80p-23, + (int)0x1.p0, + -0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 77 + 0x1.p-23, + (int)0x1.p0, + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 78 + -0.0, + (int)0x1.p0, + -0x1.p0, + -0x1.p0 + }, + { // Entry 79 + -0x1.p-24, + (int)0x1.p0, + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 80 + 0x1.80p-23, + (int)0x1.p0, + -0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 81 + 0x1.p-24, + (int)0x1.p0, + -0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 82 + -0.0, + (int)0x1.p0, + -0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 83 + -0x1.80p-23, + (int)-0x1.p0, + -0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 84 + -0x1.p-23, + (int)-0x1.p0, + -0x1.000002p0, + 0x1.p0 + }, + { // Entry 85 + -0.0, + (int)-0x1.p0, + -0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 86 + -0x1.p-24, + (int)-0x1.p0, + -0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 87 + -0.0, + (int)-0x1.p0, + -0x1.p0, + 0x1.p0 + }, + { // Entry 88 + 0x1.p-23, + (int)-0x1.p0, + -0x1.p0, + 0x1.000002p0 + }, + { // Entry 89 + -0.0, + (int)-0x1.p0, + -0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 90 + 0x1.p-24, + (int)-0x1.p0, + -0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 91 + 0x1.80p-23, + (int)-0x1.p0, + -0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 92 + -0x1.80p-23, + (int)-0x1.p0, + 0x1.fffffep-1, + -0x1.000002p0 + }, + { // Entry 93 + -0x1.p-24, + (int)-0x1.p0, + 0x1.fffffep-1, + -0x1.p0 + }, + { // Entry 94 + 0.0, + (int)-0x1.p0, + 0x1.fffffep-1, + -0x1.fffffep-1 + }, + { // Entry 95 + -0x1.p-23, + (int)-0x1.p0, + 0x1.p0, + -0x1.000002p0 + }, + { // Entry 96 + 0.0, + (int)-0x1.p0, + 0x1.p0, + -0x1.p0 + }, + { // Entry 97 + 0x1.p-24, + (int)-0x1.p0, + 0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 98 + 0.0, + (int)-0x1.p0, + 0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 99 + 0x1.p-23, + (int)-0x1.p0, + 0x1.000002p0, + -0x1.p0 + }, + { // Entry 100 + 0x1.80p-23, + (int)-0x1.p0, + 0x1.000002p0, + -0x1.fffffep-1 + }, + { // Entry 101 + 0.0, + (int)0x1.p0, + 0x1.fffffep-1, + 0x1.fffffep-1 + }, + { // Entry 102 + -0x1.p-24, + (int)0x1.p0, + 0x1.fffffep-1, + 0x1.p0 + }, + { // Entry 103 + -0x1.80p-23, + (int)0x1.p0, + 0x1.fffffep-1, + 0x1.000002p0 + }, + { // Entry 104 + 0x1.p-24, + (int)0x1.p0, + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 105 + 0.0, + (int)0x1.p0, + 0x1.p0, + 0x1.p0 + }, + { // Entry 106 + -0x1.p-23, + (int)0x1.p0, + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 107 + 0x1.80p-23, + (int)0x1.p0, + 0x1.000002p0, + 0x1.fffffep-1 + }, + { // Entry 108 + 0x1.p-23, + (int)0x1.p0, + 0x1.000002p0, + 0x1.p0 + }, + { // Entry 109 + 0.0, + (int)0x1.p0, + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 110 + -0.0, + (int)-0x1.p0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 111 + 0.0, + (int)0.0, + 0.0, + 0x1.p-149 + }, + { // Entry 112 + 0.0, + (int)0x1.p0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 113 + -0.0, + (int)0x1.p0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 114 + 0.0, + (int)0.0, + 0.0, + -0x1.p-149 + }, + { // Entry 115 + 0.0, + (int)-0x1.p0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 116 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 117 + 0.0, + (int)0.0, + 0.0, + 0x1.fffffep127 + }, + { // Entry 118 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 119 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 120 + 0.0, + (int)0.0, + 0.0, + -0x1.fffffep127 + }, + { // Entry 121 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 122 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 123 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 124 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 125 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 126 + 0.0, + (int)0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 127 + -0.0, + (int)0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 128 + -0.0, + (int)0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 129 + 0.0, + (int)0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 130 + 0.0, + (int)0x1.p0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 131 + 0.0, + (int)-0x1.p0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 132 + -0.0, + (int)-0x1.p0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 133 + -0.0, + (int)0x1.p0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 134 + 0x1.fffff8p-3, + (int)-0x1.000004p22, + -0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 135 + -0x1.p-1, + (int)-0x1.p22, + -0x1.000002p22, + 0x1.p0 + }, + { // Entry 136 + -0.0, + (int)-0x1.p22, + -0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 137 + -0x1.p-2, + (int)-0x1.p22, + -0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 138 + -0.0, + (int)-0x1.p22, + -0x1.p22, + 0x1.p0 + }, + { // Entry 139 + 0x1.p-1, + (int)-0x1.p22, + -0x1.p22, + 0x1.000002p0 + }, + { // Entry 140 + -0.0, + (int)-0x1.p22, + -0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 141 + 0x1.p-2, + (int)-0x1.p22, + -0x1.fffffep21, + 0x1.p0 + }, + { // Entry 142 + -0x1.000008p-2, + (int)-0x1.fffff8p21, + -0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 143 + 0.0, + (int)0x1.p23, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 144 + -0x1.p-1, + (int)0x1.p23, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 145 + -0x1.fffff8p-2, + (int)0x1.fffffcp22, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 146 + -0x1.fffffcp-2, + (int)0x1.000002p23, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 147 + 0.0, + (int)0x1.p23, + 0x1.p23, + 0x1.p0 + }, + { // Entry 148 + 0x1.p-23, + (int)0x1.fffffcp22, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 149 + -0x1.fffff8p-2, + (int)0x1.000004p23, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 150 + 0.0, + (int)0x1.000002p23, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 151 + 0.0, + (int)0x1.p23, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 152 + -0x1.80p-23, + (int)-0x1.000003p24, + -0x1.000002p24, + 0x1.fffffep-1 + }, + { // Entry 153 + -0.0, + (int)-0x1.000002p24, + -0x1.000002p24, + 0x1.p0 + }, + { // Entry 154 + -0.0, + (int)-0x1.p24, + -0x1.000002p24, + 0x1.000002p0 + }, + { // Entry 155 + -0x1.p-24, + (int)-0x1.000001p24, + -0x1.p24, + 0x1.fffffep-1 + }, + { // Entry 156 + -0.0, + (int)-0x1.p24, + -0x1.p24, + 0x1.p0 + }, + { // Entry 157 + -0x1.p-22, + (int)-0x1.fffffcp23, + -0x1.p24, + 0x1.000002p0 + }, + { // Entry 158 + -0.0, + (int)-0x1.p24, + -0x1.fffffep23, + 0x1.fffffep-1 + }, + { // Entry 159 + -0.0, + (int)-0x1.fffffep23, + -0x1.fffffep23, + 0x1.p0 + }, + { // Entry 160 + -0x1.80p-22, + (int)-0x1.fffffap23, + -0x1.fffffep23, + 0x1.000002p0 + }, + { // Entry 161 + 0.0, + (int)0x1.p22, + 0x1.fffffep21, + 0x1.fffffep-1 + }, + { // Entry 162 + -0x1.p-2, + (int)0x1.p22, + 0x1.fffffep21, + 0x1.p0 + }, + { // Entry 163 + 0x1.000008p-2, + (int)0x1.fffff8p21, + 0x1.fffffep21, + 0x1.000002p0 + }, + { // Entry 164 + 0x1.p-2, + (int)0x1.p22, + 0x1.p22, + 0x1.fffffep-1 + }, + { // Entry 165 + 0.0, + (int)0x1.p22, + 0x1.p22, + 0x1.p0 + }, + { // Entry 166 + -0x1.p-1, + (int)0x1.p22, + 0x1.p22, + 0x1.000002p0 + }, + { // Entry 167 + -0x1.fffff8p-3, + (int)0x1.000004p22, + 0x1.000002p22, + 0x1.fffffep-1 + }, + { // Entry 168 + 0x1.p-1, + (int)0x1.p22, + 0x1.000002p22, + 0x1.p0 + }, + { // Entry 169 + 0.0, + (int)0x1.p22, + 0x1.000002p22, + 0x1.000002p0 + }, + { // Entry 170 + 0.0, + (int)0x1.p23, + 0x1.fffffep22, + 0x1.fffffep-1 + }, + { // Entry 171 + -0x1.p-1, + (int)0x1.p23, + 0x1.fffffep22, + 0x1.p0 + }, + { // Entry 172 + -0x1.fffff8p-2, + (int)0x1.fffffcp22, + 0x1.fffffep22, + 0x1.000002p0 + }, + { // Entry 173 + -0x1.fffffcp-2, + (int)0x1.000002p23, + 0x1.p23, + 0x1.fffffep-1 + }, + { // Entry 174 + 0.0, + (int)0x1.p23, + 0x1.p23, + 0x1.p0 + }, + { // Entry 175 + 0x1.p-23, + (int)0x1.fffffcp22, + 0x1.p23, + 0x1.000002p0 + }, + { // Entry 176 + -0x1.fffff8p-2, + (int)0x1.000004p23, + 0x1.000002p23, + 0x1.fffffep-1 + }, + { // Entry 177 + 0.0, + (int)0x1.000002p23, + 0x1.000002p23, + 0x1.p0 + }, + { // Entry 178 + 0.0, + (int)0x1.p23, + 0x1.000002p23, + 0x1.000002p0 + }, + { // Entry 179 + -0.0, + (int)0x1.p24, + -0x1.000002p24, + -0x1.000002p0 + }, + { // Entry 180 + -0.0, + (int)0x1.000002p24, + -0x1.000002p24, + -0x1.p0 + }, + { // Entry 181 + -0x1.80p-23, + (int)0x1.000003p24, + -0x1.000002p24, + -0x1.fffffep-1 + }, + { // Entry 182 + -0x1.p-22, + (int)0x1.fffffcp23, + -0x1.p24, + -0x1.000002p0 + }, + { // Entry 183 + -0.0, + (int)0x1.p24, + -0x1.p24, + -0x1.p0 + }, + { // Entry 184 + -0x1.p-24, + (int)0x1.000001p24, + -0x1.p24, + -0x1.fffffep-1 + }, + { // Entry 185 + -0x1.80p-22, + (int)0x1.fffffap23, + -0x1.fffffep23, + -0x1.000002p0 + }, + { // Entry 186 + -0.0, + (int)0x1.fffffep23, + -0x1.fffffep23, + -0x1.p0 + }, + { // Entry 187 + -0.0, + (int)0x1.p24, + -0x1.fffffep23, + -0x1.fffffep-1 + }, + { // Entry 188 + 0x1.fffffep127, + (int)0.0, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 189 + -0x1.fffffep127, + (int)0.0, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 190 + 0x1.fffffep127, + (int)0.0, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 191 + -0x1.fffffep127, + (int)0.0, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 192 + 0x1.p-126, + (int)0.0, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 193 + -0x1.p-126, + (int)0.0, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 194 + 0x1.p-126, + (int)0.0, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 195 + -0x1.p-126, + (int)0.0, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 196 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 197 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 198 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 199 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 200 + 0.0, + (int)0.0, + 0.0f, + HUGE_VALF + }, + { // Entry 201 + -0.0, + (int)0.0, + -0.0f, + HUGE_VALF + }, + { // Entry 202 + 0.0, + (int)0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 203 + -0.0, + (int)0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 204 + 0.0, + (int)0x1.p0, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 205 + 0.0, + (int)-0x1.p0, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 206 + -0.0, + (int)-0x1.p0, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 207 + -0.0, + (int)0x1.p0, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 208 + 0.0, + (int)0.0, + 0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 209 + 0.0, + (int)0.0, + 0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 210 + -0.0, + (int)0.0, + -0x1.fffffep127, + 0x1.p-126 + }, + { // Entry 211 + -0.0, + (int)0.0, + -0x1.fffffep127, + -0x1.p-126 + }, + { // Entry 212 + 0.0, + (int)0.0, + 0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 213 + 0.0, + (int)0.0, + 0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 214 + -0.0, + (int)0.0, + -0x1.fffffep127, + 0x1.p-149 + }, + { // Entry 215 + -0.0, + (int)0.0, + -0x1.fffffep127, + -0x1.p-149 + }, + { // Entry 216 + 0x1.p-126, + (int)0.0, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 217 + -0x1.p-126, + (int)0.0, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 218 + 0x1.p-126, + (int)0.0, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 219 + -0x1.p-126, + (int)0.0, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 220 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 221 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 222 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 223 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 224 + 0.0, + (int)0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 225 + -0.0, + (int)0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 226 + 0.0, + (int)0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 227 + -0.0, + (int)0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 228 + 0.0, + (int)0x1.p0, + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 229 + 0.0, + (int)-0x1.p0, + 0x1.p-126, + -0x1.p-126 + }, + { // Entry 230 + -0.0, + (int)-0x1.p0, + -0x1.p-126, + 0x1.p-126 + }, + { // Entry 231 + -0.0, + (int)0x1.p0, + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 232 + 0.0, + (int)0x1.p23, + 0x1.p-126, + 0x1.p-149 + }, + { // Entry 233 + 0.0, + (int)-0x1.p23, + 0x1.p-126, + -0x1.p-149 + }, + { // Entry 234 + -0.0, + (int)-0x1.p23, + -0x1.p-126, + 0x1.p-149 + }, + { // Entry 235 + -0.0, + (int)0x1.p23, + -0x1.p-126, + -0x1.p-149 + }, + { // Entry 236 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + 0x1.p-126 + }, + { // Entry 237 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + 0x1.p-126 + }, + { // Entry 238 + 0x1.p-149, + (int)0.0, + 0x1.p-149, + -0x1.p-126 + }, + { // Entry 239 + -0x1.p-149, + (int)0.0, + -0x1.p-149, + -0x1.p-126 + }, + { // Entry 240 + 0.0, + (int)0.0, + 0.0f, + 0x1.p-126 + }, + { // Entry 241 + -0.0, + (int)0.0, + -0.0f, + 0x1.p-126 + }, + { // Entry 242 + 0.0, + (int)0.0, + 0.0f, + -0x1.p-126 + }, + { // Entry 243 + -0.0, + (int)0.0, + -0.0f, + -0x1.p-126 + }, + { // Entry 244 + 0.0, + (int)0x1.p0, + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 245 + -0.0, + (int)-0x1.p0, + -0x1.p-149, + 0x1.p-149 + }, + { // Entry 246 + 0.0, + (int)-0x1.p0, + 0x1.p-149, + -0x1.p-149 + }, + { // Entry 247 + -0.0, + (int)0x1.p0, + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 248 + 0.0, + (int)0.0, + 0.0f, + 0x1.p-149 + }, + { // Entry 249 + -0.0, + (int)0.0, + -0.0f, + 0x1.p-149 + }, + { // Entry 250 + 0.0, + (int)0.0, + 0.0f, + -0x1.p-149 + }, + { // Entry 251 + -0.0, + (int)0.0, + -0.0f, + -0x1.p-149 + }, + { // Entry 252 + -0x1.p0, + (int)0x1.p1, + 0x1.80p1, + 0x1.p1 + }, + { // Entry 253 + 0x1.p0, + (int)-0x1.p1, + -0x1.80p1, + 0x1.p1 + }, + { // Entry 254 + -0x1.p0, + (int)-0x1.p1, + 0x1.80p1, + -0x1.p1 + }, + { // Entry 255 + 0x1.p0, + (int)0x1.p1, + -0x1.80p1, + -0x1.p1 + }, + { // Entry 256 + 0x1.p0, + (int)0x1.p1, + 0x1.40p2, + 0x1.p1 + }, + { // Entry 257 + -0x1.p0, + (int)-0x1.p1, + -0x1.40p2, + 0x1.p1 + }, + { // Entry 258 + 0x1.p0, + (int)-0x1.p1, + 0x1.40p2, + -0x1.p1 + }, + { // Entry 259 + -0x1.p0, + (int)0x1.p1, + -0x1.40p2, + -0x1.p1 + } +}; diff --git a/tests/math_data/rint_intel_data.h b/tests/math_data/rint_intel_data.h new file mode 100644 index 000000000..10abff343 --- /dev/null +++ b/tests/math_data/rint_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_rint_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0 + }, + { // Entry 2 + 0.0, + 0x1.0p-1074 + }, + { // Entry 3 + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0.0, + 0x1.0p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.p50, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.p51, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.p52, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0x1.p0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0.0, + -0x1.0p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.p50, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.p51, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.p52, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.p30, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.fffffff8p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 93 + 0x1.fffffff8p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 94 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 95 + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 96 + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 97 + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 98 + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 99 + 0x1.fffffff8p30, + 0x1.fffffffa0p30 + }, + { // Entry 100 + 0x1.fffffffcp30, + 0x1.fffffffa00001p30 + }, + { // Entry 101 + 0x1.fffffffcp30, + 0x1.fffffffa00002p30 + }, + { // Entry 102 + 0x1.fffffffcp30, + 0x1.fffffffbffffep30 + }, + { // Entry 103 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 105 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 106 + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 107 + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 108 + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 109 + 0x1.p31, + 0x1.fffffffe0p30 + }, + { // Entry 110 + 0x1.p31, + 0x1.fffffffe00001p30 + }, + { // Entry 111 + 0x1.p31, + 0x1.fffffffe00002p30 + }, + { // Entry 112 + 0x1.p31, + 0x1.ffffffffffffep30 + }, + { // Entry 113 + 0x1.p31, + 0x1.fffffffffffffp30 + }, + { // Entry 114 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 115 + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 116 + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 117 + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 118 + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 119 + 0x1.p31, + 0x1.000000010p31 + }, + { // Entry 120 + 0x1.00000002p31, + 0x1.0000000100001p31 + }, + { // Entry 121 + 0x1.00000002p31, + 0x1.0000000100002p31 + }, + { // Entry 122 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 123 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 124 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 125 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 126 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 127 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 128 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 129 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 130 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 131 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 132 + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 134 + -0x1.p30, + -0x1.fffffffffffffp29 + }, + { // Entry 135 + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 136 + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 137 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 138 + -0x1.fffffff8p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 139 + -0x1.fffffff8p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 140 + -0x1.fffffffcp30, + -0x1.fffffffa00002p30 + }, + { // Entry 141 + -0x1.fffffffcp30, + -0x1.fffffffa00001p30 + }, + { // Entry 142 + -0x1.fffffff8p30, + -0x1.fffffffa0p30 + }, + { // Entry 143 + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 144 + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 145 + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 146 + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 147 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 148 + -0x1.fffffffcp30, + -0x1.fffffffbfffffp30 + }, + { // Entry 149 + -0x1.fffffffcp30, + -0x1.fffffffbffffep30 + }, + { // Entry 150 + -0x1.p31, + -0x1.fffffffe00002p30 + }, + { // Entry 151 + -0x1.p31, + -0x1.fffffffe00001p30 + }, + { // Entry 152 + -0x1.p31, + -0x1.fffffffe0p30 + }, + { // Entry 153 + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 154 + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 155 + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 156 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 158 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 159 + -0x1.p31, + -0x1.ffffffffffffep30 + }, + { // Entry 160 + -0x1.00000002p31, + -0x1.0000000100002p31 + }, + { // Entry 161 + -0x1.00000002p31, + -0x1.0000000100001p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.000000010p31 + }, + { // Entry 163 + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 164 + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 165 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 166 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 167 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 176 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 177 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 178 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 179 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 180 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 181 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 182 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 183 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 184 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 185 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 186 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 187 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 188 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 189 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 190 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 191 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 193 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 194 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 195 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 196 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 198 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 199 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 200 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 201 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 203 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 204 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 205 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 209 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 210 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 211 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 212 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 214 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffffffffffp1 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffffffffffp2 + }, + { // Entry 219 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffffffffffp3 + }, + { // Entry 222 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffffffffffp4 + }, + { // Entry 225 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffffffffffp5 + }, + { // Entry 228 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffffffffffp6 + }, + { // Entry 231 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffffffffffp7 + }, + { // Entry 234 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffffffffffp8 + }, + { // Entry 237 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffffffffffp9 + }, + { // Entry 240 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffffffffffp10 + }, + { // Entry 243 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffffffffffp11 + }, + { // Entry 246 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 249 + 0x1.p2, + 0x1.2p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.2000000000001p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 252 + 0x1.p3, + 0x1.1p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.1000000000001p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 255 + 0x1.p4, + 0x1.080p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.0800000000001p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 258 + 0x1.p5, + 0x1.040p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.0400000000001p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 261 + 0x1.p6, + 0x1.020p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.0200000000001p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 264 + 0x1.p7, + 0x1.010p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.0100000000001p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 267 + 0x1.p8, + 0x1.008p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.0080000000001p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 270 + 0x1.p9, + 0x1.004p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.0040000000001p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 273 + 0x1.p10, + 0x1.002p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.0020000000001p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.006p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.0060000000001p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 279 + 0x1.p11, + 0x1.001p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.0010000000001p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 282 + 0x1.p12, + 0x1.00080p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.0008000000001p12 + }, + { // Entry 284 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 286 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 287 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 289 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb54442d18p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb54442d18p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 302 + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 303 + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 304 + 0.0, + 0x1.0p-1022 + }, + { // Entry 305 + -0.0, + -0x1.0p-1022 + }, + { // Entry 306 + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 307 + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 308 + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 309 + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 310 + 0.0, + 0x1.0p-1073 + }, + { // Entry 311 + -0.0, + -0x1.0p-1073 + }, + { // Entry 312 + 0.0, + 0x1.0p-1074 + }, + { // Entry 313 + -0.0, + -0x1.0p-1074 + }, + { // Entry 314 + 0.0, + 0.0 + }, + { // Entry 315 + -0.0, + -0.0 + }, + { // Entry 316 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 320 + 0.0, + 0x1.fffffp-2 + }, + { // Entry 321 + 0.0, + 0x1.0p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.00001p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffffp-2 + }, + { // Entry 324 + -0.0, + -0x1.0p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.00001p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.80001p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffffp0 + }, + { // Entry 328 + -0x1.p1, + -0x1.80001p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/rintf_intel_data.h b/tests/math_data/rintf_intel_data.h new file mode 100644 index 000000000..aeca8308c --- /dev/null +++ b/tests/math_data/rintf_intel_data.h @@ -0,0 +1,1358 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_rintf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.67e9d8p-2 + }, + { // Entry 1 + 0x1.000008p21, + 0x1.000006p21 + }, + { // Entry 2 + 0x1.fffd48p21, + 0x1.fffd46p21 + }, + { // Entry 3 + 0x1.fffff8p21, + 0x1.fffff6p21 + }, + { // Entry 4 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 5 + -0.0, + -0x1.p-149 + }, + { // Entry 6 + 0.0, + 0.0 + }, + { // Entry 7 + 0.0, + 0x1.p-149 + }, + { // Entry 8 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 9 + 0.0, + 0x1.p-1 + }, + { // Entry 10 + 0x1.p0, + 0x1.000002p-1 + }, + { // Entry 11 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 12 + 0x1.p0, + 0x1.p0 + }, + { // Entry 13 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 14 + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 15 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 16 + 0x1.p1, + 0x1.800002p0 + }, + { // Entry 17 + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 18 + 0x1.p1, + 0x1.p1 + }, + { // Entry 19 + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 20 + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 21 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 22 + 0x1.80p1, + 0x1.400002p1 + }, + { // Entry 23 + 0x1.90p6, + 0x1.8ffffep6 + }, + { // Entry 24 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 25 + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 26 + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 27 + 0x1.90p6, + 0x1.92p6 + }, + { // Entry 28 + 0x1.94p6, + 0x1.920002p6 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f3fffep9 + }, + { // Entry 30 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 31 + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 32 + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 33 + 0x1.f4p9, + 0x1.f440p9 + }, + { // Entry 34 + 0x1.f480p9, + 0x1.f44002p9 + }, + { // Entry 35 + 0x1.p21, + 0x1.fffffep20 + }, + { // Entry 36 + 0x1.p21, + 0x1.p21 + }, + { // Entry 37 + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 38 + 0x1.p22, + 0x1.fffffep21 + }, + { // Entry 39 + 0x1.p22, + 0x1.p22 + }, + { // Entry 40 + 0x1.p22, + 0x1.000002p22 + }, + { // Entry 41 + 0x1.p23, + 0x1.fffffep22 + }, + { // Entry 42 + 0x1.p23, + 0x1.p23 + }, + { // Entry 43 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 44 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 45 + 0x1.p24, + 0x1.p24 + }, + { // Entry 46 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 47 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 48 + 0x1.p25, + 0x1.p25 + }, + { // Entry 49 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 50 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 51 + -0x1.p0, + -0x1.000002p-1 + }, + { // Entry 52 + -0.0, + -0x1.p-1 + }, + { // Entry 53 + -0.0, + -0x1.fffffep-2 + }, + { // Entry 54 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 55 + -0x1.p0, + -0x1.p0 + }, + { // Entry 56 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 57 + -0x1.p1, + -0x1.800002p0 + }, + { // Entry 58 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 59 + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 60 + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 61 + -0x1.p1, + -0x1.p1 + }, + { // Entry 62 + -0x1.p1, + -0x1.fffffep0 + }, + { // Entry 63 + -0x1.80p1, + -0x1.400002p1 + }, + { // Entry 64 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 65 + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 66 + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 67 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 68 + -0x1.90p6, + -0x1.8ffffep6 + }, + { // Entry 69 + -0x1.94p6, + -0x1.920002p6 + }, + { // Entry 70 + -0x1.90p6, + -0x1.92p6 + }, + { // Entry 71 + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 73 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 74 + -0x1.f4p9, + -0x1.f3fffep9 + }, + { // Entry 75 + -0x1.f480p9, + -0x1.f44002p9 + }, + { // Entry 76 + -0x1.f4p9, + -0x1.f440p9 + }, + { // Entry 77 + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 78 + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 79 + -0x1.p21, + -0x1.p21 + }, + { // Entry 80 + -0x1.p21, + -0x1.fffffep20 + }, + { // Entry 81 + -0x1.p22, + -0x1.000002p22 + }, + { // Entry 82 + -0x1.p22, + -0x1.p22 + }, + { // Entry 83 + -0x1.p22, + -0x1.fffffep21 + }, + { // Entry 84 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 85 + -0x1.p23, + -0x1.p23 + }, + { // Entry 86 + -0x1.p23, + -0x1.fffffep22 + }, + { // Entry 87 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 88 + -0x1.p24, + -0x1.p24 + }, + { // Entry 89 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 90 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 91 + -0x1.p25, + -0x1.p25 + }, + { // Entry 92 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 93 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 94 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 95 + 0x1.p30, + 0x1.p30 + }, + { // Entry 96 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 123 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 126 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + 0x1.p31, + 0x1.p31 + }, + { // Entry 133 + 0x1.p31, + 0x1.p31 + }, + { // Entry 134 + 0x1.p31, + 0x1.p31 + }, + { // Entry 135 + 0x1.p31, + 0x1.p31 + }, + { // Entry 136 + 0x1.p31, + 0x1.p31 + }, + { // Entry 137 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 138 + -0x1.p30, + -0x1.p30 + }, + { // Entry 139 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 166 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 169 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + -0x1.p31, + -0x1.p31 + }, + { // Entry 176 + -0x1.p31, + -0x1.p31 + }, + { // Entry 177 + -0x1.p31, + -0x1.p31 + }, + { // Entry 178 + -0x1.p31, + -0x1.p31 + }, + { // Entry 179 + -0x1.p31, + -0x1.p31 + }, + { // Entry 180 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 181 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 182 + 0x1.p62, + 0x1.p62 + }, + { // Entry 183 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 184 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 185 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 186 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 187 + 0x1.p63, + 0x1.p63 + }, + { // Entry 188 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 189 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 190 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 191 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 192 + 0x1.p64, + 0x1.p64 + }, + { // Entry 193 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 194 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 195 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 196 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 197 + -0x1.p62, + -0x1.p62 + }, + { // Entry 198 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 199 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 200 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 201 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 202 + -0x1.p63, + -0x1.p63 + }, + { // Entry 203 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 204 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 205 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 206 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 207 + -0x1.p64, + -0x1.p64 + }, + { // Entry 208 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 209 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 210 + 0x1.p62, + 0x1.p62 + }, + { // Entry 211 + 0x1.p63, + 0x1.p63 + }, + { // Entry 212 + -0x1.p62, + -0x1.p62 + }, + { // Entry 213 + -0x1.p63, + -0x1.p63 + }, + { // Entry 214 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 215 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 216 + 0x1.p31, + 0x1.p31 + }, + { // Entry 217 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 218 + -0x1.p31, + -0x1.p31 + }, + { // Entry 219 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 220 + 0x1.p2, + 0x1.fffffep1 + }, + { // Entry 221 + 0x1.p2, + 0x1.p2 + }, + { // Entry 222 + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 223 + 0x1.p3, + 0x1.fffffep2 + }, + { // Entry 224 + 0x1.p3, + 0x1.p3 + }, + { // Entry 225 + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 226 + 0x1.p4, + 0x1.fffffep3 + }, + { // Entry 227 + 0x1.p4, + 0x1.p4 + }, + { // Entry 228 + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 229 + 0x1.p5, + 0x1.fffffep4 + }, + { // Entry 230 + 0x1.p5, + 0x1.p5 + }, + { // Entry 231 + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 232 + 0x1.p6, + 0x1.fffffep5 + }, + { // Entry 233 + 0x1.p6, + 0x1.p6 + }, + { // Entry 234 + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 235 + 0x1.p7, + 0x1.fffffep6 + }, + { // Entry 236 + 0x1.p7, + 0x1.p7 + }, + { // Entry 237 + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 238 + 0x1.p8, + 0x1.fffffep7 + }, + { // Entry 239 + 0x1.p8, + 0x1.p8 + }, + { // Entry 240 + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 241 + 0x1.p9, + 0x1.fffffep8 + }, + { // Entry 242 + 0x1.p9, + 0x1.p9 + }, + { // Entry 243 + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 244 + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 245 + 0x1.p10, + 0x1.p10 + }, + { // Entry 246 + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 247 + 0x1.p11, + 0x1.fffffep10 + }, + { // Entry 248 + 0x1.p11, + 0x1.p11 + }, + { // Entry 249 + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 250 + 0x1.p12, + 0x1.fffffep11 + }, + { // Entry 251 + 0x1.p12, + 0x1.p12 + }, + { // Entry 252 + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 253 + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 254 + 0x1.p2, + 0x1.20p2 + }, + { // Entry 255 + 0x1.40p2, + 0x1.200002p2 + }, + { // Entry 256 + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 257 + 0x1.p3, + 0x1.10p3 + }, + { // Entry 258 + 0x1.20p3, + 0x1.100002p3 + }, + { // Entry 259 + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 260 + 0x1.p4, + 0x1.08p4 + }, + { // Entry 261 + 0x1.10p4, + 0x1.080002p4 + }, + { // Entry 262 + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 263 + 0x1.p5, + 0x1.04p5 + }, + { // Entry 264 + 0x1.08p5, + 0x1.040002p5 + }, + { // Entry 265 + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 266 + 0x1.p6, + 0x1.02p6 + }, + { // Entry 267 + 0x1.04p6, + 0x1.020002p6 + }, + { // Entry 268 + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 269 + 0x1.p7, + 0x1.01p7 + }, + { // Entry 270 + 0x1.02p7, + 0x1.010002p7 + }, + { // Entry 271 + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 272 + 0x1.p8, + 0x1.0080p8 + }, + { // Entry 273 + 0x1.01p8, + 0x1.008002p8 + }, + { // Entry 274 + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 275 + 0x1.p9, + 0x1.0040p9 + }, + { // Entry 276 + 0x1.0080p9, + 0x1.004002p9 + }, + { // Entry 277 + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 278 + 0x1.p10, + 0x1.0020p10 + }, + { // Entry 279 + 0x1.0040p10, + 0x1.002002p10 + }, + { // Entry 280 + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 281 + 0x1.0080p10, + 0x1.0060p10 + }, + { // Entry 282 + 0x1.0080p10, + 0x1.006002p10 + }, + { // Entry 283 + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 284 + 0x1.p11, + 0x1.0010p11 + }, + { // Entry 285 + 0x1.0020p11, + 0x1.001002p11 + }, + { // Entry 286 + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 287 + 0x1.p12, + 0x1.0008p12 + }, + { // Entry 288 + 0x1.0010p12, + 0x1.000802p12 + }, + { // Entry 289 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 290 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 291 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 292 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 293 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 294 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 295 + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 296 + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 297 + 0x1.p1, + 0x1.921fb6p0 + }, + { // Entry 298 + -0x1.p1, + -0x1.921fb6p0 + }, + { // Entry 299 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 300 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 301 + 0x1.p0, + 0x1.p0 + }, + { // Entry 302 + -0x1.p0, + -0x1.p0 + }, + { // Entry 303 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 304 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 305 + 0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 306 + -0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 307 + 0.0, + 0x1.000002p-126 + }, + { // Entry 308 + -0.0, + -0x1.000002p-126 + }, + { // Entry 309 + 0.0, + 0x1.p-126 + }, + { // Entry 310 + -0.0, + -0x1.p-126 + }, + { // Entry 311 + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 312 + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 313 + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 314 + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 315 + 0.0, + 0x1.p-148 + }, + { // Entry 316 + -0.0, + -0x1.p-148 + }, + { // Entry 317 + 0.0, + 0x1.p-149 + }, + { // Entry 318 + -0.0, + -0x1.p-149 + }, + { // Entry 319 + 0.0, + 0.0f + }, + { // Entry 320 + -0.0, + -0.0f + }, + { // Entry 321 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 322 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 323 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 324 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 325 + 0.0, + 0x1.fffff0p-2 + }, + { // Entry 326 + 0.0, + 0x1.p-1 + }, + { // Entry 327 + 0x1.p0, + 0x1.000010p-1 + }, + { // Entry 328 + -0.0, + -0x1.fffff0p-2 + }, + { // Entry 329 + -0.0, + -0x1.p-1 + }, + { // Entry 330 + -0x1.p0, + -0x1.000010p-1 + }, + { // Entry 331 + 0x1.p1, + 0x1.800010p0 + }, + { // Entry 332 + 0x1.p0, + 0x1.7ffff0p0 + }, + { // Entry 333 + -0x1.p1, + -0x1.800010p0 + }, + { // Entry 334 + -0x1.p0, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data/round_intel_data.h b/tests/math_data/round_intel_data.h new file mode 100644 index 000000000..f2b8502cf --- /dev/null +++ b/tests/math_data/round_intel_data.h @@ -0,0 +1,1350 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_round_intel_data[] = { + { // Entry 0 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 1 + 0x1.0020p11, + 0x1.001p11 + }, + { // Entry 2 + 0x1.80p1, + 0x1.4p1 + }, + { // Entry 3 + -0.0, + -0x1.0p-1074 + }, + { // Entry 4 + -0.0, + -0.0 + }, + { // Entry 5 + 0.0, + 0x1.0p-1074 + }, + { // Entry 6 + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 8 + 0x1.p0, + 0x1.0000000000001p-1 + }, + { // Entry 9 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 10 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 12 + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 14 + 0x1.p1, + 0x1.8000000000001p0 + }, + { // Entry 15 + 0x1.p1, + 0x1.fffffffffffffp0 + }, + { // Entry 16 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 17 + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 18 + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 19 + 0x1.80p1, + 0x1.4p1 + }, + { // Entry 20 + 0x1.80p1, + 0x1.4000000000001p1 + }, + { // Entry 21 + 0x1.90p6, + 0x1.8ffffffffffffp6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 23 + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 24 + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 25 + 0x1.94p6, + 0x1.920p6 + }, + { // Entry 26 + 0x1.94p6, + 0x1.9200000000001p6 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 30 + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 31 + 0x1.f480p9, + 0x1.f44p9 + }, + { // Entry 32 + 0x1.f480p9, + 0x1.f440000000001p9 + }, + { // Entry 33 + 0x1.p50, + 0x1.fffffffffffffp49 + }, + { // Entry 34 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 35 + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 36 + 0x1.p51, + 0x1.fffffffffffffp50 + }, + { // Entry 37 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 38 + 0x1.00000000000020p51, + 0x1.0000000000001p51 + }, + { // Entry 39 + 0x1.p52, + 0x1.fffffffffffffp51 + }, + { // Entry 40 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 41 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 42 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 43 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 44 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 45 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 46 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 47 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 48 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 49 + -0x1.p0, + -0x1.0000000000001p-1 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p-1 + }, + { // Entry 51 + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 52 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 53 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 55 + -0x1.p1, + -0x1.8000000000001p0 + }, + { // Entry 56 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 57 + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 58 + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.fffffffffffffp0 + }, + { // Entry 61 + -0x1.80p1, + -0x1.4000000000001p1 + }, + { // Entry 62 + -0x1.80p1, + -0x1.4p1 + }, + { // Entry 63 + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 64 + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.8ffffffffffffp6 + }, + { // Entry 67 + -0x1.94p6, + -0x1.9200000000001p6 + }, + { // Entry 68 + -0x1.94p6, + -0x1.920p6 + }, + { // Entry 69 + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 70 + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 73 + -0x1.f480p9, + -0x1.f440000000001p9 + }, + { // Entry 74 + -0x1.f480p9, + -0x1.f44p9 + }, + { // Entry 75 + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 76 + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 77 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 78 + -0x1.p50, + -0x1.fffffffffffffp49 + }, + { // Entry 79 + -0x1.00000000000020p51, + -0x1.0000000000001p51 + }, + { // Entry 80 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 81 + -0x1.p51, + -0x1.fffffffffffffp50 + }, + { // Entry 82 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 83 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 84 + -0x1.p52, + -0x1.fffffffffffffp51 + }, + { // Entry 85 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 86 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 87 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 88 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 89 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 90 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 91 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 92 + 0x1.p30, + 0x1.fffffffffffffp29 + }, + { // Entry 93 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 94 + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 95 + 0x1.fffffff8p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 96 + 0x1.fffffff8p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 97 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 98 + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 99 + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 100 + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 101 + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 102 + 0x1.fffffffcp30, + 0x1.fffffffa0p30 + }, + { // Entry 103 + 0x1.fffffffcp30, + 0x1.fffffffa00001p30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffa00002p30 + }, + { // Entry 105 + 0x1.fffffffcp30, + 0x1.fffffffbffffep30 + }, + { // Entry 106 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 107 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 108 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 109 + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 110 + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 111 + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 112 + 0x1.p31, + 0x1.fffffffe0p30 + }, + { // Entry 113 + 0x1.p31, + 0x1.fffffffe00001p30 + }, + { // Entry 114 + 0x1.p31, + 0x1.fffffffe00002p30 + }, + { // Entry 115 + 0x1.p31, + 0x1.ffffffffffffep30 + }, + { // Entry 116 + 0x1.p31, + 0x1.fffffffffffffp30 + }, + { // Entry 117 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 118 + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 119 + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 120 + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 121 + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 122 + 0x1.00000002p31, + 0x1.000000010p31 + }, + { // Entry 123 + 0x1.00000002p31, + 0x1.0000000100001p31 + }, + { // Entry 124 + 0x1.00000002p31, + 0x1.0000000100002p31 + }, + { // Entry 125 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 126 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 127 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 128 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 129 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 130 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 131 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 132 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 133 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 134 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 135 + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 136 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 137 + -0x1.p30, + -0x1.fffffffffffffp29 + }, + { // Entry 138 + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 139 + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 140 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 141 + -0x1.fffffff8p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 142 + -0x1.fffffff8p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 143 + -0x1.fffffffcp30, + -0x1.fffffffa00002p30 + }, + { // Entry 144 + -0x1.fffffffcp30, + -0x1.fffffffa00001p30 + }, + { // Entry 145 + -0x1.fffffffcp30, + -0x1.fffffffa0p30 + }, + { // Entry 146 + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 147 + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 148 + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 149 + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 150 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 151 + -0x1.fffffffcp30, + -0x1.fffffffbfffffp30 + }, + { // Entry 152 + -0x1.fffffffcp30, + -0x1.fffffffbffffep30 + }, + { // Entry 153 + -0x1.p31, + -0x1.fffffffe00002p30 + }, + { // Entry 154 + -0x1.p31, + -0x1.fffffffe00001p30 + }, + { // Entry 155 + -0x1.p31, + -0x1.fffffffe0p30 + }, + { // Entry 156 + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 157 + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 158 + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 159 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 160 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 161 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 162 + -0x1.p31, + -0x1.ffffffffffffep30 + }, + { // Entry 163 + -0x1.00000002p31, + -0x1.0000000100002p31 + }, + { // Entry 164 + -0x1.00000002p31, + -0x1.0000000100001p31 + }, + { // Entry 165 + -0x1.00000002p31, + -0x1.000000010p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 167 + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 176 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 177 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 178 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 179 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 180 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 181 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 182 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 183 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 184 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 185 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 186 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 187 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 188 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 189 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 190 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 191 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 192 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 193 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 194 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 195 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 196 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 197 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 198 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 199 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 200 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 201 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 202 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 203 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 204 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 205 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 206 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 207 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 208 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 209 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 210 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 211 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 212 + 0x1.fffffffcp30, + 0x1.fffffffbfffffp30 + }, + { // Entry 213 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 214 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 215 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 216 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 217 + -0x1.p31, + -0x1.fffffffffffffp30 + }, + { // Entry 218 + 0x1.p2, + 0x1.fffffffffffffp1 + }, + { // Entry 219 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 220 + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 221 + 0x1.p3, + 0x1.fffffffffffffp2 + }, + { // Entry 222 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 223 + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 224 + 0x1.p4, + 0x1.fffffffffffffp3 + }, + { // Entry 225 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 226 + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 227 + 0x1.p5, + 0x1.fffffffffffffp4 + }, + { // Entry 228 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 229 + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 230 + 0x1.p6, + 0x1.fffffffffffffp5 + }, + { // Entry 231 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 232 + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 233 + 0x1.p7, + 0x1.fffffffffffffp6 + }, + { // Entry 234 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 235 + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 236 + 0x1.p8, + 0x1.fffffffffffffp7 + }, + { // Entry 237 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 238 + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 239 + 0x1.p9, + 0x1.fffffffffffffp8 + }, + { // Entry 240 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 241 + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 242 + 0x1.p10, + 0x1.fffffffffffffp9 + }, + { // Entry 243 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 244 + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 245 + 0x1.p11, + 0x1.fffffffffffffp10 + }, + { // Entry 246 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 247 + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 248 + 0x1.p12, + 0x1.fffffffffffffp11 + }, + { // Entry 249 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 250 + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 251 + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 252 + 0x1.40p2, + 0x1.2p2 + }, + { // Entry 253 + 0x1.40p2, + 0x1.2000000000001p2 + }, + { // Entry 254 + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 255 + 0x1.20p3, + 0x1.1p3 + }, + { // Entry 256 + 0x1.20p3, + 0x1.1000000000001p3 + }, + { // Entry 257 + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 258 + 0x1.10p4, + 0x1.080p4 + }, + { // Entry 259 + 0x1.10p4, + 0x1.0800000000001p4 + }, + { // Entry 260 + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 261 + 0x1.08p5, + 0x1.040p5 + }, + { // Entry 262 + 0x1.08p5, + 0x1.0400000000001p5 + }, + { // Entry 263 + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 264 + 0x1.04p6, + 0x1.020p6 + }, + { // Entry 265 + 0x1.04p6, + 0x1.0200000000001p6 + }, + { // Entry 266 + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 267 + 0x1.02p7, + 0x1.010p7 + }, + { // Entry 268 + 0x1.02p7, + 0x1.0100000000001p7 + }, + { // Entry 269 + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 270 + 0x1.01p8, + 0x1.008p8 + }, + { // Entry 271 + 0x1.01p8, + 0x1.0080000000001p8 + }, + { // Entry 272 + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 273 + 0x1.0080p9, + 0x1.004p9 + }, + { // Entry 274 + 0x1.0080p9, + 0x1.0040000000001p9 + }, + { // Entry 275 + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 276 + 0x1.0040p10, + 0x1.002p10 + }, + { // Entry 277 + 0x1.0040p10, + 0x1.0020000000001p10 + }, + { // Entry 278 + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 279 + 0x1.0080p10, + 0x1.006p10 + }, + { // Entry 280 + 0x1.0080p10, + 0x1.0060000000001p10 + }, + { // Entry 281 + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 282 + 0x1.0020p11, + 0x1.001p11 + }, + { // Entry 283 + 0x1.0020p11, + 0x1.0010000000001p11 + }, + { // Entry 284 + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 285 + 0x1.0010p12, + 0x1.00080p12 + }, + { // Entry 286 + 0x1.0010p12, + 0x1.0008000000001p12 + }, + { // Entry 287 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 288 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 289 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 290 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 291 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 292 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 293 + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 294 + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 295 + 0x1.p1, + 0x1.921fb54442d18p0 + }, + { // Entry 296 + -0x1.p1, + -0x1.921fb54442d18p0 + }, + { // Entry 297 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 298 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 299 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 300 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 301 + 0x1.p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 302 + -0x1.p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 303 + 0x1.p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 304 + -0x1.p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 305 + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 306 + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 307 + 0.0, + 0x1.0p-1022 + }, + { // Entry 308 + -0.0, + -0x1.0p-1022 + }, + { // Entry 309 + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 310 + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 311 + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 312 + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 313 + 0.0, + 0x1.0p-1073 + }, + { // Entry 314 + -0.0, + -0x1.0p-1073 + }, + { // Entry 315 + 0.0, + 0x1.0p-1074 + }, + { // Entry 316 + -0.0, + -0x1.0p-1074 + }, + { // Entry 317 + 0.0, + 0.0 + }, + { // Entry 318 + -0.0, + -0.0 + }, + { // Entry 319 + 0x1.p1, + 0x1.8p0 + }, + { // Entry 320 + -0x1.p1, + -0x1.8p0 + }, + { // Entry 321 + 0x1.80p1, + 0x1.4p1 + }, + { // Entry 322 + -0x1.80p1, + -0x1.4p1 + }, + { // Entry 323 + 0.0, + 0x1.fffffp-2 + }, + { // Entry 324 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 325 + 0x1.p0, + 0x1.00001p-1 + }, + { // Entry 326 + -0.0, + -0x1.fffffp-2 + }, + { // Entry 327 + -0x1.p0, + -0x1.0p-1 + }, + { // Entry 328 + -0x1.p0, + -0x1.00001p-1 + }, + { // Entry 329 + 0x1.p1, + 0x1.80001p0 + }, + { // Entry 330 + 0x1.p0, + 0x1.7ffffp0 + }, + { // Entry 331 + -0x1.p1, + -0x1.80001p0 + }, + { // Entry 332 + -0x1.p0, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/roundf_intel_data.h b/tests/math_data/roundf_intel_data.h new file mode 100644 index 000000000..467cdeff9 --- /dev/null +++ b/tests/math_data/roundf_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_roundf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0 + }, + { // Entry 2 + 0.0, + 0x1.p-149 + }, + { // Entry 3 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0x1.p0, + 0x1.p-1 + }, + { // Entry 5 + 0x1.p0, + 0x1.000002p-1 + }, + { // Entry 6 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 11 + 0x1.p1, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.p1, + 0x1.fffffep0 + }, + { // Entry 13 + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.80p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.80p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.90p6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.94p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.94p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.f4p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.f480p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.f480p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.p21, + 0x1.fffffep20 + }, + { // Entry 31 + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.p22, + 0x1.fffffep21 + }, + { // Entry 34 + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.000004p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.p23, + 0x1.fffffep22 + }, + { // Entry 37 + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0x1.p0, + -0x1.000002p-1 + }, + { // Entry 47 + -0x1.p0, + -0x1.p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.p1, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.p1, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.80p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.80p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.90p6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.94p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.94p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.f4p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.f480p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.f480p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 74 + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.p21, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.000004p22, + -0x1.000002p22 + }, + { // Entry 77 + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.p22, + -0x1.fffffep21 + }, + { // Entry 79 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.p23, + -0x1.fffffep22 + }, + { // Entry 82 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 93 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 94 + 0x1.p31, + 0x1.p31 + }, + { // Entry 95 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 96 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.p31, + 0x1.p31 + }, + { // Entry 123 + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.p31, + 0x1.p31 + }, + { // Entry 126 + 0x1.p31, + 0x1.p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.p30 + }, + { // Entry 134 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 135 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 136 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 137 + -0x1.p31, + -0x1.p31 + }, + { // Entry 138 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 139 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.p31, + -0x1.p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.p31, + -0x1.p31 + }, + { // Entry 169 + -0x1.p31, + -0x1.p31 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 176 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 177 + 0x1.p62, + 0x1.p62 + }, + { // Entry 178 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 179 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 180 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 181 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 182 + 0x1.p63, + 0x1.p63 + }, + { // Entry 183 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 184 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 185 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 186 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 187 + 0x1.p64, + 0x1.p64 + }, + { // Entry 188 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 189 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 190 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 191 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.p62 + }, + { // Entry 193 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 194 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 195 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 196 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.p63 + }, + { // Entry 198 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 199 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 200 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 201 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.p64 + }, + { // Entry 203 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 204 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 205 + 0x1.p62, + 0x1.p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.p63 + }, + { // Entry 209 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 210 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 211 + 0x1.p31, + 0x1.p31 + }, + { // Entry 212 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.p31 + }, + { // Entry 214 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 215 + 0x1.p2, + 0x1.fffffep1 + }, + { // Entry 216 + 0x1.p2, + 0x1.p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 218 + 0x1.p3, + 0x1.fffffep2 + }, + { // Entry 219 + 0x1.p3, + 0x1.p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 221 + 0x1.p4, + 0x1.fffffep3 + }, + { // Entry 222 + 0x1.p4, + 0x1.p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 224 + 0x1.p5, + 0x1.fffffep4 + }, + { // Entry 225 + 0x1.p5, + 0x1.p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 227 + 0x1.p6, + 0x1.fffffep5 + }, + { // Entry 228 + 0x1.p6, + 0x1.p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 230 + 0x1.p7, + 0x1.fffffep6 + }, + { // Entry 231 + 0x1.p7, + 0x1.p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 233 + 0x1.p8, + 0x1.fffffep7 + }, + { // Entry 234 + 0x1.p8, + 0x1.p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 236 + 0x1.p9, + 0x1.fffffep8 + }, + { // Entry 237 + 0x1.p9, + 0x1.p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 239 + 0x1.p10, + 0x1.fffffep9 + }, + { // Entry 240 + 0x1.p10, + 0x1.p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 242 + 0x1.p11, + 0x1.fffffep10 + }, + { // Entry 243 + 0x1.p11, + 0x1.p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 245 + 0x1.p12, + 0x1.fffffep11 + }, + { // Entry 246 + 0x1.p12, + 0x1.p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 249 + 0x1.40p2, + 0x1.20p2 + }, + { // Entry 250 + 0x1.40p2, + 0x1.200002p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 252 + 0x1.20p3, + 0x1.10p3 + }, + { // Entry 253 + 0x1.20p3, + 0x1.100002p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 255 + 0x1.10p4, + 0x1.08p4 + }, + { // Entry 256 + 0x1.10p4, + 0x1.080002p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 258 + 0x1.08p5, + 0x1.04p5 + }, + { // Entry 259 + 0x1.08p5, + 0x1.040002p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 261 + 0x1.04p6, + 0x1.02p6 + }, + { // Entry 262 + 0x1.04p6, + 0x1.020002p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 264 + 0x1.02p7, + 0x1.01p7 + }, + { // Entry 265 + 0x1.02p7, + 0x1.010002p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 267 + 0x1.01p8, + 0x1.0080p8 + }, + { // Entry 268 + 0x1.01p8, + 0x1.008002p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 270 + 0x1.0080p9, + 0x1.0040p9 + }, + { // Entry 271 + 0x1.0080p9, + 0x1.004002p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 273 + 0x1.0040p10, + 0x1.0020p10 + }, + { // Entry 274 + 0x1.0040p10, + 0x1.002002p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 276 + 0x1.0080p10, + 0x1.0060p10 + }, + { // Entry 277 + 0x1.0080p10, + 0x1.006002p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 279 + 0x1.0020p11, + 0x1.0010p11 + }, + { // Entry 280 + 0x1.0020p11, + 0x1.001002p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 282 + 0x1.0010p12, + 0x1.0008p12 + }, + { // Entry 283 + 0x1.0010p12, + 0x1.000802p12 + }, + { // Entry 284 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 286 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 287 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 288 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 289 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 292 + 0x1.p1, + 0x1.921fb6p0 + }, + { // Entry 293 + -0x1.p1, + -0x1.921fb6p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.p0 + }, + { // Entry 298 + 0x1.p0, + 0x1.fffffep-1 + }, + { // Entry 299 + -0x1.p0, + -0x1.fffffep-1 + }, + { // Entry 300 + 0x1.p0, + 0x1.921fb6p-1 + }, + { // Entry 301 + -0x1.p0, + -0x1.921fb6p-1 + }, + { // Entry 302 + 0.0, + 0x1.000002p-126 + }, + { // Entry 303 + -0.0, + -0x1.000002p-126 + }, + { // Entry 304 + 0.0, + 0x1.p-126 + }, + { // Entry 305 + -0.0, + -0x1.p-126 + }, + { // Entry 306 + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 307 + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 308 + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 309 + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 310 + 0.0, + 0x1.p-148 + }, + { // Entry 311 + -0.0, + -0x1.p-148 + }, + { // Entry 312 + 0.0, + 0x1.p-149 + }, + { // Entry 313 + -0.0, + -0x1.p-149 + }, + { // Entry 314 + 0.0, + 0.0f + }, + { // Entry 315 + -0.0, + -0.0f + }, + { // Entry 316 + 0x1.p1, + 0x1.80p0 + }, + { // Entry 317 + -0x1.p1, + -0x1.80p0 + }, + { // Entry 318 + 0x1.80p1, + 0x1.40p1 + }, + { // Entry 319 + -0x1.80p1, + -0x1.40p1 + }, + { // Entry 320 + 0.0, + 0x1.fffff0p-2 + }, + { // Entry 321 + 0x1.p0, + 0x1.p-1 + }, + { // Entry 322 + 0x1.p0, + 0x1.000010p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffff0p-2 + }, + { // Entry 324 + -0x1.p0, + -0x1.p-1 + }, + { // Entry 325 + -0x1.p0, + -0x1.000010p-1 + }, + { // Entry 326 + 0x1.p1, + 0x1.800010p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffff0p0 + }, + { // Entry 328 + -0x1.p1, + -0x1.800010p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data/scalb_intel_data.h b/tests/math_data/scalb_intel_data.h new file mode 100644 index 000000000..fd6c1f7d9 --- /dev/null +++ b/tests/math_data/scalb_intel_data.h @@ -0,0 +1,4628 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_scalb_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074, + -0x1.4p3 + }, + { // Entry 1 + -0x1.55555555555560p-1024, + -0x1.5555555555556p-2, + -0x1.ff0p9 + }, + { // Entry 2 + -0x1.6db6db6db6db70p-1023, + -0x1.6db6db6db6db7p-1, + -0x1.ff0p9 + }, + { // Entry 3 + -0x1.8e38e38e38e390p-1023, + -0x1.8e38e38e38e39p-1, + -0x1.ff0p9 + }, + { // Entry 4 + 0.0, + 0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 5 + 0.0, + 0x1.0p-1074, + -0x1.4p3 + }, + { // Entry 6 + 0.0, + 0x1.0p-1074, + -0x1.780p5 + }, + { // Entry 7 + 0x1.p-51, + 0x1.0p-1074, + 0x1.ff8p9 + }, + { // Entry 8 + 0x1.5464a606112880p-1026, + 0x1.5464a60611288p-2, + -0x1.0p10 + }, + { // Entry 9 + HUGE_VAL, + 0x1.8e147ae147ae1p0, + 0x1.fffffffc0p30 + }, + { // Entry 10 + 0.0, + 0x1.dddddddddddddp-2, + -0x1.0c4p10 + }, + { // Entry 11 + 0.0, + 0x1.f7df7df7df7dfp-2, + -0x1.0c4p10 + }, + { // Entry 12 + HUGE_VAL, + 0x1.ffffffffffff6p30, + 0x1.0p31 + }, + { // Entry 13 + 0x1.ffffffffffffc0p-1033, + 0x1.ffffffffffffcp-1023, + -0x1.4p3 + }, + { // Entry 14 + 0x1.ffffffffffffc0p-1022, + 0x1.ffffffffffffcp-1023, + 0x1.0p0 + }, + { // Entry 15 + 0x1.ffffffffffffe0p-1070, + 0x1.ffffffffffffep-1023, + -0x1.780p5 + }, + { // Entry 16 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p0 + }, + { // Entry 17 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffc0p30 + }, + { // Entry 18 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffc0p30 + }, + { // Entry 19 + -0x1.p-10, + -0x1.0p0, + -0x1.4p3 + }, + { // Entry 20 + -0x1.p-9, + -0x1.0p0, + -0x1.2p3 + }, + { // Entry 21 + -0x1.p-8, + -0x1.0p0, + -0x1.0p3 + }, + { // Entry 22 + -0x1.p-7, + -0x1.0p0, + -0x1.cp2 + }, + { // Entry 23 + -0x1.p-6, + -0x1.0p0, + -0x1.8p2 + }, + { // Entry 24 + -0x1.p-5, + -0x1.0p0, + -0x1.4p2 + }, + { // Entry 25 + -0x1.p-4, + -0x1.0p0, + -0x1.0p2 + }, + { // Entry 26 + -0x1.p-3, + -0x1.0p0, + -0x1.8p1 + }, + { // Entry 27 + -0x1.p-2, + -0x1.0p0, + -0x1.0p1 + }, + { // Entry 28 + -0x1.p-1, + -0x1.0p0, + -0x1.0p0 + }, + { // Entry 29 + -0x1.p0, + -0x1.0p0, + 0.0 + }, + { // Entry 30 + -0x1.p1, + -0x1.0p0, + 0x1.0p0 + }, + { // Entry 31 + -0x1.p2, + -0x1.0p0, + 0x1.0p1 + }, + { // Entry 32 + -0x1.p3, + -0x1.0p0, + 0x1.8p1 + }, + { // Entry 33 + -0x1.p4, + -0x1.0p0, + 0x1.0p2 + }, + { // Entry 34 + -0x1.p5, + -0x1.0p0, + 0x1.4p2 + }, + { // Entry 35 + -0x1.p6, + -0x1.0p0, + 0x1.8p2 + }, + { // Entry 36 + -0x1.p7, + -0x1.0p0, + 0x1.cp2 + }, + { // Entry 37 + -0x1.p8, + -0x1.0p0, + 0x1.0p3 + }, + { // Entry 38 + -0x1.p9, + -0x1.0p0, + 0x1.2p3 + }, + { // Entry 39 + -0x1.p10, + -0x1.0p0, + 0x1.4p3 + }, + { // Entry 40 + -0x1.d1745d1745d170p-11, + -0x1.d1745d1745d17p-1, + -0x1.4p3 + }, + { // Entry 41 + -0x1.d1745d1745d170p-10, + -0x1.d1745d1745d17p-1, + -0x1.2p3 + }, + { // Entry 42 + -0x1.d1745d1745d170p-9, + -0x1.d1745d1745d17p-1, + -0x1.0p3 + }, + { // Entry 43 + -0x1.d1745d1745d170p-8, + -0x1.d1745d1745d17p-1, + -0x1.cp2 + }, + { // Entry 44 + -0x1.d1745d1745d170p-7, + -0x1.d1745d1745d17p-1, + -0x1.8p2 + }, + { // Entry 45 + -0x1.d1745d1745d170p-6, + -0x1.d1745d1745d17p-1, + -0x1.4p2 + }, + { // Entry 46 + -0x1.d1745d1745d170p-5, + -0x1.d1745d1745d17p-1, + -0x1.0p2 + }, + { // Entry 47 + -0x1.d1745d1745d170p-4, + -0x1.d1745d1745d17p-1, + -0x1.8p1 + }, + { // Entry 48 + -0x1.d1745d1745d170p-3, + -0x1.d1745d1745d17p-1, + -0x1.0p1 + }, + { // Entry 49 + -0x1.d1745d1745d170p-2, + -0x1.d1745d1745d17p-1, + -0x1.0p0 + }, + { // Entry 50 + -0x1.d1745d1745d170p-1, + -0x1.d1745d1745d17p-1, + 0.0 + }, + { // Entry 51 + -0x1.d1745d1745d170p0, + -0x1.d1745d1745d17p-1, + 0x1.0p0 + }, + { // Entry 52 + -0x1.d1745d1745d170p1, + -0x1.d1745d1745d17p-1, + 0x1.0p1 + }, + { // Entry 53 + -0x1.d1745d1745d170p2, + -0x1.d1745d1745d17p-1, + 0x1.8p1 + }, + { // Entry 54 + -0x1.d1745d1745d170p3, + -0x1.d1745d1745d17p-1, + 0x1.0p2 + }, + { // Entry 55 + -0x1.d1745d1745d170p4, + -0x1.d1745d1745d17p-1, + 0x1.4p2 + }, + { // Entry 56 + -0x1.d1745d1745d170p5, + -0x1.d1745d1745d17p-1, + 0x1.8p2 + }, + { // Entry 57 + -0x1.d1745d1745d170p6, + -0x1.d1745d1745d17p-1, + 0x1.cp2 + }, + { // Entry 58 + -0x1.d1745d1745d170p7, + -0x1.d1745d1745d17p-1, + 0x1.0p3 + }, + { // Entry 59 + -0x1.d1745d1745d170p8, + -0x1.d1745d1745d17p-1, + 0x1.2p3 + }, + { // Entry 60 + -0x1.d1745d1745d170p9, + -0x1.d1745d1745d17p-1, + 0x1.4p3 + }, + { // Entry 61 + -0x1.a2e8ba2e8ba2e0p-11, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.4p3 + }, + { // Entry 62 + -0x1.a2e8ba2e8ba2e0p-10, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.2p3 + }, + { // Entry 63 + -0x1.a2e8ba2e8ba2e0p-9, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.0p3 + }, + { // Entry 64 + -0x1.a2e8ba2e8ba2e0p-8, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.cp2 + }, + { // Entry 65 + -0x1.a2e8ba2e8ba2e0p-7, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.8p2 + }, + { // Entry 66 + -0x1.a2e8ba2e8ba2e0p-6, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.4p2 + }, + { // Entry 67 + -0x1.a2e8ba2e8ba2e0p-5, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.0p2 + }, + { // Entry 68 + -0x1.a2e8ba2e8ba2e0p-4, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.8p1 + }, + { // Entry 69 + -0x1.a2e8ba2e8ba2e0p-3, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.0p1 + }, + { // Entry 70 + -0x1.a2e8ba2e8ba2e0p-2, + -0x1.a2e8ba2e8ba2ep-1, + -0x1.0p0 + }, + { // Entry 71 + -0x1.a2e8ba2e8ba2e0p-1, + -0x1.a2e8ba2e8ba2ep-1, + 0.0 + }, + { // Entry 72 + -0x1.a2e8ba2e8ba2e0p0, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.0p0 + }, + { // Entry 73 + -0x1.a2e8ba2e8ba2e0p1, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.0p1 + }, + { // Entry 74 + -0x1.a2e8ba2e8ba2e0p2, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.8p1 + }, + { // Entry 75 + -0x1.a2e8ba2e8ba2e0p3, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.0p2 + }, + { // Entry 76 + -0x1.a2e8ba2e8ba2e0p4, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.4p2 + }, + { // Entry 77 + -0x1.a2e8ba2e8ba2e0p5, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.8p2 + }, + { // Entry 78 + -0x1.a2e8ba2e8ba2e0p6, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.cp2 + }, + { // Entry 79 + -0x1.a2e8ba2e8ba2e0p7, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.0p3 + }, + { // Entry 80 + -0x1.a2e8ba2e8ba2e0p8, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.2p3 + }, + { // Entry 81 + -0x1.a2e8ba2e8ba2e0p9, + -0x1.a2e8ba2e8ba2ep-1, + 0x1.4p3 + }, + { // Entry 82 + -0x1.745d1745d17450p-11, + -0x1.745d1745d1745p-1, + -0x1.4p3 + }, + { // Entry 83 + -0x1.745d1745d17450p-10, + -0x1.745d1745d1745p-1, + -0x1.2p3 + }, + { // Entry 84 + -0x1.745d1745d17450p-9, + -0x1.745d1745d1745p-1, + -0x1.0p3 + }, + { // Entry 85 + -0x1.745d1745d17450p-8, + -0x1.745d1745d1745p-1, + -0x1.cp2 + }, + { // Entry 86 + -0x1.745d1745d17450p-7, + -0x1.745d1745d1745p-1, + -0x1.8p2 + }, + { // Entry 87 + -0x1.745d1745d17450p-6, + -0x1.745d1745d1745p-1, + -0x1.4p2 + }, + { // Entry 88 + -0x1.745d1745d17450p-5, + -0x1.745d1745d1745p-1, + -0x1.0p2 + }, + { // Entry 89 + -0x1.745d1745d17450p-4, + -0x1.745d1745d1745p-1, + -0x1.8p1 + }, + { // Entry 90 + -0x1.745d1745d17450p-3, + -0x1.745d1745d1745p-1, + -0x1.0p1 + }, + { // Entry 91 + -0x1.745d1745d17450p-2, + -0x1.745d1745d1745p-1, + -0x1.0p0 + }, + { // Entry 92 + -0x1.745d1745d17450p-1, + -0x1.745d1745d1745p-1, + 0.0 + }, + { // Entry 93 + -0x1.745d1745d17450p0, + -0x1.745d1745d1745p-1, + 0x1.0p0 + }, + { // Entry 94 + -0x1.745d1745d17450p1, + -0x1.745d1745d1745p-1, + 0x1.0p1 + }, + { // Entry 95 + -0x1.745d1745d17450p2, + -0x1.745d1745d1745p-1, + 0x1.8p1 + }, + { // Entry 96 + -0x1.745d1745d17450p3, + -0x1.745d1745d1745p-1, + 0x1.0p2 + }, + { // Entry 97 + -0x1.745d1745d17450p4, + -0x1.745d1745d1745p-1, + 0x1.4p2 + }, + { // Entry 98 + -0x1.745d1745d17450p5, + -0x1.745d1745d1745p-1, + 0x1.8p2 + }, + { // Entry 99 + -0x1.745d1745d17450p6, + -0x1.745d1745d1745p-1, + 0x1.cp2 + }, + { // Entry 100 + -0x1.745d1745d17450p7, + -0x1.745d1745d1745p-1, + 0x1.0p3 + }, + { // Entry 101 + -0x1.745d1745d17450p8, + -0x1.745d1745d1745p-1, + 0x1.2p3 + }, + { // Entry 102 + -0x1.745d1745d17450p9, + -0x1.745d1745d1745p-1, + 0x1.4p3 + }, + { // Entry 103 + -0x1.45d1745d1745c0p-11, + -0x1.45d1745d1745cp-1, + -0x1.4p3 + }, + { // Entry 104 + -0x1.45d1745d1745c0p-10, + -0x1.45d1745d1745cp-1, + -0x1.2p3 + }, + { // Entry 105 + -0x1.45d1745d1745c0p-9, + -0x1.45d1745d1745cp-1, + -0x1.0p3 + }, + { // Entry 106 + -0x1.45d1745d1745c0p-8, + -0x1.45d1745d1745cp-1, + -0x1.cp2 + }, + { // Entry 107 + -0x1.45d1745d1745c0p-7, + -0x1.45d1745d1745cp-1, + -0x1.8p2 + }, + { // Entry 108 + -0x1.45d1745d1745c0p-6, + -0x1.45d1745d1745cp-1, + -0x1.4p2 + }, + { // Entry 109 + -0x1.45d1745d1745c0p-5, + -0x1.45d1745d1745cp-1, + -0x1.0p2 + }, + { // Entry 110 + -0x1.45d1745d1745c0p-4, + -0x1.45d1745d1745cp-1, + -0x1.8p1 + }, + { // Entry 111 + -0x1.45d1745d1745c0p-3, + -0x1.45d1745d1745cp-1, + -0x1.0p1 + }, + { // Entry 112 + -0x1.45d1745d1745c0p-2, + -0x1.45d1745d1745cp-1, + -0x1.0p0 + }, + { // Entry 113 + -0x1.45d1745d1745c0p-1, + -0x1.45d1745d1745cp-1, + 0.0 + }, + { // Entry 114 + -0x1.45d1745d1745c0p0, + -0x1.45d1745d1745cp-1, + 0x1.0p0 + }, + { // Entry 115 + -0x1.45d1745d1745c0p1, + -0x1.45d1745d1745cp-1, + 0x1.0p1 + }, + { // Entry 116 + -0x1.45d1745d1745c0p2, + -0x1.45d1745d1745cp-1, + 0x1.8p1 + }, + { // Entry 117 + -0x1.45d1745d1745c0p3, + -0x1.45d1745d1745cp-1, + 0x1.0p2 + }, + { // Entry 118 + -0x1.45d1745d1745c0p4, + -0x1.45d1745d1745cp-1, + 0x1.4p2 + }, + { // Entry 119 + -0x1.45d1745d1745c0p5, + -0x1.45d1745d1745cp-1, + 0x1.8p2 + }, + { // Entry 120 + -0x1.45d1745d1745c0p6, + -0x1.45d1745d1745cp-1, + 0x1.cp2 + }, + { // Entry 121 + -0x1.45d1745d1745c0p7, + -0x1.45d1745d1745cp-1, + 0x1.0p3 + }, + { // Entry 122 + -0x1.45d1745d1745c0p8, + -0x1.45d1745d1745cp-1, + 0x1.2p3 + }, + { // Entry 123 + -0x1.45d1745d1745c0p9, + -0x1.45d1745d1745cp-1, + 0x1.4p3 + }, + { // Entry 124 + -0x1.1745d1745d1730p-11, + -0x1.1745d1745d173p-1, + -0x1.4p3 + }, + { // Entry 125 + -0x1.1745d1745d1730p-10, + -0x1.1745d1745d173p-1, + -0x1.2p3 + }, + { // Entry 126 + -0x1.1745d1745d1730p-9, + -0x1.1745d1745d173p-1, + -0x1.0p3 + }, + { // Entry 127 + -0x1.1745d1745d1730p-8, + -0x1.1745d1745d173p-1, + -0x1.cp2 + }, + { // Entry 128 + -0x1.1745d1745d1730p-7, + -0x1.1745d1745d173p-1, + -0x1.8p2 + }, + { // Entry 129 + -0x1.1745d1745d1730p-6, + -0x1.1745d1745d173p-1, + -0x1.4p2 + }, + { // Entry 130 + -0x1.1745d1745d1730p-5, + -0x1.1745d1745d173p-1, + -0x1.0p2 + }, + { // Entry 131 + -0x1.1745d1745d1730p-4, + -0x1.1745d1745d173p-1, + -0x1.8p1 + }, + { // Entry 132 + -0x1.1745d1745d1730p-3, + -0x1.1745d1745d173p-1, + -0x1.0p1 + }, + { // Entry 133 + -0x1.1745d1745d1730p-2, + -0x1.1745d1745d173p-1, + -0x1.0p0 + }, + { // Entry 134 + -0x1.1745d1745d1730p-1, + -0x1.1745d1745d173p-1, + 0.0 + }, + { // Entry 135 + -0x1.1745d1745d1730p0, + -0x1.1745d1745d173p-1, + 0x1.0p0 + }, + { // Entry 136 + -0x1.1745d1745d1730p1, + -0x1.1745d1745d173p-1, + 0x1.0p1 + }, + { // Entry 137 + -0x1.1745d1745d1730p2, + -0x1.1745d1745d173p-1, + 0x1.8p1 + }, + { // Entry 138 + -0x1.1745d1745d1730p3, + -0x1.1745d1745d173p-1, + 0x1.0p2 + }, + { // Entry 139 + -0x1.1745d1745d1730p4, + -0x1.1745d1745d173p-1, + 0x1.4p2 + }, + { // Entry 140 + -0x1.1745d1745d1730p5, + -0x1.1745d1745d173p-1, + 0x1.8p2 + }, + { // Entry 141 + -0x1.1745d1745d1730p6, + -0x1.1745d1745d173p-1, + 0x1.cp2 + }, + { // Entry 142 + -0x1.1745d1745d1730p7, + -0x1.1745d1745d173p-1, + 0x1.0p3 + }, + { // Entry 143 + -0x1.1745d1745d1730p8, + -0x1.1745d1745d173p-1, + 0x1.2p3 + }, + { // Entry 144 + -0x1.1745d1745d1730p9, + -0x1.1745d1745d173p-1, + 0x1.4p3 + }, + { // Entry 145 + -0x1.d1745d1745d140p-12, + -0x1.d1745d1745d14p-2, + -0x1.4p3 + }, + { // Entry 146 + -0x1.d1745d1745d140p-11, + -0x1.d1745d1745d14p-2, + -0x1.2p3 + }, + { // Entry 147 + -0x1.d1745d1745d140p-10, + -0x1.d1745d1745d14p-2, + -0x1.0p3 + }, + { // Entry 148 + -0x1.d1745d1745d140p-9, + -0x1.d1745d1745d14p-2, + -0x1.cp2 + }, + { // Entry 149 + -0x1.d1745d1745d140p-8, + -0x1.d1745d1745d14p-2, + -0x1.8p2 + }, + { // Entry 150 + -0x1.d1745d1745d140p-7, + -0x1.d1745d1745d14p-2, + -0x1.4p2 + }, + { // Entry 151 + -0x1.d1745d1745d140p-6, + -0x1.d1745d1745d14p-2, + -0x1.0p2 + }, + { // Entry 152 + -0x1.d1745d1745d140p-5, + -0x1.d1745d1745d14p-2, + -0x1.8p1 + }, + { // Entry 153 + -0x1.d1745d1745d140p-4, + -0x1.d1745d1745d14p-2, + -0x1.0p1 + }, + { // Entry 154 + -0x1.d1745d1745d140p-3, + -0x1.d1745d1745d14p-2, + -0x1.0p0 + }, + { // Entry 155 + -0x1.d1745d1745d140p-2, + -0x1.d1745d1745d14p-2, + 0.0 + }, + { // Entry 156 + -0x1.d1745d1745d140p-1, + -0x1.d1745d1745d14p-2, + 0x1.0p0 + }, + { // Entry 157 + -0x1.d1745d1745d140p0, + -0x1.d1745d1745d14p-2, + 0x1.0p1 + }, + { // Entry 158 + -0x1.d1745d1745d140p1, + -0x1.d1745d1745d14p-2, + 0x1.8p1 + }, + { // Entry 159 + -0x1.d1745d1745d140p2, + -0x1.d1745d1745d14p-2, + 0x1.0p2 + }, + { // Entry 160 + -0x1.d1745d1745d140p3, + -0x1.d1745d1745d14p-2, + 0x1.4p2 + }, + { // Entry 161 + -0x1.d1745d1745d140p4, + -0x1.d1745d1745d14p-2, + 0x1.8p2 + }, + { // Entry 162 + -0x1.d1745d1745d140p5, + -0x1.d1745d1745d14p-2, + 0x1.cp2 + }, + { // Entry 163 + -0x1.d1745d1745d140p6, + -0x1.d1745d1745d14p-2, + 0x1.0p3 + }, + { // Entry 164 + -0x1.d1745d1745d140p7, + -0x1.d1745d1745d14p-2, + 0x1.2p3 + }, + { // Entry 165 + -0x1.d1745d1745d140p8, + -0x1.d1745d1745d14p-2, + 0x1.4p3 + }, + { // Entry 166 + -0x1.745d1745d17420p-12, + -0x1.745d1745d1742p-2, + -0x1.4p3 + }, + { // Entry 167 + -0x1.745d1745d17420p-11, + -0x1.745d1745d1742p-2, + -0x1.2p3 + }, + { // Entry 168 + -0x1.745d1745d17420p-10, + -0x1.745d1745d1742p-2, + -0x1.0p3 + }, + { // Entry 169 + -0x1.745d1745d17420p-9, + -0x1.745d1745d1742p-2, + -0x1.cp2 + }, + { // Entry 170 + -0x1.745d1745d17420p-8, + -0x1.745d1745d1742p-2, + -0x1.8p2 + }, + { // Entry 171 + -0x1.745d1745d17420p-7, + -0x1.745d1745d1742p-2, + -0x1.4p2 + }, + { // Entry 172 + -0x1.745d1745d17420p-6, + -0x1.745d1745d1742p-2, + -0x1.0p2 + }, + { // Entry 173 + -0x1.745d1745d17420p-5, + -0x1.745d1745d1742p-2, + -0x1.8p1 + }, + { // Entry 174 + -0x1.745d1745d17420p-4, + -0x1.745d1745d1742p-2, + -0x1.0p1 + }, + { // Entry 175 + -0x1.745d1745d17420p-3, + -0x1.745d1745d1742p-2, + -0x1.0p0 + }, + { // Entry 176 + -0x1.745d1745d17420p-2, + -0x1.745d1745d1742p-2, + 0.0 + }, + { // Entry 177 + -0x1.745d1745d17420p-1, + -0x1.745d1745d1742p-2, + 0x1.0p0 + }, + { // Entry 178 + -0x1.745d1745d17420p0, + -0x1.745d1745d1742p-2, + 0x1.0p1 + }, + { // Entry 179 + -0x1.745d1745d17420p1, + -0x1.745d1745d1742p-2, + 0x1.8p1 + }, + { // Entry 180 + -0x1.745d1745d17420p2, + -0x1.745d1745d1742p-2, + 0x1.0p2 + }, + { // Entry 181 + -0x1.745d1745d17420p3, + -0x1.745d1745d1742p-2, + 0x1.4p2 + }, + { // Entry 182 + -0x1.745d1745d17420p4, + -0x1.745d1745d1742p-2, + 0x1.8p2 + }, + { // Entry 183 + -0x1.745d1745d17420p5, + -0x1.745d1745d1742p-2, + 0x1.cp2 + }, + { // Entry 184 + -0x1.745d1745d17420p6, + -0x1.745d1745d1742p-2, + 0x1.0p3 + }, + { // Entry 185 + -0x1.745d1745d17420p7, + -0x1.745d1745d1742p-2, + 0x1.2p3 + }, + { // Entry 186 + -0x1.745d1745d17420p8, + -0x1.745d1745d1742p-2, + 0x1.4p3 + }, + { // Entry 187 + -0x1.1745d1745d17p-12, + -0x1.1745d1745d170p-2, + -0x1.4p3 + }, + { // Entry 188 + -0x1.1745d1745d17p-11, + -0x1.1745d1745d170p-2, + -0x1.2p3 + }, + { // Entry 189 + -0x1.1745d1745d17p-10, + -0x1.1745d1745d170p-2, + -0x1.0p3 + }, + { // Entry 190 + -0x1.1745d1745d17p-9, + -0x1.1745d1745d170p-2, + -0x1.cp2 + }, + { // Entry 191 + -0x1.1745d1745d17p-8, + -0x1.1745d1745d170p-2, + -0x1.8p2 + }, + { // Entry 192 + -0x1.1745d1745d17p-7, + -0x1.1745d1745d170p-2, + -0x1.4p2 + }, + { // Entry 193 + -0x1.1745d1745d17p-6, + -0x1.1745d1745d170p-2, + -0x1.0p2 + }, + { // Entry 194 + -0x1.1745d1745d17p-5, + -0x1.1745d1745d170p-2, + -0x1.8p1 + }, + { // Entry 195 + -0x1.1745d1745d17p-4, + -0x1.1745d1745d170p-2, + -0x1.0p1 + }, + { // Entry 196 + -0x1.1745d1745d17p-3, + -0x1.1745d1745d170p-2, + -0x1.0p0 + }, + { // Entry 197 + -0x1.1745d1745d17p-2, + -0x1.1745d1745d170p-2, + 0.0 + }, + { // Entry 198 + -0x1.1745d1745d17p-1, + -0x1.1745d1745d170p-2, + 0x1.0p0 + }, + { // Entry 199 + -0x1.1745d1745d17p0, + -0x1.1745d1745d170p-2, + 0x1.0p1 + }, + { // Entry 200 + -0x1.1745d1745d17p1, + -0x1.1745d1745d170p-2, + 0x1.8p1 + }, + { // Entry 201 + -0x1.1745d1745d17p2, + -0x1.1745d1745d170p-2, + 0x1.0p2 + }, + { // Entry 202 + -0x1.1745d1745d17p3, + -0x1.1745d1745d170p-2, + 0x1.4p2 + }, + { // Entry 203 + -0x1.1745d1745d17p4, + -0x1.1745d1745d170p-2, + 0x1.8p2 + }, + { // Entry 204 + -0x1.1745d1745d17p5, + -0x1.1745d1745d170p-2, + 0x1.cp2 + }, + { // Entry 205 + -0x1.1745d1745d17p6, + -0x1.1745d1745d170p-2, + 0x1.0p3 + }, + { // Entry 206 + -0x1.1745d1745d17p7, + -0x1.1745d1745d170p-2, + 0x1.2p3 + }, + { // Entry 207 + -0x1.1745d1745d17p8, + -0x1.1745d1745d170p-2, + 0x1.4p3 + }, + { // Entry 208 + -0x1.745d1745d173d0p-13, + -0x1.745d1745d173dp-3, + -0x1.4p3 + }, + { // Entry 209 + -0x1.745d1745d173d0p-12, + -0x1.745d1745d173dp-3, + -0x1.2p3 + }, + { // Entry 210 + -0x1.745d1745d173d0p-11, + -0x1.745d1745d173dp-3, + -0x1.0p3 + }, + { // Entry 211 + -0x1.745d1745d173d0p-10, + -0x1.745d1745d173dp-3, + -0x1.cp2 + }, + { // Entry 212 + -0x1.745d1745d173d0p-9, + -0x1.745d1745d173dp-3, + -0x1.8p2 + }, + { // Entry 213 + -0x1.745d1745d173d0p-8, + -0x1.745d1745d173dp-3, + -0x1.4p2 + }, + { // Entry 214 + -0x1.745d1745d173d0p-7, + -0x1.745d1745d173dp-3, + -0x1.0p2 + }, + { // Entry 215 + -0x1.745d1745d173d0p-6, + -0x1.745d1745d173dp-3, + -0x1.8p1 + }, + { // Entry 216 + -0x1.745d1745d173d0p-5, + -0x1.745d1745d173dp-3, + -0x1.0p1 + }, + { // Entry 217 + -0x1.745d1745d173d0p-4, + -0x1.745d1745d173dp-3, + -0x1.0p0 + }, + { // Entry 218 + -0x1.745d1745d173d0p-3, + -0x1.745d1745d173dp-3, + 0.0 + }, + { // Entry 219 + -0x1.745d1745d173d0p-2, + -0x1.745d1745d173dp-3, + 0x1.0p0 + }, + { // Entry 220 + -0x1.745d1745d173d0p-1, + -0x1.745d1745d173dp-3, + 0x1.0p1 + }, + { // Entry 221 + -0x1.745d1745d173d0p0, + -0x1.745d1745d173dp-3, + 0x1.8p1 + }, + { // Entry 222 + -0x1.745d1745d173d0p1, + -0x1.745d1745d173dp-3, + 0x1.0p2 + }, + { // Entry 223 + -0x1.745d1745d173d0p2, + -0x1.745d1745d173dp-3, + 0x1.4p2 + }, + { // Entry 224 + -0x1.745d1745d173d0p3, + -0x1.745d1745d173dp-3, + 0x1.8p2 + }, + { // Entry 225 + -0x1.745d1745d173d0p4, + -0x1.745d1745d173dp-3, + 0x1.cp2 + }, + { // Entry 226 + -0x1.745d1745d173d0p5, + -0x1.745d1745d173dp-3, + 0x1.0p3 + }, + { // Entry 227 + -0x1.745d1745d173d0p6, + -0x1.745d1745d173dp-3, + 0x1.2p3 + }, + { // Entry 228 + -0x1.745d1745d173d0p7, + -0x1.745d1745d173dp-3, + 0x1.4p3 + }, + { // Entry 229 + -0x1.745d1745d17340p-14, + -0x1.745d1745d1734p-4, + -0x1.4p3 + }, + { // Entry 230 + -0x1.745d1745d17340p-13, + -0x1.745d1745d1734p-4, + -0x1.2p3 + }, + { // Entry 231 + -0x1.745d1745d17340p-12, + -0x1.745d1745d1734p-4, + -0x1.0p3 + }, + { // Entry 232 + -0x1.745d1745d17340p-11, + -0x1.745d1745d1734p-4, + -0x1.cp2 + }, + { // Entry 233 + -0x1.745d1745d17340p-10, + -0x1.745d1745d1734p-4, + -0x1.8p2 + }, + { // Entry 234 + -0x1.745d1745d17340p-9, + -0x1.745d1745d1734p-4, + -0x1.4p2 + }, + { // Entry 235 + -0x1.745d1745d17340p-8, + -0x1.745d1745d1734p-4, + -0x1.0p2 + }, + { // Entry 236 + -0x1.745d1745d17340p-7, + -0x1.745d1745d1734p-4, + -0x1.8p1 + }, + { // Entry 237 + -0x1.745d1745d17340p-6, + -0x1.745d1745d1734p-4, + -0x1.0p1 + }, + { // Entry 238 + -0x1.745d1745d17340p-5, + -0x1.745d1745d1734p-4, + -0x1.0p0 + }, + { // Entry 239 + -0x1.745d1745d17340p-4, + -0x1.745d1745d1734p-4, + 0.0 + }, + { // Entry 240 + -0x1.745d1745d17340p-3, + -0x1.745d1745d1734p-4, + 0x1.0p0 + }, + { // Entry 241 + -0x1.745d1745d17340p-2, + -0x1.745d1745d1734p-4, + 0x1.0p1 + }, + { // Entry 242 + -0x1.745d1745d17340p-1, + -0x1.745d1745d1734p-4, + 0x1.8p1 + }, + { // Entry 243 + -0x1.745d1745d17340p0, + -0x1.745d1745d1734p-4, + 0x1.0p2 + }, + { // Entry 244 + -0x1.745d1745d17340p1, + -0x1.745d1745d1734p-4, + 0x1.4p2 + }, + { // Entry 245 + -0x1.745d1745d17340p2, + -0x1.745d1745d1734p-4, + 0x1.8p2 + }, + { // Entry 246 + -0x1.745d1745d17340p3, + -0x1.745d1745d1734p-4, + 0x1.cp2 + }, + { // Entry 247 + -0x1.745d1745d17340p4, + -0x1.745d1745d1734p-4, + 0x1.0p3 + }, + { // Entry 248 + -0x1.745d1745d17340p5, + -0x1.745d1745d1734p-4, + 0x1.2p3 + }, + { // Entry 249 + -0x1.745d1745d17340p6, + -0x1.745d1745d1734p-4, + 0x1.4p3 + }, + { // Entry 250 + 0x1.20p-62, + 0x1.2p-52, + -0x1.4p3 + }, + { // Entry 251 + 0x1.20p-61, + 0x1.2p-52, + -0x1.2p3 + }, + { // Entry 252 + 0x1.20p-60, + 0x1.2p-52, + -0x1.0p3 + }, + { // Entry 253 + 0x1.20p-59, + 0x1.2p-52, + -0x1.cp2 + }, + { // Entry 254 + 0x1.20p-58, + 0x1.2p-52, + -0x1.8p2 + }, + { // Entry 255 + 0x1.20p-57, + 0x1.2p-52, + -0x1.4p2 + }, + { // Entry 256 + 0x1.20p-56, + 0x1.2p-52, + -0x1.0p2 + }, + { // Entry 257 + 0x1.20p-55, + 0x1.2p-52, + -0x1.8p1 + }, + { // Entry 258 + 0x1.20p-54, + 0x1.2p-52, + -0x1.0p1 + }, + { // Entry 259 + 0x1.20p-53, + 0x1.2p-52, + -0x1.0p0 + }, + { // Entry 260 + 0x1.20p-52, + 0x1.2p-52, + 0.0 + }, + { // Entry 261 + 0x1.20p-51, + 0x1.2p-52, + 0x1.0p0 + }, + { // Entry 262 + 0x1.20p-50, + 0x1.2p-52, + 0x1.0p1 + }, + { // Entry 263 + 0x1.20p-49, + 0x1.2p-52, + 0x1.8p1 + }, + { // Entry 264 + 0x1.20p-48, + 0x1.2p-52, + 0x1.0p2 + }, + { // Entry 265 + 0x1.20p-47, + 0x1.2p-52, + 0x1.4p2 + }, + { // Entry 266 + 0x1.20p-46, + 0x1.2p-52, + 0x1.8p2 + }, + { // Entry 267 + 0x1.20p-45, + 0x1.2p-52, + 0x1.cp2 + }, + { // Entry 268 + 0x1.20p-44, + 0x1.2p-52, + 0x1.0p3 + }, + { // Entry 269 + 0x1.20p-43, + 0x1.2p-52, + 0x1.2p3 + }, + { // Entry 270 + 0x1.20p-42, + 0x1.2p-52, + 0x1.4p3 + }, + { // Entry 271 + 0x1.745d1745d17580p-14, + 0x1.745d1745d1758p-4, + -0x1.4p3 + }, + { // Entry 272 + 0x1.745d1745d17580p-13, + 0x1.745d1745d1758p-4, + -0x1.2p3 + }, + { // Entry 273 + 0x1.745d1745d17580p-12, + 0x1.745d1745d1758p-4, + -0x1.0p3 + }, + { // Entry 274 + 0x1.745d1745d17580p-11, + 0x1.745d1745d1758p-4, + -0x1.cp2 + }, + { // Entry 275 + 0x1.745d1745d17580p-10, + 0x1.745d1745d1758p-4, + -0x1.8p2 + }, + { // Entry 276 + 0x1.745d1745d17580p-9, + 0x1.745d1745d1758p-4, + -0x1.4p2 + }, + { // Entry 277 + 0x1.745d1745d17580p-8, + 0x1.745d1745d1758p-4, + -0x1.0p2 + }, + { // Entry 278 + 0x1.745d1745d17580p-7, + 0x1.745d1745d1758p-4, + -0x1.8p1 + }, + { // Entry 279 + 0x1.745d1745d17580p-6, + 0x1.745d1745d1758p-4, + -0x1.0p1 + }, + { // Entry 280 + 0x1.745d1745d17580p-5, + 0x1.745d1745d1758p-4, + -0x1.0p0 + }, + { // Entry 281 + 0x1.745d1745d17580p-4, + 0x1.745d1745d1758p-4, + 0.0 + }, + { // Entry 282 + 0x1.745d1745d17580p-3, + 0x1.745d1745d1758p-4, + 0x1.0p0 + }, + { // Entry 283 + 0x1.745d1745d17580p-2, + 0x1.745d1745d1758p-4, + 0x1.0p1 + }, + { // Entry 284 + 0x1.745d1745d17580p-1, + 0x1.745d1745d1758p-4, + 0x1.8p1 + }, + { // Entry 285 + 0x1.745d1745d17580p0, + 0x1.745d1745d1758p-4, + 0x1.0p2 + }, + { // Entry 286 + 0x1.745d1745d17580p1, + 0x1.745d1745d1758p-4, + 0x1.4p2 + }, + { // Entry 287 + 0x1.745d1745d17580p2, + 0x1.745d1745d1758p-4, + 0x1.8p2 + }, + { // Entry 288 + 0x1.745d1745d17580p3, + 0x1.745d1745d1758p-4, + 0x1.cp2 + }, + { // Entry 289 + 0x1.745d1745d17580p4, + 0x1.745d1745d1758p-4, + 0x1.0p3 + }, + { // Entry 290 + 0x1.745d1745d17580p5, + 0x1.745d1745d1758p-4, + 0x1.2p3 + }, + { // Entry 291 + 0x1.745d1745d17580p6, + 0x1.745d1745d1758p-4, + 0x1.4p3 + }, + { // Entry 292 + 0x1.745d1745d174f0p-13, + 0x1.745d1745d174fp-3, + -0x1.4p3 + }, + { // Entry 293 + 0x1.745d1745d174f0p-12, + 0x1.745d1745d174fp-3, + -0x1.2p3 + }, + { // Entry 294 + 0x1.745d1745d174f0p-11, + 0x1.745d1745d174fp-3, + -0x1.0p3 + }, + { // Entry 295 + 0x1.745d1745d174f0p-10, + 0x1.745d1745d174fp-3, + -0x1.cp2 + }, + { // Entry 296 + 0x1.745d1745d174f0p-9, + 0x1.745d1745d174fp-3, + -0x1.8p2 + }, + { // Entry 297 + 0x1.745d1745d174f0p-8, + 0x1.745d1745d174fp-3, + -0x1.4p2 + }, + { // Entry 298 + 0x1.745d1745d174f0p-7, + 0x1.745d1745d174fp-3, + -0x1.0p2 + }, + { // Entry 299 + 0x1.745d1745d174f0p-6, + 0x1.745d1745d174fp-3, + -0x1.8p1 + }, + { // Entry 300 + 0x1.745d1745d174f0p-5, + 0x1.745d1745d174fp-3, + -0x1.0p1 + }, + { // Entry 301 + 0x1.745d1745d174f0p-4, + 0x1.745d1745d174fp-3, + -0x1.0p0 + }, + { // Entry 302 + 0x1.745d1745d174f0p-3, + 0x1.745d1745d174fp-3, + 0.0 + }, + { // Entry 303 + 0x1.745d1745d174f0p-2, + 0x1.745d1745d174fp-3, + 0x1.0p0 + }, + { // Entry 304 + 0x1.745d1745d174f0p-1, + 0x1.745d1745d174fp-3, + 0x1.0p1 + }, + { // Entry 305 + 0x1.745d1745d174f0p0, + 0x1.745d1745d174fp-3, + 0x1.8p1 + }, + { // Entry 306 + 0x1.745d1745d174f0p1, + 0x1.745d1745d174fp-3, + 0x1.0p2 + }, + { // Entry 307 + 0x1.745d1745d174f0p2, + 0x1.745d1745d174fp-3, + 0x1.4p2 + }, + { // Entry 308 + 0x1.745d1745d174f0p3, + 0x1.745d1745d174fp-3, + 0x1.8p2 + }, + { // Entry 309 + 0x1.745d1745d174f0p4, + 0x1.745d1745d174fp-3, + 0x1.cp2 + }, + { // Entry 310 + 0x1.745d1745d174f0p5, + 0x1.745d1745d174fp-3, + 0x1.0p3 + }, + { // Entry 311 + 0x1.745d1745d174f0p6, + 0x1.745d1745d174fp-3, + 0x1.2p3 + }, + { // Entry 312 + 0x1.745d1745d174f0p7, + 0x1.745d1745d174fp-3, + 0x1.4p3 + }, + { // Entry 313 + 0x1.1745d1745d1790p-12, + 0x1.1745d1745d179p-2, + -0x1.4p3 + }, + { // Entry 314 + 0x1.1745d1745d1790p-11, + 0x1.1745d1745d179p-2, + -0x1.2p3 + }, + { // Entry 315 + 0x1.1745d1745d1790p-10, + 0x1.1745d1745d179p-2, + -0x1.0p3 + }, + { // Entry 316 + 0x1.1745d1745d1790p-9, + 0x1.1745d1745d179p-2, + -0x1.cp2 + }, + { // Entry 317 + 0x1.1745d1745d1790p-8, + 0x1.1745d1745d179p-2, + -0x1.8p2 + }, + { // Entry 318 + 0x1.1745d1745d1790p-7, + 0x1.1745d1745d179p-2, + -0x1.4p2 + }, + { // Entry 319 + 0x1.1745d1745d1790p-6, + 0x1.1745d1745d179p-2, + -0x1.0p2 + }, + { // Entry 320 + 0x1.1745d1745d1790p-5, + 0x1.1745d1745d179p-2, + -0x1.8p1 + }, + { // Entry 321 + 0x1.1745d1745d1790p-4, + 0x1.1745d1745d179p-2, + -0x1.0p1 + }, + { // Entry 322 + 0x1.1745d1745d1790p-3, + 0x1.1745d1745d179p-2, + -0x1.0p0 + }, + { // Entry 323 + 0x1.1745d1745d1790p-2, + 0x1.1745d1745d179p-2, + 0.0 + }, + { // Entry 324 + 0x1.1745d1745d1790p-1, + 0x1.1745d1745d179p-2, + 0x1.0p0 + }, + { // Entry 325 + 0x1.1745d1745d1790p0, + 0x1.1745d1745d179p-2, + 0x1.0p1 + }, + { // Entry 326 + 0x1.1745d1745d1790p1, + 0x1.1745d1745d179p-2, + 0x1.8p1 + }, + { // Entry 327 + 0x1.1745d1745d1790p2, + 0x1.1745d1745d179p-2, + 0x1.0p2 + }, + { // Entry 328 + 0x1.1745d1745d1790p3, + 0x1.1745d1745d179p-2, + 0x1.4p2 + }, + { // Entry 329 + 0x1.1745d1745d1790p4, + 0x1.1745d1745d179p-2, + 0x1.8p2 + }, + { // Entry 330 + 0x1.1745d1745d1790p5, + 0x1.1745d1745d179p-2, + 0x1.cp2 + }, + { // Entry 331 + 0x1.1745d1745d1790p6, + 0x1.1745d1745d179p-2, + 0x1.0p3 + }, + { // Entry 332 + 0x1.1745d1745d1790p7, + 0x1.1745d1745d179p-2, + 0x1.2p3 + }, + { // Entry 333 + 0x1.1745d1745d1790p8, + 0x1.1745d1745d179p-2, + 0x1.4p3 + }, + { // Entry 334 + 0x1.745d1745d174a0p-12, + 0x1.745d1745d174ap-2, + -0x1.4p3 + }, + { // Entry 335 + 0x1.745d1745d174a0p-11, + 0x1.745d1745d174ap-2, + -0x1.2p3 + }, + { // Entry 336 + 0x1.745d1745d174a0p-10, + 0x1.745d1745d174ap-2, + -0x1.0p3 + }, + { // Entry 337 + 0x1.745d1745d174a0p-9, + 0x1.745d1745d174ap-2, + -0x1.cp2 + }, + { // Entry 338 + 0x1.745d1745d174a0p-8, + 0x1.745d1745d174ap-2, + -0x1.8p2 + }, + { // Entry 339 + 0x1.745d1745d174a0p-7, + 0x1.745d1745d174ap-2, + -0x1.4p2 + }, + { // Entry 340 + 0x1.745d1745d174a0p-6, + 0x1.745d1745d174ap-2, + -0x1.0p2 + }, + { // Entry 341 + 0x1.745d1745d174a0p-5, + 0x1.745d1745d174ap-2, + -0x1.8p1 + }, + { // Entry 342 + 0x1.745d1745d174a0p-4, + 0x1.745d1745d174ap-2, + -0x1.0p1 + }, + { // Entry 343 + 0x1.745d1745d174a0p-3, + 0x1.745d1745d174ap-2, + -0x1.0p0 + }, + { // Entry 344 + 0x1.745d1745d174a0p-2, + 0x1.745d1745d174ap-2, + 0.0 + }, + { // Entry 345 + 0x1.745d1745d174a0p-1, + 0x1.745d1745d174ap-2, + 0x1.0p0 + }, + { // Entry 346 + 0x1.745d1745d174a0p0, + 0x1.745d1745d174ap-2, + 0x1.0p1 + }, + { // Entry 347 + 0x1.745d1745d174a0p1, + 0x1.745d1745d174ap-2, + 0x1.8p1 + }, + { // Entry 348 + 0x1.745d1745d174a0p2, + 0x1.745d1745d174ap-2, + 0x1.0p2 + }, + { // Entry 349 + 0x1.745d1745d174a0p3, + 0x1.745d1745d174ap-2, + 0x1.4p2 + }, + { // Entry 350 + 0x1.745d1745d174a0p4, + 0x1.745d1745d174ap-2, + 0x1.8p2 + }, + { // Entry 351 + 0x1.745d1745d174a0p5, + 0x1.745d1745d174ap-2, + 0x1.cp2 + }, + { // Entry 352 + 0x1.745d1745d174a0p6, + 0x1.745d1745d174ap-2, + 0x1.0p3 + }, + { // Entry 353 + 0x1.745d1745d174a0p7, + 0x1.745d1745d174ap-2, + 0x1.2p3 + }, + { // Entry 354 + 0x1.745d1745d174a0p8, + 0x1.745d1745d174ap-2, + 0x1.4p3 + }, + { // Entry 355 + 0x1.d1745d1745d1c0p-12, + 0x1.d1745d1745d1cp-2, + -0x1.4p3 + }, + { // Entry 356 + 0x1.d1745d1745d1c0p-11, + 0x1.d1745d1745d1cp-2, + -0x1.2p3 + }, + { // Entry 357 + 0x1.d1745d1745d1c0p-10, + 0x1.d1745d1745d1cp-2, + -0x1.0p3 + }, + { // Entry 358 + 0x1.d1745d1745d1c0p-9, + 0x1.d1745d1745d1cp-2, + -0x1.cp2 + }, + { // Entry 359 + 0x1.d1745d1745d1c0p-8, + 0x1.d1745d1745d1cp-2, + -0x1.8p2 + }, + { // Entry 360 + 0x1.d1745d1745d1c0p-7, + 0x1.d1745d1745d1cp-2, + -0x1.4p2 + }, + { // Entry 361 + 0x1.d1745d1745d1c0p-6, + 0x1.d1745d1745d1cp-2, + -0x1.0p2 + }, + { // Entry 362 + 0x1.d1745d1745d1c0p-5, + 0x1.d1745d1745d1cp-2, + -0x1.8p1 + }, + { // Entry 363 + 0x1.d1745d1745d1c0p-4, + 0x1.d1745d1745d1cp-2, + -0x1.0p1 + }, + { // Entry 364 + 0x1.d1745d1745d1c0p-3, + 0x1.d1745d1745d1cp-2, + -0x1.0p0 + }, + { // Entry 365 + 0x1.d1745d1745d1c0p-2, + 0x1.d1745d1745d1cp-2, + 0.0 + }, + { // Entry 366 + 0x1.d1745d1745d1c0p-1, + 0x1.d1745d1745d1cp-2, + 0x1.0p0 + }, + { // Entry 367 + 0x1.d1745d1745d1c0p0, + 0x1.d1745d1745d1cp-2, + 0x1.0p1 + }, + { // Entry 368 + 0x1.d1745d1745d1c0p1, + 0x1.d1745d1745d1cp-2, + 0x1.8p1 + }, + { // Entry 369 + 0x1.d1745d1745d1c0p2, + 0x1.d1745d1745d1cp-2, + 0x1.0p2 + }, + { // Entry 370 + 0x1.d1745d1745d1c0p3, + 0x1.d1745d1745d1cp-2, + 0x1.4p2 + }, + { // Entry 371 + 0x1.d1745d1745d1c0p4, + 0x1.d1745d1745d1cp-2, + 0x1.8p2 + }, + { // Entry 372 + 0x1.d1745d1745d1c0p5, + 0x1.d1745d1745d1cp-2, + 0x1.cp2 + }, + { // Entry 373 + 0x1.d1745d1745d1c0p6, + 0x1.d1745d1745d1cp-2, + 0x1.0p3 + }, + { // Entry 374 + 0x1.d1745d1745d1c0p7, + 0x1.d1745d1745d1cp-2, + 0x1.2p3 + }, + { // Entry 375 + 0x1.d1745d1745d1c0p8, + 0x1.d1745d1745d1cp-2, + 0x1.4p3 + }, + { // Entry 376 + 0x1.1745d1745d1770p-11, + 0x1.1745d1745d177p-1, + -0x1.4p3 + }, + { // Entry 377 + 0x1.1745d1745d1770p-10, + 0x1.1745d1745d177p-1, + -0x1.2p3 + }, + { // Entry 378 + 0x1.1745d1745d1770p-9, + 0x1.1745d1745d177p-1, + -0x1.0p3 + }, + { // Entry 379 + 0x1.1745d1745d1770p-8, + 0x1.1745d1745d177p-1, + -0x1.cp2 + }, + { // Entry 380 + 0x1.1745d1745d1770p-7, + 0x1.1745d1745d177p-1, + -0x1.8p2 + }, + { // Entry 381 + 0x1.1745d1745d1770p-6, + 0x1.1745d1745d177p-1, + -0x1.4p2 + }, + { // Entry 382 + 0x1.1745d1745d1770p-5, + 0x1.1745d1745d177p-1, + -0x1.0p2 + }, + { // Entry 383 + 0x1.1745d1745d1770p-4, + 0x1.1745d1745d177p-1, + -0x1.8p1 + }, + { // Entry 384 + 0x1.1745d1745d1770p-3, + 0x1.1745d1745d177p-1, + -0x1.0p1 + }, + { // Entry 385 + 0x1.1745d1745d1770p-2, + 0x1.1745d1745d177p-1, + -0x1.0p0 + }, + { // Entry 386 + 0x1.1745d1745d1770p-1, + 0x1.1745d1745d177p-1, + 0.0 + }, + { // Entry 387 + 0x1.1745d1745d1770p0, + 0x1.1745d1745d177p-1, + 0x1.0p0 + }, + { // Entry 388 + 0x1.1745d1745d1770p1, + 0x1.1745d1745d177p-1, + 0x1.0p1 + }, + { // Entry 389 + 0x1.1745d1745d1770p2, + 0x1.1745d1745d177p-1, + 0x1.8p1 + }, + { // Entry 390 + 0x1.1745d1745d1770p3, + 0x1.1745d1745d177p-1, + 0x1.0p2 + }, + { // Entry 391 + 0x1.1745d1745d1770p4, + 0x1.1745d1745d177p-1, + 0x1.4p2 + }, + { // Entry 392 + 0x1.1745d1745d1770p5, + 0x1.1745d1745d177p-1, + 0x1.8p2 + }, + { // Entry 393 + 0x1.1745d1745d1770p6, + 0x1.1745d1745d177p-1, + 0x1.cp2 + }, + { // Entry 394 + 0x1.1745d1745d1770p7, + 0x1.1745d1745d177p-1, + 0x1.0p3 + }, + { // Entry 395 + 0x1.1745d1745d1770p8, + 0x1.1745d1745d177p-1, + 0x1.2p3 + }, + { // Entry 396 + 0x1.1745d1745d1770p9, + 0x1.1745d1745d177p-1, + 0x1.4p3 + }, + { // Entry 397 + 0x1.45d1745d1746p-11, + 0x1.45d1745d17460p-1, + -0x1.4p3 + }, + { // Entry 398 + 0x1.45d1745d1746p-10, + 0x1.45d1745d17460p-1, + -0x1.2p3 + }, + { // Entry 399 + 0x1.45d1745d1746p-9, + 0x1.45d1745d17460p-1, + -0x1.0p3 + }, + { // Entry 400 + 0x1.45d1745d1746p-8, + 0x1.45d1745d17460p-1, + -0x1.cp2 + }, + { // Entry 401 + 0x1.45d1745d1746p-7, + 0x1.45d1745d17460p-1, + -0x1.8p2 + }, + { // Entry 402 + 0x1.45d1745d1746p-6, + 0x1.45d1745d17460p-1, + -0x1.4p2 + }, + { // Entry 403 + 0x1.45d1745d1746p-5, + 0x1.45d1745d17460p-1, + -0x1.0p2 + }, + { // Entry 404 + 0x1.45d1745d1746p-4, + 0x1.45d1745d17460p-1, + -0x1.8p1 + }, + { // Entry 405 + 0x1.45d1745d1746p-3, + 0x1.45d1745d17460p-1, + -0x1.0p1 + }, + { // Entry 406 + 0x1.45d1745d1746p-2, + 0x1.45d1745d17460p-1, + -0x1.0p0 + }, + { // Entry 407 + 0x1.45d1745d1746p-1, + 0x1.45d1745d17460p-1, + 0.0 + }, + { // Entry 408 + 0x1.45d1745d1746p0, + 0x1.45d1745d17460p-1, + 0x1.0p0 + }, + { // Entry 409 + 0x1.45d1745d1746p1, + 0x1.45d1745d17460p-1, + 0x1.0p1 + }, + { // Entry 410 + 0x1.45d1745d1746p2, + 0x1.45d1745d17460p-1, + 0x1.8p1 + }, + { // Entry 411 + 0x1.45d1745d1746p3, + 0x1.45d1745d17460p-1, + 0x1.0p2 + }, + { // Entry 412 + 0x1.45d1745d1746p4, + 0x1.45d1745d17460p-1, + 0x1.4p2 + }, + { // Entry 413 + 0x1.45d1745d1746p5, + 0x1.45d1745d17460p-1, + 0x1.8p2 + }, + { // Entry 414 + 0x1.45d1745d1746p6, + 0x1.45d1745d17460p-1, + 0x1.cp2 + }, + { // Entry 415 + 0x1.45d1745d1746p7, + 0x1.45d1745d17460p-1, + 0x1.0p3 + }, + { // Entry 416 + 0x1.45d1745d1746p8, + 0x1.45d1745d17460p-1, + 0x1.2p3 + }, + { // Entry 417 + 0x1.45d1745d1746p9, + 0x1.45d1745d17460p-1, + 0x1.4p3 + }, + { // Entry 418 + 0x1.745d1745d17490p-11, + 0x1.745d1745d1749p-1, + -0x1.4p3 + }, + { // Entry 419 + 0x1.745d1745d17490p-10, + 0x1.745d1745d1749p-1, + -0x1.2p3 + }, + { // Entry 420 + 0x1.745d1745d17490p-9, + 0x1.745d1745d1749p-1, + -0x1.0p3 + }, + { // Entry 421 + 0x1.745d1745d17490p-8, + 0x1.745d1745d1749p-1, + -0x1.cp2 + }, + { // Entry 422 + 0x1.745d1745d17490p-7, + 0x1.745d1745d1749p-1, + -0x1.8p2 + }, + { // Entry 423 + 0x1.745d1745d17490p-6, + 0x1.745d1745d1749p-1, + -0x1.4p2 + }, + { // Entry 424 + 0x1.745d1745d17490p-5, + 0x1.745d1745d1749p-1, + -0x1.0p2 + }, + { // Entry 425 + 0x1.745d1745d17490p-4, + 0x1.745d1745d1749p-1, + -0x1.8p1 + }, + { // Entry 426 + 0x1.745d1745d17490p-3, + 0x1.745d1745d1749p-1, + -0x1.0p1 + }, + { // Entry 427 + 0x1.745d1745d17490p-2, + 0x1.745d1745d1749p-1, + -0x1.0p0 + }, + { // Entry 428 + 0x1.745d1745d17490p-1, + 0x1.745d1745d1749p-1, + 0.0 + }, + { // Entry 429 + 0x1.745d1745d17490p0, + 0x1.745d1745d1749p-1, + 0x1.0p0 + }, + { // Entry 430 + 0x1.745d1745d17490p1, + 0x1.745d1745d1749p-1, + 0x1.0p1 + }, + { // Entry 431 + 0x1.745d1745d17490p2, + 0x1.745d1745d1749p-1, + 0x1.8p1 + }, + { // Entry 432 + 0x1.745d1745d17490p3, + 0x1.745d1745d1749p-1, + 0x1.0p2 + }, + { // Entry 433 + 0x1.745d1745d17490p4, + 0x1.745d1745d1749p-1, + 0x1.4p2 + }, + { // Entry 434 + 0x1.745d1745d17490p5, + 0x1.745d1745d1749p-1, + 0x1.8p2 + }, + { // Entry 435 + 0x1.745d1745d17490p6, + 0x1.745d1745d1749p-1, + 0x1.cp2 + }, + { // Entry 436 + 0x1.745d1745d17490p7, + 0x1.745d1745d1749p-1, + 0x1.0p3 + }, + { // Entry 437 + 0x1.745d1745d17490p8, + 0x1.745d1745d1749p-1, + 0x1.2p3 + }, + { // Entry 438 + 0x1.745d1745d17490p9, + 0x1.745d1745d1749p-1, + 0x1.4p3 + }, + { // Entry 439 + 0x1.a2e8ba2e8ba320p-11, + 0x1.a2e8ba2e8ba32p-1, + -0x1.4p3 + }, + { // Entry 440 + 0x1.a2e8ba2e8ba320p-10, + 0x1.a2e8ba2e8ba32p-1, + -0x1.2p3 + }, + { // Entry 441 + 0x1.a2e8ba2e8ba320p-9, + 0x1.a2e8ba2e8ba32p-1, + -0x1.0p3 + }, + { // Entry 442 + 0x1.a2e8ba2e8ba320p-8, + 0x1.a2e8ba2e8ba32p-1, + -0x1.cp2 + }, + { // Entry 443 + 0x1.a2e8ba2e8ba320p-7, + 0x1.a2e8ba2e8ba32p-1, + -0x1.8p2 + }, + { // Entry 444 + 0x1.a2e8ba2e8ba320p-6, + 0x1.a2e8ba2e8ba32p-1, + -0x1.4p2 + }, + { // Entry 445 + 0x1.a2e8ba2e8ba320p-5, + 0x1.a2e8ba2e8ba32p-1, + -0x1.0p2 + }, + { // Entry 446 + 0x1.a2e8ba2e8ba320p-4, + 0x1.a2e8ba2e8ba32p-1, + -0x1.8p1 + }, + { // Entry 447 + 0x1.a2e8ba2e8ba320p-3, + 0x1.a2e8ba2e8ba32p-1, + -0x1.0p1 + }, + { // Entry 448 + 0x1.a2e8ba2e8ba320p-2, + 0x1.a2e8ba2e8ba32p-1, + -0x1.0p0 + }, + { // Entry 449 + 0x1.a2e8ba2e8ba320p-1, + 0x1.a2e8ba2e8ba32p-1, + 0.0 + }, + { // Entry 450 + 0x1.a2e8ba2e8ba320p0, + 0x1.a2e8ba2e8ba32p-1, + 0x1.0p0 + }, + { // Entry 451 + 0x1.a2e8ba2e8ba320p1, + 0x1.a2e8ba2e8ba32p-1, + 0x1.0p1 + }, + { // Entry 452 + 0x1.a2e8ba2e8ba320p2, + 0x1.a2e8ba2e8ba32p-1, + 0x1.8p1 + }, + { // Entry 453 + 0x1.a2e8ba2e8ba320p3, + 0x1.a2e8ba2e8ba32p-1, + 0x1.0p2 + }, + { // Entry 454 + 0x1.a2e8ba2e8ba320p4, + 0x1.a2e8ba2e8ba32p-1, + 0x1.4p2 + }, + { // Entry 455 + 0x1.a2e8ba2e8ba320p5, + 0x1.a2e8ba2e8ba32p-1, + 0x1.8p2 + }, + { // Entry 456 + 0x1.a2e8ba2e8ba320p6, + 0x1.a2e8ba2e8ba32p-1, + 0x1.cp2 + }, + { // Entry 457 + 0x1.a2e8ba2e8ba320p7, + 0x1.a2e8ba2e8ba32p-1, + 0x1.0p3 + }, + { // Entry 458 + 0x1.a2e8ba2e8ba320p8, + 0x1.a2e8ba2e8ba32p-1, + 0x1.2p3 + }, + { // Entry 459 + 0x1.a2e8ba2e8ba320p9, + 0x1.a2e8ba2e8ba32p-1, + 0x1.4p3 + }, + { // Entry 460 + 0x1.d1745d1745d1b0p-11, + 0x1.d1745d1745d1bp-1, + -0x1.4p3 + }, + { // Entry 461 + 0x1.d1745d1745d1b0p-10, + 0x1.d1745d1745d1bp-1, + -0x1.2p3 + }, + { // Entry 462 + 0x1.d1745d1745d1b0p-9, + 0x1.d1745d1745d1bp-1, + -0x1.0p3 + }, + { // Entry 463 + 0x1.d1745d1745d1b0p-8, + 0x1.d1745d1745d1bp-1, + -0x1.cp2 + }, + { // Entry 464 + 0x1.d1745d1745d1b0p-7, + 0x1.d1745d1745d1bp-1, + -0x1.8p2 + }, + { // Entry 465 + 0x1.d1745d1745d1b0p-6, + 0x1.d1745d1745d1bp-1, + -0x1.4p2 + }, + { // Entry 466 + 0x1.d1745d1745d1b0p-5, + 0x1.d1745d1745d1bp-1, + -0x1.0p2 + }, + { // Entry 467 + 0x1.d1745d1745d1b0p-4, + 0x1.d1745d1745d1bp-1, + -0x1.8p1 + }, + { // Entry 468 + 0x1.d1745d1745d1b0p-3, + 0x1.d1745d1745d1bp-1, + -0x1.0p1 + }, + { // Entry 469 + 0x1.d1745d1745d1b0p-2, + 0x1.d1745d1745d1bp-1, + -0x1.0p0 + }, + { // Entry 470 + 0x1.d1745d1745d1b0p-1, + 0x1.d1745d1745d1bp-1, + 0.0 + }, + { // Entry 471 + 0x1.d1745d1745d1b0p0, + 0x1.d1745d1745d1bp-1, + 0x1.0p0 + }, + { // Entry 472 + 0x1.d1745d1745d1b0p1, + 0x1.d1745d1745d1bp-1, + 0x1.0p1 + }, + { // Entry 473 + 0x1.d1745d1745d1b0p2, + 0x1.d1745d1745d1bp-1, + 0x1.8p1 + }, + { // Entry 474 + 0x1.d1745d1745d1b0p3, + 0x1.d1745d1745d1bp-1, + 0x1.0p2 + }, + { // Entry 475 + 0x1.d1745d1745d1b0p4, + 0x1.d1745d1745d1bp-1, + 0x1.4p2 + }, + { // Entry 476 + 0x1.d1745d1745d1b0p5, + 0x1.d1745d1745d1bp-1, + 0x1.8p2 + }, + { // Entry 477 + 0x1.d1745d1745d1b0p6, + 0x1.d1745d1745d1bp-1, + 0x1.cp2 + }, + { // Entry 478 + 0x1.d1745d1745d1b0p7, + 0x1.d1745d1745d1bp-1, + 0x1.0p3 + }, + { // Entry 479 + 0x1.d1745d1745d1b0p8, + 0x1.d1745d1745d1bp-1, + 0x1.2p3 + }, + { // Entry 480 + 0x1.d1745d1745d1b0p9, + 0x1.d1745d1745d1bp-1, + 0x1.4p3 + }, + { // Entry 481 + 0x1.p-10, + 0x1.0p0, + -0x1.4p3 + }, + { // Entry 482 + 0x1.p-9, + 0x1.0p0, + -0x1.2p3 + }, + { // Entry 483 + 0x1.p-8, + 0x1.0p0, + -0x1.0p3 + }, + { // Entry 484 + 0x1.p-7, + 0x1.0p0, + -0x1.cp2 + }, + { // Entry 485 + 0x1.p-6, + 0x1.0p0, + -0x1.8p2 + }, + { // Entry 486 + 0x1.p-5, + 0x1.0p0, + -0x1.4p2 + }, + { // Entry 487 + 0x1.p-4, + 0x1.0p0, + -0x1.0p2 + }, + { // Entry 488 + 0x1.p-3, + 0x1.0p0, + -0x1.8p1 + }, + { // Entry 489 + 0x1.p-2, + 0x1.0p0, + -0x1.0p1 + }, + { // Entry 490 + 0x1.p-1, + 0x1.0p0, + -0x1.0p0 + }, + { // Entry 491 + 0x1.p0, + 0x1.0p0, + 0.0 + }, + { // Entry 492 + 0x1.p1, + 0x1.0p0, + 0x1.0p0 + }, + { // Entry 493 + 0x1.p2, + 0x1.0p0, + 0x1.0p1 + }, + { // Entry 494 + 0x1.p3, + 0x1.0p0, + 0x1.8p1 + }, + { // Entry 495 + 0x1.p4, + 0x1.0p0, + 0x1.0p2 + }, + { // Entry 496 + 0x1.p5, + 0x1.0p0, + 0x1.4p2 + }, + { // Entry 497 + 0x1.p6, + 0x1.0p0, + 0x1.8p2 + }, + { // Entry 498 + 0x1.p7, + 0x1.0p0, + 0x1.cp2 + }, + { // Entry 499 + 0x1.p8, + 0x1.0p0, + 0x1.0p3 + }, + { // Entry 500 + 0x1.p9, + 0x1.0p0, + 0x1.2p3 + }, + { // Entry 501 + 0x1.p10, + 0x1.0p0, + 0x1.4p3 + }, + { // Entry 502 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1023, + -0x1.ff8p9 + }, + { // Entry 503 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + -0x1.ff0p9 + }, + { // Entry 504 + 0x1.fffffffffffff0p23, + 0x1.fffffffffffffp1023, + -0x1.f40p9 + }, + { // Entry 505 + 0x1.fffffffffffff0p24, + 0x1.fffffffffffffp1023, + -0x1.f38p9 + }, + { // Entry 506 + 0x1.fffffffffffff0p1013, + 0x1.fffffffffffffp1023, + -0x1.4p3 + }, + { // Entry 507 + 0x1.fffffffffffff0p1014, + 0x1.fffffffffffffp1023, + -0x1.2p3 + }, + { // Entry 508 + 0x1.fffffffffffff0p1015, + 0x1.fffffffffffffp1023, + -0x1.0p3 + }, + { // Entry 509 + 0x1.fffffffffffff0p1016, + 0x1.fffffffffffffp1023, + -0x1.cp2 + }, + { // Entry 510 + 0x1.fffffffffffff0p1017, + 0x1.fffffffffffffp1023, + -0x1.8p2 + }, + { // Entry 511 + 0x1.fffffffffffff0p1018, + 0x1.fffffffffffffp1023, + -0x1.4p2 + }, + { // Entry 512 + 0x1.fffffffffffff0p1019, + 0x1.fffffffffffffp1023, + -0x1.0p2 + }, + { // Entry 513 + 0x1.fffffffffffff0p1020, + 0x1.fffffffffffffp1023, + -0x1.8p1 + }, + { // Entry 514 + 0x1.fffffffffffff0p1021, + 0x1.fffffffffffffp1023, + -0x1.0p1 + }, + { // Entry 515 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1023, + -0x1.0p0 + }, + { // Entry 516 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 517 + 0x1.p-51, + 0x1.0p-1074, + 0x1.ff8p9 + }, + { // Entry 518 + 0x1.p-52, + 0x1.0p-1074, + 0x1.ff0p9 + }, + { // Entry 519 + 0x1.p-74, + 0x1.0p-1074, + 0x1.f40p9 + }, + { // Entry 520 + 0x1.p-75, + 0x1.0p-1074, + 0x1.f38p9 + }, + { // Entry 521 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 522 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 523 + 0x1.p-1072, + 0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 524 + 0x1.p-1071, + 0x1.0p-1074, + 0x1.8p1 + }, + { // Entry 525 + 0x1.p-1070, + 0x1.0p-1074, + 0x1.0p2 + }, + { // Entry 526 + 0x1.p-1069, + 0x1.0p-1074, + 0x1.4p2 + }, + { // Entry 527 + 0x1.p-1068, + 0x1.0p-1074, + 0x1.8p2 + }, + { // Entry 528 + 0x1.p-1067, + 0x1.0p-1074, + 0x1.cp2 + }, + { // Entry 529 + 0x1.p-1066, + 0x1.0p-1074, + 0x1.0p3 + }, + { // Entry 530 + 0x1.p-1065, + 0x1.0p-1074, + 0x1.2p3 + }, + { // Entry 531 + 0x1.p-1064, + 0x1.0p-1074, + 0x1.4p3 + }, + { // Entry 532 + 0x1.p-1025, + 0x1.0p-2, + -0x1.ff8p9 + }, + { // Entry 533 + 0x1.p-1024, + 0x1.0p-2, + -0x1.ff0p9 + }, + { // Entry 534 + 0x1.p-1024, + 0x1.0p-1, + -0x1.ff8p9 + }, + { // Entry 535 + 0x1.p-1023, + 0x1.0p-1, + -0x1.ff0p9 + }, + { // Entry 536 + 0x1.80p-1024, + 0x1.8p-1, + -0x1.ff8p9 + }, + { // Entry 537 + 0x1.80p-1023, + 0x1.8p-1, + -0x1.ff0p9 + }, + { // Entry 538 + 0.0, + 0x1.0p-2, + -0x1.0c8p10 + }, + { // Entry 539 + 0.0, + 0x1.0p-2, + -0x1.0c4p10 + }, + { // Entry 540 + 0.0, + 0x1.0p-1, + -0x1.0c8p10 + }, + { // Entry 541 + 0x1.p-1074, + 0x1.0p-1, + -0x1.0c4p10 + }, + { // Entry 542 + 0.0, + 0x1.8p-1, + -0x1.0c8p10 + }, + { // Entry 543 + 0x1.80p-1074, + 0x1.8p-1, + -0x1.0c4p10 + }, + { // Entry 544 + 0x1.p1023, + 0x1.0p0, + 0x1.ff8p9 + }, + { // Entry 545 + 0x1.p1022, + 0x1.0p0, + 0x1.ff0p9 + }, + { // Entry 546 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 547 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 548 + 0x1.p-1072, + 0x1.0p-1074, + 0x1.0p1 + }, + { // Entry 549 + 0x1.p-1071, + 0x1.0p-1074, + 0x1.8p1 + }, + { // Entry 550 + 0x1.p-1070, + 0x1.0p-1074, + 0x1.0p2 + }, + { // Entry 551 + 0x1.p-1069, + 0x1.0p-1074, + 0x1.4p2 + }, + { // Entry 552 + 0x1.p-1068, + 0x1.0p-1074, + 0x1.8p2 + }, + { // Entry 553 + 0x1.p-1067, + 0x1.0p-1074, + 0x1.cp2 + }, + { // Entry 554 + 0x1.p-1066, + 0x1.0p-1074, + 0x1.0p3 + }, + { // Entry 555 + 0x1.p-1065, + 0x1.0p-1074, + 0x1.2p3 + }, + { // Entry 556 + 0x1.p-1064, + 0x1.0p-1074, + 0x1.4p3 + }, + { // Entry 557 + 0x1.p-1063, + 0x1.0p-1074, + 0x1.6p3 + }, + { // Entry 558 + 0x1.p-1062, + 0x1.0p-1074, + 0x1.8p3 + }, + { // Entry 559 + 0x1.p-1061, + 0x1.0p-1074, + 0x1.ap3 + }, + { // Entry 560 + 0x1.p-1060, + 0x1.0p-1074, + 0x1.cp3 + }, + { // Entry 561 + 0x1.p-1059, + 0x1.0p-1074, + 0x1.ep3 + }, + { // Entry 562 + 0x1.p-1058, + 0x1.0p-1074, + 0x1.0p4 + }, + { // Entry 563 + 0x1.p-1057, + 0x1.0p-1074, + 0x1.1p4 + }, + { // Entry 564 + 0x1.p-1056, + 0x1.0p-1074, + 0x1.2p4 + }, + { // Entry 565 + 0x1.p-1055, + 0x1.0p-1074, + 0x1.3p4 + }, + { // Entry 566 + 0x1.p-1054, + 0x1.0p-1074, + 0x1.4p4 + }, + { // Entry 567 + 0x1.p-1053, + 0x1.0p-1074, + 0x1.5p4 + }, + { // Entry 568 + 0x1.p-1052, + 0x1.0p-1074, + 0x1.6p4 + }, + { // Entry 569 + 0x1.p-1051, + 0x1.0p-1074, + 0x1.7p4 + }, + { // Entry 570 + 0x1.p-1050, + 0x1.0p-1074, + 0x1.8p4 + }, + { // Entry 571 + 0x1.p-1049, + 0x1.0p-1074, + 0x1.9p4 + }, + { // Entry 572 + 0x1.p-1048, + 0x1.0p-1074, + 0x1.ap4 + }, + { // Entry 573 + 0x1.p-1047, + 0x1.0p-1074, + 0x1.bp4 + }, + { // Entry 574 + 0x1.p-1046, + 0x1.0p-1074, + 0x1.cp4 + }, + { // Entry 575 + 0x1.p-1045, + 0x1.0p-1074, + 0x1.dp4 + }, + { // Entry 576 + 0x1.p-1044, + 0x1.0p-1074, + 0x1.ep4 + }, + { // Entry 577 + 0x1.p-1043, + 0x1.0p-1074, + 0x1.fp4 + }, + { // Entry 578 + 0x1.p-1042, + 0x1.0p-1074, + 0x1.0p5 + }, + { // Entry 579 + 0x1.p-1041, + 0x1.0p-1074, + 0x1.080p5 + }, + { // Entry 580 + 0x1.p-1040, + 0x1.0p-1074, + 0x1.1p5 + }, + { // Entry 581 + 0x1.p-1039, + 0x1.0p-1074, + 0x1.180p5 + }, + { // Entry 582 + 0x1.p-1038, + 0x1.0p-1074, + 0x1.2p5 + }, + { // Entry 583 + 0x1.p-1037, + 0x1.0p-1074, + 0x1.280p5 + }, + { // Entry 584 + 0x1.p-1036, + 0x1.0p-1074, + 0x1.3p5 + }, + { // Entry 585 + 0x1.p-1035, + 0x1.0p-1074, + 0x1.380p5 + }, + { // Entry 586 + 0x1.p-1034, + 0x1.0p-1074, + 0x1.4p5 + }, + { // Entry 587 + 0x1.p-1033, + 0x1.0p-1074, + 0x1.480p5 + }, + { // Entry 588 + 0x1.p-1032, + 0x1.0p-1074, + 0x1.5p5 + }, + { // Entry 589 + 0x1.p-1031, + 0x1.0p-1074, + 0x1.580p5 + }, + { // Entry 590 + 0x1.p-1030, + 0x1.0p-1074, + 0x1.6p5 + }, + { // Entry 591 + 0x1.p-1029, + 0x1.0p-1074, + 0x1.680p5 + }, + { // Entry 592 + 0x1.p-1028, + 0x1.0p-1074, + 0x1.7p5 + }, + { // Entry 593 + 0x1.p-1027, + 0x1.0p-1074, + 0x1.780p5 + }, + { // Entry 594 + 0x1.p-1026, + 0x1.0p-1074, + 0x1.8p5 + }, + { // Entry 595 + 0x1.p-1025, + 0x1.0p-1074, + 0x1.880p5 + }, + { // Entry 596 + 0x1.p-1024, + 0x1.0p-1074, + 0x1.9p5 + }, + { // Entry 597 + 0x1.p-1023, + 0x1.0p-1074, + 0x1.980p5 + }, + { // Entry 598 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.ap5 + }, + { // Entry 599 + 0x1.p-1021, + 0x1.0p-1074, + 0x1.a80p5 + }, + { // Entry 600 + 0x1.p-1020, + 0x1.0p-1074, + 0x1.bp5 + }, + { // Entry 601 + 0x1.p-1019, + 0x1.0p-1074, + 0x1.b80p5 + }, + { // Entry 602 + 0x1.p-1018, + 0x1.0p-1074, + 0x1.cp5 + }, + { // Entry 603 + 0x1.p-1017, + 0x1.0p-1074, + 0x1.c80p5 + }, + { // Entry 604 + 0x1.p-1016, + 0x1.0p-1074, + 0x1.dp5 + }, + { // Entry 605 + 0x1.p-1015, + 0x1.0p-1074, + 0x1.d80p5 + }, + { // Entry 606 + 0x1.p-1014, + 0x1.0p-1074, + 0x1.ep5 + }, + { // Entry 607 + 0x1.p-1013, + 0x1.0p-1074, + 0x1.e80p5 + }, + { // Entry 608 + 0x1.p-1012, + 0x1.0p-1074, + 0x1.fp5 + }, + { // Entry 609 + 0x1.p-1011, + 0x1.0p-1074, + 0x1.f80p5 + }, + { // Entry 610 + 0x1.p-1010, + 0x1.0p-1074, + 0x1.0p6 + }, + { // Entry 611 + 0x1.p-1009, + 0x1.0p-1074, + 0x1.040p6 + }, + { // Entry 612 + 0x1.p-1008, + 0x1.0p-1074, + 0x1.080p6 + }, + { // Entry 613 + 0x1.p-1007, + 0x1.0p-1074, + 0x1.0c0p6 + }, + { // Entry 614 + 0x1.p-1006, + 0x1.0p-1074, + 0x1.1p6 + }, + { // Entry 615 + 0x1.p-1005, + 0x1.0p-1074, + 0x1.140p6 + }, + { // Entry 616 + 0x1.p-1004, + 0x1.0p-1074, + 0x1.180p6 + }, + { // Entry 617 + 0x1.p-1003, + 0x1.0p-1074, + 0x1.1c0p6 + }, + { // Entry 618 + 0x1.p-1002, + 0x1.0p-1074, + 0x1.2p6 + }, + { // Entry 619 + 0x1.p-1001, + 0x1.0p-1074, + 0x1.240p6 + }, + { // Entry 620 + 0x1.p-1000, + 0x1.0p-1074, + 0x1.280p6 + }, + { // Entry 621 + 0x1.p-999, + 0x1.0p-1074, + 0x1.2c0p6 + }, + { // Entry 622 + 0x1.p-998, + 0x1.0p-1074, + 0x1.3p6 + }, + { // Entry 623 + 0x1.p-997, + 0x1.0p-1074, + 0x1.340p6 + }, + { // Entry 624 + 0x1.p-996, + 0x1.0p-1074, + 0x1.380p6 + }, + { // Entry 625 + 0x1.p-995, + 0x1.0p-1074, + 0x1.3c0p6 + }, + { // Entry 626 + 0x1.p-994, + 0x1.0p-1074, + 0x1.4p6 + }, + { // Entry 627 + 0x1.p-993, + 0x1.0p-1074, + 0x1.440p6 + }, + { // Entry 628 + 0x1.p-992, + 0x1.0p-1074, + 0x1.480p6 + }, + { // Entry 629 + 0x1.p-991, + 0x1.0p-1074, + 0x1.4c0p6 + }, + { // Entry 630 + 0x1.p-990, + 0x1.0p-1074, + 0x1.5p6 + }, + { // Entry 631 + 0x1.p-989, + 0x1.0p-1074, + 0x1.540p6 + }, + { // Entry 632 + 0x1.p-988, + 0x1.0p-1074, + 0x1.580p6 + }, + { // Entry 633 + 0x1.p-987, + 0x1.0p-1074, + 0x1.5c0p6 + }, + { // Entry 634 + 0x1.p-986, + 0x1.0p-1074, + 0x1.6p6 + }, + { // Entry 635 + 0x1.p-985, + 0x1.0p-1074, + 0x1.640p6 + }, + { // Entry 636 + 0x1.p-984, + 0x1.0p-1074, + 0x1.680p6 + }, + { // Entry 637 + 0x1.p-983, + 0x1.0p-1074, + 0x1.6c0p6 + }, + { // Entry 638 + 0x1.p-982, + 0x1.0p-1074, + 0x1.7p6 + }, + { // Entry 639 + 0x1.p-981, + 0x1.0p-1074, + 0x1.740p6 + }, + { // Entry 640 + 0x1.p-980, + 0x1.0p-1074, + 0x1.780p6 + }, + { // Entry 641 + 0x1.p-979, + 0x1.0p-1074, + 0x1.7c0p6 + }, + { // Entry 642 + 0x1.p-978, + 0x1.0p-1074, + 0x1.8p6 + }, + { // Entry 643 + 0x1.p-977, + 0x1.0p-1074, + 0x1.840p6 + }, + { // Entry 644 + 0x1.p-976, + 0x1.0p-1074, + 0x1.880p6 + }, + { // Entry 645 + 0x1.p-975, + 0x1.0p-1074, + 0x1.8c0p6 + }, + { // Entry 646 + 0x1.p-974, + 0x1.0p-1074, + 0x1.9p6 + }, + { // Entry 647 + 0x1.p-973, + 0x1.0p-1074, + 0x1.940p6 + }, + { // Entry 648 + 0x1.p-972, + 0x1.0p-1074, + 0x1.980p6 + }, + { // Entry 649 + 0x1.p-971, + 0x1.0p-1074, + 0x1.9c0p6 + }, + { // Entry 650 + 0x1.p-970, + 0x1.0p-1074, + 0x1.ap6 + }, + { // Entry 651 + 0x1.p-969, + 0x1.0p-1074, + 0x1.a40p6 + }, + { // Entry 652 + 0x1.p-968, + 0x1.0p-1074, + 0x1.a80p6 + }, + { // Entry 653 + 0x1.p-967, + 0x1.0p-1074, + 0x1.ac0p6 + }, + { // Entry 654 + 0x1.p-966, + 0x1.0p-1074, + 0x1.bp6 + }, + { // Entry 655 + 0x1.p-965, + 0x1.0p-1074, + 0x1.b40p6 + }, + { // Entry 656 + 0x1.p-964, + 0x1.0p-1074, + 0x1.b80p6 + }, + { // Entry 657 + 0x1.p-963, + 0x1.0p-1074, + 0x1.bc0p6 + }, + { // Entry 658 + 0x1.p-962, + 0x1.0p-1074, + 0x1.cp6 + }, + { // Entry 659 + 0x1.p-961, + 0x1.0p-1074, + 0x1.c40p6 + }, + { // Entry 660 + 0x1.p-960, + 0x1.0p-1074, + 0x1.c80p6 + }, + { // Entry 661 + 0x1.p-959, + 0x1.0p-1074, + 0x1.cc0p6 + }, + { // Entry 662 + 0x1.p-958, + 0x1.0p-1074, + 0x1.dp6 + }, + { // Entry 663 + 0x1.p-957, + 0x1.0p-1074, + 0x1.d40p6 + }, + { // Entry 664 + 0x1.p-956, + 0x1.0p-1074, + 0x1.d80p6 + }, + { // Entry 665 + 0x1.p-955, + 0x1.0p-1074, + 0x1.dc0p6 + }, + { // Entry 666 + 0x1.p-954, + 0x1.0p-1074, + 0x1.ep6 + }, + { // Entry 667 + 0x1.p-953, + 0x1.0p-1074, + 0x1.e40p6 + }, + { // Entry 668 + 0x1.p-952, + 0x1.0p-1074, + 0x1.e80p6 + }, + { // Entry 669 + 0x1.p-951, + 0x1.0p-1074, + 0x1.ec0p6 + }, + { // Entry 670 + 0x1.p-950, + 0x1.0p-1074, + 0x1.fp6 + }, + { // Entry 671 + 0x1.p-949, + 0x1.0p-1074, + 0x1.f40p6 + }, + { // Entry 672 + 0x1.p-948, + 0x1.0p-1074, + 0x1.f80p6 + }, + { // Entry 673 + 0x1.p-947, + 0x1.0p-1074, + 0x1.fc0p6 + }, + { // Entry 674 + 0x1.p-946, + 0x1.0p-1074, + 0x1.0p7 + }, + { // Entry 675 + 0x1.p-945, + 0x1.0p-1074, + 0x1.020p7 + }, + { // Entry 676 + 0x1.p-944, + 0x1.0p-1074, + 0x1.040p7 + }, + { // Entry 677 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 678 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p0 + }, + { // Entry 679 + 0x1.ffffffffffffe0p-1021, + 0x1.ffffffffffffep-1023, + 0x1.0p1 + }, + { // Entry 680 + 0x1.ffffffffffffe0p-1020, + 0x1.ffffffffffffep-1023, + 0x1.8p1 + }, + { // Entry 681 + 0x1.ffffffffffffe0p-1019, + 0x1.ffffffffffffep-1023, + 0x1.0p2 + }, + { // Entry 682 + 0x1.ffffffffffffe0p-1018, + 0x1.ffffffffffffep-1023, + 0x1.4p2 + }, + { // Entry 683 + 0x1.ffffffffffffe0p-1017, + 0x1.ffffffffffffep-1023, + 0x1.8p2 + }, + { // Entry 684 + 0x1.ffffffffffffe0p-1016, + 0x1.ffffffffffffep-1023, + 0x1.cp2 + }, + { // Entry 685 + 0x1.ffffffffffffe0p-1015, + 0x1.ffffffffffffep-1023, + 0x1.0p3 + }, + { // Entry 686 + 0x1.ffffffffffffe0p-1014, + 0x1.ffffffffffffep-1023, + 0x1.2p3 + }, + { // Entry 687 + 0x1.ffffffffffffe0p-1013, + 0x1.ffffffffffffep-1023, + 0x1.4p3 + }, + { // Entry 688 + 0x1.ffffffffffffe0p-1012, + 0x1.ffffffffffffep-1023, + 0x1.6p3 + }, + { // Entry 689 + 0x1.ffffffffffffe0p-1011, + 0x1.ffffffffffffep-1023, + 0x1.8p3 + }, + { // Entry 690 + 0x1.ffffffffffffe0p-1010, + 0x1.ffffffffffffep-1023, + 0x1.ap3 + }, + { // Entry 691 + 0x1.ffffffffffffe0p-1009, + 0x1.ffffffffffffep-1023, + 0x1.cp3 + }, + { // Entry 692 + 0x1.ffffffffffffe0p-1008, + 0x1.ffffffffffffep-1023, + 0x1.ep3 + }, + { // Entry 693 + 0x1.ffffffffffffe0p-1007, + 0x1.ffffffffffffep-1023, + 0x1.0p4 + }, + { // Entry 694 + 0x1.ffffffffffffe0p-1006, + 0x1.ffffffffffffep-1023, + 0x1.1p4 + }, + { // Entry 695 + 0x1.ffffffffffffe0p-1005, + 0x1.ffffffffffffep-1023, + 0x1.2p4 + }, + { // Entry 696 + 0x1.ffffffffffffe0p-1004, + 0x1.ffffffffffffep-1023, + 0x1.3p4 + }, + { // Entry 697 + 0x1.ffffffffffffe0p-1003, + 0x1.ffffffffffffep-1023, + 0x1.4p4 + }, + { // Entry 698 + 0x1.ffffffffffffe0p-1002, + 0x1.ffffffffffffep-1023, + 0x1.5p4 + }, + { // Entry 699 + 0x1.ffffffffffffe0p-1001, + 0x1.ffffffffffffep-1023, + 0x1.6p4 + }, + { // Entry 700 + 0x1.ffffffffffffe0p-1000, + 0x1.ffffffffffffep-1023, + 0x1.7p4 + }, + { // Entry 701 + 0x1.ffffffffffffe0p-999, + 0x1.ffffffffffffep-1023, + 0x1.8p4 + }, + { // Entry 702 + 0x1.ffffffffffffe0p-998, + 0x1.ffffffffffffep-1023, + 0x1.9p4 + }, + { // Entry 703 + 0x1.ffffffffffffe0p-997, + 0x1.ffffffffffffep-1023, + 0x1.ap4 + }, + { // Entry 704 + 0x1.ffffffffffffe0p-996, + 0x1.ffffffffffffep-1023, + 0x1.bp4 + }, + { // Entry 705 + 0x1.ffffffffffffe0p-995, + 0x1.ffffffffffffep-1023, + 0x1.cp4 + }, + { // Entry 706 + 0x1.ffffffffffffe0p-994, + 0x1.ffffffffffffep-1023, + 0x1.dp4 + }, + { // Entry 707 + 0x1.ffffffffffffe0p-993, + 0x1.ffffffffffffep-1023, + 0x1.ep4 + }, + { // Entry 708 + 0x1.ffffffffffffe0p-992, + 0x1.ffffffffffffep-1023, + 0x1.fp4 + }, + { // Entry 709 + 0x1.ffffffffffffe0p-991, + 0x1.ffffffffffffep-1023, + 0x1.0p5 + }, + { // Entry 710 + 0x1.ffffffffffffe0p-990, + 0x1.ffffffffffffep-1023, + 0x1.080p5 + }, + { // Entry 711 + 0x1.ffffffffffffe0p-989, + 0x1.ffffffffffffep-1023, + 0x1.1p5 + }, + { // Entry 712 + 0x1.ffffffffffffe0p-988, + 0x1.ffffffffffffep-1023, + 0x1.180p5 + }, + { // Entry 713 + 0x1.ffffffffffffe0p-987, + 0x1.ffffffffffffep-1023, + 0x1.2p5 + }, + { // Entry 714 + 0x1.ffffffffffffe0p-986, + 0x1.ffffffffffffep-1023, + 0x1.280p5 + }, + { // Entry 715 + 0x1.ffffffffffffe0p-985, + 0x1.ffffffffffffep-1023, + 0x1.3p5 + }, + { // Entry 716 + 0x1.ffffffffffffe0p-984, + 0x1.ffffffffffffep-1023, + 0x1.380p5 + }, + { // Entry 717 + 0x1.ffffffffffffe0p-983, + 0x1.ffffffffffffep-1023, + 0x1.4p5 + }, + { // Entry 718 + 0x1.ffffffffffffe0p-982, + 0x1.ffffffffffffep-1023, + 0x1.480p5 + }, + { // Entry 719 + 0x1.ffffffffffffe0p-981, + 0x1.ffffffffffffep-1023, + 0x1.5p5 + }, + { // Entry 720 + 0x1.ffffffffffffe0p-980, + 0x1.ffffffffffffep-1023, + 0x1.580p5 + }, + { // Entry 721 + 0x1.ffffffffffffe0p-979, + 0x1.ffffffffffffep-1023, + 0x1.6p5 + }, + { // Entry 722 + 0x1.ffffffffffffe0p-978, + 0x1.ffffffffffffep-1023, + 0x1.680p5 + }, + { // Entry 723 + 0x1.ffffffffffffe0p-977, + 0x1.ffffffffffffep-1023, + 0x1.7p5 + }, + { // Entry 724 + 0x1.ffffffffffffe0p-976, + 0x1.ffffffffffffep-1023, + 0x1.780p5 + }, + { // Entry 725 + 0x1.ffffffffffffe0p-975, + 0x1.ffffffffffffep-1023, + 0x1.8p5 + }, + { // Entry 726 + 0x1.ffffffffffffe0p-974, + 0x1.ffffffffffffep-1023, + 0x1.880p5 + }, + { // Entry 727 + 0x1.ffffffffffffe0p-973, + 0x1.ffffffffffffep-1023, + 0x1.9p5 + }, + { // Entry 728 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + 0x1.980p5 + }, + { // Entry 729 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + 0x1.ap5 + }, + { // Entry 730 + 0x1.ffffffffffffe0p-970, + 0x1.ffffffffffffep-1023, + 0x1.a80p5 + }, + { // Entry 731 + 0x1.ffffffffffffe0p-969, + 0x1.ffffffffffffep-1023, + 0x1.bp5 + }, + { // Entry 732 + 0x1.ffffffffffffe0p-968, + 0x1.ffffffffffffep-1023, + 0x1.b80p5 + }, + { // Entry 733 + 0x1.ffffffffffffe0p-967, + 0x1.ffffffffffffep-1023, + 0x1.cp5 + }, + { // Entry 734 + 0x1.ffffffffffffe0p-966, + 0x1.ffffffffffffep-1023, + 0x1.c80p5 + }, + { // Entry 735 + 0x1.ffffffffffffe0p-965, + 0x1.ffffffffffffep-1023, + 0x1.dp5 + }, + { // Entry 736 + 0x1.ffffffffffffe0p-964, + 0x1.ffffffffffffep-1023, + 0x1.d80p5 + }, + { // Entry 737 + 0x1.ffffffffffffe0p-963, + 0x1.ffffffffffffep-1023, + 0x1.ep5 + }, + { // Entry 738 + 0x1.ffffffffffffe0p-962, + 0x1.ffffffffffffep-1023, + 0x1.e80p5 + }, + { // Entry 739 + 0x1.ffffffffffffe0p-961, + 0x1.ffffffffffffep-1023, + 0x1.fp5 + }, + { // Entry 740 + 0x1.ffffffffffffe0p-960, + 0x1.ffffffffffffep-1023, + 0x1.f80p5 + }, + { // Entry 741 + 0x1.ffffffffffffe0p-959, + 0x1.ffffffffffffep-1023, + 0x1.0p6 + }, + { // Entry 742 + 0x1.ffffffffffffe0p-958, + 0x1.ffffffffffffep-1023, + 0x1.040p6 + }, + { // Entry 743 + 0x1.ffffffffffffe0p-957, + 0x1.ffffffffffffep-1023, + 0x1.080p6 + }, + { // Entry 744 + 0x1.ffffffffffffe0p-956, + 0x1.ffffffffffffep-1023, + 0x1.0c0p6 + }, + { // Entry 745 + 0x1.ffffffffffffe0p-955, + 0x1.ffffffffffffep-1023, + 0x1.1p6 + }, + { // Entry 746 + 0x1.ffffffffffffe0p-954, + 0x1.ffffffffffffep-1023, + 0x1.140p6 + }, + { // Entry 747 + 0x1.ffffffffffffe0p-953, + 0x1.ffffffffffffep-1023, + 0x1.180p6 + }, + { // Entry 748 + 0x1.ffffffffffffe0p-952, + 0x1.ffffffffffffep-1023, + 0x1.1c0p6 + }, + { // Entry 749 + 0x1.ffffffffffffe0p-951, + 0x1.ffffffffffffep-1023, + 0x1.2p6 + }, + { // Entry 750 + 0x1.ffffffffffffe0p-950, + 0x1.ffffffffffffep-1023, + 0x1.240p6 + }, + { // Entry 751 + 0x1.ffffffffffffe0p-949, + 0x1.ffffffffffffep-1023, + 0x1.280p6 + }, + { // Entry 752 + 0x1.ffffffffffffe0p-948, + 0x1.ffffffffffffep-1023, + 0x1.2c0p6 + }, + { // Entry 753 + 0x1.ffffffffffffe0p-947, + 0x1.ffffffffffffep-1023, + 0x1.3p6 + }, + { // Entry 754 + 0x1.ffffffffffffe0p-946, + 0x1.ffffffffffffep-1023, + 0x1.340p6 + }, + { // Entry 755 + 0x1.ffffffffffffe0p-945, + 0x1.ffffffffffffep-1023, + 0x1.380p6 + }, + { // Entry 756 + 0x1.ffffffffffffe0p-944, + 0x1.ffffffffffffep-1023, + 0x1.3c0p6 + }, + { // Entry 757 + 0x1.ffffffffffffe0p-943, + 0x1.ffffffffffffep-1023, + 0x1.4p6 + }, + { // Entry 758 + 0x1.ffffffffffffe0p-942, + 0x1.ffffffffffffep-1023, + 0x1.440p6 + }, + { // Entry 759 + 0x1.ffffffffffffe0p-941, + 0x1.ffffffffffffep-1023, + 0x1.480p6 + }, + { // Entry 760 + 0x1.ffffffffffffe0p-940, + 0x1.ffffffffffffep-1023, + 0x1.4c0p6 + }, + { // Entry 761 + 0x1.ffffffffffffe0p-939, + 0x1.ffffffffffffep-1023, + 0x1.5p6 + }, + { // Entry 762 + 0x1.ffffffffffffe0p-938, + 0x1.ffffffffffffep-1023, + 0x1.540p6 + }, + { // Entry 763 + 0x1.ffffffffffffe0p-937, + 0x1.ffffffffffffep-1023, + 0x1.580p6 + }, + { // Entry 764 + 0x1.ffffffffffffe0p-936, + 0x1.ffffffffffffep-1023, + 0x1.5c0p6 + }, + { // Entry 765 + 0x1.ffffffffffffe0p-935, + 0x1.ffffffffffffep-1023, + 0x1.6p6 + }, + { // Entry 766 + 0x1.ffffffffffffe0p-934, + 0x1.ffffffffffffep-1023, + 0x1.640p6 + }, + { // Entry 767 + 0x1.ffffffffffffe0p-933, + 0x1.ffffffffffffep-1023, + 0x1.680p6 + }, + { // Entry 768 + 0x1.ffffffffffffe0p-932, + 0x1.ffffffffffffep-1023, + 0x1.6c0p6 + }, + { // Entry 769 + 0x1.ffffffffffffe0p-931, + 0x1.ffffffffffffep-1023, + 0x1.7p6 + }, + { // Entry 770 + 0x1.ffffffffffffe0p-930, + 0x1.ffffffffffffep-1023, + 0x1.740p6 + }, + { // Entry 771 + 0x1.ffffffffffffe0p-929, + 0x1.ffffffffffffep-1023, + 0x1.780p6 + }, + { // Entry 772 + 0x1.ffffffffffffe0p-928, + 0x1.ffffffffffffep-1023, + 0x1.7c0p6 + }, + { // Entry 773 + 0x1.ffffffffffffe0p-927, + 0x1.ffffffffffffep-1023, + 0x1.8p6 + }, + { // Entry 774 + 0x1.ffffffffffffe0p-926, + 0x1.ffffffffffffep-1023, + 0x1.840p6 + }, + { // Entry 775 + 0x1.ffffffffffffe0p-925, + 0x1.ffffffffffffep-1023, + 0x1.880p6 + }, + { // Entry 776 + 0x1.ffffffffffffe0p-924, + 0x1.ffffffffffffep-1023, + 0x1.8c0p6 + }, + { // Entry 777 + 0x1.ffffffffffffe0p-923, + 0x1.ffffffffffffep-1023, + 0x1.9p6 + }, + { // Entry 778 + 0x1.ffffffffffffe0p-922, + 0x1.ffffffffffffep-1023, + 0x1.940p6 + }, + { // Entry 779 + 0x1.ffffffffffffe0p-921, + 0x1.ffffffffffffep-1023, + 0x1.980p6 + }, + { // Entry 780 + 0x1.ffffffffffffe0p-920, + 0x1.ffffffffffffep-1023, + 0x1.9c0p6 + }, + { // Entry 781 + 0x1.ffffffffffffe0p-919, + 0x1.ffffffffffffep-1023, + 0x1.ap6 + }, + { // Entry 782 + 0x1.ffffffffffffe0p-918, + 0x1.ffffffffffffep-1023, + 0x1.a40p6 + }, + { // Entry 783 + 0x1.ffffffffffffe0p-917, + 0x1.ffffffffffffep-1023, + 0x1.a80p6 + }, + { // Entry 784 + 0x1.ffffffffffffe0p-916, + 0x1.ffffffffffffep-1023, + 0x1.ac0p6 + }, + { // Entry 785 + 0x1.ffffffffffffe0p-915, + 0x1.ffffffffffffep-1023, + 0x1.bp6 + }, + { // Entry 786 + 0x1.ffffffffffffe0p-914, + 0x1.ffffffffffffep-1023, + 0x1.b40p6 + }, + { // Entry 787 + 0x1.ffffffffffffe0p-913, + 0x1.ffffffffffffep-1023, + 0x1.b80p6 + }, + { // Entry 788 + 0x1.ffffffffffffe0p-912, + 0x1.ffffffffffffep-1023, + 0x1.bc0p6 + }, + { // Entry 789 + 0x1.ffffffffffffe0p-911, + 0x1.ffffffffffffep-1023, + 0x1.cp6 + }, + { // Entry 790 + 0x1.ffffffffffffe0p-910, + 0x1.ffffffffffffep-1023, + 0x1.c40p6 + }, + { // Entry 791 + 0x1.ffffffffffffe0p-909, + 0x1.ffffffffffffep-1023, + 0x1.c80p6 + }, + { // Entry 792 + 0x1.ffffffffffffe0p-908, + 0x1.ffffffffffffep-1023, + 0x1.cc0p6 + }, + { // Entry 793 + 0x1.ffffffffffffe0p-907, + 0x1.ffffffffffffep-1023, + 0x1.dp6 + }, + { // Entry 794 + 0x1.ffffffffffffe0p-906, + 0x1.ffffffffffffep-1023, + 0x1.d40p6 + }, + { // Entry 795 + 0x1.ffffffffffffe0p-905, + 0x1.ffffffffffffep-1023, + 0x1.d80p6 + }, + { // Entry 796 + 0x1.ffffffffffffe0p-904, + 0x1.ffffffffffffep-1023, + 0x1.dc0p6 + }, + { // Entry 797 + 0x1.ffffffffffffe0p-903, + 0x1.ffffffffffffep-1023, + 0x1.ep6 + }, + { // Entry 798 + 0x1.ffffffffffffe0p-902, + 0x1.ffffffffffffep-1023, + 0x1.e40p6 + }, + { // Entry 799 + 0x1.ffffffffffffe0p-901, + 0x1.ffffffffffffep-1023, + 0x1.e80p6 + }, + { // Entry 800 + 0x1.ffffffffffffe0p-900, + 0x1.ffffffffffffep-1023, + 0x1.ec0p6 + }, + { // Entry 801 + 0x1.ffffffffffffe0p-899, + 0x1.ffffffffffffep-1023, + 0x1.fp6 + }, + { // Entry 802 + 0x1.ffffffffffffe0p-898, + 0x1.ffffffffffffep-1023, + 0x1.f40p6 + }, + { // Entry 803 + 0x1.ffffffffffffe0p-897, + 0x1.ffffffffffffep-1023, + 0x1.f80p6 + }, + { // Entry 804 + 0x1.ffffffffffffe0p-896, + 0x1.ffffffffffffep-1023, + 0x1.fc0p6 + }, + { // Entry 805 + 0x1.ffffffffffffe0p-895, + 0x1.ffffffffffffep-1023, + 0x1.0p7 + }, + { // Entry 806 + 0x1.ffffffffffffe0p-894, + 0x1.ffffffffffffep-1023, + 0x1.020p7 + }, + { // Entry 807 + 0x1.ffffffffffffe0p-893, + 0x1.ffffffffffffep-1023, + 0x1.040p7 + }, + { // Entry 808 + 0x1.p0, + 0x1.0p-1074, + 0x1.0c8p10 + }, + { // Entry 809 + 0x1.p-1, + 0x1.0p-1074, + 0x1.0c4p10 + }, + { // Entry 810 + 0x1.ffffffffffffe0p51, + 0x1.ffffffffffffep-1023, + 0x1.0c8p10 + }, + { // Entry 811 + 0x1.ffffffffffffe0p50, + 0x1.ffffffffffffep-1023, + 0x1.0c4p10 + }, + { // Entry 812 + 0x1.p-1022, + 0x1.0p-1074, + 0x1.ap5 + }, + { // Entry 813 + 0x1.p-1023, + 0x1.0p-1074, + 0x1.980p5 + }, + { // Entry 814 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + 0x1.ap5 + }, + { // Entry 815 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + 0x1.980p5 + }, + { // Entry 816 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 817 + 0x1.p-1073, + 0x1.0p-1074, + 0x1.0p0 + }, + { // Entry 818 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 819 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + 0x1.0p0 + }, + { // Entry 820 + HUGE_VAL, + HUGE_VAL, + HUGE_VAL + }, + { // Entry 821 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 822 + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 823 + HUGE_VAL, + 0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 824 + HUGE_VAL, + 0x1.0p-1022, + HUGE_VAL + }, + { // Entry 825 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 826 + HUGE_VAL, + 0x1.0p-1074, + HUGE_VAL + }, + { // Entry 827 + -HUGE_VAL, + -0x1.0p-1074, + HUGE_VAL + }, + { // Entry 828 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + HUGE_VAL + }, + { // Entry 829 + -HUGE_VAL, + -0x1.0p-1022, + HUGE_VAL + }, + { // Entry 830 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + HUGE_VAL + }, + { // Entry 831 + -HUGE_VAL, + -HUGE_VAL, + HUGE_VAL + }, + { // Entry 832 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 833 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 834 + 0.0, + 0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 835 + HUGE_VAL, + 0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 836 + HUGE_VAL, + 0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 837 + HUGE_VAL, + 0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 838 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.fffffffffffffp1023 + }, + { // Entry 839 + -HUGE_VAL, + -0x1.ffffffffffffep-1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 840 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.fffffffffffffp1023 + }, + { // Entry 841 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 842 + 0.0, + 0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 843 + 0.0, + 0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 844 + 0.0, + 0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 845 + 0.0, + 0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 846 + 0.0, + 0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 847 + 0.0, + 0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 848 + 0.0, + 0.0, + -HUGE_VAL + }, + { // Entry 849 + -0.0, + -0.0, + -HUGE_VAL + }, + { // Entry 850 + -0.0, + -0x1.0p-1074, + -0x1.fffffffffffffp1023 + }, + { // Entry 851 + -0.0, + -0x1.0p-1074, + -HUGE_VAL + }, + { // Entry 852 + -0.0, + -0x1.ffffffffffffep-1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 853 + -0.0, + -0x1.ffffffffffffep-1023, + -HUGE_VAL + }, + { // Entry 854 + -0.0, + -0x1.0p-1022, + -0x1.fffffffffffffp1023 + }, + { // Entry 855 + -0.0, + -0x1.0p-1022, + -HUGE_VAL + }, + { // Entry 856 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 857 + -0.0, + -0x1.fffffffffffffp1023, + -HUGE_VAL + }, + { // Entry 858 + 0.0, + 0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 859 + -0.0, + -0.0, + 0x1.fffffffffffffp1023 + }, + { // Entry 860 + 0.0, + 0.0, + 0.0 + }, + { // Entry 861 + -0.0, + -0.0, + 0.0 + }, + { // Entry 862 + 0.0, + 0.0, + -0.0 + }, + { // Entry 863 + -0.0, + -0.0, + -0.0 + }, + { // Entry 864 + 0.0, + 0.0, + 0x1.0p0 + }, + { // Entry 865 + -0.0, + -0.0, + 0x1.0p0 + }, + { // Entry 866 + 0.0, + 0.0, + -0x1.0p0 + }, + { // Entry 867 + -0.0, + -0.0, + -0x1.0p0 + }, + { // Entry 868 + 0.0, + 0.0, + 0x1.fc0p6 + }, + { // Entry 869 + -0.0, + -0.0, + 0x1.fc0p6 + }, + { // Entry 870 + 0.0, + 0.0, + -0x1.fc0p6 + }, + { // Entry 871 + -0.0, + -0.0, + -0x1.fc0p6 + }, + { // Entry 872 + 0.0, + 0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 873 + -0.0, + -0.0, + -0x1.fffffffffffffp1023 + }, + { // Entry 874 + HUGE_VAL, + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 875 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 876 + HUGE_VAL, + HUGE_VAL, + 0.0 + }, + { // Entry 877 + -HUGE_VAL, + -HUGE_VAL, + 0.0 + }, + { // Entry 878 + HUGE_VAL, + HUGE_VAL, + -0.0 + }, + { // Entry 879 + -HUGE_VAL, + -HUGE_VAL, + -0.0 + }, + { // Entry 880 + HUGE_VAL, + HUGE_VAL, + 0x1.0p0 + }, + { // Entry 881 + -HUGE_VAL, + -HUGE_VAL, + 0x1.0p0 + }, + { // Entry 882 + HUGE_VAL, + HUGE_VAL, + -0x1.0p0 + }, + { // Entry 883 + -HUGE_VAL, + -HUGE_VAL, + -0x1.0p0 + }, + { // Entry 884 + HUGE_VAL, + HUGE_VAL, + 0x1.fc0p6 + }, + { // Entry 885 + -HUGE_VAL, + -HUGE_VAL, + 0x1.fc0p6 + }, + { // Entry 886 + HUGE_VAL, + HUGE_VAL, + -0x1.fc0p6 + }, + { // Entry 887 + -HUGE_VAL, + -HUGE_VAL, + -0x1.fc0p6 + }, + { // Entry 888 + HUGE_VAL, + HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 889 + -HUGE_VAL, + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 890 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 891 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 892 + 0x1.p-1022, + 0x1.0p-1022, + 0.0 + }, + { // Entry 893 + 0x1.p-1022, + 0x1.0p-1022, + -0.0 + }, + { // Entry 894 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 895 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 896 + 0x1.p-1074, + 0x1.0p-1074, + 0.0 + }, + { // Entry 897 + 0x1.p-1074, + 0x1.0p-1074, + -0.0 + }, + { // Entry 898 + -0x1.p-1074, + -0x1.0p-1074, + 0.0 + }, + { // Entry 899 + -0x1.p-1074, + -0x1.0p-1074, + -0.0 + }, + { // Entry 900 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + 0.0 + }, + { // Entry 901 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + -0.0 + }, + { // Entry 902 + -0x1.p-1022, + -0x1.0p-1022, + 0.0 + }, + { // Entry 903 + -0x1.p-1022, + -0x1.0p-1022, + -0.0 + }, + { // Entry 904 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + 0.0 + }, + { // Entry 905 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + -0.0 + }, + { // Entry 906 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.0p0 + }, + { // Entry 907 + HUGE_VAL, + 0x1.fffffffffffffp1023, + 0x1.fc0p6 + }, + { // Entry 908 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.0p0 + }, + { // Entry 909 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + 0x1.fc0p6 + }, + { // Entry 910 + HUGE_VAL, + 0x1.0p-1022, + 0x1.388p15 + }, + { // Entry 911 + HUGE_VAL, + 0x1.0p-1074, + 0x1.388p15 + }, + { // Entry 912 + -HUGE_VAL, + -0x1.0p-1022, + 0x1.388p15 + }, + { // Entry 913 + -HUGE_VAL, + -0x1.0p-1074, + 0x1.388p15 + }, + { // Entry 914 + 0x1.p-1023, + 0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 915 + 0x1.ffffffffffffe0p-1024, + 0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 916 + 0.0, + 0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 917 + -0.0, + -0x1.0p-1074, + -0x1.0p0 + }, + { // Entry 918 + -0x1.ffffffffffffe0p-1024, + -0x1.ffffffffffffep-1023, + -0x1.0p0 + }, + { // Entry 919 + -0x1.p-1023, + -0x1.0p-1022, + -0x1.0p0 + }, + { // Entry 920 + 0.0, + 0x1.fffffffffffffp1023, + -0x1.388p15 + }, + { // Entry 921 + -0.0, + -0x1.fffffffffffffp1023, + -0x1.388p15 + } +}; diff --git a/tests/math_data/scalbf_intel_data.h b/tests/math_data/scalbf_intel_data.h new file mode 100644 index 000000000..cd1d5ef2f --- /dev/null +++ b/tests/math_data/scalbf_intel_data.h @@ -0,0 +1,4588 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_scalbf_intel_data[] = { + { // Entry 0 + -0.0f, + -0x1.p-149, + -0x1.40p3 + }, + { // Entry 1 + -0x1.555554p-128, + -0x1.555554p-2, + -0x1.f8p6 + }, + { // Entry 2 + -0x1.6db6dcp-128, + -0x1.6db6dcp-1, + -0x1.fcp6 + }, + { // Entry 3 + -0x1.8e38e4p-128, + -0x1.8e38e4p-1, + -0x1.fcp6 + }, + { // Entry 4 + 0.0f, + 0x1.p-149, + -0x1.p0 + }, + { // Entry 5 + 0.0f, + 0x1.p-149, + -0x1.40p3 + }, + { // Entry 6 + 0x1.5464b0p-130, + 0x1.5464b0p-2, + -0x1.p7 + }, + { // Entry 7 + 0.0f, + 0x1.dddddep-2, + -0x1.28p7 + }, + { // Entry 8 + 0x1.ecb7e8p-129, + 0x1.ecb7e8p-1, + -0x1.p7 + }, + { // Entry 9 + 0.0f, + 0x1.ffff60p-127, + -0x1.70p4 + }, + { // Entry 10 + 0.0f, + 0x1.ffff84p-127, + -0x1.70p4 + }, + { // Entry 11 + 0x1.fffff8p-137, + 0x1.fffff8p-127, + -0x1.40p3 + }, + { // Entry 12 + 0.0f, + 0x1.fffffep127, + -0x1.p31 + }, + { // Entry 13 + HUGE_VALF, + 0x1.fffffep127, + 0x1.p31 + }, + { // Entry 14 + HUGE_VALF, + 0x1.fffffep127, + 0x1.p31 + }, + { // Entry 15 + -0x1.p-10, + -0x1.p0, + -0x1.40p3 + }, + { // Entry 16 + -0x1.p-9, + -0x1.p0, + -0x1.20p3 + }, + { // Entry 17 + -0x1.p-8, + -0x1.p0, + -0x1.p3 + }, + { // Entry 18 + -0x1.p-7, + -0x1.p0, + -0x1.c0p2 + }, + { // Entry 19 + -0x1.p-6, + -0x1.p0, + -0x1.80p2 + }, + { // Entry 20 + -0x1.p-5, + -0x1.p0, + -0x1.40p2 + }, + { // Entry 21 + -0x1.p-4, + -0x1.p0, + -0x1.p2 + }, + { // Entry 22 + -0x1.p-3, + -0x1.p0, + -0x1.80p1 + }, + { // Entry 23 + -0x1.p-2, + -0x1.p0, + -0x1.p1 + }, + { // Entry 24 + -0x1.p-1, + -0x1.p0, + -0x1.p0 + }, + { // Entry 25 + -0x1.p0, + -0x1.p0, + 0.0 + }, + { // Entry 26 + -0x1.p1, + -0x1.p0, + 0x1.p0 + }, + { // Entry 27 + -0x1.p2, + -0x1.p0, + 0x1.p1 + }, + { // Entry 28 + -0x1.p3, + -0x1.p0, + 0x1.80p1 + }, + { // Entry 29 + -0x1.p4, + -0x1.p0, + 0x1.p2 + }, + { // Entry 30 + -0x1.p5, + -0x1.p0, + 0x1.40p2 + }, + { // Entry 31 + -0x1.p6, + -0x1.p0, + 0x1.80p2 + }, + { // Entry 32 + -0x1.p7, + -0x1.p0, + 0x1.c0p2 + }, + { // Entry 33 + -0x1.p8, + -0x1.p0, + 0x1.p3 + }, + { // Entry 34 + -0x1.p9, + -0x1.p0, + 0x1.20p3 + }, + { // Entry 35 + -0x1.p10, + -0x1.p0, + 0x1.40p3 + }, + { // Entry 36 + -0x1.d1745cp-11, + -0x1.d1745cp-1, + -0x1.40p3 + }, + { // Entry 37 + -0x1.d1745cp-10, + -0x1.d1745cp-1, + -0x1.20p3 + }, + { // Entry 38 + -0x1.d1745cp-9, + -0x1.d1745cp-1, + -0x1.p3 + }, + { // Entry 39 + -0x1.d1745cp-8, + -0x1.d1745cp-1, + -0x1.c0p2 + }, + { // Entry 40 + -0x1.d1745cp-7, + -0x1.d1745cp-1, + -0x1.80p2 + }, + { // Entry 41 + -0x1.d1745cp-6, + -0x1.d1745cp-1, + -0x1.40p2 + }, + { // Entry 42 + -0x1.d1745cp-5, + -0x1.d1745cp-1, + -0x1.p2 + }, + { // Entry 43 + -0x1.d1745cp-4, + -0x1.d1745cp-1, + -0x1.80p1 + }, + { // Entry 44 + -0x1.d1745cp-3, + -0x1.d1745cp-1, + -0x1.p1 + }, + { // Entry 45 + -0x1.d1745cp-2, + -0x1.d1745cp-1, + -0x1.p0 + }, + { // Entry 46 + -0x1.d1745cp-1, + -0x1.d1745cp-1, + 0.0 + }, + { // Entry 47 + -0x1.d1745cp0, + -0x1.d1745cp-1, + 0x1.p0 + }, + { // Entry 48 + -0x1.d1745cp1, + -0x1.d1745cp-1, + 0x1.p1 + }, + { // Entry 49 + -0x1.d1745cp2, + -0x1.d1745cp-1, + 0x1.80p1 + }, + { // Entry 50 + -0x1.d1745cp3, + -0x1.d1745cp-1, + 0x1.p2 + }, + { // Entry 51 + -0x1.d1745cp4, + -0x1.d1745cp-1, + 0x1.40p2 + }, + { // Entry 52 + -0x1.d1745cp5, + -0x1.d1745cp-1, + 0x1.80p2 + }, + { // Entry 53 + -0x1.d1745cp6, + -0x1.d1745cp-1, + 0x1.c0p2 + }, + { // Entry 54 + -0x1.d1745cp7, + -0x1.d1745cp-1, + 0x1.p3 + }, + { // Entry 55 + -0x1.d1745cp8, + -0x1.d1745cp-1, + 0x1.20p3 + }, + { // Entry 56 + -0x1.d1745cp9, + -0x1.d1745cp-1, + 0x1.40p3 + }, + { // Entry 57 + -0x1.a2e8b8p-11, + -0x1.a2e8b8p-1, + -0x1.40p3 + }, + { // Entry 58 + -0x1.a2e8b8p-10, + -0x1.a2e8b8p-1, + -0x1.20p3 + }, + { // Entry 59 + -0x1.a2e8b8p-9, + -0x1.a2e8b8p-1, + -0x1.p3 + }, + { // Entry 60 + -0x1.a2e8b8p-8, + -0x1.a2e8b8p-1, + -0x1.c0p2 + }, + { // Entry 61 + -0x1.a2e8b8p-7, + -0x1.a2e8b8p-1, + -0x1.80p2 + }, + { // Entry 62 + -0x1.a2e8b8p-6, + -0x1.a2e8b8p-1, + -0x1.40p2 + }, + { // Entry 63 + -0x1.a2e8b8p-5, + -0x1.a2e8b8p-1, + -0x1.p2 + }, + { // Entry 64 + -0x1.a2e8b8p-4, + -0x1.a2e8b8p-1, + -0x1.80p1 + }, + { // Entry 65 + -0x1.a2e8b8p-3, + -0x1.a2e8b8p-1, + -0x1.p1 + }, + { // Entry 66 + -0x1.a2e8b8p-2, + -0x1.a2e8b8p-1, + -0x1.p0 + }, + { // Entry 67 + -0x1.a2e8b8p-1, + -0x1.a2e8b8p-1, + 0.0 + }, + { // Entry 68 + -0x1.a2e8b8p0, + -0x1.a2e8b8p-1, + 0x1.p0 + }, + { // Entry 69 + -0x1.a2e8b8p1, + -0x1.a2e8b8p-1, + 0x1.p1 + }, + { // Entry 70 + -0x1.a2e8b8p2, + -0x1.a2e8b8p-1, + 0x1.80p1 + }, + { // Entry 71 + -0x1.a2e8b8p3, + -0x1.a2e8b8p-1, + 0x1.p2 + }, + { // Entry 72 + -0x1.a2e8b8p4, + -0x1.a2e8b8p-1, + 0x1.40p2 + }, + { // Entry 73 + -0x1.a2e8b8p5, + -0x1.a2e8b8p-1, + 0x1.80p2 + }, + { // Entry 74 + -0x1.a2e8b8p6, + -0x1.a2e8b8p-1, + 0x1.c0p2 + }, + { // Entry 75 + -0x1.a2e8b8p7, + -0x1.a2e8b8p-1, + 0x1.p3 + }, + { // Entry 76 + -0x1.a2e8b8p8, + -0x1.a2e8b8p-1, + 0x1.20p3 + }, + { // Entry 77 + -0x1.a2e8b8p9, + -0x1.a2e8b8p-1, + 0x1.40p3 + }, + { // Entry 78 + -0x1.745d14p-11, + -0x1.745d14p-1, + -0x1.40p3 + }, + { // Entry 79 + -0x1.745d14p-10, + -0x1.745d14p-1, + -0x1.20p3 + }, + { // Entry 80 + -0x1.745d14p-9, + -0x1.745d14p-1, + -0x1.p3 + }, + { // Entry 81 + -0x1.745d14p-8, + -0x1.745d14p-1, + -0x1.c0p2 + }, + { // Entry 82 + -0x1.745d14p-7, + -0x1.745d14p-1, + -0x1.80p2 + }, + { // Entry 83 + -0x1.745d14p-6, + -0x1.745d14p-1, + -0x1.40p2 + }, + { // Entry 84 + -0x1.745d14p-5, + -0x1.745d14p-1, + -0x1.p2 + }, + { // Entry 85 + -0x1.745d14p-4, + -0x1.745d14p-1, + -0x1.80p1 + }, + { // Entry 86 + -0x1.745d14p-3, + -0x1.745d14p-1, + -0x1.p1 + }, + { // Entry 87 + -0x1.745d14p-2, + -0x1.745d14p-1, + -0x1.p0 + }, + { // Entry 88 + -0x1.745d14p-1, + -0x1.745d14p-1, + 0.0 + }, + { // Entry 89 + -0x1.745d14p0, + -0x1.745d14p-1, + 0x1.p0 + }, + { // Entry 90 + -0x1.745d14p1, + -0x1.745d14p-1, + 0x1.p1 + }, + { // Entry 91 + -0x1.745d14p2, + -0x1.745d14p-1, + 0x1.80p1 + }, + { // Entry 92 + -0x1.745d14p3, + -0x1.745d14p-1, + 0x1.p2 + }, + { // Entry 93 + -0x1.745d14p4, + -0x1.745d14p-1, + 0x1.40p2 + }, + { // Entry 94 + -0x1.745d14p5, + -0x1.745d14p-1, + 0x1.80p2 + }, + { // Entry 95 + -0x1.745d14p6, + -0x1.745d14p-1, + 0x1.c0p2 + }, + { // Entry 96 + -0x1.745d14p7, + -0x1.745d14p-1, + 0x1.p3 + }, + { // Entry 97 + -0x1.745d14p8, + -0x1.745d14p-1, + 0x1.20p3 + }, + { // Entry 98 + -0x1.745d14p9, + -0x1.745d14p-1, + 0x1.40p3 + }, + { // Entry 99 + -0x1.45d170p-11, + -0x1.45d170p-1, + -0x1.40p3 + }, + { // Entry 100 + -0x1.45d170p-10, + -0x1.45d170p-1, + -0x1.20p3 + }, + { // Entry 101 + -0x1.45d170p-9, + -0x1.45d170p-1, + -0x1.p3 + }, + { // Entry 102 + -0x1.45d170p-8, + -0x1.45d170p-1, + -0x1.c0p2 + }, + { // Entry 103 + -0x1.45d170p-7, + -0x1.45d170p-1, + -0x1.80p2 + }, + { // Entry 104 + -0x1.45d170p-6, + -0x1.45d170p-1, + -0x1.40p2 + }, + { // Entry 105 + -0x1.45d170p-5, + -0x1.45d170p-1, + -0x1.p2 + }, + { // Entry 106 + -0x1.45d170p-4, + -0x1.45d170p-1, + -0x1.80p1 + }, + { // Entry 107 + -0x1.45d170p-3, + -0x1.45d170p-1, + -0x1.p1 + }, + { // Entry 108 + -0x1.45d170p-2, + -0x1.45d170p-1, + -0x1.p0 + }, + { // Entry 109 + -0x1.45d170p-1, + -0x1.45d170p-1, + 0.0 + }, + { // Entry 110 + -0x1.45d170p0, + -0x1.45d170p-1, + 0x1.p0 + }, + { // Entry 111 + -0x1.45d170p1, + -0x1.45d170p-1, + 0x1.p1 + }, + { // Entry 112 + -0x1.45d170p2, + -0x1.45d170p-1, + 0x1.80p1 + }, + { // Entry 113 + -0x1.45d170p3, + -0x1.45d170p-1, + 0x1.p2 + }, + { // Entry 114 + -0x1.45d170p4, + -0x1.45d170p-1, + 0x1.40p2 + }, + { // Entry 115 + -0x1.45d170p5, + -0x1.45d170p-1, + 0x1.80p2 + }, + { // Entry 116 + -0x1.45d170p6, + -0x1.45d170p-1, + 0x1.c0p2 + }, + { // Entry 117 + -0x1.45d170p7, + -0x1.45d170p-1, + 0x1.p3 + }, + { // Entry 118 + -0x1.45d170p8, + -0x1.45d170p-1, + 0x1.20p3 + }, + { // Entry 119 + -0x1.45d170p9, + -0x1.45d170p-1, + 0x1.40p3 + }, + { // Entry 120 + -0x1.1745ccp-11, + -0x1.1745ccp-1, + -0x1.40p3 + }, + { // Entry 121 + -0x1.1745ccp-10, + -0x1.1745ccp-1, + -0x1.20p3 + }, + { // Entry 122 + -0x1.1745ccp-9, + -0x1.1745ccp-1, + -0x1.p3 + }, + { // Entry 123 + -0x1.1745ccp-8, + -0x1.1745ccp-1, + -0x1.c0p2 + }, + { // Entry 124 + -0x1.1745ccp-7, + -0x1.1745ccp-1, + -0x1.80p2 + }, + { // Entry 125 + -0x1.1745ccp-6, + -0x1.1745ccp-1, + -0x1.40p2 + }, + { // Entry 126 + -0x1.1745ccp-5, + -0x1.1745ccp-1, + -0x1.p2 + }, + { // Entry 127 + -0x1.1745ccp-4, + -0x1.1745ccp-1, + -0x1.80p1 + }, + { // Entry 128 + -0x1.1745ccp-3, + -0x1.1745ccp-1, + -0x1.p1 + }, + { // Entry 129 + -0x1.1745ccp-2, + -0x1.1745ccp-1, + -0x1.p0 + }, + { // Entry 130 + -0x1.1745ccp-1, + -0x1.1745ccp-1, + 0.0 + }, + { // Entry 131 + -0x1.1745ccp0, + -0x1.1745ccp-1, + 0x1.p0 + }, + { // Entry 132 + -0x1.1745ccp1, + -0x1.1745ccp-1, + 0x1.p1 + }, + { // Entry 133 + -0x1.1745ccp2, + -0x1.1745ccp-1, + 0x1.80p1 + }, + { // Entry 134 + -0x1.1745ccp3, + -0x1.1745ccp-1, + 0x1.p2 + }, + { // Entry 135 + -0x1.1745ccp4, + -0x1.1745ccp-1, + 0x1.40p2 + }, + { // Entry 136 + -0x1.1745ccp5, + -0x1.1745ccp-1, + 0x1.80p2 + }, + { // Entry 137 + -0x1.1745ccp6, + -0x1.1745ccp-1, + 0x1.c0p2 + }, + { // Entry 138 + -0x1.1745ccp7, + -0x1.1745ccp-1, + 0x1.p3 + }, + { // Entry 139 + -0x1.1745ccp8, + -0x1.1745ccp-1, + 0x1.20p3 + }, + { // Entry 140 + -0x1.1745ccp9, + -0x1.1745ccp-1, + 0x1.40p3 + }, + { // Entry 141 + -0x1.d17452p-12, + -0x1.d17452p-2, + -0x1.40p3 + }, + { // Entry 142 + -0x1.d17452p-11, + -0x1.d17452p-2, + -0x1.20p3 + }, + { // Entry 143 + -0x1.d17452p-10, + -0x1.d17452p-2, + -0x1.p3 + }, + { // Entry 144 + -0x1.d17452p-9, + -0x1.d17452p-2, + -0x1.c0p2 + }, + { // Entry 145 + -0x1.d17452p-8, + -0x1.d17452p-2, + -0x1.80p2 + }, + { // Entry 146 + -0x1.d17452p-7, + -0x1.d17452p-2, + -0x1.40p2 + }, + { // Entry 147 + -0x1.d17452p-6, + -0x1.d17452p-2, + -0x1.p2 + }, + { // Entry 148 + -0x1.d17452p-5, + -0x1.d17452p-2, + -0x1.80p1 + }, + { // Entry 149 + -0x1.d17452p-4, + -0x1.d17452p-2, + -0x1.p1 + }, + { // Entry 150 + -0x1.d17452p-3, + -0x1.d17452p-2, + -0x1.p0 + }, + { // Entry 151 + -0x1.d17452p-2, + -0x1.d17452p-2, + 0.0 + }, + { // Entry 152 + -0x1.d17452p-1, + -0x1.d17452p-2, + 0x1.p0 + }, + { // Entry 153 + -0x1.d17452p0, + -0x1.d17452p-2, + 0x1.p1 + }, + { // Entry 154 + -0x1.d17452p1, + -0x1.d17452p-2, + 0x1.80p1 + }, + { // Entry 155 + -0x1.d17452p2, + -0x1.d17452p-2, + 0x1.p2 + }, + { // Entry 156 + -0x1.d17452p3, + -0x1.d17452p-2, + 0x1.40p2 + }, + { // Entry 157 + -0x1.d17452p4, + -0x1.d17452p-2, + 0x1.80p2 + }, + { // Entry 158 + -0x1.d17452p5, + -0x1.d17452p-2, + 0x1.c0p2 + }, + { // Entry 159 + -0x1.d17452p6, + -0x1.d17452p-2, + 0x1.p3 + }, + { // Entry 160 + -0x1.d17452p7, + -0x1.d17452p-2, + 0x1.20p3 + }, + { // Entry 161 + -0x1.d17452p8, + -0x1.d17452p-2, + 0x1.40p3 + }, + { // Entry 162 + -0x1.745d0cp-12, + -0x1.745d0cp-2, + -0x1.40p3 + }, + { // Entry 163 + -0x1.745d0cp-11, + -0x1.745d0cp-2, + -0x1.20p3 + }, + { // Entry 164 + -0x1.745d0cp-10, + -0x1.745d0cp-2, + -0x1.p3 + }, + { // Entry 165 + -0x1.745d0cp-9, + -0x1.745d0cp-2, + -0x1.c0p2 + }, + { // Entry 166 + -0x1.745d0cp-8, + -0x1.745d0cp-2, + -0x1.80p2 + }, + { // Entry 167 + -0x1.745d0cp-7, + -0x1.745d0cp-2, + -0x1.40p2 + }, + { // Entry 168 + -0x1.745d0cp-6, + -0x1.745d0cp-2, + -0x1.p2 + }, + { // Entry 169 + -0x1.745d0cp-5, + -0x1.745d0cp-2, + -0x1.80p1 + }, + { // Entry 170 + -0x1.745d0cp-4, + -0x1.745d0cp-2, + -0x1.p1 + }, + { // Entry 171 + -0x1.745d0cp-3, + -0x1.745d0cp-2, + -0x1.p0 + }, + { // Entry 172 + -0x1.745d0cp-2, + -0x1.745d0cp-2, + 0.0 + }, + { // Entry 173 + -0x1.745d0cp-1, + -0x1.745d0cp-2, + 0x1.p0 + }, + { // Entry 174 + -0x1.745d0cp0, + -0x1.745d0cp-2, + 0x1.p1 + }, + { // Entry 175 + -0x1.745d0cp1, + -0x1.745d0cp-2, + 0x1.80p1 + }, + { // Entry 176 + -0x1.745d0cp2, + -0x1.745d0cp-2, + 0x1.p2 + }, + { // Entry 177 + -0x1.745d0cp3, + -0x1.745d0cp-2, + 0x1.40p2 + }, + { // Entry 178 + -0x1.745d0cp4, + -0x1.745d0cp-2, + 0x1.80p2 + }, + { // Entry 179 + -0x1.745d0cp5, + -0x1.745d0cp-2, + 0x1.c0p2 + }, + { // Entry 180 + -0x1.745d0cp6, + -0x1.745d0cp-2, + 0x1.p3 + }, + { // Entry 181 + -0x1.745d0cp7, + -0x1.745d0cp-2, + 0x1.20p3 + }, + { // Entry 182 + -0x1.745d0cp8, + -0x1.745d0cp-2, + 0x1.40p3 + }, + { // Entry 183 + -0x1.1745c6p-12, + -0x1.1745c6p-2, + -0x1.40p3 + }, + { // Entry 184 + -0x1.1745c6p-11, + -0x1.1745c6p-2, + -0x1.20p3 + }, + { // Entry 185 + -0x1.1745c6p-10, + -0x1.1745c6p-2, + -0x1.p3 + }, + { // Entry 186 + -0x1.1745c6p-9, + -0x1.1745c6p-2, + -0x1.c0p2 + }, + { // Entry 187 + -0x1.1745c6p-8, + -0x1.1745c6p-2, + -0x1.80p2 + }, + { // Entry 188 + -0x1.1745c6p-7, + -0x1.1745c6p-2, + -0x1.40p2 + }, + { // Entry 189 + -0x1.1745c6p-6, + -0x1.1745c6p-2, + -0x1.p2 + }, + { // Entry 190 + -0x1.1745c6p-5, + -0x1.1745c6p-2, + -0x1.80p1 + }, + { // Entry 191 + -0x1.1745c6p-4, + -0x1.1745c6p-2, + -0x1.p1 + }, + { // Entry 192 + -0x1.1745c6p-3, + -0x1.1745c6p-2, + -0x1.p0 + }, + { // Entry 193 + -0x1.1745c6p-2, + -0x1.1745c6p-2, + 0.0 + }, + { // Entry 194 + -0x1.1745c6p-1, + -0x1.1745c6p-2, + 0x1.p0 + }, + { // Entry 195 + -0x1.1745c6p0, + -0x1.1745c6p-2, + 0x1.p1 + }, + { // Entry 196 + -0x1.1745c6p1, + -0x1.1745c6p-2, + 0x1.80p1 + }, + { // Entry 197 + -0x1.1745c6p2, + -0x1.1745c6p-2, + 0x1.p2 + }, + { // Entry 198 + -0x1.1745c6p3, + -0x1.1745c6p-2, + 0x1.40p2 + }, + { // Entry 199 + -0x1.1745c6p4, + -0x1.1745c6p-2, + 0x1.80p2 + }, + { // Entry 200 + -0x1.1745c6p5, + -0x1.1745c6p-2, + 0x1.c0p2 + }, + { // Entry 201 + -0x1.1745c6p6, + -0x1.1745c6p-2, + 0x1.p3 + }, + { // Entry 202 + -0x1.1745c6p7, + -0x1.1745c6p-2, + 0x1.20p3 + }, + { // Entry 203 + -0x1.1745c6p8, + -0x1.1745c6p-2, + 0x1.40p3 + }, + { // Entry 204 + -0x1.745dp-13, + -0x1.745dp-3, + -0x1.40p3 + }, + { // Entry 205 + -0x1.745dp-12, + -0x1.745dp-3, + -0x1.20p3 + }, + { // Entry 206 + -0x1.745dp-11, + -0x1.745dp-3, + -0x1.p3 + }, + { // Entry 207 + -0x1.745dp-10, + -0x1.745dp-3, + -0x1.c0p2 + }, + { // Entry 208 + -0x1.745dp-9, + -0x1.745dp-3, + -0x1.80p2 + }, + { // Entry 209 + -0x1.745dp-8, + -0x1.745dp-3, + -0x1.40p2 + }, + { // Entry 210 + -0x1.745dp-7, + -0x1.745dp-3, + -0x1.p2 + }, + { // Entry 211 + -0x1.745dp-6, + -0x1.745dp-3, + -0x1.80p1 + }, + { // Entry 212 + -0x1.745dp-5, + -0x1.745dp-3, + -0x1.p1 + }, + { // Entry 213 + -0x1.745dp-4, + -0x1.745dp-3, + -0x1.p0 + }, + { // Entry 214 + -0x1.745dp-3, + -0x1.745dp-3, + 0.0 + }, + { // Entry 215 + -0x1.745dp-2, + -0x1.745dp-3, + 0x1.p0 + }, + { // Entry 216 + -0x1.745dp-1, + -0x1.745dp-3, + 0x1.p1 + }, + { // Entry 217 + -0x1.745dp0, + -0x1.745dp-3, + 0x1.80p1 + }, + { // Entry 218 + -0x1.745dp1, + -0x1.745dp-3, + 0x1.p2 + }, + { // Entry 219 + -0x1.745dp2, + -0x1.745dp-3, + 0x1.40p2 + }, + { // Entry 220 + -0x1.745dp3, + -0x1.745dp-3, + 0x1.80p2 + }, + { // Entry 221 + -0x1.745dp4, + -0x1.745dp-3, + 0x1.c0p2 + }, + { // Entry 222 + -0x1.745dp5, + -0x1.745dp-3, + 0x1.p3 + }, + { // Entry 223 + -0x1.745dp6, + -0x1.745dp-3, + 0x1.20p3 + }, + { // Entry 224 + -0x1.745dp7, + -0x1.745dp-3, + 0x1.40p3 + }, + { // Entry 225 + -0x1.745ce8p-14, + -0x1.745ce8p-4, + -0x1.40p3 + }, + { // Entry 226 + -0x1.745ce8p-13, + -0x1.745ce8p-4, + -0x1.20p3 + }, + { // Entry 227 + -0x1.745ce8p-12, + -0x1.745ce8p-4, + -0x1.p3 + }, + { // Entry 228 + -0x1.745ce8p-11, + -0x1.745ce8p-4, + -0x1.c0p2 + }, + { // Entry 229 + -0x1.745ce8p-10, + -0x1.745ce8p-4, + -0x1.80p2 + }, + { // Entry 230 + -0x1.745ce8p-9, + -0x1.745ce8p-4, + -0x1.40p2 + }, + { // Entry 231 + -0x1.745ce8p-8, + -0x1.745ce8p-4, + -0x1.p2 + }, + { // Entry 232 + -0x1.745ce8p-7, + -0x1.745ce8p-4, + -0x1.80p1 + }, + { // Entry 233 + -0x1.745ce8p-6, + -0x1.745ce8p-4, + -0x1.p1 + }, + { // Entry 234 + -0x1.745ce8p-5, + -0x1.745ce8p-4, + -0x1.p0 + }, + { // Entry 235 + -0x1.745ce8p-4, + -0x1.745ce8p-4, + 0.0 + }, + { // Entry 236 + -0x1.745ce8p-3, + -0x1.745ce8p-4, + 0x1.p0 + }, + { // Entry 237 + -0x1.745ce8p-2, + -0x1.745ce8p-4, + 0x1.p1 + }, + { // Entry 238 + -0x1.745ce8p-1, + -0x1.745ce8p-4, + 0x1.80p1 + }, + { // Entry 239 + -0x1.745ce8p0, + -0x1.745ce8p-4, + 0x1.p2 + }, + { // Entry 240 + -0x1.745ce8p1, + -0x1.745ce8p-4, + 0x1.40p2 + }, + { // Entry 241 + -0x1.745ce8p2, + -0x1.745ce8p-4, + 0x1.80p2 + }, + { // Entry 242 + -0x1.745ce8p3, + -0x1.745ce8p-4, + 0x1.c0p2 + }, + { // Entry 243 + -0x1.745ce8p4, + -0x1.745ce8p-4, + 0x1.p3 + }, + { // Entry 244 + -0x1.745ce8p5, + -0x1.745ce8p-4, + 0x1.20p3 + }, + { // Entry 245 + -0x1.745ce8p6, + -0x1.745ce8p-4, + 0x1.40p3 + }, + { // Entry 246 + 0x1.80p-33, + 0x1.80p-23, + -0x1.40p3 + }, + { // Entry 247 + 0x1.80p-32, + 0x1.80p-23, + -0x1.20p3 + }, + { // Entry 248 + 0x1.80p-31, + 0x1.80p-23, + -0x1.p3 + }, + { // Entry 249 + 0x1.80p-30, + 0x1.80p-23, + -0x1.c0p2 + }, + { // Entry 250 + 0x1.80p-29, + 0x1.80p-23, + -0x1.80p2 + }, + { // Entry 251 + 0x1.80p-28, + 0x1.80p-23, + -0x1.40p2 + }, + { // Entry 252 + 0x1.80p-27, + 0x1.80p-23, + -0x1.p2 + }, + { // Entry 253 + 0x1.80p-26, + 0x1.80p-23, + -0x1.80p1 + }, + { // Entry 254 + 0x1.80p-25, + 0x1.80p-23, + -0x1.p1 + }, + { // Entry 255 + 0x1.80p-24, + 0x1.80p-23, + -0x1.p0 + }, + { // Entry 256 + 0x1.80p-23, + 0x1.80p-23, + 0.0 + }, + { // Entry 257 + 0x1.80p-22, + 0x1.80p-23, + 0x1.p0 + }, + { // Entry 258 + 0x1.80p-21, + 0x1.80p-23, + 0x1.p1 + }, + { // Entry 259 + 0x1.80p-20, + 0x1.80p-23, + 0x1.80p1 + }, + { // Entry 260 + 0x1.80p-19, + 0x1.80p-23, + 0x1.p2 + }, + { // Entry 261 + 0x1.80p-18, + 0x1.80p-23, + 0x1.40p2 + }, + { // Entry 262 + 0x1.80p-17, + 0x1.80p-23, + 0x1.80p2 + }, + { // Entry 263 + 0x1.80p-16, + 0x1.80p-23, + 0x1.c0p2 + }, + { // Entry 264 + 0x1.80p-15, + 0x1.80p-23, + 0x1.p3 + }, + { // Entry 265 + 0x1.80p-14, + 0x1.80p-23, + 0x1.20p3 + }, + { // Entry 266 + 0x1.80p-13, + 0x1.80p-23, + 0x1.40p3 + }, + { // Entry 267 + 0x1.745d48p-14, + 0x1.745d48p-4, + -0x1.40p3 + }, + { // Entry 268 + 0x1.745d48p-13, + 0x1.745d48p-4, + -0x1.20p3 + }, + { // Entry 269 + 0x1.745d48p-12, + 0x1.745d48p-4, + -0x1.p3 + }, + { // Entry 270 + 0x1.745d48p-11, + 0x1.745d48p-4, + -0x1.c0p2 + }, + { // Entry 271 + 0x1.745d48p-10, + 0x1.745d48p-4, + -0x1.80p2 + }, + { // Entry 272 + 0x1.745d48p-9, + 0x1.745d48p-4, + -0x1.40p2 + }, + { // Entry 273 + 0x1.745d48p-8, + 0x1.745d48p-4, + -0x1.p2 + }, + { // Entry 274 + 0x1.745d48p-7, + 0x1.745d48p-4, + -0x1.80p1 + }, + { // Entry 275 + 0x1.745d48p-6, + 0x1.745d48p-4, + -0x1.p1 + }, + { // Entry 276 + 0x1.745d48p-5, + 0x1.745d48p-4, + -0x1.p0 + }, + { // Entry 277 + 0x1.745d48p-4, + 0x1.745d48p-4, + 0.0 + }, + { // Entry 278 + 0x1.745d48p-3, + 0x1.745d48p-4, + 0x1.p0 + }, + { // Entry 279 + 0x1.745d48p-2, + 0x1.745d48p-4, + 0x1.p1 + }, + { // Entry 280 + 0x1.745d48p-1, + 0x1.745d48p-4, + 0x1.80p1 + }, + { // Entry 281 + 0x1.745d48p0, + 0x1.745d48p-4, + 0x1.p2 + }, + { // Entry 282 + 0x1.745d48p1, + 0x1.745d48p-4, + 0x1.40p2 + }, + { // Entry 283 + 0x1.745d48p2, + 0x1.745d48p-4, + 0x1.80p2 + }, + { // Entry 284 + 0x1.745d48p3, + 0x1.745d48p-4, + 0x1.c0p2 + }, + { // Entry 285 + 0x1.745d48p4, + 0x1.745d48p-4, + 0x1.p3 + }, + { // Entry 286 + 0x1.745d48p5, + 0x1.745d48p-4, + 0x1.20p3 + }, + { // Entry 287 + 0x1.745d48p6, + 0x1.745d48p-4, + 0x1.40p3 + }, + { // Entry 288 + 0x1.745d30p-13, + 0x1.745d30p-3, + -0x1.40p3 + }, + { // Entry 289 + 0x1.745d30p-12, + 0x1.745d30p-3, + -0x1.20p3 + }, + { // Entry 290 + 0x1.745d30p-11, + 0x1.745d30p-3, + -0x1.p3 + }, + { // Entry 291 + 0x1.745d30p-10, + 0x1.745d30p-3, + -0x1.c0p2 + }, + { // Entry 292 + 0x1.745d30p-9, + 0x1.745d30p-3, + -0x1.80p2 + }, + { // Entry 293 + 0x1.745d30p-8, + 0x1.745d30p-3, + -0x1.40p2 + }, + { // Entry 294 + 0x1.745d30p-7, + 0x1.745d30p-3, + -0x1.p2 + }, + { // Entry 295 + 0x1.745d30p-6, + 0x1.745d30p-3, + -0x1.80p1 + }, + { // Entry 296 + 0x1.745d30p-5, + 0x1.745d30p-3, + -0x1.p1 + }, + { // Entry 297 + 0x1.745d30p-4, + 0x1.745d30p-3, + -0x1.p0 + }, + { // Entry 298 + 0x1.745d30p-3, + 0x1.745d30p-3, + 0.0 + }, + { // Entry 299 + 0x1.745d30p-2, + 0x1.745d30p-3, + 0x1.p0 + }, + { // Entry 300 + 0x1.745d30p-1, + 0x1.745d30p-3, + 0x1.p1 + }, + { // Entry 301 + 0x1.745d30p0, + 0x1.745d30p-3, + 0x1.80p1 + }, + { // Entry 302 + 0x1.745d30p1, + 0x1.745d30p-3, + 0x1.p2 + }, + { // Entry 303 + 0x1.745d30p2, + 0x1.745d30p-3, + 0x1.40p2 + }, + { // Entry 304 + 0x1.745d30p3, + 0x1.745d30p-3, + 0x1.80p2 + }, + { // Entry 305 + 0x1.745d30p4, + 0x1.745d30p-3, + 0x1.c0p2 + }, + { // Entry 306 + 0x1.745d30p5, + 0x1.745d30p-3, + 0x1.p3 + }, + { // Entry 307 + 0x1.745d30p6, + 0x1.745d30p-3, + 0x1.20p3 + }, + { // Entry 308 + 0x1.745d30p7, + 0x1.745d30p-3, + 0x1.40p3 + }, + { // Entry 309 + 0x1.1745dep-12, + 0x1.1745dep-2, + -0x1.40p3 + }, + { // Entry 310 + 0x1.1745dep-11, + 0x1.1745dep-2, + -0x1.20p3 + }, + { // Entry 311 + 0x1.1745dep-10, + 0x1.1745dep-2, + -0x1.p3 + }, + { // Entry 312 + 0x1.1745dep-9, + 0x1.1745dep-2, + -0x1.c0p2 + }, + { // Entry 313 + 0x1.1745dep-8, + 0x1.1745dep-2, + -0x1.80p2 + }, + { // Entry 314 + 0x1.1745dep-7, + 0x1.1745dep-2, + -0x1.40p2 + }, + { // Entry 315 + 0x1.1745dep-6, + 0x1.1745dep-2, + -0x1.p2 + }, + { // Entry 316 + 0x1.1745dep-5, + 0x1.1745dep-2, + -0x1.80p1 + }, + { // Entry 317 + 0x1.1745dep-4, + 0x1.1745dep-2, + -0x1.p1 + }, + { // Entry 318 + 0x1.1745dep-3, + 0x1.1745dep-2, + -0x1.p0 + }, + { // Entry 319 + 0x1.1745dep-2, + 0x1.1745dep-2, + 0.0 + }, + { // Entry 320 + 0x1.1745dep-1, + 0x1.1745dep-2, + 0x1.p0 + }, + { // Entry 321 + 0x1.1745dep0, + 0x1.1745dep-2, + 0x1.p1 + }, + { // Entry 322 + 0x1.1745dep1, + 0x1.1745dep-2, + 0x1.80p1 + }, + { // Entry 323 + 0x1.1745dep2, + 0x1.1745dep-2, + 0x1.p2 + }, + { // Entry 324 + 0x1.1745dep3, + 0x1.1745dep-2, + 0x1.40p2 + }, + { // Entry 325 + 0x1.1745dep4, + 0x1.1745dep-2, + 0x1.80p2 + }, + { // Entry 326 + 0x1.1745dep5, + 0x1.1745dep-2, + 0x1.c0p2 + }, + { // Entry 327 + 0x1.1745dep6, + 0x1.1745dep-2, + 0x1.p3 + }, + { // Entry 328 + 0x1.1745dep7, + 0x1.1745dep-2, + 0x1.20p3 + }, + { // Entry 329 + 0x1.1745dep8, + 0x1.1745dep-2, + 0x1.40p3 + }, + { // Entry 330 + 0x1.745d24p-12, + 0x1.745d24p-2, + -0x1.40p3 + }, + { // Entry 331 + 0x1.745d24p-11, + 0x1.745d24p-2, + -0x1.20p3 + }, + { // Entry 332 + 0x1.745d24p-10, + 0x1.745d24p-2, + -0x1.p3 + }, + { // Entry 333 + 0x1.745d24p-9, + 0x1.745d24p-2, + -0x1.c0p2 + }, + { // Entry 334 + 0x1.745d24p-8, + 0x1.745d24p-2, + -0x1.80p2 + }, + { // Entry 335 + 0x1.745d24p-7, + 0x1.745d24p-2, + -0x1.40p2 + }, + { // Entry 336 + 0x1.745d24p-6, + 0x1.745d24p-2, + -0x1.p2 + }, + { // Entry 337 + 0x1.745d24p-5, + 0x1.745d24p-2, + -0x1.80p1 + }, + { // Entry 338 + 0x1.745d24p-4, + 0x1.745d24p-2, + -0x1.p1 + }, + { // Entry 339 + 0x1.745d24p-3, + 0x1.745d24p-2, + -0x1.p0 + }, + { // Entry 340 + 0x1.745d24p-2, + 0x1.745d24p-2, + 0.0 + }, + { // Entry 341 + 0x1.745d24p-1, + 0x1.745d24p-2, + 0x1.p0 + }, + { // Entry 342 + 0x1.745d24p0, + 0x1.745d24p-2, + 0x1.p1 + }, + { // Entry 343 + 0x1.745d24p1, + 0x1.745d24p-2, + 0x1.80p1 + }, + { // Entry 344 + 0x1.745d24p2, + 0x1.745d24p-2, + 0x1.p2 + }, + { // Entry 345 + 0x1.745d24p3, + 0x1.745d24p-2, + 0x1.40p2 + }, + { // Entry 346 + 0x1.745d24p4, + 0x1.745d24p-2, + 0x1.80p2 + }, + { // Entry 347 + 0x1.745d24p5, + 0x1.745d24p-2, + 0x1.c0p2 + }, + { // Entry 348 + 0x1.745d24p6, + 0x1.745d24p-2, + 0x1.p3 + }, + { // Entry 349 + 0x1.745d24p7, + 0x1.745d24p-2, + 0x1.20p3 + }, + { // Entry 350 + 0x1.745d24p8, + 0x1.745d24p-2, + 0x1.40p3 + }, + { // Entry 351 + 0x1.d1746ap-12, + 0x1.d1746ap-2, + -0x1.40p3 + }, + { // Entry 352 + 0x1.d1746ap-11, + 0x1.d1746ap-2, + -0x1.20p3 + }, + { // Entry 353 + 0x1.d1746ap-10, + 0x1.d1746ap-2, + -0x1.p3 + }, + { // Entry 354 + 0x1.d1746ap-9, + 0x1.d1746ap-2, + -0x1.c0p2 + }, + { // Entry 355 + 0x1.d1746ap-8, + 0x1.d1746ap-2, + -0x1.80p2 + }, + { // Entry 356 + 0x1.d1746ap-7, + 0x1.d1746ap-2, + -0x1.40p2 + }, + { // Entry 357 + 0x1.d1746ap-6, + 0x1.d1746ap-2, + -0x1.p2 + }, + { // Entry 358 + 0x1.d1746ap-5, + 0x1.d1746ap-2, + -0x1.80p1 + }, + { // Entry 359 + 0x1.d1746ap-4, + 0x1.d1746ap-2, + -0x1.p1 + }, + { // Entry 360 + 0x1.d1746ap-3, + 0x1.d1746ap-2, + -0x1.p0 + }, + { // Entry 361 + 0x1.d1746ap-2, + 0x1.d1746ap-2, + 0.0 + }, + { // Entry 362 + 0x1.d1746ap-1, + 0x1.d1746ap-2, + 0x1.p0 + }, + { // Entry 363 + 0x1.d1746ap0, + 0x1.d1746ap-2, + 0x1.p1 + }, + { // Entry 364 + 0x1.d1746ap1, + 0x1.d1746ap-2, + 0x1.80p1 + }, + { // Entry 365 + 0x1.d1746ap2, + 0x1.d1746ap-2, + 0x1.p2 + }, + { // Entry 366 + 0x1.d1746ap3, + 0x1.d1746ap-2, + 0x1.40p2 + }, + { // Entry 367 + 0x1.d1746ap4, + 0x1.d1746ap-2, + 0x1.80p2 + }, + { // Entry 368 + 0x1.d1746ap5, + 0x1.d1746ap-2, + 0x1.c0p2 + }, + { // Entry 369 + 0x1.d1746ap6, + 0x1.d1746ap-2, + 0x1.p3 + }, + { // Entry 370 + 0x1.d1746ap7, + 0x1.d1746ap-2, + 0x1.20p3 + }, + { // Entry 371 + 0x1.d1746ap8, + 0x1.d1746ap-2, + 0x1.40p3 + }, + { // Entry 372 + 0x1.1745d8p-11, + 0x1.1745d8p-1, + -0x1.40p3 + }, + { // Entry 373 + 0x1.1745d8p-10, + 0x1.1745d8p-1, + -0x1.20p3 + }, + { // Entry 374 + 0x1.1745d8p-9, + 0x1.1745d8p-1, + -0x1.p3 + }, + { // Entry 375 + 0x1.1745d8p-8, + 0x1.1745d8p-1, + -0x1.c0p2 + }, + { // Entry 376 + 0x1.1745d8p-7, + 0x1.1745d8p-1, + -0x1.80p2 + }, + { // Entry 377 + 0x1.1745d8p-6, + 0x1.1745d8p-1, + -0x1.40p2 + }, + { // Entry 378 + 0x1.1745d8p-5, + 0x1.1745d8p-1, + -0x1.p2 + }, + { // Entry 379 + 0x1.1745d8p-4, + 0x1.1745d8p-1, + -0x1.80p1 + }, + { // Entry 380 + 0x1.1745d8p-3, + 0x1.1745d8p-1, + -0x1.p1 + }, + { // Entry 381 + 0x1.1745d8p-2, + 0x1.1745d8p-1, + -0x1.p0 + }, + { // Entry 382 + 0x1.1745d8p-1, + 0x1.1745d8p-1, + 0.0 + }, + { // Entry 383 + 0x1.1745d8p0, + 0x1.1745d8p-1, + 0x1.p0 + }, + { // Entry 384 + 0x1.1745d8p1, + 0x1.1745d8p-1, + 0x1.p1 + }, + { // Entry 385 + 0x1.1745d8p2, + 0x1.1745d8p-1, + 0x1.80p1 + }, + { // Entry 386 + 0x1.1745d8p3, + 0x1.1745d8p-1, + 0x1.p2 + }, + { // Entry 387 + 0x1.1745d8p4, + 0x1.1745d8p-1, + 0x1.40p2 + }, + { // Entry 388 + 0x1.1745d8p5, + 0x1.1745d8p-1, + 0x1.80p2 + }, + { // Entry 389 + 0x1.1745d8p6, + 0x1.1745d8p-1, + 0x1.c0p2 + }, + { // Entry 390 + 0x1.1745d8p7, + 0x1.1745d8p-1, + 0x1.p3 + }, + { // Entry 391 + 0x1.1745d8p8, + 0x1.1745d8p-1, + 0x1.20p3 + }, + { // Entry 392 + 0x1.1745d8p9, + 0x1.1745d8p-1, + 0x1.40p3 + }, + { // Entry 393 + 0x1.45d17cp-11, + 0x1.45d17cp-1, + -0x1.40p3 + }, + { // Entry 394 + 0x1.45d17cp-10, + 0x1.45d17cp-1, + -0x1.20p3 + }, + { // Entry 395 + 0x1.45d17cp-9, + 0x1.45d17cp-1, + -0x1.p3 + }, + { // Entry 396 + 0x1.45d17cp-8, + 0x1.45d17cp-1, + -0x1.c0p2 + }, + { // Entry 397 + 0x1.45d17cp-7, + 0x1.45d17cp-1, + -0x1.80p2 + }, + { // Entry 398 + 0x1.45d17cp-6, + 0x1.45d17cp-1, + -0x1.40p2 + }, + { // Entry 399 + 0x1.45d17cp-5, + 0x1.45d17cp-1, + -0x1.p2 + }, + { // Entry 400 + 0x1.45d17cp-4, + 0x1.45d17cp-1, + -0x1.80p1 + }, + { // Entry 401 + 0x1.45d17cp-3, + 0x1.45d17cp-1, + -0x1.p1 + }, + { // Entry 402 + 0x1.45d17cp-2, + 0x1.45d17cp-1, + -0x1.p0 + }, + { // Entry 403 + 0x1.45d17cp-1, + 0x1.45d17cp-1, + 0.0 + }, + { // Entry 404 + 0x1.45d17cp0, + 0x1.45d17cp-1, + 0x1.p0 + }, + { // Entry 405 + 0x1.45d17cp1, + 0x1.45d17cp-1, + 0x1.p1 + }, + { // Entry 406 + 0x1.45d17cp2, + 0x1.45d17cp-1, + 0x1.80p1 + }, + { // Entry 407 + 0x1.45d17cp3, + 0x1.45d17cp-1, + 0x1.p2 + }, + { // Entry 408 + 0x1.45d17cp4, + 0x1.45d17cp-1, + 0x1.40p2 + }, + { // Entry 409 + 0x1.45d17cp5, + 0x1.45d17cp-1, + 0x1.80p2 + }, + { // Entry 410 + 0x1.45d17cp6, + 0x1.45d17cp-1, + 0x1.c0p2 + }, + { // Entry 411 + 0x1.45d17cp7, + 0x1.45d17cp-1, + 0x1.p3 + }, + { // Entry 412 + 0x1.45d17cp8, + 0x1.45d17cp-1, + 0x1.20p3 + }, + { // Entry 413 + 0x1.45d17cp9, + 0x1.45d17cp-1, + 0x1.40p3 + }, + { // Entry 414 + 0x1.745d20p-11, + 0x1.745d20p-1, + -0x1.40p3 + }, + { // Entry 415 + 0x1.745d20p-10, + 0x1.745d20p-1, + -0x1.20p3 + }, + { // Entry 416 + 0x1.745d20p-9, + 0x1.745d20p-1, + -0x1.p3 + }, + { // Entry 417 + 0x1.745d20p-8, + 0x1.745d20p-1, + -0x1.c0p2 + }, + { // Entry 418 + 0x1.745d20p-7, + 0x1.745d20p-1, + -0x1.80p2 + }, + { // Entry 419 + 0x1.745d20p-6, + 0x1.745d20p-1, + -0x1.40p2 + }, + { // Entry 420 + 0x1.745d20p-5, + 0x1.745d20p-1, + -0x1.p2 + }, + { // Entry 421 + 0x1.745d20p-4, + 0x1.745d20p-1, + -0x1.80p1 + }, + { // Entry 422 + 0x1.745d20p-3, + 0x1.745d20p-1, + -0x1.p1 + }, + { // Entry 423 + 0x1.745d20p-2, + 0x1.745d20p-1, + -0x1.p0 + }, + { // Entry 424 + 0x1.745d20p-1, + 0x1.745d20p-1, + 0.0 + }, + { // Entry 425 + 0x1.745d20p0, + 0x1.745d20p-1, + 0x1.p0 + }, + { // Entry 426 + 0x1.745d20p1, + 0x1.745d20p-1, + 0x1.p1 + }, + { // Entry 427 + 0x1.745d20p2, + 0x1.745d20p-1, + 0x1.80p1 + }, + { // Entry 428 + 0x1.745d20p3, + 0x1.745d20p-1, + 0x1.p2 + }, + { // Entry 429 + 0x1.745d20p4, + 0x1.745d20p-1, + 0x1.40p2 + }, + { // Entry 430 + 0x1.745d20p5, + 0x1.745d20p-1, + 0x1.80p2 + }, + { // Entry 431 + 0x1.745d20p6, + 0x1.745d20p-1, + 0x1.c0p2 + }, + { // Entry 432 + 0x1.745d20p7, + 0x1.745d20p-1, + 0x1.p3 + }, + { // Entry 433 + 0x1.745d20p8, + 0x1.745d20p-1, + 0x1.20p3 + }, + { // Entry 434 + 0x1.745d20p9, + 0x1.745d20p-1, + 0x1.40p3 + }, + { // Entry 435 + 0x1.a2e8c4p-11, + 0x1.a2e8c4p-1, + -0x1.40p3 + }, + { // Entry 436 + 0x1.a2e8c4p-10, + 0x1.a2e8c4p-1, + -0x1.20p3 + }, + { // Entry 437 + 0x1.a2e8c4p-9, + 0x1.a2e8c4p-1, + -0x1.p3 + }, + { // Entry 438 + 0x1.a2e8c4p-8, + 0x1.a2e8c4p-1, + -0x1.c0p2 + }, + { // Entry 439 + 0x1.a2e8c4p-7, + 0x1.a2e8c4p-1, + -0x1.80p2 + }, + { // Entry 440 + 0x1.a2e8c4p-6, + 0x1.a2e8c4p-1, + -0x1.40p2 + }, + { // Entry 441 + 0x1.a2e8c4p-5, + 0x1.a2e8c4p-1, + -0x1.p2 + }, + { // Entry 442 + 0x1.a2e8c4p-4, + 0x1.a2e8c4p-1, + -0x1.80p1 + }, + { // Entry 443 + 0x1.a2e8c4p-3, + 0x1.a2e8c4p-1, + -0x1.p1 + }, + { // Entry 444 + 0x1.a2e8c4p-2, + 0x1.a2e8c4p-1, + -0x1.p0 + }, + { // Entry 445 + 0x1.a2e8c4p-1, + 0x1.a2e8c4p-1, + 0.0 + }, + { // Entry 446 + 0x1.a2e8c4p0, + 0x1.a2e8c4p-1, + 0x1.p0 + }, + { // Entry 447 + 0x1.a2e8c4p1, + 0x1.a2e8c4p-1, + 0x1.p1 + }, + { // Entry 448 + 0x1.a2e8c4p2, + 0x1.a2e8c4p-1, + 0x1.80p1 + }, + { // Entry 449 + 0x1.a2e8c4p3, + 0x1.a2e8c4p-1, + 0x1.p2 + }, + { // Entry 450 + 0x1.a2e8c4p4, + 0x1.a2e8c4p-1, + 0x1.40p2 + }, + { // Entry 451 + 0x1.a2e8c4p5, + 0x1.a2e8c4p-1, + 0x1.80p2 + }, + { // Entry 452 + 0x1.a2e8c4p6, + 0x1.a2e8c4p-1, + 0x1.c0p2 + }, + { // Entry 453 + 0x1.a2e8c4p7, + 0x1.a2e8c4p-1, + 0x1.p3 + }, + { // Entry 454 + 0x1.a2e8c4p8, + 0x1.a2e8c4p-1, + 0x1.20p3 + }, + { // Entry 455 + 0x1.a2e8c4p9, + 0x1.a2e8c4p-1, + 0x1.40p3 + }, + { // Entry 456 + 0x1.d17468p-11, + 0x1.d17468p-1, + -0x1.40p3 + }, + { // Entry 457 + 0x1.d17468p-10, + 0x1.d17468p-1, + -0x1.20p3 + }, + { // Entry 458 + 0x1.d17468p-9, + 0x1.d17468p-1, + -0x1.p3 + }, + { // Entry 459 + 0x1.d17468p-8, + 0x1.d17468p-1, + -0x1.c0p2 + }, + { // Entry 460 + 0x1.d17468p-7, + 0x1.d17468p-1, + -0x1.80p2 + }, + { // Entry 461 + 0x1.d17468p-6, + 0x1.d17468p-1, + -0x1.40p2 + }, + { // Entry 462 + 0x1.d17468p-5, + 0x1.d17468p-1, + -0x1.p2 + }, + { // Entry 463 + 0x1.d17468p-4, + 0x1.d17468p-1, + -0x1.80p1 + }, + { // Entry 464 + 0x1.d17468p-3, + 0x1.d17468p-1, + -0x1.p1 + }, + { // Entry 465 + 0x1.d17468p-2, + 0x1.d17468p-1, + -0x1.p0 + }, + { // Entry 466 + 0x1.d17468p-1, + 0x1.d17468p-1, + 0.0 + }, + { // Entry 467 + 0x1.d17468p0, + 0x1.d17468p-1, + 0x1.p0 + }, + { // Entry 468 + 0x1.d17468p1, + 0x1.d17468p-1, + 0x1.p1 + }, + { // Entry 469 + 0x1.d17468p2, + 0x1.d17468p-1, + 0x1.80p1 + }, + { // Entry 470 + 0x1.d17468p3, + 0x1.d17468p-1, + 0x1.p2 + }, + { // Entry 471 + 0x1.d17468p4, + 0x1.d17468p-1, + 0x1.40p2 + }, + { // Entry 472 + 0x1.d17468p5, + 0x1.d17468p-1, + 0x1.80p2 + }, + { // Entry 473 + 0x1.d17468p6, + 0x1.d17468p-1, + 0x1.c0p2 + }, + { // Entry 474 + 0x1.d17468p7, + 0x1.d17468p-1, + 0x1.p3 + }, + { // Entry 475 + 0x1.d17468p8, + 0x1.d17468p-1, + 0x1.20p3 + }, + { // Entry 476 + 0x1.d17468p9, + 0x1.d17468p-1, + 0x1.40p3 + }, + { // Entry 477 + 0x1.p-10, + 0x1.p0, + -0x1.40p3 + }, + { // Entry 478 + 0x1.p-9, + 0x1.p0, + -0x1.20p3 + }, + { // Entry 479 + 0x1.p-8, + 0x1.p0, + -0x1.p3 + }, + { // Entry 480 + 0x1.p-7, + 0x1.p0, + -0x1.c0p2 + }, + { // Entry 481 + 0x1.p-6, + 0x1.p0, + -0x1.80p2 + }, + { // Entry 482 + 0x1.p-5, + 0x1.p0, + -0x1.40p2 + }, + { // Entry 483 + 0x1.p-4, + 0x1.p0, + -0x1.p2 + }, + { // Entry 484 + 0x1.p-3, + 0x1.p0, + -0x1.80p1 + }, + { // Entry 485 + 0x1.p-2, + 0x1.p0, + -0x1.p1 + }, + { // Entry 486 + 0x1.p-1, + 0x1.p0, + -0x1.p0 + }, + { // Entry 487 + 0x1.p0, + 0x1.p0, + 0.0 + }, + { // Entry 488 + 0x1.p1, + 0x1.p0, + 0x1.p0 + }, + { // Entry 489 + 0x1.p2, + 0x1.p0, + 0x1.p1 + }, + { // Entry 490 + 0x1.p3, + 0x1.p0, + 0x1.80p1 + }, + { // Entry 491 + 0x1.p4, + 0x1.p0, + 0x1.p2 + }, + { // Entry 492 + 0x1.p5, + 0x1.p0, + 0x1.40p2 + }, + { // Entry 493 + 0x1.p6, + 0x1.p0, + 0x1.80p2 + }, + { // Entry 494 + 0x1.p7, + 0x1.p0, + 0x1.c0p2 + }, + { // Entry 495 + 0x1.p8, + 0x1.p0, + 0x1.p3 + }, + { // Entry 496 + 0x1.p9, + 0x1.p0, + 0x1.20p3 + }, + { // Entry 497 + 0x1.p10, + 0x1.p0, + 0x1.40p3 + }, + { // Entry 498 + 0x1.fffffep0, + 0x1.fffffep127, + -0x1.fcp6 + }, + { // Entry 499 + 0x1.fffffep1, + 0x1.fffffep127, + -0x1.f8p6 + }, + { // Entry 500 + 0x1.fffffep117, + 0x1.fffffep127, + -0x1.40p3 + }, + { // Entry 501 + 0x1.fffffep118, + 0x1.fffffep127, + -0x1.20p3 + }, + { // Entry 502 + 0x1.fffffep119, + 0x1.fffffep127, + -0x1.p3 + }, + { // Entry 503 + 0x1.fffffep120, + 0x1.fffffep127, + -0x1.c0p2 + }, + { // Entry 504 + 0x1.fffffep121, + 0x1.fffffep127, + -0x1.80p2 + }, + { // Entry 505 + 0x1.fffffep122, + 0x1.fffffep127, + -0x1.40p2 + }, + { // Entry 506 + 0x1.fffffep123, + 0x1.fffffep127, + -0x1.p2 + }, + { // Entry 507 + 0x1.fffffep124, + 0x1.fffffep127, + -0x1.80p1 + }, + { // Entry 508 + 0x1.fffffep125, + 0x1.fffffep127, + -0x1.p1 + }, + { // Entry 509 + 0x1.fffffep126, + 0x1.fffffep127, + -0x1.p0 + }, + { // Entry 510 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0 + }, + { // Entry 511 + 0x1.p-22, + 0x1.p-149, + 0x1.fcp6 + }, + { // Entry 512 + 0x1.p-23, + 0x1.p-149, + 0x1.f8p6 + }, + { // Entry 513 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 514 + 0x1.p-148, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 515 + 0x1.p-147, + 0x1.p-149, + 0x1.p1 + }, + { // Entry 516 + 0x1.p-146, + 0x1.p-149, + 0x1.80p1 + }, + { // Entry 517 + 0x1.p-145, + 0x1.p-149, + 0x1.p2 + }, + { // Entry 518 + 0x1.p-144, + 0x1.p-149, + 0x1.40p2 + }, + { // Entry 519 + 0x1.p-143, + 0x1.p-149, + 0x1.80p2 + }, + { // Entry 520 + 0x1.p-142, + 0x1.p-149, + 0x1.c0p2 + }, + { // Entry 521 + 0x1.p-141, + 0x1.p-149, + 0x1.p3 + }, + { // Entry 522 + 0x1.p-140, + 0x1.p-149, + 0x1.20p3 + }, + { // Entry 523 + 0x1.p-139, + 0x1.p-149, + 0x1.40p3 + }, + { // Entry 524 + 0x1.p-129, + 0x1.p-2, + -0x1.fcp6 + }, + { // Entry 525 + 0x1.p-128, + 0x1.p-2, + -0x1.f8p6 + }, + { // Entry 526 + 0x1.p-128, + 0x1.p-1, + -0x1.fcp6 + }, + { // Entry 527 + 0x1.p-127, + 0x1.p-1, + -0x1.f8p6 + }, + { // Entry 528 + 0x1.80p-128, + 0x1.80p-1, + -0x1.fcp6 + }, + { // Entry 529 + 0x1.80p-127, + 0x1.80p-1, + -0x1.f8p6 + }, + { // Entry 530 + 0.0f, + 0x1.p-2, + -0x1.2ap7 + }, + { // Entry 531 + 0.0f, + 0x1.p-2, + -0x1.28p7 + }, + { // Entry 532 + 0.0f, + 0x1.p-1, + -0x1.2ap7 + }, + { // Entry 533 + 0x1.p-149, + 0x1.p-1, + -0x1.28p7 + }, + { // Entry 534 + 0.0f, + 0x1.80p-1, + -0x1.2ap7 + }, + { // Entry 535 + 0x1.80p-149, + 0x1.80p-1, + -0x1.28p7 + }, + { // Entry 536 + 0x1.p127, + 0x1.p0, + 0x1.fcp6 + }, + { // Entry 537 + 0x1.p126, + 0x1.p0, + 0x1.f8p6 + }, + { // Entry 538 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 539 + 0x1.p-148, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 540 + 0x1.p-147, + 0x1.p-149, + 0x1.p1 + }, + { // Entry 541 + 0x1.p-146, + 0x1.p-149, + 0x1.80p1 + }, + { // Entry 542 + 0x1.p-145, + 0x1.p-149, + 0x1.p2 + }, + { // Entry 543 + 0x1.p-144, + 0x1.p-149, + 0x1.40p2 + }, + { // Entry 544 + 0x1.p-143, + 0x1.p-149, + 0x1.80p2 + }, + { // Entry 545 + 0x1.p-142, + 0x1.p-149, + 0x1.c0p2 + }, + { // Entry 546 + 0x1.p-141, + 0x1.p-149, + 0x1.p3 + }, + { // Entry 547 + 0x1.p-140, + 0x1.p-149, + 0x1.20p3 + }, + { // Entry 548 + 0x1.p-139, + 0x1.p-149, + 0x1.40p3 + }, + { // Entry 549 + 0x1.p-138, + 0x1.p-149, + 0x1.60p3 + }, + { // Entry 550 + 0x1.p-137, + 0x1.p-149, + 0x1.80p3 + }, + { // Entry 551 + 0x1.p-136, + 0x1.p-149, + 0x1.a0p3 + }, + { // Entry 552 + 0x1.p-135, + 0x1.p-149, + 0x1.c0p3 + }, + { // Entry 553 + 0x1.p-134, + 0x1.p-149, + 0x1.e0p3 + }, + { // Entry 554 + 0x1.p-133, + 0x1.p-149, + 0x1.p4 + }, + { // Entry 555 + 0x1.p-132, + 0x1.p-149, + 0x1.10p4 + }, + { // Entry 556 + 0x1.p-131, + 0x1.p-149, + 0x1.20p4 + }, + { // Entry 557 + 0x1.p-130, + 0x1.p-149, + 0x1.30p4 + }, + { // Entry 558 + 0x1.p-129, + 0x1.p-149, + 0x1.40p4 + }, + { // Entry 559 + 0x1.p-128, + 0x1.p-149, + 0x1.50p4 + }, + { // Entry 560 + 0x1.p-127, + 0x1.p-149, + 0x1.60p4 + }, + { // Entry 561 + 0x1.p-126, + 0x1.p-149, + 0x1.70p4 + }, + { // Entry 562 + 0x1.p-125, + 0x1.p-149, + 0x1.80p4 + }, + { // Entry 563 + 0x1.p-124, + 0x1.p-149, + 0x1.90p4 + }, + { // Entry 564 + 0x1.p-123, + 0x1.p-149, + 0x1.a0p4 + }, + { // Entry 565 + 0x1.p-122, + 0x1.p-149, + 0x1.b0p4 + }, + { // Entry 566 + 0x1.p-121, + 0x1.p-149, + 0x1.c0p4 + }, + { // Entry 567 + 0x1.p-120, + 0x1.p-149, + 0x1.d0p4 + }, + { // Entry 568 + 0x1.p-119, + 0x1.p-149, + 0x1.e0p4 + }, + { // Entry 569 + 0x1.p-118, + 0x1.p-149, + 0x1.f0p4 + }, + { // Entry 570 + 0x1.p-117, + 0x1.p-149, + 0x1.p5 + }, + { // Entry 571 + 0x1.p-116, + 0x1.p-149, + 0x1.08p5 + }, + { // Entry 572 + 0x1.p-115, + 0x1.p-149, + 0x1.10p5 + }, + { // Entry 573 + 0x1.p-114, + 0x1.p-149, + 0x1.18p5 + }, + { // Entry 574 + 0x1.p-113, + 0x1.p-149, + 0x1.20p5 + }, + { // Entry 575 + 0x1.p-112, + 0x1.p-149, + 0x1.28p5 + }, + { // Entry 576 + 0x1.p-111, + 0x1.p-149, + 0x1.30p5 + }, + { // Entry 577 + 0x1.p-110, + 0x1.p-149, + 0x1.38p5 + }, + { // Entry 578 + 0x1.p-109, + 0x1.p-149, + 0x1.40p5 + }, + { // Entry 579 + 0x1.p-108, + 0x1.p-149, + 0x1.48p5 + }, + { // Entry 580 + 0x1.p-107, + 0x1.p-149, + 0x1.50p5 + }, + { // Entry 581 + 0x1.p-106, + 0x1.p-149, + 0x1.58p5 + }, + { // Entry 582 + 0x1.p-105, + 0x1.p-149, + 0x1.60p5 + }, + { // Entry 583 + 0x1.p-104, + 0x1.p-149, + 0x1.68p5 + }, + { // Entry 584 + 0x1.p-103, + 0x1.p-149, + 0x1.70p5 + }, + { // Entry 585 + 0x1.p-102, + 0x1.p-149, + 0x1.78p5 + }, + { // Entry 586 + 0x1.p-101, + 0x1.p-149, + 0x1.80p5 + }, + { // Entry 587 + 0x1.p-100, + 0x1.p-149, + 0x1.88p5 + }, + { // Entry 588 + 0x1.p-99, + 0x1.p-149, + 0x1.90p5 + }, + { // Entry 589 + 0x1.p-98, + 0x1.p-149, + 0x1.98p5 + }, + { // Entry 590 + 0x1.p-97, + 0x1.p-149, + 0x1.a0p5 + }, + { // Entry 591 + 0x1.p-96, + 0x1.p-149, + 0x1.a8p5 + }, + { // Entry 592 + 0x1.p-95, + 0x1.p-149, + 0x1.b0p5 + }, + { // Entry 593 + 0x1.p-94, + 0x1.p-149, + 0x1.b8p5 + }, + { // Entry 594 + 0x1.p-93, + 0x1.p-149, + 0x1.c0p5 + }, + { // Entry 595 + 0x1.p-92, + 0x1.p-149, + 0x1.c8p5 + }, + { // Entry 596 + 0x1.p-91, + 0x1.p-149, + 0x1.d0p5 + }, + { // Entry 597 + 0x1.p-90, + 0x1.p-149, + 0x1.d8p5 + }, + { // Entry 598 + 0x1.p-89, + 0x1.p-149, + 0x1.e0p5 + }, + { // Entry 599 + 0x1.p-88, + 0x1.p-149, + 0x1.e8p5 + }, + { // Entry 600 + 0x1.p-87, + 0x1.p-149, + 0x1.f0p5 + }, + { // Entry 601 + 0x1.p-86, + 0x1.p-149, + 0x1.f8p5 + }, + { // Entry 602 + 0x1.p-85, + 0x1.p-149, + 0x1.p6 + }, + { // Entry 603 + 0x1.p-84, + 0x1.p-149, + 0x1.04p6 + }, + { // Entry 604 + 0x1.p-83, + 0x1.p-149, + 0x1.08p6 + }, + { // Entry 605 + 0x1.p-82, + 0x1.p-149, + 0x1.0cp6 + }, + { // Entry 606 + 0x1.p-81, + 0x1.p-149, + 0x1.10p6 + }, + { // Entry 607 + 0x1.p-80, + 0x1.p-149, + 0x1.14p6 + }, + { // Entry 608 + 0x1.p-79, + 0x1.p-149, + 0x1.18p6 + }, + { // Entry 609 + 0x1.p-78, + 0x1.p-149, + 0x1.1cp6 + }, + { // Entry 610 + 0x1.p-77, + 0x1.p-149, + 0x1.20p6 + }, + { // Entry 611 + 0x1.p-76, + 0x1.p-149, + 0x1.24p6 + }, + { // Entry 612 + 0x1.p-75, + 0x1.p-149, + 0x1.28p6 + }, + { // Entry 613 + 0x1.p-74, + 0x1.p-149, + 0x1.2cp6 + }, + { // Entry 614 + 0x1.p-73, + 0x1.p-149, + 0x1.30p6 + }, + { // Entry 615 + 0x1.p-72, + 0x1.p-149, + 0x1.34p6 + }, + { // Entry 616 + 0x1.p-71, + 0x1.p-149, + 0x1.38p6 + }, + { // Entry 617 + 0x1.p-70, + 0x1.p-149, + 0x1.3cp6 + }, + { // Entry 618 + 0x1.p-69, + 0x1.p-149, + 0x1.40p6 + }, + { // Entry 619 + 0x1.p-68, + 0x1.p-149, + 0x1.44p6 + }, + { // Entry 620 + 0x1.p-67, + 0x1.p-149, + 0x1.48p6 + }, + { // Entry 621 + 0x1.p-66, + 0x1.p-149, + 0x1.4cp6 + }, + { // Entry 622 + 0x1.p-65, + 0x1.p-149, + 0x1.50p6 + }, + { // Entry 623 + 0x1.p-64, + 0x1.p-149, + 0x1.54p6 + }, + { // Entry 624 + 0x1.p-63, + 0x1.p-149, + 0x1.58p6 + }, + { // Entry 625 + 0x1.p-62, + 0x1.p-149, + 0x1.5cp6 + }, + { // Entry 626 + 0x1.p-61, + 0x1.p-149, + 0x1.60p6 + }, + { // Entry 627 + 0x1.p-60, + 0x1.p-149, + 0x1.64p6 + }, + { // Entry 628 + 0x1.p-59, + 0x1.p-149, + 0x1.68p6 + }, + { // Entry 629 + 0x1.p-58, + 0x1.p-149, + 0x1.6cp6 + }, + { // Entry 630 + 0x1.p-57, + 0x1.p-149, + 0x1.70p6 + }, + { // Entry 631 + 0x1.p-56, + 0x1.p-149, + 0x1.74p6 + }, + { // Entry 632 + 0x1.p-55, + 0x1.p-149, + 0x1.78p6 + }, + { // Entry 633 + 0x1.p-54, + 0x1.p-149, + 0x1.7cp6 + }, + { // Entry 634 + 0x1.p-53, + 0x1.p-149, + 0x1.80p6 + }, + { // Entry 635 + 0x1.p-52, + 0x1.p-149, + 0x1.84p6 + }, + { // Entry 636 + 0x1.p-51, + 0x1.p-149, + 0x1.88p6 + }, + { // Entry 637 + 0x1.p-50, + 0x1.p-149, + 0x1.8cp6 + }, + { // Entry 638 + 0x1.p-49, + 0x1.p-149, + 0x1.90p6 + }, + { // Entry 639 + 0x1.p-48, + 0x1.p-149, + 0x1.94p6 + }, + { // Entry 640 + 0x1.p-47, + 0x1.p-149, + 0x1.98p6 + }, + { // Entry 641 + 0x1.p-46, + 0x1.p-149, + 0x1.9cp6 + }, + { // Entry 642 + 0x1.p-45, + 0x1.p-149, + 0x1.a0p6 + }, + { // Entry 643 + 0x1.p-44, + 0x1.p-149, + 0x1.a4p6 + }, + { // Entry 644 + 0x1.p-43, + 0x1.p-149, + 0x1.a8p6 + }, + { // Entry 645 + 0x1.p-42, + 0x1.p-149, + 0x1.acp6 + }, + { // Entry 646 + 0x1.p-41, + 0x1.p-149, + 0x1.b0p6 + }, + { // Entry 647 + 0x1.p-40, + 0x1.p-149, + 0x1.b4p6 + }, + { // Entry 648 + 0x1.p-39, + 0x1.p-149, + 0x1.b8p6 + }, + { // Entry 649 + 0x1.p-38, + 0x1.p-149, + 0x1.bcp6 + }, + { // Entry 650 + 0x1.p-37, + 0x1.p-149, + 0x1.c0p6 + }, + { // Entry 651 + 0x1.p-36, + 0x1.p-149, + 0x1.c4p6 + }, + { // Entry 652 + 0x1.p-35, + 0x1.p-149, + 0x1.c8p6 + }, + { // Entry 653 + 0x1.p-34, + 0x1.p-149, + 0x1.ccp6 + }, + { // Entry 654 + 0x1.p-33, + 0x1.p-149, + 0x1.d0p6 + }, + { // Entry 655 + 0x1.p-32, + 0x1.p-149, + 0x1.d4p6 + }, + { // Entry 656 + 0x1.p-31, + 0x1.p-149, + 0x1.d8p6 + }, + { // Entry 657 + 0x1.p-30, + 0x1.p-149, + 0x1.dcp6 + }, + { // Entry 658 + 0x1.p-29, + 0x1.p-149, + 0x1.e0p6 + }, + { // Entry 659 + 0x1.p-28, + 0x1.p-149, + 0x1.e4p6 + }, + { // Entry 660 + 0x1.p-27, + 0x1.p-149, + 0x1.e8p6 + }, + { // Entry 661 + 0x1.p-26, + 0x1.p-149, + 0x1.ecp6 + }, + { // Entry 662 + 0x1.p-25, + 0x1.p-149, + 0x1.f0p6 + }, + { // Entry 663 + 0x1.p-24, + 0x1.p-149, + 0x1.f4p6 + }, + { // Entry 664 + 0x1.p-23, + 0x1.p-149, + 0x1.f8p6 + }, + { // Entry 665 + 0x1.p-22, + 0x1.p-149, + 0x1.fcp6 + }, + { // Entry 666 + 0x1.p-21, + 0x1.p-149, + 0x1.p7 + }, + { // Entry 667 + 0x1.p-20, + 0x1.p-149, + 0x1.02p7 + }, + { // Entry 668 + 0x1.p-19, + 0x1.p-149, + 0x1.04p7 + }, + { // Entry 669 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0 + }, + { // Entry 670 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + 0x1.p0 + }, + { // Entry 671 + 0x1.fffffcp-125, + 0x1.fffffcp-127, + 0x1.p1 + }, + { // Entry 672 + 0x1.fffffcp-124, + 0x1.fffffcp-127, + 0x1.80p1 + }, + { // Entry 673 + 0x1.fffffcp-123, + 0x1.fffffcp-127, + 0x1.p2 + }, + { // Entry 674 + 0x1.fffffcp-122, + 0x1.fffffcp-127, + 0x1.40p2 + }, + { // Entry 675 + 0x1.fffffcp-121, + 0x1.fffffcp-127, + 0x1.80p2 + }, + { // Entry 676 + 0x1.fffffcp-120, + 0x1.fffffcp-127, + 0x1.c0p2 + }, + { // Entry 677 + 0x1.fffffcp-119, + 0x1.fffffcp-127, + 0x1.p3 + }, + { // Entry 678 + 0x1.fffffcp-118, + 0x1.fffffcp-127, + 0x1.20p3 + }, + { // Entry 679 + 0x1.fffffcp-117, + 0x1.fffffcp-127, + 0x1.40p3 + }, + { // Entry 680 + 0x1.fffffcp-116, + 0x1.fffffcp-127, + 0x1.60p3 + }, + { // Entry 681 + 0x1.fffffcp-115, + 0x1.fffffcp-127, + 0x1.80p3 + }, + { // Entry 682 + 0x1.fffffcp-114, + 0x1.fffffcp-127, + 0x1.a0p3 + }, + { // Entry 683 + 0x1.fffffcp-113, + 0x1.fffffcp-127, + 0x1.c0p3 + }, + { // Entry 684 + 0x1.fffffcp-112, + 0x1.fffffcp-127, + 0x1.e0p3 + }, + { // Entry 685 + 0x1.fffffcp-111, + 0x1.fffffcp-127, + 0x1.p4 + }, + { // Entry 686 + 0x1.fffffcp-110, + 0x1.fffffcp-127, + 0x1.10p4 + }, + { // Entry 687 + 0x1.fffffcp-109, + 0x1.fffffcp-127, + 0x1.20p4 + }, + { // Entry 688 + 0x1.fffffcp-108, + 0x1.fffffcp-127, + 0x1.30p4 + }, + { // Entry 689 + 0x1.fffffcp-107, + 0x1.fffffcp-127, + 0x1.40p4 + }, + { // Entry 690 + 0x1.fffffcp-106, + 0x1.fffffcp-127, + 0x1.50p4 + }, + { // Entry 691 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + 0x1.60p4 + }, + { // Entry 692 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + 0x1.70p4 + }, + { // Entry 693 + 0x1.fffffcp-103, + 0x1.fffffcp-127, + 0x1.80p4 + }, + { // Entry 694 + 0x1.fffffcp-102, + 0x1.fffffcp-127, + 0x1.90p4 + }, + { // Entry 695 + 0x1.fffffcp-101, + 0x1.fffffcp-127, + 0x1.a0p4 + }, + { // Entry 696 + 0x1.fffffcp-100, + 0x1.fffffcp-127, + 0x1.b0p4 + }, + { // Entry 697 + 0x1.fffffcp-99, + 0x1.fffffcp-127, + 0x1.c0p4 + }, + { // Entry 698 + 0x1.fffffcp-98, + 0x1.fffffcp-127, + 0x1.d0p4 + }, + { // Entry 699 + 0x1.fffffcp-97, + 0x1.fffffcp-127, + 0x1.e0p4 + }, + { // Entry 700 + 0x1.fffffcp-96, + 0x1.fffffcp-127, + 0x1.f0p4 + }, + { // Entry 701 + 0x1.fffffcp-95, + 0x1.fffffcp-127, + 0x1.p5 + }, + { // Entry 702 + 0x1.fffffcp-94, + 0x1.fffffcp-127, + 0x1.08p5 + }, + { // Entry 703 + 0x1.fffffcp-93, + 0x1.fffffcp-127, + 0x1.10p5 + }, + { // Entry 704 + 0x1.fffffcp-92, + 0x1.fffffcp-127, + 0x1.18p5 + }, + { // Entry 705 + 0x1.fffffcp-91, + 0x1.fffffcp-127, + 0x1.20p5 + }, + { // Entry 706 + 0x1.fffffcp-90, + 0x1.fffffcp-127, + 0x1.28p5 + }, + { // Entry 707 + 0x1.fffffcp-89, + 0x1.fffffcp-127, + 0x1.30p5 + }, + { // Entry 708 + 0x1.fffffcp-88, + 0x1.fffffcp-127, + 0x1.38p5 + }, + { // Entry 709 + 0x1.fffffcp-87, + 0x1.fffffcp-127, + 0x1.40p5 + }, + { // Entry 710 + 0x1.fffffcp-86, + 0x1.fffffcp-127, + 0x1.48p5 + }, + { // Entry 711 + 0x1.fffffcp-85, + 0x1.fffffcp-127, + 0x1.50p5 + }, + { // Entry 712 + 0x1.fffffcp-84, + 0x1.fffffcp-127, + 0x1.58p5 + }, + { // Entry 713 + 0x1.fffffcp-83, + 0x1.fffffcp-127, + 0x1.60p5 + }, + { // Entry 714 + 0x1.fffffcp-82, + 0x1.fffffcp-127, + 0x1.68p5 + }, + { // Entry 715 + 0x1.fffffcp-81, + 0x1.fffffcp-127, + 0x1.70p5 + }, + { // Entry 716 + 0x1.fffffcp-80, + 0x1.fffffcp-127, + 0x1.78p5 + }, + { // Entry 717 + 0x1.fffffcp-79, + 0x1.fffffcp-127, + 0x1.80p5 + }, + { // Entry 718 + 0x1.fffffcp-78, + 0x1.fffffcp-127, + 0x1.88p5 + }, + { // Entry 719 + 0x1.fffffcp-77, + 0x1.fffffcp-127, + 0x1.90p5 + }, + { // Entry 720 + 0x1.fffffcp-76, + 0x1.fffffcp-127, + 0x1.98p5 + }, + { // Entry 721 + 0x1.fffffcp-75, + 0x1.fffffcp-127, + 0x1.a0p5 + }, + { // Entry 722 + 0x1.fffffcp-74, + 0x1.fffffcp-127, + 0x1.a8p5 + }, + { // Entry 723 + 0x1.fffffcp-73, + 0x1.fffffcp-127, + 0x1.b0p5 + }, + { // Entry 724 + 0x1.fffffcp-72, + 0x1.fffffcp-127, + 0x1.b8p5 + }, + { // Entry 725 + 0x1.fffffcp-71, + 0x1.fffffcp-127, + 0x1.c0p5 + }, + { // Entry 726 + 0x1.fffffcp-70, + 0x1.fffffcp-127, + 0x1.c8p5 + }, + { // Entry 727 + 0x1.fffffcp-69, + 0x1.fffffcp-127, + 0x1.d0p5 + }, + { // Entry 728 + 0x1.fffffcp-68, + 0x1.fffffcp-127, + 0x1.d8p5 + }, + { // Entry 729 + 0x1.fffffcp-67, + 0x1.fffffcp-127, + 0x1.e0p5 + }, + { // Entry 730 + 0x1.fffffcp-66, + 0x1.fffffcp-127, + 0x1.e8p5 + }, + { // Entry 731 + 0x1.fffffcp-65, + 0x1.fffffcp-127, + 0x1.f0p5 + }, + { // Entry 732 + 0x1.fffffcp-64, + 0x1.fffffcp-127, + 0x1.f8p5 + }, + { // Entry 733 + 0x1.fffffcp-63, + 0x1.fffffcp-127, + 0x1.p6 + }, + { // Entry 734 + 0x1.fffffcp-62, + 0x1.fffffcp-127, + 0x1.04p6 + }, + { // Entry 735 + 0x1.fffffcp-61, + 0x1.fffffcp-127, + 0x1.08p6 + }, + { // Entry 736 + 0x1.fffffcp-60, + 0x1.fffffcp-127, + 0x1.0cp6 + }, + { // Entry 737 + 0x1.fffffcp-59, + 0x1.fffffcp-127, + 0x1.10p6 + }, + { // Entry 738 + 0x1.fffffcp-58, + 0x1.fffffcp-127, + 0x1.14p6 + }, + { // Entry 739 + 0x1.fffffcp-57, + 0x1.fffffcp-127, + 0x1.18p6 + }, + { // Entry 740 + 0x1.fffffcp-56, + 0x1.fffffcp-127, + 0x1.1cp6 + }, + { // Entry 741 + 0x1.fffffcp-55, + 0x1.fffffcp-127, + 0x1.20p6 + }, + { // Entry 742 + 0x1.fffffcp-54, + 0x1.fffffcp-127, + 0x1.24p6 + }, + { // Entry 743 + 0x1.fffffcp-53, + 0x1.fffffcp-127, + 0x1.28p6 + }, + { // Entry 744 + 0x1.fffffcp-52, + 0x1.fffffcp-127, + 0x1.2cp6 + }, + { // Entry 745 + 0x1.fffffcp-51, + 0x1.fffffcp-127, + 0x1.30p6 + }, + { // Entry 746 + 0x1.fffffcp-50, + 0x1.fffffcp-127, + 0x1.34p6 + }, + { // Entry 747 + 0x1.fffffcp-49, + 0x1.fffffcp-127, + 0x1.38p6 + }, + { // Entry 748 + 0x1.fffffcp-48, + 0x1.fffffcp-127, + 0x1.3cp6 + }, + { // Entry 749 + 0x1.fffffcp-47, + 0x1.fffffcp-127, + 0x1.40p6 + }, + { // Entry 750 + 0x1.fffffcp-46, + 0x1.fffffcp-127, + 0x1.44p6 + }, + { // Entry 751 + 0x1.fffffcp-45, + 0x1.fffffcp-127, + 0x1.48p6 + }, + { // Entry 752 + 0x1.fffffcp-44, + 0x1.fffffcp-127, + 0x1.4cp6 + }, + { // Entry 753 + 0x1.fffffcp-43, + 0x1.fffffcp-127, + 0x1.50p6 + }, + { // Entry 754 + 0x1.fffffcp-42, + 0x1.fffffcp-127, + 0x1.54p6 + }, + { // Entry 755 + 0x1.fffffcp-41, + 0x1.fffffcp-127, + 0x1.58p6 + }, + { // Entry 756 + 0x1.fffffcp-40, + 0x1.fffffcp-127, + 0x1.5cp6 + }, + { // Entry 757 + 0x1.fffffcp-39, + 0x1.fffffcp-127, + 0x1.60p6 + }, + { // Entry 758 + 0x1.fffffcp-38, + 0x1.fffffcp-127, + 0x1.64p6 + }, + { // Entry 759 + 0x1.fffffcp-37, + 0x1.fffffcp-127, + 0x1.68p6 + }, + { // Entry 760 + 0x1.fffffcp-36, + 0x1.fffffcp-127, + 0x1.6cp6 + }, + { // Entry 761 + 0x1.fffffcp-35, + 0x1.fffffcp-127, + 0x1.70p6 + }, + { // Entry 762 + 0x1.fffffcp-34, + 0x1.fffffcp-127, + 0x1.74p6 + }, + { // Entry 763 + 0x1.fffffcp-33, + 0x1.fffffcp-127, + 0x1.78p6 + }, + { // Entry 764 + 0x1.fffffcp-32, + 0x1.fffffcp-127, + 0x1.7cp6 + }, + { // Entry 765 + 0x1.fffffcp-31, + 0x1.fffffcp-127, + 0x1.80p6 + }, + { // Entry 766 + 0x1.fffffcp-30, + 0x1.fffffcp-127, + 0x1.84p6 + }, + { // Entry 767 + 0x1.fffffcp-29, + 0x1.fffffcp-127, + 0x1.88p6 + }, + { // Entry 768 + 0x1.fffffcp-28, + 0x1.fffffcp-127, + 0x1.8cp6 + }, + { // Entry 769 + 0x1.fffffcp-27, + 0x1.fffffcp-127, + 0x1.90p6 + }, + { // Entry 770 + 0x1.fffffcp-26, + 0x1.fffffcp-127, + 0x1.94p6 + }, + { // Entry 771 + 0x1.fffffcp-25, + 0x1.fffffcp-127, + 0x1.98p6 + }, + { // Entry 772 + 0x1.fffffcp-24, + 0x1.fffffcp-127, + 0x1.9cp6 + }, + { // Entry 773 + 0x1.fffffcp-23, + 0x1.fffffcp-127, + 0x1.a0p6 + }, + { // Entry 774 + 0x1.fffffcp-22, + 0x1.fffffcp-127, + 0x1.a4p6 + }, + { // Entry 775 + 0x1.fffffcp-21, + 0x1.fffffcp-127, + 0x1.a8p6 + }, + { // Entry 776 + 0x1.fffffcp-20, + 0x1.fffffcp-127, + 0x1.acp6 + }, + { // Entry 777 + 0x1.fffffcp-19, + 0x1.fffffcp-127, + 0x1.b0p6 + }, + { // Entry 778 + 0x1.fffffcp-18, + 0x1.fffffcp-127, + 0x1.b4p6 + }, + { // Entry 779 + 0x1.fffffcp-17, + 0x1.fffffcp-127, + 0x1.b8p6 + }, + { // Entry 780 + 0x1.fffffcp-16, + 0x1.fffffcp-127, + 0x1.bcp6 + }, + { // Entry 781 + 0x1.fffffcp-15, + 0x1.fffffcp-127, + 0x1.c0p6 + }, + { // Entry 782 + 0x1.fffffcp-14, + 0x1.fffffcp-127, + 0x1.c4p6 + }, + { // Entry 783 + 0x1.fffffcp-13, + 0x1.fffffcp-127, + 0x1.c8p6 + }, + { // Entry 784 + 0x1.fffffcp-12, + 0x1.fffffcp-127, + 0x1.ccp6 + }, + { // Entry 785 + 0x1.fffffcp-11, + 0x1.fffffcp-127, + 0x1.d0p6 + }, + { // Entry 786 + 0x1.fffffcp-10, + 0x1.fffffcp-127, + 0x1.d4p6 + }, + { // Entry 787 + 0x1.fffffcp-9, + 0x1.fffffcp-127, + 0x1.d8p6 + }, + { // Entry 788 + 0x1.fffffcp-8, + 0x1.fffffcp-127, + 0x1.dcp6 + }, + { // Entry 789 + 0x1.fffffcp-7, + 0x1.fffffcp-127, + 0x1.e0p6 + }, + { // Entry 790 + 0x1.fffffcp-6, + 0x1.fffffcp-127, + 0x1.e4p6 + }, + { // Entry 791 + 0x1.fffffcp-5, + 0x1.fffffcp-127, + 0x1.e8p6 + }, + { // Entry 792 + 0x1.fffffcp-4, + 0x1.fffffcp-127, + 0x1.ecp6 + }, + { // Entry 793 + 0x1.fffffcp-3, + 0x1.fffffcp-127, + 0x1.f0p6 + }, + { // Entry 794 + 0x1.fffffcp-2, + 0x1.fffffcp-127, + 0x1.f4p6 + }, + { // Entry 795 + 0x1.fffffcp-1, + 0x1.fffffcp-127, + 0x1.f8p6 + }, + { // Entry 796 + 0x1.fffffcp0, + 0x1.fffffcp-127, + 0x1.fcp6 + }, + { // Entry 797 + 0x1.fffffcp1, + 0x1.fffffcp-127, + 0x1.p7 + }, + { // Entry 798 + 0x1.fffffcp2, + 0x1.fffffcp-127, + 0x1.02p7 + }, + { // Entry 799 + 0x1.fffffcp3, + 0x1.fffffcp-127, + 0x1.04p7 + }, + { // Entry 800 + 0x1.p0, + 0x1.p-149, + 0x1.2ap7 + }, + { // Entry 801 + 0x1.p-1, + 0x1.p-149, + 0x1.28p7 + }, + { // Entry 802 + 0x1.fffffcp22, + 0x1.fffffcp-127, + 0x1.2ap7 + }, + { // Entry 803 + 0x1.fffffcp21, + 0x1.fffffcp-127, + 0x1.28p7 + }, + { // Entry 804 + 0x1.p-126, + 0x1.p-149, + 0x1.70p4 + }, + { // Entry 805 + 0x1.p-127, + 0x1.p-149, + 0x1.60p4 + }, + { // Entry 806 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + 0x1.70p4 + }, + { // Entry 807 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + 0x1.60p4 + }, + { // Entry 808 + 0x1.p-149, + 0x1.p-149, + 0.0 + }, + { // Entry 809 + 0x1.p-148, + 0x1.p-149, + 0x1.p0 + }, + { // Entry 810 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0 + }, + { // Entry 811 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + 0x1.p0 + }, + { // Entry 812 + HUGE_VALF, + HUGE_VALF, + HUGE_VALF + }, + { // Entry 813 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 814 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 815 + HUGE_VALF, + 0x1.fffffep127, + HUGE_VALF + }, + { // Entry 816 + HUGE_VALF, + 0x1.p-126, + HUGE_VALF + }, + { // Entry 817 + HUGE_VALF, + 0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 818 + HUGE_VALF, + 0x1.p-149, + HUGE_VALF + }, + { // Entry 819 + -HUGE_VALF, + -0x1.p-149, + HUGE_VALF + }, + { // Entry 820 + -HUGE_VALF, + -0x1.fffffcp-127, + HUGE_VALF + }, + { // Entry 821 + -HUGE_VALF, + -0x1.p-126, + HUGE_VALF + }, + { // Entry 822 + -HUGE_VALF, + -0x1.fffffep127, + HUGE_VALF + }, + { // Entry 823 + -HUGE_VALF, + -HUGE_VALF, + HUGE_VALF + }, + { // Entry 824 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 825 + 0.0f, + 0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 826 + 0.0, + 0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 827 + HUGE_VALF, + 0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 828 + HUGE_VALF, + 0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 829 + HUGE_VALF, + 0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 830 + -HUGE_VALF, + -0x1.p-149, + 0x1.fffffep127 + }, + { // Entry 831 + -HUGE_VALF, + -0x1.fffffcp-127, + 0x1.fffffep127 + }, + { // Entry 832 + -HUGE_VALF, + -0x1.p-126, + 0x1.fffffep127 + }, + { // Entry 833 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 834 + 0.0f, + 0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 835 + 0.0, + 0x1.p-126, + -HUGE_VALF + }, + { // Entry 836 + 0.0f, + 0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 837 + 0.0, + 0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 838 + 0.0f, + 0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 839 + 0.0, + 0x1.p-149, + -HUGE_VALF + }, + { // Entry 840 + 0.0, + 0.0f, + -HUGE_VALF + }, + { // Entry 841 + -0.0, + -0.0f, + -HUGE_VALF + }, + { // Entry 842 + -0.0f, + -0x1.p-149, + -0x1.fffffep127 + }, + { // Entry 843 + -0.0, + -0x1.p-149, + -HUGE_VALF + }, + { // Entry 844 + -0.0f, + -0x1.fffffcp-127, + -0x1.fffffep127 + }, + { // Entry 845 + -0.0, + -0x1.fffffcp-127, + -HUGE_VALF + }, + { // Entry 846 + -0.0f, + -0x1.p-126, + -0x1.fffffep127 + }, + { // Entry 847 + -0.0, + -0x1.p-126, + -HUGE_VALF + }, + { // Entry 848 + -0.0f, + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 849 + -0.0, + -0x1.fffffep127, + -HUGE_VALF + }, + { // Entry 850 + 0.0, + 0.0f, + 0x1.fffffep127 + }, + { // Entry 851 + -0.0, + -0.0f, + 0x1.fffffep127 + }, + { // Entry 852 + 0.0, + 0.0f, + 0.0f + }, + { // Entry 853 + -0.0, + -0.0f, + 0.0f + }, + { // Entry 854 + 0.0, + 0.0f, + -0.0f + }, + { // Entry 855 + -0.0, + -0.0f, + -0.0f + }, + { // Entry 856 + 0.0, + 0.0f, + 0x1.p0 + }, + { // Entry 857 + -0.0, + -0.0f, + 0x1.p0 + }, + { // Entry 858 + 0.0, + 0.0f, + -0x1.p0 + }, + { // Entry 859 + -0.0, + -0.0f, + -0x1.p0 + }, + { // Entry 860 + 0.0, + 0.0f, + 0x1.fcp6 + }, + { // Entry 861 + -0.0, + -0.0f, + 0x1.fcp6 + }, + { // Entry 862 + 0.0, + 0.0f, + -0x1.fcp6 + }, + { // Entry 863 + -0.0, + -0.0f, + -0x1.fcp6 + }, + { // Entry 864 + 0.0, + 0.0f, + -0x1.fffffep127 + }, + { // Entry 865 + -0.0, + -0.0f, + -0x1.fffffep127 + }, + { // Entry 866 + HUGE_VALF, + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 867 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 868 + HUGE_VALF, + HUGE_VALF, + 0.0f + }, + { // Entry 869 + -HUGE_VALF, + -HUGE_VALF, + 0.0f + }, + { // Entry 870 + HUGE_VALF, + HUGE_VALF, + -0.0f + }, + { // Entry 871 + -HUGE_VALF, + -HUGE_VALF, + -0.0f + }, + { // Entry 872 + HUGE_VALF, + HUGE_VALF, + 0x1.p0 + }, + { // Entry 873 + -HUGE_VALF, + -HUGE_VALF, + 0x1.p0 + }, + { // Entry 874 + HUGE_VALF, + HUGE_VALF, + -0x1.p0 + }, + { // Entry 875 + -HUGE_VALF, + -HUGE_VALF, + -0x1.p0 + }, + { // Entry 876 + HUGE_VALF, + HUGE_VALF, + 0x1.fcp6 + }, + { // Entry 877 + -HUGE_VALF, + -HUGE_VALF, + 0x1.fcp6 + }, + { // Entry 878 + HUGE_VALF, + HUGE_VALF, + -0x1.fcp6 + }, + { // Entry 879 + -HUGE_VALF, + -HUGE_VALF, + -0x1.fcp6 + }, + { // Entry 880 + HUGE_VALF, + HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 881 + -HUGE_VALF, + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 882 + 0x1.fffffep127, + 0x1.fffffep127, + 0.0f + }, + { // Entry 883 + 0x1.fffffep127, + 0x1.fffffep127, + -0.0f + }, + { // Entry 884 + 0x1.p-126, + 0x1.p-126, + 0.0f + }, + { // Entry 885 + 0x1.p-126, + 0x1.p-126, + -0.0f + }, + { // Entry 886 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + 0.0f + }, + { // Entry 887 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + -0.0f + }, + { // Entry 888 + 0x1.p-149, + 0x1.p-149, + 0.0f + }, + { // Entry 889 + 0x1.p-149, + 0x1.p-149, + -0.0f + }, + { // Entry 890 + -0x1.p-149, + -0x1.p-149, + 0.0f + }, + { // Entry 891 + -0x1.p-149, + -0x1.p-149, + -0.0f + }, + { // Entry 892 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + 0.0f + }, + { // Entry 893 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + -0.0f + }, + { // Entry 894 + -0x1.p-126, + -0x1.p-126, + 0.0f + }, + { // Entry 895 + -0x1.p-126, + -0x1.p-126, + -0.0f + }, + { // Entry 896 + -0x1.fffffep127, + -0x1.fffffep127, + 0.0f + }, + { // Entry 897 + -0x1.fffffep127, + -0x1.fffffep127, + -0.0f + }, + { // Entry 898 + HUGE_VALF, + 0x1.fffffep127, + 0x1.p0 + }, + { // Entry 899 + HUGE_VALF, + 0x1.fffffep127, + 0x1.fcp6 + }, + { // Entry 900 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.p0 + }, + { // Entry 901 + -HUGE_VALF, + -0x1.fffffep127, + 0x1.fcp6 + }, + { // Entry 902 + HUGE_VALF, + 0x1.p-126, + 0x1.3880p15 + }, + { // Entry 903 + HUGE_VALF, + 0x1.p-149, + 0x1.3880p15 + }, + { // Entry 904 + -HUGE_VALF, + -0x1.p-126, + 0x1.3880p15 + }, + { // Entry 905 + -HUGE_VALF, + -0x1.p-149, + 0x1.3880p15 + }, + { // Entry 906 + 0x1.p-127, + 0x1.p-126, + -0x1.p0 + }, + { // Entry 907 + 0x1.fffffcp-128, + 0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 908 + 0.0f, + 0x1.p-149, + -0x1.p0 + }, + { // Entry 909 + -0.0f, + -0x1.p-149, + -0x1.p0 + }, + { // Entry 910 + -0x1.fffffcp-128, + -0x1.fffffcp-127, + -0x1.p0 + }, + { // Entry 911 + -0x1.p-127, + -0x1.p-126, + -0x1.p0 + }, + { // Entry 912 + 0.0f, + 0x1.fffffep127, + -0x1.3880p15 + }, + { // Entry 913 + -0.0f, + -0x1.fffffep127, + -0x1.3880p15 + } +}; diff --git a/tests/math_data/scalbn_intel_data.h b/tests/math_data/scalbn_intel_data.h new file mode 100644 index 000000000..7b9753000 --- /dev/null +++ b/tests/math_data/scalbn_intel_data.h @@ -0,0 +1,4333 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_scalbn_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074, + (int)-10 + }, + { // Entry 1 + -0x1.55555555555560p-1024, + -0x1.5555555555556p-2, + (int)-1022 + }, + { // Entry 2 + -0x1.6db6db6db6db70p-1023, + -0x1.6db6db6db6db7p-1, + (int)-1022 + }, + { // Entry 3 + -0x1.8e38e38e38e390p-1023, + -0x1.8e38e38e38e39p-1, + (int)-1022 + }, + { // Entry 4 + 0.0, + 0x1.0p-1074, + (int)-1 + }, + { // Entry 5 + 0.0, + 0x1.0p-1074, + (int)-10 + }, + { // Entry 6 + 0.0, + 0x1.0p-1074, + (int)-47 + }, + { // Entry 7 + 0x1.p-51, + 0x1.0p-1074, + (int)1023 + }, + { // Entry 8 + 0x1.29e4129e4129e0p-1024, + 0x1.29e4129e4129ep-7, + (int)-1017 + }, + { // Entry 9 + HUGE_VAL, + 0x1.8e147ae147ae1p0, + (int)2147483647 + }, + { // Entry 10 + 0.0, + 0x1.dddddddddddddp-2, + (int)-1073 + }, + { // Entry 11 + 0.0, + 0x1.f7df7df7df7dfp-2, + (int)-1073 + }, + { // Entry 12 + 0x1.ffffffffffffc0p-1033, + 0x1.ffffffffffffcp-1023, + (int)-10 + }, + { // Entry 13 + 0x1.ffffffffffffc0p-1022, + 0x1.ffffffffffffcp-1023, + (int)1 + }, + { // Entry 14 + 0x1.ffffffffffffe0p-1070, + 0x1.ffffffffffffep-1023, + (int)-47 + }, + { // Entry 15 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 16 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)2147483647 + }, + { // Entry 17 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)2147483647 + }, + { // Entry 18 + -0x1.p-10, + -0x1.0p0, + (int)-10 + }, + { // Entry 19 + -0x1.p-9, + -0x1.0p0, + (int)-9 + }, + { // Entry 20 + -0x1.p-8, + -0x1.0p0, + (int)-8 + }, + { // Entry 21 + -0x1.p-7, + -0x1.0p0, + (int)-7 + }, + { // Entry 22 + -0x1.p-6, + -0x1.0p0, + (int)-6 + }, + { // Entry 23 + -0x1.p-5, + -0x1.0p0, + (int)-5 + }, + { // Entry 24 + -0x1.p-4, + -0x1.0p0, + (int)-4 + }, + { // Entry 25 + -0x1.p-3, + -0x1.0p0, + (int)-3 + }, + { // Entry 26 + -0x1.p-2, + -0x1.0p0, + (int)-2 + }, + { // Entry 27 + -0x1.p-1, + -0x1.0p0, + (int)-1 + }, + { // Entry 28 + -0x1.p0, + -0x1.0p0, + (int)0 + }, + { // Entry 29 + -0x1.p1, + -0x1.0p0, + (int)1 + }, + { // Entry 30 + -0x1.p2, + -0x1.0p0, + (int)2 + }, + { // Entry 31 + -0x1.p3, + -0x1.0p0, + (int)3 + }, + { // Entry 32 + -0x1.p4, + -0x1.0p0, + (int)4 + }, + { // Entry 33 + -0x1.p5, + -0x1.0p0, + (int)5 + }, + { // Entry 34 + -0x1.p6, + -0x1.0p0, + (int)6 + }, + { // Entry 35 + -0x1.p7, + -0x1.0p0, + (int)7 + }, + { // Entry 36 + -0x1.p8, + -0x1.0p0, + (int)8 + }, + { // Entry 37 + -0x1.p9, + -0x1.0p0, + (int)9 + }, + { // Entry 38 + -0x1.p10, + -0x1.0p0, + (int)10 + }, + { // Entry 39 + -0x1.d1745d1745d170p-11, + -0x1.d1745d1745d17p-1, + (int)-10 + }, + { // Entry 40 + -0x1.d1745d1745d170p-10, + -0x1.d1745d1745d17p-1, + (int)-9 + }, + { // Entry 41 + -0x1.d1745d1745d170p-9, + -0x1.d1745d1745d17p-1, + (int)-8 + }, + { // Entry 42 + -0x1.d1745d1745d170p-8, + -0x1.d1745d1745d17p-1, + (int)-7 + }, + { // Entry 43 + -0x1.d1745d1745d170p-7, + -0x1.d1745d1745d17p-1, + (int)-6 + }, + { // Entry 44 + -0x1.d1745d1745d170p-6, + -0x1.d1745d1745d17p-1, + (int)-5 + }, + { // Entry 45 + -0x1.d1745d1745d170p-5, + -0x1.d1745d1745d17p-1, + (int)-4 + }, + { // Entry 46 + -0x1.d1745d1745d170p-4, + -0x1.d1745d1745d17p-1, + (int)-3 + }, + { // Entry 47 + -0x1.d1745d1745d170p-3, + -0x1.d1745d1745d17p-1, + (int)-2 + }, + { // Entry 48 + -0x1.d1745d1745d170p-2, + -0x1.d1745d1745d17p-1, + (int)-1 + }, + { // Entry 49 + -0x1.d1745d1745d170p-1, + -0x1.d1745d1745d17p-1, + (int)0 + }, + { // Entry 50 + -0x1.d1745d1745d170p0, + -0x1.d1745d1745d17p-1, + (int)1 + }, + { // Entry 51 + -0x1.d1745d1745d170p1, + -0x1.d1745d1745d17p-1, + (int)2 + }, + { // Entry 52 + -0x1.d1745d1745d170p2, + -0x1.d1745d1745d17p-1, + (int)3 + }, + { // Entry 53 + -0x1.d1745d1745d170p3, + -0x1.d1745d1745d17p-1, + (int)4 + }, + { // Entry 54 + -0x1.d1745d1745d170p4, + -0x1.d1745d1745d17p-1, + (int)5 + }, + { // Entry 55 + -0x1.d1745d1745d170p5, + -0x1.d1745d1745d17p-1, + (int)6 + }, + { // Entry 56 + -0x1.d1745d1745d170p6, + -0x1.d1745d1745d17p-1, + (int)7 + }, + { // Entry 57 + -0x1.d1745d1745d170p7, + -0x1.d1745d1745d17p-1, + (int)8 + }, + { // Entry 58 + -0x1.d1745d1745d170p8, + -0x1.d1745d1745d17p-1, + (int)9 + }, + { // Entry 59 + -0x1.d1745d1745d170p9, + -0x1.d1745d1745d17p-1, + (int)10 + }, + { // Entry 60 + -0x1.a2e8ba2e8ba2e0p-11, + -0x1.a2e8ba2e8ba2ep-1, + (int)-10 + }, + { // Entry 61 + -0x1.a2e8ba2e8ba2e0p-10, + -0x1.a2e8ba2e8ba2ep-1, + (int)-9 + }, + { // Entry 62 + -0x1.a2e8ba2e8ba2e0p-9, + -0x1.a2e8ba2e8ba2ep-1, + (int)-8 + }, + { // Entry 63 + -0x1.a2e8ba2e8ba2e0p-8, + -0x1.a2e8ba2e8ba2ep-1, + (int)-7 + }, + { // Entry 64 + -0x1.a2e8ba2e8ba2e0p-7, + -0x1.a2e8ba2e8ba2ep-1, + (int)-6 + }, + { // Entry 65 + -0x1.a2e8ba2e8ba2e0p-6, + -0x1.a2e8ba2e8ba2ep-1, + (int)-5 + }, + { // Entry 66 + -0x1.a2e8ba2e8ba2e0p-5, + -0x1.a2e8ba2e8ba2ep-1, + (int)-4 + }, + { // Entry 67 + -0x1.a2e8ba2e8ba2e0p-4, + -0x1.a2e8ba2e8ba2ep-1, + (int)-3 + }, + { // Entry 68 + -0x1.a2e8ba2e8ba2e0p-3, + -0x1.a2e8ba2e8ba2ep-1, + (int)-2 + }, + { // Entry 69 + -0x1.a2e8ba2e8ba2e0p-2, + -0x1.a2e8ba2e8ba2ep-1, + (int)-1 + }, + { // Entry 70 + -0x1.a2e8ba2e8ba2e0p-1, + -0x1.a2e8ba2e8ba2ep-1, + (int)0 + }, + { // Entry 71 + -0x1.a2e8ba2e8ba2e0p0, + -0x1.a2e8ba2e8ba2ep-1, + (int)1 + }, + { // Entry 72 + -0x1.a2e8ba2e8ba2e0p1, + -0x1.a2e8ba2e8ba2ep-1, + (int)2 + }, + { // Entry 73 + -0x1.a2e8ba2e8ba2e0p2, + -0x1.a2e8ba2e8ba2ep-1, + (int)3 + }, + { // Entry 74 + -0x1.a2e8ba2e8ba2e0p3, + -0x1.a2e8ba2e8ba2ep-1, + (int)4 + }, + { // Entry 75 + -0x1.a2e8ba2e8ba2e0p4, + -0x1.a2e8ba2e8ba2ep-1, + (int)5 + }, + { // Entry 76 + -0x1.a2e8ba2e8ba2e0p5, + -0x1.a2e8ba2e8ba2ep-1, + (int)6 + }, + { // Entry 77 + -0x1.a2e8ba2e8ba2e0p6, + -0x1.a2e8ba2e8ba2ep-1, + (int)7 + }, + { // Entry 78 + -0x1.a2e8ba2e8ba2e0p7, + -0x1.a2e8ba2e8ba2ep-1, + (int)8 + }, + { // Entry 79 + -0x1.a2e8ba2e8ba2e0p8, + -0x1.a2e8ba2e8ba2ep-1, + (int)9 + }, + { // Entry 80 + -0x1.a2e8ba2e8ba2e0p9, + -0x1.a2e8ba2e8ba2ep-1, + (int)10 + }, + { // Entry 81 + -0x1.745d1745d17450p-11, + -0x1.745d1745d1745p-1, + (int)-10 + }, + { // Entry 82 + -0x1.745d1745d17450p-10, + -0x1.745d1745d1745p-1, + (int)-9 + }, + { // Entry 83 + -0x1.745d1745d17450p-9, + -0x1.745d1745d1745p-1, + (int)-8 + }, + { // Entry 84 + -0x1.745d1745d17450p-8, + -0x1.745d1745d1745p-1, + (int)-7 + }, + { // Entry 85 + -0x1.745d1745d17450p-7, + -0x1.745d1745d1745p-1, + (int)-6 + }, + { // Entry 86 + -0x1.745d1745d17450p-6, + -0x1.745d1745d1745p-1, + (int)-5 + }, + { // Entry 87 + -0x1.745d1745d17450p-5, + -0x1.745d1745d1745p-1, + (int)-4 + }, + { // Entry 88 + -0x1.745d1745d17450p-4, + -0x1.745d1745d1745p-1, + (int)-3 + }, + { // Entry 89 + -0x1.745d1745d17450p-3, + -0x1.745d1745d1745p-1, + (int)-2 + }, + { // Entry 90 + -0x1.745d1745d17450p-2, + -0x1.745d1745d1745p-1, + (int)-1 + }, + { // Entry 91 + -0x1.745d1745d17450p-1, + -0x1.745d1745d1745p-1, + (int)0 + }, + { // Entry 92 + -0x1.745d1745d17450p0, + -0x1.745d1745d1745p-1, + (int)1 + }, + { // Entry 93 + -0x1.745d1745d17450p1, + -0x1.745d1745d1745p-1, + (int)2 + }, + { // Entry 94 + -0x1.745d1745d17450p2, + -0x1.745d1745d1745p-1, + (int)3 + }, + { // Entry 95 + -0x1.745d1745d17450p3, + -0x1.745d1745d1745p-1, + (int)4 + }, + { // Entry 96 + -0x1.745d1745d17450p4, + -0x1.745d1745d1745p-1, + (int)5 + }, + { // Entry 97 + -0x1.745d1745d17450p5, + -0x1.745d1745d1745p-1, + (int)6 + }, + { // Entry 98 + -0x1.745d1745d17450p6, + -0x1.745d1745d1745p-1, + (int)7 + }, + { // Entry 99 + -0x1.745d1745d17450p7, + -0x1.745d1745d1745p-1, + (int)8 + }, + { // Entry 100 + -0x1.745d1745d17450p8, + -0x1.745d1745d1745p-1, + (int)9 + }, + { // Entry 101 + -0x1.745d1745d17450p9, + -0x1.745d1745d1745p-1, + (int)10 + }, + { // Entry 102 + -0x1.45d1745d1745c0p-11, + -0x1.45d1745d1745cp-1, + (int)-10 + }, + { // Entry 103 + -0x1.45d1745d1745c0p-10, + -0x1.45d1745d1745cp-1, + (int)-9 + }, + { // Entry 104 + -0x1.45d1745d1745c0p-9, + -0x1.45d1745d1745cp-1, + (int)-8 + }, + { // Entry 105 + -0x1.45d1745d1745c0p-8, + -0x1.45d1745d1745cp-1, + (int)-7 + }, + { // Entry 106 + -0x1.45d1745d1745c0p-7, + -0x1.45d1745d1745cp-1, + (int)-6 + }, + { // Entry 107 + -0x1.45d1745d1745c0p-6, + -0x1.45d1745d1745cp-1, + (int)-5 + }, + { // Entry 108 + -0x1.45d1745d1745c0p-5, + -0x1.45d1745d1745cp-1, + (int)-4 + }, + { // Entry 109 + -0x1.45d1745d1745c0p-4, + -0x1.45d1745d1745cp-1, + (int)-3 + }, + { // Entry 110 + -0x1.45d1745d1745c0p-3, + -0x1.45d1745d1745cp-1, + (int)-2 + }, + { // Entry 111 + -0x1.45d1745d1745c0p-2, + -0x1.45d1745d1745cp-1, + (int)-1 + }, + { // Entry 112 + -0x1.45d1745d1745c0p-1, + -0x1.45d1745d1745cp-1, + (int)0 + }, + { // Entry 113 + -0x1.45d1745d1745c0p0, + -0x1.45d1745d1745cp-1, + (int)1 + }, + { // Entry 114 + -0x1.45d1745d1745c0p1, + -0x1.45d1745d1745cp-1, + (int)2 + }, + { // Entry 115 + -0x1.45d1745d1745c0p2, + -0x1.45d1745d1745cp-1, + (int)3 + }, + { // Entry 116 + -0x1.45d1745d1745c0p3, + -0x1.45d1745d1745cp-1, + (int)4 + }, + { // Entry 117 + -0x1.45d1745d1745c0p4, + -0x1.45d1745d1745cp-1, + (int)5 + }, + { // Entry 118 + -0x1.45d1745d1745c0p5, + -0x1.45d1745d1745cp-1, + (int)6 + }, + { // Entry 119 + -0x1.45d1745d1745c0p6, + -0x1.45d1745d1745cp-1, + (int)7 + }, + { // Entry 120 + -0x1.45d1745d1745c0p7, + -0x1.45d1745d1745cp-1, + (int)8 + }, + { // Entry 121 + -0x1.45d1745d1745c0p8, + -0x1.45d1745d1745cp-1, + (int)9 + }, + { // Entry 122 + -0x1.45d1745d1745c0p9, + -0x1.45d1745d1745cp-1, + (int)10 + }, + { // Entry 123 + -0x1.1745d1745d1730p-11, + -0x1.1745d1745d173p-1, + (int)-10 + }, + { // Entry 124 + -0x1.1745d1745d1730p-10, + -0x1.1745d1745d173p-1, + (int)-9 + }, + { // Entry 125 + -0x1.1745d1745d1730p-9, + -0x1.1745d1745d173p-1, + (int)-8 + }, + { // Entry 126 + -0x1.1745d1745d1730p-8, + -0x1.1745d1745d173p-1, + (int)-7 + }, + { // Entry 127 + -0x1.1745d1745d1730p-7, + -0x1.1745d1745d173p-1, + (int)-6 + }, + { // Entry 128 + -0x1.1745d1745d1730p-6, + -0x1.1745d1745d173p-1, + (int)-5 + }, + { // Entry 129 + -0x1.1745d1745d1730p-5, + -0x1.1745d1745d173p-1, + (int)-4 + }, + { // Entry 130 + -0x1.1745d1745d1730p-4, + -0x1.1745d1745d173p-1, + (int)-3 + }, + { // Entry 131 + -0x1.1745d1745d1730p-3, + -0x1.1745d1745d173p-1, + (int)-2 + }, + { // Entry 132 + -0x1.1745d1745d1730p-2, + -0x1.1745d1745d173p-1, + (int)-1 + }, + { // Entry 133 + -0x1.1745d1745d1730p-1, + -0x1.1745d1745d173p-1, + (int)0 + }, + { // Entry 134 + -0x1.1745d1745d1730p0, + -0x1.1745d1745d173p-1, + (int)1 + }, + { // Entry 135 + -0x1.1745d1745d1730p1, + -0x1.1745d1745d173p-1, + (int)2 + }, + { // Entry 136 + -0x1.1745d1745d1730p2, + -0x1.1745d1745d173p-1, + (int)3 + }, + { // Entry 137 + -0x1.1745d1745d1730p3, + -0x1.1745d1745d173p-1, + (int)4 + }, + { // Entry 138 + -0x1.1745d1745d1730p4, + -0x1.1745d1745d173p-1, + (int)5 + }, + { // Entry 139 + -0x1.1745d1745d1730p5, + -0x1.1745d1745d173p-1, + (int)6 + }, + { // Entry 140 + -0x1.1745d1745d1730p6, + -0x1.1745d1745d173p-1, + (int)7 + }, + { // Entry 141 + -0x1.1745d1745d1730p7, + -0x1.1745d1745d173p-1, + (int)8 + }, + { // Entry 142 + -0x1.1745d1745d1730p8, + -0x1.1745d1745d173p-1, + (int)9 + }, + { // Entry 143 + -0x1.1745d1745d1730p9, + -0x1.1745d1745d173p-1, + (int)10 + }, + { // Entry 144 + -0x1.d1745d1745d140p-12, + -0x1.d1745d1745d14p-2, + (int)-10 + }, + { // Entry 145 + -0x1.d1745d1745d140p-11, + -0x1.d1745d1745d14p-2, + (int)-9 + }, + { // Entry 146 + -0x1.d1745d1745d140p-10, + -0x1.d1745d1745d14p-2, + (int)-8 + }, + { // Entry 147 + -0x1.d1745d1745d140p-9, + -0x1.d1745d1745d14p-2, + (int)-7 + }, + { // Entry 148 + -0x1.d1745d1745d140p-8, + -0x1.d1745d1745d14p-2, + (int)-6 + }, + { // Entry 149 + -0x1.d1745d1745d140p-7, + -0x1.d1745d1745d14p-2, + (int)-5 + }, + { // Entry 150 + -0x1.d1745d1745d140p-6, + -0x1.d1745d1745d14p-2, + (int)-4 + }, + { // Entry 151 + -0x1.d1745d1745d140p-5, + -0x1.d1745d1745d14p-2, + (int)-3 + }, + { // Entry 152 + -0x1.d1745d1745d140p-4, + -0x1.d1745d1745d14p-2, + (int)-2 + }, + { // Entry 153 + -0x1.d1745d1745d140p-3, + -0x1.d1745d1745d14p-2, + (int)-1 + }, + { // Entry 154 + -0x1.d1745d1745d140p-2, + -0x1.d1745d1745d14p-2, + (int)0 + }, + { // Entry 155 + -0x1.d1745d1745d140p-1, + -0x1.d1745d1745d14p-2, + (int)1 + }, + { // Entry 156 + -0x1.d1745d1745d140p0, + -0x1.d1745d1745d14p-2, + (int)2 + }, + { // Entry 157 + -0x1.d1745d1745d140p1, + -0x1.d1745d1745d14p-2, + (int)3 + }, + { // Entry 158 + -0x1.d1745d1745d140p2, + -0x1.d1745d1745d14p-2, + (int)4 + }, + { // Entry 159 + -0x1.d1745d1745d140p3, + -0x1.d1745d1745d14p-2, + (int)5 + }, + { // Entry 160 + -0x1.d1745d1745d140p4, + -0x1.d1745d1745d14p-2, + (int)6 + }, + { // Entry 161 + -0x1.d1745d1745d140p5, + -0x1.d1745d1745d14p-2, + (int)7 + }, + { // Entry 162 + -0x1.d1745d1745d140p6, + -0x1.d1745d1745d14p-2, + (int)8 + }, + { // Entry 163 + -0x1.d1745d1745d140p7, + -0x1.d1745d1745d14p-2, + (int)9 + }, + { // Entry 164 + -0x1.d1745d1745d140p8, + -0x1.d1745d1745d14p-2, + (int)10 + }, + { // Entry 165 + -0x1.745d1745d17420p-12, + -0x1.745d1745d1742p-2, + (int)-10 + }, + { // Entry 166 + -0x1.745d1745d17420p-11, + -0x1.745d1745d1742p-2, + (int)-9 + }, + { // Entry 167 + -0x1.745d1745d17420p-10, + -0x1.745d1745d1742p-2, + (int)-8 + }, + { // Entry 168 + -0x1.745d1745d17420p-9, + -0x1.745d1745d1742p-2, + (int)-7 + }, + { // Entry 169 + -0x1.745d1745d17420p-8, + -0x1.745d1745d1742p-2, + (int)-6 + }, + { // Entry 170 + -0x1.745d1745d17420p-7, + -0x1.745d1745d1742p-2, + (int)-5 + }, + { // Entry 171 + -0x1.745d1745d17420p-6, + -0x1.745d1745d1742p-2, + (int)-4 + }, + { // Entry 172 + -0x1.745d1745d17420p-5, + -0x1.745d1745d1742p-2, + (int)-3 + }, + { // Entry 173 + -0x1.745d1745d17420p-4, + -0x1.745d1745d1742p-2, + (int)-2 + }, + { // Entry 174 + -0x1.745d1745d17420p-3, + -0x1.745d1745d1742p-2, + (int)-1 + }, + { // Entry 175 + -0x1.745d1745d17420p-2, + -0x1.745d1745d1742p-2, + (int)0 + }, + { // Entry 176 + -0x1.745d1745d17420p-1, + -0x1.745d1745d1742p-2, + (int)1 + }, + { // Entry 177 + -0x1.745d1745d17420p0, + -0x1.745d1745d1742p-2, + (int)2 + }, + { // Entry 178 + -0x1.745d1745d17420p1, + -0x1.745d1745d1742p-2, + (int)3 + }, + { // Entry 179 + -0x1.745d1745d17420p2, + -0x1.745d1745d1742p-2, + (int)4 + }, + { // Entry 180 + -0x1.745d1745d17420p3, + -0x1.745d1745d1742p-2, + (int)5 + }, + { // Entry 181 + -0x1.745d1745d17420p4, + -0x1.745d1745d1742p-2, + (int)6 + }, + { // Entry 182 + -0x1.745d1745d17420p5, + -0x1.745d1745d1742p-2, + (int)7 + }, + { // Entry 183 + -0x1.745d1745d17420p6, + -0x1.745d1745d1742p-2, + (int)8 + }, + { // Entry 184 + -0x1.745d1745d17420p7, + -0x1.745d1745d1742p-2, + (int)9 + }, + { // Entry 185 + -0x1.745d1745d17420p8, + -0x1.745d1745d1742p-2, + (int)10 + }, + { // Entry 186 + -0x1.1745d1745d17p-12, + -0x1.1745d1745d170p-2, + (int)-10 + }, + { // Entry 187 + -0x1.1745d1745d17p-11, + -0x1.1745d1745d170p-2, + (int)-9 + }, + { // Entry 188 + -0x1.1745d1745d17p-10, + -0x1.1745d1745d170p-2, + (int)-8 + }, + { // Entry 189 + -0x1.1745d1745d17p-9, + -0x1.1745d1745d170p-2, + (int)-7 + }, + { // Entry 190 + -0x1.1745d1745d17p-8, + -0x1.1745d1745d170p-2, + (int)-6 + }, + { // Entry 191 + -0x1.1745d1745d17p-7, + -0x1.1745d1745d170p-2, + (int)-5 + }, + { // Entry 192 + -0x1.1745d1745d17p-6, + -0x1.1745d1745d170p-2, + (int)-4 + }, + { // Entry 193 + -0x1.1745d1745d17p-5, + -0x1.1745d1745d170p-2, + (int)-3 + }, + { // Entry 194 + -0x1.1745d1745d17p-4, + -0x1.1745d1745d170p-2, + (int)-2 + }, + { // Entry 195 + -0x1.1745d1745d17p-3, + -0x1.1745d1745d170p-2, + (int)-1 + }, + { // Entry 196 + -0x1.1745d1745d17p-2, + -0x1.1745d1745d170p-2, + (int)0 + }, + { // Entry 197 + -0x1.1745d1745d17p-1, + -0x1.1745d1745d170p-2, + (int)1 + }, + { // Entry 198 + -0x1.1745d1745d17p0, + -0x1.1745d1745d170p-2, + (int)2 + }, + { // Entry 199 + -0x1.1745d1745d17p1, + -0x1.1745d1745d170p-2, + (int)3 + }, + { // Entry 200 + -0x1.1745d1745d17p2, + -0x1.1745d1745d170p-2, + (int)4 + }, + { // Entry 201 + -0x1.1745d1745d17p3, + -0x1.1745d1745d170p-2, + (int)5 + }, + { // Entry 202 + -0x1.1745d1745d17p4, + -0x1.1745d1745d170p-2, + (int)6 + }, + { // Entry 203 + -0x1.1745d1745d17p5, + -0x1.1745d1745d170p-2, + (int)7 + }, + { // Entry 204 + -0x1.1745d1745d17p6, + -0x1.1745d1745d170p-2, + (int)8 + }, + { // Entry 205 + -0x1.1745d1745d17p7, + -0x1.1745d1745d170p-2, + (int)9 + }, + { // Entry 206 + -0x1.1745d1745d17p8, + -0x1.1745d1745d170p-2, + (int)10 + }, + { // Entry 207 + -0x1.745d1745d173d0p-13, + -0x1.745d1745d173dp-3, + (int)-10 + }, + { // Entry 208 + -0x1.745d1745d173d0p-12, + -0x1.745d1745d173dp-3, + (int)-9 + }, + { // Entry 209 + -0x1.745d1745d173d0p-11, + -0x1.745d1745d173dp-3, + (int)-8 + }, + { // Entry 210 + -0x1.745d1745d173d0p-10, + -0x1.745d1745d173dp-3, + (int)-7 + }, + { // Entry 211 + -0x1.745d1745d173d0p-9, + -0x1.745d1745d173dp-3, + (int)-6 + }, + { // Entry 212 + -0x1.745d1745d173d0p-8, + -0x1.745d1745d173dp-3, + (int)-5 + }, + { // Entry 213 + -0x1.745d1745d173d0p-7, + -0x1.745d1745d173dp-3, + (int)-4 + }, + { // Entry 214 + -0x1.745d1745d173d0p-6, + -0x1.745d1745d173dp-3, + (int)-3 + }, + { // Entry 215 + -0x1.745d1745d173d0p-5, + -0x1.745d1745d173dp-3, + (int)-2 + }, + { // Entry 216 + -0x1.745d1745d173d0p-4, + -0x1.745d1745d173dp-3, + (int)-1 + }, + { // Entry 217 + -0x1.745d1745d173d0p-3, + -0x1.745d1745d173dp-3, + (int)0 + }, + { // Entry 218 + -0x1.745d1745d173d0p-2, + -0x1.745d1745d173dp-3, + (int)1 + }, + { // Entry 219 + -0x1.745d1745d173d0p-1, + -0x1.745d1745d173dp-3, + (int)2 + }, + { // Entry 220 + -0x1.745d1745d173d0p0, + -0x1.745d1745d173dp-3, + (int)3 + }, + { // Entry 221 + -0x1.745d1745d173d0p1, + -0x1.745d1745d173dp-3, + (int)4 + }, + { // Entry 222 + -0x1.745d1745d173d0p2, + -0x1.745d1745d173dp-3, + (int)5 + }, + { // Entry 223 + -0x1.745d1745d173d0p3, + -0x1.745d1745d173dp-3, + (int)6 + }, + { // Entry 224 + -0x1.745d1745d173d0p4, + -0x1.745d1745d173dp-3, + (int)7 + }, + { // Entry 225 + -0x1.745d1745d173d0p5, + -0x1.745d1745d173dp-3, + (int)8 + }, + { // Entry 226 + -0x1.745d1745d173d0p6, + -0x1.745d1745d173dp-3, + (int)9 + }, + { // Entry 227 + -0x1.745d1745d173d0p7, + -0x1.745d1745d173dp-3, + (int)10 + }, + { // Entry 228 + -0x1.745d1745d17340p-14, + -0x1.745d1745d1734p-4, + (int)-10 + }, + { // Entry 229 + -0x1.745d1745d17340p-13, + -0x1.745d1745d1734p-4, + (int)-9 + }, + { // Entry 230 + -0x1.745d1745d17340p-12, + -0x1.745d1745d1734p-4, + (int)-8 + }, + { // Entry 231 + -0x1.745d1745d17340p-11, + -0x1.745d1745d1734p-4, + (int)-7 + }, + { // Entry 232 + -0x1.745d1745d17340p-10, + -0x1.745d1745d1734p-4, + (int)-6 + }, + { // Entry 233 + -0x1.745d1745d17340p-9, + -0x1.745d1745d1734p-4, + (int)-5 + }, + { // Entry 234 + -0x1.745d1745d17340p-8, + -0x1.745d1745d1734p-4, + (int)-4 + }, + { // Entry 235 + -0x1.745d1745d17340p-7, + -0x1.745d1745d1734p-4, + (int)-3 + }, + { // Entry 236 + -0x1.745d1745d17340p-6, + -0x1.745d1745d1734p-4, + (int)-2 + }, + { // Entry 237 + -0x1.745d1745d17340p-5, + -0x1.745d1745d1734p-4, + (int)-1 + }, + { // Entry 238 + -0x1.745d1745d17340p-4, + -0x1.745d1745d1734p-4, + (int)0 + }, + { // Entry 239 + -0x1.745d1745d17340p-3, + -0x1.745d1745d1734p-4, + (int)1 + }, + { // Entry 240 + -0x1.745d1745d17340p-2, + -0x1.745d1745d1734p-4, + (int)2 + }, + { // Entry 241 + -0x1.745d1745d17340p-1, + -0x1.745d1745d1734p-4, + (int)3 + }, + { // Entry 242 + -0x1.745d1745d17340p0, + -0x1.745d1745d1734p-4, + (int)4 + }, + { // Entry 243 + -0x1.745d1745d17340p1, + -0x1.745d1745d1734p-4, + (int)5 + }, + { // Entry 244 + -0x1.745d1745d17340p2, + -0x1.745d1745d1734p-4, + (int)6 + }, + { // Entry 245 + -0x1.745d1745d17340p3, + -0x1.745d1745d1734p-4, + (int)7 + }, + { // Entry 246 + -0x1.745d1745d17340p4, + -0x1.745d1745d1734p-4, + (int)8 + }, + { // Entry 247 + -0x1.745d1745d17340p5, + -0x1.745d1745d1734p-4, + (int)9 + }, + { // Entry 248 + -0x1.745d1745d17340p6, + -0x1.745d1745d1734p-4, + (int)10 + }, + { // Entry 249 + 0x1.20p-62, + 0x1.2p-52, + (int)-10 + }, + { // Entry 250 + 0x1.20p-61, + 0x1.2p-52, + (int)-9 + }, + { // Entry 251 + 0x1.20p-60, + 0x1.2p-52, + (int)-8 + }, + { // Entry 252 + 0x1.20p-59, + 0x1.2p-52, + (int)-7 + }, + { // Entry 253 + 0x1.20p-58, + 0x1.2p-52, + (int)-6 + }, + { // Entry 254 + 0x1.20p-57, + 0x1.2p-52, + (int)-5 + }, + { // Entry 255 + 0x1.20p-56, + 0x1.2p-52, + (int)-4 + }, + { // Entry 256 + 0x1.20p-55, + 0x1.2p-52, + (int)-3 + }, + { // Entry 257 + 0x1.20p-54, + 0x1.2p-52, + (int)-2 + }, + { // Entry 258 + 0x1.20p-53, + 0x1.2p-52, + (int)-1 + }, + { // Entry 259 + 0x1.20p-52, + 0x1.2p-52, + (int)0 + }, + { // Entry 260 + 0x1.20p-51, + 0x1.2p-52, + (int)1 + }, + { // Entry 261 + 0x1.20p-50, + 0x1.2p-52, + (int)2 + }, + { // Entry 262 + 0x1.20p-49, + 0x1.2p-52, + (int)3 + }, + { // Entry 263 + 0x1.20p-48, + 0x1.2p-52, + (int)4 + }, + { // Entry 264 + 0x1.20p-47, + 0x1.2p-52, + (int)5 + }, + { // Entry 265 + 0x1.20p-46, + 0x1.2p-52, + (int)6 + }, + { // Entry 266 + 0x1.20p-45, + 0x1.2p-52, + (int)7 + }, + { // Entry 267 + 0x1.20p-44, + 0x1.2p-52, + (int)8 + }, + { // Entry 268 + 0x1.20p-43, + 0x1.2p-52, + (int)9 + }, + { // Entry 269 + 0x1.20p-42, + 0x1.2p-52, + (int)10 + }, + { // Entry 270 + 0x1.745d1745d17580p-14, + 0x1.745d1745d1758p-4, + (int)-10 + }, + { // Entry 271 + 0x1.745d1745d17580p-13, + 0x1.745d1745d1758p-4, + (int)-9 + }, + { // Entry 272 + 0x1.745d1745d17580p-12, + 0x1.745d1745d1758p-4, + (int)-8 + }, + { // Entry 273 + 0x1.745d1745d17580p-11, + 0x1.745d1745d1758p-4, + (int)-7 + }, + { // Entry 274 + 0x1.745d1745d17580p-10, + 0x1.745d1745d1758p-4, + (int)-6 + }, + { // Entry 275 + 0x1.745d1745d17580p-9, + 0x1.745d1745d1758p-4, + (int)-5 + }, + { // Entry 276 + 0x1.745d1745d17580p-8, + 0x1.745d1745d1758p-4, + (int)-4 + }, + { // Entry 277 + 0x1.745d1745d17580p-7, + 0x1.745d1745d1758p-4, + (int)-3 + }, + { // Entry 278 + 0x1.745d1745d17580p-6, + 0x1.745d1745d1758p-4, + (int)-2 + }, + { // Entry 279 + 0x1.745d1745d17580p-5, + 0x1.745d1745d1758p-4, + (int)-1 + }, + { // Entry 280 + 0x1.745d1745d17580p-4, + 0x1.745d1745d1758p-4, + (int)0 + }, + { // Entry 281 + 0x1.745d1745d17580p-3, + 0x1.745d1745d1758p-4, + (int)1 + }, + { // Entry 282 + 0x1.745d1745d17580p-2, + 0x1.745d1745d1758p-4, + (int)2 + }, + { // Entry 283 + 0x1.745d1745d17580p-1, + 0x1.745d1745d1758p-4, + (int)3 + }, + { // Entry 284 + 0x1.745d1745d17580p0, + 0x1.745d1745d1758p-4, + (int)4 + }, + { // Entry 285 + 0x1.745d1745d17580p1, + 0x1.745d1745d1758p-4, + (int)5 + }, + { // Entry 286 + 0x1.745d1745d17580p2, + 0x1.745d1745d1758p-4, + (int)6 + }, + { // Entry 287 + 0x1.745d1745d17580p3, + 0x1.745d1745d1758p-4, + (int)7 + }, + { // Entry 288 + 0x1.745d1745d17580p4, + 0x1.745d1745d1758p-4, + (int)8 + }, + { // Entry 289 + 0x1.745d1745d17580p5, + 0x1.745d1745d1758p-4, + (int)9 + }, + { // Entry 290 + 0x1.745d1745d17580p6, + 0x1.745d1745d1758p-4, + (int)10 + }, + { // Entry 291 + 0x1.745d1745d174f0p-13, + 0x1.745d1745d174fp-3, + (int)-10 + }, + { // Entry 292 + 0x1.745d1745d174f0p-12, + 0x1.745d1745d174fp-3, + (int)-9 + }, + { // Entry 293 + 0x1.745d1745d174f0p-11, + 0x1.745d1745d174fp-3, + (int)-8 + }, + { // Entry 294 + 0x1.745d1745d174f0p-10, + 0x1.745d1745d174fp-3, + (int)-7 + }, + { // Entry 295 + 0x1.745d1745d174f0p-9, + 0x1.745d1745d174fp-3, + (int)-6 + }, + { // Entry 296 + 0x1.745d1745d174f0p-8, + 0x1.745d1745d174fp-3, + (int)-5 + }, + { // Entry 297 + 0x1.745d1745d174f0p-7, + 0x1.745d1745d174fp-3, + (int)-4 + }, + { // Entry 298 + 0x1.745d1745d174f0p-6, + 0x1.745d1745d174fp-3, + (int)-3 + }, + { // Entry 299 + 0x1.745d1745d174f0p-5, + 0x1.745d1745d174fp-3, + (int)-2 + }, + { // Entry 300 + 0x1.745d1745d174f0p-4, + 0x1.745d1745d174fp-3, + (int)-1 + }, + { // Entry 301 + 0x1.745d1745d174f0p-3, + 0x1.745d1745d174fp-3, + (int)0 + }, + { // Entry 302 + 0x1.745d1745d174f0p-2, + 0x1.745d1745d174fp-3, + (int)1 + }, + { // Entry 303 + 0x1.745d1745d174f0p-1, + 0x1.745d1745d174fp-3, + (int)2 + }, + { // Entry 304 + 0x1.745d1745d174f0p0, + 0x1.745d1745d174fp-3, + (int)3 + }, + { // Entry 305 + 0x1.745d1745d174f0p1, + 0x1.745d1745d174fp-3, + (int)4 + }, + { // Entry 306 + 0x1.745d1745d174f0p2, + 0x1.745d1745d174fp-3, + (int)5 + }, + { // Entry 307 + 0x1.745d1745d174f0p3, + 0x1.745d1745d174fp-3, + (int)6 + }, + { // Entry 308 + 0x1.745d1745d174f0p4, + 0x1.745d1745d174fp-3, + (int)7 + }, + { // Entry 309 + 0x1.745d1745d174f0p5, + 0x1.745d1745d174fp-3, + (int)8 + }, + { // Entry 310 + 0x1.745d1745d174f0p6, + 0x1.745d1745d174fp-3, + (int)9 + }, + { // Entry 311 + 0x1.745d1745d174f0p7, + 0x1.745d1745d174fp-3, + (int)10 + }, + { // Entry 312 + 0x1.1745d1745d1790p-12, + 0x1.1745d1745d179p-2, + (int)-10 + }, + { // Entry 313 + 0x1.1745d1745d1790p-11, + 0x1.1745d1745d179p-2, + (int)-9 + }, + { // Entry 314 + 0x1.1745d1745d1790p-10, + 0x1.1745d1745d179p-2, + (int)-8 + }, + { // Entry 315 + 0x1.1745d1745d1790p-9, + 0x1.1745d1745d179p-2, + (int)-7 + }, + { // Entry 316 + 0x1.1745d1745d1790p-8, + 0x1.1745d1745d179p-2, + (int)-6 + }, + { // Entry 317 + 0x1.1745d1745d1790p-7, + 0x1.1745d1745d179p-2, + (int)-5 + }, + { // Entry 318 + 0x1.1745d1745d1790p-6, + 0x1.1745d1745d179p-2, + (int)-4 + }, + { // Entry 319 + 0x1.1745d1745d1790p-5, + 0x1.1745d1745d179p-2, + (int)-3 + }, + { // Entry 320 + 0x1.1745d1745d1790p-4, + 0x1.1745d1745d179p-2, + (int)-2 + }, + { // Entry 321 + 0x1.1745d1745d1790p-3, + 0x1.1745d1745d179p-2, + (int)-1 + }, + { // Entry 322 + 0x1.1745d1745d1790p-2, + 0x1.1745d1745d179p-2, + (int)0 + }, + { // Entry 323 + 0x1.1745d1745d1790p-1, + 0x1.1745d1745d179p-2, + (int)1 + }, + { // Entry 324 + 0x1.1745d1745d1790p0, + 0x1.1745d1745d179p-2, + (int)2 + }, + { // Entry 325 + 0x1.1745d1745d1790p1, + 0x1.1745d1745d179p-2, + (int)3 + }, + { // Entry 326 + 0x1.1745d1745d1790p2, + 0x1.1745d1745d179p-2, + (int)4 + }, + { // Entry 327 + 0x1.1745d1745d1790p3, + 0x1.1745d1745d179p-2, + (int)5 + }, + { // Entry 328 + 0x1.1745d1745d1790p4, + 0x1.1745d1745d179p-2, + (int)6 + }, + { // Entry 329 + 0x1.1745d1745d1790p5, + 0x1.1745d1745d179p-2, + (int)7 + }, + { // Entry 330 + 0x1.1745d1745d1790p6, + 0x1.1745d1745d179p-2, + (int)8 + }, + { // Entry 331 + 0x1.1745d1745d1790p7, + 0x1.1745d1745d179p-2, + (int)9 + }, + { // Entry 332 + 0x1.1745d1745d1790p8, + 0x1.1745d1745d179p-2, + (int)10 + }, + { // Entry 333 + 0x1.745d1745d174a0p-12, + 0x1.745d1745d174ap-2, + (int)-10 + }, + { // Entry 334 + 0x1.745d1745d174a0p-11, + 0x1.745d1745d174ap-2, + (int)-9 + }, + { // Entry 335 + 0x1.745d1745d174a0p-10, + 0x1.745d1745d174ap-2, + (int)-8 + }, + { // Entry 336 + 0x1.745d1745d174a0p-9, + 0x1.745d1745d174ap-2, + (int)-7 + }, + { // Entry 337 + 0x1.745d1745d174a0p-8, + 0x1.745d1745d174ap-2, + (int)-6 + }, + { // Entry 338 + 0x1.745d1745d174a0p-7, + 0x1.745d1745d174ap-2, + (int)-5 + }, + { // Entry 339 + 0x1.745d1745d174a0p-6, + 0x1.745d1745d174ap-2, + (int)-4 + }, + { // Entry 340 + 0x1.745d1745d174a0p-5, + 0x1.745d1745d174ap-2, + (int)-3 + }, + { // Entry 341 + 0x1.745d1745d174a0p-4, + 0x1.745d1745d174ap-2, + (int)-2 + }, + { // Entry 342 + 0x1.745d1745d174a0p-3, + 0x1.745d1745d174ap-2, + (int)-1 + }, + { // Entry 343 + 0x1.745d1745d174a0p-2, + 0x1.745d1745d174ap-2, + (int)0 + }, + { // Entry 344 + 0x1.745d1745d174a0p-1, + 0x1.745d1745d174ap-2, + (int)1 + }, + { // Entry 345 + 0x1.745d1745d174a0p0, + 0x1.745d1745d174ap-2, + (int)2 + }, + { // Entry 346 + 0x1.745d1745d174a0p1, + 0x1.745d1745d174ap-2, + (int)3 + }, + { // Entry 347 + 0x1.745d1745d174a0p2, + 0x1.745d1745d174ap-2, + (int)4 + }, + { // Entry 348 + 0x1.745d1745d174a0p3, + 0x1.745d1745d174ap-2, + (int)5 + }, + { // Entry 349 + 0x1.745d1745d174a0p4, + 0x1.745d1745d174ap-2, + (int)6 + }, + { // Entry 350 + 0x1.745d1745d174a0p5, + 0x1.745d1745d174ap-2, + (int)7 + }, + { // Entry 351 + 0x1.745d1745d174a0p6, + 0x1.745d1745d174ap-2, + (int)8 + }, + { // Entry 352 + 0x1.745d1745d174a0p7, + 0x1.745d1745d174ap-2, + (int)9 + }, + { // Entry 353 + 0x1.745d1745d174a0p8, + 0x1.745d1745d174ap-2, + (int)10 + }, + { // Entry 354 + 0x1.d1745d1745d1c0p-12, + 0x1.d1745d1745d1cp-2, + (int)-10 + }, + { // Entry 355 + 0x1.d1745d1745d1c0p-11, + 0x1.d1745d1745d1cp-2, + (int)-9 + }, + { // Entry 356 + 0x1.d1745d1745d1c0p-10, + 0x1.d1745d1745d1cp-2, + (int)-8 + }, + { // Entry 357 + 0x1.d1745d1745d1c0p-9, + 0x1.d1745d1745d1cp-2, + (int)-7 + }, + { // Entry 358 + 0x1.d1745d1745d1c0p-8, + 0x1.d1745d1745d1cp-2, + (int)-6 + }, + { // Entry 359 + 0x1.d1745d1745d1c0p-7, + 0x1.d1745d1745d1cp-2, + (int)-5 + }, + { // Entry 360 + 0x1.d1745d1745d1c0p-6, + 0x1.d1745d1745d1cp-2, + (int)-4 + }, + { // Entry 361 + 0x1.d1745d1745d1c0p-5, + 0x1.d1745d1745d1cp-2, + (int)-3 + }, + { // Entry 362 + 0x1.d1745d1745d1c0p-4, + 0x1.d1745d1745d1cp-2, + (int)-2 + }, + { // Entry 363 + 0x1.d1745d1745d1c0p-3, + 0x1.d1745d1745d1cp-2, + (int)-1 + }, + { // Entry 364 + 0x1.d1745d1745d1c0p-2, + 0x1.d1745d1745d1cp-2, + (int)0 + }, + { // Entry 365 + 0x1.d1745d1745d1c0p-1, + 0x1.d1745d1745d1cp-2, + (int)1 + }, + { // Entry 366 + 0x1.d1745d1745d1c0p0, + 0x1.d1745d1745d1cp-2, + (int)2 + }, + { // Entry 367 + 0x1.d1745d1745d1c0p1, + 0x1.d1745d1745d1cp-2, + (int)3 + }, + { // Entry 368 + 0x1.d1745d1745d1c0p2, + 0x1.d1745d1745d1cp-2, + (int)4 + }, + { // Entry 369 + 0x1.d1745d1745d1c0p3, + 0x1.d1745d1745d1cp-2, + (int)5 + }, + { // Entry 370 + 0x1.d1745d1745d1c0p4, + 0x1.d1745d1745d1cp-2, + (int)6 + }, + { // Entry 371 + 0x1.d1745d1745d1c0p5, + 0x1.d1745d1745d1cp-2, + (int)7 + }, + { // Entry 372 + 0x1.d1745d1745d1c0p6, + 0x1.d1745d1745d1cp-2, + (int)8 + }, + { // Entry 373 + 0x1.d1745d1745d1c0p7, + 0x1.d1745d1745d1cp-2, + (int)9 + }, + { // Entry 374 + 0x1.d1745d1745d1c0p8, + 0x1.d1745d1745d1cp-2, + (int)10 + }, + { // Entry 375 + 0x1.1745d1745d1770p-11, + 0x1.1745d1745d177p-1, + (int)-10 + }, + { // Entry 376 + 0x1.1745d1745d1770p-10, + 0x1.1745d1745d177p-1, + (int)-9 + }, + { // Entry 377 + 0x1.1745d1745d1770p-9, + 0x1.1745d1745d177p-1, + (int)-8 + }, + { // Entry 378 + 0x1.1745d1745d1770p-8, + 0x1.1745d1745d177p-1, + (int)-7 + }, + { // Entry 379 + 0x1.1745d1745d1770p-7, + 0x1.1745d1745d177p-1, + (int)-6 + }, + { // Entry 380 + 0x1.1745d1745d1770p-6, + 0x1.1745d1745d177p-1, + (int)-5 + }, + { // Entry 381 + 0x1.1745d1745d1770p-5, + 0x1.1745d1745d177p-1, + (int)-4 + }, + { // Entry 382 + 0x1.1745d1745d1770p-4, + 0x1.1745d1745d177p-1, + (int)-3 + }, + { // Entry 383 + 0x1.1745d1745d1770p-3, + 0x1.1745d1745d177p-1, + (int)-2 + }, + { // Entry 384 + 0x1.1745d1745d1770p-2, + 0x1.1745d1745d177p-1, + (int)-1 + }, + { // Entry 385 + 0x1.1745d1745d1770p-1, + 0x1.1745d1745d177p-1, + (int)0 + }, + { // Entry 386 + 0x1.1745d1745d1770p0, + 0x1.1745d1745d177p-1, + (int)1 + }, + { // Entry 387 + 0x1.1745d1745d1770p1, + 0x1.1745d1745d177p-1, + (int)2 + }, + { // Entry 388 + 0x1.1745d1745d1770p2, + 0x1.1745d1745d177p-1, + (int)3 + }, + { // Entry 389 + 0x1.1745d1745d1770p3, + 0x1.1745d1745d177p-1, + (int)4 + }, + { // Entry 390 + 0x1.1745d1745d1770p4, + 0x1.1745d1745d177p-1, + (int)5 + }, + { // Entry 391 + 0x1.1745d1745d1770p5, + 0x1.1745d1745d177p-1, + (int)6 + }, + { // Entry 392 + 0x1.1745d1745d1770p6, + 0x1.1745d1745d177p-1, + (int)7 + }, + { // Entry 393 + 0x1.1745d1745d1770p7, + 0x1.1745d1745d177p-1, + (int)8 + }, + { // Entry 394 + 0x1.1745d1745d1770p8, + 0x1.1745d1745d177p-1, + (int)9 + }, + { // Entry 395 + 0x1.1745d1745d1770p9, + 0x1.1745d1745d177p-1, + (int)10 + }, + { // Entry 396 + 0x1.45d1745d1746p-11, + 0x1.45d1745d17460p-1, + (int)-10 + }, + { // Entry 397 + 0x1.45d1745d1746p-10, + 0x1.45d1745d17460p-1, + (int)-9 + }, + { // Entry 398 + 0x1.45d1745d1746p-9, + 0x1.45d1745d17460p-1, + (int)-8 + }, + { // Entry 399 + 0x1.45d1745d1746p-8, + 0x1.45d1745d17460p-1, + (int)-7 + }, + { // Entry 400 + 0x1.45d1745d1746p-7, + 0x1.45d1745d17460p-1, + (int)-6 + }, + { // Entry 401 + 0x1.45d1745d1746p-6, + 0x1.45d1745d17460p-1, + (int)-5 + }, + { // Entry 402 + 0x1.45d1745d1746p-5, + 0x1.45d1745d17460p-1, + (int)-4 + }, + { // Entry 403 + 0x1.45d1745d1746p-4, + 0x1.45d1745d17460p-1, + (int)-3 + }, + { // Entry 404 + 0x1.45d1745d1746p-3, + 0x1.45d1745d17460p-1, + (int)-2 + }, + { // Entry 405 + 0x1.45d1745d1746p-2, + 0x1.45d1745d17460p-1, + (int)-1 + }, + { // Entry 406 + 0x1.45d1745d1746p-1, + 0x1.45d1745d17460p-1, + (int)0 + }, + { // Entry 407 + 0x1.45d1745d1746p0, + 0x1.45d1745d17460p-1, + (int)1 + }, + { // Entry 408 + 0x1.45d1745d1746p1, + 0x1.45d1745d17460p-1, + (int)2 + }, + { // Entry 409 + 0x1.45d1745d1746p2, + 0x1.45d1745d17460p-1, + (int)3 + }, + { // Entry 410 + 0x1.45d1745d1746p3, + 0x1.45d1745d17460p-1, + (int)4 + }, + { // Entry 411 + 0x1.45d1745d1746p4, + 0x1.45d1745d17460p-1, + (int)5 + }, + { // Entry 412 + 0x1.45d1745d1746p5, + 0x1.45d1745d17460p-1, + (int)6 + }, + { // Entry 413 + 0x1.45d1745d1746p6, + 0x1.45d1745d17460p-1, + (int)7 + }, + { // Entry 414 + 0x1.45d1745d1746p7, + 0x1.45d1745d17460p-1, + (int)8 + }, + { // Entry 415 + 0x1.45d1745d1746p8, + 0x1.45d1745d17460p-1, + (int)9 + }, + { // Entry 416 + 0x1.45d1745d1746p9, + 0x1.45d1745d17460p-1, + (int)10 + }, + { // Entry 417 + 0x1.745d1745d17490p-11, + 0x1.745d1745d1749p-1, + (int)-10 + }, + { // Entry 418 + 0x1.745d1745d17490p-10, + 0x1.745d1745d1749p-1, + (int)-9 + }, + { // Entry 419 + 0x1.745d1745d17490p-9, + 0x1.745d1745d1749p-1, + (int)-8 + }, + { // Entry 420 + 0x1.745d1745d17490p-8, + 0x1.745d1745d1749p-1, + (int)-7 + }, + { // Entry 421 + 0x1.745d1745d17490p-7, + 0x1.745d1745d1749p-1, + (int)-6 + }, + { // Entry 422 + 0x1.745d1745d17490p-6, + 0x1.745d1745d1749p-1, + (int)-5 + }, + { // Entry 423 + 0x1.745d1745d17490p-5, + 0x1.745d1745d1749p-1, + (int)-4 + }, + { // Entry 424 + 0x1.745d1745d17490p-4, + 0x1.745d1745d1749p-1, + (int)-3 + }, + { // Entry 425 + 0x1.745d1745d17490p-3, + 0x1.745d1745d1749p-1, + (int)-2 + }, + { // Entry 426 + 0x1.745d1745d17490p-2, + 0x1.745d1745d1749p-1, + (int)-1 + }, + { // Entry 427 + 0x1.745d1745d17490p-1, + 0x1.745d1745d1749p-1, + (int)0 + }, + { // Entry 428 + 0x1.745d1745d17490p0, + 0x1.745d1745d1749p-1, + (int)1 + }, + { // Entry 429 + 0x1.745d1745d17490p1, + 0x1.745d1745d1749p-1, + (int)2 + }, + { // Entry 430 + 0x1.745d1745d17490p2, + 0x1.745d1745d1749p-1, + (int)3 + }, + { // Entry 431 + 0x1.745d1745d17490p3, + 0x1.745d1745d1749p-1, + (int)4 + }, + { // Entry 432 + 0x1.745d1745d17490p4, + 0x1.745d1745d1749p-1, + (int)5 + }, + { // Entry 433 + 0x1.745d1745d17490p5, + 0x1.745d1745d1749p-1, + (int)6 + }, + { // Entry 434 + 0x1.745d1745d17490p6, + 0x1.745d1745d1749p-1, + (int)7 + }, + { // Entry 435 + 0x1.745d1745d17490p7, + 0x1.745d1745d1749p-1, + (int)8 + }, + { // Entry 436 + 0x1.745d1745d17490p8, + 0x1.745d1745d1749p-1, + (int)9 + }, + { // Entry 437 + 0x1.745d1745d17490p9, + 0x1.745d1745d1749p-1, + (int)10 + }, + { // Entry 438 + 0x1.a2e8ba2e8ba320p-11, + 0x1.a2e8ba2e8ba32p-1, + (int)-10 + }, + { // Entry 439 + 0x1.a2e8ba2e8ba320p-10, + 0x1.a2e8ba2e8ba32p-1, + (int)-9 + }, + { // Entry 440 + 0x1.a2e8ba2e8ba320p-9, + 0x1.a2e8ba2e8ba32p-1, + (int)-8 + }, + { // Entry 441 + 0x1.a2e8ba2e8ba320p-8, + 0x1.a2e8ba2e8ba32p-1, + (int)-7 + }, + { // Entry 442 + 0x1.a2e8ba2e8ba320p-7, + 0x1.a2e8ba2e8ba32p-1, + (int)-6 + }, + { // Entry 443 + 0x1.a2e8ba2e8ba320p-6, + 0x1.a2e8ba2e8ba32p-1, + (int)-5 + }, + { // Entry 444 + 0x1.a2e8ba2e8ba320p-5, + 0x1.a2e8ba2e8ba32p-1, + (int)-4 + }, + { // Entry 445 + 0x1.a2e8ba2e8ba320p-4, + 0x1.a2e8ba2e8ba32p-1, + (int)-3 + }, + { // Entry 446 + 0x1.a2e8ba2e8ba320p-3, + 0x1.a2e8ba2e8ba32p-1, + (int)-2 + }, + { // Entry 447 + 0x1.a2e8ba2e8ba320p-2, + 0x1.a2e8ba2e8ba32p-1, + (int)-1 + }, + { // Entry 448 + 0x1.a2e8ba2e8ba320p-1, + 0x1.a2e8ba2e8ba32p-1, + (int)0 + }, + { // Entry 449 + 0x1.a2e8ba2e8ba320p0, + 0x1.a2e8ba2e8ba32p-1, + (int)1 + }, + { // Entry 450 + 0x1.a2e8ba2e8ba320p1, + 0x1.a2e8ba2e8ba32p-1, + (int)2 + }, + { // Entry 451 + 0x1.a2e8ba2e8ba320p2, + 0x1.a2e8ba2e8ba32p-1, + (int)3 + }, + { // Entry 452 + 0x1.a2e8ba2e8ba320p3, + 0x1.a2e8ba2e8ba32p-1, + (int)4 + }, + { // Entry 453 + 0x1.a2e8ba2e8ba320p4, + 0x1.a2e8ba2e8ba32p-1, + (int)5 + }, + { // Entry 454 + 0x1.a2e8ba2e8ba320p5, + 0x1.a2e8ba2e8ba32p-1, + (int)6 + }, + { // Entry 455 + 0x1.a2e8ba2e8ba320p6, + 0x1.a2e8ba2e8ba32p-1, + (int)7 + }, + { // Entry 456 + 0x1.a2e8ba2e8ba320p7, + 0x1.a2e8ba2e8ba32p-1, + (int)8 + }, + { // Entry 457 + 0x1.a2e8ba2e8ba320p8, + 0x1.a2e8ba2e8ba32p-1, + (int)9 + }, + { // Entry 458 + 0x1.a2e8ba2e8ba320p9, + 0x1.a2e8ba2e8ba32p-1, + (int)10 + }, + { // Entry 459 + 0x1.d1745d1745d1b0p-11, + 0x1.d1745d1745d1bp-1, + (int)-10 + }, + { // Entry 460 + 0x1.d1745d1745d1b0p-10, + 0x1.d1745d1745d1bp-1, + (int)-9 + }, + { // Entry 461 + 0x1.d1745d1745d1b0p-9, + 0x1.d1745d1745d1bp-1, + (int)-8 + }, + { // Entry 462 + 0x1.d1745d1745d1b0p-8, + 0x1.d1745d1745d1bp-1, + (int)-7 + }, + { // Entry 463 + 0x1.d1745d1745d1b0p-7, + 0x1.d1745d1745d1bp-1, + (int)-6 + }, + { // Entry 464 + 0x1.d1745d1745d1b0p-6, + 0x1.d1745d1745d1bp-1, + (int)-5 + }, + { // Entry 465 + 0x1.d1745d1745d1b0p-5, + 0x1.d1745d1745d1bp-1, + (int)-4 + }, + { // Entry 466 + 0x1.d1745d1745d1b0p-4, + 0x1.d1745d1745d1bp-1, + (int)-3 + }, + { // Entry 467 + 0x1.d1745d1745d1b0p-3, + 0x1.d1745d1745d1bp-1, + (int)-2 + }, + { // Entry 468 + 0x1.d1745d1745d1b0p-2, + 0x1.d1745d1745d1bp-1, + (int)-1 + }, + { // Entry 469 + 0x1.d1745d1745d1b0p-1, + 0x1.d1745d1745d1bp-1, + (int)0 + }, + { // Entry 470 + 0x1.d1745d1745d1b0p0, + 0x1.d1745d1745d1bp-1, + (int)1 + }, + { // Entry 471 + 0x1.d1745d1745d1b0p1, + 0x1.d1745d1745d1bp-1, + (int)2 + }, + { // Entry 472 + 0x1.d1745d1745d1b0p2, + 0x1.d1745d1745d1bp-1, + (int)3 + }, + { // Entry 473 + 0x1.d1745d1745d1b0p3, + 0x1.d1745d1745d1bp-1, + (int)4 + }, + { // Entry 474 + 0x1.d1745d1745d1b0p4, + 0x1.d1745d1745d1bp-1, + (int)5 + }, + { // Entry 475 + 0x1.d1745d1745d1b0p5, + 0x1.d1745d1745d1bp-1, + (int)6 + }, + { // Entry 476 + 0x1.d1745d1745d1b0p6, + 0x1.d1745d1745d1bp-1, + (int)7 + }, + { // Entry 477 + 0x1.d1745d1745d1b0p7, + 0x1.d1745d1745d1bp-1, + (int)8 + }, + { // Entry 478 + 0x1.d1745d1745d1b0p8, + 0x1.d1745d1745d1bp-1, + (int)9 + }, + { // Entry 479 + 0x1.d1745d1745d1b0p9, + 0x1.d1745d1745d1bp-1, + (int)10 + }, + { // Entry 480 + 0x1.p-10, + 0x1.0p0, + (int)-10 + }, + { // Entry 481 + 0x1.p-9, + 0x1.0p0, + (int)-9 + }, + { // Entry 482 + 0x1.p-8, + 0x1.0p0, + (int)-8 + }, + { // Entry 483 + 0x1.p-7, + 0x1.0p0, + (int)-7 + }, + { // Entry 484 + 0x1.p-6, + 0x1.0p0, + (int)-6 + }, + { // Entry 485 + 0x1.p-5, + 0x1.0p0, + (int)-5 + }, + { // Entry 486 + 0x1.p-4, + 0x1.0p0, + (int)-4 + }, + { // Entry 487 + 0x1.p-3, + 0x1.0p0, + (int)-3 + }, + { // Entry 488 + 0x1.p-2, + 0x1.0p0, + (int)-2 + }, + { // Entry 489 + 0x1.p-1, + 0x1.0p0, + (int)-1 + }, + { // Entry 490 + 0x1.p0, + 0x1.0p0, + (int)0 + }, + { // Entry 491 + 0x1.p1, + 0x1.0p0, + (int)1 + }, + { // Entry 492 + 0x1.p2, + 0x1.0p0, + (int)2 + }, + { // Entry 493 + 0x1.p3, + 0x1.0p0, + (int)3 + }, + { // Entry 494 + 0x1.p4, + 0x1.0p0, + (int)4 + }, + { // Entry 495 + 0x1.p5, + 0x1.0p0, + (int)5 + }, + { // Entry 496 + 0x1.p6, + 0x1.0p0, + (int)6 + }, + { // Entry 497 + 0x1.p7, + 0x1.0p0, + (int)7 + }, + { // Entry 498 + 0x1.p8, + 0x1.0p0, + (int)8 + }, + { // Entry 499 + 0x1.p9, + 0x1.0p0, + (int)9 + }, + { // Entry 500 + 0x1.p10, + 0x1.0p0, + (int)10 + }, + { // Entry 501 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1023, + (int)-1023 + }, + { // Entry 502 + 0x1.fffffffffffff0p1, + 0x1.fffffffffffffp1023, + (int)-1022 + }, + { // Entry 503 + 0x1.fffffffffffff0p23, + 0x1.fffffffffffffp1023, + (int)-1000 + }, + { // Entry 504 + 0x1.fffffffffffff0p24, + 0x1.fffffffffffffp1023, + (int)-999 + }, + { // Entry 505 + 0x1.fffffffffffff0p1013, + 0x1.fffffffffffffp1023, + (int)-10 + }, + { // Entry 506 + 0x1.fffffffffffff0p1014, + 0x1.fffffffffffffp1023, + (int)-9 + }, + { // Entry 507 + 0x1.fffffffffffff0p1015, + 0x1.fffffffffffffp1023, + (int)-8 + }, + { // Entry 508 + 0x1.fffffffffffff0p1016, + 0x1.fffffffffffffp1023, + (int)-7 + }, + { // Entry 509 + 0x1.fffffffffffff0p1017, + 0x1.fffffffffffffp1023, + (int)-6 + }, + { // Entry 510 + 0x1.fffffffffffff0p1018, + 0x1.fffffffffffffp1023, + (int)-5 + }, + { // Entry 511 + 0x1.fffffffffffff0p1019, + 0x1.fffffffffffffp1023, + (int)-4 + }, + { // Entry 512 + 0x1.fffffffffffff0p1020, + 0x1.fffffffffffffp1023, + (int)-3 + }, + { // Entry 513 + 0x1.fffffffffffff0p1021, + 0x1.fffffffffffffp1023, + (int)-2 + }, + { // Entry 514 + 0x1.fffffffffffff0p1022, + 0x1.fffffffffffffp1023, + (int)-1 + }, + { // Entry 515 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 516 + 0x1.p-51, + 0x1.0p-1074, + (int)1023 + }, + { // Entry 517 + 0x1.p-52, + 0x1.0p-1074, + (int)1022 + }, + { // Entry 518 + 0x1.p-74, + 0x1.0p-1074, + (int)1000 + }, + { // Entry 519 + 0x1.p-75, + 0x1.0p-1074, + (int)999 + }, + { // Entry 520 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 521 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 522 + 0x1.p-1072, + 0x1.0p-1074, + (int)2 + }, + { // Entry 523 + 0x1.p-1071, + 0x1.0p-1074, + (int)3 + }, + { // Entry 524 + 0x1.p-1070, + 0x1.0p-1074, + (int)4 + }, + { // Entry 525 + 0x1.p-1069, + 0x1.0p-1074, + (int)5 + }, + { // Entry 526 + 0x1.p-1068, + 0x1.0p-1074, + (int)6 + }, + { // Entry 527 + 0x1.p-1067, + 0x1.0p-1074, + (int)7 + }, + { // Entry 528 + 0x1.p-1066, + 0x1.0p-1074, + (int)8 + }, + { // Entry 529 + 0x1.p-1065, + 0x1.0p-1074, + (int)9 + }, + { // Entry 530 + 0x1.p-1064, + 0x1.0p-1074, + (int)10 + }, + { // Entry 531 + 0x1.p-1025, + 0x1.0p-2, + (int)-1023 + }, + { // Entry 532 + 0x1.p-1024, + 0x1.0p-2, + (int)-1022 + }, + { // Entry 533 + 0x1.p-1024, + 0x1.0p-1, + (int)-1023 + }, + { // Entry 534 + 0x1.p-1023, + 0x1.0p-1, + (int)-1022 + }, + { // Entry 535 + 0x1.80p-1024, + 0x1.8p-1, + (int)-1023 + }, + { // Entry 536 + 0x1.80p-1023, + 0x1.8p-1, + (int)-1022 + }, + { // Entry 537 + 0.0, + 0x1.0p-2, + (int)-1074 + }, + { // Entry 538 + 0.0, + 0x1.0p-2, + (int)-1073 + }, + { // Entry 539 + 0.0, + 0x1.0p-1, + (int)-1074 + }, + { // Entry 540 + 0x1.p-1074, + 0x1.0p-1, + (int)-1073 + }, + { // Entry 541 + 0.0, + 0x1.8p-1, + (int)-1074 + }, + { // Entry 542 + 0x1.80p-1074, + 0x1.8p-1, + (int)-1073 + }, + { // Entry 543 + 0x1.p1023, + 0x1.0p0, + (int)1023 + }, + { // Entry 544 + 0x1.p1022, + 0x1.0p0, + (int)1022 + }, + { // Entry 545 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 546 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 547 + 0x1.p-1072, + 0x1.0p-1074, + (int)2 + }, + { // Entry 548 + 0x1.p-1071, + 0x1.0p-1074, + (int)3 + }, + { // Entry 549 + 0x1.p-1070, + 0x1.0p-1074, + (int)4 + }, + { // Entry 550 + 0x1.p-1069, + 0x1.0p-1074, + (int)5 + }, + { // Entry 551 + 0x1.p-1068, + 0x1.0p-1074, + (int)6 + }, + { // Entry 552 + 0x1.p-1067, + 0x1.0p-1074, + (int)7 + }, + { // Entry 553 + 0x1.p-1066, + 0x1.0p-1074, + (int)8 + }, + { // Entry 554 + 0x1.p-1065, + 0x1.0p-1074, + (int)9 + }, + { // Entry 555 + 0x1.p-1064, + 0x1.0p-1074, + (int)10 + }, + { // Entry 556 + 0x1.p-1063, + 0x1.0p-1074, + (int)11 + }, + { // Entry 557 + 0x1.p-1062, + 0x1.0p-1074, + (int)12 + }, + { // Entry 558 + 0x1.p-1061, + 0x1.0p-1074, + (int)13 + }, + { // Entry 559 + 0x1.p-1060, + 0x1.0p-1074, + (int)14 + }, + { // Entry 560 + 0x1.p-1059, + 0x1.0p-1074, + (int)15 + }, + { // Entry 561 + 0x1.p-1058, + 0x1.0p-1074, + (int)16 + }, + { // Entry 562 + 0x1.p-1057, + 0x1.0p-1074, + (int)17 + }, + { // Entry 563 + 0x1.p-1056, + 0x1.0p-1074, + (int)18 + }, + { // Entry 564 + 0x1.p-1055, + 0x1.0p-1074, + (int)19 + }, + { // Entry 565 + 0x1.p-1054, + 0x1.0p-1074, + (int)20 + }, + { // Entry 566 + 0x1.p-1053, + 0x1.0p-1074, + (int)21 + }, + { // Entry 567 + 0x1.p-1052, + 0x1.0p-1074, + (int)22 + }, + { // Entry 568 + 0x1.p-1051, + 0x1.0p-1074, + (int)23 + }, + { // Entry 569 + 0x1.p-1050, + 0x1.0p-1074, + (int)24 + }, + { // Entry 570 + 0x1.p-1049, + 0x1.0p-1074, + (int)25 + }, + { // Entry 571 + 0x1.p-1048, + 0x1.0p-1074, + (int)26 + }, + { // Entry 572 + 0x1.p-1047, + 0x1.0p-1074, + (int)27 + }, + { // Entry 573 + 0x1.p-1046, + 0x1.0p-1074, + (int)28 + }, + { // Entry 574 + 0x1.p-1045, + 0x1.0p-1074, + (int)29 + }, + { // Entry 575 + 0x1.p-1044, + 0x1.0p-1074, + (int)30 + }, + { // Entry 576 + 0x1.p-1043, + 0x1.0p-1074, + (int)31 + }, + { // Entry 577 + 0x1.p-1042, + 0x1.0p-1074, + (int)32 + }, + { // Entry 578 + 0x1.p-1041, + 0x1.0p-1074, + (int)33 + }, + { // Entry 579 + 0x1.p-1040, + 0x1.0p-1074, + (int)34 + }, + { // Entry 580 + 0x1.p-1039, + 0x1.0p-1074, + (int)35 + }, + { // Entry 581 + 0x1.p-1038, + 0x1.0p-1074, + (int)36 + }, + { // Entry 582 + 0x1.p-1037, + 0x1.0p-1074, + (int)37 + }, + { // Entry 583 + 0x1.p-1036, + 0x1.0p-1074, + (int)38 + }, + { // Entry 584 + 0x1.p-1035, + 0x1.0p-1074, + (int)39 + }, + { // Entry 585 + 0x1.p-1034, + 0x1.0p-1074, + (int)40 + }, + { // Entry 586 + 0x1.p-1033, + 0x1.0p-1074, + (int)41 + }, + { // Entry 587 + 0x1.p-1032, + 0x1.0p-1074, + (int)42 + }, + { // Entry 588 + 0x1.p-1031, + 0x1.0p-1074, + (int)43 + }, + { // Entry 589 + 0x1.p-1030, + 0x1.0p-1074, + (int)44 + }, + { // Entry 590 + 0x1.p-1029, + 0x1.0p-1074, + (int)45 + }, + { // Entry 591 + 0x1.p-1028, + 0x1.0p-1074, + (int)46 + }, + { // Entry 592 + 0x1.p-1027, + 0x1.0p-1074, + (int)47 + }, + { // Entry 593 + 0x1.p-1026, + 0x1.0p-1074, + (int)48 + }, + { // Entry 594 + 0x1.p-1025, + 0x1.0p-1074, + (int)49 + }, + { // Entry 595 + 0x1.p-1024, + 0x1.0p-1074, + (int)50 + }, + { // Entry 596 + 0x1.p-1023, + 0x1.0p-1074, + (int)51 + }, + { // Entry 597 + 0x1.p-1022, + 0x1.0p-1074, + (int)52 + }, + { // Entry 598 + 0x1.p-1021, + 0x1.0p-1074, + (int)53 + }, + { // Entry 599 + 0x1.p-1020, + 0x1.0p-1074, + (int)54 + }, + { // Entry 600 + 0x1.p-1019, + 0x1.0p-1074, + (int)55 + }, + { // Entry 601 + 0x1.p-1018, + 0x1.0p-1074, + (int)56 + }, + { // Entry 602 + 0x1.p-1017, + 0x1.0p-1074, + (int)57 + }, + { // Entry 603 + 0x1.p-1016, + 0x1.0p-1074, + (int)58 + }, + { // Entry 604 + 0x1.p-1015, + 0x1.0p-1074, + (int)59 + }, + { // Entry 605 + 0x1.p-1014, + 0x1.0p-1074, + (int)60 + }, + { // Entry 606 + 0x1.p-1013, + 0x1.0p-1074, + (int)61 + }, + { // Entry 607 + 0x1.p-1012, + 0x1.0p-1074, + (int)62 + }, + { // Entry 608 + 0x1.p-1011, + 0x1.0p-1074, + (int)63 + }, + { // Entry 609 + 0x1.p-1010, + 0x1.0p-1074, + (int)64 + }, + { // Entry 610 + 0x1.p-1009, + 0x1.0p-1074, + (int)65 + }, + { // Entry 611 + 0x1.p-1008, + 0x1.0p-1074, + (int)66 + }, + { // Entry 612 + 0x1.p-1007, + 0x1.0p-1074, + (int)67 + }, + { // Entry 613 + 0x1.p-1006, + 0x1.0p-1074, + (int)68 + }, + { // Entry 614 + 0x1.p-1005, + 0x1.0p-1074, + (int)69 + }, + { // Entry 615 + 0x1.p-1004, + 0x1.0p-1074, + (int)70 + }, + { // Entry 616 + 0x1.p-1003, + 0x1.0p-1074, + (int)71 + }, + { // Entry 617 + 0x1.p-1002, + 0x1.0p-1074, + (int)72 + }, + { // Entry 618 + 0x1.p-1001, + 0x1.0p-1074, + (int)73 + }, + { // Entry 619 + 0x1.p-1000, + 0x1.0p-1074, + (int)74 + }, + { // Entry 620 + 0x1.p-999, + 0x1.0p-1074, + (int)75 + }, + { // Entry 621 + 0x1.p-998, + 0x1.0p-1074, + (int)76 + }, + { // Entry 622 + 0x1.p-997, + 0x1.0p-1074, + (int)77 + }, + { // Entry 623 + 0x1.p-996, + 0x1.0p-1074, + (int)78 + }, + { // Entry 624 + 0x1.p-995, + 0x1.0p-1074, + (int)79 + }, + { // Entry 625 + 0x1.p-994, + 0x1.0p-1074, + (int)80 + }, + { // Entry 626 + 0x1.p-993, + 0x1.0p-1074, + (int)81 + }, + { // Entry 627 + 0x1.p-992, + 0x1.0p-1074, + (int)82 + }, + { // Entry 628 + 0x1.p-991, + 0x1.0p-1074, + (int)83 + }, + { // Entry 629 + 0x1.p-990, + 0x1.0p-1074, + (int)84 + }, + { // Entry 630 + 0x1.p-989, + 0x1.0p-1074, + (int)85 + }, + { // Entry 631 + 0x1.p-988, + 0x1.0p-1074, + (int)86 + }, + { // Entry 632 + 0x1.p-987, + 0x1.0p-1074, + (int)87 + }, + { // Entry 633 + 0x1.p-986, + 0x1.0p-1074, + (int)88 + }, + { // Entry 634 + 0x1.p-985, + 0x1.0p-1074, + (int)89 + }, + { // Entry 635 + 0x1.p-984, + 0x1.0p-1074, + (int)90 + }, + { // Entry 636 + 0x1.p-983, + 0x1.0p-1074, + (int)91 + }, + { // Entry 637 + 0x1.p-982, + 0x1.0p-1074, + (int)92 + }, + { // Entry 638 + 0x1.p-981, + 0x1.0p-1074, + (int)93 + }, + { // Entry 639 + 0x1.p-980, + 0x1.0p-1074, + (int)94 + }, + { // Entry 640 + 0x1.p-979, + 0x1.0p-1074, + (int)95 + }, + { // Entry 641 + 0x1.p-978, + 0x1.0p-1074, + (int)96 + }, + { // Entry 642 + 0x1.p-977, + 0x1.0p-1074, + (int)97 + }, + { // Entry 643 + 0x1.p-976, + 0x1.0p-1074, + (int)98 + }, + { // Entry 644 + 0x1.p-975, + 0x1.0p-1074, + (int)99 + }, + { // Entry 645 + 0x1.p-974, + 0x1.0p-1074, + (int)100 + }, + { // Entry 646 + 0x1.p-973, + 0x1.0p-1074, + (int)101 + }, + { // Entry 647 + 0x1.p-972, + 0x1.0p-1074, + (int)102 + }, + { // Entry 648 + 0x1.p-971, + 0x1.0p-1074, + (int)103 + }, + { // Entry 649 + 0x1.p-970, + 0x1.0p-1074, + (int)104 + }, + { // Entry 650 + 0x1.p-969, + 0x1.0p-1074, + (int)105 + }, + { // Entry 651 + 0x1.p-968, + 0x1.0p-1074, + (int)106 + }, + { // Entry 652 + 0x1.p-967, + 0x1.0p-1074, + (int)107 + }, + { // Entry 653 + 0x1.p-966, + 0x1.0p-1074, + (int)108 + }, + { // Entry 654 + 0x1.p-965, + 0x1.0p-1074, + (int)109 + }, + { // Entry 655 + 0x1.p-964, + 0x1.0p-1074, + (int)110 + }, + { // Entry 656 + 0x1.p-963, + 0x1.0p-1074, + (int)111 + }, + { // Entry 657 + 0x1.p-962, + 0x1.0p-1074, + (int)112 + }, + { // Entry 658 + 0x1.p-961, + 0x1.0p-1074, + (int)113 + }, + { // Entry 659 + 0x1.p-960, + 0x1.0p-1074, + (int)114 + }, + { // Entry 660 + 0x1.p-959, + 0x1.0p-1074, + (int)115 + }, + { // Entry 661 + 0x1.p-958, + 0x1.0p-1074, + (int)116 + }, + { // Entry 662 + 0x1.p-957, + 0x1.0p-1074, + (int)117 + }, + { // Entry 663 + 0x1.p-956, + 0x1.0p-1074, + (int)118 + }, + { // Entry 664 + 0x1.p-955, + 0x1.0p-1074, + (int)119 + }, + { // Entry 665 + 0x1.p-954, + 0x1.0p-1074, + (int)120 + }, + { // Entry 666 + 0x1.p-953, + 0x1.0p-1074, + (int)121 + }, + { // Entry 667 + 0x1.p-952, + 0x1.0p-1074, + (int)122 + }, + { // Entry 668 + 0x1.p-951, + 0x1.0p-1074, + (int)123 + }, + { // Entry 669 + 0x1.p-950, + 0x1.0p-1074, + (int)124 + }, + { // Entry 670 + 0x1.p-949, + 0x1.0p-1074, + (int)125 + }, + { // Entry 671 + 0x1.p-948, + 0x1.0p-1074, + (int)126 + }, + { // Entry 672 + 0x1.p-947, + 0x1.0p-1074, + (int)127 + }, + { // Entry 673 + 0x1.p-946, + 0x1.0p-1074, + (int)128 + }, + { // Entry 674 + 0x1.p-945, + 0x1.0p-1074, + (int)129 + }, + { // Entry 675 + 0x1.p-944, + 0x1.0p-1074, + (int)130 + }, + { // Entry 676 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 677 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 678 + 0x1.ffffffffffffe0p-1021, + 0x1.ffffffffffffep-1023, + (int)2 + }, + { // Entry 679 + 0x1.ffffffffffffe0p-1020, + 0x1.ffffffffffffep-1023, + (int)3 + }, + { // Entry 680 + 0x1.ffffffffffffe0p-1019, + 0x1.ffffffffffffep-1023, + (int)4 + }, + { // Entry 681 + 0x1.ffffffffffffe0p-1018, + 0x1.ffffffffffffep-1023, + (int)5 + }, + { // Entry 682 + 0x1.ffffffffffffe0p-1017, + 0x1.ffffffffffffep-1023, + (int)6 + }, + { // Entry 683 + 0x1.ffffffffffffe0p-1016, + 0x1.ffffffffffffep-1023, + (int)7 + }, + { // Entry 684 + 0x1.ffffffffffffe0p-1015, + 0x1.ffffffffffffep-1023, + (int)8 + }, + { // Entry 685 + 0x1.ffffffffffffe0p-1014, + 0x1.ffffffffffffep-1023, + (int)9 + }, + { // Entry 686 + 0x1.ffffffffffffe0p-1013, + 0x1.ffffffffffffep-1023, + (int)10 + }, + { // Entry 687 + 0x1.ffffffffffffe0p-1012, + 0x1.ffffffffffffep-1023, + (int)11 + }, + { // Entry 688 + 0x1.ffffffffffffe0p-1011, + 0x1.ffffffffffffep-1023, + (int)12 + }, + { // Entry 689 + 0x1.ffffffffffffe0p-1010, + 0x1.ffffffffffffep-1023, + (int)13 + }, + { // Entry 690 + 0x1.ffffffffffffe0p-1009, + 0x1.ffffffffffffep-1023, + (int)14 + }, + { // Entry 691 + 0x1.ffffffffffffe0p-1008, + 0x1.ffffffffffffep-1023, + (int)15 + }, + { // Entry 692 + 0x1.ffffffffffffe0p-1007, + 0x1.ffffffffffffep-1023, + (int)16 + }, + { // Entry 693 + 0x1.ffffffffffffe0p-1006, + 0x1.ffffffffffffep-1023, + (int)17 + }, + { // Entry 694 + 0x1.ffffffffffffe0p-1005, + 0x1.ffffffffffffep-1023, + (int)18 + }, + { // Entry 695 + 0x1.ffffffffffffe0p-1004, + 0x1.ffffffffffffep-1023, + (int)19 + }, + { // Entry 696 + 0x1.ffffffffffffe0p-1003, + 0x1.ffffffffffffep-1023, + (int)20 + }, + { // Entry 697 + 0x1.ffffffffffffe0p-1002, + 0x1.ffffffffffffep-1023, + (int)21 + }, + { // Entry 698 + 0x1.ffffffffffffe0p-1001, + 0x1.ffffffffffffep-1023, + (int)22 + }, + { // Entry 699 + 0x1.ffffffffffffe0p-1000, + 0x1.ffffffffffffep-1023, + (int)23 + }, + { // Entry 700 + 0x1.ffffffffffffe0p-999, + 0x1.ffffffffffffep-1023, + (int)24 + }, + { // Entry 701 + 0x1.ffffffffffffe0p-998, + 0x1.ffffffffffffep-1023, + (int)25 + }, + { // Entry 702 + 0x1.ffffffffffffe0p-997, + 0x1.ffffffffffffep-1023, + (int)26 + }, + { // Entry 703 + 0x1.ffffffffffffe0p-996, + 0x1.ffffffffffffep-1023, + (int)27 + }, + { // Entry 704 + 0x1.ffffffffffffe0p-995, + 0x1.ffffffffffffep-1023, + (int)28 + }, + { // Entry 705 + 0x1.ffffffffffffe0p-994, + 0x1.ffffffffffffep-1023, + (int)29 + }, + { // Entry 706 + 0x1.ffffffffffffe0p-993, + 0x1.ffffffffffffep-1023, + (int)30 + }, + { // Entry 707 + 0x1.ffffffffffffe0p-992, + 0x1.ffffffffffffep-1023, + (int)31 + }, + { // Entry 708 + 0x1.ffffffffffffe0p-991, + 0x1.ffffffffffffep-1023, + (int)32 + }, + { // Entry 709 + 0x1.ffffffffffffe0p-990, + 0x1.ffffffffffffep-1023, + (int)33 + }, + { // Entry 710 + 0x1.ffffffffffffe0p-989, + 0x1.ffffffffffffep-1023, + (int)34 + }, + { // Entry 711 + 0x1.ffffffffffffe0p-988, + 0x1.ffffffffffffep-1023, + (int)35 + }, + { // Entry 712 + 0x1.ffffffffffffe0p-987, + 0x1.ffffffffffffep-1023, + (int)36 + }, + { // Entry 713 + 0x1.ffffffffffffe0p-986, + 0x1.ffffffffffffep-1023, + (int)37 + }, + { // Entry 714 + 0x1.ffffffffffffe0p-985, + 0x1.ffffffffffffep-1023, + (int)38 + }, + { // Entry 715 + 0x1.ffffffffffffe0p-984, + 0x1.ffffffffffffep-1023, + (int)39 + }, + { // Entry 716 + 0x1.ffffffffffffe0p-983, + 0x1.ffffffffffffep-1023, + (int)40 + }, + { // Entry 717 + 0x1.ffffffffffffe0p-982, + 0x1.ffffffffffffep-1023, + (int)41 + }, + { // Entry 718 + 0x1.ffffffffffffe0p-981, + 0x1.ffffffffffffep-1023, + (int)42 + }, + { // Entry 719 + 0x1.ffffffffffffe0p-980, + 0x1.ffffffffffffep-1023, + (int)43 + }, + { // Entry 720 + 0x1.ffffffffffffe0p-979, + 0x1.ffffffffffffep-1023, + (int)44 + }, + { // Entry 721 + 0x1.ffffffffffffe0p-978, + 0x1.ffffffffffffep-1023, + (int)45 + }, + { // Entry 722 + 0x1.ffffffffffffe0p-977, + 0x1.ffffffffffffep-1023, + (int)46 + }, + { // Entry 723 + 0x1.ffffffffffffe0p-976, + 0x1.ffffffffffffep-1023, + (int)47 + }, + { // Entry 724 + 0x1.ffffffffffffe0p-975, + 0x1.ffffffffffffep-1023, + (int)48 + }, + { // Entry 725 + 0x1.ffffffffffffe0p-974, + 0x1.ffffffffffffep-1023, + (int)49 + }, + { // Entry 726 + 0x1.ffffffffffffe0p-973, + 0x1.ffffffffffffep-1023, + (int)50 + }, + { // Entry 727 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + (int)51 + }, + { // Entry 728 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + (int)52 + }, + { // Entry 729 + 0x1.ffffffffffffe0p-970, + 0x1.ffffffffffffep-1023, + (int)53 + }, + { // Entry 730 + 0x1.ffffffffffffe0p-969, + 0x1.ffffffffffffep-1023, + (int)54 + }, + { // Entry 731 + 0x1.ffffffffffffe0p-968, + 0x1.ffffffffffffep-1023, + (int)55 + }, + { // Entry 732 + 0x1.ffffffffffffe0p-967, + 0x1.ffffffffffffep-1023, + (int)56 + }, + { // Entry 733 + 0x1.ffffffffffffe0p-966, + 0x1.ffffffffffffep-1023, + (int)57 + }, + { // Entry 734 + 0x1.ffffffffffffe0p-965, + 0x1.ffffffffffffep-1023, + (int)58 + }, + { // Entry 735 + 0x1.ffffffffffffe0p-964, + 0x1.ffffffffffffep-1023, + (int)59 + }, + { // Entry 736 + 0x1.ffffffffffffe0p-963, + 0x1.ffffffffffffep-1023, + (int)60 + }, + { // Entry 737 + 0x1.ffffffffffffe0p-962, + 0x1.ffffffffffffep-1023, + (int)61 + }, + { // Entry 738 + 0x1.ffffffffffffe0p-961, + 0x1.ffffffffffffep-1023, + (int)62 + }, + { // Entry 739 + 0x1.ffffffffffffe0p-960, + 0x1.ffffffffffffep-1023, + (int)63 + }, + { // Entry 740 + 0x1.ffffffffffffe0p-959, + 0x1.ffffffffffffep-1023, + (int)64 + }, + { // Entry 741 + 0x1.ffffffffffffe0p-958, + 0x1.ffffffffffffep-1023, + (int)65 + }, + { // Entry 742 + 0x1.ffffffffffffe0p-957, + 0x1.ffffffffffffep-1023, + (int)66 + }, + { // Entry 743 + 0x1.ffffffffffffe0p-956, + 0x1.ffffffffffffep-1023, + (int)67 + }, + { // Entry 744 + 0x1.ffffffffffffe0p-955, + 0x1.ffffffffffffep-1023, + (int)68 + }, + { // Entry 745 + 0x1.ffffffffffffe0p-954, + 0x1.ffffffffffffep-1023, + (int)69 + }, + { // Entry 746 + 0x1.ffffffffffffe0p-953, + 0x1.ffffffffffffep-1023, + (int)70 + }, + { // Entry 747 + 0x1.ffffffffffffe0p-952, + 0x1.ffffffffffffep-1023, + (int)71 + }, + { // Entry 748 + 0x1.ffffffffffffe0p-951, + 0x1.ffffffffffffep-1023, + (int)72 + }, + { // Entry 749 + 0x1.ffffffffffffe0p-950, + 0x1.ffffffffffffep-1023, + (int)73 + }, + { // Entry 750 + 0x1.ffffffffffffe0p-949, + 0x1.ffffffffffffep-1023, + (int)74 + }, + { // Entry 751 + 0x1.ffffffffffffe0p-948, + 0x1.ffffffffffffep-1023, + (int)75 + }, + { // Entry 752 + 0x1.ffffffffffffe0p-947, + 0x1.ffffffffffffep-1023, + (int)76 + }, + { // Entry 753 + 0x1.ffffffffffffe0p-946, + 0x1.ffffffffffffep-1023, + (int)77 + }, + { // Entry 754 + 0x1.ffffffffffffe0p-945, + 0x1.ffffffffffffep-1023, + (int)78 + }, + { // Entry 755 + 0x1.ffffffffffffe0p-944, + 0x1.ffffffffffffep-1023, + (int)79 + }, + { // Entry 756 + 0x1.ffffffffffffe0p-943, + 0x1.ffffffffffffep-1023, + (int)80 + }, + { // Entry 757 + 0x1.ffffffffffffe0p-942, + 0x1.ffffffffffffep-1023, + (int)81 + }, + { // Entry 758 + 0x1.ffffffffffffe0p-941, + 0x1.ffffffffffffep-1023, + (int)82 + }, + { // Entry 759 + 0x1.ffffffffffffe0p-940, + 0x1.ffffffffffffep-1023, + (int)83 + }, + { // Entry 760 + 0x1.ffffffffffffe0p-939, + 0x1.ffffffffffffep-1023, + (int)84 + }, + { // Entry 761 + 0x1.ffffffffffffe0p-938, + 0x1.ffffffffffffep-1023, + (int)85 + }, + { // Entry 762 + 0x1.ffffffffffffe0p-937, + 0x1.ffffffffffffep-1023, + (int)86 + }, + { // Entry 763 + 0x1.ffffffffffffe0p-936, + 0x1.ffffffffffffep-1023, + (int)87 + }, + { // Entry 764 + 0x1.ffffffffffffe0p-935, + 0x1.ffffffffffffep-1023, + (int)88 + }, + { // Entry 765 + 0x1.ffffffffffffe0p-934, + 0x1.ffffffffffffep-1023, + (int)89 + }, + { // Entry 766 + 0x1.ffffffffffffe0p-933, + 0x1.ffffffffffffep-1023, + (int)90 + }, + { // Entry 767 + 0x1.ffffffffffffe0p-932, + 0x1.ffffffffffffep-1023, + (int)91 + }, + { // Entry 768 + 0x1.ffffffffffffe0p-931, + 0x1.ffffffffffffep-1023, + (int)92 + }, + { // Entry 769 + 0x1.ffffffffffffe0p-930, + 0x1.ffffffffffffep-1023, + (int)93 + }, + { // Entry 770 + 0x1.ffffffffffffe0p-929, + 0x1.ffffffffffffep-1023, + (int)94 + }, + { // Entry 771 + 0x1.ffffffffffffe0p-928, + 0x1.ffffffffffffep-1023, + (int)95 + }, + { // Entry 772 + 0x1.ffffffffffffe0p-927, + 0x1.ffffffffffffep-1023, + (int)96 + }, + { // Entry 773 + 0x1.ffffffffffffe0p-926, + 0x1.ffffffffffffep-1023, + (int)97 + }, + { // Entry 774 + 0x1.ffffffffffffe0p-925, + 0x1.ffffffffffffep-1023, + (int)98 + }, + { // Entry 775 + 0x1.ffffffffffffe0p-924, + 0x1.ffffffffffffep-1023, + (int)99 + }, + { // Entry 776 + 0x1.ffffffffffffe0p-923, + 0x1.ffffffffffffep-1023, + (int)100 + }, + { // Entry 777 + 0x1.ffffffffffffe0p-922, + 0x1.ffffffffffffep-1023, + (int)101 + }, + { // Entry 778 + 0x1.ffffffffffffe0p-921, + 0x1.ffffffffffffep-1023, + (int)102 + }, + { // Entry 779 + 0x1.ffffffffffffe0p-920, + 0x1.ffffffffffffep-1023, + (int)103 + }, + { // Entry 780 + 0x1.ffffffffffffe0p-919, + 0x1.ffffffffffffep-1023, + (int)104 + }, + { // Entry 781 + 0x1.ffffffffffffe0p-918, + 0x1.ffffffffffffep-1023, + (int)105 + }, + { // Entry 782 + 0x1.ffffffffffffe0p-917, + 0x1.ffffffffffffep-1023, + (int)106 + }, + { // Entry 783 + 0x1.ffffffffffffe0p-916, + 0x1.ffffffffffffep-1023, + (int)107 + }, + { // Entry 784 + 0x1.ffffffffffffe0p-915, + 0x1.ffffffffffffep-1023, + (int)108 + }, + { // Entry 785 + 0x1.ffffffffffffe0p-914, + 0x1.ffffffffffffep-1023, + (int)109 + }, + { // Entry 786 + 0x1.ffffffffffffe0p-913, + 0x1.ffffffffffffep-1023, + (int)110 + }, + { // Entry 787 + 0x1.ffffffffffffe0p-912, + 0x1.ffffffffffffep-1023, + (int)111 + }, + { // Entry 788 + 0x1.ffffffffffffe0p-911, + 0x1.ffffffffffffep-1023, + (int)112 + }, + { // Entry 789 + 0x1.ffffffffffffe0p-910, + 0x1.ffffffffffffep-1023, + (int)113 + }, + { // Entry 790 + 0x1.ffffffffffffe0p-909, + 0x1.ffffffffffffep-1023, + (int)114 + }, + { // Entry 791 + 0x1.ffffffffffffe0p-908, + 0x1.ffffffffffffep-1023, + (int)115 + }, + { // Entry 792 + 0x1.ffffffffffffe0p-907, + 0x1.ffffffffffffep-1023, + (int)116 + }, + { // Entry 793 + 0x1.ffffffffffffe0p-906, + 0x1.ffffffffffffep-1023, + (int)117 + }, + { // Entry 794 + 0x1.ffffffffffffe0p-905, + 0x1.ffffffffffffep-1023, + (int)118 + }, + { // Entry 795 + 0x1.ffffffffffffe0p-904, + 0x1.ffffffffffffep-1023, + (int)119 + }, + { // Entry 796 + 0x1.ffffffffffffe0p-903, + 0x1.ffffffffffffep-1023, + (int)120 + }, + { // Entry 797 + 0x1.ffffffffffffe0p-902, + 0x1.ffffffffffffep-1023, + (int)121 + }, + { // Entry 798 + 0x1.ffffffffffffe0p-901, + 0x1.ffffffffffffep-1023, + (int)122 + }, + { // Entry 799 + 0x1.ffffffffffffe0p-900, + 0x1.ffffffffffffep-1023, + (int)123 + }, + { // Entry 800 + 0x1.ffffffffffffe0p-899, + 0x1.ffffffffffffep-1023, + (int)124 + }, + { // Entry 801 + 0x1.ffffffffffffe0p-898, + 0x1.ffffffffffffep-1023, + (int)125 + }, + { // Entry 802 + 0x1.ffffffffffffe0p-897, + 0x1.ffffffffffffep-1023, + (int)126 + }, + { // Entry 803 + 0x1.ffffffffffffe0p-896, + 0x1.ffffffffffffep-1023, + (int)127 + }, + { // Entry 804 + 0x1.ffffffffffffe0p-895, + 0x1.ffffffffffffep-1023, + (int)128 + }, + { // Entry 805 + 0x1.ffffffffffffe0p-894, + 0x1.ffffffffffffep-1023, + (int)129 + }, + { // Entry 806 + 0x1.ffffffffffffe0p-893, + 0x1.ffffffffffffep-1023, + (int)130 + }, + { // Entry 807 + 0x1.p0, + 0x1.0p-1074, + (int)1074 + }, + { // Entry 808 + 0x1.p-1, + 0x1.0p-1074, + (int)1073 + }, + { // Entry 809 + 0x1.ffffffffffffe0p51, + 0x1.ffffffffffffep-1023, + (int)1074 + }, + { // Entry 810 + 0x1.ffffffffffffe0p50, + 0x1.ffffffffffffep-1023, + (int)1073 + }, + { // Entry 811 + 0x1.p-1022, + 0x1.0p-1074, + (int)52 + }, + { // Entry 812 + 0x1.p-1023, + 0x1.0p-1074, + (int)51 + }, + { // Entry 813 + 0x1.ffffffffffffe0p-971, + 0x1.ffffffffffffep-1023, + (int)52 + }, + { // Entry 814 + 0x1.ffffffffffffe0p-972, + 0x1.ffffffffffffep-1023, + (int)51 + }, + { // Entry 815 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 816 + 0x1.p-1073, + 0x1.0p-1074, + (int)1 + }, + { // Entry 817 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 818 + 0x1.ffffffffffffe0p-1022, + 0x1.ffffffffffffep-1023, + (int)1 + }, + { // Entry 819 + 0.0, + 0.0, + (int)0 + }, + { // Entry 820 + -0.0, + -0.0, + (int)0 + }, + { // Entry 821 + 0.0, + 0.0, + (int)1 + }, + { // Entry 822 + -0.0, + -0.0, + (int)1 + }, + { // Entry 823 + 0.0, + 0.0, + (int)-1 + }, + { // Entry 824 + -0.0, + -0.0, + (int)-1 + }, + { // Entry 825 + 0.0, + 0.0, + (int)127 + }, + { // Entry 826 + -0.0, + -0.0, + (int)127 + }, + { // Entry 827 + 0.0, + 0.0, + (int)-127 + }, + { // Entry 828 + -0.0, + -0.0, + (int)-127 + }, + { // Entry 829 + HUGE_VAL, + HUGE_VAL, + (int)0 + }, + { // Entry 830 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 831 + 0x1.p-1022, + 0x1.0p-1022, + (int)0 + }, + { // Entry 832 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 833 + 0x1.p-1074, + 0x1.0p-1074, + (int)0 + }, + { // Entry 834 + -0x1.p-1074, + -0x1.0p-1074, + (int)0 + }, + { // Entry 835 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023, + (int)0 + }, + { // Entry 836 + -0x1.p-1022, + -0x1.0p-1022, + (int)0 + }, + { // Entry 837 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023, + (int)0 + }, + { // Entry 838 + -HUGE_VAL, + -HUGE_VAL, + (int)0 + }, + { // Entry 839 + HUGE_VAL, + HUGE_VAL, + (int)1 + }, + { // Entry 840 + -HUGE_VAL, + -HUGE_VAL, + (int)1 + }, + { // Entry 841 + HUGE_VAL, + HUGE_VAL, + (int)-1 + }, + { // Entry 842 + -HUGE_VAL, + -HUGE_VAL, + (int)-1 + }, + { // Entry 843 + HUGE_VAL, + HUGE_VAL, + (int)127 + }, + { // Entry 844 + -HUGE_VAL, + -HUGE_VAL, + (int)127 + }, + { // Entry 845 + HUGE_VAL, + HUGE_VAL, + (int)-127 + }, + { // Entry 846 + -HUGE_VAL, + -HUGE_VAL, + (int)-127 + }, + { // Entry 847 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)1 + }, + { // Entry 848 + HUGE_VAL, + 0x1.fffffffffffffp1023, + (int)127 + }, + { // Entry 849 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + (int)1 + }, + { // Entry 850 + -HUGE_VAL, + -0x1.fffffffffffffp1023, + (int)127 + }, + { // Entry 851 + HUGE_VAL, + 0x1.0p-1022, + (int)40000 + }, + { // Entry 852 + HUGE_VAL, + 0x1.0p-1074, + (int)40000 + }, + { // Entry 853 + -HUGE_VAL, + -0x1.0p-1022, + (int)40000 + }, + { // Entry 854 + -HUGE_VAL, + -0x1.0p-1074, + (int)40000 + }, + { // Entry 855 + 0x1.p-1023, + 0x1.0p-1022, + (int)-1 + }, + { // Entry 856 + 0x1.ffffffffffffe0p-1024, + 0x1.ffffffffffffep-1023, + (int)-1 + }, + { // Entry 857 + 0.0, + 0x1.0p-1074, + (int)-1 + }, + { // Entry 858 + -0.0, + -0x1.0p-1074, + (int)-1 + }, + { // Entry 859 + -0x1.ffffffffffffe0p-1024, + -0x1.ffffffffffffep-1023, + (int)-1 + }, + { // Entry 860 + -0x1.p-1023, + -0x1.0p-1022, + (int)-1 + }, + { // Entry 861 + 0.0, + 0x1.fffffffffffffp1023, + (int)-40000 + }, + { // Entry 862 + -0.0, + -0x1.fffffffffffffp1023, + (int)-40000 + } +}; diff --git a/tests/math_data/scalbnf_intel_data.h b/tests/math_data/scalbnf_intel_data.h new file mode 100644 index 000000000..a1ffec763 --- /dev/null +++ b/tests/math_data/scalbnf_intel_data.h @@ -0,0 +1,4288 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_2_t g_scalbnf_intel_data[] = { + { // Entry 0 + -0.0f, + -0x1.p-149, + (int)-10 + }, + { // Entry 1 + -0x1.555554p-128, + -0x1.555554p-2, + (int)-126 + }, + { // Entry 2 + -0x1.6db6dcp-128, + -0x1.6db6dcp-1, + (int)-127 + }, + { // Entry 3 + -0x1.8e38e4p-128, + -0x1.8e38e4p-1, + (int)-127 + }, + { // Entry 4 + 0.0f, + 0x1.p-149, + (int)-1 + }, + { // Entry 5 + 0.0f, + 0x1.p-149, + (int)-10 + }, + { // Entry 6 + 0x1.29e412p-127, + 0x1.29e412p-7, + (int)-120 + }, + { // Entry 7 + 0.0f, + 0x1.dddddep-2, + (int)-148 + }, + { // Entry 8 + 0.0f, + 0x1.ffff60p-127, + (int)-23 + }, + { // Entry 9 + 0.0f, + 0x1.ffff84p-127, + (int)-23 + }, + { // Entry 10 + 0x1.fffff8p-137, + 0x1.fffff8p-127, + (int)-10 + }, + { // Entry 11 + 0.0f, + 0x1.fffffep127, + (int)(-2147483647-1) + }, + { // Entry 12 + HUGE_VALF, + 0x1.fffffep127, + (int)2147483647 + }, + { // Entry 13 + -0x1.p-10, + -0x1.p0, + (int)-10 + }, + { // Entry 14 + -0x1.p-9, + -0x1.p0, + (int)-9 + }, + { // Entry 15 + -0x1.p-8, + -0x1.p0, + (int)-8 + }, + { // Entry 16 + -0x1.p-7, + -0x1.p0, + (int)-7 + }, + { // Entry 17 + -0x1.p-6, + -0x1.p0, + (int)-6 + }, + { // Entry 18 + -0x1.p-5, + -0x1.p0, + (int)-5 + }, + { // Entry 19 + -0x1.p-4, + -0x1.p0, + (int)-4 + }, + { // Entry 20 + -0x1.p-3, + -0x1.p0, + (int)-3 + }, + { // Entry 21 + -0x1.p-2, + -0x1.p0, + (int)-2 + }, + { // Entry 22 + -0x1.p-1, + -0x1.p0, + (int)-1 + }, + { // Entry 23 + -0x1.p0, + -0x1.p0, + (int)0 + }, + { // Entry 24 + -0x1.p1, + -0x1.p0, + (int)1 + }, + { // Entry 25 + -0x1.p2, + -0x1.p0, + (int)2 + }, + { // Entry 26 + -0x1.p3, + -0x1.p0, + (int)3 + }, + { // Entry 27 + -0x1.p4, + -0x1.p0, + (int)4 + }, + { // Entry 28 + -0x1.p5, + -0x1.p0, + (int)5 + }, + { // Entry 29 + -0x1.p6, + -0x1.p0, + (int)6 + }, + { // Entry 30 + -0x1.p7, + -0x1.p0, + (int)7 + }, + { // Entry 31 + -0x1.p8, + -0x1.p0, + (int)8 + }, + { // Entry 32 + -0x1.p9, + -0x1.p0, + (int)9 + }, + { // Entry 33 + -0x1.p10, + -0x1.p0, + (int)10 + }, + { // Entry 34 + -0x1.d1745cp-11, + -0x1.d1745cp-1, + (int)-10 + }, + { // Entry 35 + -0x1.d1745cp-10, + -0x1.d1745cp-1, + (int)-9 + }, + { // Entry 36 + -0x1.d1745cp-9, + -0x1.d1745cp-1, + (int)-8 + }, + { // Entry 37 + -0x1.d1745cp-8, + -0x1.d1745cp-1, + (int)-7 + }, + { // Entry 38 + -0x1.d1745cp-7, + -0x1.d1745cp-1, + (int)-6 + }, + { // Entry 39 + -0x1.d1745cp-6, + -0x1.d1745cp-1, + (int)-5 + }, + { // Entry 40 + -0x1.d1745cp-5, + -0x1.d1745cp-1, + (int)-4 + }, + { // Entry 41 + -0x1.d1745cp-4, + -0x1.d1745cp-1, + (int)-3 + }, + { // Entry 42 + -0x1.d1745cp-3, + -0x1.d1745cp-1, + (int)-2 + }, + { // Entry 43 + -0x1.d1745cp-2, + -0x1.d1745cp-1, + (int)-1 + }, + { // Entry 44 + -0x1.d1745cp-1, + -0x1.d1745cp-1, + (int)0 + }, + { // Entry 45 + -0x1.d1745cp0, + -0x1.d1745cp-1, + (int)1 + }, + { // Entry 46 + -0x1.d1745cp1, + -0x1.d1745cp-1, + (int)2 + }, + { // Entry 47 + -0x1.d1745cp2, + -0x1.d1745cp-1, + (int)3 + }, + { // Entry 48 + -0x1.d1745cp3, + -0x1.d1745cp-1, + (int)4 + }, + { // Entry 49 + -0x1.d1745cp4, + -0x1.d1745cp-1, + (int)5 + }, + { // Entry 50 + -0x1.d1745cp5, + -0x1.d1745cp-1, + (int)6 + }, + { // Entry 51 + -0x1.d1745cp6, + -0x1.d1745cp-1, + (int)7 + }, + { // Entry 52 + -0x1.d1745cp7, + -0x1.d1745cp-1, + (int)8 + }, + { // Entry 53 + -0x1.d1745cp8, + -0x1.d1745cp-1, + (int)9 + }, + { // Entry 54 + -0x1.d1745cp9, + -0x1.d1745cp-1, + (int)10 + }, + { // Entry 55 + -0x1.a2e8b8p-11, + -0x1.a2e8b8p-1, + (int)-10 + }, + { // Entry 56 + -0x1.a2e8b8p-10, + -0x1.a2e8b8p-1, + (int)-9 + }, + { // Entry 57 + -0x1.a2e8b8p-9, + -0x1.a2e8b8p-1, + (int)-8 + }, + { // Entry 58 + -0x1.a2e8b8p-8, + -0x1.a2e8b8p-1, + (int)-7 + }, + { // Entry 59 + -0x1.a2e8b8p-7, + -0x1.a2e8b8p-1, + (int)-6 + }, + { // Entry 60 + -0x1.a2e8b8p-6, + -0x1.a2e8b8p-1, + (int)-5 + }, + { // Entry 61 + -0x1.a2e8b8p-5, + -0x1.a2e8b8p-1, + (int)-4 + }, + { // Entry 62 + -0x1.a2e8b8p-4, + -0x1.a2e8b8p-1, + (int)-3 + }, + { // Entry 63 + -0x1.a2e8b8p-3, + -0x1.a2e8b8p-1, + (int)-2 + }, + { // Entry 64 + -0x1.a2e8b8p-2, + -0x1.a2e8b8p-1, + (int)-1 + }, + { // Entry 65 + -0x1.a2e8b8p-1, + -0x1.a2e8b8p-1, + (int)0 + }, + { // Entry 66 + -0x1.a2e8b8p0, + -0x1.a2e8b8p-1, + (int)1 + }, + { // Entry 67 + -0x1.a2e8b8p1, + -0x1.a2e8b8p-1, + (int)2 + }, + { // Entry 68 + -0x1.a2e8b8p2, + -0x1.a2e8b8p-1, + (int)3 + }, + { // Entry 69 + -0x1.a2e8b8p3, + -0x1.a2e8b8p-1, + (int)4 + }, + { // Entry 70 + -0x1.a2e8b8p4, + -0x1.a2e8b8p-1, + (int)5 + }, + { // Entry 71 + -0x1.a2e8b8p5, + -0x1.a2e8b8p-1, + (int)6 + }, + { // Entry 72 + -0x1.a2e8b8p6, + -0x1.a2e8b8p-1, + (int)7 + }, + { // Entry 73 + -0x1.a2e8b8p7, + -0x1.a2e8b8p-1, + (int)8 + }, + { // Entry 74 + -0x1.a2e8b8p8, + -0x1.a2e8b8p-1, + (int)9 + }, + { // Entry 75 + -0x1.a2e8b8p9, + -0x1.a2e8b8p-1, + (int)10 + }, + { // Entry 76 + -0x1.745d14p-11, + -0x1.745d14p-1, + (int)-10 + }, + { // Entry 77 + -0x1.745d14p-10, + -0x1.745d14p-1, + (int)-9 + }, + { // Entry 78 + -0x1.745d14p-9, + -0x1.745d14p-1, + (int)-8 + }, + { // Entry 79 + -0x1.745d14p-8, + -0x1.745d14p-1, + (int)-7 + }, + { // Entry 80 + -0x1.745d14p-7, + -0x1.745d14p-1, + (int)-6 + }, + { // Entry 81 + -0x1.745d14p-6, + -0x1.745d14p-1, + (int)-5 + }, + { // Entry 82 + -0x1.745d14p-5, + -0x1.745d14p-1, + (int)-4 + }, + { // Entry 83 + -0x1.745d14p-4, + -0x1.745d14p-1, + (int)-3 + }, + { // Entry 84 + -0x1.745d14p-3, + -0x1.745d14p-1, + (int)-2 + }, + { // Entry 85 + -0x1.745d14p-2, + -0x1.745d14p-1, + (int)-1 + }, + { // Entry 86 + -0x1.745d14p-1, + -0x1.745d14p-1, + (int)0 + }, + { // Entry 87 + -0x1.745d14p0, + -0x1.745d14p-1, + (int)1 + }, + { // Entry 88 + -0x1.745d14p1, + -0x1.745d14p-1, + (int)2 + }, + { // Entry 89 + -0x1.745d14p2, + -0x1.745d14p-1, + (int)3 + }, + { // Entry 90 + -0x1.745d14p3, + -0x1.745d14p-1, + (int)4 + }, + { // Entry 91 + -0x1.745d14p4, + -0x1.745d14p-1, + (int)5 + }, + { // Entry 92 + -0x1.745d14p5, + -0x1.745d14p-1, + (int)6 + }, + { // Entry 93 + -0x1.745d14p6, + -0x1.745d14p-1, + (int)7 + }, + { // Entry 94 + -0x1.745d14p7, + -0x1.745d14p-1, + (int)8 + }, + { // Entry 95 + -0x1.745d14p8, + -0x1.745d14p-1, + (int)9 + }, + { // Entry 96 + -0x1.745d14p9, + -0x1.745d14p-1, + (int)10 + }, + { // Entry 97 + -0x1.45d170p-11, + -0x1.45d170p-1, + (int)-10 + }, + { // Entry 98 + -0x1.45d170p-10, + -0x1.45d170p-1, + (int)-9 + }, + { // Entry 99 + -0x1.45d170p-9, + -0x1.45d170p-1, + (int)-8 + }, + { // Entry 100 + -0x1.45d170p-8, + -0x1.45d170p-1, + (int)-7 + }, + { // Entry 101 + -0x1.45d170p-7, + -0x1.45d170p-1, + (int)-6 + }, + { // Entry 102 + -0x1.45d170p-6, + -0x1.45d170p-1, + (int)-5 + }, + { // Entry 103 + -0x1.45d170p-5, + -0x1.45d170p-1, + (int)-4 + }, + { // Entry 104 + -0x1.45d170p-4, + -0x1.45d170p-1, + (int)-3 + }, + { // Entry 105 + -0x1.45d170p-3, + -0x1.45d170p-1, + (int)-2 + }, + { // Entry 106 + -0x1.45d170p-2, + -0x1.45d170p-1, + (int)-1 + }, + { // Entry 107 + -0x1.45d170p-1, + -0x1.45d170p-1, + (int)0 + }, + { // Entry 108 + -0x1.45d170p0, + -0x1.45d170p-1, + (int)1 + }, + { // Entry 109 + -0x1.45d170p1, + -0x1.45d170p-1, + (int)2 + }, + { // Entry 110 + -0x1.45d170p2, + -0x1.45d170p-1, + (int)3 + }, + { // Entry 111 + -0x1.45d170p3, + -0x1.45d170p-1, + (int)4 + }, + { // Entry 112 + -0x1.45d170p4, + -0x1.45d170p-1, + (int)5 + }, + { // Entry 113 + -0x1.45d170p5, + -0x1.45d170p-1, + (int)6 + }, + { // Entry 114 + -0x1.45d170p6, + -0x1.45d170p-1, + (int)7 + }, + { // Entry 115 + -0x1.45d170p7, + -0x1.45d170p-1, + (int)8 + }, + { // Entry 116 + -0x1.45d170p8, + -0x1.45d170p-1, + (int)9 + }, + { // Entry 117 + -0x1.45d170p9, + -0x1.45d170p-1, + (int)10 + }, + { // Entry 118 + -0x1.1745ccp-11, + -0x1.1745ccp-1, + (int)-10 + }, + { // Entry 119 + -0x1.1745ccp-10, + -0x1.1745ccp-1, + (int)-9 + }, + { // Entry 120 + -0x1.1745ccp-9, + -0x1.1745ccp-1, + (int)-8 + }, + { // Entry 121 + -0x1.1745ccp-8, + -0x1.1745ccp-1, + (int)-7 + }, + { // Entry 122 + -0x1.1745ccp-7, + -0x1.1745ccp-1, + (int)-6 + }, + { // Entry 123 + -0x1.1745ccp-6, + -0x1.1745ccp-1, + (int)-5 + }, + { // Entry 124 + -0x1.1745ccp-5, + -0x1.1745ccp-1, + (int)-4 + }, + { // Entry 125 + -0x1.1745ccp-4, + -0x1.1745ccp-1, + (int)-3 + }, + { // Entry 126 + -0x1.1745ccp-3, + -0x1.1745ccp-1, + (int)-2 + }, + { // Entry 127 + -0x1.1745ccp-2, + -0x1.1745ccp-1, + (int)-1 + }, + { // Entry 128 + -0x1.1745ccp-1, + -0x1.1745ccp-1, + (int)0 + }, + { // Entry 129 + -0x1.1745ccp0, + -0x1.1745ccp-1, + (int)1 + }, + { // Entry 130 + -0x1.1745ccp1, + -0x1.1745ccp-1, + (int)2 + }, + { // Entry 131 + -0x1.1745ccp2, + -0x1.1745ccp-1, + (int)3 + }, + { // Entry 132 + -0x1.1745ccp3, + -0x1.1745ccp-1, + (int)4 + }, + { // Entry 133 + -0x1.1745ccp4, + -0x1.1745ccp-1, + (int)5 + }, + { // Entry 134 + -0x1.1745ccp5, + -0x1.1745ccp-1, + (int)6 + }, + { // Entry 135 + -0x1.1745ccp6, + -0x1.1745ccp-1, + (int)7 + }, + { // Entry 136 + -0x1.1745ccp7, + -0x1.1745ccp-1, + (int)8 + }, + { // Entry 137 + -0x1.1745ccp8, + -0x1.1745ccp-1, + (int)9 + }, + { // Entry 138 + -0x1.1745ccp9, + -0x1.1745ccp-1, + (int)10 + }, + { // Entry 139 + -0x1.d17452p-12, + -0x1.d17452p-2, + (int)-10 + }, + { // Entry 140 + -0x1.d17452p-11, + -0x1.d17452p-2, + (int)-9 + }, + { // Entry 141 + -0x1.d17452p-10, + -0x1.d17452p-2, + (int)-8 + }, + { // Entry 142 + -0x1.d17452p-9, + -0x1.d17452p-2, + (int)-7 + }, + { // Entry 143 + -0x1.d17452p-8, + -0x1.d17452p-2, + (int)-6 + }, + { // Entry 144 + -0x1.d17452p-7, + -0x1.d17452p-2, + (int)-5 + }, + { // Entry 145 + -0x1.d17452p-6, + -0x1.d17452p-2, + (int)-4 + }, + { // Entry 146 + -0x1.d17452p-5, + -0x1.d17452p-2, + (int)-3 + }, + { // Entry 147 + -0x1.d17452p-4, + -0x1.d17452p-2, + (int)-2 + }, + { // Entry 148 + -0x1.d17452p-3, + -0x1.d17452p-2, + (int)-1 + }, + { // Entry 149 + -0x1.d17452p-2, + -0x1.d17452p-2, + (int)0 + }, + { // Entry 150 + -0x1.d17452p-1, + -0x1.d17452p-2, + (int)1 + }, + { // Entry 151 + -0x1.d17452p0, + -0x1.d17452p-2, + (int)2 + }, + { // Entry 152 + -0x1.d17452p1, + -0x1.d17452p-2, + (int)3 + }, + { // Entry 153 + -0x1.d17452p2, + -0x1.d17452p-2, + (int)4 + }, + { // Entry 154 + -0x1.d17452p3, + -0x1.d17452p-2, + (int)5 + }, + { // Entry 155 + -0x1.d17452p4, + -0x1.d17452p-2, + (int)6 + }, + { // Entry 156 + -0x1.d17452p5, + -0x1.d17452p-2, + (int)7 + }, + { // Entry 157 + -0x1.d17452p6, + -0x1.d17452p-2, + (int)8 + }, + { // Entry 158 + -0x1.d17452p7, + -0x1.d17452p-2, + (int)9 + }, + { // Entry 159 + -0x1.d17452p8, + -0x1.d17452p-2, + (int)10 + }, + { // Entry 160 + -0x1.745d0cp-12, + -0x1.745d0cp-2, + (int)-10 + }, + { // Entry 161 + -0x1.745d0cp-11, + -0x1.745d0cp-2, + (int)-9 + }, + { // Entry 162 + -0x1.745d0cp-10, + -0x1.745d0cp-2, + (int)-8 + }, + { // Entry 163 + -0x1.745d0cp-9, + -0x1.745d0cp-2, + (int)-7 + }, + { // Entry 164 + -0x1.745d0cp-8, + -0x1.745d0cp-2, + (int)-6 + }, + { // Entry 165 + -0x1.745d0cp-7, + -0x1.745d0cp-2, + (int)-5 + }, + { // Entry 166 + -0x1.745d0cp-6, + -0x1.745d0cp-2, + (int)-4 + }, + { // Entry 167 + -0x1.745d0cp-5, + -0x1.745d0cp-2, + (int)-3 + }, + { // Entry 168 + -0x1.745d0cp-4, + -0x1.745d0cp-2, + (int)-2 + }, + { // Entry 169 + -0x1.745d0cp-3, + -0x1.745d0cp-2, + (int)-1 + }, + { // Entry 170 + -0x1.745d0cp-2, + -0x1.745d0cp-2, + (int)0 + }, + { // Entry 171 + -0x1.745d0cp-1, + -0x1.745d0cp-2, + (int)1 + }, + { // Entry 172 + -0x1.745d0cp0, + -0x1.745d0cp-2, + (int)2 + }, + { // Entry 173 + -0x1.745d0cp1, + -0x1.745d0cp-2, + (int)3 + }, + { // Entry 174 + -0x1.745d0cp2, + -0x1.745d0cp-2, + (int)4 + }, + { // Entry 175 + -0x1.745d0cp3, + -0x1.745d0cp-2, + (int)5 + }, + { // Entry 176 + -0x1.745d0cp4, + -0x1.745d0cp-2, + (int)6 + }, + { // Entry 177 + -0x1.745d0cp5, + -0x1.745d0cp-2, + (int)7 + }, + { // Entry 178 + -0x1.745d0cp6, + -0x1.745d0cp-2, + (int)8 + }, + { // Entry 179 + -0x1.745d0cp7, + -0x1.745d0cp-2, + (int)9 + }, + { // Entry 180 + -0x1.745d0cp8, + -0x1.745d0cp-2, + (int)10 + }, + { // Entry 181 + -0x1.1745c6p-12, + -0x1.1745c6p-2, + (int)-10 + }, + { // Entry 182 + -0x1.1745c6p-11, + -0x1.1745c6p-2, + (int)-9 + }, + { // Entry 183 + -0x1.1745c6p-10, + -0x1.1745c6p-2, + (int)-8 + }, + { // Entry 184 + -0x1.1745c6p-9, + -0x1.1745c6p-2, + (int)-7 + }, + { // Entry 185 + -0x1.1745c6p-8, + -0x1.1745c6p-2, + (int)-6 + }, + { // Entry 186 + -0x1.1745c6p-7, + -0x1.1745c6p-2, + (int)-5 + }, + { // Entry 187 + -0x1.1745c6p-6, + -0x1.1745c6p-2, + (int)-4 + }, + { // Entry 188 + -0x1.1745c6p-5, + -0x1.1745c6p-2, + (int)-3 + }, + { // Entry 189 + -0x1.1745c6p-4, + -0x1.1745c6p-2, + (int)-2 + }, + { // Entry 190 + -0x1.1745c6p-3, + -0x1.1745c6p-2, + (int)-1 + }, + { // Entry 191 + -0x1.1745c6p-2, + -0x1.1745c6p-2, + (int)0 + }, + { // Entry 192 + -0x1.1745c6p-1, + -0x1.1745c6p-2, + (int)1 + }, + { // Entry 193 + -0x1.1745c6p0, + -0x1.1745c6p-2, + (int)2 + }, + { // Entry 194 + -0x1.1745c6p1, + -0x1.1745c6p-2, + (int)3 + }, + { // Entry 195 + -0x1.1745c6p2, + -0x1.1745c6p-2, + (int)4 + }, + { // Entry 196 + -0x1.1745c6p3, + -0x1.1745c6p-2, + (int)5 + }, + { // Entry 197 + -0x1.1745c6p4, + -0x1.1745c6p-2, + (int)6 + }, + { // Entry 198 + -0x1.1745c6p5, + -0x1.1745c6p-2, + (int)7 + }, + { // Entry 199 + -0x1.1745c6p6, + -0x1.1745c6p-2, + (int)8 + }, + { // Entry 200 + -0x1.1745c6p7, + -0x1.1745c6p-2, + (int)9 + }, + { // Entry 201 + -0x1.1745c6p8, + -0x1.1745c6p-2, + (int)10 + }, + { // Entry 202 + -0x1.745dp-13, + -0x1.745dp-3, + (int)-10 + }, + { // Entry 203 + -0x1.745dp-12, + -0x1.745dp-3, + (int)-9 + }, + { // Entry 204 + -0x1.745dp-11, + -0x1.745dp-3, + (int)-8 + }, + { // Entry 205 + -0x1.745dp-10, + -0x1.745dp-3, + (int)-7 + }, + { // Entry 206 + -0x1.745dp-9, + -0x1.745dp-3, + (int)-6 + }, + { // Entry 207 + -0x1.745dp-8, + -0x1.745dp-3, + (int)-5 + }, + { // Entry 208 + -0x1.745dp-7, + -0x1.745dp-3, + (int)-4 + }, + { // Entry 209 + -0x1.745dp-6, + -0x1.745dp-3, + (int)-3 + }, + { // Entry 210 + -0x1.745dp-5, + -0x1.745dp-3, + (int)-2 + }, + { // Entry 211 + -0x1.745dp-4, + -0x1.745dp-3, + (int)-1 + }, + { // Entry 212 + -0x1.745dp-3, + -0x1.745dp-3, + (int)0 + }, + { // Entry 213 + -0x1.745dp-2, + -0x1.745dp-3, + (int)1 + }, + { // Entry 214 + -0x1.745dp-1, + -0x1.745dp-3, + (int)2 + }, + { // Entry 215 + -0x1.745dp0, + -0x1.745dp-3, + (int)3 + }, + { // Entry 216 + -0x1.745dp1, + -0x1.745dp-3, + (int)4 + }, + { // Entry 217 + -0x1.745dp2, + -0x1.745dp-3, + (int)5 + }, + { // Entry 218 + -0x1.745dp3, + -0x1.745dp-3, + (int)6 + }, + { // Entry 219 + -0x1.745dp4, + -0x1.745dp-3, + (int)7 + }, + { // Entry 220 + -0x1.745dp5, + -0x1.745dp-3, + (int)8 + }, + { // Entry 221 + -0x1.745dp6, + -0x1.745dp-3, + (int)9 + }, + { // Entry 222 + -0x1.745dp7, + -0x1.745dp-3, + (int)10 + }, + { // Entry 223 + -0x1.745ce8p-14, + -0x1.745ce8p-4, + (int)-10 + }, + { // Entry 224 + -0x1.745ce8p-13, + -0x1.745ce8p-4, + (int)-9 + }, + { // Entry 225 + -0x1.745ce8p-12, + -0x1.745ce8p-4, + (int)-8 + }, + { // Entry 226 + -0x1.745ce8p-11, + -0x1.745ce8p-4, + (int)-7 + }, + { // Entry 227 + -0x1.745ce8p-10, + -0x1.745ce8p-4, + (int)-6 + }, + { // Entry 228 + -0x1.745ce8p-9, + -0x1.745ce8p-4, + (int)-5 + }, + { // Entry 229 + -0x1.745ce8p-8, + -0x1.745ce8p-4, + (int)-4 + }, + { // Entry 230 + -0x1.745ce8p-7, + -0x1.745ce8p-4, + (int)-3 + }, + { // Entry 231 + -0x1.745ce8p-6, + -0x1.745ce8p-4, + (int)-2 + }, + { // Entry 232 + -0x1.745ce8p-5, + -0x1.745ce8p-4, + (int)-1 + }, + { // Entry 233 + -0x1.745ce8p-4, + -0x1.745ce8p-4, + (int)0 + }, + { // Entry 234 + -0x1.745ce8p-3, + -0x1.745ce8p-4, + (int)1 + }, + { // Entry 235 + -0x1.745ce8p-2, + -0x1.745ce8p-4, + (int)2 + }, + { // Entry 236 + -0x1.745ce8p-1, + -0x1.745ce8p-4, + (int)3 + }, + { // Entry 237 + -0x1.745ce8p0, + -0x1.745ce8p-4, + (int)4 + }, + { // Entry 238 + -0x1.745ce8p1, + -0x1.745ce8p-4, + (int)5 + }, + { // Entry 239 + -0x1.745ce8p2, + -0x1.745ce8p-4, + (int)6 + }, + { // Entry 240 + -0x1.745ce8p3, + -0x1.745ce8p-4, + (int)7 + }, + { // Entry 241 + -0x1.745ce8p4, + -0x1.745ce8p-4, + (int)8 + }, + { // Entry 242 + -0x1.745ce8p5, + -0x1.745ce8p-4, + (int)9 + }, + { // Entry 243 + -0x1.745ce8p6, + -0x1.745ce8p-4, + (int)10 + }, + { // Entry 244 + 0x1.80p-33, + 0x1.80p-23, + (int)-10 + }, + { // Entry 245 + 0x1.80p-32, + 0x1.80p-23, + (int)-9 + }, + { // Entry 246 + 0x1.80p-31, + 0x1.80p-23, + (int)-8 + }, + { // Entry 247 + 0x1.80p-30, + 0x1.80p-23, + (int)-7 + }, + { // Entry 248 + 0x1.80p-29, + 0x1.80p-23, + (int)-6 + }, + { // Entry 249 + 0x1.80p-28, + 0x1.80p-23, + (int)-5 + }, + { // Entry 250 + 0x1.80p-27, + 0x1.80p-23, + (int)-4 + }, + { // Entry 251 + 0x1.80p-26, + 0x1.80p-23, + (int)-3 + }, + { // Entry 252 + 0x1.80p-25, + 0x1.80p-23, + (int)-2 + }, + { // Entry 253 + 0x1.80p-24, + 0x1.80p-23, + (int)-1 + }, + { // Entry 254 + 0x1.80p-23, + 0x1.80p-23, + (int)0 + }, + { // Entry 255 + 0x1.80p-22, + 0x1.80p-23, + (int)1 + }, + { // Entry 256 + 0x1.80p-21, + 0x1.80p-23, + (int)2 + }, + { // Entry 257 + 0x1.80p-20, + 0x1.80p-23, + (int)3 + }, + { // Entry 258 + 0x1.80p-19, + 0x1.80p-23, + (int)4 + }, + { // Entry 259 + 0x1.80p-18, + 0x1.80p-23, + (int)5 + }, + { // Entry 260 + 0x1.80p-17, + 0x1.80p-23, + (int)6 + }, + { // Entry 261 + 0x1.80p-16, + 0x1.80p-23, + (int)7 + }, + { // Entry 262 + 0x1.80p-15, + 0x1.80p-23, + (int)8 + }, + { // Entry 263 + 0x1.80p-14, + 0x1.80p-23, + (int)9 + }, + { // Entry 264 + 0x1.80p-13, + 0x1.80p-23, + (int)10 + }, + { // Entry 265 + 0x1.745d48p-14, + 0x1.745d48p-4, + (int)-10 + }, + { // Entry 266 + 0x1.745d48p-13, + 0x1.745d48p-4, + (int)-9 + }, + { // Entry 267 + 0x1.745d48p-12, + 0x1.745d48p-4, + (int)-8 + }, + { // Entry 268 + 0x1.745d48p-11, + 0x1.745d48p-4, + (int)-7 + }, + { // Entry 269 + 0x1.745d48p-10, + 0x1.745d48p-4, + (int)-6 + }, + { // Entry 270 + 0x1.745d48p-9, + 0x1.745d48p-4, + (int)-5 + }, + { // Entry 271 + 0x1.745d48p-8, + 0x1.745d48p-4, + (int)-4 + }, + { // Entry 272 + 0x1.745d48p-7, + 0x1.745d48p-4, + (int)-3 + }, + { // Entry 273 + 0x1.745d48p-6, + 0x1.745d48p-4, + (int)-2 + }, + { // Entry 274 + 0x1.745d48p-5, + 0x1.745d48p-4, + (int)-1 + }, + { // Entry 275 + 0x1.745d48p-4, + 0x1.745d48p-4, + (int)0 + }, + { // Entry 276 + 0x1.745d48p-3, + 0x1.745d48p-4, + (int)1 + }, + { // Entry 277 + 0x1.745d48p-2, + 0x1.745d48p-4, + (int)2 + }, + { // Entry 278 + 0x1.745d48p-1, + 0x1.745d48p-4, + (int)3 + }, + { // Entry 279 + 0x1.745d48p0, + 0x1.745d48p-4, + (int)4 + }, + { // Entry 280 + 0x1.745d48p1, + 0x1.745d48p-4, + (int)5 + }, + { // Entry 281 + 0x1.745d48p2, + 0x1.745d48p-4, + (int)6 + }, + { // Entry 282 + 0x1.745d48p3, + 0x1.745d48p-4, + (int)7 + }, + { // Entry 283 + 0x1.745d48p4, + 0x1.745d48p-4, + (int)8 + }, + { // Entry 284 + 0x1.745d48p5, + 0x1.745d48p-4, + (int)9 + }, + { // Entry 285 + 0x1.745d48p6, + 0x1.745d48p-4, + (int)10 + }, + { // Entry 286 + 0x1.745d30p-13, + 0x1.745d30p-3, + (int)-10 + }, + { // Entry 287 + 0x1.745d30p-12, + 0x1.745d30p-3, + (int)-9 + }, + { // Entry 288 + 0x1.745d30p-11, + 0x1.745d30p-3, + (int)-8 + }, + { // Entry 289 + 0x1.745d30p-10, + 0x1.745d30p-3, + (int)-7 + }, + { // Entry 290 + 0x1.745d30p-9, + 0x1.745d30p-3, + (int)-6 + }, + { // Entry 291 + 0x1.745d30p-8, + 0x1.745d30p-3, + (int)-5 + }, + { // Entry 292 + 0x1.745d30p-7, + 0x1.745d30p-3, + (int)-4 + }, + { // Entry 293 + 0x1.745d30p-6, + 0x1.745d30p-3, + (int)-3 + }, + { // Entry 294 + 0x1.745d30p-5, + 0x1.745d30p-3, + (int)-2 + }, + { // Entry 295 + 0x1.745d30p-4, + 0x1.745d30p-3, + (int)-1 + }, + { // Entry 296 + 0x1.745d30p-3, + 0x1.745d30p-3, + (int)0 + }, + { // Entry 297 + 0x1.745d30p-2, + 0x1.745d30p-3, + (int)1 + }, + { // Entry 298 + 0x1.745d30p-1, + 0x1.745d30p-3, + (int)2 + }, + { // Entry 299 + 0x1.745d30p0, + 0x1.745d30p-3, + (int)3 + }, + { // Entry 300 + 0x1.745d30p1, + 0x1.745d30p-3, + (int)4 + }, + { // Entry 301 + 0x1.745d30p2, + 0x1.745d30p-3, + (int)5 + }, + { // Entry 302 + 0x1.745d30p3, + 0x1.745d30p-3, + (int)6 + }, + { // Entry 303 + 0x1.745d30p4, + 0x1.745d30p-3, + (int)7 + }, + { // Entry 304 + 0x1.745d30p5, + 0x1.745d30p-3, + (int)8 + }, + { // Entry 305 + 0x1.745d30p6, + 0x1.745d30p-3, + (int)9 + }, + { // Entry 306 + 0x1.745d30p7, + 0x1.745d30p-3, + (int)10 + }, + { // Entry 307 + 0x1.1745dep-12, + 0x1.1745dep-2, + (int)-10 + }, + { // Entry 308 + 0x1.1745dep-11, + 0x1.1745dep-2, + (int)-9 + }, + { // Entry 309 + 0x1.1745dep-10, + 0x1.1745dep-2, + (int)-8 + }, + { // Entry 310 + 0x1.1745dep-9, + 0x1.1745dep-2, + (int)-7 + }, + { // Entry 311 + 0x1.1745dep-8, + 0x1.1745dep-2, + (int)-6 + }, + { // Entry 312 + 0x1.1745dep-7, + 0x1.1745dep-2, + (int)-5 + }, + { // Entry 313 + 0x1.1745dep-6, + 0x1.1745dep-2, + (int)-4 + }, + { // Entry 314 + 0x1.1745dep-5, + 0x1.1745dep-2, + (int)-3 + }, + { // Entry 315 + 0x1.1745dep-4, + 0x1.1745dep-2, + (int)-2 + }, + { // Entry 316 + 0x1.1745dep-3, + 0x1.1745dep-2, + (int)-1 + }, + { // Entry 317 + 0x1.1745dep-2, + 0x1.1745dep-2, + (int)0 + }, + { // Entry 318 + 0x1.1745dep-1, + 0x1.1745dep-2, + (int)1 + }, + { // Entry 319 + 0x1.1745dep0, + 0x1.1745dep-2, + (int)2 + }, + { // Entry 320 + 0x1.1745dep1, + 0x1.1745dep-2, + (int)3 + }, + { // Entry 321 + 0x1.1745dep2, + 0x1.1745dep-2, + (int)4 + }, + { // Entry 322 + 0x1.1745dep3, + 0x1.1745dep-2, + (int)5 + }, + { // Entry 323 + 0x1.1745dep4, + 0x1.1745dep-2, + (int)6 + }, + { // Entry 324 + 0x1.1745dep5, + 0x1.1745dep-2, + (int)7 + }, + { // Entry 325 + 0x1.1745dep6, + 0x1.1745dep-2, + (int)8 + }, + { // Entry 326 + 0x1.1745dep7, + 0x1.1745dep-2, + (int)9 + }, + { // Entry 327 + 0x1.1745dep8, + 0x1.1745dep-2, + (int)10 + }, + { // Entry 328 + 0x1.745d24p-12, + 0x1.745d24p-2, + (int)-10 + }, + { // Entry 329 + 0x1.745d24p-11, + 0x1.745d24p-2, + (int)-9 + }, + { // Entry 330 + 0x1.745d24p-10, + 0x1.745d24p-2, + (int)-8 + }, + { // Entry 331 + 0x1.745d24p-9, + 0x1.745d24p-2, + (int)-7 + }, + { // Entry 332 + 0x1.745d24p-8, + 0x1.745d24p-2, + (int)-6 + }, + { // Entry 333 + 0x1.745d24p-7, + 0x1.745d24p-2, + (int)-5 + }, + { // Entry 334 + 0x1.745d24p-6, + 0x1.745d24p-2, + (int)-4 + }, + { // Entry 335 + 0x1.745d24p-5, + 0x1.745d24p-2, + (int)-3 + }, + { // Entry 336 + 0x1.745d24p-4, + 0x1.745d24p-2, + (int)-2 + }, + { // Entry 337 + 0x1.745d24p-3, + 0x1.745d24p-2, + (int)-1 + }, + { // Entry 338 + 0x1.745d24p-2, + 0x1.745d24p-2, + (int)0 + }, + { // Entry 339 + 0x1.745d24p-1, + 0x1.745d24p-2, + (int)1 + }, + { // Entry 340 + 0x1.745d24p0, + 0x1.745d24p-2, + (int)2 + }, + { // Entry 341 + 0x1.745d24p1, + 0x1.745d24p-2, + (int)3 + }, + { // Entry 342 + 0x1.745d24p2, + 0x1.745d24p-2, + (int)4 + }, + { // Entry 343 + 0x1.745d24p3, + 0x1.745d24p-2, + (int)5 + }, + { // Entry 344 + 0x1.745d24p4, + 0x1.745d24p-2, + (int)6 + }, + { // Entry 345 + 0x1.745d24p5, + 0x1.745d24p-2, + (int)7 + }, + { // Entry 346 + 0x1.745d24p6, + 0x1.745d24p-2, + (int)8 + }, + { // Entry 347 + 0x1.745d24p7, + 0x1.745d24p-2, + (int)9 + }, + { // Entry 348 + 0x1.745d24p8, + 0x1.745d24p-2, + (int)10 + }, + { // Entry 349 + 0x1.d1746ap-12, + 0x1.d1746ap-2, + (int)-10 + }, + { // Entry 350 + 0x1.d1746ap-11, + 0x1.d1746ap-2, + (int)-9 + }, + { // Entry 351 + 0x1.d1746ap-10, + 0x1.d1746ap-2, + (int)-8 + }, + { // Entry 352 + 0x1.d1746ap-9, + 0x1.d1746ap-2, + (int)-7 + }, + { // Entry 353 + 0x1.d1746ap-8, + 0x1.d1746ap-2, + (int)-6 + }, + { // Entry 354 + 0x1.d1746ap-7, + 0x1.d1746ap-2, + (int)-5 + }, + { // Entry 355 + 0x1.d1746ap-6, + 0x1.d1746ap-2, + (int)-4 + }, + { // Entry 356 + 0x1.d1746ap-5, + 0x1.d1746ap-2, + (int)-3 + }, + { // Entry 357 + 0x1.d1746ap-4, + 0x1.d1746ap-2, + (int)-2 + }, + { // Entry 358 + 0x1.d1746ap-3, + 0x1.d1746ap-2, + (int)-1 + }, + { // Entry 359 + 0x1.d1746ap-2, + 0x1.d1746ap-2, + (int)0 + }, + { // Entry 360 + 0x1.d1746ap-1, + 0x1.d1746ap-2, + (int)1 + }, + { // Entry 361 + 0x1.d1746ap0, + 0x1.d1746ap-2, + (int)2 + }, + { // Entry 362 + 0x1.d1746ap1, + 0x1.d1746ap-2, + (int)3 + }, + { // Entry 363 + 0x1.d1746ap2, + 0x1.d1746ap-2, + (int)4 + }, + { // Entry 364 + 0x1.d1746ap3, + 0x1.d1746ap-2, + (int)5 + }, + { // Entry 365 + 0x1.d1746ap4, + 0x1.d1746ap-2, + (int)6 + }, + { // Entry 366 + 0x1.d1746ap5, + 0x1.d1746ap-2, + (int)7 + }, + { // Entry 367 + 0x1.d1746ap6, + 0x1.d1746ap-2, + (int)8 + }, + { // Entry 368 + 0x1.d1746ap7, + 0x1.d1746ap-2, + (int)9 + }, + { // Entry 369 + 0x1.d1746ap8, + 0x1.d1746ap-2, + (int)10 + }, + { // Entry 370 + 0x1.1745d8p-11, + 0x1.1745d8p-1, + (int)-10 + }, + { // Entry 371 + 0x1.1745d8p-10, + 0x1.1745d8p-1, + (int)-9 + }, + { // Entry 372 + 0x1.1745d8p-9, + 0x1.1745d8p-1, + (int)-8 + }, + { // Entry 373 + 0x1.1745d8p-8, + 0x1.1745d8p-1, + (int)-7 + }, + { // Entry 374 + 0x1.1745d8p-7, + 0x1.1745d8p-1, + (int)-6 + }, + { // Entry 375 + 0x1.1745d8p-6, + 0x1.1745d8p-1, + (int)-5 + }, + { // Entry 376 + 0x1.1745d8p-5, + 0x1.1745d8p-1, + (int)-4 + }, + { // Entry 377 + 0x1.1745d8p-4, + 0x1.1745d8p-1, + (int)-3 + }, + { // Entry 378 + 0x1.1745d8p-3, + 0x1.1745d8p-1, + (int)-2 + }, + { // Entry 379 + 0x1.1745d8p-2, + 0x1.1745d8p-1, + (int)-1 + }, + { // Entry 380 + 0x1.1745d8p-1, + 0x1.1745d8p-1, + (int)0 + }, + { // Entry 381 + 0x1.1745d8p0, + 0x1.1745d8p-1, + (int)1 + }, + { // Entry 382 + 0x1.1745d8p1, + 0x1.1745d8p-1, + (int)2 + }, + { // Entry 383 + 0x1.1745d8p2, + 0x1.1745d8p-1, + (int)3 + }, + { // Entry 384 + 0x1.1745d8p3, + 0x1.1745d8p-1, + (int)4 + }, + { // Entry 385 + 0x1.1745d8p4, + 0x1.1745d8p-1, + (int)5 + }, + { // Entry 386 + 0x1.1745d8p5, + 0x1.1745d8p-1, + (int)6 + }, + { // Entry 387 + 0x1.1745d8p6, + 0x1.1745d8p-1, + (int)7 + }, + { // Entry 388 + 0x1.1745d8p7, + 0x1.1745d8p-1, + (int)8 + }, + { // Entry 389 + 0x1.1745d8p8, + 0x1.1745d8p-1, + (int)9 + }, + { // Entry 390 + 0x1.1745d8p9, + 0x1.1745d8p-1, + (int)10 + }, + { // Entry 391 + 0x1.45d17cp-11, + 0x1.45d17cp-1, + (int)-10 + }, + { // Entry 392 + 0x1.45d17cp-10, + 0x1.45d17cp-1, + (int)-9 + }, + { // Entry 393 + 0x1.45d17cp-9, + 0x1.45d17cp-1, + (int)-8 + }, + { // Entry 394 + 0x1.45d17cp-8, + 0x1.45d17cp-1, + (int)-7 + }, + { // Entry 395 + 0x1.45d17cp-7, + 0x1.45d17cp-1, + (int)-6 + }, + { // Entry 396 + 0x1.45d17cp-6, + 0x1.45d17cp-1, + (int)-5 + }, + { // Entry 397 + 0x1.45d17cp-5, + 0x1.45d17cp-1, + (int)-4 + }, + { // Entry 398 + 0x1.45d17cp-4, + 0x1.45d17cp-1, + (int)-3 + }, + { // Entry 399 + 0x1.45d17cp-3, + 0x1.45d17cp-1, + (int)-2 + }, + { // Entry 400 + 0x1.45d17cp-2, + 0x1.45d17cp-1, + (int)-1 + }, + { // Entry 401 + 0x1.45d17cp-1, + 0x1.45d17cp-1, + (int)0 + }, + { // Entry 402 + 0x1.45d17cp0, + 0x1.45d17cp-1, + (int)1 + }, + { // Entry 403 + 0x1.45d17cp1, + 0x1.45d17cp-1, + (int)2 + }, + { // Entry 404 + 0x1.45d17cp2, + 0x1.45d17cp-1, + (int)3 + }, + { // Entry 405 + 0x1.45d17cp3, + 0x1.45d17cp-1, + (int)4 + }, + { // Entry 406 + 0x1.45d17cp4, + 0x1.45d17cp-1, + (int)5 + }, + { // Entry 407 + 0x1.45d17cp5, + 0x1.45d17cp-1, + (int)6 + }, + { // Entry 408 + 0x1.45d17cp6, + 0x1.45d17cp-1, + (int)7 + }, + { // Entry 409 + 0x1.45d17cp7, + 0x1.45d17cp-1, + (int)8 + }, + { // Entry 410 + 0x1.45d17cp8, + 0x1.45d17cp-1, + (int)9 + }, + { // Entry 411 + 0x1.45d17cp9, + 0x1.45d17cp-1, + (int)10 + }, + { // Entry 412 + 0x1.745d20p-11, + 0x1.745d20p-1, + (int)-10 + }, + { // Entry 413 + 0x1.745d20p-10, + 0x1.745d20p-1, + (int)-9 + }, + { // Entry 414 + 0x1.745d20p-9, + 0x1.745d20p-1, + (int)-8 + }, + { // Entry 415 + 0x1.745d20p-8, + 0x1.745d20p-1, + (int)-7 + }, + { // Entry 416 + 0x1.745d20p-7, + 0x1.745d20p-1, + (int)-6 + }, + { // Entry 417 + 0x1.745d20p-6, + 0x1.745d20p-1, + (int)-5 + }, + { // Entry 418 + 0x1.745d20p-5, + 0x1.745d20p-1, + (int)-4 + }, + { // Entry 419 + 0x1.745d20p-4, + 0x1.745d20p-1, + (int)-3 + }, + { // Entry 420 + 0x1.745d20p-3, + 0x1.745d20p-1, + (int)-2 + }, + { // Entry 421 + 0x1.745d20p-2, + 0x1.745d20p-1, + (int)-1 + }, + { // Entry 422 + 0x1.745d20p-1, + 0x1.745d20p-1, + (int)0 + }, + { // Entry 423 + 0x1.745d20p0, + 0x1.745d20p-1, + (int)1 + }, + { // Entry 424 + 0x1.745d20p1, + 0x1.745d20p-1, + (int)2 + }, + { // Entry 425 + 0x1.745d20p2, + 0x1.745d20p-1, + (int)3 + }, + { // Entry 426 + 0x1.745d20p3, + 0x1.745d20p-1, + (int)4 + }, + { // Entry 427 + 0x1.745d20p4, + 0x1.745d20p-1, + (int)5 + }, + { // Entry 428 + 0x1.745d20p5, + 0x1.745d20p-1, + (int)6 + }, + { // Entry 429 + 0x1.745d20p6, + 0x1.745d20p-1, + (int)7 + }, + { // Entry 430 + 0x1.745d20p7, + 0x1.745d20p-1, + (int)8 + }, + { // Entry 431 + 0x1.745d20p8, + 0x1.745d20p-1, + (int)9 + }, + { // Entry 432 + 0x1.745d20p9, + 0x1.745d20p-1, + (int)10 + }, + { // Entry 433 + 0x1.a2e8c4p-11, + 0x1.a2e8c4p-1, + (int)-10 + }, + { // Entry 434 + 0x1.a2e8c4p-10, + 0x1.a2e8c4p-1, + (int)-9 + }, + { // Entry 435 + 0x1.a2e8c4p-9, + 0x1.a2e8c4p-1, + (int)-8 + }, + { // Entry 436 + 0x1.a2e8c4p-8, + 0x1.a2e8c4p-1, + (int)-7 + }, + { // Entry 437 + 0x1.a2e8c4p-7, + 0x1.a2e8c4p-1, + (int)-6 + }, + { // Entry 438 + 0x1.a2e8c4p-6, + 0x1.a2e8c4p-1, + (int)-5 + }, + { // Entry 439 + 0x1.a2e8c4p-5, + 0x1.a2e8c4p-1, + (int)-4 + }, + { // Entry 440 + 0x1.a2e8c4p-4, + 0x1.a2e8c4p-1, + (int)-3 + }, + { // Entry 441 + 0x1.a2e8c4p-3, + 0x1.a2e8c4p-1, + (int)-2 + }, + { // Entry 442 + 0x1.a2e8c4p-2, + 0x1.a2e8c4p-1, + (int)-1 + }, + { // Entry 443 + 0x1.a2e8c4p-1, + 0x1.a2e8c4p-1, + (int)0 + }, + { // Entry 444 + 0x1.a2e8c4p0, + 0x1.a2e8c4p-1, + (int)1 + }, + { // Entry 445 + 0x1.a2e8c4p1, + 0x1.a2e8c4p-1, + (int)2 + }, + { // Entry 446 + 0x1.a2e8c4p2, + 0x1.a2e8c4p-1, + (int)3 + }, + { // Entry 447 + 0x1.a2e8c4p3, + 0x1.a2e8c4p-1, + (int)4 + }, + { // Entry 448 + 0x1.a2e8c4p4, + 0x1.a2e8c4p-1, + (int)5 + }, + { // Entry 449 + 0x1.a2e8c4p5, + 0x1.a2e8c4p-1, + (int)6 + }, + { // Entry 450 + 0x1.a2e8c4p6, + 0x1.a2e8c4p-1, + (int)7 + }, + { // Entry 451 + 0x1.a2e8c4p7, + 0x1.a2e8c4p-1, + (int)8 + }, + { // Entry 452 + 0x1.a2e8c4p8, + 0x1.a2e8c4p-1, + (int)9 + }, + { // Entry 453 + 0x1.a2e8c4p9, + 0x1.a2e8c4p-1, + (int)10 + }, + { // Entry 454 + 0x1.d17468p-11, + 0x1.d17468p-1, + (int)-10 + }, + { // Entry 455 + 0x1.d17468p-10, + 0x1.d17468p-1, + (int)-9 + }, + { // Entry 456 + 0x1.d17468p-9, + 0x1.d17468p-1, + (int)-8 + }, + { // Entry 457 + 0x1.d17468p-8, + 0x1.d17468p-1, + (int)-7 + }, + { // Entry 458 + 0x1.d17468p-7, + 0x1.d17468p-1, + (int)-6 + }, + { // Entry 459 + 0x1.d17468p-6, + 0x1.d17468p-1, + (int)-5 + }, + { // Entry 460 + 0x1.d17468p-5, + 0x1.d17468p-1, + (int)-4 + }, + { // Entry 461 + 0x1.d17468p-4, + 0x1.d17468p-1, + (int)-3 + }, + { // Entry 462 + 0x1.d17468p-3, + 0x1.d17468p-1, + (int)-2 + }, + { // Entry 463 + 0x1.d17468p-2, + 0x1.d17468p-1, + (int)-1 + }, + { // Entry 464 + 0x1.d17468p-1, + 0x1.d17468p-1, + (int)0 + }, + { // Entry 465 + 0x1.d17468p0, + 0x1.d17468p-1, + (int)1 + }, + { // Entry 466 + 0x1.d17468p1, + 0x1.d17468p-1, + (int)2 + }, + { // Entry 467 + 0x1.d17468p2, + 0x1.d17468p-1, + (int)3 + }, + { // Entry 468 + 0x1.d17468p3, + 0x1.d17468p-1, + (int)4 + }, + { // Entry 469 + 0x1.d17468p4, + 0x1.d17468p-1, + (int)5 + }, + { // Entry 470 + 0x1.d17468p5, + 0x1.d17468p-1, + (int)6 + }, + { // Entry 471 + 0x1.d17468p6, + 0x1.d17468p-1, + (int)7 + }, + { // Entry 472 + 0x1.d17468p7, + 0x1.d17468p-1, + (int)8 + }, + { // Entry 473 + 0x1.d17468p8, + 0x1.d17468p-1, + (int)9 + }, + { // Entry 474 + 0x1.d17468p9, + 0x1.d17468p-1, + (int)10 + }, + { // Entry 475 + 0x1.p-10, + 0x1.p0, + (int)-10 + }, + { // Entry 476 + 0x1.p-9, + 0x1.p0, + (int)-9 + }, + { // Entry 477 + 0x1.p-8, + 0x1.p0, + (int)-8 + }, + { // Entry 478 + 0x1.p-7, + 0x1.p0, + (int)-7 + }, + { // Entry 479 + 0x1.p-6, + 0x1.p0, + (int)-6 + }, + { // Entry 480 + 0x1.p-5, + 0x1.p0, + (int)-5 + }, + { // Entry 481 + 0x1.p-4, + 0x1.p0, + (int)-4 + }, + { // Entry 482 + 0x1.p-3, + 0x1.p0, + (int)-3 + }, + { // Entry 483 + 0x1.p-2, + 0x1.p0, + (int)-2 + }, + { // Entry 484 + 0x1.p-1, + 0x1.p0, + (int)-1 + }, + { // Entry 485 + 0x1.p0, + 0x1.p0, + (int)0 + }, + { // Entry 486 + 0x1.p1, + 0x1.p0, + (int)1 + }, + { // Entry 487 + 0x1.p2, + 0x1.p0, + (int)2 + }, + { // Entry 488 + 0x1.p3, + 0x1.p0, + (int)3 + }, + { // Entry 489 + 0x1.p4, + 0x1.p0, + (int)4 + }, + { // Entry 490 + 0x1.p5, + 0x1.p0, + (int)5 + }, + { // Entry 491 + 0x1.p6, + 0x1.p0, + (int)6 + }, + { // Entry 492 + 0x1.p7, + 0x1.p0, + (int)7 + }, + { // Entry 493 + 0x1.p8, + 0x1.p0, + (int)8 + }, + { // Entry 494 + 0x1.p9, + 0x1.p0, + (int)9 + }, + { // Entry 495 + 0x1.p10, + 0x1.p0, + (int)10 + }, + { // Entry 496 + 0x1.fffffep0, + 0x1.fffffep127, + (int)-127 + }, + { // Entry 497 + 0x1.fffffep1, + 0x1.fffffep127, + (int)-126 + }, + { // Entry 498 + 0x1.fffffep117, + 0x1.fffffep127, + (int)-10 + }, + { // Entry 499 + 0x1.fffffep118, + 0x1.fffffep127, + (int)-9 + }, + { // Entry 500 + 0x1.fffffep119, + 0x1.fffffep127, + (int)-8 + }, + { // Entry 501 + 0x1.fffffep120, + 0x1.fffffep127, + (int)-7 + }, + { // Entry 502 + 0x1.fffffep121, + 0x1.fffffep127, + (int)-6 + }, + { // Entry 503 + 0x1.fffffep122, + 0x1.fffffep127, + (int)-5 + }, + { // Entry 504 + 0x1.fffffep123, + 0x1.fffffep127, + (int)-4 + }, + { // Entry 505 + 0x1.fffffep124, + 0x1.fffffep127, + (int)-3 + }, + { // Entry 506 + 0x1.fffffep125, + 0x1.fffffep127, + (int)-2 + }, + { // Entry 507 + 0x1.fffffep126, + 0x1.fffffep127, + (int)-1 + }, + { // Entry 508 + 0x1.fffffep127, + 0x1.fffffep127, + (int)0 + }, + { // Entry 509 + 0x1.p-22, + 0x1.p-149, + (int)127 + }, + { // Entry 510 + 0x1.p-23, + 0x1.p-149, + (int)126 + }, + { // Entry 511 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 512 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 513 + 0x1.p-147, + 0x1.p-149, + (int)2 + }, + { // Entry 514 + 0x1.p-146, + 0x1.p-149, + (int)3 + }, + { // Entry 515 + 0x1.p-145, + 0x1.p-149, + (int)4 + }, + { // Entry 516 + 0x1.p-144, + 0x1.p-149, + (int)5 + }, + { // Entry 517 + 0x1.p-143, + 0x1.p-149, + (int)6 + }, + { // Entry 518 + 0x1.p-142, + 0x1.p-149, + (int)7 + }, + { // Entry 519 + 0x1.p-141, + 0x1.p-149, + (int)8 + }, + { // Entry 520 + 0x1.p-140, + 0x1.p-149, + (int)9 + }, + { // Entry 521 + 0x1.p-139, + 0x1.p-149, + (int)10 + }, + { // Entry 522 + 0x1.p-129, + 0x1.p-2, + (int)-127 + }, + { // Entry 523 + 0x1.p-128, + 0x1.p-2, + (int)-126 + }, + { // Entry 524 + 0x1.p-128, + 0x1.p-1, + (int)-127 + }, + { // Entry 525 + 0x1.p-127, + 0x1.p-1, + (int)-126 + }, + { // Entry 526 + 0x1.80p-128, + 0x1.80p-1, + (int)-127 + }, + { // Entry 527 + 0x1.80p-127, + 0x1.80p-1, + (int)-126 + }, + { // Entry 528 + 0.0f, + 0x1.p-2, + (int)-149 + }, + { // Entry 529 + 0.0f, + 0x1.p-2, + (int)-148 + }, + { // Entry 530 + 0.0f, + 0x1.p-1, + (int)-149 + }, + { // Entry 531 + 0x1.p-149, + 0x1.p-1, + (int)-148 + }, + { // Entry 532 + 0.0f, + 0x1.80p-1, + (int)-149 + }, + { // Entry 533 + 0x1.80p-149, + 0x1.80p-1, + (int)-148 + }, + { // Entry 534 + 0x1.p127, + 0x1.p0, + (int)127 + }, + { // Entry 535 + 0x1.p126, + 0x1.p0, + (int)126 + }, + { // Entry 536 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 537 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 538 + 0x1.p-147, + 0x1.p-149, + (int)2 + }, + { // Entry 539 + 0x1.p-146, + 0x1.p-149, + (int)3 + }, + { // Entry 540 + 0x1.p-145, + 0x1.p-149, + (int)4 + }, + { // Entry 541 + 0x1.p-144, + 0x1.p-149, + (int)5 + }, + { // Entry 542 + 0x1.p-143, + 0x1.p-149, + (int)6 + }, + { // Entry 543 + 0x1.p-142, + 0x1.p-149, + (int)7 + }, + { // Entry 544 + 0x1.p-141, + 0x1.p-149, + (int)8 + }, + { // Entry 545 + 0x1.p-140, + 0x1.p-149, + (int)9 + }, + { // Entry 546 + 0x1.p-139, + 0x1.p-149, + (int)10 + }, + { // Entry 547 + 0x1.p-138, + 0x1.p-149, + (int)11 + }, + { // Entry 548 + 0x1.p-137, + 0x1.p-149, + (int)12 + }, + { // Entry 549 + 0x1.p-136, + 0x1.p-149, + (int)13 + }, + { // Entry 550 + 0x1.p-135, + 0x1.p-149, + (int)14 + }, + { // Entry 551 + 0x1.p-134, + 0x1.p-149, + (int)15 + }, + { // Entry 552 + 0x1.p-133, + 0x1.p-149, + (int)16 + }, + { // Entry 553 + 0x1.p-132, + 0x1.p-149, + (int)17 + }, + { // Entry 554 + 0x1.p-131, + 0x1.p-149, + (int)18 + }, + { // Entry 555 + 0x1.p-130, + 0x1.p-149, + (int)19 + }, + { // Entry 556 + 0x1.p-129, + 0x1.p-149, + (int)20 + }, + { // Entry 557 + 0x1.p-128, + 0x1.p-149, + (int)21 + }, + { // Entry 558 + 0x1.p-127, + 0x1.p-149, + (int)22 + }, + { // Entry 559 + 0x1.p-126, + 0x1.p-149, + (int)23 + }, + { // Entry 560 + 0x1.p-125, + 0x1.p-149, + (int)24 + }, + { // Entry 561 + 0x1.p-124, + 0x1.p-149, + (int)25 + }, + { // Entry 562 + 0x1.p-123, + 0x1.p-149, + (int)26 + }, + { // Entry 563 + 0x1.p-122, + 0x1.p-149, + (int)27 + }, + { // Entry 564 + 0x1.p-121, + 0x1.p-149, + (int)28 + }, + { // Entry 565 + 0x1.p-120, + 0x1.p-149, + (int)29 + }, + { // Entry 566 + 0x1.p-119, + 0x1.p-149, + (int)30 + }, + { // Entry 567 + 0x1.p-118, + 0x1.p-149, + (int)31 + }, + { // Entry 568 + 0x1.p-117, + 0x1.p-149, + (int)32 + }, + { // Entry 569 + 0x1.p-116, + 0x1.p-149, + (int)33 + }, + { // Entry 570 + 0x1.p-115, + 0x1.p-149, + (int)34 + }, + { // Entry 571 + 0x1.p-114, + 0x1.p-149, + (int)35 + }, + { // Entry 572 + 0x1.p-113, + 0x1.p-149, + (int)36 + }, + { // Entry 573 + 0x1.p-112, + 0x1.p-149, + (int)37 + }, + { // Entry 574 + 0x1.p-111, + 0x1.p-149, + (int)38 + }, + { // Entry 575 + 0x1.p-110, + 0x1.p-149, + (int)39 + }, + { // Entry 576 + 0x1.p-109, + 0x1.p-149, + (int)40 + }, + { // Entry 577 + 0x1.p-108, + 0x1.p-149, + (int)41 + }, + { // Entry 578 + 0x1.p-107, + 0x1.p-149, + (int)42 + }, + { // Entry 579 + 0x1.p-106, + 0x1.p-149, + (int)43 + }, + { // Entry 580 + 0x1.p-105, + 0x1.p-149, + (int)44 + }, + { // Entry 581 + 0x1.p-104, + 0x1.p-149, + (int)45 + }, + { // Entry 582 + 0x1.p-103, + 0x1.p-149, + (int)46 + }, + { // Entry 583 + 0x1.p-102, + 0x1.p-149, + (int)47 + }, + { // Entry 584 + 0x1.p-101, + 0x1.p-149, + (int)48 + }, + { // Entry 585 + 0x1.p-100, + 0x1.p-149, + (int)49 + }, + { // Entry 586 + 0x1.p-99, + 0x1.p-149, + (int)50 + }, + { // Entry 587 + 0x1.p-98, + 0x1.p-149, + (int)51 + }, + { // Entry 588 + 0x1.p-97, + 0x1.p-149, + (int)52 + }, + { // Entry 589 + 0x1.p-96, + 0x1.p-149, + (int)53 + }, + { // Entry 590 + 0x1.p-95, + 0x1.p-149, + (int)54 + }, + { // Entry 591 + 0x1.p-94, + 0x1.p-149, + (int)55 + }, + { // Entry 592 + 0x1.p-93, + 0x1.p-149, + (int)56 + }, + { // Entry 593 + 0x1.p-92, + 0x1.p-149, + (int)57 + }, + { // Entry 594 + 0x1.p-91, + 0x1.p-149, + (int)58 + }, + { // Entry 595 + 0x1.p-90, + 0x1.p-149, + (int)59 + }, + { // Entry 596 + 0x1.p-89, + 0x1.p-149, + (int)60 + }, + { // Entry 597 + 0x1.p-88, + 0x1.p-149, + (int)61 + }, + { // Entry 598 + 0x1.p-87, + 0x1.p-149, + (int)62 + }, + { // Entry 599 + 0x1.p-86, + 0x1.p-149, + (int)63 + }, + { // Entry 600 + 0x1.p-85, + 0x1.p-149, + (int)64 + }, + { // Entry 601 + 0x1.p-84, + 0x1.p-149, + (int)65 + }, + { // Entry 602 + 0x1.p-83, + 0x1.p-149, + (int)66 + }, + { // Entry 603 + 0x1.p-82, + 0x1.p-149, + (int)67 + }, + { // Entry 604 + 0x1.p-81, + 0x1.p-149, + (int)68 + }, + { // Entry 605 + 0x1.p-80, + 0x1.p-149, + (int)69 + }, + { // Entry 606 + 0x1.p-79, + 0x1.p-149, + (int)70 + }, + { // Entry 607 + 0x1.p-78, + 0x1.p-149, + (int)71 + }, + { // Entry 608 + 0x1.p-77, + 0x1.p-149, + (int)72 + }, + { // Entry 609 + 0x1.p-76, + 0x1.p-149, + (int)73 + }, + { // Entry 610 + 0x1.p-75, + 0x1.p-149, + (int)74 + }, + { // Entry 611 + 0x1.p-74, + 0x1.p-149, + (int)75 + }, + { // Entry 612 + 0x1.p-73, + 0x1.p-149, + (int)76 + }, + { // Entry 613 + 0x1.p-72, + 0x1.p-149, + (int)77 + }, + { // Entry 614 + 0x1.p-71, + 0x1.p-149, + (int)78 + }, + { // Entry 615 + 0x1.p-70, + 0x1.p-149, + (int)79 + }, + { // Entry 616 + 0x1.p-69, + 0x1.p-149, + (int)80 + }, + { // Entry 617 + 0x1.p-68, + 0x1.p-149, + (int)81 + }, + { // Entry 618 + 0x1.p-67, + 0x1.p-149, + (int)82 + }, + { // Entry 619 + 0x1.p-66, + 0x1.p-149, + (int)83 + }, + { // Entry 620 + 0x1.p-65, + 0x1.p-149, + (int)84 + }, + { // Entry 621 + 0x1.p-64, + 0x1.p-149, + (int)85 + }, + { // Entry 622 + 0x1.p-63, + 0x1.p-149, + (int)86 + }, + { // Entry 623 + 0x1.p-62, + 0x1.p-149, + (int)87 + }, + { // Entry 624 + 0x1.p-61, + 0x1.p-149, + (int)88 + }, + { // Entry 625 + 0x1.p-60, + 0x1.p-149, + (int)89 + }, + { // Entry 626 + 0x1.p-59, + 0x1.p-149, + (int)90 + }, + { // Entry 627 + 0x1.p-58, + 0x1.p-149, + (int)91 + }, + { // Entry 628 + 0x1.p-57, + 0x1.p-149, + (int)92 + }, + { // Entry 629 + 0x1.p-56, + 0x1.p-149, + (int)93 + }, + { // Entry 630 + 0x1.p-55, + 0x1.p-149, + (int)94 + }, + { // Entry 631 + 0x1.p-54, + 0x1.p-149, + (int)95 + }, + { // Entry 632 + 0x1.p-53, + 0x1.p-149, + (int)96 + }, + { // Entry 633 + 0x1.p-52, + 0x1.p-149, + (int)97 + }, + { // Entry 634 + 0x1.p-51, + 0x1.p-149, + (int)98 + }, + { // Entry 635 + 0x1.p-50, + 0x1.p-149, + (int)99 + }, + { // Entry 636 + 0x1.p-49, + 0x1.p-149, + (int)100 + }, + { // Entry 637 + 0x1.p-48, + 0x1.p-149, + (int)101 + }, + { // Entry 638 + 0x1.p-47, + 0x1.p-149, + (int)102 + }, + { // Entry 639 + 0x1.p-46, + 0x1.p-149, + (int)103 + }, + { // Entry 640 + 0x1.p-45, + 0x1.p-149, + (int)104 + }, + { // Entry 641 + 0x1.p-44, + 0x1.p-149, + (int)105 + }, + { // Entry 642 + 0x1.p-43, + 0x1.p-149, + (int)106 + }, + { // Entry 643 + 0x1.p-42, + 0x1.p-149, + (int)107 + }, + { // Entry 644 + 0x1.p-41, + 0x1.p-149, + (int)108 + }, + { // Entry 645 + 0x1.p-40, + 0x1.p-149, + (int)109 + }, + { // Entry 646 + 0x1.p-39, + 0x1.p-149, + (int)110 + }, + { // Entry 647 + 0x1.p-38, + 0x1.p-149, + (int)111 + }, + { // Entry 648 + 0x1.p-37, + 0x1.p-149, + (int)112 + }, + { // Entry 649 + 0x1.p-36, + 0x1.p-149, + (int)113 + }, + { // Entry 650 + 0x1.p-35, + 0x1.p-149, + (int)114 + }, + { // Entry 651 + 0x1.p-34, + 0x1.p-149, + (int)115 + }, + { // Entry 652 + 0x1.p-33, + 0x1.p-149, + (int)116 + }, + { // Entry 653 + 0x1.p-32, + 0x1.p-149, + (int)117 + }, + { // Entry 654 + 0x1.p-31, + 0x1.p-149, + (int)118 + }, + { // Entry 655 + 0x1.p-30, + 0x1.p-149, + (int)119 + }, + { // Entry 656 + 0x1.p-29, + 0x1.p-149, + (int)120 + }, + { // Entry 657 + 0x1.p-28, + 0x1.p-149, + (int)121 + }, + { // Entry 658 + 0x1.p-27, + 0x1.p-149, + (int)122 + }, + { // Entry 659 + 0x1.p-26, + 0x1.p-149, + (int)123 + }, + { // Entry 660 + 0x1.p-25, + 0x1.p-149, + (int)124 + }, + { // Entry 661 + 0x1.p-24, + 0x1.p-149, + (int)125 + }, + { // Entry 662 + 0x1.p-23, + 0x1.p-149, + (int)126 + }, + { // Entry 663 + 0x1.p-22, + 0x1.p-149, + (int)127 + }, + { // Entry 664 + 0x1.p-21, + 0x1.p-149, + (int)128 + }, + { // Entry 665 + 0x1.p-20, + 0x1.p-149, + (int)129 + }, + { // Entry 666 + 0x1.p-19, + 0x1.p-149, + (int)130 + }, + { // Entry 667 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 668 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + (int)1 + }, + { // Entry 669 + 0x1.fffffcp-125, + 0x1.fffffcp-127, + (int)2 + }, + { // Entry 670 + 0x1.fffffcp-124, + 0x1.fffffcp-127, + (int)3 + }, + { // Entry 671 + 0x1.fffffcp-123, + 0x1.fffffcp-127, + (int)4 + }, + { // Entry 672 + 0x1.fffffcp-122, + 0x1.fffffcp-127, + (int)5 + }, + { // Entry 673 + 0x1.fffffcp-121, + 0x1.fffffcp-127, + (int)6 + }, + { // Entry 674 + 0x1.fffffcp-120, + 0x1.fffffcp-127, + (int)7 + }, + { // Entry 675 + 0x1.fffffcp-119, + 0x1.fffffcp-127, + (int)8 + }, + { // Entry 676 + 0x1.fffffcp-118, + 0x1.fffffcp-127, + (int)9 + }, + { // Entry 677 + 0x1.fffffcp-117, + 0x1.fffffcp-127, + (int)10 + }, + { // Entry 678 + 0x1.fffffcp-116, + 0x1.fffffcp-127, + (int)11 + }, + { // Entry 679 + 0x1.fffffcp-115, + 0x1.fffffcp-127, + (int)12 + }, + { // Entry 680 + 0x1.fffffcp-114, + 0x1.fffffcp-127, + (int)13 + }, + { // Entry 681 + 0x1.fffffcp-113, + 0x1.fffffcp-127, + (int)14 + }, + { // Entry 682 + 0x1.fffffcp-112, + 0x1.fffffcp-127, + (int)15 + }, + { // Entry 683 + 0x1.fffffcp-111, + 0x1.fffffcp-127, + (int)16 + }, + { // Entry 684 + 0x1.fffffcp-110, + 0x1.fffffcp-127, + (int)17 + }, + { // Entry 685 + 0x1.fffffcp-109, + 0x1.fffffcp-127, + (int)18 + }, + { // Entry 686 + 0x1.fffffcp-108, + 0x1.fffffcp-127, + (int)19 + }, + { // Entry 687 + 0x1.fffffcp-107, + 0x1.fffffcp-127, + (int)20 + }, + { // Entry 688 + 0x1.fffffcp-106, + 0x1.fffffcp-127, + (int)21 + }, + { // Entry 689 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + (int)22 + }, + { // Entry 690 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + (int)23 + }, + { // Entry 691 + 0x1.fffffcp-103, + 0x1.fffffcp-127, + (int)24 + }, + { // Entry 692 + 0x1.fffffcp-102, + 0x1.fffffcp-127, + (int)25 + }, + { // Entry 693 + 0x1.fffffcp-101, + 0x1.fffffcp-127, + (int)26 + }, + { // Entry 694 + 0x1.fffffcp-100, + 0x1.fffffcp-127, + (int)27 + }, + { // Entry 695 + 0x1.fffffcp-99, + 0x1.fffffcp-127, + (int)28 + }, + { // Entry 696 + 0x1.fffffcp-98, + 0x1.fffffcp-127, + (int)29 + }, + { // Entry 697 + 0x1.fffffcp-97, + 0x1.fffffcp-127, + (int)30 + }, + { // Entry 698 + 0x1.fffffcp-96, + 0x1.fffffcp-127, + (int)31 + }, + { // Entry 699 + 0x1.fffffcp-95, + 0x1.fffffcp-127, + (int)32 + }, + { // Entry 700 + 0x1.fffffcp-94, + 0x1.fffffcp-127, + (int)33 + }, + { // Entry 701 + 0x1.fffffcp-93, + 0x1.fffffcp-127, + (int)34 + }, + { // Entry 702 + 0x1.fffffcp-92, + 0x1.fffffcp-127, + (int)35 + }, + { // Entry 703 + 0x1.fffffcp-91, + 0x1.fffffcp-127, + (int)36 + }, + { // Entry 704 + 0x1.fffffcp-90, + 0x1.fffffcp-127, + (int)37 + }, + { // Entry 705 + 0x1.fffffcp-89, + 0x1.fffffcp-127, + (int)38 + }, + { // Entry 706 + 0x1.fffffcp-88, + 0x1.fffffcp-127, + (int)39 + }, + { // Entry 707 + 0x1.fffffcp-87, + 0x1.fffffcp-127, + (int)40 + }, + { // Entry 708 + 0x1.fffffcp-86, + 0x1.fffffcp-127, + (int)41 + }, + { // Entry 709 + 0x1.fffffcp-85, + 0x1.fffffcp-127, + (int)42 + }, + { // Entry 710 + 0x1.fffffcp-84, + 0x1.fffffcp-127, + (int)43 + }, + { // Entry 711 + 0x1.fffffcp-83, + 0x1.fffffcp-127, + (int)44 + }, + { // Entry 712 + 0x1.fffffcp-82, + 0x1.fffffcp-127, + (int)45 + }, + { // Entry 713 + 0x1.fffffcp-81, + 0x1.fffffcp-127, + (int)46 + }, + { // Entry 714 + 0x1.fffffcp-80, + 0x1.fffffcp-127, + (int)47 + }, + { // Entry 715 + 0x1.fffffcp-79, + 0x1.fffffcp-127, + (int)48 + }, + { // Entry 716 + 0x1.fffffcp-78, + 0x1.fffffcp-127, + (int)49 + }, + { // Entry 717 + 0x1.fffffcp-77, + 0x1.fffffcp-127, + (int)50 + }, + { // Entry 718 + 0x1.fffffcp-76, + 0x1.fffffcp-127, + (int)51 + }, + { // Entry 719 + 0x1.fffffcp-75, + 0x1.fffffcp-127, + (int)52 + }, + { // Entry 720 + 0x1.fffffcp-74, + 0x1.fffffcp-127, + (int)53 + }, + { // Entry 721 + 0x1.fffffcp-73, + 0x1.fffffcp-127, + (int)54 + }, + { // Entry 722 + 0x1.fffffcp-72, + 0x1.fffffcp-127, + (int)55 + }, + { // Entry 723 + 0x1.fffffcp-71, + 0x1.fffffcp-127, + (int)56 + }, + { // Entry 724 + 0x1.fffffcp-70, + 0x1.fffffcp-127, + (int)57 + }, + { // Entry 725 + 0x1.fffffcp-69, + 0x1.fffffcp-127, + (int)58 + }, + { // Entry 726 + 0x1.fffffcp-68, + 0x1.fffffcp-127, + (int)59 + }, + { // Entry 727 + 0x1.fffffcp-67, + 0x1.fffffcp-127, + (int)60 + }, + { // Entry 728 + 0x1.fffffcp-66, + 0x1.fffffcp-127, + (int)61 + }, + { // Entry 729 + 0x1.fffffcp-65, + 0x1.fffffcp-127, + (int)62 + }, + { // Entry 730 + 0x1.fffffcp-64, + 0x1.fffffcp-127, + (int)63 + }, + { // Entry 731 + 0x1.fffffcp-63, + 0x1.fffffcp-127, + (int)64 + }, + { // Entry 732 + 0x1.fffffcp-62, + 0x1.fffffcp-127, + (int)65 + }, + { // Entry 733 + 0x1.fffffcp-61, + 0x1.fffffcp-127, + (int)66 + }, + { // Entry 734 + 0x1.fffffcp-60, + 0x1.fffffcp-127, + (int)67 + }, + { // Entry 735 + 0x1.fffffcp-59, + 0x1.fffffcp-127, + (int)68 + }, + { // Entry 736 + 0x1.fffffcp-58, + 0x1.fffffcp-127, + (int)69 + }, + { // Entry 737 + 0x1.fffffcp-57, + 0x1.fffffcp-127, + (int)70 + }, + { // Entry 738 + 0x1.fffffcp-56, + 0x1.fffffcp-127, + (int)71 + }, + { // Entry 739 + 0x1.fffffcp-55, + 0x1.fffffcp-127, + (int)72 + }, + { // Entry 740 + 0x1.fffffcp-54, + 0x1.fffffcp-127, + (int)73 + }, + { // Entry 741 + 0x1.fffffcp-53, + 0x1.fffffcp-127, + (int)74 + }, + { // Entry 742 + 0x1.fffffcp-52, + 0x1.fffffcp-127, + (int)75 + }, + { // Entry 743 + 0x1.fffffcp-51, + 0x1.fffffcp-127, + (int)76 + }, + { // Entry 744 + 0x1.fffffcp-50, + 0x1.fffffcp-127, + (int)77 + }, + { // Entry 745 + 0x1.fffffcp-49, + 0x1.fffffcp-127, + (int)78 + }, + { // Entry 746 + 0x1.fffffcp-48, + 0x1.fffffcp-127, + (int)79 + }, + { // Entry 747 + 0x1.fffffcp-47, + 0x1.fffffcp-127, + (int)80 + }, + { // Entry 748 + 0x1.fffffcp-46, + 0x1.fffffcp-127, + (int)81 + }, + { // Entry 749 + 0x1.fffffcp-45, + 0x1.fffffcp-127, + (int)82 + }, + { // Entry 750 + 0x1.fffffcp-44, + 0x1.fffffcp-127, + (int)83 + }, + { // Entry 751 + 0x1.fffffcp-43, + 0x1.fffffcp-127, + (int)84 + }, + { // Entry 752 + 0x1.fffffcp-42, + 0x1.fffffcp-127, + (int)85 + }, + { // Entry 753 + 0x1.fffffcp-41, + 0x1.fffffcp-127, + (int)86 + }, + { // Entry 754 + 0x1.fffffcp-40, + 0x1.fffffcp-127, + (int)87 + }, + { // Entry 755 + 0x1.fffffcp-39, + 0x1.fffffcp-127, + (int)88 + }, + { // Entry 756 + 0x1.fffffcp-38, + 0x1.fffffcp-127, + (int)89 + }, + { // Entry 757 + 0x1.fffffcp-37, + 0x1.fffffcp-127, + (int)90 + }, + { // Entry 758 + 0x1.fffffcp-36, + 0x1.fffffcp-127, + (int)91 + }, + { // Entry 759 + 0x1.fffffcp-35, + 0x1.fffffcp-127, + (int)92 + }, + { // Entry 760 + 0x1.fffffcp-34, + 0x1.fffffcp-127, + (int)93 + }, + { // Entry 761 + 0x1.fffffcp-33, + 0x1.fffffcp-127, + (int)94 + }, + { // Entry 762 + 0x1.fffffcp-32, + 0x1.fffffcp-127, + (int)95 + }, + { // Entry 763 + 0x1.fffffcp-31, + 0x1.fffffcp-127, + (int)96 + }, + { // Entry 764 + 0x1.fffffcp-30, + 0x1.fffffcp-127, + (int)97 + }, + { // Entry 765 + 0x1.fffffcp-29, + 0x1.fffffcp-127, + (int)98 + }, + { // Entry 766 + 0x1.fffffcp-28, + 0x1.fffffcp-127, + (int)99 + }, + { // Entry 767 + 0x1.fffffcp-27, + 0x1.fffffcp-127, + (int)100 + }, + { // Entry 768 + 0x1.fffffcp-26, + 0x1.fffffcp-127, + (int)101 + }, + { // Entry 769 + 0x1.fffffcp-25, + 0x1.fffffcp-127, + (int)102 + }, + { // Entry 770 + 0x1.fffffcp-24, + 0x1.fffffcp-127, + (int)103 + }, + { // Entry 771 + 0x1.fffffcp-23, + 0x1.fffffcp-127, + (int)104 + }, + { // Entry 772 + 0x1.fffffcp-22, + 0x1.fffffcp-127, + (int)105 + }, + { // Entry 773 + 0x1.fffffcp-21, + 0x1.fffffcp-127, + (int)106 + }, + { // Entry 774 + 0x1.fffffcp-20, + 0x1.fffffcp-127, + (int)107 + }, + { // Entry 775 + 0x1.fffffcp-19, + 0x1.fffffcp-127, + (int)108 + }, + { // Entry 776 + 0x1.fffffcp-18, + 0x1.fffffcp-127, + (int)109 + }, + { // Entry 777 + 0x1.fffffcp-17, + 0x1.fffffcp-127, + (int)110 + }, + { // Entry 778 + 0x1.fffffcp-16, + 0x1.fffffcp-127, + (int)111 + }, + { // Entry 779 + 0x1.fffffcp-15, + 0x1.fffffcp-127, + (int)112 + }, + { // Entry 780 + 0x1.fffffcp-14, + 0x1.fffffcp-127, + (int)113 + }, + { // Entry 781 + 0x1.fffffcp-13, + 0x1.fffffcp-127, + (int)114 + }, + { // Entry 782 + 0x1.fffffcp-12, + 0x1.fffffcp-127, + (int)115 + }, + { // Entry 783 + 0x1.fffffcp-11, + 0x1.fffffcp-127, + (int)116 + }, + { // Entry 784 + 0x1.fffffcp-10, + 0x1.fffffcp-127, + (int)117 + }, + { // Entry 785 + 0x1.fffffcp-9, + 0x1.fffffcp-127, + (int)118 + }, + { // Entry 786 + 0x1.fffffcp-8, + 0x1.fffffcp-127, + (int)119 + }, + { // Entry 787 + 0x1.fffffcp-7, + 0x1.fffffcp-127, + (int)120 + }, + { // Entry 788 + 0x1.fffffcp-6, + 0x1.fffffcp-127, + (int)121 + }, + { // Entry 789 + 0x1.fffffcp-5, + 0x1.fffffcp-127, + (int)122 + }, + { // Entry 790 + 0x1.fffffcp-4, + 0x1.fffffcp-127, + (int)123 + }, + { // Entry 791 + 0x1.fffffcp-3, + 0x1.fffffcp-127, + (int)124 + }, + { // Entry 792 + 0x1.fffffcp-2, + 0x1.fffffcp-127, + (int)125 + }, + { // Entry 793 + 0x1.fffffcp-1, + 0x1.fffffcp-127, + (int)126 + }, + { // Entry 794 + 0x1.fffffcp0, + 0x1.fffffcp-127, + (int)127 + }, + { // Entry 795 + 0x1.fffffcp1, + 0x1.fffffcp-127, + (int)128 + }, + { // Entry 796 + 0x1.fffffcp2, + 0x1.fffffcp-127, + (int)129 + }, + { // Entry 797 + 0x1.fffffcp3, + 0x1.fffffcp-127, + (int)130 + }, + { // Entry 798 + 0x1.p0, + 0x1.p-149, + (int)149 + }, + { // Entry 799 + 0x1.p-1, + 0x1.p-149, + (int)148 + }, + { // Entry 800 + 0x1.fffffcp22, + 0x1.fffffcp-127, + (int)149 + }, + { // Entry 801 + 0x1.fffffcp21, + 0x1.fffffcp-127, + (int)148 + }, + { // Entry 802 + 0x1.p-126, + 0x1.p-149, + (int)23 + }, + { // Entry 803 + 0x1.p-127, + 0x1.p-149, + (int)22 + }, + { // Entry 804 + 0x1.fffffcp-104, + 0x1.fffffcp-127, + (int)23 + }, + { // Entry 805 + 0x1.fffffcp-105, + 0x1.fffffcp-127, + (int)22 + }, + { // Entry 806 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 807 + 0x1.p-148, + 0x1.p-149, + (int)1 + }, + { // Entry 808 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 809 + 0x1.fffffcp-126, + 0x1.fffffcp-127, + (int)1 + }, + { // Entry 810 + 0.0, + 0.0f, + (int)0 + }, + { // Entry 811 + -0.0, + -0.0f, + (int)0 + }, + { // Entry 812 + 0.0, + 0.0f, + (int)1 + }, + { // Entry 813 + -0.0, + -0.0f, + (int)1 + }, + { // Entry 814 + 0.0, + 0.0f, + (int)-1 + }, + { // Entry 815 + -0.0, + -0.0f, + (int)-1 + }, + { // Entry 816 + 0.0, + 0.0f, + (int)127 + }, + { // Entry 817 + -0.0, + -0.0f, + (int)127 + }, + { // Entry 818 + 0.0, + 0.0f, + (int)-127 + }, + { // Entry 819 + -0.0, + -0.0f, + (int)-127 + }, + { // Entry 820 + HUGE_VALF, + HUGE_VALF, + (int)0 + }, + { // Entry 821 + 0x1.fffffep127, + 0x1.fffffep127, + (int)0 + }, + { // Entry 822 + 0x1.p-126, + 0x1.p-126, + (int)0 + }, + { // Entry 823 + 0x1.fffffcp-127, + 0x1.fffffcp-127, + (int)0 + }, + { // Entry 824 + 0x1.p-149, + 0x1.p-149, + (int)0 + }, + { // Entry 825 + -0x1.p-149, + -0x1.p-149, + (int)0 + }, + { // Entry 826 + -0x1.fffffcp-127, + -0x1.fffffcp-127, + (int)0 + }, + { // Entry 827 + -0x1.p-126, + -0x1.p-126, + (int)0 + }, + { // Entry 828 + -0x1.fffffep127, + -0x1.fffffep127, + (int)0 + }, + { // Entry 829 + -HUGE_VALF, + -HUGE_VALF, + (int)0 + }, + { // Entry 830 + HUGE_VALF, + HUGE_VALF, + (int)1 + }, + { // Entry 831 + -HUGE_VALF, + -HUGE_VALF, + (int)1 + }, + { // Entry 832 + HUGE_VALF, + HUGE_VALF, + (int)-1 + }, + { // Entry 833 + -HUGE_VALF, + -HUGE_VALF, + (int)-1 + }, + { // Entry 834 + HUGE_VALF, + HUGE_VALF, + (int)127 + }, + { // Entry 835 + -HUGE_VALF, + -HUGE_VALF, + (int)127 + }, + { // Entry 836 + HUGE_VALF, + HUGE_VALF, + (int)-127 + }, + { // Entry 837 + -HUGE_VALF, + -HUGE_VALF, + (int)-127 + }, + { // Entry 838 + HUGE_VALF, + 0x1.fffffep127, + (int)1 + }, + { // Entry 839 + HUGE_VALF, + 0x1.fffffep127, + (int)127 + }, + { // Entry 840 + -HUGE_VALF, + -0x1.fffffep127, + (int)1 + }, + { // Entry 841 + -HUGE_VALF, + -0x1.fffffep127, + (int)127 + }, + { // Entry 842 + HUGE_VALF, + 0x1.p-126, + (int)40000 + }, + { // Entry 843 + HUGE_VALF, + 0x1.p-149, + (int)40000 + }, + { // Entry 844 + -HUGE_VALF, + -0x1.p-126, + (int)40000 + }, + { // Entry 845 + -HUGE_VALF, + -0x1.p-149, + (int)40000 + }, + { // Entry 846 + 0x1.p-127, + 0x1.p-126, + (int)-1 + }, + { // Entry 847 + 0x1.fffffcp-128, + 0x1.fffffcp-127, + (int)-1 + }, + { // Entry 848 + 0.0f, + 0x1.p-149, + (int)-1 + }, + { // Entry 849 + -0.0f, + -0x1.p-149, + (int)-1 + }, + { // Entry 850 + -0x1.fffffcp-128, + -0x1.fffffcp-127, + (int)-1 + }, + { // Entry 851 + -0x1.p-127, + -0x1.p-126, + (int)-1 + }, + { // Entry 852 + 0.0f, + 0x1.fffffep127, + (int)-40000 + }, + { // Entry 853 + -0.0f, + -0x1.fffffep127, + (int)-40000 + } +}; diff --git a/tests/math_data/significand_intel_data.h b/tests/math_data/significand_intel_data.h new file mode 100644 index 000000000..107627287 --- /dev/null +++ b/tests/math_data/significand_intel_data.h @@ -0,0 +1,638 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_significand_intel_data[] = { + { // Entry 0 + 0x1.p0, + 0x1.0p100 + }, + { // Entry 1 + 0x1.2aaaaaaaaaaab0p0, + 0x1.2aaaaaaaaaaabp100 + }, + { // Entry 2 + 0x1.55555555555560p0, + 0x1.5555555555556p100 + }, + { // Entry 3 + 0x1.80000000000010p0, + 0x1.8000000000001p100 + }, + { // Entry 4 + 0x1.aaaaaaaaaaaac0p0, + 0x1.aaaaaaaaaaaacp100 + }, + { // Entry 5 + 0x1.d5555555555570p0, + 0x1.d555555555557p100 + }, + { // Entry 6 + 0x1.p0, + 0x1.0p101 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p200 + }, + { // Entry 8 + 0x1.2aaaaaaaaaaab0p0, + 0x1.2aaaaaaaaaaabp200 + }, + { // Entry 9 + 0x1.55555555555560p0, + 0x1.5555555555556p200 + }, + { // Entry 10 + 0x1.80000000000010p0, + 0x1.8000000000001p200 + }, + { // Entry 11 + 0x1.aaaaaaaaaaaac0p0, + 0x1.aaaaaaaaaaaacp200 + }, + { // Entry 12 + 0x1.d5555555555570p0, + 0x1.d555555555557p200 + }, + { // Entry 13 + 0x1.p0, + 0x1.0p201 + }, + { // Entry 14 + 0x1.p0, + 0x1.0p1000 + }, + { // Entry 15 + 0x1.2aaaaaaaaaaab0p0, + 0x1.2aaaaaaaaaaabp1000 + }, + { // Entry 16 + 0x1.55555555555560p0, + 0x1.5555555555556p1000 + }, + { // Entry 17 + 0x1.80000000000010p0, + 0x1.8000000000001p1000 + }, + { // Entry 18 + 0x1.aaaaaaaaaaaac0p0, + 0x1.aaaaaaaaaaaacp1000 + }, + { // Entry 19 + 0x1.d5555555555570p0, + 0x1.d555555555557p1000 + }, + { // Entry 20 + 0x1.p0, + 0x1.0p1001 + }, + { // Entry 21 + -0x1.p0, + -0x1.0p101 + }, + { // Entry 22 + -0x1.d5555555555550p0, + -0x1.d555555555555p100 + }, + { // Entry 23 + -0x1.aaaaaaaaaaaaa0p0, + -0x1.aaaaaaaaaaaaap100 + }, + { // Entry 24 + -0x1.7ffffffffffff0p0, + -0x1.7ffffffffffffp100 + }, + { // Entry 25 + -0x1.55555555555540p0, + -0x1.5555555555554p100 + }, + { // Entry 26 + -0x1.2aaaaaaaaaaa90p0, + -0x1.2aaaaaaaaaaa9p100 + }, + { // Entry 27 + -0x1.p0, + -0x1.0p100 + }, + { // Entry 28 + -0x1.p0, + -0x1.0p201 + }, + { // Entry 29 + -0x1.d5555555555550p0, + -0x1.d555555555555p200 + }, + { // Entry 30 + -0x1.aaaaaaaaaaaaa0p0, + -0x1.aaaaaaaaaaaaap200 + }, + { // Entry 31 + -0x1.7ffffffffffff0p0, + -0x1.7ffffffffffffp200 + }, + { // Entry 32 + -0x1.55555555555540p0, + -0x1.5555555555554p200 + }, + { // Entry 33 + -0x1.2aaaaaaaaaaa90p0, + -0x1.2aaaaaaaaaaa9p200 + }, + { // Entry 34 + -0x1.p0, + -0x1.0p200 + }, + { // Entry 35 + -0x1.p0, + -0x1.0p1001 + }, + { // Entry 36 + -0x1.d5555555555550p0, + -0x1.d555555555555p1000 + }, + { // Entry 37 + -0x1.aaaaaaaaaaaaa0p0, + -0x1.aaaaaaaaaaaaap1000 + }, + { // Entry 38 + -0x1.7ffffffffffff0p0, + -0x1.7ffffffffffffp1000 + }, + { // Entry 39 + -0x1.55555555555540p0, + -0x1.5555555555554p1000 + }, + { // Entry 40 + -0x1.2aaaaaaaaaaa90p0, + -0x1.2aaaaaaaaaaa9p1000 + }, + { // Entry 41 + -0x1.p0, + -0x1.0p1000 + }, + { // Entry 42 + 0x1.p0, + 0x1.0p50 + }, + { // Entry 43 + 0x1.p0, + 0x1.0p51 + }, + { // Entry 44 + 0x1.p0, + 0x1.0p52 + }, + { // Entry 45 + 0x1.p0, + 0x1.0p53 + }, + { // Entry 46 + 0x1.p0, + 0x1.0p-1026 + }, + { // Entry 47 + 0x1.ae8ba2e8ba2e80p0, + 0x1.ae8ba2e8ba2e8p-1024 + }, + { // Entry 48 + 0x1.8e8ba2e8ba2e80p0, + 0x1.8e8ba2e8ba2e8p-1023 + }, + { // Entry 49 + 0x1.22e8ba2e8ba2e0p0, + 0x1.22e8ba2e8ba2ep-1022 + }, + { // Entry 50 + 0x1.7e8ba2e8ba2e80p0, + 0x1.7e8ba2e8ba2e8p-1022 + }, + { // Entry 51 + 0x1.da2e8ba2e8ba20p0, + 0x1.da2e8ba2e8ba2p-1022 + }, + { // Entry 52 + 0x1.1ae8ba2e8ba2e0p0, + 0x1.1ae8ba2e8ba2ep-1021 + }, + { // Entry 53 + 0x1.48ba2e8ba2e8b0p0, + 0x1.48ba2e8ba2e8bp-1021 + }, + { // Entry 54 + 0x1.768ba2e8ba2e80p0, + 0x1.768ba2e8ba2e8p-1021 + }, + { // Entry 55 + 0x1.a45d1745d17450p0, + 0x1.a45d1745d1745p-1021 + }, + { // Entry 56 + 0x1.d22e8ba2e8ba20p0, + 0x1.d22e8ba2e8ba2p-1021 + }, + { // Entry 57 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-1021 + }, + { // Entry 58 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp50 + }, + { // Entry 59 + 0x1.p0, + 0x1.0p51 + }, + { // Entry 60 + 0x1.00000000000010p0, + 0x1.0000000000001p51 + }, + { // Entry 61 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp51 + }, + { // Entry 62 + 0x1.p0, + 0x1.0p52 + }, + { // Entry 63 + 0x1.00000000000010p0, + 0x1.0000000000001p52 + }, + { // Entry 64 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp52 + }, + { // Entry 65 + 0x1.p0, + 0x1.0p53 + }, + { // Entry 66 + 0x1.00000000000010p0, + 0x1.0000000000001p53 + }, + { // Entry 67 + -0x1.00000000000010p0, + -0x1.0000000000001p51 + }, + { // Entry 68 + -0x1.p0, + -0x1.0p51 + }, + { // Entry 69 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp50 + }, + { // Entry 70 + -0x1.00000000000010p0, + -0x1.0000000000001p52 + }, + { // Entry 71 + -0x1.p0, + -0x1.0p52 + }, + { // Entry 72 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp51 + }, + { // Entry 73 + -0x1.00000000000010p0, + -0x1.0000000000001p53 + }, + { // Entry 74 + -0x1.p0, + -0x1.0p53 + }, + { // Entry 75 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp52 + }, + { // Entry 76 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 77 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 78 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-7 + }, + { // Entry 79 + 0x1.p0, + 0x1.0p-6 + }, + { // Entry 80 + 0x1.00000000000010p0, + 0x1.0000000000001p-6 + }, + { // Entry 81 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-6 + }, + { // Entry 82 + 0x1.p0, + 0x1.0p-5 + }, + { // Entry 83 + 0x1.00000000000010p0, + 0x1.0000000000001p-5 + }, + { // Entry 84 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-5 + }, + { // Entry 85 + 0x1.p0, + 0x1.0p-4 + }, + { // Entry 86 + 0x1.00000000000010p0, + 0x1.0000000000001p-4 + }, + { // Entry 87 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-4 + }, + { // Entry 88 + 0x1.p0, + 0x1.0p-3 + }, + { // Entry 89 + 0x1.00000000000010p0, + 0x1.0000000000001p-3 + }, + { // Entry 90 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-3 + }, + { // Entry 91 + 0x1.p0, + 0x1.0p-2 + }, + { // Entry 92 + 0x1.00000000000010p0, + 0x1.0000000000001p-2 + }, + { // Entry 93 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-2 + }, + { // Entry 94 + 0x1.p0, + 0x1.0p-1 + }, + { // Entry 95 + 0x1.00000000000010p0, + 0x1.0000000000001p-1 + }, + { // Entry 96 + -0x1.p0, + -0x1.0p-1074 + }, + { // Entry 97 + -0.0, + -0.0 + }, + { // Entry 98 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 99 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 100 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 101 + 0x1.00000000000010p0, + 0x1.0000000000001p0 + }, + { // Entry 102 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp0 + }, + { // Entry 103 + 0x1.p0, + 0x1.0p1 + }, + { // Entry 104 + 0x1.00000000000010p0, + 0x1.0000000000001p1 + }, + { // Entry 105 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1 + }, + { // Entry 106 + 0x1.p0, + 0x1.0p2 + }, + { // Entry 107 + 0x1.00000000000010p0, + 0x1.0000000000001p2 + }, + { // Entry 108 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp2 + }, + { // Entry 109 + 0x1.p0, + 0x1.0p3 + }, + { // Entry 110 + 0x1.00000000000010p0, + 0x1.0000000000001p3 + }, + { // Entry 111 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp3 + }, + { // Entry 112 + 0x1.p0, + 0x1.0p4 + }, + { // Entry 113 + 0x1.00000000000010p0, + 0x1.0000000000001p4 + }, + { // Entry 114 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp4 + }, + { // Entry 115 + 0x1.p0, + 0x1.0p5 + }, + { // Entry 116 + 0x1.00000000000010p0, + 0x1.0000000000001p5 + }, + { // Entry 117 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp5 + }, + { // Entry 118 + 0x1.p0, + 0x1.0p6 + }, + { // Entry 119 + 0x1.00000000000010p0, + 0x1.0000000000001p6 + }, + { // Entry 120 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp6 + }, + { // Entry 121 + 0x1.p0, + 0x1.0p7 + }, + { // Entry 122 + 0x1.00000000000010p0, + 0x1.0000000000001p7 + }, + { // Entry 123 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 124 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 125 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp1023 + }, + { // Entry 126 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp1023 + }, + { // Entry 127 + 0x1.ffffffffffffe0p0, + 0x1.ffffffffffffep1023 + }, + { // Entry 128 + -0x1.ffffffffffffe0p0, + -0x1.ffffffffffffep1023 + }, + { // Entry 129 + 0x1.921fb54442d180p0, + 0x1.921fb54442d18p1 + }, + { // Entry 130 + -0x1.921fb54442d180p0, + -0x1.921fb54442d18p1 + }, + { // Entry 131 + 0x1.921fb54442d180p0, + 0x1.921fb54442d18p0 + }, + { // Entry 132 + -0x1.921fb54442d180p0, + -0x1.921fb54442d18p0 + }, + { // Entry 133 + 0x1.00000000000010p0, + 0x1.0000000000001p0 + }, + { // Entry 134 + -0x1.00000000000010p0, + -0x1.0000000000001p0 + }, + { // Entry 135 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 136 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 137 + 0x1.fffffffffffff0p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 138 + -0x1.fffffffffffff0p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 139 + 0x1.921fb54442d180p0, + 0x1.921fb54442d18p-1 + }, + { // Entry 140 + -0x1.921fb54442d180p0, + -0x1.921fb54442d18p-1 + }, + { // Entry 141 + 0x1.00000000000010p0, + 0x1.0000000000001p-1022 + }, + { // Entry 142 + -0x1.00000000000010p0, + -0x1.0000000000001p-1022 + }, + { // Entry 143 + 0x1.p0, + 0x1.0p-1022 + }, + { // Entry 144 + -0x1.p0, + -0x1.0p-1022 + }, + { // Entry 145 + 0x1.ffffffffffffe0p0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 146 + -0x1.ffffffffffffe0p0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 147 + 0x1.ffffffffffffc0p0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 148 + -0x1.ffffffffffffc0p0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 149 + 0x1.p0, + 0x1.0p-1073 + }, + { // Entry 150 + -0x1.p0, + -0x1.0p-1073 + }, + { // Entry 151 + 0x1.p0, + 0x1.0p-1074 + }, + { // Entry 152 + -0x1.p0, + -0x1.0p-1074 + }, + { // Entry 153 + 0.0, + 0.0 + }, + { // Entry 154 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/significandf_intel_data.h b/tests/math_data/significandf_intel_data.h new file mode 100644 index 000000000..47869b7df --- /dev/null +++ b/tests/math_data/significandf_intel_data.h @@ -0,0 +1,526 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_significandf_intel_data[] = { + { // Entry 0 + 0x1.p0, + 0x1.p100 + }, + { // Entry 1 + 0x1.2aaaaap0, + 0x1.2aaaaap100 + }, + { // Entry 2 + 0x1.555554p0, + 0x1.555554p100 + }, + { // Entry 3 + 0x1.7ffffep0, + 0x1.7ffffep100 + }, + { // Entry 4 + 0x1.aaaaa8p0, + 0x1.aaaaa8p100 + }, + { // Entry 5 + 0x1.d55552p0, + 0x1.d55552p100 + }, + { // Entry 6 + 0x1.fffffcp0, + 0x1.fffffcp100 + }, + { // Entry 7 + -0x1.p0, + -0x1.p101 + }, + { // Entry 8 + -0x1.d55556p0, + -0x1.d55556p100 + }, + { // Entry 9 + -0x1.aaaaacp0, + -0x1.aaaaacp100 + }, + { // Entry 10 + -0x1.800002p0, + -0x1.800002p100 + }, + { // Entry 11 + -0x1.555558p0, + -0x1.555558p100 + }, + { // Entry 12 + -0x1.2aaaaep0, + -0x1.2aaaaep100 + }, + { // Entry 13 + -0x1.000004p0, + -0x1.000004p100 + }, + { // Entry 14 + 0x1.p0, + 0x1.p21 + }, + { // Entry 15 + 0x1.p0, + 0x1.p22 + }, + { // Entry 16 + 0x1.p0, + 0x1.p23 + }, + { // Entry 17 + 0x1.p0, + 0x1.p24 + }, + { // Entry 18 + 0x1.p0, + 0x1.p-130 + }, + { // Entry 19 + 0x1.ae8ba0p0, + 0x1.ae8ba0p-128 + }, + { // Entry 20 + 0x1.8e8ba0p0, + 0x1.8e8ba0p-127 + }, + { // Entry 21 + 0x1.22e8b8p0, + 0x1.22e8b8p-126 + }, + { // Entry 22 + 0x1.7e8ba0p0, + 0x1.7e8ba0p-126 + }, + { // Entry 23 + 0x1.da2e88p0, + 0x1.da2e88p-126 + }, + { // Entry 24 + 0x1.1ae8b8p0, + 0x1.1ae8b8p-125 + }, + { // Entry 25 + 0x1.48ba2cp0, + 0x1.48ba2cp-125 + }, + { // Entry 26 + 0x1.768ba0p0, + 0x1.768ba0p-125 + }, + { // Entry 27 + 0x1.a45d14p0, + 0x1.a45d14p-125 + }, + { // Entry 28 + 0x1.d22e88p0, + 0x1.d22e88p-125 + }, + { // Entry 29 + 0x1.fffffcp0, + 0x1.fffffcp-125 + }, + { // Entry 30 + 0x1.fffffep0, + 0x1.fffffep21 + }, + { // Entry 31 + 0x1.p0, + 0x1.p22 + }, + { // Entry 32 + 0x1.000002p0, + 0x1.000002p22 + }, + { // Entry 33 + 0x1.fffffep0, + 0x1.fffffep22 + }, + { // Entry 34 + 0x1.p0, + 0x1.p23 + }, + { // Entry 35 + 0x1.000002p0, + 0x1.000002p23 + }, + { // Entry 36 + 0x1.fffffep0, + 0x1.fffffep23 + }, + { // Entry 37 + 0x1.p0, + 0x1.p24 + }, + { // Entry 38 + 0x1.000002p0, + 0x1.000002p24 + }, + { // Entry 39 + -0x1.000002p0, + -0x1.000002p22 + }, + { // Entry 40 + -0x1.p0, + -0x1.p22 + }, + { // Entry 41 + -0x1.fffffep0, + -0x1.fffffep21 + }, + { // Entry 42 + -0x1.000002p0, + -0x1.000002p23 + }, + { // Entry 43 + -0x1.p0, + -0x1.p23 + }, + { // Entry 44 + -0x1.fffffep0, + -0x1.fffffep22 + }, + { // Entry 45 + -0x1.000002p0, + -0x1.000002p24 + }, + { // Entry 46 + -0x1.p0, + -0x1.p24 + }, + { // Entry 47 + -0x1.fffffep0, + -0x1.fffffep23 + }, + { // Entry 48 + 0x1.fffffep0, + 0x1.fffffep127 + }, + { // Entry 49 + -0x1.fffffep0, + -0x1.fffffep127 + }, + { // Entry 50 + 0x1.fffffep0, + 0x1.fffffep-7 + }, + { // Entry 51 + 0x1.p0, + 0x1.p-6 + }, + { // Entry 52 + 0x1.000002p0, + 0x1.000002p-6 + }, + { // Entry 53 + 0x1.fffffep0, + 0x1.fffffep-6 + }, + { // Entry 54 + 0x1.p0, + 0x1.p-5 + }, + { // Entry 55 + 0x1.000002p0, + 0x1.000002p-5 + }, + { // Entry 56 + 0x1.fffffep0, + 0x1.fffffep-5 + }, + { // Entry 57 + 0x1.p0, + 0x1.p-4 + }, + { // Entry 58 + 0x1.000002p0, + 0x1.000002p-4 + }, + { // Entry 59 + 0x1.fffffep0, + 0x1.fffffep-4 + }, + { // Entry 60 + 0x1.p0, + 0x1.p-3 + }, + { // Entry 61 + 0x1.000002p0, + 0x1.000002p-3 + }, + { // Entry 62 + 0x1.fffffep0, + 0x1.fffffep-3 + }, + { // Entry 63 + 0x1.p0, + 0x1.p-2 + }, + { // Entry 64 + 0x1.000002p0, + 0x1.000002p-2 + }, + { // Entry 65 + 0x1.fffffep0, + 0x1.fffffep-2 + }, + { // Entry 66 + 0x1.p0, + 0x1.p-1 + }, + { // Entry 67 + 0x1.000002p0, + 0x1.000002p-1 + }, + { // Entry 68 + -0x1.p0, + -0x1.p-149 + }, + { // Entry 69 + 0.0, + 0.0 + }, + { // Entry 70 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 71 + 0x1.fffffep0, + 0x1.fffffep-1 + }, + { // Entry 72 + 0x1.p0, + 0x1.p0 + }, + { // Entry 73 + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 74 + 0x1.fffffep0, + 0x1.fffffep0 + }, + { // Entry 75 + 0x1.p0, + 0x1.p1 + }, + { // Entry 76 + 0x1.000002p0, + 0x1.000002p1 + }, + { // Entry 77 + 0x1.fffffep0, + 0x1.fffffep1 + }, + { // Entry 78 + 0x1.p0, + 0x1.p2 + }, + { // Entry 79 + 0x1.000002p0, + 0x1.000002p2 + }, + { // Entry 80 + 0x1.fffffep0, + 0x1.fffffep2 + }, + { // Entry 81 + 0x1.p0, + 0x1.p3 + }, + { // Entry 82 + 0x1.000002p0, + 0x1.000002p3 + }, + { // Entry 83 + 0x1.fffffep0, + 0x1.fffffep3 + }, + { // Entry 84 + 0x1.p0, + 0x1.p4 + }, + { // Entry 85 + 0x1.000002p0, + 0x1.000002p4 + }, + { // Entry 86 + 0x1.fffffep0, + 0x1.fffffep4 + }, + { // Entry 87 + 0x1.p0, + 0x1.p5 + }, + { // Entry 88 + 0x1.000002p0, + 0x1.000002p5 + }, + { // Entry 89 + 0x1.fffffep0, + 0x1.fffffep5 + }, + { // Entry 90 + 0x1.p0, + 0x1.p6 + }, + { // Entry 91 + 0x1.000002p0, + 0x1.000002p6 + }, + { // Entry 92 + 0x1.fffffep0, + 0x1.fffffep6 + }, + { // Entry 93 + 0x1.p0, + 0x1.p7 + }, + { // Entry 94 + 0x1.000002p0, + 0x1.000002p7 + }, + { // Entry 95 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 96 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 97 + 0x1.fffffep0, + 0x1.fffffep127 + }, + { // Entry 98 + -0x1.fffffep0, + -0x1.fffffep127 + }, + { // Entry 99 + 0x1.fffffcp0, + 0x1.fffffcp127 + }, + { // Entry 100 + -0x1.fffffcp0, + -0x1.fffffcp127 + }, + { // Entry 101 + 0x1.921fb6p0, + 0x1.921fb6p1 + }, + { // Entry 102 + -0x1.921fb6p0, + -0x1.921fb6p1 + }, + { // Entry 103 + 0x1.921fb6p0, + 0x1.921fb6p0 + }, + { // Entry 104 + -0x1.921fb6p0, + -0x1.921fb6p0 + }, + { // Entry 105 + 0x1.000002p0, + 0x1.000002p0 + }, + { // Entry 106 + -0x1.000002p0, + -0x1.000002p0 + }, + { // Entry 107 + 0x1.p0, + 0x1.p0 + }, + { // Entry 108 + -0x1.p0, + -0x1.p0 + }, + { // Entry 109 + 0x1.fffffep0, + 0x1.fffffep-1 + }, + { // Entry 110 + -0x1.fffffep0, + -0x1.fffffep-1 + }, + { // Entry 111 + 0x1.921fb6p0, + 0x1.921fb6p-1 + }, + { // Entry 112 + -0x1.921fb6p0, + -0x1.921fb6p-1 + }, + { // Entry 113 + 0x1.000002p0, + 0x1.000002p-126 + }, + { // Entry 114 + -0x1.000002p0, + -0x1.000002p-126 + }, + { // Entry 115 + 0x1.p0, + 0x1.p-126 + }, + { // Entry 116 + -0x1.p0, + -0x1.p-126 + }, + { // Entry 117 + 0x1.fffffcp0, + 0x1.fffffcp-127 + }, + { // Entry 118 + -0x1.fffffcp0, + -0x1.fffffcp-127 + }, + { // Entry 119 + 0x1.fffff8p0, + 0x1.fffff8p-127 + }, + { // Entry 120 + -0x1.fffff8p0, + -0x1.fffff8p-127 + }, + { // Entry 121 + 0x1.p0, + 0x1.p-148 + }, + { // Entry 122 + -0x1.p0, + -0x1.p-148 + }, + { // Entry 123 + 0x1.p0, + 0x1.p-149 + }, + { // Entry 124 + -0x1.p0, + -0x1.p-149 + }, + { // Entry 125 + 0.0, + 0.0f + }, + { // Entry 126 + -0.0, + -0.0f + } +}; diff --git a/tests/math_sin_intel_data.h b/tests/math_data/sin_intel_data.h similarity index 100% rename from tests/math_sin_intel_data.h rename to tests/math_data/sin_intel_data.h diff --git a/tests/math_sincos_intel_data.h b/tests/math_data/sincos_intel_data.h similarity index 100% rename from tests/math_sincos_intel_data.h rename to tests/math_data/sincos_intel_data.h diff --git a/tests/math_sincosf_intel_data.h b/tests/math_data/sincosf_intel_data.h similarity index 100% rename from tests/math_sincosf_intel_data.h rename to tests/math_data/sincosf_intel_data.h diff --git a/tests/math_sinf_intel_data.h b/tests/math_data/sinf_intel_data.h similarity index 100% rename from tests/math_sinf_intel_data.h rename to tests/math_data/sinf_intel_data.h diff --git a/tests/math_data/sinh_intel_data.h b/tests/math_data/sinh_intel_data.h new file mode 100644 index 000000000..bebc19297 --- /dev/null +++ b/tests/math_data/sinh_intel_data.h @@ -0,0 +1,3054 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_sinh_intel_data[] = { + { // Entry 0 + -0x1.20000000000f30000000003d82666666p-21, + -0x1.2p-21 + }, + { // Entry 1 + 0x1.20000000000f30000000003d82666666p-21, + 0x1.2p-21 + }, + { // Entry 2 + -0x1.f9225f7e3193c80156e29378c34b23d3p831, + -0x1.20b0659d8a7e1p9 + }, + { // Entry 3 + 0x1.f9225f7e3193c80156e29378c34b23d3p831, + 0x1.20b0659d8a7e1p9 + }, + { // Entry 4 + -0x1.653a9c0c08b00f3a2fd5ec9fb1093ff9p52, + -0x1.288f5c28f5c28p5 + }, + { // Entry 5 + 0x1.653a9c0c08b00f3a2fd5ec9fb1093ff9p52, + 0x1.288f5c28f5c28p5 + }, + { // Entry 6 + -0x1.45f775546a77d77fe6234ab5d4ab1036p-1, + -0x1.3333333333333p-1 + }, + { // Entry 7 + 0x1.45f775546a77d77fe6234ab5d4ab1036p-1, + 0x1.3333333333333p-1 + }, + { // Entry 8 + -0x1.e128d3a99c4b28216511a7ad98d106f0p911, + -0x1.3c640p9 + }, + { // Entry 9 + 0x1.e128d3a99c4b28216511a7ad98d106f0p911, + 0x1.3c640p9 + }, + { // Entry 10 + -0x1.41ab9d8bc0cbf81eac0e2bbbbbeab96cp-5, + -0x1.41967803312afp-5 + }, + { // Entry 11 + 0x1.41ab9d8bc0cbf81eac0e2bbbbbeab96cp-5, + 0x1.41967803312afp-5 + }, + { // Entry 12 + -0x1.f5f62d444f24c3bee8aeb75a413b8101p941, + -0x1.46cf1a4e8eff8p9 + }, + { // Entry 13 + 0x1.f5f62d444f24c3bee8aeb75a413b8101p941, + 0x1.46cf1a4e8eff8p9 + }, + { // Entry 14 + -0x1.fd0d27f4cfe98801d15fa2d48e5a54c0p952, + -0x1.4aa0d96719fc6p9 + }, + { // Entry 15 + 0x1.fd0d27f4cfe98801d15fa2d48e5a54c0p952, + 0x1.4aa0d96719fc6p9 + }, + { // Entry 16 + -0x1.f7667599728a17ff07667fe41510ac6cp13, + -0x1.4c2b291cfadd2p3 + }, + { // Entry 17 + 0x1.f7667599728a17ff07667fe41510ac6cp13, + 0x1.4c2b291cfadd2p3 + }, + { // Entry 18 + -0x1.eb34f0a92ee7280128c114f07d355776p958, + -0x1.4cb09e65eb930p9 + }, + { // Entry 19 + 0x1.eb34f0a92ee7280128c114f07d355776p958, + 0x1.4cb09e65eb930p9 + }, + { // Entry 20 + -0x1.d2108e9aa1b124168960a67f1cb28b07p960, + -0x1.4d5b56d5b55acp9 + }, + { // Entry 21 + 0x1.d2108e9aa1b124168960a67f1cb28b07p960, + 0x1.4d5b56d5b55acp9 + }, + { // Entry 22 + -0x1.f68d7cf30e0123c2164c1368d213f9b5p970, + -0x1.50dc3739dde8ep9 + }, + { // Entry 23 + 0x1.f68d7cf30e0123c2164c1368d213f9b5p970, + 0x1.50dc3739dde8ep9 + }, + { // Entry 24 + -0x1.fd799430443f0800ef2fcf2cd9da9697p975, + -0x1.529994bb15795p9 + }, + { // Entry 25 + 0x1.fd799430443f0800ef2fcf2cd9da9697p975, + 0x1.529994bb15795p9 + }, + { // Entry 26 + -0x1.e7b36eb1f1e698017d905c91e25df616p1005, + -0x1.5cf9ace27d120p9 + }, + { // Entry 27 + 0x1.e7b36eb1f1e698017d905c91e25df616p1005, + 0x1.5cf9ace27d120p9 + }, + { // Entry 28 + -0x1.99d18edc5720a8018d0c8bfbf7d98f9ap1011, + -0x1.5ef7bdef7c2eep9 + }, + { // Entry 29 + 0x1.99d18edc5720a8018d0c8bfbf7d98f9ap1011, + 0x1.5ef7bdef7c2eep9 + }, + { // Entry 30 + -0x1.f3ae6e6ad6cf33f952b8d7d26abcd946p1013, + -0x1.5fc2907bbfb53p9 + }, + { // Entry 31 + 0x1.f3ae6e6ad6cf33f952b8d7d26abcd946p1013, + 0x1.5fc2907bbfb53p9 + }, + { // Entry 32 + -0x1.fffffffffeb2a1b0e263ac68076ed4e0p1022, + -0x1.62e42fefa39eap9 + }, + { // Entry 33 + 0x1.fffffffffeb2a1b0e263ac68076ed4e0p1022, + 0x1.62e42fefa39eap9 + }, + { // Entry 34 + -0x1.94f8e42c219097ffbf5323a28f7d715cp-2, + -0x1.8b1896d9e5343p-2 + }, + { // Entry 35 + 0x1.94f8e42c219097ffbf5323a28f7d715cp-2, + 0x1.8b1896d9e5343p-2 + }, + { // Entry 36 + -0x1.90p-1069, + -0x1.9p-1069 + }, + { // Entry 37 + 0x1.90p-1069, + 0x1.9p-1069 + }, + { // Entry 38 + -0x1.a45c4bfc4132c8e8dd4e44e918fef502p-2, + -0x1.995e6ee493fe5p-2 + }, + { // Entry 39 + 0x1.a45c4bfc4132c8e8dd4e44e918fef502p-2, + 0x1.995e6ee493fe5p-2 + }, + { // Entry 40 + -0x1.c7a103379809b38132350ca766cba44bp-1, + -0x1.9a495ea447852p-1 + }, + { // Entry 41 + 0x1.c7a103379809b38132350ca766cba44bp-1, + 0x1.9a495ea447852p-1 + }, + { // Entry 42 + -0x1.9bfa3403f8d457fffa246d880ef814f1p-5, + -0x1.9bcdcc408ced3p-5 + }, + { // Entry 43 + 0x1.9bfa3403f8d457fffa246d880ef814f1p-5, + 0x1.9bcdcc408ced3p-5 + }, + { // Entry 44 + -0x1.aa8c3d4cb5bd9ffffe5e559c563d669cp-5, + -0x1.aa5af545ae880p-5 + }, + { // Entry 45 + 0x1.aa8c3d4cb5bd9ffffe5e559c563d669cp-5, + 0x1.aa5af545ae880p-5 + }, + { // Entry 46 + -0x1.e17e32eb8e6ce8f6dad6a738fa5f0b8ap-2, + -0x1.d15037f2ebe3cp-2 + }, + { // Entry 47 + 0x1.e17e32eb8e6ce8f6dad6a738fa5f0b8ap-2, + 0x1.d15037f2ebe3cp-2 + }, + { // Entry 48 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 49 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 50 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 51 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 52 + 0x1.000000000000100000000aaaaaaaaaaap-41, + 0x1.0000000000001p-41 + }, + { // Entry 53 + -0x1.000000000000100000000aaaaaaaaaaap-41, + -0x1.0000000000001p-41 + }, + { // Entry 54 + 0x1.41c7a8814c78683cdbc165597ca61d23p368, + 0x1.0000000000007p8 + }, + { // Entry 55 + -0x1.41c7a8814c78683cdbc165597ca61d23p368, + -0x1.0000000000007p8 + }, + { // Entry 56 + 0x1.1f43febb6d5ed7f79073c9dea85050fep45, + 0x1.0000000e0p5 + }, + { // Entry 57 + -0x1.1f43febb6d5ed7f79073c9dea85050fep45, + -0x1.0000000e0p5 + }, + { // Entry 58 + 0x1.749ea5cf24c2a801014b24d9686ff306p10, + 0x1.0000000ffe017p3 + }, + { // Entry 59 + -0x1.749ea5cf24c2a801014b24d9686ff306p10, + -0x1.0000000ffe017p3 + }, + { // Entry 60 + 0x1.0f2ebe19aebbcffe11114fde20a8b25dp22, + 0x1.0000001p4 + }, + { // Entry 61 + -0x1.0f2ebe19aebbcffe11114fde20a8b25dp22, + -0x1.0000001p4 + }, + { // Entry 62 + 0x1.d03d0547eb5af7ff9287bfe9ef08d02cp1, + 0x1.0000040p1 + }, + { // Entry 63 + -0x1.d03d0547eb5af7ff9287bfe9ef08d02cp1, + -0x1.0000040p1 + }, + { // Entry 64 + 0x1.94dbdfbb66bc651ee76572119d9c1c4cp737, + 0x1.0000202p9 + }, + { // Entry 65 + -0x1.94dbdfbb66bc651ee76572119d9c1c4cp737, + -0x1.0000202p9 + }, + { // Entry 66 + 0x1.203fc65a034d07ffda891ef079ee632dp45, + 0x1.00070p5 + }, + { // Entry 67 + -0x1.203fc65a034d07ffda891ef079ee632dp45, + -0x1.00070p5 + }, + { // Entry 68 + 0x1.043203c63ca348000c2d50e004eab9dfp-3, + 0x1.03801bba53d5fp-3 + }, + { // Entry 69 + -0x1.043203c63ca348000c2d50e004eab9dfp-3, + -0x1.03801bba53d5fp-3 + }, + { // Entry 70 + 0x1.d9ceb6fb3af22800eba0709ab550eb83p4, + 0x1.0539a9db00fb0p2 + }, + { // Entry 71 + -0x1.d9ceb6fb3af22800eba0709ab550eb83p4, + -0x1.0539a9db00fb0p2 + }, + { // Entry 72 + 0x1.19d9db769b3073db5694464547980ab3p-1, + 0x1.0d44121952313p-1 + }, + { // Entry 73 + -0x1.19d9db769b3073db5694464547980ab3p-1, + -0x1.0d44121952313p-1 + }, + { // Entry 74 + 0x1.11aa874937f657fefeb22f10657675b2p-3, + 0x1.10dbb163423cfp-3 + }, + { // Entry 75 + -0x1.11aa874937f657fefeb22f10657675b2p-3, + -0x1.10dbb163423cfp-3 + }, + { // Entry 76 + 0x1.a4e4693413b9970755c15633af25f96bp399, + 0x1.15c18de877563p8 + }, + { // Entry 77 + -0x1.a4e4693413b9970755c15633af25f96bp399, + -0x1.15c18de877563p8 + }, + { // Entry 78 + 0x1.1fae3d9220dd280102c022b12bc3f6fep-2, + 0x1.1c065802b26eap-2 + }, + { // Entry 79 + -0x1.1fae3d9220dd280102c022b12bc3f6fep-2, + -0x1.1c065802b26eap-2 + }, + { // Entry 80 + 0x1.20000000000f30000000003d82666666p-21, + 0x1.2p-21 + }, + { // Entry 81 + -0x1.20000000000f30000000003d82666666p-21, + -0x1.2p-21 + }, + { // Entry 82 + 0x1.35a9257a5a1cb7fecfa291714fac9f89p-1, + 0x1.25589e6453a79p-1 + }, + { // Entry 83 + -0x1.35a9257a5a1cb7fecfa291714fac9f89p-1, + -0x1.25589e6453a79p-1 + }, + { // Entry 84 + 0x1.eaa521edf1bc28014602191ce618c05fp845, + 0x1.2586ca9cf411bp9 + }, + { // Entry 85 + -0x1.eaa521edf1bc28014602191ce618c05fp845, + -0x1.2586ca9cf411bp9 + }, + { // Entry 86 + 0x1.6a09e667f3bc9b61130bc056d478d834p25, + 0x1.25e4f7b2737fap4 + }, + { // Entry 87 + -0x1.6a09e667f3bc9b61130bc056d478d834p25, + -0x1.25e4f7b2737fap4 + }, + { // Entry 88 + 0x1.2a9bbf545f09f7fffc2fd473fc2f8a9ep-2, + 0x1.2687ce7bd7353p-2 + }, + { // Entry 89 + -0x1.2a9bbf545f09f7fffc2fd473fc2f8a9ep-2, + -0x1.2687ce7bd7353p-2 + }, + { // Entry 90 + 0x1.2e6ae008ae071731ab9829f451a64edcp-2, + 0x1.2a2f795d6b514p-2 + }, + { // Entry 91 + -0x1.2e6ae008ae071731ab9829f451a64edcp-2, + -0x1.2a2f795d6b514p-2 + }, + { // Entry 92 + 0x1.fffffffffff84dc369f81dfdbc383332p25, + 0x1.2b708872320dep4 + }, + { // Entry 93 + -0x1.fffffffffff84dc369f81dfdbc383332p25, + -0x1.2b708872320dep4 + }, + { // Entry 94 + 0x1.7c12b8d57fdcf7fffa9ce5e99a4163dep0, + 0x1.2fac64a42ceefp0 + }, + { // Entry 95 + -0x1.7c12b8d57fdcf7fffa9ce5e99a4163dep0, + -0x1.2fac64a42ceefp0 + }, + { // Entry 96 + 0x1.dc851a55686d48012add3c02a54cc4d9p875, + 0x1.2fe8bcd183299p9 + }, + { // Entry 97 + -0x1.dc851a55686d48012add3c02a54cc4d9p875, + -0x1.2fe8bcd183299p9 + }, + { // Entry 98 + 0x1.42546737e09d68014ec9badd9df8fee3p-1, + 0x1.30208b74d1760p-1 + }, + { // Entry 99 + -0x1.42546737e09d68014ec9badd9df8fee3p-1, + -0x1.30208b74d1760p-1 + }, + { // Entry 100 + 0x1.ff12f7296b0408017eaaf48fbf280399p877, + 0x1.30a324d6033b5p9 + }, + { // Entry 101 + -0x1.ff12f7296b0408017eaaf48fbf280399p877, + -0x1.30a324d6033b5p9 + }, + { // Entry 102 + 0x1.46c46118f79ad3e3a58cffe90ae6c228p-1, + 0x1.33ep-1 + }, + { // Entry 103 + -0x1.46c46118f79ad3e3a58cffe90ae6c228p-1, + -0x1.33ep-1 + }, + { // Entry 104 + 0x1.4715736c9497d3c2ba6fecc679c26499p-1, + 0x1.342454787e0eap-1 + }, + { // Entry 105 + -0x1.4715736c9497d3c2ba6fecc679c26499p-1, + -0x1.342454787e0eap-1 + }, + { // Entry 106 + 0x1.8b2e83486133082860f65d0b54a3ff4cp0, + 0x1.380p0 + }, + { // Entry 107 + -0x1.8b2e83486133082860f65d0b54a3ff4cp0, + -0x1.380p0 + }, + { // Entry 108 + 0x1.94743c1df51b480057352f3dbc3a206dp0, + 0x1.3d0p0 + }, + { // Entry 109 + -0x1.94743c1df51b480057352f3dbc3a206dp0, + -0x1.3d0p0 + }, + { // Entry 110 + 0x1.43f3767f52a3a8603144ec06b8fc89a2p-2, + 0x1.3ec6f4738ef75p-2 + }, + { // Entry 111 + -0x1.43f3767f52a3a8603144ec06b8fc89a2p-2, + -0x1.3ec6f4738ef75p-2 + }, + { // Entry 112 + 0x1.411bd68cf1f6682ad666958c437bc7d6p-5, + 0x1.4106cd4f76086p-5 + }, + { // Entry 113 + -0x1.411bd68cf1f6682ad666958c437bc7d6p-5, + -0x1.4106cd4f76086p-5 + }, + { // Entry 114 + 0x1.f1ef9c8a4fdae801b19f8e42eff2c4a8p929, + 0x1.42a565e456e04p9 + }, + { // Entry 115 + -0x1.f1ef9c8a4fdae801b19f8e42eff2c4a8p929, + -0x1.42a565e456e04p9 + }, + { // Entry 116 + 0x1.59ae6cfb065053d12a7ee2829e50cbc0p-1, + 0x1.43af5aa457830p-1 + }, + { // Entry 117 + -0x1.59ae6cfb065053d12a7ee2829e50cbc0p-1, + -0x1.43af5aa457830p-1 + }, + { // Entry 118 + 0x1.5a16aa3594c9d3c64013364ec2c00447p-1, + 0x1.4405baf340402p-1 + }, + { // Entry 119 + -0x1.5a16aa3594c9d3c64013364ec2c00447p-1, + -0x1.4405baf340402p-1 + }, + { // Entry 120 + 0x1.f4ec44194b642801a4afd4c50633e8aap937, + 0x1.456bf23e02428p9 + }, + { // Entry 121 + -0x1.f4ec44194b642801a4afd4c50633e8aap937, + -0x1.456bf23e02428p9 + }, + { // Entry 122 + 0x1.ea91d9533b394801bf3d3ec8f88de568p938, + 0x1.45c1feef8086cp9 + }, + { // Entry 123 + -0x1.ea91d9533b394801bf3d3ec8f88de568p938, + -0x1.45c1feef8086cp9 + }, + { // Entry 124 + 0x1.5c98a49e6503ac198ec2bf98d4df0ce2p-1, + 0x1.4618fe408b57ep-1 + }, + { // Entry 125 + -0x1.5c98a49e6503ac198ec2bf98d4df0ce2p-1, + -0x1.4618fe408b57ep-1 + }, + { // Entry 126 + 0x1.4f14e08c88501827cbe80379c7e7c8c3p-2, + 0x1.495f61b2c806cp-2 + }, + { // Entry 127 + -0x1.4f14e08c88501827cbe80379c7e7c8c3p-2, + -0x1.495f61b2c806cp-2 + }, + { // Entry 128 + 0x1.50000000006078000000084f22cccccdp-20, + 0x1.5p-20 + }, + { // Entry 129 + -0x1.50000000006078000000084f22cccccdp-20, + -0x1.5p-20 + }, + { // Entry 130 + 0x1.6e81c7d17d1df3beb45414ca53bc3f28p-1, + 0x1.54c834c39835cp-1 + }, + { // Entry 131 + -0x1.6e81c7d17d1df3beb45414ca53bc3f28p-1, + -0x1.54c834c39835cp-1 + }, + { // Entry 132 + 0x1.9548e9688fb2e800c466e7d893328f68p991, + 0x1.5807dc787a5d5p9 + }, + { // Entry 133 + -0x1.9548e9688fb2e800c466e7d893328f68p991, + -0x1.5807dc787a5d5p9 + }, + { // Entry 134 + 0x1.85442a2969ace4a71757c1cdd6ab1b82p1007, + 0x1.5d8e43cd6785dp9 + }, + { // Entry 135 + -0x1.85442a2969ace4a71757c1cdd6ab1b82p1007, + -0x1.5d8e43cd6785dp9 + }, + { // Entry 136 + 0x1.f2a3c29fc6d723a63e349bbcd7894a8ap1007, + 0x1.5dadf5d1e452cp9 + }, + { // Entry 137 + -0x1.f2a3c29fc6d723a63e349bbcd7894a8ap1007, + -0x1.5dadf5d1e452cp9 + }, + { // Entry 138 + 0x1.6487aa6e34cb57fefbc4f4ef7b7281efp-2, + 0x1.5db17c4a60fe4p-2 + }, + { // Entry 139 + -0x1.6487aa6e34cb57fefbc4f4ef7b7281efp-2, + -0x1.5db17c4a60fe4p-2 + }, + { // Entry 140 + 0x1.edcb14879613e80176087c1a76dec97cp1008, + 0x1.5e056ed40e56ep9 + }, + { // Entry 141 + -0x1.edcb14879613e80176087c1a76dec97cp1008, + -0x1.5e056ed40e56ep9 + }, + { // Entry 142 + 0x1.6093d5bf2580f00bcdc6c88ac35d2640p-6, + 0x1.608cdeb3ec111p-6 + }, + { // Entry 143 + -0x1.6093d5bf2580f00bcdc6c88ac35d2640p-6, + -0x1.608cdeb3ec111p-6 + }, + { // Entry 144 + 0x1.614e81af3113300dfbdf1ed60454760dp-6, + 0x1.61477f8e69928p-6 + }, + { // Entry 145 + -0x1.614e81af3113300dfbdf1ed60454760dp-6, + -0x1.61477f8e69928p-6 + }, + { // Entry 146 + 0x1.96faa872a06aa3003f5158de9c570302p1023, + 0x1.631f86ac0611bp9 + }, + { // Entry 147 + -0x1.96faa872a06aa3003f5158de9c570302p1023, + -0x1.631f86ac0611bp9 + }, + { // Entry 148 + 0x1.bf668fc6f4f9d31f753c408261bb02b4p1023, + 0x1.632ba58eae071p9 + }, + { // Entry 149 + -0x1.bf668fc6f4f9d31f753c408261bb02b4p1023, + -0x1.632ba58eae071p9 + }, + { // Entry 150 + 0x1.ffffffffbcd3ae595303e74abb3fd75dp1023, + 0x1.633ce8fb9f771p9 + }, + { // Entry 151 + -0x1.ffffffffbcd3ae595303e74abb3fd75dp1023, + -0x1.633ce8fb9f771p9 + }, + { // Entry 152 + 0x1.fffffffff093ae594ed7508a02429436p1023, + 0x1.633ce8fb9f840p9 + }, + { // Entry 153 + -0x1.fffffffff093ae594ed7508a02429436p1023, + -0x1.633ce8fb9f840p9 + }, + { // Entry 154 + 0x1.fffffffff713ae594eafc080a48289f9p1023, + 0x1.633ce8fb9f85ap9 + }, + { // Entry 155 + -0x1.fffffffff713ae594eafc080a48289f9p1023, + -0x1.633ce8fb9f85ap9 + }, + { // Entry 156 + 0x1.63ceae09cb498fefee897d9d09f0f101p-6, + 0x1.63c7858c9e520p-6 + }, + { // Entry 157 + -0x1.63ceae09cb498fefee897d9d09f0f101p-6, + -0x1.63c7858c9e520p-6 + }, + { // Entry 158 + 0x1.650506712af37ff54f81db8832a797e9p-6, + 0x1.64fdcb29465a9p-6 + }, + { // Entry 159 + -0x1.650506712af37ff54f81db8832a797e9p-6, + -0x1.64fdcb29465a9p-6 + }, + { // Entry 160 + 0x1.8465153de7c007fffdec1cebc40841f7p-1, + 0x1.66666666d5da3p-1 + }, + { // Entry 161 + -0x1.8465153de7c007fffdec1cebc40841f7p-1, + -0x1.66666666d5da3p-1 + }, + { // Entry 162 + 0x1.f2056a8752c0a54d0803a9f0c00baf5ep0, + 0x1.6b4p0 + }, + { // Entry 163 + -0x1.f2056a8752c0a54d0803a9f0c00baf5ep0, + -0x1.6b4p0 + }, + { // Entry 164 + 0x1.f54f8eaffc4348da8305aef164c3ba94p0, + 0x1.6ccp0 + }, + { // Entry 165 + -0x1.f54f8eaffc4348da8305aef164c3ba94p0, + -0x1.6ccp0 + }, + { // Entry 166 + 0x1.71e202c00c2319229a5b86f0f26cabb1p-7, + 0x1.71ep-7 + }, + { // Entry 167 + -0x1.71e202c00c2319229a5b86f0f26cabb1p-7, + -0x1.71ep-7 + }, + { // Entry 168 + 0x1.773253dd3f311874a2f0c80764abf42dp-8, + 0x1.7731cd8b74641p-8 + }, + { // Entry 169 + -0x1.773253dd3f311874a2f0c80764abf42dp-8, + -0x1.7731cd8b74641p-8 + }, + { // Entry 170 + 0x1.a08a89e90462985ff5cdbef5be2c143ep-1, + 0x1.7c874423b4655p-1 + }, + { // Entry 171 + -0x1.a08a89e90462985ff5cdbef5be2c143ep-1, + -0x1.7c874423b4655p-1 + }, + { // Entry 172 + 0x1.808fd7f5059e47fed3be0eaf1b9815bdp-4, + 0x1.7fffc7fffffffp-4 + }, + { // Entry 173 + -0x1.808fd7f5059e47fed3be0eaf1b9815bdp-4, + -0x1.7fffc7fffffffp-4 + }, + { // Entry 174 + 0x1.804bf5b40d34e7d143ae427670a1c115p-5, + 0x1.8027e9757bf31p-5 + }, + { // Entry 175 + -0x1.804bf5b40d34e7d143ae427670a1c115p-5, + -0x1.8027e9757bf31p-5 + }, + { // Entry 176 + 0x1.f0e3e5b6c17c02a799c306dbc1b1a8ecp555, + 0x1.820d92fc4b42ap8 + }, + { // Entry 177 + -0x1.f0e3e5b6c17c02a799c306dbc1b1a8ecp555, + -0x1.820d92fc4b42ap8 + }, + { // Entry 178 + 0x1.88665ffaada937dd93491498f2ee9defp-5, + 0x1.884p-5 + }, + { // Entry 179 + -0x1.88665ffaada937dd93491498f2ee9defp-5, + -0x1.884p-5 + }, + { // Entry 180 + 0x1.b4698d92404057ff9724122622082863p-1, + 0x1.8bcbf70469a4cp-1 + }, + { // Entry 181 + -0x1.b4698d92404057ff9724122622082863p-1, + -0x1.8bcbf70469a4cp-1 + }, + { // Entry 182 + 0x1.f612c0c32a0c700d32addc4c6c2b76c3p7, + 0x1.8e0p2 + }, + { // Entry 183 + -0x1.f612c0c32a0c700d32addc4c6c2b76c3p7, + -0x1.8e0p2 + }, + { // Entry 184 + 0x1.bc98715aec56c731186b8ab8deb14510p-1, + 0x1.920p-1 + }, + { // Entry 185 + -0x1.bc98715aec56c731186b8ab8deb14510p-1, + -0x1.920p-1 + }, + { // Entry 186 + 0x1.94618fa9fe2ddce9a5820eacd73ea447p-8, + 0x1.9460e77feba40p-8 + }, + { // Entry 187 + -0x1.94618fa9fe2ddce9a5820eacd73ea447p-8, + -0x1.9460e77feba40p-8 + }, + { // Entry 188 + 0x1.c6b5d3ca60e64ffffe54e7a9d176a802p-1, + 0x1.9999999a10d54p-1 + }, + { // Entry 189 + -0x1.c6b5d3ca60e64ffffe54e7a9d176a802p-1, + -0x1.9999999a10d54p-1 + }, + { // Entry 190 + 0x1.9c560cd3fc44bffffe366df58ed96becp-3, + 0x1.9999999a33ce2p-3 + }, + { // Entry 191 + -0x1.9c560cd3fc44bffffe366df58ed96becp-3, + -0x1.9999999a33ce2p-3 + }, + { // Entry 192 + 0x1.9a48733871434800020cf29985e49f30p-4, + 0x1.9999999a54528p-4 + }, + { // Entry 193 + -0x1.9a48733871434800020cf29985e49f30p-4, + -0x1.9999999a54528p-4 + }, + { // Entry 194 + 0x1.c6b5d3cb11239800020efc8821633bdep-1, + 0x1.9999999a949b7p-1 + }, + { // Entry 195 + -0x1.c6b5d3cb11239800020efc8821633bdep-1, + -0x1.9999999a949b7p-1 + }, + { // Entry 196 + 0x1.9c560cd481e637fffe01fbfdad836d2fp-3, + 0x1.9999999ab6ceap-3 + }, + { // Entry 197 + -0x1.9c560cd481e637fffe01fbfdad836d2fp-3, + -0x1.9999999ab6ceap-3 + }, + { // Entry 198 + 0x1.9c560cd64ac02ffffe536624b3aa885fp-3, + 0x1.9999999c76abep-3 + }, + { // Entry 199 + -0x1.9c560cd64ac02ffffe536624b3aa885fp-3, + -0x1.9999999c76abep-3 + }, + { // Entry 200 + 0x1.9c560cd6ec5c70000171ee4afa616629p-3, + 0x1.9999999d151a4p-3 + }, + { // Entry 201 + -0x1.9c560cd6ec5c70000171ee4afa616629p-3, + -0x1.9999999d151a4p-3 + }, + { // Entry 202 + 0x1.a5573f0e20f1a905add879f99041019fp-2, + 0x1.9a468b4ef44ffp-2 + }, + { // Entry 203 + -0x1.a5573f0e20f1a905add879f99041019fp-2, + -0x1.9a468b4ef44ffp-2 + }, + { // Entry 204 + 0x1.ffffffffffed457a42e161456cf862b2p590, + 0x1.9a57d76d152fcp8 + }, + { // Entry 205 + -0x1.ffffffffffed457a42e161456cf862b2p590, + -0x1.9a57d76d152fcp8 + }, + { // Entry 206 + 0x1.aebdc6208c1248b2ffbba5f783b92a1bp-2, + 0x1.a2f46ea5f9049p-2 + }, + { // Entry 207 + -0x1.aebdc6208c1248b2ffbba5f783b92a1bp-2, + -0x1.a2f46ea5f9049p-2 + }, + { // Entry 208 + 0x1.d64a3c2bfdf088565dad6aa8d6e58f04p-1, + 0x1.a5294a5294a50p-1 + }, + { // Entry 209 + -0x1.d64a3c2bfdf088565dad6aa8d6e58f04p-1, + -0x1.a5294a5294a50p-1 + }, + { // Entry 210 + 0x1.b000000000cd080000001d316399999bp-20, + 0x1.bp-20 + }, + { // Entry 211 + -0x1.b000000000cd080000001d316399999bp-20, + -0x1.bp-20 + }, + { // Entry 212 + 0x1.b6206a36aff4e7f3be1967dee6c19c2dp-3, + 0x1.b2da0d9913589p-3 + }, + { // Entry 213 + -0x1.b6206a36aff4e7f3be1967dee6c19c2dp-3, + -0x1.b2da0d9913589p-3 + }, + { // Entry 214 + 0x1.bd28b272834a2ff3d79fb12e37a18714p-6, + 0x1.bd1aae2323510p-6 + }, + { // Entry 215 + -0x1.bd28b272834a2ff3d79fb12e37a18714p-6, + -0x1.bd1aae2323510p-6 + }, + { // Entry 216 + 0x1.f8c25081d25d19d0d73bf466555bef04p-1, + 0x1.be2p-1 + }, + { // Entry 217 + -0x1.f8c25081d25d19d0d73bf466555bef04p-1, + -0x1.be2p-1 + }, + { // Entry 218 + 0x1.cc8f25f94323284f6d6454d3f3699088p-2, + 0x1.be4b949799901p-2 + }, + { // Entry 219 + -0x1.cc8f25f94323284f6d6454d3f3699088p-2, + -0x1.be4b949799901p-2 + }, + { // Entry 220 + 0x1.068f1b6fd97a97ffc554f2db188f9117p4, + 0x1.bef89775b5e88p1 + }, + { // Entry 221 + -0x1.068f1b6fd97a97ffc554f2db188f9117p4, + -0x1.bef89775b5e88p1 + }, + { // Entry 222 + 0x1.ca73ad17d1f0afff8b6da0d520741b26p-4, + 0x1.c98p-4 + }, + { // Entry 223 + -0x1.ca73ad17d1f0afff8b6da0d520741b26p-4, + -0x1.c98p-4 + }, + { // Entry 224 + 0x1.742768cc82d3b80460f95c20f53171c3p1, + 0x1.c9eca0f325b42p0 + }, + { // Entry 225 + -0x1.742768cc82d3b80460f95c20f53171c3p1, + -0x1.c9eca0f325b42p0 + }, + { // Entry 226 + 0x1.dc0aa0025b62b7fe5b0c13b7cc65bbc6p-2, + 0x1.cc6p-2 + }, + { // Entry 227 + -0x1.dc0aa0025b62b7fe5b0c13b7cc65bbc6p-2, + -0x1.cc6p-2 + }, + { // Entry 228 + 0x1.06c9ccd626cd8800020eb9e544490f6ap0, + 0x1.cccccccd69451p-1 + }, + { // Entry 229 + -0x1.06c9ccd626cd8800020eb9e544490f6ap0, + -0x1.cccccccd69451p-1 + }, + { // Entry 230 + 0x1.d862eb5cde4b0800f5b46008a4384f2ep-5, + 0x1.d82p-5 + }, + { // Entry 231 + -0x1.d862eb5cde4b0800f5b46008a4384f2ep-5, + -0x1.d82p-5 + }, + { // Entry 232 + 0x1.7b150909141397ff00cd2cb5dcdfc798p344, + 0x1.df0e8443492b4p7 + }, + { // Entry 233 + -0x1.7b150909141397ff00cd2cb5dcdfc798p344, + -0x1.df0e8443492b4p7 + }, + { // Entry 234 + 0x1.f370cce952a62835ca29e12b2844ca82p-2, + 0x1.e18p-2 + }, + { // Entry 235 + -0x1.f370cce952a62835ca29e12b2844ca82p-2, + -0x1.e18p-2 + }, + { // Entry 236 + 0x1.e6123f12db92680282920746b67b9489p-6, + 0x1.e60p-6 + }, + { // Entry 237 + -0x1.e6123f12db92680282920746b67b9489p-6, + -0x1.e60p-6 + }, + { // Entry 238 + 0x1.fc59700f23fc880595b286d94cb1161dp-2, + 0x1.e97e4ca09cde7p-2 + }, + { // Entry 239 + -0x1.fc59700f23fc880595b286d94cb1161dp-2, + -0x1.e97e4ca09cde7p-2 + }, + { // Entry 240 + 0x1.a8a3582361d82800005ec0718a5e8e7cp1, + 0x1.ea11b1afdc907p0 + }, + { // Entry 241 + -0x1.a8a3582361d82800005ec0718a5e8e7cp1, + -0x1.ea11b1afdc907p0 + }, + { // Entry 242 + 0x1.f4592b2dde8cf3813b817358e271e980p-3, + 0x1.ef8p-3 + }, + { // Entry 243 + -0x1.f4592b2dde8cf3813b817358e271e980p-3, + -0x1.ef8p-3 + }, + { // Entry 244 + 0x1.48f609e7b6aecf059a4b8c484c3bc435p21, + 0x1.effffffffffffp3 + }, + { // Entry 245 + -0x1.48f609e7b6aecf059a4b8c484c3bc435p21, + -0x1.effffffffffffp3 + }, + { // Entry 246 + 0x1.dbca9263f840fca48450e408fa36b56bp177, + 0x1.effffffffffffp6 + }, + { // Entry 247 + -0x1.dbca9263f840fca48450e408fa36b56bp177, + -0x1.effffffffffffp6 + }, + { // Entry 248 + 0x1.d3764167d84c26146f109714eda9a19ep715, + 0x1.f0e540ea02272p8 + }, + { // Entry 249 + -0x1.d3764167d84c26146f109714eda9a19ep715, + -0x1.f0e540ea02272p8 + }, + { // Entry 250 + 0x1.f44f7cd78c0c8d0cfdd38268b4c1b21ap-5, + 0x1.f3fffffffffffp-5 + }, + { // Entry 251 + -0x1.f44f7cd78c0c8d0cfdd38268b4c1b21ap-5, + -0x1.f3fffffffffffp-5 + }, + { // Entry 252 + 0x1.f4e4fe44a20e73bbcddcba0e9c46e803p-7, + 0x1.f4ep-7 + }, + { // Entry 253 + -0x1.f4e4fe44a20e73bbcddcba0e9c46e803p-7, + -0x1.f4ep-7 + }, + { // Entry 254 + 0x1.f4fd444ef4c02273e0c0b56c3b6b18f4p-11, + 0x1.f4fd3f4fd3f41p-11 + }, + { // Entry 255 + -0x1.f4fd444ef4c02273e0c0b56c3b6b18f4p-11, + -0x1.f4fd3f4fd3f41p-11 + }, + { // Entry 256 + 0x1.f776c257a56b780187bf905e80418279p-9, + 0x1.f7767134f4c72p-9 + }, + { // Entry 257 + -0x1.f776c257a56b780187bf905e80418279p-9, + -0x1.f7767134f4c72p-9 + }, + { // Entry 258 + 0x1.f78e0512e112b1c915f33b6d0094cbdfp-11, + 0x1.f78dfffffffffp-11 + }, + { // Entry 259 + -0x1.f78e0512e112b1c915f33b6d0094cbdfp-11, + -0x1.f78dfffffffffp-11 + }, + { // Entry 260 + 0x1.fd1a4703ffc8e2c09ee2d3142d879d53p-3, + 0x1.f7fffffffffffp-3 + }, + { // Entry 261 + -0x1.fd1a4703ffc8e2c09ee2d3142d879d53p-3, + -0x1.f7fffffffffffp-3 + }, + { // Entry 262 + 0x1.fd2b1321689993d9e7a4f5cc42e417e0p-3, + 0x1.f8104d180ef13p-3 + }, + { // Entry 263 + -0x1.fd2b1321689993d9e7a4f5cc42e417e0p-3, + -0x1.f8104d180ef13p-3 + }, + { // Entry 264 + 0x1.fa8247c8342301fdbf919432600eef6bp-11, + 0x1.fa82429e54867p-11 + }, + { // Entry 265 + -0x1.fa8247c8342301fdbf919432600eef6bp-11, + -0x1.fa82429e54867p-11 + }, + { // Entry 266 + 0x1.f617a27e250ce1b06488e5167c0849a8p90, + 0x1.fdfffffffffffp5 + }, + { // Entry 267 + -0x1.f617a27e250ce1b06488e5167c0849a8p90, + -0x1.fdfffffffffffp5 + }, + { // Entry 268 + 0x1.fef54cde11851d4db7938ee57e080486p-7, + 0x1.feeffffffffffp-7 + }, + { // Entry 269 + -0x1.fef54cde11851d4db7938ee57e080486p-7, + -0x1.feeffffffffffp-7 + }, + { // Entry 270 + 0x1.0a8ddcf177d1eb7da9052d4b680c93e4p-1, + 0x1.ff8ffffffffffp-2 + }, + { // Entry 271 + -0x1.0a8ddcf177d1eb7da9052d4b680c93e4p-1, + -0x1.ff8ffffffffffp-2 + }, + { // Entry 272 + 0x1.ffb5499b99f503b876c9233146b88610p-6, + 0x1.ff9ffffffffffp-6 + }, + { // Entry 273 + -0x1.ffb5499b99f503b876c9233146b88610p-6, + -0x1.ff9ffffffffffp-6 + }, + { // Entry 274 + 0x1.ffd00553d57d8679faafbb417929037bp-11, + 0x1.ffcffffffffffp-11 + }, + { // Entry 275 + -0x1.ffd00553d57d8679faafbb417929037bp-11, + -0x1.ffcffffffffffp-11 + }, + { // Entry 276 + 0x1.738796c76ddd11a4fad67bda6a85c0a3p10, + 0x1.ffcffffffffffp2 + }, + { // Entry 277 + -0x1.738796c76ddd11a4fad67bda6a85c0a3p10, + -0x1.ffcffffffffffp2 + }, + { // Entry 278 + 0x1.3fd752cfca481ff79679f71c8aad6234p91, + 0x1.ffeffffffffffp5 + }, + { // Entry 279 + -0x1.3fd752cfca481ff79679f71c8aad6234p91, + -0x1.ffeffffffffffp5 + }, + { // Entry 280 + 0x1.fffc1154d51a88ed085860dce45cd0f6p-10, + 0x1.fffbfbfffffffp-10 + }, + { // Entry 281 + -0x1.fffc1154d51a88ed085860dce45cd0f6p-10, + -0x1.fffbfbfffffffp-10 + }, + { // Entry 282 + 0x1.0acb07d19f2eec122a06e05f2c4a0de4p-1, + 0x1.fffc7ffffffffp-2 + }, + { // Entry 283 + -0x1.0acb07d19f2eec122a06e05f2c4a0de4p-1, + -0x1.fffc7ffffffffp-2 + }, + { // Entry 284 + 0x1.00a9094ee88097ff3d5673552bc2eab6p-3, + 0x1.fffc7ffffffffp-4 + }, + { // Entry 285 + -0x1.00a9094ee88097ff3d5673552bc2eab6p-3, + -0x1.fffc7ffffffffp-4 + }, + { // Entry 286 + 0x1.7495e977202177ec68508f6f5a5b9165p10, + 0x1.fffe7ffffffffp2 + }, + { // Entry 287 + -0x1.7495e977202177ec68508f6f5a5b9165p10, + -0x1.fffe7ffffffffp2 + }, + { // Entry 288 + 0x1.b4a0165d618bc7fe4fd5aa6fcac302c1p4, + 0x1.fffefffffffffp1 + }, + { // Entry 289 + -0x1.b4a0165d618bc7fe4fd5aa6fcac302c1p4, + -0x1.fffefffffffffp1 + }, + { // Entry 290 + 0x1.95e4816b60a8d769724b586e4deb3b1bp183, + 0x1.fffffdfffffffp6 + }, + { // Entry 291 + -0x1.95e4816b60a8d769724b586e4deb3b1bp183, + -0x1.fffffdfffffffp6 + }, + { // Entry 292 + 0x1.1f43fcc441800800fcf1d836d2c62f72p45, + 0x1.fffffffff97d6p4 + }, + { // Entry 293 + -0x1.1f43fcc441800800fcf1d836d2c62f72p45, + -0x1.fffffffff97d6p4 + }, + { // Entry 294 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 295 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 296 + 0x1.9476504ba82057f69310608c30e76cebp737, + 0x1.ffffffffffffep8 + }, + { // Entry 297 + -0x1.9476504ba82057f69310608c30e76cebp737, + -0x1.ffffffffffffep8 + }, + { // Entry 298 + 0.0, + 0.0 + }, + { // Entry 299 + 0x1.24d1fdb0fdc49fa1ed2d33be6d840c75p-4, + 0x1.2492492492492p-4 + }, + { // Entry 300 + -0x1.24d1fdb0fdc49fa1ed2d33be6d840c75p-4, + -0x1.2492492492492p-4 + }, + { // Entry 301 + 0x1.25914d4754aeca5885ba953dbac88d8fp-3, + 0x1.2492492492492p-3 + }, + { // Entry 302 + -0x1.25914d4754aeca5885ba953dbac88d8fp-3, + -0x1.2492492492492p-3 + }, + { // Entry 303 + 0x1.ba3934de293068e82220c3704c5750b7p-3, + 0x1.b6db6db6db6dbp-3 + }, + { // Entry 304 + -0x1.ba3934de293068e82220c3704c5750b7p-3, + -0x1.b6db6db6db6dbp-3 + }, + { // Entry 305 + 0x1.28917a35f59b8990911b05edbc6f6ba1p-2, + 0x1.2492492492492p-2 + }, + { // Entry 306 + -0x1.28917a35f59b8990911b05edbc6f6ba1p-2, + -0x1.2492492492492p-2 + }, + { // Entry 307 + 0x1.7589dee6de0a2ec648852490e9ae54e2p-2, + 0x1.6db6db6db6db6p-2 + }, + { // Entry 308 + -0x1.7589dee6de0a2ec648852490e9ae54e2p-2, + -0x1.6db6db6db6db6p-2 + }, + { // Entry 309 + 0x1.c46a5bcd3c2c368c2591b8bba7e24256p-2, + 0x1.b6db6db6db6dap-2 + }, + { // Entry 310 + -0x1.c46a5bcd3c2c368c2591b8bba7e24256p-2, + -0x1.b6db6db6db6dap-2 + }, + { // Entry 311 + 0x1.0acd00fe63b95a9896032c78de2323c6p-1, + 0x1.ffffffffffffep-2 + }, + { // Entry 312 + -0x1.0acd00fe63b95a9896032c78de2323c6p-1, + -0x1.ffffffffffffep-2 + }, + { // Entry 313 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.0p-1 + }, + { // Entry 314 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.0p-1 + }, + { // Entry 315 + 0x1.34c1737f26250058df17aa0da89aa5fcp-1, + 0x1.2492492492492p-1 + }, + { // Entry 316 + -0x1.34c1737f26250058df17aa0da89aa5fcp-1, + -0x1.2492492492492p-1 + }, + { // Entry 317 + 0x1.604957b6e9223ab9f0acd5cd087d9d4bp-1, + 0x1.4924924924924p-1 + }, + { // Entry 318 + -0x1.604957b6e9223ab9f0acd5cd087d9d4bp-1, + -0x1.4924924924924p-1 + }, + { // Entry 319 + 0x1.8d9d8f1f9ecb929e09103f190149433dp-1, + 0x1.6db6db6db6db6p-1 + }, + { // Entry 320 + -0x1.8d9d8f1f9ecb929e09103f190149433dp-1, + -0x1.6db6db6db6db6p-1 + }, + { // Entry 321 + 0x1.bcf954b2503820857f4dbefa036f8e5ep-1, + 0x1.9249249249248p-1 + }, + { // Entry 322 + -0x1.bcf954b2503820857f4dbefa036f8e5ep-1, + -0x1.9249249249248p-1 + }, + { // Entry 323 + 0x1.ee9a8a4c3c72bcabcb7b2924d314efa2p-1, + 0x1.b6db6db6db6dap-1 + }, + { // Entry 324 + -0x1.ee9a8a4c3c72bcabcb7b2924d314efa2p-1, + -0x1.b6db6db6db6dap-1 + }, + { // Entry 325 + 0x1.116104c5878d4cf53fe2c1f3896ec672p0, + 0x1.db6db6db6db6cp-1 + }, + { // Entry 326 + -0x1.116104c5878d4cf53fe2c1f3896ec672p0, + -0x1.db6db6db6db6cp-1 + }, + { // Entry 327 + 0x1.2cd9fc44eb980cf78cf76e89b69a3e88p0, + 0x1.ffffffffffffep-1 + }, + { // Entry 328 + -0x1.2cd9fc44eb980cf78cf76e89b69a3e88p0, + -0x1.ffffffffffffep-1 + }, + { // Entry 329 + 0.0, + 0.0 + }, + { // Entry 330 + 0x1.18e1e0472274e67654d0f855c36e861dp-6, + 0x1.18de5ab277f45p-6 + }, + { // Entry 331 + -0x1.18e1e0472274e67654d0f855c36e861dp-6, + -0x1.18de5ab277f45p-6 + }, + { // Entry 332 + 0x1.18ec712dd49a7583cfe81c5dccfd99b4p-5, + 0x1.18de5ab277f45p-5 + }, + { // Entry 333 + -0x1.18ec712dd49a7583cfe81c5dccfd99b4p-5, + -0x1.18de5ab277f45p-5 + }, + { // Entry 334 + 0x1.a57d14d0fcc06c297b511eb105c39b51p-5, + 0x1.a54d880bb3ee8p-5 + }, + { // Entry 335 + -0x1.a57d14d0fcc06c297b511eb105c39b51p-5, + -0x1.a54d880bb3ee8p-5 + }, + { // Entry 336 + 0x1.1916b72b2648d65f042e701b14a371ddp-4, + 0x1.18de5ab277f45p-4 + }, + { // Entry 337 + -0x1.1916b72b2648d65f042e701b14a371ddp-4, + -0x1.18de5ab277f45p-4 + }, + { // Entry 338 + 0x1.5f8409b4e2d18ada55848296f71484b2p-4, + 0x1.5f15f15f15f16p-4 + }, + { // Entry 339 + -0x1.5f8409b4e2d18ada55848296f71484b2p-4, + -0x1.5f15f15f15f16p-4 + }, + { // Entry 340 + 0x1.a60bce73024b0ef37175d31aa5a941e6p-4, + 0x1.a54d880bb3ee7p-4 + }, + { // Entry 341 + -0x1.a60bce73024b0ef37175d31aa5a941e6p-4, + -0x1.a54d880bb3ee7p-4 + }, + { // Entry 342 + 0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 343 + -0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 344 + 0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 345 + -0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 346 + 0x1.02243ce0549f980dc7c7d32c56687b61p-3, + 0x1.01767dce434aap-3 + }, + { // Entry 347 + -0x1.02243ce0549f980dc7c7d32c56687b61p-3, + -0x1.01767dce434aap-3 + }, + { // Entry 348 + 0x1.0df0f841fd4a69998703d2ffbf0e1544p-3, + 0x1.0d2a6c405d9f8p-3 + }, + { // Entry 349 + -0x1.0df0f841fd4a69998703d2ffbf0e1544p-3, + -0x1.0d2a6c405d9f8p-3 + }, + { // Entry 350 + 0x1.19bff54d4d1ca252438bfcad4485bbeep-3, + 0x1.18de5ab277f46p-3 + }, + { // Entry 351 + -0x1.19bff54d4d1ca252438bfcad4485bbeep-3, + -0x1.18de5ab277f46p-3 + }, + { // Entry 352 + 0x1.25914d4754aeeaac41a8543c0e5f84bfp-3, + 0x1.2492492492494p-3 + }, + { // Entry 353 + -0x1.25914d4754aeeaac41a8543c0e5f84bfp-3, + -0x1.2492492492494p-3 + }, + { // Entry 354 + 0x1.3165197a2ed9cb0dc90f9bb136a99057p-3, + 0x1.30463796ac9e2p-3 + }, + { // Entry 355 + -0x1.3165197a2ed9cb0dc90f9bb136a99057p-3, + -0x1.30463796ac9e2p-3 + }, + { // Entry 356 + 0x1.3d3b733536d3f9e48c1626776c18450fp-3, + 0x1.3bfa2608c6f30p-3 + }, + { // Entry 357 + -0x1.3d3b733536d3f9e48c1626776c18450fp-3, + -0x1.3bfa2608c6f30p-3 + }, + { // Entry 358 + 0x1.491473cd3e5bb6011680e1c412b75226p-3, + 0x1.47ae147ae147bp-3 + }, + { // Entry 359 + -0x1.491473cd3e5bb6011680e1c412b75226p-3, + -0x1.47ae147ae147bp-3 + }, + { // Entry 360 + 0x1.491473cd3e5bb6011680e1c412b75226p-3, + 0x1.47ae147ae147bp-3 + }, + { // Entry 361 + -0x1.491473cd3e5bb6011680e1c412b75226p-3, + -0x1.47ae147ae147bp-3 + }, + { // Entry 362 + 0x1.227b2f27e6efe03d72b2c311d29c7884p-2, + 0x1.1eb851eb851ecp-2 + }, + { // Entry 363 + -0x1.227b2f27e6efe03d72b2c311d29c7884p-2, + -0x1.1eb851eb851ecp-2 + }, + { // Entry 364 + 0x1.a49c41f850ed2680ee94da3183c89a52p-2, + 0x1.999999999999ap-2 + }, + { // Entry 365 + -0x1.a49c41f850ed2680ee94da3183c89a52p-2, + -0x1.999999999999ap-2 + }, + { // Entry 366 + 0x1.1666dd8c17ac9986d3cd4018364fc2ecp-1, + 0x1.0a3d70a3d70a4p-1 + }, + { // Entry 367 + -0x1.1666dd8c17ac9986d3cd4018364fc2ecp-1, + -0x1.0a3d70a3d70a4p-1 + }, + { // Entry 368 + 0x1.5e832275691f29c754a69f08a0bda060p-1, + 0x1.47ae147ae147bp-1 + }, + { // Entry 369 + -0x1.5e832275691f29c754a69f08a0bda060p-1, + -0x1.47ae147ae147bp-1 + }, + { // Entry 370 + 0x1.abad155b6751a697130d8faafe9d512cp-1, + 0x1.851eb851eb852p-1 + }, + { // Entry 371 + -0x1.abad155b6751a697130d8faafe9d512cp-1, + -0x1.851eb851eb852p-1 + }, + { // Entry 372 + 0x1.ff0182a062c855926fe6373f9b3afd58p-1, + 0x1.c28f5c28f5c29p-1 + }, + { // Entry 373 + -0x1.ff0182a062c855926fe6373f9b3afd58p-1, + -0x1.c28f5c28f5c29p-1 + }, + { // Entry 374 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.0p0 + }, + { // Entry 375 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.0p0 + }, + { // Entry 376 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.0p0 + }, + { // Entry 377 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.0p0 + }, + { // Entry 378 + 0x1.c034a7cd6ce9ade4f611fdd05d109cf6p7, + 0x1.86bc88cbf1b67p2 + }, + { // Entry 379 + -0x1.c034a7cd6ce9ade4f611fdd05d109cf6p7, + -0x1.86bc88cbf1b67p2 + }, + { // Entry 380 + 0x1.20af6cb9859eb23e91e63c28d18b0d0ap15, + 0x1.66bc88cbf1b67p3 + }, + { // Entry 381 + -0x1.20af6cb9859eb23e91e63c28d18b0d0ap15, + -0x1.66bc88cbf1b67p3 + }, + { // Entry 382 + 0x1.73e096cf57afce7adf9f1b2a216a5db5p22, + 0x1.050d6698f548dp4 + }, + { // Entry 383 + -0x1.73e096cf57afce7adf9f1b2a216a5db5p22, + -0x1.050d6698f548dp4 + }, + { // Entry 384 + 0x1.df0b13a84513e2ceb180507c54c5b904p29, + 0x1.56bc88cbf1b67p4 + }, + { // Entry 385 + -0x1.df0b13a84513e2ceb180507c54c5b904p29, + -0x1.56bc88cbf1b67p4 + }, + { // Entry 386 + 0x1.348bc1e018bc593ce2f9d1bc0f37e14fp37, + 0x1.a86baafeee241p4 + }, + { // Entry 387 + -0x1.348bc1e018bc593ce2f9d1bc0f37e14fp37, + -0x1.a86baafeee241p4 + }, + { // Entry 388 + 0x1.8d761a3398942448ea796c65748a869ep44, + 0x1.fa1acd31ea91bp4 + }, + { // Entry 389 + -0x1.8d761a3398942448ea796c65748a869ep44, + -0x1.fa1acd31ea91bp4 + }, + { // Entry 390 + 0x1.ffffffffffff9ede67b7a30e661c79e2p51, + 0x1.25e4f7b2737fap5 + }, + { // Entry 391 + -0x1.ffffffffffff9ede67b7a30e661c79e2p51, + -0x1.25e4f7b2737fap5 + }, + { // Entry 392 + 0x1.fffffffdfffeca86c3885786a2b2306fp14, + 0x1.62e42fefa39eep3 + }, + { // Entry 393 + -0x1.fffffffdfffeca86c3885786a2b2306fp14, + -0x1.62e42fefa39eep3 + }, + { // Entry 394 + 0x1.fffffffdffffca86c389578647f59234p14, + 0x1.62e42fefa39efp3 + }, + { // Entry 395 + -0x1.fffffffdffffca86c389578647f59234p14, + -0x1.62e42fefa39efp3 + }, + { // Entry 396 + 0x1.fffffffe0000ca86c38a57866d38f3f8p14, + 0x1.62e42fefa39f0p3 + }, + { // Entry 397 + -0x1.fffffffe0000ca86c38a57866d38f3f8p14, + -0x1.62e42fefa39f0p3 + }, + { // Entry 398 + 0x1.fffdffffffff6542c70828449eb21cd0p6, + 0x1.62e42fefa39eep2 + }, + { // Entry 399 + -0x1.fffdffffffff6542c70828449eb21cd0p6, + -0x1.62e42fefa39eep2 + }, + { // Entry 400 + 0x1.fffdffffffffe5434708284488030bf1p6, + 0x1.62e42fefa39efp2 + }, + { // Entry 401 + -0x1.fffdffffffffe5434708284488030bf1p6, + -0x1.62e42fefa39efp2 + }, + { // Entry 402 + 0x1.fffe000000006543c70828449153db11p6, + 0x1.62e42fefa39f0p2 + }, + { // Entry 403 + -0x1.fffe000000006543c70828449153db11p6, + -0x1.62e42fefa39f0p2 + }, + { // Entry 404 + 0x1.fdffffffffffb254529345a3261b51eep2, + 0x1.62e42fefa39eep1 + }, + { // Entry 405 + -0x1.fdffffffffffb254529345a3261b51eep2, + -0x1.62e42fefa39eep1 + }, + { // Entry 406 + 0x1.fdfffffffffff294529345a3207533d4p2, + 0x1.62e42fefa39efp1 + }, + { // Entry 407 + -0x1.fdfffffffffff294529345a3207533d4p2, + -0x1.62e42fefa39efp1 + }, + { // Entry 408 + 0x1.fe000000000032d4529345a322c715bap2, + 0x1.62e42fefa39f0p1 + }, + { // Entry 409 + -0x1.fe000000000032d4529345a322c715bap2, + -0x1.62e42fefa39f0p1 + }, + { // Entry 410 + 0x1.dfffffffffffd6e5e5f844b9f096239ep0, + 0x1.62e42fefa39eep0 + }, + { // Entry 411 + -0x1.dfffffffffffd6e5e5f844b9f096239ep0, + -0x1.62e42fefa39eep0 + }, + { // Entry 412 + 0x1.dffffffffffff8e5e5f844b9ef41e04cp0, + 0x1.62e42fefa39efp0 + }, + { // Entry 413 + -0x1.dffffffffffff8e5e5f844b9ef41e04cp0, + -0x1.62e42fefa39efp0 + }, + { // Entry 414 + 0x1.e000000000001ae5e5f844b9efcd9cfbp0, + 0x1.62e42fefa39f0p0 + }, + { // Entry 415 + -0x1.e000000000001ae5e5f844b9efcd9cfbp0, + -0x1.62e42fefa39f0p0 + }, + { // Entry 416 + 0x1.7fffffffffffe7d28746bf03f666bce4p-1, + 0x1.62e42fefa39eep-1 + }, + { // Entry 417 + -0x1.7fffffffffffe7d28746bf03f666bce4p-1, + -0x1.62e42fefa39eep-1 + }, + { // Entry 418 + 0x1.7ffffffffffffbd28746bf03f622af6ep-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 419 + -0x1.7ffffffffffffbd28746bf03f622af6ep-1, + -0x1.62e42fefa39efp-1 + }, + { // Entry 420 + 0x1.8000000000000fd28746bf03f63ea1f7p-1, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 421 + -0x1.8000000000000fd28746bf03f63ea1f7p-1, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 422 + 0x1.6a09e667f3bcb484c2238ce481384c44p-2, + 0x1.62e42fefa39eep-2 + }, + { // Entry 423 + -0x1.6a09e667f3bcb484c2238ce481384c44p-2, + -0x1.62e42fefa39eep-2 + }, + { // Entry 424 + 0x1.6a09e667f3bcc57d38f06c515a94aa60p-2, + 0x1.62e42fefa39efp-2 + }, + { // Entry 425 + -0x1.6a09e667f3bcc57d38f06c515a94aa60p-2, + -0x1.62e42fefa39efp-2 + }, + { // Entry 426 + 0x1.6a09e667f3bcd675afbd4bbe3407a91bp-2, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 427 + -0x1.6a09e667f3bcd675afbd4bbe3407a91bp-2, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 428 + 0x1.64ab8f61134f8c07335ae0143f1aa9e7p-3, + 0x1.62e42fefa39eep-3 + }, + { // Entry 429 + -0x1.64ab8f61134f8c07335ae0143f1aa9e7p-3, + -0x1.62e42fefa39eep-3 + }, + { // Entry 430 + 0x1.64ab8f61134f9c44da464fa4b5054cc6p-3, + 0x1.62e42fefa39efp-3 + }, + { // Entry 431 + -0x1.64ab8f61134f9c44da464fa4b5054cc6p-3, + -0x1.62e42fefa39efp-3 + }, + { // Entry 432 + 0x1.64ab8f61134fac828131bf352af58253p-3, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 433 + -0x1.64ab8f61134fac828131bf352af58253p-3, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 434 + 0x1.6355e6ffbf9b918f1018c6864c912c0bp-4, + 0x1.62e42fefa39eep-4 + }, + { // Entry 435 + -0x1.6355e6ffbf9b918f1018c6864c912c0bp-4, + -0x1.62e42fefa39eep-4 + }, + { // Entry 436 + 0x1.6355e6ffbf9ba19e726e44182bc81666p-4, + 0x1.62e42fefa39efp-4 + }, + { // Entry 437 + -0x1.6355e6ffbf9ba19e726e44182bc81666p-4, + -0x1.62e42fefa39efp-4 + }, + { // Entry 438 + 0x1.6355e6ffbf9bb1add4c3c1aa0b006418p-4, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 439 + -0x1.6355e6ffbf9bb1add4c3c1aa0b006418p-4, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 440 + 0x1.63009ba740a28c74c5e39abbcb6d3e54p-5, + 0x1.62e42fefa39eep-5 + }, + { // Entry 441 + -0x1.63009ba740a28c74c5e39abbcb6d3e54p-5, + -0x1.62e42fefa39eep-5 + }, + { // Entry 442 + 0x1.63009ba740a29c789e02c0a4897fafa4p-5, + 0x1.62e42fefa39efp-5 + }, + { // Entry 443 + -0x1.63009ba740a29c789e02c0a4897fafa4p-5, + -0x1.62e42fefa39efp-5 + }, + { // Entry 444 + 0x1.63009ba740a2ac7c7621e68d479279b3p-5, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 445 + -0x1.63009ba740a2ac7c7621e68d479279b3p-5, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 446 + 0x1.62eb4abcc5a7fb2748b0114da83216c8p-6, + 0x1.62e42fefa39eep-6 + }, + { // Entry 447 + -0x1.62eb4abcc5a7fb2748b0114da83216c8p-6, + -0x1.62e42fefa39eep-6 + }, + { // Entry 448 + 0x1.62eb4abcc5a80b283eb077a1b2694ed2p-6, + 0x1.62e42fefa39efp-6 + }, + { // Entry 449 + -0x1.62eb4abcc5a80b283eb077a1b2694ed2p-6, + -0x1.62e42fefa39efp-6 + }, + { // Entry 450 + 0x1.62eb4abcc5a81b2934b0ddf5bca09d0bp-6, + 0x1.62e42fefa39f0p-6 + }, + { // Entry 451 + -0x1.62eb4abcc5a81b2934b0ddf5bca09d0bp-6, + -0x1.62e42fefa39f0p-6 + }, + { // Entry 452 + -0x1.000000000000ca85c3898cffd1be6e61p31, + -0x1.62e42fefa39f0p4 + }, + { // Entry 453 + 0x1.000000000000ca85c3898cffd1be6e61p31, + 0x1.62e42fefa39f0p4 + }, + { // Entry 454 + -0x1.ffffffffffff950b871319ff0e6d55b0p30, + -0x1.62e42fefa39efp4 + }, + { // Entry 455 + 0x1.ffffffffffff950b871319ff0e6d55b0p30, + 0x1.62e42fefa39efp4 + }, + { // Entry 456 + -0x1.fffffffffffd950b87131a00795dce9dp30, + -0x1.62e42fefa39eep4 + }, + { // Entry 457 + 0x1.fffffffffffd950b87131a00795dce9dp30, + 0x1.62e42fefa39eep4 + }, + { // Entry 458 + -0x1.fffffffe0000ca86c38a57866d38f3f8p14, + -0x1.62e42fefa39f0p3 + }, + { // Entry 459 + 0x1.fffffffe0000ca86c38a57866d38f3f8p14, + 0x1.62e42fefa39f0p3 + }, + { // Entry 460 + -0x1.fffffffdffffca86c389578647f59234p14, + -0x1.62e42fefa39efp3 + }, + { // Entry 461 + 0x1.fffffffdffffca86c389578647f59234p14, + 0x1.62e42fefa39efp3 + }, + { // Entry 462 + -0x1.fffffffdfffeca86c3885786a2b2306fp14, + -0x1.62e42fefa39eep3 + }, + { // Entry 463 + 0x1.fffffffdfffeca86c3885786a2b2306fp14, + 0x1.62e42fefa39eep3 + }, + { // Entry 464 + -0x1.fffe000000006543c70828449153db11p6, + -0x1.62e42fefa39f0p2 + }, + { // Entry 465 + 0x1.fffe000000006543c70828449153db11p6, + 0x1.62e42fefa39f0p2 + }, + { // Entry 466 + -0x1.fffdffffffffe5434708284488030bf1p6, + -0x1.62e42fefa39efp2 + }, + { // Entry 467 + 0x1.fffdffffffffe5434708284488030bf1p6, + 0x1.62e42fefa39efp2 + }, + { // Entry 468 + -0x1.fffdffffffff6542c70828449eb21cd0p6, + -0x1.62e42fefa39eep2 + }, + { // Entry 469 + 0x1.fffdffffffff6542c70828449eb21cd0p6, + 0x1.62e42fefa39eep2 + }, + { // Entry 470 + -0x1.fe000000000032d4529345a322c715bap2, + -0x1.62e42fefa39f0p1 + }, + { // Entry 471 + 0x1.fe000000000032d4529345a322c715bap2, + 0x1.62e42fefa39f0p1 + }, + { // Entry 472 + -0x1.fdfffffffffff294529345a3207533d4p2, + -0x1.62e42fefa39efp1 + }, + { // Entry 473 + 0x1.fdfffffffffff294529345a3207533d4p2, + 0x1.62e42fefa39efp1 + }, + { // Entry 474 + -0x1.fdffffffffffb254529345a3261b51eep2, + -0x1.62e42fefa39eep1 + }, + { // Entry 475 + 0x1.fdffffffffffb254529345a3261b51eep2, + 0x1.62e42fefa39eep1 + }, + { // Entry 476 + -0x1.e000000000001ae5e5f844b9efcd9cfbp0, + -0x1.62e42fefa39f0p0 + }, + { // Entry 477 + 0x1.e000000000001ae5e5f844b9efcd9cfbp0, + 0x1.62e42fefa39f0p0 + }, + { // Entry 478 + -0x1.dffffffffffff8e5e5f844b9ef41e04cp0, + -0x1.62e42fefa39efp0 + }, + { // Entry 479 + 0x1.dffffffffffff8e5e5f844b9ef41e04cp0, + 0x1.62e42fefa39efp0 + }, + { // Entry 480 + -0x1.dfffffffffffd6e5e5f844b9f096239ep0, + -0x1.62e42fefa39eep0 + }, + { // Entry 481 + 0x1.dfffffffffffd6e5e5f844b9f096239ep0, + 0x1.62e42fefa39eep0 + }, + { // Entry 482 + -0x1.8000000000000fd28746bf03f63ea1f7p-1, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 483 + 0x1.8000000000000fd28746bf03f63ea1f7p-1, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 484 + -0x1.7ffffffffffffbd28746bf03f622af6ep-1, + -0x1.62e42fefa39efp-1 + }, + { // Entry 485 + 0x1.7ffffffffffffbd28746bf03f622af6ep-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 486 + -0x1.7fffffffffffe7d28746bf03f666bce4p-1, + -0x1.62e42fefa39eep-1 + }, + { // Entry 487 + 0x1.7fffffffffffe7d28746bf03f666bce4p-1, + 0x1.62e42fefa39eep-1 + }, + { // Entry 488 + -0x1.6a09e667f3bcd675afbd4bbe3407a91bp-2, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 489 + 0x1.6a09e667f3bcd675afbd4bbe3407a91bp-2, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 490 + -0x1.6a09e667f3bcc57d38f06c515a94aa60p-2, + -0x1.62e42fefa39efp-2 + }, + { // Entry 491 + 0x1.6a09e667f3bcc57d38f06c515a94aa60p-2, + 0x1.62e42fefa39efp-2 + }, + { // Entry 492 + -0x1.6a09e667f3bcb484c2238ce481384c44p-2, + -0x1.62e42fefa39eep-2 + }, + { // Entry 493 + 0x1.6a09e667f3bcb484c2238ce481384c44p-2, + 0x1.62e42fefa39eep-2 + }, + { // Entry 494 + -0x1.64ab8f61134fac828131bf352af58253p-3, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 495 + 0x1.64ab8f61134fac828131bf352af58253p-3, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 496 + -0x1.64ab8f61134f9c44da464fa4b5054cc6p-3, + -0x1.62e42fefa39efp-3 + }, + { // Entry 497 + 0x1.64ab8f61134f9c44da464fa4b5054cc6p-3, + 0x1.62e42fefa39efp-3 + }, + { // Entry 498 + -0x1.64ab8f61134f8c07335ae0143f1aa9e7p-3, + -0x1.62e42fefa39eep-3 + }, + { // Entry 499 + 0x1.64ab8f61134f8c07335ae0143f1aa9e7p-3, + 0x1.62e42fefa39eep-3 + }, + { // Entry 500 + -0x1.6355e6ffbf9bb1add4c3c1aa0b006418p-4, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 501 + 0x1.6355e6ffbf9bb1add4c3c1aa0b006418p-4, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 502 + -0x1.6355e6ffbf9ba19e726e44182bc81666p-4, + -0x1.62e42fefa39efp-4 + }, + { // Entry 503 + 0x1.6355e6ffbf9ba19e726e44182bc81666p-4, + 0x1.62e42fefa39efp-4 + }, + { // Entry 504 + -0x1.6355e6ffbf9b918f1018c6864c912c0bp-4, + -0x1.62e42fefa39eep-4 + }, + { // Entry 505 + 0x1.6355e6ffbf9b918f1018c6864c912c0bp-4, + 0x1.62e42fefa39eep-4 + }, + { // Entry 506 + -0x1.63009ba740a2ac7c7621e68d479279b3p-5, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 507 + 0x1.63009ba740a2ac7c7621e68d479279b3p-5, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 508 + -0x1.63009ba740a29c789e02c0a4897fafa4p-5, + -0x1.62e42fefa39efp-5 + }, + { // Entry 509 + 0x1.63009ba740a29c789e02c0a4897fafa4p-5, + 0x1.62e42fefa39efp-5 + }, + { // Entry 510 + -0x1.63009ba740a28c74c5e39abbcb6d3e54p-5, + -0x1.62e42fefa39eep-5 + }, + { // Entry 511 + 0x1.63009ba740a28c74c5e39abbcb6d3e54p-5, + 0x1.62e42fefa39eep-5 + }, + { // Entry 512 + 0x1.bfeb3206958461e0cd949b740397374bp262, + 0x1.6db6db6db6db7p7 + }, + { // Entry 513 + -0x1.bfeb3206958461e0cd949b740397374bp262, + -0x1.6db6db6db6db7p7 + }, + { // Entry 514 + 0x1.ee4adffc4816c196cc85c579b49b713cp341, + 0x1.db6db6db6db6ep7 + }, + { // Entry 515 + -0x1.ee4adffc4816c196cc85c579b49b713cp341, + -0x1.db6db6db6db6ep7 + }, + { // Entry 516 + 0x1.10bbd304e4d53317191db80168f41e88p421, + 0x1.2492492492492p8 + }, + { // Entry 517 + -0x1.10bbd304e4d53317191db80168f41e88p421, + -0x1.2492492492492p8 + }, + { // Entry 518 + 0x1.2cf8621aa3eacbce3c5c6aac7a52e872p500, + 0x1.5b6db6db6db6dp8 + }, + { // Entry 519 + -0x1.2cf8621aa3eacbce3c5c6aac7a52e872p500, + -0x1.5b6db6db6db6dp8 + }, + { // Entry 520 + 0x1.4c21539572c19b59fc629129d307d9b1p579, + 0x1.9249249249248p8 + }, + { // Entry 521 + -0x1.4c21539572c19b59fc629129d307d9b1p579, + -0x1.9249249249248p8 + }, + { // Entry 522 + 0x1.6e8422b4db33b6293cd44cd1c65585b2p658, + 0x1.c924924924923p8 + }, + { // Entry 523 + -0x1.6e8422b4db33b6293cd44cd1c65585b2p658, + -0x1.c924924924923p8 + }, + { // Entry 524 + 0x1.6dde4c855f3397cd05f383e2ad5ef219p935, + 0x1.4492492492492p9 + }, + { // Entry 525 + -0x1.6dde4c855f3397cd05f383e2ad5ef219p935, + -0x1.4492492492492p9 + }, + { // Entry 526 + 0x1.a178d253fc35a0b9802d9cd5f67cb7efp948, + 0x1.4924924924924p9 + }, + { // Entry 527 + -0x1.a178d253fc35a0b9802d9cd5f67cb7efp948, + -0x1.4924924924924p9 + }, + { // Entry 528 + 0x1.dc5a9c97ea13a0062828386dc2460ac2p961, + 0x1.4db6db6db6db6p9 + }, + { // Entry 529 + -0x1.dc5a9c97ea13a0062828386dc2460ac2p961, + -0x1.4db6db6db6db6p9 + }, + { // Entry 530 + 0x1.0fc53c727155d9dd001733d4258e3203p975, + 0x1.5249249249248p9 + }, + { // Entry 531 + -0x1.0fc53c727155d9dd001733d4258e3203p975, + -0x1.5249249249248p9 + }, + { // Entry 532 + 0x1.361a22f5879a158106bee1e89ea2a4d7p988, + 0x1.56db6db6db6dap9 + }, + { // Entry 533 + -0x1.361a22f5879a158106bee1e89ea2a4d7p988, + -0x1.56db6db6db6dap9 + }, + { // Entry 534 + 0x1.61d716eca93811f8d8288649dc2cee65p1001, + 0x1.5b6db6db6db6cp9 + }, + { // Entry 535 + -0x1.61d716eca93811f8d8288649dc2cee65p1001, + -0x1.5b6db6db6db6cp9 + }, + { // Entry 536 + HUGE_VAL, + 0x1.76db6db6db6dbp9 + }, + { // Entry 537 + -HUGE_VAL, + -0x1.76db6db6db6dbp9 + }, + { // Entry 538 + HUGE_VAL, + 0x1.8db6db6db6db6p9 + }, + { // Entry 539 + -HUGE_VAL, + -0x1.8db6db6db6db6p9 + }, + { // Entry 540 + HUGE_VAL, + 0x1.a492492492491p9 + }, + { // Entry 541 + -HUGE_VAL, + -0x1.a492492492491p9 + }, + { // Entry 542 + HUGE_VAL, + 0x1.bb6db6db6db6cp9 + }, + { // Entry 543 + -HUGE_VAL, + -0x1.bb6db6db6db6cp9 + }, + { // Entry 544 + HUGE_VAL, + 0x1.d249249249247p9 + }, + { // Entry 545 + -HUGE_VAL, + -0x1.d249249249247p9 + }, + { // Entry 546 + HUGE_VAL, + 0x1.e924924924922p9 + }, + { // Entry 547 + -HUGE_VAL, + -0x1.e924924924922p9 + }, + { // Entry 548 + -0x1.93bf4ec282efb320a57f9ae02e01ae51p1014, + -0x1.6p9 + }, + { // Entry 549 + 0x1.93bf4ec282efb320a57f9ae02e01ae51p1014, + 0x1.6p9 + }, + { // Entry 550 + -0x1.61d716eca99087be9352df5d131a5dd2p1001, + -0x1.5b6db6db6db6ep9 + }, + { // Entry 551 + 0x1.61d716eca99087be9352df5d131a5dd2p1001, + 0x1.5b6db6db6db6ep9 + }, + { // Entry 552 + -0x1.361a22f587e79c09c420d21ecffc00cdp988, + -0x1.56db6db6db6dcp9 + }, + { // Entry 553 + 0x1.361a22f587e79c09c420d21ecffc00cdp988, + 0x1.56db6db6db6dcp9 + }, + { // Entry 554 + -0x1.0fc53c727199cb2c1cb391c8c6b1cb5bp975, + -0x1.524924924924ap9 + }, + { // Entry 555 + 0x1.0fc53c727199cb2c1cb391c8c6b1cb5bp975, + 0x1.524924924924ap9 + }, + { // Entry 556 + -0x1.dc5a9c97ea8ab6ad4e22cc3898b4d422p961, + -0x1.4db6db6db6db8p9 + }, + { // Entry 557 + 0x1.dc5a9c97ea8ab6ad4e22cc3898b4d422p961, + 0x1.4db6db6db6db8p9 + }, + { // Entry 558 + -0x1.a178d253fc9dfeee152cb749eb6f6339p948, + -0x1.4924924924926p9 + }, + { // Entry 559 + 0x1.a178d253fc9dfeee152cb749eb6f6339p948, + 0x1.4924924924926p9 + }, + { // Entry 560 + -0x1.6dde4c855f8f0f60274b5c37930499f5p935, + -0x1.4492492492494p9 + }, + { // Entry 561 + 0x1.6dde4c855f8f0f60274b5c37930499f5p935, + 0x1.4492492492494p9 + }, + { // Entry 562 + -0x1.40a4b9c271c8c4271fbcc3df336e0edbp922, + -0x1.4000000000002p9 + }, + { // Entry 563 + 0x1.40a4b9c271c8c4271fbcc3df336e0edbp922, + 0x1.4000000000002p9 + }, + { // Entry 564 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 565 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 566 + -0.0, + -0.0 + }, + { // Entry 567 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 568 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 569 + 0x1.ecb353d02d5fb03947e320c5bccaac3fp-4, + 0x1.eb851eb851eb7p-4 + }, + { // Entry 570 + -0x1.ecb353d02d5fb03947e320c5bccaac3fp-4, + -0x1.eb851eb851eb7p-4 + }, + { // Entry 571 + 0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + 0x1.eb851eb851eb8p-4 + }, + { // Entry 572 + -0x1.ecb353d02d5fc056ceb2ce9e08b8f8d5p-4, + -0x1.eb851eb851eb8p-4 + }, + { // Entry 573 + 0x1.ecb353d02d5fd07455827c7654a9321fp-4, + 0x1.eb851eb851eb9p-4 + }, + { // Entry 574 + -0x1.ecb353d02d5fd07455827c7654a9321fp-4, + -0x1.eb851eb851eb9p-4 + }, + { // Entry 575 + 0x1.0acd00fe63b9639df6c641ed463c4ca0p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 576 + -0x1.0acd00fe63b9639df6c641ed463c4ca0p-1, + -0x1.fffffffffffffp-2 + }, + { // Entry 577 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.0p-1 + }, + { // Entry 578 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.0p-1 + }, + { // Entry 579 + 0x1.0acd00fe63b97eae190f824a7eebd40dp-1, + 0x1.0000000000001p-1 + }, + { // Entry 580 + -0x1.0acd00fe63b97eae190f824a7eebd40dp-1, + -0x1.0000000000001p-1 + }, + { // Entry 581 + 0x1.2cd9fc44eb98194fc7a05b845e4f82b3p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 582 + -0x1.2cd9fc44eb98194fc7a05b845e4f82b3p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 583 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.0p0 + }, + { // Entry 584 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.0p0 + }, + { // Entry 585 + 0x1.2cd9fc44eb983e58779b22745732962dp0, + 0x1.0000000000001p0 + }, + { // Entry 586 + -0x1.2cd9fc44eb983e58779b22745732962dp0, + -0x1.0000000000001p0 + }, + { // Entry 587 + 0x1.ab5adb9c435e4cbe72415713a64f66a1p30, + 0x1.5ffffffffffffp4 + }, + { // Entry 588 + -0x1.ab5adb9c435e4cbe72415713a64f66a1p30, + -0x1.5ffffffffffffp4 + }, + { // Entry 589 + 0x1.ab5adb9c435ff8194ddd9a72c8c01183p30, + 0x1.6p4 + }, + { // Entry 590 + -0x1.ab5adb9c435ff8194ddd9a72c8c01183p30, + -0x1.6p4 + }, + { // Entry 591 + 0x1.ab5adb9c4361a3742979ddd3968b9801p30, + 0x1.6000000000001p4 + }, + { // Entry 592 + -0x1.ab5adb9c4361a3742979ddd3968b9801p30, + -0x1.6000000000001p4 + }, + { // Entry 593 + 0x1.226af33b1fdae7ec593b8b45e80e54d2p32, + 0x1.6ffffffffffffp4 + }, + { // Entry 594 + -0x1.226af33b1fdae7ec593b8b45e80e54d2p32, + -0x1.6ffffffffffffp4 + }, + { // Entry 595 + 0x1.226af33b1fdc0a574c76ab2161309880p32, + 0x1.7p4 + }, + { // Entry 596 + -0x1.226af33b1fdc0a574c76ab2161309880p32, + -0x1.7p4 + }, + { // Entry 597 + 0x1.226af33b1fdd2cc23fb1cafdfcbdcf69p32, + 0x1.7000000000001p4 + }, + { // Entry 598 + -0x1.226af33b1fdd2cc23fb1cafdfcbdcf69p32, + -0x1.7000000000001p4 + }, + { // Entry 599 + 0x1.fffffffffffb9ede67b7a313285faa73p51, + 0x1.25e4f7b2737f9p5 + }, + { // Entry 600 + -0x1.fffffffffffb9ede67b7a313285faa73p51, + -0x1.25e4f7b2737f9p5 + }, + { // Entry 601 + 0x1.ffffffffffff9ede67b7a30e661c79e2p51, + 0x1.25e4f7b2737fap5 + }, + { // Entry 602 + -0x1.ffffffffffff9ede67b7a30e661c79e2p51, + -0x1.25e4f7b2737fap5 + }, + { // Entry 603 + 0x1.000000000001cf6f33dbd188d1eca4a9p52, + 0x1.25e4f7b2737fbp5 + }, + { // Entry 604 + -0x1.000000000001cf6f33dbd188d1eca4a9p52, + -0x1.25e4f7b2737fbp5 + }, + { // Entry 605 + 0x1.6a09e667f3b73b2e9b132d5142f3e5b3p52, + 0x1.28aac01252c6cp5 + }, + { // Entry 606 + -0x1.6a09e667f3b73b2e9b132d5142f3e5b3p52, + -0x1.28aac01252c6cp5 + }, + { // Entry 607 + 0x1.6a09e667f3ba0f4267e314c28d64e8a9p52, + 0x1.28aac01252c6dp5 + }, + { // Entry 608 + -0x1.6a09e667f3ba0f4267e314c28d64e8a9p52, + -0x1.28aac01252c6dp5 + }, + { // Entry 609 + 0x1.6a09e667f3bce35634b2fc397ffd853fp52, + 0x1.28aac01252c6ep5 + }, + { // Entry 610 + -0x1.6a09e667f3bce35634b2fc397ffd853fp52, + -0x1.28aac01252c6ep5 + }, + { // Entry 611 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + 0x1.633ce8fb9f87cp9 + }, + { // Entry 612 + -0x1.ffffffffff93ae594e9be425a010bdecp1023, + -0x1.633ce8fb9f87cp9 + }, + { // Entry 613 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 614 + -0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 615 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 616 + -HUGE_VAL, + -0x1.633ce8fb9f87ep9 + }, + { // Entry 617 + -HUGE_VAL, + -0x1.633ce8fb9f87ep9 + }, + { // Entry 618 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 619 + -0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 620 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 621 + -0x1.ffffffffff93ae594e9be425a010bdecp1023, + -0x1.633ce8fb9f87cp9 + }, + { // Entry 622 + 0x1.ffffffffff93ae594e9be425a010bdecp1023, + 0x1.633ce8fb9f87cp9 + }, + { // Entry 623 + 0x1.fffffffffffff005555555555554d559p-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 624 + -0x1.fffffffffffff005555555555554d559p-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 625 + 0x1.0000000000000002aaaaaaaaaaaaaaacp-30, + 0x1.0p-30 + }, + { // Entry 626 + -0x1.0000000000000002aaaaaaaaaaaaaaacp-30, + -0x1.0p-30 + }, + { // Entry 627 + 0x1.0000000000001002aaaaaaaaaaab2aacp-30, + 0x1.0000000000001p-30 + }, + { // Entry 628 + -0x1.0000000000001002aaaaaaaaaaab2aacp-30, + -0x1.0000000000001p-30 + }, + { // Entry 629 + 0x1.00000000aaaaa2aaccccbcccd00cfb7ap-15, + 0x1.fffffffffffffp-16 + }, + { // Entry 630 + -0x1.00000000aaaaa2aaccccbcccd00cfb7ap-15, + -0x1.fffffffffffffp-16 + }, + { // Entry 631 + 0x1.00000000aaaaaaaaccccccccd00d00d0p-15, + 0x1.0p-15 + }, + { // Entry 632 + -0x1.00000000aaaaaaaaccccccccd00d00d0p-15, + -0x1.0p-15 + }, + { // Entry 633 + 0x1.00000000aaaabaaaccccecccd00d0b7ap-15, + 0x1.0000000000001p-15 + }, + { // Entry 634 + -0x1.00000000aaaabaaaccccecccd00d0b7ap-15, + -0x1.0000000000001p-15 + }, + { // Entry 635 + 0x1.0002aaaccccd94d9bbd8527c599a8bc7p-6, + 0x1.fffffffffffffp-7 + }, + { // Entry 636 + -0x1.0002aaaccccd94d9bbd8527c599a8bc7p-6, + -0x1.fffffffffffffp-7 + }, + { // Entry 637 + 0x1.0002aaaccccd9cd9fbd8a7d1dc72c44bp-6, + 0x1.0p-6 + }, + { // Entry 638 + -0x1.0002aaaccccd9cd9fbd8a7d1dc72c44bp-6, + -0x1.0p-6 + }, + { // Entry 639 + 0x1.0002aaaccccdacda7bd9527ce2234152p-6, + 0x1.0000000000001p-6 + }, + { // Entry 640 + -0x1.0002aaaccccdacda7bd9527ce2234152p-6, + -0x1.0000000000001p-6 + }, + { // Entry 641 + 0x1.000aaacccd00c83a3cace89e1977724dp-5, + 0x1.fffffffffffffp-6 + }, + { // Entry 642 + -0x1.000aaacccd00c83a3cace89e1977724dp-5, + -0x1.fffffffffffffp-6 + }, + { // Entry 643 + 0x1.000aaacccd00d03b3cb23dfecf8fcbdcp-5, + 0x1.0p-5 + }, + { // Entry 644 + -0x1.000aaacccd00d03b3cb23dfecf8fcbdcp-5, + -0x1.0p-5 + }, + { // Entry 645 + 0x1.000aaacccd00e03d3cbce8c03bc0aefcp-5, + 0x1.0000000000001p-5 + }, + { // Entry 646 + -0x1.000aaacccd00e03d3cbce8c03bc0aefcp-5, + -0x1.0000000000001p-5 + }, + { // Entry 647 + 0x1.002aacccd9cdc312002bf56151115c11p-4, + 0x1.fffffffffffffp-5 + }, + { // Entry 648 + -0x1.002aacccd9cdc312002bf56151115c11p-4, + -0x1.fffffffffffffp-5 + }, + { // Entry 649 + 0x1.002aacccd9cdcb1600814d8ee0ea5e98p-4, + 0x1.0p-4 + }, + { // Entry 650 + -0x1.002aacccd9cdcb1600814d8ee0ea5e98p-4, + -0x1.0p-4 + }, + { // Entry 651 + 0x1.002aacccd9cddb1e012bfdea009d23c7p-4, + 0x1.0000000000001p-4 + }, + { // Entry 652 + -0x1.002aacccd9cddb1e012bfdea009d23c7p-4, + -0x1.0000000000001p-4 + }, + { // Entry 653 + 0x1.00aaccd00d2f0572b58768290cca24c3p-3, + 0x1.fffffffffffffp-4 + }, + { // Entry 654 + -0x1.00aaccd00d2f0572b58768290cca24c3p-3, + -0x1.fffffffffffffp-4 + }, + { // Entry 655 + 0x1.00aaccd00d2f0d82badd7396c439091ep-3, + 0x1.0p-3 + }, + { // Entry 656 + -0x1.00aaccd00d2f0d82badd7396c439091ep-3, + -0x1.0p-3 + }, + { // Entry 657 + 0x1.00aaccd00d2f1da2c5898a723319d3d5p-3, + 0x1.0000000000001p-3 + }, + { // Entry 658 + -0x1.00aaccd00d2f1da2c5898a723319d3d5p-3, + -0x1.0000000000001p-3 + }, + { // Entry 659 + 0x1.02accd9d081016261f4b0ecbebb5dd8fp-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 660 + -0x1.02accd9d081016261f4b0ecbebb5dd8fp-2, + -0x1.fffffffffffffp-3 + }, + { // Entry 661 + 0x1.02accd9d08101e6674cdf3fc8eaabf2ap-2, + 0x1.0p-2 + }, + { // Entry 662 + -0x1.02accd9d08101e6674cdf3fc8eaabf2ap-2, + -0x1.0p-2 + }, + { // Entry 663 + 0x1.02accd9d08102ee71fd3be5dd4a0a27ap-2, + 0x1.0000000000001p-2 + }, + { // Entry 664 + -0x1.02accd9d08102ee71fd3be5dd4a0a27ap-2, + -0x1.0000000000001p-2 + }, + { // Entry 665 + 0x1.d03cf63b6e19d8da527239bc64c85ceap1, + 0x1.fffffffffffffp0 + }, + { // Entry 666 + -0x1.d03cf63b6e19d8da527239bc64c85ceap1, + -0x1.fffffffffffffp0 + }, + { // Entry 667 + 0x1.d03cf63b6e19f6f34c802c96200970efp1, + 0x1.0p1 + }, + { // Entry 668 + -0x1.d03cf63b6e19f6f34c802c96200970efp1, + -0x1.0p1 + }, + { // Entry 669 + 0x1.d03cf63b6e1a3325409c12499bfc4fdap1, + 0x1.0000000000001p1 + }, + { // Entry 670 + -0x1.d03cf63b6e1a3325409c12499bfc4fdap1, + -0x1.0000000000001p1 + }, + { // Entry 671 + 0x1.b4a380370362d5f21650a55c31b348b4p4, + 0x1.fffffffffffffp1 + }, + { // Entry 672 + -0x1.b4a380370362d5f21650a55c31b348b4p4, + -0x1.fffffffffffffp1 + }, + { // Entry 673 + 0x1.b4a3803703630c8fe70261d92e563a88p4, + 0x1.0p2 + }, + { // Entry 674 + -0x1.b4a3803703630c8fe70261d92e563a88p4, + -0x1.0p2 + }, + { // Entry 675 + 0x1.b4a38037036379cb8865dad33c13c833p4, + 0x1.0000000000001p2 + }, + { // Entry 676 + -0x1.b4a38037036379cb8865dad33c13c833p4, + -0x1.0000000000001p2 + }, + { // Entry 677 + 0x1.749ea514eca5ffdf3fd18b7627cdbdc8p10, + 0x1.fffffffffffffp2 + }, + { // Entry 678 + -0x1.749ea514eca5ffdf3fd18b7627cdbdc8p10, + -0x1.fffffffffffffp2 + }, + { // Entry 679 + 0x1.749ea514eca65d06ea7688aff46cfe09p10, + 0x1.0p3 + }, + { // Entry 680 + -0x1.749ea514eca65d06ea7688aff46cfe09p10, + -0x1.0p3 + }, + { // Entry 681 + 0x1.749ea514eca717563fc08323d3893d7ep10, + 0x1.0000000000001p3 + }, + { // Entry 682 + -0x1.749ea514eca717563fc08323d3893d7ep10, + -0x1.0000000000001p3 + }, + { // Entry 683 + 0x1.0f2ebd0a7ffdb64f4e0e5fcc0c593101p22, + 0x1.fffffffffffffp3 + }, + { // Entry 684 + -0x1.0f2ebd0a7ffdb64f4e0e5fcc0c593101p22, + -0x1.fffffffffffffp3 + }, + { // Entry 685 + 0x1.0f2ebd0a7ffe3de6ac939fced0122707p22, + 0x1.0p4 + }, + { // Entry 686 + -0x1.0f2ebd0a7ffe3de6ac939fced0122707p22, + -0x1.0p4 + }, + { // Entry 687 + 0x1.0f2ebd0a7fff4d15699e1fd522e720dcp22, + 0x1.0000000000001p4 + }, + { // Entry 688 + -0x1.0f2ebd0a7fff4d15699e1fd522e720dcp22, + -0x1.0000000000001p4 + }, + { // Entry 689 + 0x1.1f43fcc4b661a8944ac389a7c7ae7b9dp45, + 0x1.fffffffffffffp4 + }, + { // Entry 690 + -0x1.1f43fcc4b661a8944ac389a7c7ae7b9dp45, + -0x1.fffffffffffffp4 + }, + { // Entry 691 + 0x1.1f43fcc4b662c7d847884009ffe4c4c3p45, + 0x1.0p5 + }, + { // Entry 692 + -0x1.1f43fcc4b662c7d847884009ffe4c4c3p45, + -0x1.0p5 + }, + { // Entry 693 + 0x1.1f43fcc4b66506604111acd1ce1d4d5dp45, + 0x1.0000000000001p5 + }, + { // Entry 694 + -0x1.1f43fcc4b66506604111acd1ce1d4d5dp45, + -0x1.0000000000001p5 + }, + { // Entry 695 + 0x1.425982cf597a4d52c89ea857bbaa807ap91, + 0x1.fffffffffffffp5 + }, + { // Entry 696 + -0x1.425982cf597a4d52c89ea857bbaa807ap91, + -0x1.fffffffffffffp5 + }, + { // Entry 697 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + 0x1.0p6 + }, + { // Entry 698 + -0x1.425982cf597cd205ce3d5b4edb031756p91, + -0x1.0p6 + }, + { // Entry 699 + 0x1.425982cf5981db6bd97ac14c35e666c6p91, + 0x1.0000000000001p6 + }, + { // Entry 700 + -0x1.425982cf5981db6bd97ac14c35e666c6p91, + -0x1.0000000000001p6 + }, + { // Entry 701 + 0x1.95e54c5dd41b20600dd601a0ae672ff4p183, + 0x1.fffffffffffffp6 + }, + { // Entry 702 + -0x1.95e54c5dd41b20600dd601a0ae672ff4p183, + -0x1.fffffffffffffp6 + }, + { // Entry 703 + 0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + 0x1.0p7 + }, + { // Entry 704 + -0x1.95e54c5dd42177f53f4d5219df11ca3bp183, + -0x1.0p7 + }, + { // Entry 705 + 0x1.95e54c5dd42e271fa23bf3585b655060p183, + 0x1.0000000000001p7 + }, + { // Entry 706 + -0x1.95e54c5dd42e271fa23bf3585b655060p183, + -0x1.0000000000001p7 + }, + { // Entry 707 + 0x1.41c7a8814be192a5df25b042af824efdp368, + 0x1.fffffffffffffp7 + }, + { // Entry 708 + -0x1.41c7a8814be192a5df25b042af824efdp368, + -0x1.fffffffffffffp7 + }, + { // Entry 709 + 0x1.41c7a8814beba0e323300f777da65854p368, + 0x1.0p8 + }, + { // Entry 710 + -0x1.41c7a8814beba0e323300f777da65854p368, + -0x1.0p8 + }, + { // Entry 711 + 0x1.41c7a8814bffbd5dab44ced26faccbfbp368, + 0x1.0000000000001p8 + }, + { // Entry 712 + -0x1.41c7a8814bffbd5dab44ced26faccbfbp368, + -0x1.0000000000001p8 + }, + { // Entry 713 + 0x1.9476504ba8399f5b97cae35beb78c3c5p737, + 0x1.fffffffffffffp8 + }, + { // Entry 714 + -0x1.9476504ba8399f5b97cae35beb78c3c5p737, + -0x1.fffffffffffffp8 + }, + { // Entry 715 + 0x1.9476504ba852e6c09c8567c01c5a6648p737, + 0x1.0p9 + }, + { // Entry 716 + -0x1.9476504ba852e6c09c8567c01c5a6648p737, + -0x1.0p9 + }, + { // Entry 717 + 0x1.9476504ba885758aa5fa7545e10e8e46p737, + 0x1.0000000000001p9 + }, + { // Entry 718 + -0x1.9476504ba885758aa5fa7545e10e8e46p737, + -0x1.0000000000001p9 + }, + { // Entry 719 + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 720 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 721 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 722 + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 723 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 724 + HUGE_VAL, + 0x1.fffffffffffffp1023 + }, + { // Entry 725 + HUGE_VAL, + 0x1.ffffffffffffep1023 + }, + { // Entry 726 + 0x1.718f45d72e67155cecb0017179d127e6p3, + 0x1.921fb54442d18p1 + }, + { // Entry 727 + 0x1.2690f661dd81ffd244e02b94a5c51d39p1, + 0x1.921fb54442d18p0 + }, + { // Entry 728 + 0x1.2cd9fc44eb983e58779b22745732962dp0, + 0x1.0000000000001p0 + }, + { // Entry 729 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.0p0 + }, + { // Entry 730 + 0x1.2cd9fc44eb98194fc7a05b845e4f82b3p0, + 0x1.fffffffffffffp-1 + }, + { // Entry 731 + 0x1.bcc270b5227365b85e43b36397224d94p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 732 + 0x1.00000000000010p-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 733 + 0x1.p-1022, + 0x1.0p-1022 + }, + { // Entry 734 + 0x1.ffffffffffffe0p-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 735 + 0x1.ffffffffffffc0p-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 736 + 0x1.p-1073, + 0x1.0p-1073 + }, + { // Entry 737 + 0x1.p-1074, + 0x1.0p-1074 + }, + { // Entry 738 + 0.0, + 0.0 + }, + { // Entry 739 + -0.0, + -0.0 + }, + { // Entry 740 + -0x1.p-1074, + -0x1.0p-1074 + }, + { // Entry 741 + -0x1.p-1073, + -0x1.0p-1073 + }, + { // Entry 742 + -0x1.ffffffffffffc0p-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 743 + -0x1.ffffffffffffe0p-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 744 + -0x1.p-1022, + -0x1.0p-1022 + }, + { // Entry 745 + -0x1.00000000000010p-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 746 + -0x1.bcc270b5227365b85e43b36397224d94p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 747 + -0x1.2cd9fc44eb98194fc7a05b845e4f82b3p0, + -0x1.fffffffffffffp-1 + }, + { // Entry 748 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.0p0 + }, + { // Entry 749 + -0x1.2cd9fc44eb983e58779b22745732962dp0, + -0x1.0000000000001p0 + }, + { // Entry 750 + -0x1.2690f661dd81ffd244e02b94a5c51d39p1, + -0x1.921fb54442d18p0 + }, + { // Entry 751 + -0x1.718f45d72e67155cecb0017179d127e6p3, + -0x1.921fb54442d18p1 + }, + { // Entry 752 + -HUGE_VAL, + -0x1.ffffffffffffep1023 + }, + { // Entry 753 + -HUGE_VAL, + -0x1.fffffffffffffp1023 + }, + { // Entry 754 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 755 + 0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 756 + -0x1.ffffffffffd3ae594e9bda9b6b3a9168p1023, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 757 + HUGE_VAL, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 758 + -HUGE_VAL, + -0x1.633ce8fb9f87ep9 + } +}; diff --git a/tests/math_data/sinhf_intel_data.h b/tests/math_data/sinhf_intel_data.h new file mode 100644 index 000000000..30afc1ea9 --- /dev/null +++ b/tests/math_data/sinhf_intel_data.h @@ -0,0 +1,2494 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_sinhf_intel_data[] = { + { // Entry 0 + -0x1.00000000000aaaaaaaaaaaccccccccccp-21, + -0x1.p-21 + }, + { // Entry 1 + 0x1.00000000000aaaaaaaaaaaccccccccccp-21, + 0x1.p-21 + }, + { // Entry 2 + -0x1.1770c0fffee31db7a31664de401a57cdp-1, + -0x1.0b26eep-1 + }, + { // Entry 3 + 0x1.1770c0fffee31db7a31664de401a57cdp-1, + 0x1.0b26eep-1 + }, + { // Entry 4 + -0x1.204fd00000000000000f3ca3e81c03afp-37, + -0x1.204fd0p-37 + }, + { // Entry 5 + 0x1.204fd00000000000000f3ca3e81c03afp-37, + 0x1.204fd0p-37 + }, + { // Entry 6 + -0x1.43510055f383351ba9ec4cdf5b1b1fa5p-12, + -0x1.4351p-12 + }, + { // Entry 7 + 0x1.43510055f383351ba9ec4cdf5b1b1fa5p-12, + 0x1.4351p-12 + }, + { // Entry 8 + -0x1.4f1fe6fffd055403a0afa5f61f7ad456p122, + -0x1.561b10p6 + }, + { // Entry 9 + 0x1.4f1fe6fffd055403a0afa5f61f7ad456p122, + 0x1.561b10p6 + }, + { // Entry 10 + -0x1.76339d048c41010db95311bf38824f7fp-2, + -0x1.6e564ep-2 + }, + { // Entry 11 + 0x1.76339d048c41010db95311bf38824f7fp-2, + 0x1.6e564ep-2 + }, + { // Entry 12 + -0x1.a6399b00031ae7e2d10c4d5ca8b85bb6p-2, + -0x1.9b17d8p-2 + }, + { // Entry 13 + 0x1.a6399b00031ae7e2d10c4d5ca8b85bb6p-2, + 0x1.9b17d8p-2 + }, + { // Entry 14 + -0x1.ed9c6b045cf886a719553b239eced39ap-1, + -0x1.b62492p-1 + }, + { // Entry 15 + 0x1.ed9c6b045cf886a719553b239eced39ap-1, + 0x1.b62492p-1 + }, + { // Entry 16 + -0x1.ffb1b2f8d872ac8cb2c8ae78073874cep-1, + -0x1.c30c06p-1 + }, + { // Entry 17 + 0x1.ffb1b2f8d872ac8cb2c8ae78073874cep-1, + 0x1.c30c06p-1 + }, + { // Entry 18 + -0x1.490e3effd17cc5e5cebb7150a45530b0p9, + -0x1.cbae70p2 + }, + { // Entry 19 + 0x1.490e3effd17cc5e5cebb7150a45530b0p9, + 0x1.cbae70p2 + }, + { // Entry 20 + -0x1.d3735503c31601d8a231e42764dca76bp-12, + -0x1.d37354p-12 + }, + { // Entry 21 + 0x1.d3735503c31601d8a231e42764dca76bp-12, + 0x1.d37354p-12 + }, + { // Entry 22 + -0x1.d3750103c5df89146104862bc8eb9511p-12, + -0x1.d375p-12 + }, + { // Entry 23 + 0x1.d3750103c5df89146104862bc8eb9511p-12, + 0x1.d375p-12 + }, + { // Entry 24 + -0x1.d4bc08fe54522492a18ed763f5905a3cp-6, + -0x1.d4abacp-6 + }, + { // Entry 25 + 0x1.d4bc08fe54522492a18ed763f5905a3cp-6, + 0x1.d4abacp-6 + }, + { // Entry 26 + -0x1.b495d8f96ad2507c36e288f42ed69c65p4, + -0x1.fffcp1 + }, + { // Entry 27 + 0x1.b495d8f96ad2507c36e288f42ed69c65p4, + 0x1.fffcp1 + }, + { // Entry 28 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.p-1 + }, + { // Entry 29 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.p-1 + }, + { // Entry 30 + 0x1.00000000000aaaaaaaaaaaccccccccccp-21, + 0x1.p-21 + }, + { // Entry 31 + -0x1.00000000000aaaaaaaaaaaccccccccccp-21, + -0x1.p-21 + }, + { // Entry 32 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 33 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 34 + 0x1.000002000000000000000aaaaaeaaaabp-41, + 0x1.000002p-41 + }, + { // Entry 35 + -0x1.000002000000000000000aaaaaeaaaabp-41, + -0x1.000002p-41 + }, + { // Entry 36 + 0x1.00aae5001d35b2cc9f1bf5024aad3fc7p-3, + 0x1.000018p-3 + }, + { // Entry 37 + -0x1.00aae5001d35b2cc9f1bf5024aad3fc7p-3, + -0x1.000018p-3 + }, + { // Entry 38 + 0x1.2cdc4cd13dbaaea971cf4c6df8d02db1p0, + 0x1.000180p0 + }, + { // Entry 39 + -0x1.2cdc4cd13dbaaea971cf4c6df8d02db1p0, + -0x1.000180p0 + }, + { // Entry 40 + 0x1.000220000000000000002aabbaacecacp-40, + 0x1.000220p-40 + }, + { // Entry 41 + -0x1.000220000000000000002aabbaacecacp-40, + -0x1.000220p-40 + }, + { // Entry 42 + 0x1.75b684fbb21e3fadfd76948a74ff619cp10, + 0x1.0018p3 + }, + { // Entry 43 + -0x1.75b684fbb21e3fadfd76948a74ff619cp10, + -0x1.0018p3 + }, + { // Entry 44 + 0x1.0af11706dc935e6b8d9889ffd9d7f9eep-1, + 0x1.0020p-1 + }, + { // Entry 45 + -0x1.0af11706dc935e6b8d9889ffd9d7f9eep-1, + -0x1.0020p-1 + }, + { // Entry 46 + 0x1.2de53500112b48b54416fd3ac0fd5d35p0, + 0x1.00adp0 + }, + { // Entry 47 + -0x1.2de53500112b48b54416fd3ac0fd5d35p0, + -0x1.00adp0 + }, + { // Entry 48 + 0x1.d311590094b7169257222f29159c5274p1, + 0x1.00c0p1 + }, + { // Entry 49 + -0x1.d311590094b7169257222f29159c5274p1, + -0x1.00c0p1 + }, + { // Entry 50 + 0x1.bb8be0f928fa482d264aec809030cb98p4, + 0x1.0101p2 + }, + { // Entry 51 + -0x1.bb8be0f928fa482d264aec809030cb98p4, + -0x1.0101p2 + }, + { // Entry 52 + 0x1.d6509cfff1b887cd50d3c7b33a490af5p1, + 0x1.019bp1 + }, + { // Entry 53 + -0x1.d6509cfff1b887cd50d3c7b33a490af5p1, + -0x1.019bp1 + }, + { // Entry 54 + 0x1.d99ef101df23c13de5368e55ebb4c952p45, + 0x1.04p5 + }, + { // Entry 55 + -0x1.d99ef101df23c13de5368e55ebb4c952p45, + -0x1.04p5 + }, + { // Entry 56 + 0x1.b61e5ca3a5e30b2f0a03f292f9ce0084p92, + 0x1.04p6 + }, + { // Entry 57 + -0x1.b61e5ca3a5e30b2f0a03f292f9ce0084p92, + -0x1.04p6 + }, + { // Entry 58 + 0x1.0f53c500dab3115ec83d0a87f389efa5p-1, + 0x1.0401c0p-1 + }, + { // Entry 59 + -0x1.0f53c500dab3115ec83d0a87f389efa5p-1, + -0x1.0401c0p-1 + }, + { // Entry 60 + 0x1.07a43d780cd02aa326997430cb72ec6ep-2, + 0x1.04d0p-2 + }, + { // Entry 61 + -0x1.07a43d780cd02aa326997430cb72ec6ep-2, + -0x1.04d0p-2 + }, + { // Entry 62 + 0x1.070b91000585e92eceba7f1d10686783p-5, + 0x1.07p-5 + }, + { // Entry 63 + -0x1.070b91000585e92eceba7f1d10686783p-5, + -0x1.07p-5 + }, + { // Entry 64 + 0x1.0aef2dfa6f09af758cfac3ec7bbe6580p-2, + 0x1.08p-2 + }, + { // Entry 65 + -0x1.0aef2dfa6f09af758cfac3ec7bbe6580p-2, + -0x1.08p-2 + }, + { // Entry 66 + 0x1.0ab8c103d210ecc999dea2fb1e601dffp-7, + 0x1.0ab8p-7 + }, + { // Entry 67 + -0x1.0ab8c103d210ecc999dea2fb1e601dffp-7, + -0x1.0ab8p-7 + }, + { // Entry 68 + HUGE_VALF, + 0x1.0bd822p85 + }, + { // Entry 69 + -HUGE_VALF, + -0x1.0bd822p85 + }, + { // Entry 70 + 0x1.1b0bd9fff434fa99eb934f12cfcde40dp-1, + 0x1.0e50p-1 + }, + { // Entry 71 + -0x1.1b0bd9fff434fa99eb934f12cfcde40dp-1, + -0x1.0e50p-1 + }, + { // Entry 72 + 0x1.13a0d500d2f8e84e29cf7e0b47593d6bp-7, + 0x1.13a0p-7 + }, + { // Entry 73 + -0x1.13a0d500d2f8e84e29cf7e0b47593d6bp-7, + -0x1.13a0p-7 + }, + { // Entry 74 + 0x1.14635aff07928f6b82b6efd046d85611p-6, + 0x1.1460p-6 + }, + { // Entry 75 + -0x1.14635aff07928f6b82b6efd046d85611p-6, + -0x1.1460p-6 + }, + { // Entry 76 + 0x1.1837d7019c29ac4261d83dbdd9540770p-4, + 0x1.18p-4 + }, + { // Entry 77 + -0x1.1837d7019c29ac4261d83dbdd9540770p-4, + -0x1.18p-4 + }, + { // Entry 78 + 0x1.1e9a66ffff67888e2226adc979242050p-2, + 0x1.1afcc0p-2 + }, + { // Entry 79 + -0x1.1e9a66ffff67888e2226adc979242050p-2, + -0x1.1afcc0p-2 + }, + { // Entry 80 + 0x1.5851b581ab5774b6bc22fe804a609974p0, + 0x1.1b08p0 + }, + { // Entry 81 + -0x1.5851b581ab5774b6bc22fe804a609974p0, + -0x1.1b08p0 + }, + { // Entry 82 + 0x1.1fc09496b655ab5f571a14fc538740f3p-2, + 0x1.1c18p-2 + }, + { // Entry 83 + -0x1.1fc09496b655ab5f571a14fc538740f3p-2, + -0x1.1c18p-2 + }, + { // Entry 84 + 0x1.1c4fa6fffe2308d6059816c28ca68b93p-6, + 0x1.1c4cp-6 + }, + { // Entry 85 + -0x1.1c4fa6fffe2308d6059816c28ca68b93p-6, + -0x1.1c4cp-6 + }, + { // Entry 86 + 0x1.1ef0f05245d564eb621bc3580e810ecbp-7, + 0x1.1ef0p-7 + }, + { // Entry 87 + -0x1.1ef0f05245d564eb621bc3580e810ecbp-7, + -0x1.1ef0p-7 + }, + { // Entry 88 + 0x1.5ef59f4fb8454858c70cce0b76f0d1c1p0, + 0x1.1ef8p0 + }, + { // Entry 89 + -0x1.5ef59f4fb8454858c70cce0b76f0d1c1p0, + -0x1.1ef8p0 + }, + { // Entry 90 + 0x1.7922d2f6a620cc176196ee619e38cedep0, + 0x1.2e073ap0 + }, + { // Entry 91 + -0x1.7922d2f6a620cc176196ee619e38cedep0, + -0x1.2e073ap0 + }, + { // Entry 92 + 0x1.43b381fff77c0efbac7ee89fffb83db3p-1, + 0x1.31497ep-1 + }, + { // Entry 93 + -0x1.43b381fff77c0efbac7ee89fffb83db3p-1, + -0x1.31497ep-1 + }, + { // Entry 94 + 0x1.32b4320000022be269a7e0844e8fb427p-3, + 0x1.3191a2p-3 + }, + { // Entry 95 + -0x1.32b4320000022be269a7e0844e8fb427p-3, + -0x1.3191a2p-3 + }, + { // Entry 96 + 0x1.81e2b0f865f7d68960908dea8dbff652p0, + 0x1.32e74cp0 + }, + { // Entry 97 + -0x1.81e2b0f865f7d68960908dea8dbff652p0, + -0x1.32e74cp0 + }, + { // Entry 98 + 0x1.684f9300049996963e27553b525d785cp2, + 0x1.36ea5cp1 + }, + { // Entry 99 + -0x1.684f9300049996963e27553b525d785cp2, + -0x1.36ea5cp1 + }, + { // Entry 100 + 0x1.3e8c5a52344c5fc05de7cf393fd80bacp-12, + 0x1.3e8c5ap-12 + }, + { // Entry 101 + -0x1.3e8c5a52344c5fc05de7cf393fd80bacp-12, + -0x1.3e8c5ap-12 + }, + { // Entry 102 + 0x1.3ebc005259354f37ecfabafab164439dp-12, + 0x1.3ebcp-12 + }, + { // Entry 103 + -0x1.3ebc005259354f37ecfabafab164439dp-12, + -0x1.3ebcp-12 + }, + { // Entry 104 + 0x1.3ec66e52614b0b45d34f5458bd2b6d4ap-12, + 0x1.3ec66ep-12 + }, + { // Entry 105 + -0x1.3ec66e52614b0b45d34f5458bd2b6d4ap-12, + -0x1.3ec66ep-12 + }, + { // Entry 106 + 0x1.9a856d00436428754784f838aa53dcdep0, + 0x1.403a42p0 + }, + { // Entry 107 + -0x1.9a856d00436428754784f838aa53dcdep0, + -0x1.403a42p0 + }, + { // Entry 108 + 0x1.4674690003b5c33e7fd09a6bffacac02p-2, + 0x1.4129d6p-2 + }, + { // Entry 109 + -0x1.4674690003b5c33e7fd09a6bffacac02p-2, + -0x1.4129d6p-2 + }, + { // Entry 110 + 0x1.442556569d4a81e2d99f316cd704988bp-12, + 0x1.442556p-12 + }, + { // Entry 111 + -0x1.442556569d4a81e2d99f316cd704988bp-12, + -0x1.442556p-12 + }, + { // Entry 112 + 0x1.f897f07e50760e5213f6121940ce7277p115, + 0x1.4455a8p6 + }, + { // Entry 113 + -0x1.f897f07e50760e5213f6121940ce7277p115, + -0x1.4455a8p6 + }, + { // Entry 114 + 0x1.f7c601c26a0aab07acb3aed129529860p116, + 0x1.4719c6p6 + }, + { // Entry 115 + -0x1.f7c601c26a0aab07acb3aed129529860p116, + -0x1.4719c6p6 + }, + { // Entry 116 + 0x1.8fd142fffbf07bcd9c6607b02fc55b74p117, + 0x1.48f2e4p6 + }, + { // Entry 117 + -0x1.8fd142fffbf07bcd9c6607b02fc55b74p117, + -0x1.48f2e4p6 + }, + { // Entry 118 + 0x1.54e2c50008b73d8e4d7ed6ca4c155dbcp-3, + 0x1.5354c2p-3 + }, + { // Entry 119 + -0x1.54e2c50008b73d8e4d7ed6ca4c155dbcp-3, + -0x1.5354c2p-3 + }, + { // Entry 120 + 0x1.7ff7f6932445d2e31f1b7c20d7c7d875p125, + 0x1.5ef7bcp6 + }, + { // Entry 121 + -0x1.7ff7f6932445d2e31f1b7c20d7c7d875p125, + -0x1.5ef7bcp6 + }, + { // Entry 122 + 0x1.f13408794171d98e14f95245a340ab06p125, + 0x1.600060p6 + }, + { // Entry 123 + -0x1.f13408794171d98e14f95245a340ab06p125, + -0x1.600060p6 + }, + { // Entry 124 + 0x1.f916467349b058b9c38906911b856056p125, + 0x1.60107cp6 + }, + { // Entry 125 + -0x1.f916467349b058b9c38906911b856056p125, + -0x1.60107cp6 + }, + { // Entry 126 + 0x1.6918410000c5ae5656882e7cea64f25bp-2, + 0x1.620054p-2 + }, + { // Entry 127 + -0x1.6918410000c5ae5656882e7cea64f25bp-2, + -0x1.620054p-2 + }, + { // Entry 128 + 0x1.0021063836b49dcc89e4c5aab5e911d1p127, + 0x1.62e4b4p6 + }, + { // Entry 129 + -0x1.0021063836b49dcc89e4c5aab5e911d1p127, + -0x1.62e4b4p6 + }, + { // Entry 130 + 0x1.f40a2c6c7e4eec4c0ed1fae32d255e23p127, + 0x1.6591c4p6 + }, + { // Entry 131 + -0x1.f40a2c6c7e4eec4c0ed1fae32d255e23p127, + -0x1.6591c4p6 + }, + { // Entry 132 + 0x1.ff0714d44fc871ff0c086096f1bf0ae0p127, + 0x1.65a806p6 + }, + { // Entry 133 + -0x1.ff0714d44fc871ff0c086096f1bf0ae0p127, + -0x1.65a806p6 + }, + { // Entry 134 + 0x1.ff70ec400b9c2d8dee878e30b56339bep127, + 0x1.65a8dap6 + }, + { // Entry 135 + -0x1.ff70ec400b9c2d8dee878e30b56339bep127, + -0x1.65a8dap6 + }, + { // Entry 136 + 0x1.fff2d869d07d11d6c64d896f117f0094p127, + 0x1.65a9dep6 + }, + { // Entry 137 + -0x1.fff2d869d07d11d6c64d896f117f0094p127, + -0x1.65a9dep6 + }, + { // Entry 138 + 0x1.6e444103bc8945311358dde7a66bdb38p-2, + 0x1.66dffap-2 + }, + { // Entry 139 + -0x1.6e444103bc8945311358dde7a66bdb38p-2, + -0x1.66dffap-2 + }, + { // Entry 140 + 0x1.67cf01000052cb8c07fcbe6cb68dcc3dp-6, + 0x1.67c79ap-6 + }, + { // Entry 141 + -0x1.67cf01000052cb8c07fcbe6cb68dcc3dp-6, + -0x1.67c79ap-6 + }, + { // Entry 142 + 0x1.7800852fb7173f3c300caca6708f0d6fp-8, + 0x1.77fffep-8 + }, + { // Entry 143 + -0x1.7800852fb7173f3c300caca6708f0d6fp-8, + -0x1.77fffep-8 + }, + { // Entry 144 + 0x1.80000900001033334115f1660750774cp-10, + 0x1.80p-10 + }, + { // Entry 145 + -0x1.80000900001033334115f1660750774cp-10, + -0x1.80p-10 + }, + { // Entry 146 + 0x1.5df91cff9ace26df572d528a8d7e4d99p16, + 0x1.8313eap3 + }, + { // Entry 147 + -0x1.5df91cff9ace26df572d528a8d7e4d99p16, + -0x1.8313eap3 + }, + { // Entry 148 + 0x1.16c370fc40a0ef3180f8a61c8b25157cp1, + 0x1.853c56p0 + }, + { // Entry 149 + -0x1.16c370fc40a0ef3180f8a61c8b25157cp1, + -0x1.853c56p0 + }, + { // Entry 150 + 0x1.880000993055674ae98a9a44aa624509p-12, + 0x1.88p-12 + }, + { // Entry 151 + -0x1.880000993055674ae98a9a44aa624509p-12, + -0x1.88p-12 + }, + { // Entry 152 + 0x1.dab77d03d9ceea48387c7a3e5ebde612p16, + 0x1.8cd558p3 + }, + { // Entry 153 + -0x1.dab77d03d9ceea48387c7a3e5ebde612p16, + -0x1.8cd558p3 + }, + { // Entry 154 + 0x1.b36be4f606d0cd43778f0b56d6c78c69p3, + 0x1.a70ca4p1 + }, + { // Entry 155 + -0x1.b36be4f606d0cd43778f0b56d6c78c69p3, + -0x1.a70ca4p1 + }, + { // Entry 156 + 0x1.9fc768f63e2199d4161ad52c42c43993p8, + 0x1.ae4a96p2 + }, + { // Entry 157 + -0x1.9fc768f63e2199d4161ad52c42c43993p8, + -0x1.ae4a96p2 + }, + { // Entry 158 + 0x1.fddcb5028f3c5f2f9057b275fda963b5p-1, + 0x1.c1c0p-1 + }, + { // Entry 159 + -0x1.fddcb5028f3c5f2f9057b275fda963b5p-1, + -0x1.c1c0p-1 + }, + { // Entry 160 + 0x1.c9d78317aae58861bfa01747e05aaa21p-3, + 0x1.c61c8ep-3 + }, + { // Entry 161 + -0x1.c9d78317aae58861bfa01747e05aaa21p-3, + -0x1.c61c8ep-3 + }, + { // Entry 162 + 0x1.17d46d00e7aa2bd311c9d06faf31cd0fp4, + 0x1.c71c78p1 + }, + { // Entry 163 + -0x1.17d46d00e7aa2bd311c9d06faf31cd0fp4, + -0x1.c71c78p1 + }, + { // Entry 164 + 0x1.d00fdefedbdc86d82e34a1726ce6fd5ep-6, + 0x1.cffffep-6 + }, + { // Entry 165 + -0x1.d00fdefedbdc86d82e34a1726ce6fd5ep-6, + -0x1.cffffep-6 + }, + { // Entry 166 + 0x1.d12f11000068b29f1390f76019d191e9p-12, + 0x1.d12f10p-12 + }, + { // Entry 167 + -0x1.d12f11000068b29f1390f76019d191e9p-12, + -0x1.d12f10p-12 + }, + { // Entry 168 + 0x1.e161430003f635efa46c1b93b40d124ap-2, + 0x1.d13608p-2 + }, + { // Entry 169 + -0x1.e161430003f635efa46c1b93b40d124ap-2, + -0x1.d13608p-2 + }, + { // Entry 170 + 0x1.e518f10016d4233539a6a86b46de305dp9, + 0x1.e48570p2 + }, + { // Entry 171 + -0x1.e518f10016d4233539a6a86b46de305dp9, + -0x1.e48570p2 + }, + { // Entry 172 + 0x1.f882f8ffff8c2c97052fff77b0fe05cap-2, + 0x1.e60da6p-2 + }, + { // Entry 173 + -0x1.f882f8ffff8c2c97052fff77b0fe05cap-2, + -0x1.e60da6p-2 + }, + { // Entry 174 + 0x1.a6565af66cc00367cd4b44acef8fe3b4p1, + 0x1.e8bce0p0 + }, + { // Entry 175 + -0x1.a6565af66cc00367cd4b44acef8fe3b4p1, + -0x1.e8bce0p0 + }, + { // Entry 176 + 0x1.ee2fa5ffffffd478a109217059ddb3a9p-4, + 0x1.ecfeb6p-4 + }, + { // Entry 177 + -0x1.ee2fa5ffffffd478a109217059ddb3a9p-4, + -0x1.ecfeb6p-4 + }, + { // Entry 178 + 0x1.b54f74f65bab12830f959a3e2d7e1c61p1, + 0x1.f14910p0 + }, + { // Entry 179 + -0x1.b54f74f65bab12830f959a3e2d7e1c61p1, + -0x1.f14910p0 + }, + { // Entry 180 + 0x1.b56a96f6fbbb8045af62b07d5d56b656p1, + 0x1.f1584ep0 + }, + { // Entry 181 + -0x1.b56a96f6fbbb8045af62b07d5d56b656p1, + -0x1.f1584ep0 + }, + { // Entry 182 + 0x1.f6e42e000047623ec2a83a461e98dec7p-3, + 0x1.f1f852p-3 + }, + { // Entry 183 + -0x1.f6e42e000047623ec2a83a461e98dec7p-3, + -0x1.f1f852p-3 + }, + { // Entry 184 + 0x1.f6ec1458fb3487aac4bfeec4b6812670p-3, + 0x1.f1fffep-3 + }, + { // Entry 185 + -0x1.f6ec1458fb3487aac4bfeec4b6812670p-3, + -0x1.f1fffep-3 + }, + { // Entry 186 + 0x1.f2fda6fdfa98a35b66e5104fdacd2bd5p-9, + 0x1.f2fd58p-9 + }, + { // Entry 187 + -0x1.f2fda6fdfa98a35b66e5104fdacd2bd5p-9, + -0x1.f2fd58p-9 + }, + { // Entry 188 + 0x1.f8521dffffcd41462b0d73569b1d3819p-3, + 0x1.f35bacp-3 + }, + { // Entry 189 + -0x1.f8521dffffcd41462b0d73569b1d3819p-3, + -0x1.f35bacp-3 + }, + { // Entry 190 + 0x1.f4dda8fe2ec303fc7f7568475545139cp-11, + 0x1.f4dda4p-11 + }, + { // Entry 191 + -0x1.f4dda8fe2ec303fc7f7568475545139cp-11, + -0x1.f4dda4p-11 + }, + { // Entry 192 + 0x1.f51a7d0000ac50ad5402c949ba82e8a3p-11, + 0x1.f51a78p-11 + }, + { // Entry 193 + -0x1.f51a7d0000ac50ad5402c949ba82e8a3p-11, + -0x1.f51a78p-11 + }, + { // Entry 194 + 0x1.a664dced7cb98c68f2b973d65c676a35p21, + 0x1.f7fffep3 + }, + { // Entry 195 + -0x1.a664dced7cb98c68f2b973d65c676a35p21, + -0x1.f7fffep3 + }, + { // Entry 196 + 0x1.f9b658ffff3ce39965e1b291abc9efb8p-4, + 0x1.f86facp-4 + }, + { // Entry 197 + -0x1.f9b658ffff3ce39965e1b291abc9efb8p-4, + -0x1.f86facp-4 + }, + { // Entry 198 + 0x1.28c3fb0016be4fd802e83c9be0d9cad1p0, + 0x1.faaee8p-1 + }, + { // Entry 199 + -0x1.28c3fb0016be4fd802e83c9be0d9cad1p0, + -0x1.faaee8p-1 + }, + { // Entry 200 + 0x1.29b1530000004a3722ae1117c2787152p0, + 0x1.fbe4b0p-1 + }, + { // Entry 201 + -0x1.29b1530000004a3722ae1117c2787152p0, + -0x1.fbe4b0p-1 + }, + { // Entry 202 + 0x1.fc14d4961039dc857c796f56b34af3b3p-6, + 0x1.fbfffep-6 + }, + { // Entry 203 + -0x1.fc14d4961039dc857c796f56b34af3b3p-6, + -0x1.fbfffep-6 + }, + { // Entry 204 + 0x1.fc4d7fd2d8e70ecb66e028137da8ba9dp-7, + 0x1.fc4848p-7 + }, + { // Entry 205 + -0x1.fc4d7fd2d8e70ecb66e028137da8ba9dp-7, + -0x1.fc4848p-7 + }, + { // Entry 206 + 0x1.fce613caa0469e68c720c7696cf35c3dp-9, + 0x1.fce5c0p-9 + }, + { // Entry 207 + -0x1.fce613caa0469e68c720c7696cf35c3dp-9, + -0x1.fce5c0p-9 + }, + { // Entry 208 + 0x1.fdf50fe0194330cfcecb2935b09d09a3p-6, + 0x1.fddffep-6 + }, + { // Entry 209 + -0x1.fdf50fe0194330cfcecb2935b09d09a3p-6, + -0x1.fddffep-6 + }, + { // Entry 210 + 0x1.ff92198272299e9dd5a4315372947bb7p-4, + 0x1.fe3ffep-4 + }, + { // Entry 211 + -0x1.ff92198272299e9dd5a4315372947bb7p-4, + -0x1.fe3ffep-4 + }, + { // Entry 212 + 0x1.fed49818a86c9e5d357348cc86552ecfp-5, + 0x1.fe7ffep-5 + }, + { // Entry 213 + -0x1.fed49818a86c9e5d357348cc86552ecfp-5, + -0x1.fe7ffep-5 + }, + { // Entry 214 + 0x1.3d59d2d8b22b41c2bb6334c9be7be902p91, + 0x1.ffdffep5 + }, + { // Entry 215 + -0x1.3d59d2d8b22b41c2bb6334c9be7be902p91, + -0x1.ffdffep5 + }, + { // Entry 216 + 0x1.fff77f554451e1f58b2d5e1ecc407a66p-12, + 0x1.fff77ep-12 + }, + { // Entry 217 + -0x1.fff77f554451e1f58b2d5e1ecc407a66p-12, + -0x1.fff77ep-12 + }, + { // Entry 218 + 0x1.7474c2f9144f003acd66e60d58643f07p10, + 0x1.fff8cep2 + }, + { // Entry 219 + -0x1.7474c2f9144f003acd66e60d58643f07p10, + -0x1.fff8cep2 + }, + { // Entry 220 + 0x1.b495d8f96ad2507c36e288f42ed69c65p4, + 0x1.fffcp1 + }, + { // Entry 221 + -0x1.b495d8f96ad2507c36e288f42ed69c65p4, + -0x1.fffcp1 + }, + { // Entry 222 + 0x1.2cd7476ede0aac2c3be4d81efc1fae2bp0, + 0x1.fffc7ep-1 + }, + { // Entry 223 + -0x1.2cd7476ede0aac2c3be4d81efc1fae2bp0, + -0x1.fffc7ep-1 + }, + { // Entry 224 + 0x1.d03a90ffffa72affa30aae2126410fd3p1, + 0x1.fffebap0 + }, + { // Entry 225 + -0x1.d03a90ffffa72affa30aae2126410fd3p1, + -0x1.fffebap0 + }, + { // Entry 226 + 0x1.b4a0e9ff76786bf6ec2ea4f53a42a118p4, + 0x1.ffff3ep1 + }, + { // Entry 227 + -0x1.b4a0e9ff76786bf6ec2ea4f53a42a118p4, + -0x1.ffff3ep1 + }, + { // Entry 228 + 0.0, + 0.0 + }, + { // Entry 229 + 0x1.24d1fe8cfad7f98fcdbea5882af8e32dp-4, + 0x1.24924ap-4 + }, + { // Entry 230 + -0x1.24d1fe8cfad7f98fcdbea5882af8e32dp-4, + -0x1.24924ap-4 + }, + { // Entry 231 + 0x1.25914e250092e5c3cddf2040afd79c65p-3, + 0x1.24924ap-3 + }, + { // Entry 232 + -0x1.25914e250092e5c3cddf2040afd79c65p-3, + -0x1.24924ap-3 + }, + { // Entry 233 + 0x1.ba393734ca25f6f4197cc41844ff6e7dp-3, + 0x1.b6db70p-3 + }, + { // Entry 234 + -0x1.ba393734ca25f6f4197cc41844ff6e7dp-3, + -0x1.b6db70p-3 + }, + { // Entry 235 + 0x1.28917b1a67c439ef2a28337ebef6dc3cp-2, + 0x1.24924ap-2 + }, + { // Entry 236 + -0x1.28917b1a67c439ef2a28337ebef6dc3cp-2, + -0x1.24924ap-2 + }, + { // Entry 237 + 0x1.7589df829503fa20ed8774c31e6a332cp-2, + 0x1.6db6dcp-2 + }, + { // Entry 238 + -0x1.7589df829503fa20ed8774c31e6a332cp-2, + -0x1.6db6dcp-2 + }, + { // Entry 239 + 0x1.c46a5c1d32d4860b81155aef808f7d0fp-2, + 0x1.b6db6ep-2 + }, + { // Entry 240 + -0x1.c46a5c1d32d4860b81155aef808f7d0fp-2, + -0x1.b6db6ep-2 + }, + { // Entry 241 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.p-1 + }, + { // Entry 242 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.p-1 + }, + { // Entry 243 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.p-1 + }, + { // Entry 244 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.p-1 + }, + { // Entry 245 + 0x1.34c1747f635dfc16c1d88e5910239fe8p-1, + 0x1.24924ap-1 + }, + { // Entry 246 + -0x1.34c1747f635dfc16c1d88e5910239fe8p-1, + -0x1.24924ap-1 + }, + { // Entry 247 + 0x1.604959cb9dca66a6c6b1d52214b88901p-1, + 0x1.492494p-1 + }, + { // Entry 248 + -0x1.604959cb9dca66a6c6b1d52214b88901p-1, + -0x1.492494p-1 + }, + { // Entry 249 + 0x1.8d9d92611935ee8bcc9e9c1bbcb4ec0dp-1, + 0x1.6db6dep-1 + }, + { // Entry 250 + -0x1.8d9d92611935ee8bcc9e9c1bbcb4ec0dp-1, + -0x1.6db6dep-1 + }, + { // Entry 251 + 0x1.bcf9593d2ecc12e3836d15a1067a7896p-1, + 0x1.924928p-1 + }, + { // Entry 252 + -0x1.bcf9593d2ecc12e3836d15a1067a7896p-1, + -0x1.924928p-1 + }, + { // Entry 253 + 0x1.ee9a9041b2e77dc8645b07cd35bf1333p-1, + 0x1.b6db72p-1 + }, + { // Entry 254 + -0x1.ee9a9041b2e77dc8645b07cd35bf1333p-1, + -0x1.b6db72p-1 + }, + { // Entry 255 + 0x1.116108889abd3fd6df9a909af5b4b3abp0, + 0x1.db6dbcp-1 + }, + { // Entry 256 + -0x1.116108889abd3fd6df9a909af5b4b3abp0, + -0x1.db6dbcp-1 + }, + { // Entry 257 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.p0 + }, + { // Entry 258 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.p0 + }, + { // Entry 259 + 0.0, + 0.0 + }, + { // Entry 260 + 0x1.18e1df94a3c9eec616f3c33e116ff136p-6, + 0x1.18de5ap-6 + }, + { // Entry 261 + -0x1.18e1df94a3c9eec616f3c33e116ff136p-6, + -0x1.18de5ap-6 + }, + { // Entry 262 + 0x1.18ec707b41cb05757f702b2e7bc8168fp-5, + 0x1.18de5ap-5 + }, + { // Entry 263 + -0x1.18ec707b41cb05757f702b2e7bc8168fp-5, + -0x1.18de5ap-5 + }, + { // Entry 264 + 0x1.a57d14c544db6f79ccb29cf647ec3bd6p-5, + 0x1.a54d88p-5 + }, + { // Entry 265 + -0x1.a57d14c544db6f79ccb29cf647ec3bd6p-5, + -0x1.a54d88p-5 + }, + { // Entry 266 + 0x1.1916b67842dff1025e79e06864bad805p-4, + 0x1.18de5ap-4 + }, + { // Entry 267 + -0x1.1916b67842dff1025e79e06864bad805p-4, + -0x1.18de5ap-4 + }, + { // Entry 268 + 0x1.5f840854828275e07b52147a0b34cec2p-4, + 0x1.5f15f0p-4 + }, + { // Entry 269 + -0x1.5f840854828275e07b52147a0b34cec2p-4, + -0x1.5f15f0p-4 + }, + { // Entry 270 + 0x1.a60bcc64888b5d1a7338b1a0f9243f1ep-4, + 0x1.a54d86p-4 + }, + { // Entry 271 + -0x1.a60bcc64888b5d1a7338b1a0f9243f1ep-4, + -0x1.a54d86p-4 + }, + { // Entry 272 + 0x1.ecb35112d674d05785ec00066c2b3ec8p-4, + 0x1.eb851cp-4 + }, + { // Entry 273 + -0x1.ecb35112d674d05785ec00066c2b3ec8p-4, + -0x1.eb851cp-4 + }, + { // Entry 274 + 0x1.ecb35316874ebf73aba92491a44e079fp-4, + 0x1.eb851ep-4 + }, + { // Entry 275 + -0x1.ecb35316874ebf73aba92491a44e079fp-4, + -0x1.eb851ep-4 + }, + { // Entry 276 + 0x1.02243d1276143106404fa4cb3fcadf33p-3, + 0x1.01767ep-3 + }, + { // Entry 277 + -0x1.02243d1276143106404fa4cb3fcadf33p-3, + -0x1.01767ep-3 + }, + { // Entry 278 + 0x1.0df0f8011126593efedda045c8fa0e09p-3, + 0x1.0d2a6cp-3 + }, + { // Entry 279 + -0x1.0df0f8011126593efedda045c8fa0e09p-3, + -0x1.0d2a6cp-3 + }, + { // Entry 280 + 0x1.19bff49926d4870c4cae1f4076b8e37ap-3, + 0x1.18de5ap-3 + }, + { // Entry 281 + -0x1.19bff49926d4870c4cae1f4076b8e37ap-3, + -0x1.18de5ap-3 + }, + { // Entry 282 + 0x1.25914c1fc4d40b236a218f858c70fb53p-3, + 0x1.249248p-3 + }, + { // Entry 283 + -0x1.25914c1fc4d40b236a218f858c70fb53p-3, + -0x1.249248p-3 + }, + { // Entry 284 + 0x1.316517df03194e62cdc39c303b8105ffp-3, + 0x1.304636p-3 + }, + { // Entry 285 + -0x1.316517df03194e62cdc39c303b8105ffp-3, + -0x1.304636p-3 + }, + { // Entry 286 + 0x1.3d3b712639f615986771a910d344617ep-3, + 0x1.3bfa24p-3 + }, + { // Entry 287 + -0x1.3d3b712639f615986771a910d344617ep-3, + -0x1.3bfa24p-3 + }, + { // Entry 288 + 0x1.4914714a38430228edb55e7949c30a96p-3, + 0x1.47ae12p-3 + }, + { // Entry 289 + -0x1.4914714a38430228edb55e7949c30a96p-3, + -0x1.47ae12p-3 + }, + { // Entry 290 + 0x1.49147350c990b8731b5aa06b375e9ad0p-3, + 0x1.47ae14p-3 + }, + { // Entry 291 + -0x1.49147350c990b8731b5aa06b375e9ad0p-3, + -0x1.47ae14p-3 + }, + { // Entry 292 + 0x1.227b2f3d30af1d4e22444c8e7f338460p-2, + 0x1.1eb852p-2 + }, + { // Entry 293 + -0x1.227b2f3d30af1d4e22444c8e7f338460p-2, + -0x1.1eb852p-2 + }, + { // Entry 294 + 0x1.a49c42670497025996a8b3ff42a49c6fp-2, + 0x1.99999ap-2 + }, + { // Entry 295 + -0x1.a49c42670497025996a8b3ff42a49c6fp-2, + -0x1.99999ap-2 + }, + { // Entry 296 + 0x1.1666dcd198ff92b46da6bfab8aba56a0p-1, + 0x1.0a3d70p-1 + }, + { // Entry 297 + -0x1.1666dcd198ff92b46da6bfab8aba56a0p-1, + -0x1.0a3d70p-1 + }, + { // Entry 298 + 0x1.5e8321e07e76d08e1e985ab3cd7da5b6p-1, + 0x1.47ae14p-1 + }, + { // Entry 299 + -0x1.5e8321e07e76d08e1e985ab3cd7da5b6p-1, + -0x1.47ae14p-1 + }, + { // Entry 300 + 0x1.abad14f0aa07a2fd5cc86f6098a8cf80p-1, + 0x1.851eb8p-1 + }, + { // Entry 301 + -0x1.abad14f0aa07a2fd5cc86f6098a8cf80p-1, + -0x1.851eb8p-1 + }, + { // Entry 302 + 0x1.ff0182668411539d3db9b8fd9af11fd0p-1, + 0x1.c28f5cp-1 + }, + { // Entry 303 + -0x1.ff0182668411539d3db9b8fd9af11fd0p-1, + -0x1.c28f5cp-1 + }, + { // Entry 304 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.p0 + }, + { // Entry 305 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.p0 + }, + { // Entry 306 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.p0 + }, + { // Entry 307 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.p0 + }, + { // Entry 308 + 0x1.95525e4a2ef718eb0754642866b5a7d4p3, + 0x1.9de826p1 + }, + { // Entry 309 + -0x1.95525e4a2ef718eb0754642866b5a7d4p3, + -0x1.9de826p1 + }, + { // Entry 310 + 0x1.d9a0eee58bbd37706f9307edad7da7ecp6, + 0x1.5de826p2 + }, + { // Entry 311 + -0x1.d9a0eee58bbd37706f9307edad7da7ecp6, + -0x1.5de826p2 + }, + { // Entry 312 + 0x1.144da80a2e3513241fedacab70954631p10, + 0x1.ecdc38p2 + }, + { // Entry 313 + -0x1.144da80a2e3513241fedacab70954631p10, + -0x1.ecdc38p2 + }, + { // Entry 314 + 0x1.425f2a3eb0771d774c3e790cd0f40c63p13, + 0x1.3de826p3 + }, + { // Entry 315 + -0x1.425f2a3eb0771d774c3e790cd0f40c63p13, + -0x1.3de826p3 + }, + { // Entry 316 + 0x1.781f001b7cc45e8c057d098d300a73d1p16, + 0x1.856230p3 + }, + { // Entry 317 + -0x1.781f001b7cc45e8c057d098d300a73d1p16, + -0x1.856230p3 + }, + { // Entry 318 + 0x1.b6d506c59d8cbe5c54f7f8927c597f84p19, + 0x1.ccdc3ap3 + }, + { // Entry 319 + -0x1.b6d506c59d8cbe5c54f7f8927c597f84p19, + -0x1.ccdc3ap3 + }, + { // Entry 320 + 0x1.ffffc188ace6b110a80fe49615910ff2p22, + 0x1.0a2b22p4 + }, + { // Entry 321 + -0x1.ffffc188ace6b110a80fe49615910ff2p22, + -0x1.0a2b22p4 + }, + { // Entry 322 + 0x1.ffffc103c9f0158d22d963e5b764c750p14, + 0x1.62e42cp3 + }, + { // Entry 323 + -0x1.ffffc103c9f0158d22d963e5b764c750p14, + -0x1.62e42cp3 + }, + { // Entry 324 + 0x1.ffffe103c7009212034b389759a93fddp14, + 0x1.62e42ep3 + }, + { // Entry 325 + -0x1.ffffe103c7009212034b389759a93fddp14, + -0x1.62e42ep3 + }, + { // Entry 326 + 0x1.00000081e308873bf3c21c42db0354c7p15, + 0x1.62e430p3 + }, + { // Entry 327 + -0x1.00000081e308873bf3c21c42db0354c7p15, + -0x1.62e430p3 + }, + { // Entry 328 + 0x1.fffde082c48329d920ae3d83c4008840p6, + 0x1.62e42cp2 + }, + { // Entry 329 + -0x1.fffde082c48329d920ae3d83c4008840p6, + -0x1.62e42cp2 + }, + { // Entry 330 + 0x1.fffdf082d3c741b1c6dfdaeedbc1cf8ep6, + 0x1.62e42ep2 + }, + { // Entry 331 + -0x1.fffdf082d3c741b1c6dfdaeedbc1cf8ep6, + -0x1.62e42ep2 + }, + { // Entry 332 + 0x1.fffe0082e38b59068dc66cd507e027edp6, + 0x1.62e430p2 + }, + { // Entry 333 + -0x1.fffe0082e38b59068dc66cd507e027edp6, + -0x1.62e430p2 + }, + { // Entry 334 + 0x1.fdfff031b333717da1077c4a50b5cc66p2, + 0x1.62e42cp1 + }, + { // Entry 335 + -0x1.fdfff031b333717da1077c4a50b5cc66p2, + -0x1.62e42cp1 + }, + { // Entry 336 + 0x1.fdfff839b304a63e7b93e68eccb8b8e4p2, + 0x1.62e42ep1 + }, + { // Entry 337 + -0x1.fdfff839b304a63e7b93e68eccb8b8e4p2, + -0x1.62e42ep1 + }, + { // Entry 338 + 0x1.fe000041b2f5bafed9bb81482ca2b8c4p2, + 0x1.62e430p1 + }, + { // Entry 339 + -0x1.fe000041b2f5bafed9bb81482ca2b8c4p2, + -0x1.62e430p1 + }, + { // Entry 340 + 0x1.dffff7a2c45cc12beb2065181f0d2495p0, + 0x1.62e42cp0 + }, + { // Entry 341 + -0x1.dffff7a2c45cc12beb2065181f0d2495p0, + -0x1.62e42cp0 + }, + { // Entry 342 + 0x1.dffffbe2c451be866a16d0ecdd9b167ep0, + 0x1.62e42ep0 + }, + { // Entry 343 + -0x1.dffffbe2c451be866a16d0ecdd9b167ep0, + -0x1.62e42ep0 + }, + { // Entry 344 + 0x1.e0000022c44e3be0d8984e0b1642ab45p0, + 0x1.62e430p0 + }, + { // Entry 345 + -0x1.e0000022c44e3be0d8984e0b1642ab45p0, + -0x1.62e430p0 + }, + { // Entry 346 + 0x1.7ffffb14737c377a230d14a4c1d143bdp-1, + 0x1.62e42cp-1 + }, + { // Entry 347 + -0x1.7ffffb14737c377a230d14a4c1d143bdp-1, + -0x1.62e42cp-1 + }, + { // Entry 348 + 0x1.7ffffd94737a03bf6ea2e40ff28f406bp-1, + 0x1.62e42ep-1 + }, + { // Entry 349 + -0x1.7ffffd94737a03bf6ea2e40ff28f406bp-1, + -0x1.62e42ep-1 + }, + { // Entry 350 + 0x1.8000001473795004b7cd26f5470cab89p-1, + 0x1.62e430p-1 + }, + { // Entry 351 + -0x1.8000001473795004b7cd26f5470cab89p-1, + -0x1.62e430p-1 + }, + { // Entry 352 + 0x1.6a09e23b307ca82c1b1f6dd4a0d1ed94p-2, + 0x1.62e42cp-2 + }, + { // Entry 353 + -0x1.6a09e23b307ca82c1b1f6dd4a0d1ed94p-2, + -0x1.62e42cp-2 + }, + { // Entry 354 + 0x1.6a09e45a3f55bf3a68e492142f0e7acfp-2, + 0x1.62e42ep-2 + }, + { // Entry 355 + -0x1.6a09e45a3f55bf3a68e492142f0e7acfp-2, + -0x1.62e42ep-2 + }, + { // Entry 356 + 0x1.6a09e6794e2f30cb2fc046292efc5a1dp-2, + 0x1.62e430p-2 + }, + { // Entry 357 + -0x1.6a09e6794e2f30cb2fc046292efc5a1dp-2, + -0x1.62e430p-2 + }, + { // Entry 358 + 0x1.64ab8b624500dcc74dc5de97a0720aabp-3, + 0x1.62e42cp-3 + }, + { // Entry 359 + -0x1.64ab8b624500dcc74dc5de97a0720aabp-3, + -0x1.62e42cp-3 + }, + { // Entry 360 + 0x1.64ab8d69f9de29ffa2a5944cf26374fap-3, + 0x1.62e42ep-3 + }, + { // Entry 361 + -0x1.64ab8d69f9de29ffa2a5944cf26374fap-3, + -0x1.62e42ep-3 + }, + { // Entry 362 + 0x1.64ab8f71aebb8d82b05be9a027129269p-3, + 0x1.62e430p-3 + }, + { // Entry 363 + -0x1.64ab8f71aebb8d82b05be9a027129269p-3, + -0x1.62e430p-3 + }, + { // Entry 364 + 0x1.6355e30c5322853739b87125ec22bdecp-4, + 0x1.62e42cp-4 + }, + { // Entry 365 + -0x1.6355e30c5322853739b87125ec22bdecp-4, + -0x1.62e42cp-4 + }, + { // Entry 366 + 0x1.6355e50e3f6d2cc2dd6e747f61bb8c65p-4, + 0x1.62e42ep-4 + }, + { // Entry 367 + -0x1.6355e50e3f6d2cc2dd6e747f61bb8c65p-4, + -0x1.62e42ep-4 + }, + { // Entry 368 + 0x1.6355e7102bb7d9dbd8b8b0d68c09401bp-4, + 0x1.62e430p-4 + }, + { // Entry 369 + -0x1.6355e7102bb7d9dbd8b8b0d68c09401bp-4, + -0x1.62e430p-4 + }, + { // Entry 370 + 0x1.630097b6aaea36d905a1e74a332b0102p-5, + 0x1.62e42cp-5 + }, + { // Entry 371 + -0x1.630097b6aaea36d905a1e74a332b0102p-5, + -0x1.62e42cp-5 + }, + { // Entry 372 + 0x1.630099b725ee198cf48f439e2807bf07p-5, + 0x1.62e42ep-5 + }, + { // Entry 373 + -0x1.630099b725ee198cf48f439e2807bf07p-5, + -0x1.62e42ep-5 + }, + { // Entry 374 + 0x1.63009bb7a0f1fda3e41657180afe2797p-5, + 0x1.62e430p-5 + }, + { // Entry 375 + -0x1.63009bb7a0f1fda3e41657180afe2797p-5, + -0x1.62e430p-5 + }, + { // Entry 376 + 0x1.62eb46cce5848efc0a888499742bfd4cp-6, + 0x1.62e42cp-6 + }, + { // Entry 377 + -0x1.62eb46cce5848efc0a888499742bfd4cp-6, + -0x1.62e42cp-6 + }, + { // Entry 378 + 0x1.62eb48cd04449b44496ceeff57490075p-6, + 0x1.62e42ep-6 + }, + { // Entry 379 + -0x1.62eb48cd04449b44496ceeff57490075p-6, + -0x1.62e42ep-6 + }, + { // Entry 380 + 0x1.62eb4acd2304a7e543238ca64b8cd689p-6, + 0x1.62e430p-6 + }, + { // Entry 381 + -0x1.62eb4acd2304a7e543238ca64b8cd689p-6, + -0x1.62e430p-6 + }, + { // Entry 382 + -0x1.00000105c611505c7f74a519f94171b0p31, + -0x1.62e430p4 + }, + { // Entry 383 + 0x1.00000105c611505c7f74a519f94171b0p31, + 0x1.62e430p4 + }, + { // Entry 384 + -0x1.ffffc20b8fe12f0e17406ea1dc598aa0p30, + -0x1.62e42ep4 + }, + { // Entry 385 + 0x1.ffffc20b8fe12f0e17406ea1dc598aa0p30, + 0x1.62e42ep4 + }, + { // Entry 386 + -0x1.ffff820b9b9fbc6b5dd9c276569c9e77p30, + -0x1.62e42cp4 + }, + { // Entry 387 + 0x1.ffff820b9b9fbc6b5dd9c276569c9e77p30, + 0x1.62e42cp4 + }, + { // Entry 388 + -0x1.00000081e308873bf3c21c42db0354c7p15, + -0x1.62e430p3 + }, + { // Entry 389 + 0x1.00000081e308873bf3c21c42db0354c7p15, + 0x1.62e430p3 + }, + { // Entry 390 + -0x1.ffffe103c7009212034b389759a93fddp14, + -0x1.62e42ep3 + }, + { // Entry 391 + 0x1.ffffe103c7009212034b389759a93fddp14, + 0x1.62e42ep3 + }, + { // Entry 392 + -0x1.ffffc103c9f0158d22d963e5b764c750p14, + -0x1.62e42cp3 + }, + { // Entry 393 + 0x1.ffffc103c9f0158d22d963e5b764c750p14, + 0x1.62e42cp3 + }, + { // Entry 394 + -0x1.fffe0082e38b59068dc66cd507e027edp6, + -0x1.62e430p2 + }, + { // Entry 395 + 0x1.fffe0082e38b59068dc66cd507e027edp6, + 0x1.62e430p2 + }, + { // Entry 396 + -0x1.fffdf082d3c741b1c6dfdaeedbc1cf8ep6, + -0x1.62e42ep2 + }, + { // Entry 397 + 0x1.fffdf082d3c741b1c6dfdaeedbc1cf8ep6, + 0x1.62e42ep2 + }, + { // Entry 398 + -0x1.fffde082c48329d920ae3d83c4008840p6, + -0x1.62e42cp2 + }, + { // Entry 399 + 0x1.fffde082c48329d920ae3d83c4008840p6, + 0x1.62e42cp2 + }, + { // Entry 400 + -0x1.fe000041b2f5bafed9bb81482ca2b8c4p2, + -0x1.62e430p1 + }, + { // Entry 401 + 0x1.fe000041b2f5bafed9bb81482ca2b8c4p2, + 0x1.62e430p1 + }, + { // Entry 402 + -0x1.fdfff839b304a63e7b93e68eccb8b8e4p2, + -0x1.62e42ep1 + }, + { // Entry 403 + 0x1.fdfff839b304a63e7b93e68eccb8b8e4p2, + 0x1.62e42ep1 + }, + { // Entry 404 + -0x1.fdfff031b333717da1077c4a50b5cc66p2, + -0x1.62e42cp1 + }, + { // Entry 405 + 0x1.fdfff031b333717da1077c4a50b5cc66p2, + 0x1.62e42cp1 + }, + { // Entry 406 + -0x1.e0000022c44e3be0d8984e0b1642ab45p0, + -0x1.62e430p0 + }, + { // Entry 407 + 0x1.e0000022c44e3be0d8984e0b1642ab45p0, + 0x1.62e430p0 + }, + { // Entry 408 + -0x1.dffffbe2c451be866a16d0ecdd9b167ep0, + -0x1.62e42ep0 + }, + { // Entry 409 + 0x1.dffffbe2c451be866a16d0ecdd9b167ep0, + 0x1.62e42ep0 + }, + { // Entry 410 + -0x1.dffff7a2c45cc12beb2065181f0d2495p0, + -0x1.62e42cp0 + }, + { // Entry 411 + 0x1.dffff7a2c45cc12beb2065181f0d2495p0, + 0x1.62e42cp0 + }, + { // Entry 412 + -0x1.8000001473795004b7cd26f5470cab89p-1, + -0x1.62e430p-1 + }, + { // Entry 413 + 0x1.8000001473795004b7cd26f5470cab89p-1, + 0x1.62e430p-1 + }, + { // Entry 414 + -0x1.7ffffd94737a03bf6ea2e40ff28f406bp-1, + -0x1.62e42ep-1 + }, + { // Entry 415 + 0x1.7ffffd94737a03bf6ea2e40ff28f406bp-1, + 0x1.62e42ep-1 + }, + { // Entry 416 + -0x1.7ffffb14737c377a230d14a4c1d143bdp-1, + -0x1.62e42cp-1 + }, + { // Entry 417 + 0x1.7ffffb14737c377a230d14a4c1d143bdp-1, + 0x1.62e42cp-1 + }, + { // Entry 418 + -0x1.6a09e6794e2f30cb2fc046292efc5a1dp-2, + -0x1.62e430p-2 + }, + { // Entry 419 + 0x1.6a09e6794e2f30cb2fc046292efc5a1dp-2, + 0x1.62e430p-2 + }, + { // Entry 420 + -0x1.6a09e45a3f55bf3a68e492142f0e7acfp-2, + -0x1.62e42ep-2 + }, + { // Entry 421 + 0x1.6a09e45a3f55bf3a68e492142f0e7acfp-2, + 0x1.62e42ep-2 + }, + { // Entry 422 + -0x1.6a09e23b307ca82c1b1f6dd4a0d1ed94p-2, + -0x1.62e42cp-2 + }, + { // Entry 423 + 0x1.6a09e23b307ca82c1b1f6dd4a0d1ed94p-2, + 0x1.62e42cp-2 + }, + { // Entry 424 + -0x1.64ab8f71aebb8d82b05be9a027129269p-3, + -0x1.62e430p-3 + }, + { // Entry 425 + 0x1.64ab8f71aebb8d82b05be9a027129269p-3, + 0x1.62e430p-3 + }, + { // Entry 426 + -0x1.64ab8d69f9de29ffa2a5944cf26374fap-3, + -0x1.62e42ep-3 + }, + { // Entry 427 + 0x1.64ab8d69f9de29ffa2a5944cf26374fap-3, + 0x1.62e42ep-3 + }, + { // Entry 428 + -0x1.64ab8b624500dcc74dc5de97a0720aabp-3, + -0x1.62e42cp-3 + }, + { // Entry 429 + 0x1.64ab8b624500dcc74dc5de97a0720aabp-3, + 0x1.62e42cp-3 + }, + { // Entry 430 + -0x1.6355e7102bb7d9dbd8b8b0d68c09401bp-4, + -0x1.62e430p-4 + }, + { // Entry 431 + 0x1.6355e7102bb7d9dbd8b8b0d68c09401bp-4, + 0x1.62e430p-4 + }, + { // Entry 432 + -0x1.6355e50e3f6d2cc2dd6e747f61bb8c65p-4, + -0x1.62e42ep-4 + }, + { // Entry 433 + 0x1.6355e50e3f6d2cc2dd6e747f61bb8c65p-4, + 0x1.62e42ep-4 + }, + { // Entry 434 + -0x1.6355e30c5322853739b87125ec22bdecp-4, + -0x1.62e42cp-4 + }, + { // Entry 435 + 0x1.6355e30c5322853739b87125ec22bdecp-4, + 0x1.62e42cp-4 + }, + { // Entry 436 + -0x1.63009bb7a0f1fda3e41657180afe2797p-5, + -0x1.62e430p-5 + }, + { // Entry 437 + 0x1.63009bb7a0f1fda3e41657180afe2797p-5, + 0x1.62e430p-5 + }, + { // Entry 438 + -0x1.630099b725ee198cf48f439e2807bf07p-5, + -0x1.62e42ep-5 + }, + { // Entry 439 + 0x1.630099b725ee198cf48f439e2807bf07p-5, + 0x1.62e42ep-5 + }, + { // Entry 440 + -0x1.630097b6aaea36d905a1e74a332b0102p-5, + -0x1.62e42cp-5 + }, + { // Entry 441 + 0x1.630097b6aaea36d905a1e74a332b0102p-5, + 0x1.62e42cp-5 + }, + { // Entry 442 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 443 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 444 + 0.0, + 0.0 + }, + { // Entry 445 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 446 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 447 + 0x1.ecb35112d674d05785ec00066c2b3ec8p-4, + 0x1.eb851cp-4 + }, + { // Entry 448 + -0x1.ecb35112d674d05785ec00066c2b3ec8p-4, + -0x1.eb851cp-4 + }, + { // Entry 449 + 0x1.ecb35316874ebf73aba92491a44e079fp-4, + 0x1.eb851ep-4 + }, + { // Entry 450 + -0x1.ecb35316874ebf73aba92491a44e079fp-4, + -0x1.eb851ep-4 + }, + { // Entry 451 + 0x1.ecb3551a3828b6429eb2a33a17713014p-4, + 0x1.eb8520p-4 + }, + { // Entry 452 + -0x1.ecb3551a3828b6429eb2a33a17713014p-4, + -0x1.eb8520p-4 + }, + { // Entry 453 + 0x1.0accffddb7a12b4e6a96d72af3961f53p-1, + 0x1.fffffep-2 + }, + { // Entry 454 + -0x1.0accffddb7a12b4e6a96d72af3961f53p-1, + -0x1.fffffep-2 + }, + { // Entry 455 + 0x1.0acd00fe63b96ca357895761ae66224ap-1, + 0x1.p-1 + }, + { // Entry 456 + -0x1.0acd00fe63b96ca357895761ae66224ap-1, + -0x1.p-1 + }, + { // Entry 457 + 0x1.0acd033fbbeab766f2754da05aade930p-1, + 0x1.000002p-1 + }, + { // Entry 458 + -0x1.0acd033fbbeab766f2754da05aade930p-1, + -0x1.000002p-1 + }, + { // Entry 459 + 0x1.2cd9fab9e4439e75ab2524ffce0283e9p0, + 0x1.fffffep-1 + }, + { // Entry 460 + -0x1.2cd9fab9e4439e75ab2524ffce0283e9p0, + -0x1.fffffep-1 + }, + { // Entry 461 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.p0 + }, + { // Entry 462 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.p0 + }, + { // Entry 463 + 0x1.2cd9ff5afa44ba9aa6eb599be725c9bap0, + 0x1.000002p0 + }, + { // Entry 464 + -0x1.2cd9ff5afa44ba9aa6eb599be725c9bap0, + -0x1.000002p0 + }, + { // Entry 465 + 0x1.ab5aa630eb432540ea7a11d9455e5b65p30, + 0x1.5ffffep4 + }, + { // Entry 466 + -0x1.ab5aa630eb432540ea7a11d9455e5b65p30, + -0x1.5ffffep4 + }, + { // Entry 467 + 0x1.ab5adb9c435ff8194ddd9a72c8c01183p30, + 0x1.60p4 + }, + { // Entry 468 + -0x1.ab5adb9c435ff8194ddd9a72c8c01183p30, + -0x1.60p4 + }, + { // Entry 469 + 0x1.ab5b1107a22a36602250dcbb2b7eed81p30, + 0x1.600002p4 + }, + { // Entry 470 + -0x1.ab5b1107a22a36602250dcbb2b7eed81p30, + -0x1.600002p4 + }, + { // Entry 471 + 0x1.226aceedc3b97c2a0dd7e83bf16d5abdp32, + 0x1.6ffffep4 + }, + { // Entry 472 + -0x1.226aceedc3b97c2a0dd7e83bf16d5abdp32, + -0x1.6ffffep4 + }, + { // Entry 473 + 0x1.226af33b1fdc0a574c76ab2161309880p32, + 0x1.70p4 + }, + { // Entry 474 + -0x1.226af33b1fdc0a574c76ab2161309880p32, + -0x1.70p4 + }, + { // Entry 475 + 0x1.226b1788808844517796616972748648p32, + 0x1.700002p4 + }, + { // Entry 476 + -0x1.226b1788808844517796616972748648p32, + -0x1.700002p4 + }, + { // Entry 477 + 0x1.ffff8188b8b59acbb8a36c9f1de4adc7p22, + 0x1.0a2b20p4 + }, + { // Entry 478 + -0x1.ffff8188b8b59acbb8a36c9f1de4adc7p22, + -0x1.0a2b20p4 + }, + { // Entry 479 + 0x1.ffffc188ace6b110a80fe49615910ff2p22, + 0x1.0a2b22p4 + }, + { // Entry 480 + -0x1.ffffc188ace6b110a80fe49615910ff2p22, + -0x1.0a2b22p4 + }, + { // Entry 481 + 0x1.000000c4548be32ddd1950fdd39f4c49p23, + 0x1.0a2b24p4 + }, + { // Entry 482 + -0x1.000000c4548be32ddd1950fdd39f4c49p23, + -0x1.0a2b24p4 + }, + { // Entry 483 + 0x1.ffffbec45834f71f62c471559658238ap10, + 0x1.0a2b20p3 + }, + { // Entry 484 + -0x1.ffffbec45834f71f62c471559658238ap10, + -0x1.0a2b20p3 + }, + { // Entry 485 + 0x1.ffffdec455613c8f512d34bec21133e4p10, + 0x1.0a2b22p3 + }, + { // Entry 486 + -0x1.ffffdec455613c8f512d34bec21133e4p10, + -0x1.0a2b22p3 + }, + { // Entry 487 + 0x1.fffffec4548d81de03eb840f2501233dp10, + 0x1.0a2b24p3 + }, + { // Entry 488 + -0x1.fffffec4548d81de03eb840f2501233dp10, + -0x1.0a2b24p3 + }, + { // Entry 489 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + 0x1.65a9f6p6 + }, + { // Entry 490 + -0x1.fffed83ee2532ac846bdff097cd2f43bp127, + -0x1.65a9f6p6 + }, + { // Entry 491 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 492 + -0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 493 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 494 + -HUGE_VALF, + -0x1.65a9fap6 + }, + { // Entry 495 + -HUGE_VALF, + -0x1.65a9fap6 + }, + { // Entry 496 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 497 + -0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 498 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 499 + -0x1.fffed83ee2532ac846bdff097cd2f43bp127, + -0x1.65a9f6p6 + }, + { // Entry 500 + 0x1.fffed83ee2532ac846bdff097cd2f43bp127, + 0x1.65a9f6p6 + }, + { // Entry 501 + 0x1.fffffe00000000055555455555655559p-31, + 0x1.fffffep-31 + }, + { // Entry 502 + -0x1.fffffe00000000055555455555655559p-31, + -0x1.fffffep-31 + }, + { // Entry 503 + 0x1.0000000000000002aaaaaaaaaaaaaaacp-30, + 0x1.p-30 + }, + { // Entry 504 + -0x1.0000000000000002aaaaaaaaaaaaaaacp-30, + -0x1.p-30 + }, + { // Entry 505 + 0x1.0000020000000002aaaabaaaaacaaaacp-30, + 0x1.000002p-30 + }, + { // Entry 506 + -0x1.0000020000000002aaaabaaaaacaaaacp-30, + -0x1.000002p-30 + }, + { // Entry 507 + 0x1.fffffe0155555155999d984449720172p-16, + 0x1.fffffep-16 + }, + { // Entry 508 + -0x1.fffffe0155555155999d984449720172p-16, + -0x1.fffffep-16 + }, + { // Entry 509 + 0x1.00000000aaaaaaaaccccccccd00d00d0p-15, + 0x1.p-15 + }, + { // Entry 510 + -0x1.00000000aaaaaaaaccccccccd00d00d0p-15, + -0x1.p-15 + }, + { // Entry 511 + 0x1.00000200aaaaaeaaccd4ce222abd00fdp-15, + 0x1.000002p-15 + }, + { // Entry 512 + -0x1.00000200aaaaaeaaccd4ce222abd00fdp-15, + -0x1.000002p-15 + }, + { // Entry 513 + 0x1.0002a9acc4cd92374b92f33d0d8e44f7p-6, + 0x1.fffffep-7 + }, + { // Entry 514 + -0x1.0002a9acc4cd92374b92f33d0d8e44f7p-6, + -0x1.fffffep-7 + }, + { // Entry 515 + 0x1.0002aaaccccd9cd9fbd8a7d1dc72c44bp-6, + 0x1.p-6 + }, + { // Entry 516 + -0x1.0002aaaccccd9cd9fbd8a7d1dc72c44bp-6, + -0x1.p-6 + }, + { // Entry 517 + 0x1.0002acacdccdb24f5ce4216260c9d73ep-6, + 0x1.000002p-6 + }, + { // Entry 518 + -0x1.0002acacdccdb24f5ce4216260c9d73ep-6, + -0x1.000002p-6 + }, + { // Entry 519 + 0x1.000aa9ccad0025af274480ba84b0fbbcp-5, + 0x1.fffffep-6 + }, + { // Entry 520 + -0x1.000aa9ccad0025af274480ba84b0fbbcp-5, + -0x1.fffffep-6 + }, + { // Entry 521 + 0x1.000aaacccd00d03b3cb23dfecf8fcbdcp-5, + 0x1.p-5 + }, + { // Entry 522 + -0x1.000aaacccd00d03b3cb23dfecf8fcbdcp-5, + -0x1.p-5 + }, + { // Entry 523 + 0x1.000aaccd0d0226136f8e122926144f90p-5, + 0x1.000002p-5 + }, + { // Entry 524 + -0x1.000aaccd0d0226136f8e122926144f90p-5, + -0x1.000002p-5 + }, + { // Entry 525 + 0x1.002aabcc59c3209063dc64ea2e03bf70p-4, + 0x1.fffffep-5 + }, + { // Entry 526 + -0x1.002aabcc59c3209063dc64ea2e03bf70p-4, + -0x1.fffffep-5 + }, + { // Entry 527 + 0x1.002aacccd9cdcb1600814d8ee0ea5e98p-4, + 0x1.p-4 + }, + { // Entry 528 + -0x1.002aacccd9cdcb1600814d8ee0ea5e98p-4, + -0x1.p-4 + }, + { // Entry 529 + 0x1.002aaecdd9e32321b9d285e5bac4a4bdp-4, + 0x1.000002p-4 + }, + { // Entry 530 + -0x1.002aaecdd9e32321b9d285e5bac4a4bdp-4, + -0x1.000002p-4 + }, + { // Entry 531 + 0x1.00aacbce0c844e1659887b1aa3a95e84p-3, + 0x1.fffffep-4 + }, + { // Entry 532 + -0x1.00aacbce0c844e1659887b1aa3a95e84p-3, + -0x1.fffffep-4 + }, + { // Entry 533 + 0x1.00aaccd00d2f0d82badd7396c439091ep-3, + 0x1.p-3 + }, + { // Entry 534 + -0x1.00aaccd00d2f0d82badd7396c439091ep-3, + -0x1.p-3 + }, + { // Entry 535 + 0x1.00aaced40e8498637f252d2fe50c3df3p-3, + 0x1.000002p-3 + }, + { // Entry 536 + -0x1.00aaced40e8498637f252d2fe50c3df3p-3, + -0x1.000002p-3 + }, + { // Entry 537 + 0x1.02accc94fd5fc9d5c6d93f41fe780d47p-2, + 0x1.fffffep-3 + }, + { // Entry 538 + -0x1.02accc94fd5fc9d5c6d93f41fe780d47p-2, + -0x1.fffffep-3 + }, + { // Entry 539 + 0x1.02accd9d08101e6674cdf3fc8eaabf2ap-2, + 0x1.p-2 + }, + { // Entry 540 + -0x1.02accd9d08101e6674cdf3fc8eaabf2ap-2, + -0x1.p-2 + }, + { // Entry 541 + 0x1.02accfad1d70f80837554f9fbb4fbbb9p-2, + 0x1.000002p-2 + }, + { // Entry 542 + -0x1.02accfad1d70f80837554f9fbb4fbbb9p-2, + -0x1.000002p-2 + }, + { // Entry 543 + 0x1.d03cf2784edbd911feefcda4d65799f9p1, + 0x1.fffffep0 + }, + { // Entry 544 + -0x1.d03cf2784edbd911feefcda4d65799f9p1, + -0x1.fffffep0 + }, + { // Entry 545 + 0x1.d03cf63b6e19f6f34c802c96200970efp1, + 0x1.p1 + }, + { // Entry 546 + -0x1.d03cf63b6e19f6f34c802c96200970efp1, + -0x1.p1 + }, + { // Entry 547 + 0x1.d03cfdc1acabf591817690cd031d2cc7p1, + 0x1.000002p1 + }, + { // Entry 548 + -0x1.d03cfdc1acabf591817690cd031d2cc7p1, + -0x1.000002p1 + }, + { // Entry 549 + 0x1.b4a37963495a7a1c36845b0346599916p4, + 0x1.fffffep1 + }, + { // Entry 550 + -0x1.b4a37963495a7a1c36845b0346599916p4, + -0x1.fffffep1 + }, + { // Entry 551 + 0x1.b4a3803703630c8fe70261d92e563a88p4, + 0x1.p2 + }, + { // Entry 552 + -0x1.b4a3803703630c8fe70261d92e563a88p4, + -0x1.p2 + }, + { // Entry 553 + 0x1.b4a38dde77c6101fbf8ab4c24ce6ac27p4, + 0x1.000002p2 + }, + { // Entry 554 + -0x1.b4a38dde77c6101fbf8ab4c24ce6ac27p4, + -0x1.000002p2 + }, + { // Entry 555 + 0x1.749e996ff7805133d5d6b4402bd52f34p10, + 0x1.fffffep2 + }, + { // Entry 556 + -0x1.749e996ff7805133d5d6b4402bd52f34p10, + -0x1.fffffep2 + }, + { // Entry 557 + 0x1.749ea514eca65d06ea7688aff46cfe09p10, + 0x1.p3 + }, + { // Entry 558 + -0x1.749ea514eca65d06ea7688aff46cfe09p10, + -0x1.p3 + }, + { // Entry 559 + 0x1.749ebc5ed809ebabcca514f4a486c5a8p10, + 0x1.000002p3 + }, + { // Entry 560 + -0x1.749ebc5ed809ebabcca514f4a486c5a8p10, + -0x1.000002p3 + }, + { // Entry 561 + 0x1.0f2eac1794b52d4201f8831417012cc1p22, + 0x1.fffffep3 + }, + { // Entry 562 + -0x1.0f2eac1794b52d4201f8831417012cc1p22, + -0x1.fffffep3 + }, + { // Entry 563 + 0x1.0f2ebd0a7ffe3de6ac939fced0122707p22, + 0x1.p4 + }, + { // Entry 564 + -0x1.0f2ebd0a7ffe3de6ac939fced0122707p22, + -0x1.p4 + }, + { // Entry 565 + 0x1.0f2edef059bdeb7814367009089b255ap22, + 0x1.000002p4 + }, + { // Entry 566 + -0x1.0f2edef059bdeb7814367009089b255ap22, + -0x1.000002p4 + }, + { // Entry 567 + 0x1.1f43d8dc3908b8ed87a5abc6c3ed2c73p45, + 0x1.fffffep4 + }, + { // Entry 568 + -0x1.1f43d8dc3908b8ed87a5abc6c3ed2c73p45, + -0x1.fffffep4 + }, + { // Entry 569 + 0x1.1f43fcc4b662c7d847884009ffe4c4c3p45, + 0x1.p5 + }, + { // Entry 570 + -0x1.1f43fcc4b662c7d847884009ffe4c4c3p45, + -0x1.p5 + }, + { // Entry 571 + 0x1.1f444495be8e1616a1e5e37a356cd622p45, + 0x1.000002p5 + }, + { // Entry 572 + -0x1.1f444495be8e1616a1e5e37a356cd622p45, + -0x1.000002p5 + }, + { // Entry 573 + 0x1.4259323902dbc6e62e3e07ce26cd904cp91, + 0x1.fffffep5 + }, + { // Entry 574 + -0x1.4259323902dbc6e62e3e07ce26cd904cp91, + -0x1.fffffep5 + }, + { // Entry 575 + 0x1.425982cf597cd205ce3d5b4edb031756p91, + 0x1.p6 + }, + { // Entry 576 + -0x1.425982cf597cd205ce3d5b4edb031756p91, + -0x1.p6 + }, + { // Entry 577 + 0x1.425a23fc432fb5d556006a4d8e7ee11bp91, + 0x1.000002p6 + }, + { // Entry 578 + -0x1.425a23fc432fb5d556006a4d8e7ee11bp91, + -0x1.000002p6 + }, + { // Entry 579 + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 580 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 581 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 582 + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 583 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 584 + HUGE_VALF, + 0x1.fffffep127 + }, + { // Entry 585 + HUGE_VALF, + 0x1.fffffcp127 + }, + { // Entry 586 + 0x1.718f47f73f26d7350c83f4c71e2d335ep3, + 0x1.921fb6p1 + }, + { // Entry 587 + 0x1.2690f74d668ce2b3a755fcc5d03d001ap1, + 0x1.921fb6p0 + }, + { // Entry 588 + 0x1.2cd9ff5afa44ba9aa6eb599be725c9bap0, + 0x1.000002p0 + }, + { // Entry 589 + 0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + 0x1.p0 + }, + { // Entry 590 + 0x1.2cd9fab9e4439e75ab2524ffce0283e9p0, + 0x1.fffffep-1 + }, + { // Entry 591 + 0x1.bcc271add0bab156a8d0a0df56b0db93p-1, + 0x1.921fb6p-1 + }, + { // Entry 592 + 0x1.000002p-126, + 0x1.000002p-126 + }, + { // Entry 593 + 0x1.p-126, + 0x1.p-126 + }, + { // Entry 594 + 0x1.fffffcp-127, + 0x1.fffffcp-127 + }, + { // Entry 595 + 0x1.fffff8p-127, + 0x1.fffff8p-127 + }, + { // Entry 596 + 0x1.p-148, + 0x1.p-148 + }, + { // Entry 597 + 0x1.p-149, + 0x1.p-149 + }, + { // Entry 598 + 0.0, + 0.0f + }, + { // Entry 599 + -0.0, + -0.0f + }, + { // Entry 600 + -0x1.p-149, + -0x1.p-149 + }, + { // Entry 601 + -0x1.p-148, + -0x1.p-148 + }, + { // Entry 602 + -0x1.fffff8p-127, + -0x1.fffff8p-127 + }, + { // Entry 603 + -0x1.fffffcp-127, + -0x1.fffffcp-127 + }, + { // Entry 604 + -0x1.p-126, + -0x1.p-126 + }, + { // Entry 605 + -0x1.000002p-126, + -0x1.000002p-126 + }, + { // Entry 606 + -0x1.bcc271add0bab156a8d0a0df56b0db93p-1, + -0x1.921fb6p-1 + }, + { // Entry 607 + -0x1.2cd9fab9e4439e75ab2524ffce0283e9p0, + -0x1.fffffep-1 + }, + { // Entry 608 + -0x1.2cd9fc44eb9825a80249487f064ffd5cp0, + -0x1.p0 + }, + { // Entry 609 + -0x1.2cd9ff5afa44ba9aa6eb599be725c9bap0, + -0x1.000002p0 + }, + { // Entry 610 + -0x1.2690f74d668ce2b3a755fcc5d03d001ap1, + -0x1.921fb6p0 + }, + { // Entry 611 + -0x1.718f47f73f26d7350c83f4c71e2d335ep3, + -0x1.921fb6p1 + }, + { // Entry 612 + -HUGE_VALF, + -0x1.fffffcp127 + }, + { // Entry 613 + -HUGE_VALF, + -0x1.fffffep127 + }, + { // Entry 614 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 615 + 0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + 0x1.65a9f8p6 + }, + { // Entry 616 + -0x1.ffffd83e8e7281a45e432bd58cbbc38ap127, + -0x1.65a9f8p6 + }, + { // Entry 617 + HUGE_VALF, + 0x1.65a9fap6 + }, + { // Entry 618 + -HUGE_VALF, + -0x1.65a9fap6 + } +}; diff --git a/tests/math_data/sqrt_intel_data.h b/tests/math_data/sqrt_intel_data.h new file mode 100644 index 000000000..c3417b87c --- /dev/null +++ b/tests/math_data/sqrt_intel_data.h @@ -0,0 +1,718 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_sqrt_intel_data[] = { + { // Entry 0 + 0x1.00000000000007ffffffffffffe0p-1, + 0x1.0000000000001p-2 + }, + { // Entry 1 + 0x1.00000000000007ffffffffffffe0p-5, + 0x1.0000000000001p-10 + }, + { // Entry 2 + 0x1.00000000000007ffffffffffffe0p-20, + 0x1.0000000000001p-40 + }, + { // Entry 3 + 0x1.6a09e667f3bcd459022e5304d0b08199p-511, + 0x1.0000000000001p-1021 + }, + { // Entry 4 + 0x1.00000000000007ffffffffffffe0p-511, + 0x1.0000000000001p-1022 + }, + { // Entry 5 + 0x1.00000000000007ffffffffffffe0p0, + 0x1.0000000000001p0 + }, + { // Entry 6 + 0x1.00000000000007ffffffffffffe0p1, + 0x1.0000000000001p2 + }, + { // Entry 7 + 0x1.0000000000000fffffffffffff80p0, + 0x1.0000000000002p0 + }, + { // Entry 8 + 0x1.6a09e667f3bceaf9a094d2409bd702e2p-3, + 0x1.0000000000003p-5 + }, + { // Entry 9 + 0x1.6a09e667f3bceaf9a094d2409bd702e2p-511, + 0x1.0000000000003p-1021 + }, + { // Entry 10 + 0x1.00000000000017fffffffffffee0p-511, + 0x1.0000000000003p-1022 + }, + { // Entry 11 + 0x1.6a09e667f3bceaf9a094d2409bd702e2p0, + 0x1.0000000000003p1 + }, + { // Entry 12 + 0x1.00000000000037fffffffffff9e0p-3, + 0x1.0000000000007p-6 + }, + { // Entry 13 + 0x1.00000000000037fffffffffff9e0p-511, + 0x1.0000000000007p-1022 + }, + { // Entry 14 + 0x1.00000000000077ffffffffffe3e0p-1, + 0x1.000000000000fp-2 + }, + { // Entry 15 + 0x1.6a09e667f40bfb3319b85c0967d96777p-21, + 0x1.00000000007p-41 + }, + { // Entry 16 + 0x1.0000003ffffff8000001ffffff60p-10, + 0x1.0000008p-20 + }, + { // Entry 17 + 0x1.0000007fffffe000000ffffff6000006p-20, + 0x1.0000010p-40 + }, + { // Entry 18 + 0x1.000000ffffef78001087ff66d3e1aa74p-503, + 0x1.000001ffffdffp-1006 + }, + { // Entry 19 + 0x1.000000ffffef8000107fff676001a8dfp-509, + 0x1.000001ffffep-1018 + }, + { // Entry 20 + 0x1.000001fffffe000003fffff600001bffp50, + 0x1.0000040p100 + }, + { // Entry 21 + 0x1.000001fffffe880002effff90be01238p-10, + 0x1.0000040000011p-20 + }, + { // Entry 22 + 0x1.6a0a40db7d51f00038bb4d171626c123p-500, + 0x1.00007feafp-999 + }, + { // Entry 23 + 0x1.6a2bd5be688300293f34c09a864348a7p-511, + 0x1.003p-1021 + }, + { // Entry 24 + 0x1.6a6521b171386b3e9c9708c18094f81ep1, + 0x1.0081159eb7531p3 + }, + { // Entry 25 + 0x1.6b20018577e83a548e15ae72516a45e5p1, + 0x1.0189e42871b67p3 + }, + { // Entry 26 + 0x1.030dc4eb8784b800006b31393def4b78p-5, + 0x1.0624dd322b9bdp-10 + }, + { // Entry 27 + 0x1.030dc4f1684a3000002a2118b9ff4fc3p-5, + 0x1.0624dd3e110d4p-10 + }, + { // Entry 28 + 0x1.030dc4f1696f97ffffdbf85c70af7a32p-5, + 0x1.0624dd3e135f1p-10 + }, + { // Entry 29 + 0x1.030dc4fce267800000008a6d267d447fp-5, + 0x1.0624dd554b60ap-10 + }, + { // Entry 30 + 0x1.6e9b2675a66267ffc501a2a352d80cadp-11, + 0x1.068p-21 + }, + { // Entry 31 + 0x1.6e9b2675a66267ffc501a2a352d80cadp-18, + 0x1.068p-35 + }, + { // Entry 32 + 0x1.6ede29b025aaf0011c319ebac8dce9fap-11, + 0x1.06ep-21 + }, + { // Entry 33 + 0x1.717983890b6a97fffff1c9e6db43dc37p48, + 0x1.0a9fc36f5705dp97 + }, + { // Entry 34 + 0x1.752deb01e1aa48002dcf5a4f55adabf7p-4, + 0x1.0fff6b87f90p-7 + }, + { // Entry 35 + 0x1.76356020885cca53989372a8049c6ccbp-11, + 0x1.118p-21 + }, + { // Entry 36 + 0x1.7b63945a7c4cb40027ac4d7964bdfdffp-11, + 0x1.192p-21 + }, + { // Entry 37 + 0x1.83821c9ec9b2a8003b649ec5754fa2e6p-6, + 0x1.2549525495251p-11 + }, + { // Entry 38 + 0x1.8ac40868f92c17ff0ecf9e6c802c000ap-11, + 0x1.306p-21 + }, + { // Entry 39 + 0x1.1a9dc8f6df10380eb98f9c8f8ada2dc3p-10, + 0x1.380p-20 + }, + { // Entry 40 + 0x1.1a9dc8f6df10380eb98f9c8f8ada2dc3p-20, + 0x1.380p-40 + }, + { // Entry 41 + 0x1.1d43ad1c267397ff000366e504ec0904p0, + 0x1.3ddfc154bf689p0 + }, + { // Entry 42 + 0x1.2d4d2aa66779740440a7ac683ca92be7p0, + 0x1.629e8d8dfe88ep0 + }, + { // Entry 43 + 0x1.ae89f995ad3ab3fed29f3cdde669565cp-1, + 0x1.6a09e667f3bc9p-1 + }, + { // Entry 44 + 0x1.bb67ae8584caa73b25742d7078b83b89p-537, + 0x1.8p-1073 + }, + { // Entry 45 + 0x1.bb67ae86abb307ffff9450222403ce3fp0, + 0x1.80000001fecb9p1 + }, + { // Entry 46 + 0x1.404b92fd6a8120001cc2a21eb82dc383p-1, + 0x1.90bd05c8ff254p-2 + }, + { // Entry 47 + 0x1.43d1363d61aec800006b07fe0fefdfa2p-2, + 0x1.999999d880368p-4 + }, + { // Entry 48 + 0x1.4e78ac22c6f5e800ffc121b0def932c0p5, + 0x1.b4ff1a0c9382fp10 + }, + { // Entry 49 + 0x1.50144b1c72dd17ff0012ebc586f4e10fp-519, + 0x1.b93546c68p-1038 + }, + { // Entry 50 + 0x1.dfd052dbe76857ff0b1587ce79a18a73p7, + 0x1.c1a69fccd6111p15 + }, + { // Entry 51 + 0x1.e4826468545d31f66cbd21db9f6249b7p-1, + 0x1.ca7ea70a502bep-1 + }, + { // Entry 52 + 0x1.e96948d224f0585c0f7a85d30932126dp1, + 0x1.d3d1b1bfd11bbp3 + }, + { // Entry 53 + 0x1.ee51da20312bfe8a4722b6c085901297p-512, + 0x1.dd3fffffffffep-1023 + }, + { // Entry 54 + 0x1.5f744159f7e5efff106d1c5d5d64aa8dp-10, + 0x1.e28p-20 + }, + { // Entry 55 + 0x1.fdcecc6f3d49e79e3d375b22e0b9f4b1p-11, + 0x1.fbap-21 + }, + { // Entry 56 + 0x1.fe35a055fc4be7fc5f7d57d28e7bd1a7p0, + 0x1.fc6cdb0930a24p1 + }, + { // Entry 57 + 0x1.feadd22799ac4801f8159ee8a6db5ef2p-1, + 0x1.fd5c83adbf2a9p-1 + }, + { // Entry 58 + 0x1.ffbffbff80080000000200300a02205cp-5, + 0x1.ff80000000380p-9 + }, + { // Entry 59 + 0x1.ffefffbffdffdbfe9fef7f2bf4ab6197p-512, + 0x1.ffdfffffffffep-1023 + }, + { // Entry 60 + 0x1.ffff7fffeffff3fffcbffecfff75ffc0p-21, + 0x1.fffefffffffffp-41 + }, + { // Entry 61 + 0x1.fffff3ffffdbf7ff27cff9aa4fbac71dp-21, + 0x1.ffffe7fffffffp-41 + }, + { // Entry 62 + 0x1.fffff3ffffdbf7ff27cff9aa4fbac71dp-23, + 0x1.ffffe7fffffffp-45 + }, + { // Entry 63 + 0x1.ffffff800000e0000037ffffdcffffdep-488, + 0x1.ffffff000001ep-975 + }, + { // Entry 64 + 0x1.ffffff8000010000003fffffcfffffd4p-26, + 0x1.ffffff0000022p-51 + }, + { // Entry 65 + 0x1.fffffff9fffff7f6ffffe7e4ffef939ap-21, + 0x1.fffffff3fffffp-41 + }, + { // Entry 66 + 0x1.fffffffe000017ff000017feff7023fep-5, + 0x1.fffffffc00003p-9 + }, + { // Entry 67 + 0x1.fffffffe000017ff000017feff7023fep-6, + 0x1.fffffffc00003p-11 + }, + { // Entry 68 + 0x1.fffffffe000017ff000017feff7023fep-21, + 0x1.fffffffc00003p-41 + }, + { // Entry 69 + 0x1.fffffffe000017ff000017feff7023fep-156, + 0x1.fffffffc00003p-311 + }, + { // Entry 70 + 0x1.fffffffe000017ff000017feff7023fep-511, + 0x1.fffffffc00003p-1021 + }, + { // Entry 71 + 0x1.fffffffe3ffff7ff3bfff8ff546ff6cfp-21, + 0x1.fffffffc7ffffp-41 + }, + { // Entry 72 + 0x1.6a09e667f3b858019b5c99e309b9080ap-3, + 0x1.fffffffffff37p-6 + }, + { // Entry 73 + 0x1.fffffffffffd77fffffffffe65efffffp-1, + 0x1.fffffffffffafp-1 + }, + { // Entry 74 + 0x1.fffffffffffd77fffffffffe65efffffp-5, + 0x1.fffffffffffafp-9 + }, + { // Entry 75 + 0x1.fffffffffffd77fffffffffe65efffffp-511, + 0x1.fffffffffffafp-1021 + }, + { // Entry 76 + 0x1.ffffffffffff37ffffffffffd8efffffp1, + 0x1.fffffffffffe7p3 + }, + { // Entry 77 + 0x1.ffffffffffffefffffffffffffbfffffp-4, + 0x1.ffffffffffffep-7 + }, + { // Entry 78 + 0x1.ffffffffffffefffffffffffffbfffffp-21, + 0x1.ffffffffffffep-41 + }, + { // Entry 79 + 0x1.ffffffffffffefffffffffffffbfffffp-511, + 0x1.ffffffffffffep-1021 + }, + { // Entry 80 + 0x1.fffffffffffff7ffffffffffffefffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 81 + 0x1.fffffffffffff7ffffffffffffefffffp-4, + 0x1.fffffffffffffp-7 + }, + { // Entry 82 + 0x1.fffffffffffff7ffffffffffffefffffp-21, + 0x1.fffffffffffffp-41 + }, + { // Entry 83 + 0x1.fffffffffffff7ffffffffffffefffffp0, + 0x1.fffffffffffffp1 + }, + { // Entry 84 + 0x1.306fe0a31b71419ddec788789fb4580ap-1, + 0x1.6a09e667f3bcap-2 + }, + { // Entry 85 + 0x1.306fe0a31b71485806addf2d8b5a8b60p-1, + 0x1.6a09e667f3bcbp-2 + }, + { // Entry 86 + 0x1.306fe0a31b714f122e9435e276dab0b9p-1, + 0x1.6a09e667f3bccp-2 + }, + { // Entry 87 + 0x1.306fe0a31b7155cc567a8c976234c817p-1, + 0x1.6a09e667f3bcdp-2 + }, + { // Entry 88 + 0x1.306fe0a31b715c867e60e34c4d68d179p-1, + 0x1.6a09e667f3bcep-2 + }, + { // Entry 89 + 0x1.ae89f995ad3abd8251a455b971a538dbp-1, + 0x1.6a09e667f3bcap-1 + }, + { // Entry 90 + 0x1.ae89f995ad3ac705d0a96e94fcab4a1ap-1, + 0x1.6a09e667f3bcbp-1 + }, + { // Entry 91 + 0x1.ae89f995ad3ad0894fae8770877b8a1bp-1, + 0x1.6a09e667f3bccp-1 + }, + { // Entry 92 + 0x1.ae89f995ad3ada0cceb3a04c1215f8ddp-1, + 0x1.6a09e667f3bcdp-1 + }, + { // Entry 93 + 0x1.ae89f995ad3ae3904db8b9279c7a965fp-1, + 0x1.6a09e667f3bcep-1 + }, + { // Entry 94 + 0x1.306fe0a31b71419ddec788789fb4580ap0, + 0x1.6a09e667f3bcap0 + }, + { // Entry 95 + 0x1.306fe0a31b71485806addf2d8b5a8b60p0, + 0x1.6a09e667f3bcbp0 + }, + { // Entry 96 + 0x1.306fe0a31b714f122e9435e276dab0b9p0, + 0x1.6a09e667f3bccp0 + }, + { // Entry 97 + 0x1.306fe0a31b7155cc567a8c976234c817p0, + 0x1.6a09e667f3bcdp0 + }, + { // Entry 98 + 0x1.306fe0a31b715c867e60e34c4d68d179p0, + 0x1.6a09e667f3bcep0 + }, + { // Entry 99 + 0x1.ae89f995ad3abd8251a455b971a538dbp0, + 0x1.6a09e667f3bcap1 + }, + { // Entry 100 + 0x1.ae89f995ad3ac705d0a96e94fcab4a1ap0, + 0x1.6a09e667f3bcbp1 + }, + { // Entry 101 + 0x1.ae89f995ad3ad0894fae8770877b8a1bp0, + 0x1.6a09e667f3bccp1 + }, + { // Entry 102 + 0x1.ae89f995ad3ada0cceb3a04c1215f8ddp0, + 0x1.6a09e667f3bcdp1 + }, + { // Entry 103 + 0x1.ae89f995ad3ae3904db8b9279c7a965fp0, + 0x1.6a09e667f3bcep1 + }, + { // Entry 104 + 0x1.fffffffffffff7ffffffffffffefffffp-4, + 0x1.fffffffffffffp-7 + }, + { // Entry 105 + 0x1.p-3, + 0x1.0p-6 + }, + { // Entry 106 + 0x1.00000000000007ffffffffffffe0p-3, + 0x1.0000000000001p-6 + }, + { // Entry 107 + 0x1.6a09e667f3bcc3608b617397f7660a23p-3, + 0x1.fffffffffffffp-6 + }, + { // Entry 108 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-3, + 0x1.0p-5 + }, + { // Entry 109 + 0x1.6a09e667f3bcd459022e5304d0b08199p-3, + 0x1.0000000000001p-5 + }, + { // Entry 110 + 0x1.fffffffffffff7ffffffffffffefffffp-3, + 0x1.fffffffffffffp-5 + }, + { // Entry 111 + 0x1.p-2, + 0x1.0p-4 + }, + { // Entry 112 + 0x1.00000000000007ffffffffffffe0p-2, + 0x1.0000000000001p-4 + }, + { // Entry 113 + 0x1.6a09e667f3bcc3608b617397f7660a23p-2, + 0x1.fffffffffffffp-4 + }, + { // Entry 114 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-2, + 0x1.0p-3 + }, + { // Entry 115 + 0x1.6a09e667f3bcd459022e5304d0b08199p-2, + 0x1.0000000000001p-3 + }, + { // Entry 116 + 0x1.fffffffffffff7ffffffffffffefffffp-2, + 0x1.fffffffffffffp-3 + }, + { // Entry 117 + 0x1.p-1, + 0x1.0p-2 + }, + { // Entry 118 + 0x1.00000000000007ffffffffffffe0p-1, + 0x1.0000000000001p-2 + }, + { // Entry 119 + 0x1.6a09e667f3bcc3608b617397f7660a23p-1, + 0x1.fffffffffffffp-2 + }, + { // Entry 120 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + 0x1.0p-1 + }, + { // Entry 121 + 0x1.6a09e667f3bcd459022e5304d0b08199p-1, + 0x1.0000000000001p-1 + }, + { // Entry 122 + 0x1.fffffffffffff7ffffffffffffefffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 123 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 124 + 0x1.00000000000007ffffffffffffe0p0, + 0x1.0000000000001p0 + }, + { // Entry 125 + 0x1.6a09e667f3bcc3608b617397f7660a23p0, + 0x1.fffffffffffffp0 + }, + { // Entry 126 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.0p1 + }, + { // Entry 127 + 0x1.6a09e667f3bcd459022e5304d0b08199p0, + 0x1.0000000000001p1 + }, + { // Entry 128 + 0x1.fffffffffffff7ffffffffffffefffffp0, + 0x1.fffffffffffffp1 + }, + { // Entry 129 + 0x1.p1, + 0x1.0p2 + }, + { // Entry 130 + 0x1.00000000000007ffffffffffffe0p1, + 0x1.0000000000001p2 + }, + { // Entry 131 + -0.0, + -0.0 + }, + { // Entry 132 + 0x1.p-537, + 0x1.0p-1074 + }, + { // Entry 133 + 0x1.ffffffffffffefffffffffffffbfffffp-512, + 0x1.ffffffffffffep-1023 + }, + { // Entry 134 + 0x1.p-511, + 0x1.0p-1022 + }, + { // Entry 135 + 0x1.00000000000007ffffffffffffe0p-511, + 0x1.0000000000001p-1022 + }, + { // Entry 136 + 0x1.p-537, + 0x1.0p-1074 + }, + { // Entry 137 + 0x1.279a74590331d74bc03dae7e16ded15bp-512, + 0x1.5555555555558p-1024 + }, + { // Entry 138 + 0x1.a20bd700c2c3e64872281df887e3cbf1p-512, + 0x1.5555555555556p-1023 + }, + { // Entry 139 + 0x1.ffffffffffffefffffffffffffbfffffp-512, + 0x1.ffffffffffffep-1023 + }, + { // Entry 140 + 0x1.ffffffffece09fffffa494f9e6fc95edp-1, + 0x1.ffffffffd9c14p-1 + }, + { // Entry 141 + 0x1.ffffffffece0a7ffffa49546646c95f1p-1, + 0x1.ffffffffd9c15p-1 + }, + { // Entry 142 + 0x1.ffffffffece0afffffa49592e1bc95f5p-1, + 0x1.ffffffffd9c16p-1 + }, + { // Entry 143 + 0x1.ffffffffece0b7ffffa495df5eec95fap-1, + 0x1.ffffffffd9c17p-1 + }, + { // Entry 144 + 0x1.ffffffffece0bfffffa4962bdbfc95fep-1, + 0x1.ffffffffd9c18p-1 + }, + { // Entry 145 + 0x1.ffffffffeae35fffff9092a326fb67c8p-1, + 0x1.ffffffffd5c6cp-1 + }, + { // Entry 146 + 0x1.ffffffffeae367ffff9092f7996b67cep-1, + 0x1.ffffffffd5c6dp-1 + }, + { // Entry 147 + 0x1.ffffffffeae36fffff90934c0bbb67d3p-1, + 0x1.ffffffffd5c6ep-1 + }, + { // Entry 148 + 0x1.ffffffffeae377ffff9093a07deb67d8p-1, + 0x1.ffffffffd5c6fp-1 + }, + { // Entry 149 + 0x1.ffffffffeae37fffff9093f4effb67ddp-1, + 0x1.ffffffffd5c70p-1 + }, + { // Entry 150 + 0x1.fffffffffffff7ffffffffffffefffffp511, + 0x1.fffffffffffffp1023 + }, + { // Entry 151 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 152 + 0x1.fffffffffffff7ffffffffffffefffffp511, + 0x1.fffffffffffffp1023 + }, + { // Entry 153 + 0x1.ffffffffffffefffffffffffffbfffffp511, + 0x1.ffffffffffffep1023 + }, + { // Entry 154 + 0x1.c5bf891b4ef6a7fc7dc11ccf9559536ep0, + 0x1.921fb54442d18p1 + }, + { // Entry 155 + 0x1.40d931ff627057a2dddf7c87edb63664p0, + 0x1.921fb54442d18p0 + }, + { // Entry 156 + 0x1.00000000000007ffffffffffffe0p0, + 0x1.0000000000001p0 + }, + { // Entry 157 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 158 + 0x1.fffffffffffff7ffffffffffffefffffp-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 159 + 0x1.c5bf891b4ef6a7fc7dc11ccf9559536ep-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 160 + 0x1.00000000000007ffffffffffffe0p-511, + 0x1.0000000000001p-1022 + }, + { // Entry 161 + 0x1.p-511, + 0x1.0p-1022 + }, + { // Entry 162 + 0x1.ffffffffffffefffffffffffffbfffffp-512, + 0x1.ffffffffffffep-1023 + }, + { // Entry 163 + 0x1.ffffffffffffdffffffffffffeffffffp-512, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 164 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-537, + 0x1.0p-1073 + }, + { // Entry 165 + 0x1.p-537, + 0x1.0p-1074 + }, + { // Entry 166 + 0.0, + 0.0 + }, + { // Entry 167 + -0.0, + -0.0 + }, + { // Entry 168 + 0x1.p1, + 0x1.0p2 + }, + { // Entry 169 + 0x1.p2, + 0x1.0p4 + }, + { // Entry 170 + 0x1.80p1, + 0x1.2p3 + }, + { // Entry 171 + 0x1.40p2, + 0x1.9p4 + }, + { // Entry 172 + 0x1.p-1, + 0x1.0p-2 + }, + { // Entry 173 + 0x1.c0p2, + 0x1.880p5 + }, + { // Entry 174 + 0x1.40p3, + 0x1.9p6 + } +}; diff --git a/tests/math_data/sqrtf_intel_data.h b/tests/math_data/sqrtf_intel_data.h new file mode 100644 index 000000000..bd07143de --- /dev/null +++ b/tests/math_data/sqrtf_intel_data.h @@ -0,0 +1,710 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_sqrtf_intel_data[] = { + { // Entry 0 + 0x1.p-1, + 0x1.p-2 + }, + { // Entry 1 + 0x1.p-10, + 0x1.p-20 + }, + { // Entry 2 + 0x1.000000ffffff8000007fffff600000dfp-1, + 0x1.000002p-2 + }, + { // Entry 3 + 0x1.000000ffffff8000007fffff600000dfp-20, + 0x1.000002p-40 + }, + { // Entry 4 + 0x1.000000ffffff8000007fffff600000dfp-63, + 0x1.000002p-126 + }, + { // Entry 5 + 0x1.6a09eaa61169a3b76f99ea0d364efd91p-63, + 0x1.000006p-125 + }, + { // Entry 6 + 0x1.6a0a0584cc337abc8740253db45a12f6p-3, + 0x1.00002cp-5 + }, + { // Entry 7 + 0x1.6a0a1ef97b51a8def43dbb5dc7f37ff0p-11, + 0x1.000050p-21 + }, + { // Entry 8 + 0x1.6a0a1ef97b51a8def43dbb5dc7f37ff0p-18, + 0x1.000050p-35 + }, + { // Entry 9 + 0x1.6a0a359a157a0b9bd4ff286a2eab2edfp-21, + 0x1.000070p-41 + }, + { // Entry 10 + 0x1.6a0a9898a74a019a7cc18157814e39d9p-6, + 0x1.0000fcp-11 + }, + { // Entry 11 + 0x1.6a0a9898a74a019a7cc18157814e39d9p-59, + 0x1.0000fcp-117 + }, + { // Entry 12 + 0x1.6a0a9898a74a019a7cc18157814e39d9p-61, + 0x1.0000fcp-121 + }, + { // Entry 13 + 0x1.6a0a9898a74a019a7cc18157814e39d9p1, + 0x1.0000fcp3 + }, + { // Entry 14 + 0x1.6a0ab377552adf71413bdc5fdf2d3e0dp63, + 0x1.000122p127 + }, + { // Entry 15 + 0x1.6a0b1d87f00e99851a9dcb6fb9c2d56ep-3, + 0x1.0001b8p-5 + }, + { // Entry 16 + 0x1.6a0ba98930c5cb58722f06e15c330f95p-1, + 0x1.00027ep-1 + }, + { // Entry 17 + 0x1.6a0bea96a144bf2a9c899380f11039d1p0, + 0x1.0002dap1 + }, + { // Entry 18 + 0x1.6a0d3c935fb77764b4cc3f34e117a891p-49, + 0x1.0004b8p-97 + }, + { // Entry 19 + 0x1.6a0d6700222327f1053e4a429adb015ep-3, + 0x1.0004f4p-5 + }, + { // Entry 20 + 0x1.6a0dc893ce705ac35b85bb49e3aa1badp0, + 0x1.00057ep1 + }, + { // Entry 21 + 0x1.001ffe003ff601bfac107ca6b29a0c31p-20, + 0x1.0040p-40 + }, + { // Entry 22 + 0x1.6a3724d10762c86a71fe557d13336111p-21, + 0x1.0040p-41 + }, + { // Entry 23 + 0x1.6a38a9884557da551f3ec21f785779d7p6, + 0x1.004226p13 + }, + { // Entry 24 + 0x1.6abbeb82dbfd8f20f5923ab389eef7f3p-11, + 0x1.00fcp-21 + }, + { // Entry 25 + 0x1.0085dd004f71f5362dd6a5e09a9cee74p-10, + 0x1.010cp-20 + }, + { // Entry 26 + 0x1.0085dd004f71f5362dd6a5e09a9cee74p-20, + 0x1.010cp-40 + }, + { // Entry 27 + 0x1.6cdb707e0273cc8e2a1d99aa3ad67b66p0, + 0x1.040062p1 + }, + { // Entry 28 + 0x1.6e14fb33af5d199451a44c592d18f9e1p-11, + 0x1.05c0p-21 + }, + { // Entry 29 + 0x1.6e3eedfff2f9d88cc837d36b17bce548p-11, + 0x1.05fcp-21 + }, + { // Entry 30 + 0x1.708713bb31c17627489983a6397ff529p-1, + 0x1.094250p-1 + }, + { // Entry 31 + 0x1.7214c125cb8b2284459daa230a47b9dfp-11, + 0x1.0b80p-21 + }, + { // Entry 32 + 0x1.7528ce694c692ce6ecf340f96e7ac410p-9, + 0x1.0ff7f8p-17 + }, + { // Entry 33 + 0x1.752b9263582a2e3ab2a36ee98ed34a19p-11, + 0x1.0ffcp-21 + }, + { // Entry 34 + 0x1.752b9263582a2e3ab2a36ee98ed34a19p-49, + 0x1.0ffcp-97 + }, + { // Entry 35 + 0x1.752b9263582a2e3ab2a36ee98ed34a19p-63, + 0x1.0ffcp-125 + }, + { // Entry 36 + 0x1.752b9263582a2e3ab2a36ee98ed34a19p-68, + 0x1.0ffcp-135 + }, + { // Entry 37 + 0x1.752bcd629c83e4378e77e8fb09e0dfb8p0, + 0x1.0ffc56p1 + }, + { // Entry 38 + 0x1.752cdbac2ec6fddb69cc2e00bdf1fd02p4, + 0x1.0ffde0p9 + }, + { // Entry 39 + 0x1.752cf45e665c37b7d77c8c9fb50cd678p-4, + 0x1.0ffe04p-7 + }, + { // Entry 40 + 0x1.752cf45e665c37b7d77c8c9fb50cd678p-63, + 0x1.0ffe04p-125 + }, + { // Entry 41 + 0x1.752cf45e665c37b7d77c8c9fb50cd678p1, + 0x1.0ffe04p3 + }, + { // Entry 42 + 0x1.752d6a5c75cf3b16e5de9a228f3ef4dap1, + 0x1.0ffeb0p3 + }, + { // Entry 43 + 0x1.752d6a5c75cf3b16e5de9a228f3ef4dap28, + 0x1.0ffeb0p57 + }, + { // Entry 44 + 0x1.752e105f70189628b0d2d6e17ca2b9c5p1, + 0x1.0fffa2p3 + }, + { // Entry 45 + 0x1.752e4b5e4f95f6a45bcfd8721ccbf950p-4, + 0x1.0ffff8p-7 + }, + { // Entry 46 + 0x1.752e4b5e4f95f6a45bcfd8721ccbf950p-53, + 0x1.0ffff8p-105 + }, + { // Entry 47 + 0x1.752e4b5e4f95f6a45bcfd8721ccbf950p-61, + 0x1.0ffff8p-121 + }, + { // Entry 48 + 0x1.752e4b5e4f95f6a45bcfd8721ccbf950p-62, + 0x1.0ffff8p-123 + }, + { // Entry 49 + 0x1.752e4b5e4f95f6a45bcfd8721ccbf950p1, + 0x1.0ffff8p3 + }, + { // Entry 50 + 0x1.784220501c1fc95d7e2043339d354588p-1, + 0x1.148128p-1 + }, + { // Entry 51 + 0x1.78cc0a00054d7683165ea2815b6b8d14p-11, + 0x1.154cp-21 + }, + { // Entry 52 + 0x1.7ea8336e0f268f6d05f0934a67b4840ap-32, + 0x1.1dfd34p-63 + }, + { // Entry 53 + 0x1.0ec1270014d42e5424a7780b67b4974cp-10, + 0x1.1e5cp-20 + }, + { // Entry 54 + 0x1.0f7a3974c0a036ead45a0017d4782e1ap-10, + 0x1.1fe4p-20 + }, + { // Entry 55 + 0x1.10207f000077f1ab909fb7b5314f837fp-1, + 0x1.214512p-2 + }, + { // Entry 56 + 0x1.8c4487000042dd2813dd730d1a7f3cabp1, + 0x1.32b20ap3 + }, + { // Entry 57 + 0x1.8dc41537f0b639cb37aedfa8d531d4cfp-51, + 0x1.3504e0p-101 + }, + { // Entry 58 + 0x1.8fae0c15ad389e24852497e80935e4b5p-63, + 0x1.38p-125 + }, + { // Entry 59 + 0x1.95b8c0ffff868994f9ce14b11aa1cfd5p-2, + 0x1.41810cp-3 + }, + { // Entry 60 + 0x1.a644fe00060ec83a5393c3c3cd39fc95p-1, + 0x1.5c43c4p-1 + }, + { // Entry 61 + 0x1.b7070406a4527543e7e1a93c34a2d6f7p-1, + 0x1.787488p-1 + }, + { // Entry 62 + 0x1.3836b2ffff863cbb58a0fb2bcad85474p-1, + 0x1.7cc560p-2 + }, + { // Entry 63 + 0x1.bb67ad5dea55ebaf21faa9bb10eabdf1p-21, + 0x1.7ffffep-41 + }, + { // Entry 64 + 0x1.ce7e96000007bfd0ed97130360c298ddp-1, + 0x1.a1c692p-1 + }, + { // Entry 65 + 0x1.d10d73f80594d3d73fae1f2d6a130247p0, + 0x1.a668f0p1 + }, + { // Entry 66 + 0x1.d94c090afeb02b92e741bb236186bc86p-1, + 0x1.b58508p-1 + }, + { // Entry 67 + 0x1.de4315000013008bf12e454d672ffbdfp-2, + 0x1.bebf4ap-3 + }, + { // Entry 68 + 0x1.e768d28cf1e3981570e875af113546c7p-21, + 0x1.cffffep-41 + }, + { // Entry 69 + 0x1.e7f0cc5a77a783be336f9b5127709acep-1, + 0x1.d10306p-1 + }, + { // Entry 70 + 0x1.f3169029c9867f10142750dc51d5843dp-1, + 0x1.e6807cp-1 + }, + { // Entry 71 + 0x1.f6eb62d27730caff89a8d78c7314934ap-60, + 0x1.eep-119 + }, + { // Entry 72 + 0x1.f8f3935d2ecc7256a14d7c8816275c60p-21, + 0x1.f1fffep-41 + }, + { // Entry 73 + 0x1.f94a8e8524ece8623432ace75571785ep-1, + 0x1.f2ab9ep-1 + }, + { // Entry 74 + 0x1.faa0p-1, + 0x1.f54e72p-1 + }, + { // Entry 75 + 0x1.feefb698fc02e71c2377deb225837a87p-63, + 0x1.fddffep-125 + }, + { // Entry 76 + 0x1.fffffcfffffdbffffc9ffff9abfff2b5p-1, + 0x1.fffffap-1 + }, + { // Entry 77 + 0x1.fffffdfffffefffffefffffebffffe3fp-4, + 0x1.fffffcp-7 + }, + { // Entry 78 + 0x1.fffffdfffffefffffefffffebffffe3fp-21, + 0x1.fffffcp-41 + }, + { // Entry 79 + 0x1.fffffdfffffefffffefffffebffffe3fp-63, + 0x1.fffffcp-125 + }, + { // Entry 80 + 0x1.fffffeffffffbfffffdfffffebfffff1p-4, + 0x1.fffffep-7 + }, + { // Entry 81 + 0x1.fffffeffffffbfffffdfffffebfffff1p0, + 0x1.fffffep1 + }, + { // Entry 82 + 0x1.306fdec8dc9ad32b551e92585b7094f3p-1, + 0x1.6a09e2p-2 + }, + { // Entry 83 + 0x1.306fdfa02198a13d946ad818ec615547p-1, + 0x1.6a09e4p-2 + }, + { // Entry 84 + 0x1.306fe0776695d717e1e11958d56541cfp-1, + 0x1.6a09e6p-2 + }, + { // Entry 85 + 0x1.306fe14eab9274ba3ec43d966959f47cp-1, + 0x1.6a09e8p-2 + }, + { // Entry 86 + 0x1.306fe225f08e7a24ac572c4b8579785fp-1, + 0x1.6a09eap-2 + }, + { // Entry 87 + 0x1.ae89f6f6fe087ac302131f3840da7a90p-1, + 0x1.6a09e2p-1 + }, + { // Entry 88 + 0x1.ae89f8276dea8c7accb82339973f2af9p-1, + 0x1.6a09e4p-1 + }, + { // Entry 89 + 0x1.ae89f957ddcbc6ed986cf1a0e754d170p-1, + 0x1.6a09e6p-1 + }, + { // Entry 90 + 0x1.ae89fa884dac2a1b66fa324394d3c590p-1, + 0x1.6a09e8p-1 + }, + { // Entry 91 + 0x1.ae89fbb8bd8bb6043a288cf0b4eef0aep-1, + 0x1.6a09eap-1 + }, + { // Entry 92 + 0x1.306fdec8dc9ad32b551e92585b7094f3p0, + 0x1.6a09e2p0 + }, + { // Entry 93 + 0x1.306fdfa02198a13d946ad818ec615547p0, + 0x1.6a09e4p0 + }, + { // Entry 94 + 0x1.306fe0776695d717e1e11958d56541cfp0, + 0x1.6a09e6p0 + }, + { // Entry 95 + 0x1.306fe14eab9274ba3ec43d966959f47cp0, + 0x1.6a09e8p0 + }, + { // Entry 96 + 0x1.306fe225f08e7a24ac572c4b8579785fp0, + 0x1.6a09eap0 + }, + { // Entry 97 + 0x1.ae89f6f6fe087ac302131f3840da7a90p0, + 0x1.6a09e2p1 + }, + { // Entry 98 + 0x1.ae89f8276dea8c7accb82339973f2af9p0, + 0x1.6a09e4p1 + }, + { // Entry 99 + 0x1.ae89f957ddcbc6ed986cf1a0e754d170p0, + 0x1.6a09e6p1 + }, + { // Entry 100 + 0x1.ae89fa884dac2a1b66fa324394d3c590p0, + 0x1.6a09e8p1 + }, + { // Entry 101 + 0x1.ae89fbb8bd8bb6043a288cf0b4eef0aep0, + 0x1.6a09eap1 + }, + { // Entry 102 + 0x1.fffffeffffffbfffffdfffffebfffff1p-4, + 0x1.fffffep-7 + }, + { // Entry 103 + 0x1.p-3, + 0x1.p-6 + }, + { // Entry 104 + 0x1.000000ffffff8000007fffff600000dfp-3, + 0x1.000002p-6 + }, + { // Entry 105 + 0x1.6a09e5b2eec967cd97b2eff75f471493p-3, + 0x1.fffffep-6 + }, + { // Entry 106 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-3, + 0x1.p-5 + }, + { // Entry 107 + 0x1.6a09e7d1fda27bf77d45272dd2d83a4bp-3, + 0x1.000002p-5 + }, + { // Entry 108 + 0x1.fffffeffffffbfffffdfffffebfffff1p-3, + 0x1.fffffep-5 + }, + { // Entry 109 + 0x1.p-2, + 0x1.p-4 + }, + { // Entry 110 + 0x1.000000ffffff8000007fffff600000dfp-2, + 0x1.000002p-4 + }, + { // Entry 111 + 0x1.6a09e5b2eec967cd97b2eff75f471493p-2, + 0x1.fffffep-4 + }, + { // Entry 112 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-2, + 0x1.p-3 + }, + { // Entry 113 + 0x1.6a09e7d1fda27bf77d45272dd2d83a4bp-2, + 0x1.000002p-3 + }, + { // Entry 114 + 0x1.fffffeffffffbfffffdfffffebfffff1p-2, + 0x1.fffffep-3 + }, + { // Entry 115 + 0x1.p-1, + 0x1.p-2 + }, + { // Entry 116 + 0x1.000000ffffff8000007fffff600000dfp-1, + 0x1.000002p-2 + }, + { // Entry 117 + 0x1.6a09e5b2eec967cd97b2eff75f471493p-1, + 0x1.fffffep-2 + }, + { // Entry 118 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-1, + 0x1.p-1 + }, + { // Entry 119 + 0x1.6a09e7d1fda27bf77d45272dd2d83a4bp-1, + 0x1.000002p-1 + }, + { // Entry 120 + 0x1.fffffeffffffbfffffdfffffebfffff1p-1, + 0x1.fffffep-1 + }, + { // Entry 121 + 0x1.p0, + 0x1.p0 + }, + { // Entry 122 + 0x1.000000ffffff8000007fffff600000dfp0, + 0x1.000002p0 + }, + { // Entry 123 + 0x1.6a09e5b2eec967cd97b2eff75f471493p0, + 0x1.fffffep0 + }, + { // Entry 124 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep0, + 0x1.p1 + }, + { // Entry 125 + 0x1.6a09e7d1fda27bf77d45272dd2d83a4bp0, + 0x1.000002p1 + }, + { // Entry 126 + 0x1.fffffeffffffbfffffdfffffebfffff1p0, + 0x1.fffffep1 + }, + { // Entry 127 + 0x1.p1, + 0x1.p2 + }, + { // Entry 128 + 0x1.000000ffffff8000007fffff600000dfp1, + 0x1.000002p2 + }, + { // Entry 129 + 0.0, + 0.0 + }, + { // Entry 130 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-75, + 0x1.p-149 + }, + { // Entry 131 + 0x1.fffffdfffffefffffefffffebffffe3fp-64, + 0x1.fffffcp-127 + }, + { // Entry 132 + 0x1.p-63, + 0x1.p-126 + }, + { // Entry 133 + 0x1.000000ffffff8000007fffff600000dfp-63, + 0x1.000002p-126 + }, + { // Entry 134 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-75, + 0x1.p-149 + }, + { // Entry 135 + 0x1.279a75809da58a0811243c04849bccb2p-64, + 0x1.555558p-128 + }, + { // Entry 136 + 0x1.a20bd62fbcd82b1d65e201b6160bb97fp-64, + 0x1.555554p-127 + }, + { // Entry 137 + 0x1.fffffdfffffefffffefffffebffffe3fp-64, + 0x1.fffffcp-127 + }, + { // Entry 138 + 0x1.fffffcfffffdbffffc9ffff9abfff2b5p-1, + 0x1.fffffap-1 + }, + { // Entry 139 + 0x1.fffffdfffffefffffefffffebffffe3fp-1, + 0x1.fffffcp-1 + }, + { // Entry 140 + 0x1.fffffeffffffbfffffdfffffebfffff1p-1, + 0x1.fffffep-1 + }, + { // Entry 141 + 0x1.p0, + 0x1.p0 + }, + { // Entry 142 + 0x1.000000ffffff8000007fffff600000dfp0, + 0x1.000002p0 + }, + { // Entry 143 + 0x1.fffffcfffffdbffffc9ffff9abfff2b5p-1, + 0x1.fffffap-1 + }, + { // Entry 144 + 0x1.fffffdfffffefffffefffffebffffe3fp-1, + 0x1.fffffcp-1 + }, + { // Entry 145 + 0x1.fffffeffffffbfffffdfffffebfffff1p-1, + 0x1.fffffep-1 + }, + { // Entry 146 + 0x1.p0, + 0x1.p0 + }, + { // Entry 147 + 0x1.000000ffffff8000007fffff600000dfp0, + 0x1.000002p0 + }, + { // Entry 148 + 0x1.fffffeffffffbfffffdfffffebfffff1p63, + 0x1.fffffep127 + }, + { // Entry 149 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 150 + 0x1.fffffeffffffbfffffdfffffebfffff1p63, + 0x1.fffffep127 + }, + { // Entry 151 + 0x1.fffffdfffffefffffefffffebffffe3fp63, + 0x1.fffffcp127 + }, + { // Entry 152 + 0x1.c5bf89853a94d473c88f0dc85f187a6ep0, + 0x1.921fb6p1 + }, + { // Entry 153 + 0x1.40d9324a48137bb45e891e1bdffe64c2p0, + 0x1.921fb6p0 + }, + { // Entry 154 + 0x1.000000ffffff8000007fffff600000dfp0, + 0x1.000002p0 + }, + { // Entry 155 + 0x1.p0, + 0x1.p0 + }, + { // Entry 156 + 0x1.fffffeffffffbfffffdfffffebfffff1p-1, + 0x1.fffffep-1 + }, + { // Entry 157 + 0x1.c5bf89853a94d473c88f0dc85f187a6ep-1, + 0x1.921fb6p-1 + }, + { // Entry 158 + 0x1.000000ffffff8000007fffff600000dfp-63, + 0x1.000002p-126 + }, + { // Entry 159 + 0x1.p-63, + 0x1.p-126 + }, + { // Entry 160 + 0x1.fffffdfffffefffffefffffebffffe3fp-64, + 0x1.fffffcp-127 + }, + { // Entry 161 + 0x1.fffffbfffffbfffff7ffffebffffc7ffp-64, + 0x1.fffff8p-127 + }, + { // Entry 162 + 0x1.p-74, + 0x1.p-148 + }, + { // Entry 163 + 0x1.6a09e667f3bcc908b2fb1366ea957d3ep-75, + 0x1.p-149 + }, + { // Entry 164 + 0.0, + 0.0f + }, + { // Entry 165 + -0.0, + -0.0f + }, + { // Entry 166 + 0x1.p1, + 0x1.p2 + }, + { // Entry 167 + 0x1.p2, + 0x1.p4 + }, + { // Entry 168 + 0x1.80p1, + 0x1.20p3 + }, + { // Entry 169 + 0x1.40p2, + 0x1.90p4 + }, + { // Entry 170 + 0x1.p-1, + 0x1.p-2 + }, + { // Entry 171 + 0x1.c0p2, + 0x1.88p5 + }, + { // Entry 172 + 0x1.40p3, + 0x1.90p6 + } +}; diff --git a/tests/math_tan_intel_data.h b/tests/math_data/tan_intel_data.h similarity index 100% rename from tests/math_tan_intel_data.h rename to tests/math_data/tan_intel_data.h diff --git a/tests/math_tanf_intel_data.h b/tests/math_data/tanf_intel_data.h similarity index 100% rename from tests/math_tanf_intel_data.h rename to tests/math_data/tanf_intel_data.h diff --git a/tests/math_data/tanh_intel_data.h b/tests/math_data/tanh_intel_data.h new file mode 100644 index 000000000..2e433ca1e --- /dev/null +++ b/tests/math_data/tanh_intel_data.h @@ -0,0 +1,2938 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_tanh_intel_data[] = { + { // Entry 0 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p40 + }, + { // Entry 1 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0000000000001p40 + }, + { // Entry 2 + -0x1.fff5559997e1091212284e477e6b601bp-7, + -0x1.000000000000cp-6 + }, + { // Entry 3 + 0x1.fff5559997e1091212284e477e6b601bp-7, + 0x1.000000000000cp-6 + }, + { // Entry 4 + -0x1.fffffffffff4e7ff9444b603d6dd765cp-1, + -0x1.02020p4 + }, + { // Entry 5 + 0x1.fffffffffff4e7ff9444b603d6dd765cp-1, + 0x1.02020p4 + }, + { // Entry 6 + -0x1.fbae8ebca20d4c5880046e52256af91ep-3, + -0x1.033db279cac50p-2 + }, + { // Entry 7 + 0x1.fbae8ebca20d4c5880046e52256af91ep-3, + 0x1.033db279cac50p-2 + }, + { // Entry 8 + -0x1.ef865be1ef42880100008a5e4e4190c5p-1, + -0x1.0741ea37759d0p1 + }, + { // Entry 9 + 0x1.ef865be1ef42880100008a5e4e4190c5p-1, + 0x1.0741ea37759d0p1 + }, + { // Entry 10 + -0x1.fffffe4130884001624e28693fd77976p-1, + -0x1.17701b3bf0502p3 + }, + { // Entry 11 + 0x1.fffffe4130884001624e28693fd77976p-1, + 0x1.17701b3bf0502p3 + }, + { // Entry 12 + -0x1.bfe15277a8709fff7196fc7ed299cacfp-1, + -0x1.5a6p0 + }, + { // Entry 13 + 0x1.bfe15277a8709fff7196fc7ed299cacfp-1, + 0x1.5a6p0 + }, + { // Entry 14 + -0x1.4597c2c7089a5296d1b38cc8fc3b35b2p-1, + -0x1.80aa4dee35c52p-1 + }, + { // Entry 15 + 0x1.4597c2c7089a5296d1b38cc8fc3b35b2p-1, + 0x1.80aa4dee35c52p-1 + }, + { // Entry 16 + -0x1.8535183c81bec818a4482b6aa562704ap-4, + -0x1.86629b25ad139p-4 + }, + { // Entry 17 + 0x1.8535183c81bec818a4482b6aa562704ap-4, + 0x1.86629b25ad139p-4 + }, + { // Entry 18 + -0x1.49914b1c7a6a3040d7a1246b5c9a7223p-1, + -0x1.8765183af0bf8p-1 + }, + { // Entry 19 + 0x1.49914b1c7a6a3040d7a1246b5c9a7223p-1, + 0x1.8765183af0bf8p-1 + }, + { // Entry 20 + -0x1.9070fe4e6f41f7e2e1d3a8d017f0997ep-4, + -0x1.91b97a94248cep-4 + }, + { // Entry 21 + 0x1.9070fe4e6f41f7e2e1d3a8d017f0997ep-4, + 0x1.91b97a94248cep-4 + }, + { // Entry 22 + -0x1.53fca0a748a40b956f64ea48ae26ceb7p-1, + -0x1.999999999999ap-1 + }, + { // Entry 23 + 0x1.53fca0a748a40b956f64ea48ae26ceb7p-1, + 0x1.999999999999ap-1 + }, + { // Entry 24 + -0x1.afbec6429aad794d7f2a775b8759d621p-8, + -0x1.afc05f9bb3e19p-8 + }, + { // Entry 25 + 0x1.afbec6429aad794d7f2a775b8759d621p-8, + 0x1.afc05f9bb3e19p-8 + }, + { // Entry 26 + -0x1.ff142eecd1b15800cdeb0f526da78623p-1, + -0x1.c0cffc79a8e7ap1 + }, + { // Entry 27 + 0x1.ff142eecd1b15800cdeb0f526da78623p-1, + 0x1.c0cffc79a8e7ap1 + }, + { // Entry 28 + -0x1.69ee34427443cf9fe259a9bb2567fcc0p-1, + -0x1.c30c0608de324p-1 + }, + { // Entry 29 + 0x1.69ee34427443cf9fe259a9bb2567fcc0p-1, + 0x1.c30c0608de324p-1 + }, + { // Entry 30 + -0x1.78d4ef748dd52801170d542b2b0cb210p-1, + -0x1.e225b5b8fe514p-1 + }, + { // Entry 31 + 0x1.78d4ef748dd52801170d542b2b0cb210p-1, + 0x1.e225b5b8fe514p-1 + }, + { // Entry 32 + -0x1.ce716dc85f4f601568694f24eb23ca3cp-2, + -0x1.f2652ecbdc0f1p-2 + }, + { // Entry 33 + 0x1.ce716dc85f4f601568694f24eb23ca3cp-2, + 0x1.f2652ecbdc0f1p-2 + }, + { // Entry 34 + -0x1.d9353d750404d7fd4bd76174b9eb0c4ap-2, + -0x1.ffffffff7ffffp-2 + }, + { // Entry 35 + 0x1.d9353d750404d7fd4bd76174b9eb0c4ap-2, + 0x1.ffffffff7ffffp-2 + }, + { // Entry 36 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep6 + }, + { // Entry 37 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffep6 + }, + { // Entry 38 + 0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + 0x1.0000000000001p0 + }, + { // Entry 39 + -0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + -0x1.0000000000001p0 + }, + { // Entry 40 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0000000000001p40 + }, + { // Entry 41 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p40 + }, + { // Entry 42 + 0x1.d9353d7568afe67b37fb989f559be834p-2, + 0x1.0000000000007p-1 + }, + { // Entry 43 + -0x1.d9353d7568afe67b37fb989f559be834p-2, + -0x1.0000000000007p-1 + }, + { // Entry 44 + 0x1.ffff5555999b9df5cab1d843ba27b16bp-9, + 0x1.0000000000011p-8 + }, + { // Entry 45 + -0x1.ffff5555999b9df5cab1d843ba27b16bp-9, + -0x1.0000000000011p-8 + }, + { // Entry 46 + 0x1.fff5559997e1e90412bd9e530b1bb1c8p-7, + 0x1.0000000000013p-6 + }, + { // Entry 47 + -0x1.fff5559997e1e90412bd9e530b1bb1c8p-7, + -0x1.0000000000013p-6 + }, + { // Entry 48 + 0x1.fd5992bc4b8938001f85b833d16495fap-4, + 0x1.0000000000030p-3 + }, + { // Entry 49 + -0x1.fd5992bc4b8938001f85b833d16495fap-4, + -0x1.0000000000030p-3 + }, + { // Entry 50 + 0x1.fff5559997f228001d929172a4eb85d4p-7, + 0x1.0000000000095p-6 + }, + { // Entry 51 + -0x1.fff5559997f228001d929172a4eb85d4p-7, + -0x1.0000000000095p-6 + }, + { // Entry 52 + 0x1.ed9505e1bc464849d749fc9de18202c2p-1, + 0x1.00000000002p1 + }, + { // Entry 53 + -0x1.ed9505e1bc464849d749fc9de18202c2p-1, + -0x1.00000000002p1 + }, + { // Entry 54 + 0x1.ff55997e035588295a0fea71abc3cb2ep-5, + 0x1.0000000000243p-4 + }, + { // Entry 55 + -0x1.ff55997e035588295a0fea71abc3cb2ep-5, + -0x1.0000000000243p-4 + }, + { // Entry 56 + 0x1.f597ea69a231a72e6af16bc1c1566108p-3, + 0x1.0000000000380p-2 + }, + { // Entry 57 + -0x1.f597ea69a231a72e6af16bc1c1566108p-3, + -0x1.0000000000380p-2 + }, + { // Entry 58 + 0x1.f597ea69a58af253fe597fddbebb43e2p-3, + 0x1.00000000020p-2 + }, + { // Entry 59 + -0x1.f597ea69a58af253fe597fddbebb43e2p-3, + -0x1.00000000020p-2 + }, + { // Entry 60 + 0x1.fffd55599de69fe673438a43e4e4e8f0p-8, + 0x1.00000000022a0p-7 + }, + { // Entry 61 + -0x1.fffd55599de69fe673438a43e4e4e8f0p-8, + -0x1.00000000022a0p-7 + }, + { // Entry 62 + 0x1.fffff872a91f87faf5806a50e5c4b91bp-1, + 0x1.0000000002ff0p3 + }, + { // Entry 63 + -0x1.fffff872a91f87faf5806a50e5c4b91bp-1, + -0x1.0000000002ff0p3 + }, + { // Entry 64 + 0x1.fffff872a91f87fb6e55d77442ed3d29p-1, + 0x1.00000000030p3 + }, + { // Entry 65 + -0x1.fffff872a91f87fb6e55d77442ed3d29p-1, + -0x1.00000000030p3 + }, + { // Entry 66 + 0x1.85efab5178d6d000016b608b6d73768fp-1, + 0x1.00000000318b9p0 + }, + { // Entry 67 + -0x1.85efab5178d6d000016b608b6d73768fp-1, + -0x1.00000000318b9p0 + }, + { // Entry 68 + 0x1.d9353d75bd3167fffe0ca38b641c896fp-2, + 0x1.0000000035ba6p-1 + }, + { // Entry 69 + -0x1.d9353d75bd3167fffe0ca38b641c896fp-2, + -0x1.0000000035ba6p-1 + }, + { // Entry 70 + 0x1.d9353d771617800000a9a580e469340ep-2, + 0x1.0000000111012p-1 + }, + { // Entry 71 + -0x1.d9353d771617800000a9a580e469340ep-2, + -0x1.0000000111012p-1 + }, + { // Entry 72 + 0x1.fd5992bf3fa307ce156b9614980779ecp-4, + 0x1.000000018p-3 + }, + { // Entry 73 + -0x1.fd5992bf3fa307ce156b9614980779ecp-4, + -0x1.000000018p-3 + }, + { // Entry 74 + 0x1.fff57197d7f21aad8cde741e0c0ad7fap-7, + 0x1.00000e0p-6 + }, + { // Entry 75 + -0x1.fff57197d7f21aad8cde741e0c0ad7fap-7, + -0x1.00000e0p-6 + }, + { // Entry 76 + 0x1.ff55b95e1854b7dec3a51ba27b39be8bp-5, + 0x1.00001p-4 + }, + { // Entry 77 + -0x1.ff55b95e1854b7dec3a51ba27b39be8bp-5, + -0x1.00001p-4 + }, + { // Entry 78 + 0x1.ff55ed7fe5192835b5778c9d03720c56p-5, + 0x1.00002a2b0p-4 + }, + { // Entry 79 + -0x1.ff55ed7fe5192835b5778c9d03720c56p-5, + -0x1.00002a2b0p-4 + }, + { // Entry 80 + 0x1.ffd9589953c32bc8da7c0ed0baa544b3p-6, + 0x1.00020p-5 + }, + { // Entry 81 + -0x1.ffd9589953c32bc8da7c0ed0baa544b3p-6, + -0x1.00020p-5 + }, + { // Entry 82 + 0x1.85fd1b1b96f55c651875290b2d7f494cp-1, + 0x1.001p0 + }, + { // Entry 83 + -0x1.85fd1b1b96f55c651875290b2d7f494cp-1, + -0x1.001p0 + }, + { // Entry 84 + 0x1.fdb8166cc3ed2817c1f59dbd8b23b2abp-4, + 0x1.003p-3 + }, + { // Entry 85 + -0x1.fdb8166cc3ed2817c1f59dbd8b23b2abp-4, + -0x1.003p-3 + }, + { // Entry 86 + 0x1.ffe8933bc5a6d7be8a7316e43ce9c6cdp-5, + 0x1.0049c689802d0p-4 + }, + { // Entry 87 + -0x1.ffe8933bc5a6d7be8a7316e43ce9c6cdp-5, + -0x1.0049c689802d0p-4 + }, + { // Entry 88 + 0x1.fa73af7a658375ff4348367f3830a567p-3, + 0x1.0295fad40a580p-2 + }, + { // Entry 89 + -0x1.fa73af7a658375ff4348367f3830a567p-3, + -0x1.0295fad40a580p-2 + }, + { // Entry 90 + 0x1.0624d77c51e6880001f9be17000b9cf1p-10, + 0x1.0624dd3655b8ap-10 + }, + { // Entry 91 + -0x1.0624d77c51e6880001f9be17000b9cf1p-10, + -0x1.0624dd3655b8ap-10 + }, + { // Entry 92 + 0x1.0624d79f9b19f7fffe0a9d21eca99d7cp-10, + 0x1.0624dd599eee6p-10 + }, + { // Entry 93 + -0x1.0624d79f9b19f7fffe0a9d21eca99d7cp-10, + -0x1.0624dd599eee6p-10 + }, + { // Entry 94 + 0x1.e429309abfffd2ddfd82de658136eba5p-2, + 0x1.07020e041c084p-1 + }, + { // Entry 95 + -0x1.e429309abfffd2ddfd82de658136eba5p-2, + -0x1.07020e041c084p-1 + }, + { // Entry 96 + 0x1.8c7f5c6b80f69a39323c4db93a0f72b0p-1, + 0x1.080p0 + }, + { // Entry 97 + -0x1.8c7f5c6b80f69a39323c4db93a0f72b0p-1, + -0x1.080p0 + }, + { // Entry 98 + 0x1.8d012ee7bd86f7ff002853771d7f8bf3p-1, + 0x1.08a278c042d05p0 + }, + { // Entry 99 + -0x1.8d012ee7bd86f7ff002853771d7f8bf3p-1, + -0x1.08a278c042d05p0 + }, + { // Entry 100 + 0x1.fffffe4130884001a9dd6277c63796bap-1, + 0x1.17701b3bf052bp3 + }, + { // Entry 101 + -0x1.fffffe4130884001a9dd6277c63796bap-1, + -0x1.17701b3bf052bp3 + }, + { // Entry 102 + 0x1.fdbcb70e1a79f7fae20bb105bc7b5a09p-2, + 0x1.17bd082f7494ap-1 + }, + { // Entry 103 + -0x1.fdbcb70e1a79f7fae20bb105bc7b5a09p-2, + -0x1.17bd082f7494ap-1 + }, + { // Entry 104 + 0x1.ff97efd9e06bae1b16cedbdb4a92304ep-2, + 0x1.18f94c43e4254p-1 + }, + { // Entry 105 + -0x1.ff97efd9e06bae1b16cedbdb4a92304ep-2, + -0x1.18f94c43e4254p-1 + }, + { // Entry 106 + 0x1.1abe341c3a920fff94d356d6f5ffbc8dp-7, + 0x1.1acp-7 + }, + { // Entry 107 + -0x1.1abe341c3a920fff94d356d6f5ffbc8dp-7, + -0x1.1acp-7 + }, + { // Entry 108 + 0x1.02e1e2b14b97c6a35cbdc397873184d2p-1, + 0x1.1d1a3a347468fp-1 + }, + { // Entry 109 + -0x1.02e1e2b14b97c6a35cbdc397873184d2p-1, + -0x1.1d1a3a347468fp-1 + }, + { // Entry 110 + 0x1.9d8d4198958f6f11c41090ab7e3accb0p-1, + 0x1.1ed47ae8419b9p0 + }, + { // Entry 111 + -0x1.9d8d4198958f6f11c41090ab7e3accb0p-1, + -0x1.1ed47ae8419b9p0 + }, + { // Entry 112 + 0x1.182d330b3abd2a2e07d69cfdde7a8e36p-2, + 0x1.1f8p-2 + }, + { // Entry 113 + -0x1.182d330b3abd2a2e07d69cfdde7a8e36p-2, + -0x1.1f8p-2 + }, + { // Entry 114 + 0x1.ffe0482ef94fe800fb76431a7260ec18p-1, + 0x1.20a0ea0ea0f75p2 + }, + { // Entry 115 + -0x1.ffe0482ef94fe800fb76431a7260ec18p-1, + -0x1.20a0ea0ea0f75p2 + }, + { // Entry 116 + 0x1.268f1d822590680082a05be831e4854ap-6, + 0x1.26973dc7c5be6p-6 + }, + { // Entry 117 + -0x1.268f1d822590680082a05be831e4854ap-6, + -0x1.26973dc7c5be6p-6 + }, + { // Entry 118 + 0x1.218ab0574162d800d421fdb840145675p-2, + 0x1.29a69bd13ee87p-2 + }, + { // Entry 119 + -0x1.218ab0574162d800d421fdb840145675p-2, + -0x1.29a69bd13ee87p-2 + }, + { // Entry 120 + 0x1.2a4dda7de0017fffffbc7994f1ba04a0p-2, + 0x1.3333333389314p-2 + }, + { // Entry 121 + -0x1.2a4dda7de0017fffffbc7994f1ba04a0p-2, + -0x1.3333333389314p-2 + }, + { // Entry 122 + 0x1.3588dea53e3e48000186808c28c507e0p-3, + 0x1.37eca6a41e727p-3 + }, + { // Entry 123 + -0x1.3588dea53e3e48000186808c28c507e0p-3, + -0x1.37eca6a41e727p-3 + }, + { // Entry 124 + 0x1.adc58b27626030403b9dea1c7eee05c0p-1, + 0x1.3818fe847da14p0 + }, + { // Entry 125 + -0x1.adc58b27626030403b9dea1c7eee05c0p-1, + -0x1.3818fe847da14p0 + }, + { // Entry 126 + 0x1.39e670f864e06800916b322435b7bc9ap-6, + 0x1.39f046957a2f6p-6 + }, + { // Entry 127 + -0x1.39e670f864e06800916b322435b7bc9ap-6, + -0x1.39f046957a2f6p-6 + }, + { // Entry 128 + 0x1.afb03526b454afc4fd8fbb37ba979691p-1, + 0x1.3b6071d1f7484p0 + }, + { // Entry 129 + -0x1.afb03526b454afc4fd8fbb37ba979691p-1, + -0x1.3b6071d1f7484p0 + }, + { // Entry 130 + 0x1.fff71a538fb237ffaecdafac07098ecdp-1, + 0x1.494ee9ac8da60p2 + }, + { // Entry 131 + -0x1.fff71a538fb237ffaecdafac07098ecdp-1, + -0x1.494ee9ac8da60p2 + }, + { // Entry 132 + 0x1.b8af4dc2536ea800f3619a37dabd112ep-1, + 0x1.4bcc5e389c6a2p0 + }, + { // Entry 133 + -0x1.b8af4dc2536ea800f3619a37dabd112ep-1, + -0x1.4bcc5e389c6a2p0 + }, + { // Entry 134 + 0x1.bfe15277a8709fff7196fc7ed299cacfp-1, + 0x1.5a6p0 + }, + { // Entry 135 + -0x1.bfe15277a8709fff7196fc7ed299cacfp-1, + -0x1.5a6p0 + }, + { // Entry 136 + 0x1.31e258b9d59417ff0172bc482ad0836bp-1, + 0x1.60d71db63fc38p-1 + }, + { // Entry 137 + -0x1.31e258b9d59417ff0172bc482ad0836bp-1, + -0x1.60d71db63fc38p-1 + }, + { // Entry 138 + 0x1.62fd595702658ff6ef9857182535c62fp-6, + 0x1.630b92e7f0f77p-6 + }, + { // Entry 139 + -0x1.62fd595702658ff6ef9857182535c62fp-6, + -0x1.630b92e7f0f77p-6 + }, + { // Entry 140 + 0x1.33ea141cebb6430c668ffce962626636p-1, + 0x1.64024f4a3b070p-1 + }, + { // Entry 141 + -0x1.33ea141cebb6430c668ffce962626636p-1, + -0x1.64024f4a3b070p-1 + }, + { // Entry 142 + 0x1.64c8407c232917fafcc3fa7256f65979p-13, + 0x1.64c840b5e30aap-13 + }, + { // Entry 143 + -0x1.64c8407c232917fafcc3fa7256f65979p-13, + -0x1.64c840b5e30aap-13 + }, + { // Entry 144 + 0x1.35061c5e8c503500e45460954fc60ba0p-1, + 0x1.65c0300548991p-1 + }, + { // Entry 145 + -0x1.35061c5e8c503500e45460954fc60ba0p-1, + -0x1.65c0300548991p-1 + }, + { // Entry 146 + 0x1.fc659d3ccb3ad0f406e5741895bf529bp-1, + 0x1.695ab3124e6f3p1 + }, + { // Entry 147 + -0x1.fc659d3ccb3ad0f406e5741895bf529bp-1, + -0x1.695ab3124e6f3p1 + }, + { // Entry 148 + 0x1.698e7945aa772812eb8246c066fe12cep-4, + 0x1.6a8p-4 + }, + { // Entry 149 + -0x1.698e7945aa772812eb8246c066fe12cep-4, + -0x1.6a8p-4 + }, + { // Entry 150 + 0x1.c9a96d9b25e257fef42254a09c5a8e89p-1, + 0x1.70dc370dc370cp0 + }, + { // Entry 151 + -0x1.c9a96d9b25e257fef42254a09c5a8e89p-1, + -0x1.70dc370dc370cp0 + }, + { // Entry 152 + 0x1.729b0b53891cd8029a198f346aded3c6p-5, + 0x1.72dbd9697a31ap-5 + }, + { // Entry 153 + -0x1.729b0b53891cd8029a198f346aded3c6p-5, + -0x1.72dbd9697a31ap-5 + }, + { // Entry 154 + 0x1.42dfc90ce7990801849a792e4b568e22p-1, + 0x1.7c2055eedea83p-1 + }, + { // Entry 155 + -0x1.42dfc90ce7990801849a792e4b568e22p-1, + -0x1.7c2055eedea83p-1 + }, + { // Entry 156 + 0x1.445fe311097e8b509753e0bbd4d8de8ap-1, + 0x1.7eap-1 + }, + { // Entry 157 + -0x1.445fe311097e8b509753e0bbd4d8de8ap-1, + -0x1.7eap-1 + }, + { // Entry 158 + 0x1.7e9dcb8e6272f7ff7aebf989fc716171p-6, + 0x1.7eaf9b6ae4ee3p-6 + }, + { // Entry 159 + -0x1.7e9dcb8e6272f7ff7aebf989fc716171p-6, + -0x1.7eaf9b6ae4ee3p-6 + }, + { // Entry 160 + 0x1.459f0dcdb1b2522b5637d303656306dep-1, + 0x1.80b68cceb89c4p-1 + }, + { // Entry 161 + -0x1.459f0dcdb1b2522b5637d303656306dep-1, + -0x1.80b68cceb89c4p-1 + }, + { // Entry 162 + 0x1.45b3111d091a910621ec7f399ccdb8c2p-1, + 0x1.80d82924ec44dp-1 + }, + { // Entry 163 + -0x1.45b3111d091a910621ec7f399ccdb8c2p-1, + -0x1.80d82924ec44dp-1 + }, + { // Entry 164 + 0x1.49009c6556eed1e5e07615b5b4c368ecp-1, + 0x1.866e5ae84b0e8p-1 + }, + { // Entry 165 + -0x1.49009c6556eed1e5e07615b5b4c368ecp-1, + -0x1.866e5ae84b0e8p-1 + }, + { // Entry 166 + 0x1.49a2006d9598d0564979f87ef81c5b1cp-1, + 0x1.8781a092a0f52p-1 + }, + { // Entry 167 + -0x1.49a2006d9598d0564979f87ef81c5b1cp-1, + -0x1.8781a092a0f52p-1 + }, + { // Entry 168 + 0x1.862c8470e675a07e123ea879f8baebb3p-3, + 0x1.8b0p-3 + }, + { // Entry 169 + -0x1.862c8470e675a07e123ea879f8baebb3p-3, + -0x1.8b0p-3 + }, + { // Entry 170 + 0x1.8f77d5d8932c9ff9095e8f77fddd070dp-6, + 0x1.8f8c1b47ec114p-6 + }, + { // Entry 171 + -0x1.8f77d5d8932c9ff9095e8f77fddd070dp-6, + -0x1.8f8c1b47ec114p-6 + }, + { // Entry 172 + 0x1.830e23e04e0347fe78663f1c44eb84fbp-2, + 0x1.974p-2 + }, + { // Entry 173 + -0x1.830e23e04e0347fe78663f1c44eb84fbp-2, + -0x1.974p-2 + }, + { // Entry 174 + 0x1.536c6d4bc8352db7986656026697f1a9p-1, + 0x1.98980p-1 + }, + { // Entry 175 + -0x1.536c6d4bc8352db7986656026697f1a9p-1, + -0x1.98980p-1 + }, + { // Entry 176 + 0x1.53ca8372b3cf0800c109372ef0258556p-1, + 0x1.994p-1 + }, + { // Entry 177 + -0x1.53ca8372b3cf0800c109372ef0258556p-1, + -0x1.994p-1 + }, + { // Entry 178 + 0x1.94022794ca0f90111cd01b7fcb8cf9b6p-3, + 0x1.996p-3 + }, + { // Entry 179 + -0x1.94022794ca0f90111cd01b7fcb8cf9b6p-3, + -0x1.996p-3 + }, + { // Entry 180 + 0x1.9439830b85ad100001b86875e3435678p-3, + 0x1.99999999e7fb6p-3 + }, + { // Entry 181 + -0x1.9439830b85ad100001b86875e3435678p-3, + -0x1.99999999e7fb6p-3 + }, + { // Entry 182 + 0x1.8511573d83e2980001dfb476af7fd902p-2, + 0x1.9999999b34a5bp-2 + }, + { // Entry 183 + -0x1.8511573d83e2980001dfb476af7fd902p-2, + -0x1.9999999b34a5bp-2 + }, + { // Entry 184 + 0x1.9439830d887d0800010c022856ad8045p-3, + 0x1.9999999bffa9bp-3 + }, + { // Entry 185 + -0x1.9439830d887d0800010c022856ad8045p-3, + -0x1.9999999bffa9bp-3 + }, + { // Entry 186 + 0x1.983d7799ce1f6ffffe2004e393d95329p-4, + 0x1.9999999d7d8a2p-4 + }, + { // Entry 187 + -0x1.983d7799ce1f6ffffe2004e393d95329p-4, + -0x1.9999999d7d8a2p-4 + }, + { // Entry 188 + 0x1.983d779b6c85f7fffe2905fb22397b60p-4, + 0x1.9999999f20191p-4 + }, + { // Entry 189 + -0x1.983d779b6c85f7fffe2905fb22397b60p-4, + -0x1.9999999f20191p-4 + }, + { // Entry 190 + 0x1.dcba660c6fece80d4553119effdd5c2ep-1, + 0x1.aaaaaaaaaaaacp0 + }, + { // Entry 191 + -0x1.dcba660c6fece80d4553119effdd5c2ep-1, + -0x1.aaaaaaaaaaaacp0 + }, + { // Entry 192 + 0x1.ad59b59465b065170605cbf13988832ap-7, + 0x1.ad6p-7 + }, + { // Entry 193 + -0x1.ad59b59465b065170605cbf13988832ap-7, + -0x1.ad6p-7 + }, + { // Entry 194 + 0x1.6010ea0ed51797ff8b6ca7fede1b8d31p-1, + 0x1.afd7ebf5faf80p-1 + }, + { // Entry 195 + -0x1.6010ea0ed51797ff8b6ca7fede1b8d31p-1, + -0x1.afd7ebf5faf80p-1 + }, + { // Entry 196 + 0x1.9b46310eb4e6d7fcfcd6e280870e9b65p-2, + 0x1.b3cfa6c7643acp-2 + }, + { // Entry 197 + -0x1.9b46310eb4e6d7fcfcd6e280870e9b65p-2, + -0x1.b3cfa6c7643acp-2 + }, + { // Entry 198 + 0x1.630edae8786c8eac4ae4fc2ca2fa0dbep-1, + 0x1.b590150dcf8bfp-1 + }, + { // Entry 199 + -0x1.630edae8786c8eac4ae4fc2ca2fa0dbep-1, + -0x1.b590150dcf8bfp-1 + }, + { // Entry 200 + 0x1.657a4f7f260d4f26d7f76db01c856ac3p-1, + 0x1.ba4108b264c6ap-1 + }, + { // Entry 201 + -0x1.657a4f7f260d4f26d7f76db01c856ac3p-1, + -0x1.ba4108b264c6ap-1 + }, + { // Entry 202 + 0x1.ba73ec4f0359a005d109ed3d8245363fp-6, + 0x1.ba8f78449f0b8p-6 + }, + { // Entry 203 + -0x1.ba73ec4f0359a005d109ed3d8245363fp-6, + -0x1.ba8f78449f0b8p-6 + }, + { // Entry 204 + 0x1.b42aa86fc0c0afc4c48569cd92293a6fp-3, + 0x1.baf2501e20528p-3 + }, + { // Entry 205 + -0x1.b42aa86fc0c0afc4c48569cd92293a6fp-3, + -0x1.baf2501e20528p-3 + }, + { // Entry 206 + 0x1.e0eb93e911bfd7ffc1cbb555f083546ap-1, + 0x1.bb6766c1a2624p0 + }, + { // Entry 207 + -0x1.e0eb93e911bfd7ffc1cbb555f083546ap-1, + -0x1.bb6766c1a2624p0 + }, + { // Entry 208 + 0x1.bc9c90043f5afff80b989f92cea4b087p-6, + 0x1.bcb883bb4a1d2p-6 + }, + { // Entry 209 + -0x1.bc9c90043f5afff80b989f92cea4b087p-6, + -0x1.bcb883bb4a1d2p-6 + }, + { // Entry 210 + 0x1.66de0bef230e8802075b728fcffdea9ep-1, + 0x1.bcf9b5e552e46p-1 + }, + { // Entry 211 + -0x1.66de0bef230e8802075b728fcffdea9ep-1, + -0x1.bcf9b5e552e46p-1 + }, + { // Entry 212 + 0x1.c761f75b6966c8015bc19070f6ab5006p-6, + 0x1.c78p-6 + }, + { // Entry 213 + -0x1.c761f75b6966c8015bc19070f6ab5006p-6, + -0x1.c78p-6 + }, + { // Entry 214 + 0x1.71421350a064b0b3b168c6e13a942da1p-1, + 0x1.d20p-1 + }, + { // Entry 215 + -0x1.71421350a064b0b3b168c6e13a942da1p-1, + -0x1.d20p-1 + }, + { // Entry 216 + 0x1.ca9adc00daadf21de2f8e2a3b667acc3p-3, + 0x1.d2827155cd7f2p-3 + }, + { // Entry 217 + -0x1.ca9adc00daadf21de2f8e2a3b667acc3p-3, + -0x1.d2827155cd7f2p-3 + }, + { // Entry 218 + 0x1.d3af0b409493d80f16690d417a020954p-5, + 0x1.d4315fde0fd60p-5 + }, + { // Entry 219 + -0x1.d3af0b409493d80f16690d417a020954p-5, + -0x1.d4315fde0fd60p-5 + }, + { // Entry 220 + 0x1.ff53ef909a53c7ff46ae6492b249f914p-1, + 0x1.d50p1 + }, + { // Entry 221 + -0x1.ff53ef909a53c7ff46ae6492b249f914p-1, + -0x1.d50p1 + }, + { // Entry 222 + 0x1.d4c6dbdd6204b7fdaefa65c2de6c3bc1p-5, + 0x1.d54a1b43f2119p-5 + }, + { // Entry 223 + -0x1.d4c6dbdd6204b7fdaefa65c2de6c3bc1p-5, + -0x1.d54a1b43f2119p-5 + }, + { // Entry 224 + 0x1.d60c056eebcb57ea94de726e86f49ee6p-4, + 0x1.d82076d07e0cap-4 + }, + { // Entry 225 + -0x1.d60c056eebcb57ea94de726e86f49ee6p-4, + -0x1.d82076d07e0cap-4 + }, + { // Entry 226 + 0x1.745a81f5485b0dad83d3ad761f034d17p-1, + 0x1.d8829d48d5ccap-1 + }, + { // Entry 227 + -0x1.745a81f5485b0dad83d3ad761f034d17p-1, + -0x1.d8829d48d5ccap-1 + }, + { // Entry 228 + 0x1.dab77f34d301c900e13d05b912fca596p-7, + 0x1.dacp-7 + }, + { // Entry 229 + -0x1.dab77f34d301c900e13d05b912fca596p-7, + -0x1.dacp-7 + }, + { // Entry 230 + 0x1.d59fb2c4927767ffaf038b5b533e17b8p-3, + 0x1.de2p-3 + }, + { // Entry 231 + -0x1.d59fb2c4927767ffaf038b5b533e17b8p-3, + -0x1.de2p-3 + }, + { // Entry 232 + 0x1.bebc593435695f3e5d9dfdce8ac65911p-2, + 0x1.ded4e157ebb5ap-2 + }, + { // Entry 233 + -0x1.bebc593435695f3e5d9dfdce8ac65911p-2, + -0x1.ded4e157ebb5ap-2 + }, + { // Entry 234 + 0x1.d7665cf9bb8287f53cfd2d51f28dbc87p-3, + 0x1.ep-3 + }, + { // Entry 235 + -0x1.d7665cf9bb8287f53cfd2d51f28dbc87p-3, + -0x1.ep-3 + }, + { // Entry 236 + 0x1.e1839a63361cd36a2077ec3be46fb31cp-6, + 0x1.e1a71c88d42abp-6 + }, + { // Entry 237 + -0x1.e1839a63361cd36a2077ec3be46fb31cp-6, + -0x1.e1a71c88d42abp-6 + }, + { // Entry 238 + 0x1.e94414bfb8b1c926487a611c3e9c82fep-1, + 0x1.e48p0 + }, + { // Entry 239 + -0x1.e94414bfb8b1c926487a611c3e9c82fep-1, + -0x1.e48p0 + }, + { // Entry 240 + 0x1.e47ecb0b519ed4c405e6925c6189b4d5p-6, + 0x1.e4a2f72376d83p-6 + }, + { // Entry 241 + -0x1.e47ecb0b519ed4c405e6925c6189b4d5p-6, + -0x1.e4a2f72376d83p-6 + }, + { // Entry 242 + 0x1.e94fc93631c7e9191f4973a0d807d78ap-1, + 0x1.e4c377153ca9ap0 + }, + { // Entry 243 + -0x1.e94fc93631c7e9191f4973a0d807d78ap-1, + -0x1.e4c377153ca9ap0 + }, + { // Entry 244 + 0x1.c4cc03a3d0c237fdcf5623b5615bbe1dp-2, + 0x1.e6577536d43e7p-2 + }, + { // Entry 245 + -0x1.c4cc03a3d0c237fdcf5623b5615bbe1dp-2, + -0x1.e6577536d43e7p-2 + }, + { // Entry 246 + 0x1.c6214d5944547e0b684eaf0557117675p-2, + 0x1.e80p-2 + }, + { // Entry 247 + -0x1.c6214d5944547e0b684eaf0557117675p-2, + -0x1.e80p-2 + }, + { // Entry 248 + 0x1.7cd8fa892ecf17fe5da6a217f1e8d441p-1, + 0x1.eb05b226cd194p-1 + }, + { // Entry 249 + -0x1.7cd8fa892ecf17fe5da6a217f1e8d441p-1, + -0x1.eb05b226cd194p-1 + }, + { // Entry 250 + 0x1.fb638c376c8fa8010dbbb805d349366ep-6, + 0x1.fb8d188a84c37p-6 + }, + { // Entry 251 + -0x1.fb638c376c8fa8010dbbb805d349366ep-6, + -0x1.fb8d188a84c37p-6 + }, + { // Entry 252 + 0x1.ed02211fde846895e3a231ab4b15fc07p-1, + 0x1.fbfffffffffffp0 + }, + { // Entry 253 + -0x1.ed02211fde846895e3a231ab4b15fc07p-1, + -0x1.fbfffffffffffp0 + }, + { // Entry 254 + 0x1.85558570498f17fd9281ca9c45bffb5ep-1, + 0x1.fe91bd20c2fa7p-1 + }, + { // Entry 255 + -0x1.85558570498f17fd9281ca9c45bffb5ep-1, + -0x1.fe91bd20c2fa7p-1 + }, + { // Entry 256 + 0x1.ff8f55c580d0ad705f464b9e36c04624p-9, + 0x1.ff8ffffffffffp-9 + }, + { // Entry 257 + -0x1.ff8f55c580d0ad705f464b9e36c04624p-9, + -0x1.ff8ffffffffffp-9 + }, + { // Entry 258 + 0x1.ffcf558594f9980987b40863efca6716p-9, + 0x1.ffcffffffffffp-9 + }, + { // Entry 259 + -0x1.ffcf558594f9980987b40863efca6716p-9, + -0x1.ffcffffffffffp-9 + }, + { // Entry 260 + 0x1.ffb5619756262b83f716223082574b9bp-6, + 0x1.ffep-6 + }, + { // Entry 261 + -0x1.ffb5619756262b83f716223082574b9bp-6, + -0x1.ffep-6 + }, + { // Entry 262 + 0x1.ffe14573a7c18e0b1e2b616408b023d0p-9, + 0x1.ffe1effffffffp-9 + }, + { // Entry 263 + -0x1.ffe14573a7c18e0b1e2b616408b023d0p-9, + -0x1.ffe1effffffffp-9 + }, + { // Entry 264 + 0x1.ffed559996e8080e35db4ddd5c5067b7p-8, + 0x1.ffeffffffffffp-8 + }, + { // Entry 265 + -0x1.ffed559996e8080e35db4ddd5c5067b7p-8, + -0x1.ffeffffffffffp-8 + }, + { // Entry 266 + 0x1.fd595b1bf5ffd7fd760222476204a3c8p-4, + 0x1.ffffc77ffff47p-4 + }, + { // Entry 267 + -0x1.fd595b1bf5ffd7fd760222476204a3c8p-4, + -0x1.ffffc77ffff47p-4 + }, + { // Entry 268 + 0x1.85efa37cbe334800fffc63002c8c03eep-1, + 0x1.ffffed5aeedc7p-1 + }, + { // Entry 269 + -0x1.85efa37cbe334800fffc63002c8c03eep-1, + -0x1.ffffed5aeedc7p-1 + }, + { // Entry 270 + 0x1.85efa9d9032e6ebb257c9dc7befcea9cp-1, + 0x1.fffffc7ffffffp-1 + }, + { // Entry 271 + -0x1.85efa9d9032e6ebb257c9dc7befcea9cp-1, + -0x1.fffffc7ffffffp-1 + }, + { // Entry 272 + 0x1.f597ea2d3c6b112fb996697ab9d730f8p-3, + 0x1.ffffffbfbffffp-3 + }, + { // Entry 273 + -0x1.f597ea2d3c6b112fb996697ab9d730f8p-3, + -0x1.ffffffbfbffffp-3 + }, + { // Entry 274 + 0x1.f597ea3c82e148049b81276747b22a43p-3, + 0x1.ffffffcffffffp-3 + }, + { // Entry 275 + -0x1.f597ea3c82e148049b81276747b22a43p-3, + -0x1.ffffffcffffffp-3 + }, + { // Entry 276 + 0x1.d9353d750404d7fd4bd76174b9eb0c4ap-2, + 0x1.ffffffff7ffffp-2 + }, + { // Entry 277 + -0x1.d9353d750404d7fd4bd76174b9eb0c4ap-2, + -0x1.ffffffff7ffffp-2 + }, + { // Entry 278 + 0x1.85efab514f10ed5614c26425b952b2a6p-1, + 0x1.ffffffffff9ffp-1 + }, + { // Entry 279 + -0x1.85efab514f10ed5614c26425b952b2a6p-1, + -0x1.ffffffffff9ffp-1 + }, + { // Entry 280 + 0x1.ffd559992af86be17634ba8180eb56e3p-6, + 0x1.ffffffffffda8p-6 + }, + { // Entry 281 + -0x1.ffd559992af86be17634ba8180eb56e3p-6, + -0x1.ffffffffffda8p-6 + }, + { // Entry 282 + 0x1.ff55997e02f5d7f9739cb079aec68ef1p-5, + 0x1.ffffffffffe85p-5 + }, + { // Entry 283 + -0x1.ff55997e02f5d7f9739cb079aec68ef1p-5, + -0x1.ffffffffffe85p-5 + }, + { // Entry 284 + 0x1.85efab514f38edfd97f9312bc98e2889p-1, + 0x1.ffffffffffff3p-1 + }, + { // Entry 285 + -0x1.85efab514f38edfd97f9312bc98e2889p-1, + -0x1.ffffffffffff3p-1 + }, + { // Entry 286 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffep6 + }, + { // Entry 287 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep6 + }, + { // Entry 288 + 0.0, + 0.0 + }, + { // Entry 289 + 0x1.1a5eeff27cc84e29675f038f1aba6042p-5, + 0x1.1a7b9611a7b96p-5 + }, + { // Entry 290 + -0x1.1a5eeff27cc84e29675f038f1aba6042p-5, + -0x1.1a7b9611a7b96p-5 + }, + { // Entry 291 + 0x1.1a09275c594348d69d3aa6bc5a6d3eacp-4, + 0x1.1a7b9611a7b96p-4 + }, + { // Entry 292 + -0x1.1a09275c594348d69d3aa6bc5a6d3eacp-4, + -0x1.1a7b9611a7b96p-4 + }, + { // Entry 293 + 0x1.a63815915c3db32a3543202f310ededbp-4, + 0x1.a7b9611a7b961p-4 + }, + { // Entry 294 + -0x1.a63815915c3db32a3543202f310ededbp-4, + -0x1.a7b9611a7b961p-4 + }, + { // Entry 295 + 0x1.18b472e84eb8a189e113a261ae412556p-3, + 0x1.1a7b9611a7b96p-3 + }, + { // Entry 296 + -0x1.18b472e84eb8a189e113a261ae412556p-3, + -0x1.1a7b9611a7b96p-3 + }, + { // Entry 297 + 0x1.5da54d60a7195c8adb545802f1bfc594p-3, + 0x1.611a7b9611a7cp-3 + }, + { // Entry 298 + -0x1.5da54d60a7195c8adb545802f1bfc594p-3, + -0x1.611a7b9611a7cp-3 + }, + { // Entry 299 + 0x1.a1c7a7122df5863ada1156ab3e6900a0p-3, + 0x1.a7b9611a7b962p-3 + }, + { // Entry 300 + -0x1.a1c7a7122df5863ada1156ab3e6900a0p-3, + -0x1.a7b9611a7b962p-3 + }, + { // Entry 301 + 0x1.e4f66c98ea9387f84c4b3ac494f670b7p-3, + 0x1.ee58469ee5848p-3 + }, + { // Entry 302 + -0x1.e4f66c98ea9387f84c4b3ac494f670b7p-3, + -0x1.ee58469ee5848p-3 + }, + { // Entry 303 + 0x1.13875ab3cead807903e1f1f3e8e5643ep-2, + 0x1.1a7b9611a7b97p-2 + }, + { // Entry 304 + -0x1.13875ab3cead807903e1f1f3e8e5643ep-2, + -0x1.1a7b9611a7b97p-2 + }, + { // Entry 305 + 0x1.33f8025638e0d966877007ff4292fc49p-2, + 0x1.3dcb08d3dcb0ap-2 + }, + { // Entry 306 + -0x1.33f8025638e0d966877007ff4292fc49p-2, + -0x1.3dcb08d3dcb0ap-2 + }, + { // Entry 307 + 0x1.53be3f9638299cc1042cd3014eb611a5p-2, + 0x1.611a7b9611a7dp-2 + }, + { // Entry 308 + -0x1.53be3f9638299cc1042cd3014eb611a5p-2, + -0x1.611a7b9611a7dp-2 + }, + { // Entry 309 + 0x1.72cc8acad74a0554ceab8f673d8fd9c1p-2, + 0x1.8469ee58469f0p-2 + }, + { // Entry 310 + -0x1.72cc8acad74a0554ceab8f673d8fd9c1p-2, + -0x1.8469ee58469f0p-2 + }, + { // Entry 311 + 0x1.9116d18d0f897a8cd0329175c1761056p-2, + 0x1.a7b9611a7b963p-2 + }, + { // Entry 312 + -0x1.9116d18d0f897a8cd0329175c1761056p-2, + -0x1.a7b9611a7b963p-2 + }, + { // Entry 313 + 0x1.ae92803956bf8fe7960fe047c58fe2cep-2, + 0x1.cb08d3dcb08d6p-2 + }, + { // Entry 314 + -0x1.ae92803956bf8fe7960fe047c58fe2cep-2, + -0x1.cb08d3dcb08d6p-2 + }, + { // Entry 315 + 0x1.cb3685d89f9d9f9f4ed38442b61bb2a8p-2, + 0x1.ee58469ee5849p-2 + }, + { // Entry 316 + -0x1.cb3685d89f9d9f9f4ed38442b61bb2a8p-2, + -0x1.ee58469ee5849p-2 + }, + { // Entry 317 + 0x1.e6fb52c30980e5f495d12b6477845637p-2, + 0x1.08d3dcb08d3dep-1 + }, + { // Entry 318 + -0x1.e6fb52c30980e5f495d12b6477845637p-2, + -0x1.08d3dcb08d3dep-1 + }, + { // Entry 319 + 0x1.00ed69341225491fa94ea8dd2d1c04adp-1, + 0x1.1a7b9611a7b97p-1 + }, + { // Entry 320 + -0x1.00ed69341225491fa94ea8dd2d1c04adp-1, + -0x1.1a7b9611a7b97p-1 + }, + { // Entry 321 + 0x1.0de8305e4cc3d5001e5239e63b8dbed5p-1, + 0x1.2c234f72c2350p-1 + }, + { // Entry 322 + -0x1.0de8305e4cc3d5001e5239e63b8dbed5p-1, + -0x1.2c234f72c2350p-1 + }, + { // Entry 323 + 0x1.1a6c5ded8f162aadbb0149b498cb1b24p-1, + 0x1.3dcb08d3dcb09p-1 + }, + { // Entry 324 + -0x1.1a6c5ded8f162aadbb0149b498cb1b24p-1, + -0x1.3dcb08d3dcb09p-1 + }, + { // Entry 325 + 0x1.2678f93777439d5d9ad904ba063ecb5ep-1, + 0x1.4f72c234f72c2p-1 + }, + { // Entry 326 + -0x1.2678f93777439d5d9ad904ba063ecb5ep-1, + -0x1.4f72c234f72c2p-1 + }, + { // Entry 327 + 0x1.320da7c091ef4552ae755c643a3b4933p-1, + 0x1.611a7b9611a7bp-1 + }, + { // Entry 328 + -0x1.320da7c091ef4552ae755c643a3b4933p-1, + -0x1.611a7b9611a7bp-1 + }, + { // Entry 329 + 0x1.3d2aa22040bdd68238402204b98c4e93p-1, + 0x1.72c234f72c234p-1 + }, + { // Entry 330 + -0x1.3d2aa22040bdd68238402204b98c4e93p-1, + -0x1.72c234f72c234p-1 + }, + { // Entry 331 + 0x1.47d0a82acb4267d301a5dffb3c9a40b2p-1, + 0x1.8469ee58469edp-1 + }, + { // Entry 332 + -0x1.47d0a82acb4267d301a5dffb3c9a40b2p-1, + -0x1.8469ee58469edp-1 + }, + { // Entry 333 + 0x1.5200f4a602b2eebb2c2d9b4d031da2b3p-1, + 0x1.9611a7b9611a6p-1 + }, + { // Entry 334 + -0x1.5200f4a602b2eebb2c2d9b4d031da2b3p-1, + -0x1.9611a7b9611a6p-1 + }, + { // Entry 335 + 0x1.5bbd30c7183021dd4ae1af94efeb7351p-1, + 0x1.a7b9611a7b95fp-1 + }, + { // Entry 336 + -0x1.5bbd30c7183021dd4ae1af94efeb7351p-1, + -0x1.a7b9611a7b95fp-1 + }, + { // Entry 337 + 0x1.650767b19bab5c9a85115d59c1bbbbecp-1, + 0x1.b9611a7b96118p-1 + }, + { // Entry 338 + -0x1.650767b19bab5c9a85115d59c1bbbbecp-1, + -0x1.b9611a7b96118p-1 + }, + { // Entry 339 + 0x1.6de1fa2868b7da01452d1e472d0223d9p-1, + 0x1.cb08d3dcb08d1p-1 + }, + { // Entry 340 + -0x1.6de1fa2868b7da01452d1e472d0223d9p-1, + -0x1.cb08d3dcb08d1p-1 + }, + { // Entry 341 + 0x1.764f9299df20114d026ebd244b4e904ap-1, + 0x1.dcb08d3dcb08ap-1 + }, + { // Entry 342 + -0x1.764f9299df20114d026ebd244b4e904ap-1, + -0x1.dcb08d3dcb08ap-1 + }, + { // Entry 343 + 0x1.7e5319a96b6639eb0ade7fa028ee0d3bp-1, + 0x1.ee58469ee5843p-1 + }, + { // Entry 344 + -0x1.7e5319a96b6639eb0ade7fa028ee0d3bp-1, + -0x1.ee58469ee5843p-1 + }, + { // Entry 345 + 0x1.85efab514f392a77871c49877ccdbfbep-1, + 0x1.ffffffffffffcp-1 + }, + { // Entry 346 + -0x1.85efab514f392a77871c49877ccdbfbep-1, + -0x1.ffffffffffffcp-1 + }, + { // Entry 347 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p100 + }, + { // Entry 348 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p100 + }, + { // Entry 349 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0d79435e50d79p100 + }, + { // Entry 350 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0d79435e50d79p100 + }, + { // Entry 351 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.1af286bca1af2p100 + }, + { // Entry 352 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.1af286bca1af2p100 + }, + { // Entry 353 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.286bca1af286bp100 + }, + { // Entry 354 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.286bca1af286bp100 + }, + { // Entry 355 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.35e50d79435e4p100 + }, + { // Entry 356 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.35e50d79435e4p100 + }, + { // Entry 357 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.435e50d79435dp100 + }, + { // Entry 358 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.435e50d79435dp100 + }, + { // Entry 359 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.50d79435e50d6p100 + }, + { // Entry 360 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.50d79435e50d6p100 + }, + { // Entry 361 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.5e50d79435e4fp100 + }, + { // Entry 362 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.5e50d79435e4fp100 + }, + { // Entry 363 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.6bca1af286bc8p100 + }, + { // Entry 364 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6bca1af286bc8p100 + }, + { // Entry 365 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.79435e50d7941p100 + }, + { // Entry 366 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.79435e50d7941p100 + }, + { // Entry 367 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.86bca1af286bap100 + }, + { // Entry 368 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.86bca1af286bap100 + }, + { // Entry 369 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9435e50d79433p100 + }, + { // Entry 370 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9435e50d79433p100 + }, + { // Entry 371 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.a1af286bca1acp100 + }, + { // Entry 372 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.a1af286bca1acp100 + }, + { // Entry 373 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.af286bca1af25p100 + }, + { // Entry 374 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.af286bca1af25p100 + }, + { // Entry 375 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.bca1af286bc9ep100 + }, + { // Entry 376 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.bca1af286bc9ep100 + }, + { // Entry 377 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ca1af286bca17p100 + }, + { // Entry 378 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ca1af286bca17p100 + }, + { // Entry 379 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.d79435e50d790p100 + }, + { // Entry 380 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.d79435e50d790p100 + }, + { // Entry 381 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.e50d79435e509p100 + }, + { // Entry 382 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.e50d79435e509p100 + }, + { // Entry 383 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.f286bca1af282p100 + }, + { // Entry 384 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.f286bca1af282p100 + }, + { // Entry 385 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffbp100 + }, + { // Entry 386 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffbp100 + }, + { // Entry 387 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p200 + }, + { // Entry 388 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p200 + }, + { // Entry 389 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0d79435e50d79p200 + }, + { // Entry 390 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0d79435e50d79p200 + }, + { // Entry 391 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.1af286bca1af2p200 + }, + { // Entry 392 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.1af286bca1af2p200 + }, + { // Entry 393 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.286bca1af286bp200 + }, + { // Entry 394 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.286bca1af286bp200 + }, + { // Entry 395 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.35e50d79435e4p200 + }, + { // Entry 396 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.35e50d79435e4p200 + }, + { // Entry 397 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.435e50d79435dp200 + }, + { // Entry 398 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.435e50d79435dp200 + }, + { // Entry 399 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.50d79435e50d6p200 + }, + { // Entry 400 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.50d79435e50d6p200 + }, + { // Entry 401 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.5e50d79435e4fp200 + }, + { // Entry 402 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.5e50d79435e4fp200 + }, + { // Entry 403 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.6bca1af286bc8p200 + }, + { // Entry 404 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6bca1af286bc8p200 + }, + { // Entry 405 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.79435e50d7941p200 + }, + { // Entry 406 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.79435e50d7941p200 + }, + { // Entry 407 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.86bca1af286bap200 + }, + { // Entry 408 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.86bca1af286bap200 + }, + { // Entry 409 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9435e50d79433p200 + }, + { // Entry 410 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9435e50d79433p200 + }, + { // Entry 411 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.a1af286bca1acp200 + }, + { // Entry 412 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.a1af286bca1acp200 + }, + { // Entry 413 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.af286bca1af25p200 + }, + { // Entry 414 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.af286bca1af25p200 + }, + { // Entry 415 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.bca1af286bc9ep200 + }, + { // Entry 416 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.bca1af286bc9ep200 + }, + { // Entry 417 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ca1af286bca17p200 + }, + { // Entry 418 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ca1af286bca17p200 + }, + { // Entry 419 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.d79435e50d790p200 + }, + { // Entry 420 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.d79435e50d790p200 + }, + { // Entry 421 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.e50d79435e509p200 + }, + { // Entry 422 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.e50d79435e509p200 + }, + { // Entry 423 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.f286bca1af282p200 + }, + { // Entry 424 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.f286bca1af282p200 + }, + { // Entry 425 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffbp200 + }, + { // Entry 426 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffbp200 + }, + { // Entry 427 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p1000 + }, + { // Entry 428 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p1000 + }, + { // Entry 429 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0d79435e50d79p1000 + }, + { // Entry 430 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0d79435e50d79p1000 + }, + { // Entry 431 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.1af286bca1af2p1000 + }, + { // Entry 432 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.1af286bca1af2p1000 + }, + { // Entry 433 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.286bca1af286bp1000 + }, + { // Entry 434 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.286bca1af286bp1000 + }, + { // Entry 435 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.35e50d79435e4p1000 + }, + { // Entry 436 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.35e50d79435e4p1000 + }, + { // Entry 437 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.435e50d79435dp1000 + }, + { // Entry 438 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.435e50d79435dp1000 + }, + { // Entry 439 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.50d79435e50d6p1000 + }, + { // Entry 440 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.50d79435e50d6p1000 + }, + { // Entry 441 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.5e50d79435e4fp1000 + }, + { // Entry 442 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.5e50d79435e4fp1000 + }, + { // Entry 443 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.6bca1af286bc8p1000 + }, + { // Entry 444 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6bca1af286bc8p1000 + }, + { // Entry 445 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.79435e50d7941p1000 + }, + { // Entry 446 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.79435e50d7941p1000 + }, + { // Entry 447 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.86bca1af286bap1000 + }, + { // Entry 448 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.86bca1af286bap1000 + }, + { // Entry 449 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9435e50d79433p1000 + }, + { // Entry 450 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9435e50d79433p1000 + }, + { // Entry 451 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.a1af286bca1acp1000 + }, + { // Entry 452 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.a1af286bca1acp1000 + }, + { // Entry 453 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.af286bca1af25p1000 + }, + { // Entry 454 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.af286bca1af25p1000 + }, + { // Entry 455 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.bca1af286bc9ep1000 + }, + { // Entry 456 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.bca1af286bc9ep1000 + }, + { // Entry 457 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ca1af286bca17p1000 + }, + { // Entry 458 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ca1af286bca17p1000 + }, + { // Entry 459 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.d79435e50d790p1000 + }, + { // Entry 460 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.d79435e50d790p1000 + }, + { // Entry 461 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.e50d79435e509p1000 + }, + { // Entry 462 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.e50d79435e509p1000 + }, + { // Entry 463 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.f286bca1af282p1000 + }, + { // Entry 464 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.f286bca1af282p1000 + }, + { // Entry 465 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffbp1000 + }, + { // Entry 466 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffbp1000 + }, + { // Entry 467 + -0.0, + -0x1.0p-1074 + }, + { // Entry 468 + 0.0, + 0x1.0p-1074 + }, + { // Entry 469 + -0.0, + -0.0 + }, + { // Entry 470 + 0.0, + 0x1.0p-1074 + }, + { // Entry 471 + -0.0, + -0x1.0p-1074 + }, + { // Entry 472 + 0x1.d9353d7568af29bbdeb6502490ea91f5p-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 473 + -0x1.d9353d7568af29bbdeb6502490ea91f5p-2, + -0x1.fffffffffffffp-2 + }, + { // Entry 474 + 0x1.d9353d7568af365128ee21c65b08d3a7p-2, + 0x1.0p-1 + }, + { // Entry 475 + -0x1.d9353d7568af365128ee21c65b08d3a7p-2, + -0x1.0p-1 + }, + { // Entry 476 + 0x1.d9353d7568af4f7bbd5dc509eeb9c854p-2, + 0x1.0000000000001p-1 + }, + { // Entry 477 + -0x1.d9353d7568af4f7bbd5dc509eeb9c854p-2, + -0x1.0000000000001p-1 + }, + { // Entry 478 + 0x1.ffffffffffffd9ce09d9ac0077339fccp-2, + 0x1.193ea7aad0309p-1 + }, + { // Entry 479 + -0x1.ffffffffffffd9ce09d9ac0077339fccp-2, + -0x1.193ea7aad0309p-1 + }, + { // Entry 480 + 0x1.fffffffffffff1ce09d9ac0078052f7dp-2, + 0x1.193ea7aad030ap-1 + }, + { // Entry 481 + -0x1.fffffffffffff1ce09d9ac0078052f7dp-2, + -0x1.193ea7aad030ap-1 + }, + { // Entry 482 + 0x1.00000000000004e704ecd6003c0b5f97p-1, + 0x1.193ea7aad030bp-1 + }, + { // Entry 483 + -0x1.00000000000004e704ecd6003c0b5f97p-1, + -0x1.193ea7aad030bp-1 + }, + { // Entry 484 + 0x1.fffffffffffffffa422f887a2db9896bp-1, + 0x1.5ffffffffffffp4 + }, + { // Entry 485 + -0x1.fffffffffffffffa422f887a2db9896bp-1, + -0x1.5ffffffffffffp4 + }, + { // Entry 486 + 0x1.fffffffffffffffa422f887a2dc5050cp-1, + 0x1.6p4 + }, + { // Entry 487 + -0x1.fffffffffffffffa422f887a2dc5050cp-1, + -0x1.6p4 + }, + { // Entry 488 + 0x1.fffffffffffffffa422f887a2dd080adp-1, + 0x1.6000000000001p4 + }, + { // Entry 489 + -0x1.fffffffffffffffa422f887a2dd080adp-1, + -0x1.6000000000001p4 + }, + { // Entry 490 + -0x1.3333333333333b4d120fbdf5bd629059p-1, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 491 + 0x1.3333333333333b4d120fbdf5bd629059p-1, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 492 + -0x1.333333333333310fa16be6eb800e8ac1p-1, + -0x1.62e42fefa39efp-1 + }, + { // Entry 493 + 0x1.333333333333310fa16be6eb800e8ac1p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 494 + -0x1.33333333333326d230c80fe142583755p-1, + -0x1.62e42fefa39eep-1 + }, + { // Entry 495 + 0x1.33333333333326d230c80fe142583755p-1, + 0x1.62e42fefa39eep-1 + }, + { // Entry 496 + -0x1.5555555555556095b587a4471560a40bp-2, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 497 + 0x1.5555555555556095b587a4471560a40bp-2, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 498 + -0x1.555555555555525cd1f96b638732caf9p-2, + -0x1.62e42fefa39efp-2 + }, + { // Entry 499 + 0x1.555555555555525cd1f96b638732caf9p-2, + 0x1.62e42fefa39efp-2 + }, + { // Entry 500 + -0x1.5555555555554423ee6b327ff8df04ddp-2, + -0x1.62e42fefa39eep-2 + }, + { // Entry 501 + 0x1.5555555555554423ee6b327ff8df04ddp-2, + 0x1.62e42fefa39eep-2 + }, + { // Entry 502 + -0x1.5f619980c4337bbdd8e8c2066bb51eb7p-3, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 503 + 0x1.5f619980c4337bbdd8e8c2066bb51eb7p-3, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 504 + -0x1.5f619980c4336c366c1acb38d4f1b2bdp-3, + -0x1.62e42fefa39efp-3 + }, + { // Entry 505 + 0x1.5f619980c4336c366c1acb38d4f1b2bdp-3, + 0x1.62e42fefa39efp-3 + }, + { // Entry 506 + -0x1.5f619980c4335caeff4cd46b3e239e77p-3, + -0x1.62e42fefa39eep-3 + }, + { // Entry 507 + 0x1.5f619980c4335caeff4cd46b3e239e77p-3, + 0x1.62e42fefa39eep-3 + }, + { // Entry 508 + -0x1.620185e5621414c6823c701f4e8d83f5p-4, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 509 + 0x1.620185e5621414c6823c701f4e8d83f5p-4, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 510 + -0x1.620185e5621404e51abfd52a9fb35582p-4, + -0x1.62e42fefa39efp-4 + }, + { // Entry 511 + 0x1.620185e5621404e51abfd52a9fb35582p-4, + 0x1.62e42fefa39efp-4 + }, + { // Entry 512 + -0x1.620185e56213f503b3433a35f0d66857p-4, + -0x1.62e42fefa39eep-4 + }, + { // Entry 513 + 0x1.620185e56213f503b3433a35f0d66857p-4, + 0x1.62e42fefa39eep-4 + }, + { // Entry 514 + -0x1.62ab64c8162a91fbc4d3da77194b3135p-5, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 515 + 0x1.62ab64c8162a91fbc4d3da77194b3135p-5, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 516 + -0x1.62ab64c8162a8203724db05bba6bf1f1p-5, + -0x1.62e42fefa39efp-5 + }, + { // Entry 517 + 0x1.62ab64c8162a8203724db05bba6bf1f1p-5, + 0x1.62e42fefa39efp-5 + }, + { // Entry 518 + -0x1.62ab64c8162a720b1fc786405b8c01adp-5, + -0x1.62e42fefa39eep-5 + }, + { // Entry 519 + 0x1.62ab64c8162a720b1fc786405b8c01adp-5, + 0x1.62e42fefa39eep-5 + }, + { // Entry 520 + -0x1.62d5fb19f39d32db543feb53c0c8af33p-6, + -0x1.62e42fefa39f0p-6 + }, + { // Entry 521 + 0x1.62d5fb19f39d32db543feb53c0c8af33p-6, + 0x1.62e42fefa39f0p-6 + }, + { // Entry 522 + -0x1.62d5fb19f39d22dd401468a35602a39dp-6, + -0x1.62e42fefa39efp-6 + }, + { // Entry 523 + 0x1.62d5fb19f39d22dd401468a35602a39dp-6, + 0x1.62e42fefa39efp-6 + }, + { // Entry 524 + -0x1.62d5fb19f39d12df2be8e5f2eb3c6bb2p-6, + -0x1.62e42fefa39eep-6 + }, + { // Entry 525 + 0x1.62d5fb19f39d12df2be8e5f2eb3c6bb2p-6, + 0x1.62e42fefa39eep-6 + }, + { // Entry 526 + 0x1.62d5fb19f39d12df2be8e5f2eb3c6bb2p-6, + 0x1.62e42fefa39eep-6 + }, + { // Entry 527 + -0x1.62d5fb19f39d12df2be8e5f2eb3c6bb2p-6, + -0x1.62e42fefa39eep-6 + }, + { // Entry 528 + 0x1.62d5fb19f39d22dd401468a35602a39dp-6, + 0x1.62e42fefa39efp-6 + }, + { // Entry 529 + -0x1.62d5fb19f39d22dd401468a35602a39dp-6, + -0x1.62e42fefa39efp-6 + }, + { // Entry 530 + 0x1.62d5fb19f39d32db543feb53c0c8af33p-6, + 0x1.62e42fefa39f0p-6 + }, + { // Entry 531 + -0x1.62d5fb19f39d32db543feb53c0c8af33p-6, + -0x1.62e42fefa39f0p-6 + }, + { // Entry 532 + 0x1.62ab64c8162a720b1fc786405b8c01adp-5, + 0x1.62e42fefa39eep-5 + }, + { // Entry 533 + -0x1.62ab64c8162a720b1fc786405b8c01adp-5, + -0x1.62e42fefa39eep-5 + }, + { // Entry 534 + 0x1.62ab64c8162a8203724db05bba6bf1f1p-5, + 0x1.62e42fefa39efp-5 + }, + { // Entry 535 + -0x1.62ab64c8162a8203724db05bba6bf1f1p-5, + -0x1.62e42fefa39efp-5 + }, + { // Entry 536 + 0x1.62ab64c8162a91fbc4d3da77194b3135p-5, + 0x1.62e42fefa39f0p-5 + }, + { // Entry 537 + -0x1.62ab64c8162a91fbc4d3da77194b3135p-5, + -0x1.62e42fefa39f0p-5 + }, + { // Entry 538 + 0x1.620185e56213f503b3433a35f0d66857p-4, + 0x1.62e42fefa39eep-4 + }, + { // Entry 539 + -0x1.620185e56213f503b3433a35f0d66857p-4, + -0x1.62e42fefa39eep-4 + }, + { // Entry 540 + 0x1.620185e5621404e51abfd52a9fb35582p-4, + 0x1.62e42fefa39efp-4 + }, + { // Entry 541 + -0x1.620185e5621404e51abfd52a9fb35582p-4, + -0x1.62e42fefa39efp-4 + }, + { // Entry 542 + 0x1.620185e5621414c6823c701f4e8d83f5p-4, + 0x1.62e42fefa39f0p-4 + }, + { // Entry 543 + -0x1.620185e5621414c6823c701f4e8d83f5p-4, + -0x1.62e42fefa39f0p-4 + }, + { // Entry 544 + 0x1.5f619980c4335caeff4cd46b3e239e77p-3, + 0x1.62e42fefa39eep-3 + }, + { // Entry 545 + -0x1.5f619980c4335caeff4cd46b3e239e77p-3, + -0x1.62e42fefa39eep-3 + }, + { // Entry 546 + 0x1.5f619980c4336c366c1acb38d4f1b2bdp-3, + 0x1.62e42fefa39efp-3 + }, + { // Entry 547 + -0x1.5f619980c4336c366c1acb38d4f1b2bdp-3, + -0x1.62e42fefa39efp-3 + }, + { // Entry 548 + 0x1.5f619980c4337bbdd8e8c2066bb51eb7p-3, + 0x1.62e42fefa39f0p-3 + }, + { // Entry 549 + -0x1.5f619980c4337bbdd8e8c2066bb51eb7p-3, + -0x1.62e42fefa39f0p-3 + }, + { // Entry 550 + 0x1.5555555555554423ee6b327ff8df04ddp-2, + 0x1.62e42fefa39eep-2 + }, + { // Entry 551 + -0x1.5555555555554423ee6b327ff8df04ddp-2, + -0x1.62e42fefa39eep-2 + }, + { // Entry 552 + 0x1.555555555555525cd1f96b638732caf9p-2, + 0x1.62e42fefa39efp-2 + }, + { // Entry 553 + -0x1.555555555555525cd1f96b638732caf9p-2, + -0x1.62e42fefa39efp-2 + }, + { // Entry 554 + 0x1.5555555555556095b587a4471560a40bp-2, + 0x1.62e42fefa39f0p-2 + }, + { // Entry 555 + -0x1.5555555555556095b587a4471560a40bp-2, + -0x1.62e42fefa39f0p-2 + }, + { // Entry 556 + 0x1.33333333333326d230c80fe142583755p-1, + 0x1.62e42fefa39eep-1 + }, + { // Entry 557 + -0x1.33333333333326d230c80fe142583755p-1, + -0x1.62e42fefa39eep-1 + }, + { // Entry 558 + 0x1.333333333333310fa16be6eb800e8ac1p-1, + 0x1.62e42fefa39efp-1 + }, + { // Entry 559 + -0x1.333333333333310fa16be6eb800e8ac1p-1, + -0x1.62e42fefa39efp-1 + }, + { // Entry 560 + 0x1.3333333333333b4d120fbdf5bd629059p-1, + 0x1.62e42fefa39f0p-1 + }, + { // Entry 561 + -0x1.3333333333333b4d120fbdf5bd629059p-1, + -0x1.62e42fefa39f0p-1 + }, + { // Entry 562 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39eep9 + }, + { // Entry 563 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39eep9 + }, + { // Entry 564 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39efp9 + }, + { // Entry 565 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39efp9 + }, + { // Entry 566 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39f0p9 + }, + { // Entry 567 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39f0p9 + }, + { // Entry 568 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39f0p9 + }, + { // Entry 569 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.72e42fefa39f0p9 + }, + { // Entry 570 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39efp9 + }, + { // Entry 571 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.72e42fefa39efp9 + }, + { // Entry 572 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.72e42fefa39eep9 + }, + { // Entry 573 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.72e42fefa39eep9 + }, + { // Entry 574 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.633ce8fb9f87cp9 + }, + { // Entry 575 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.633ce8fb9f87cp9 + }, + { // Entry 576 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.633ce8fb9f87dp9 + }, + { // Entry 577 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.633ce8fb9f87dp9 + }, + { // Entry 578 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.633ce8fb9f87ep9 + }, + { // Entry 579 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.633ce8fb9f87ep9 + }, + { // Entry 580 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39f0p9 + }, + { // Entry 581 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39f0p9 + }, + { // Entry 582 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39efp9 + }, + { // Entry 583 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39efp9 + }, + { // Entry 584 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42fefa39eep9 + }, + { // Entry 585 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42fefa39eep9 + }, + { // Entry 586 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp62 + }, + { // Entry 587 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp62 + }, + { // Entry 588 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p63 + }, + { // Entry 589 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p63 + }, + { // Entry 590 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0000000000001p63 + }, + { // Entry 591 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p63 + }, + { // Entry 592 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp26 + }, + { // Entry 593 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp26 + }, + { // Entry 594 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p27 + }, + { // Entry 595 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p27 + }, + { // Entry 596 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0000000000001p27 + }, + { // Entry 597 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p27 + }, + { // Entry 598 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp23 + }, + { // Entry 599 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp23 + }, + { // Entry 600 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0p24 + }, + { // Entry 601 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0p24 + }, + { // Entry 602 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0000000000001p24 + }, + { // Entry 603 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0000000000001p24 + }, + { // Entry 604 + 0x1.ffffffffffffffffffffffcd2c5719bcp-1, + 0x1.fffffffffffffp4 + }, + { // Entry 605 + -0x1.ffffffffffffffffffffffcd2c5719bcp-1, + -0x1.fffffffffffffp4 + }, + { // Entry 606 + 0x1.ffffffffffffffffffffffcd2c5719bcp-1, + 0x1.0p5 + }, + { // Entry 607 + -0x1.ffffffffffffffffffffffcd2c5719bcp-1, + -0x1.0p5 + }, + { // Entry 608 + 0x1.ffffffffffffffffffffffcd2c5719bcp-1, + 0x1.0000000000001p5 + }, + { // Entry 609 + -0x1.ffffffffffffffffffffffcd2c5719bcp-1, + -0x1.0000000000001p5 + }, + { // Entry 610 + 0x1.fffffffffff1bdcd844f4df082619d92p-1, + 0x1.fffffffffffffp3 + }, + { // Entry 611 + -0x1.fffffffffff1bdcd844f4df082619d92p-1, + -0x1.fffffffffffffp3 + }, + { // Entry 612 + 0x1.fffffffffff1bdcd844f4dfec4941943p-1, + 0x1.0p4 + }, + { // Entry 613 + -0x1.fffffffffff1bdcd844f4dfec4941943p-1, + -0x1.0p4 + }, + { // Entry 614 + 0x1.fffffffffff1bdcd844f4e1b48f910a4p-1, + 0x1.0000000000001p4 + }, + { // Entry 615 + -0x1.fffffffffff1bdcd844f4e1b48f910a4p-1, + -0x1.0000000000001p4 + }, + { // Entry 616 + 0x1.fffff872a91f8690ea47c1d1bd107d6ep-1, + 0x1.fffffffffffffp2 + }, + { // Entry 617 + -0x1.fffff872a91f8690ea47c1d1bd107d6ep-1, + -0x1.fffffffffffffp2 + }, + { // Entry 618 + 0x1.fffff872a91f8690ee0e6d3ad8aee46bp-1, + 0x1.0p3 + }, + { // Entry 619 + -0x1.fffff872a91f8690ee0e6d3ad8aee46bp-1, + -0x1.0p3 + }, + { // Entry 620 + 0x1.fffff872a91f8690f59bc40d0febacbdp-1, + 0x1.0000000000001p3 + }, + { // Entry 621 + -0x1.fffff872a91f8690f59bc40d0febacbdp-1, + -0x1.0000000000001p3 + }, + { // Entry 622 + 0x1.ffa81708a0b421525ec9970925cd4155p-1, + 0x1.fffffffffffffp1 + }, + { // Entry 623 + -0x1.ffa81708a0b421525ec9970925cd4155p-1, + -0x1.fffffffffffffp1 + }, + { // Entry 624 + 0x1.ffa81708a0b4216857246c19dc60acb8p-1, + 0x1.0p2 + }, + { // Entry 625 + -0x1.ffa81708a0b4216857246c19dc60acb8p-1, + -0x1.0p2 + }, + { // Entry 626 + 0x1.ffa81708a0b4219447da163b49770c0ep-1, + 0x1.0000000000001p2 + }, + { // Entry 627 + -0x1.ffa81708a0b4219447da163b49770c0ep-1, + -0x1.0000000000001p2 + }, + { // Entry 628 + 0x1.ed9505e1bc3d3af0feae367ddede350ep-1, + 0x1.fffffffffffffp0 + }, + { // Entry 629 + -0x1.ed9505e1bc3d3af0feae367ddede350ep-1, + -0x1.fffffffffffffp0 + }, + { // Entry 630 + 0x1.ed9505e1bc3d3d33c432fc3e8255c8b5p-1, + 0x1.0p1 + }, + { // Entry 631 + -0x1.ed9505e1bc3d3d33c432fc3e8255c8b5p-1, + -0x1.0p1 + }, + { // Entry 632 + 0x1.ed9505e1bc3d41b94f3c87bfc873b4a6p-1, + 0x1.0000000000001p1 + }, + { // Entry 633 + -0x1.ed9505e1bc3d41b94f3c87bfc873b4a6p-1, + -0x1.0000000000001p1 + }, + { // Entry 634 + 0x1.85efab514f393ea02c27fc50b2cbbe65p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 635 + -0x1.85efab514f393ea02c27fc50b2cbbe65p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 636 + 0x1.85efab514f394558632be293c4274fe6p-1, + 0x1.0p0 + }, + { // Entry 637 + -0x1.85efab514f394558632be293c4274fe6p-1, + -0x1.0p0 + }, + { // Entry 638 + 0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + 0x1.0000000000001p0 + }, + { // Entry 639 + -0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + -0x1.0000000000001p0 + }, + { // Entry 640 + 0x1.d9353d7568af29bbdeb6502490ea91f5p-2, + 0x1.fffffffffffffp-2 + }, + { // Entry 641 + -0x1.d9353d7568af29bbdeb6502490ea91f5p-2, + -0x1.fffffffffffffp-2 + }, + { // Entry 642 + 0x1.d9353d7568af365128ee21c65b08d3a7p-2, + 0x1.0p-1 + }, + { // Entry 643 + -0x1.d9353d7568af365128ee21c65b08d3a7p-2, + -0x1.0p-1 + }, + { // Entry 644 + 0x1.d9353d7568af4f7bbd5dc509eeb9c854p-2, + 0x1.0000000000001p-1 + }, + { // Entry 645 + -0x1.d9353d7568af4f7bbd5dc509eeb9c854p-2, + -0x1.0000000000001p-1 + }, + { // Entry 646 + 0x1.f597ea69a1c850090bd4877911ae9956p-3, + 0x1.fffffffffffffp-3 + }, + { // Entry 647 + -0x1.f597ea69a1c850090bd4877911ae9956p-3, + -0x1.fffffffffffffp-3 + }, + { // Entry 648 + 0x1.f597ea69a1c85f1358d71d84729c80c8p-3, + 0x1.0p-2 + }, + { // Entry 649 + -0x1.f597ea69a1c85f1358d71d84729c80c8p-3, + -0x1.0p-2 + }, + { // Entry 650 + 0x1.f597ea69a1c87d27f2dc499b344c1b8cp-3, + 0x1.0000000000001p-2 + }, + { // Entry 651 + -0x1.f597ea69a1c87d27f2dc499b344c1b8cp-3, + -0x1.0000000000001p-2 + }, + { // Entry 652 + 0x1.fd5992bc4b834000063fd671ecd5ebeep-4, + 0x1.fffffffffffffp-4 + }, + { // Entry 653 + -0x1.fd5992bc4b834000063fd671ecd5ebeep-4, + -0x1.fffffffffffffp-4 + }, + { // Entry 654 + 0x1.fd5992bc4b834fc0af6ac8eff7d81040p-4, + 0x1.0p-3 + }, + { // Entry 655 + -0x1.fd5992bc4b834fc0af6ac8eff7d81040p-4, + -0x1.0p-3 + }, + { // Entry 656 + 0x1.fd5992bc4b836f4201c0adec0dd0980dp-4, + 0x1.0000000000001p-3 + }, + { // Entry 657 + -0x1.fd5992bc4b836f4201c0adec0dd0980dp-4, + -0x1.0000000000001p-3 + }, + { // Entry 658 + 0x1.ff55997e030d60692ab487c7d22013f6p-5, + 0x1.fffffffffffffp-5 + }, + { // Entry 659 + -0x1.ff55997e030d60692ab487c7d22013f6p-5, + -0x1.fffffffffffffp-5 + }, + { // Entry 660 + 0x1.ff55997e030d705935592a366a8a66d4p-5, + 0x1.0p-4 + }, + { // Entry 661 + -0x1.ff55997e030d705935592a366a8a66d4p-5, + -0x1.0p-4 + }, + { // Entry 662 + 0x1.ff55997e030d90394aa26f139b5c108ep-5, + 0x1.0000000000001p-4 + }, + { // Entry 663 + -0x1.ff55997e030d90394aa26f139b5c108ep-5, + -0x1.0000000000001p-4 + }, + { // Entry 664 + 0x1.ffd559992b1dd287055184b7d46402dap-6, + 0x1.fffffffffffffp-6 + }, + { // Entry 665 + -0x1.ffd559992b1dd287055184b7d46402dap-6, + -0x1.fffffffffffffp-6 + }, + { // Entry 666 + 0x1.ffd559992b1de28305fc17382205392ep-6, + 0x1.0p-5 + }, + { // Entry 667 + -0x1.ffd559992b1de28305fc17382205392ep-6, + -0x1.0p-5 + }, + { // Entry 668 + 0x1.ffd559992b1e027b07513c38bd46e616p-6, + 0x1.0000000000001p-5 + }, + { // Entry 669 + -0x1.ffd559992b1e027b07513c38bd46e616p-6, + -0x1.0000000000001p-5 + }, + { // Entry 670 + 0x1.fff5559997df792b111dad0e4c36a1efp-7, + 0x1.fffffffffffffp-7 + }, + { // Entry 671 + -0x1.fff5559997df792b111dad0e4c36a1efp-7, + -0x1.fffffffffffffp-7 + }, + { // Entry 672 + 0x1.fff5559997df892a1128575843fc0d52p-7, + 0x1.0p-6 + }, + { // Entry 673 + -0x1.fff5559997df892a1128575843fc0d52p-7, + -0x1.0p-6 + }, + { // Entry 674 + 0x1.fff5559997dfa928113dabec3386b41bp-7, + 0x1.0000000000001p-6 + }, + { // Entry 675 + -0x1.fff5559997dfa928113dabec3386b41bp-7, + -0x1.0000000000001p-6 + }, + { // Entry 676 + 0x1.fffffff555554599999a97df7ded4005p-15, + 0x1.fffffffffffffp-15 + }, + { // Entry 677 + -0x1.fffffff555554599999a97df7ded4005p-15, + -0x1.fffffffffffffp-15 + }, + { // Entry 678 + 0x1.fffffff555555599999997df7df7eab0p-15, + 0x1.0p-14 + }, + { // Entry 679 + -0x1.fffffff555555599999997df7df7eab0p-15, + -0x1.0p-14 + }, + { // Entry 680 + 0x1.fffffff555557599999797df7e0d4005p-15, + 0x1.0000000000001p-14 + }, + { // Entry 681 + -0x1.fffffff555557599999797df7e0d4005p-15, + -0x1.0000000000001p-14 + }, + { // Entry 682 + 0x1.ffffffffffffeff55555555555565599p-31, + 0x1.fffffffffffffp-31 + }, + { // Entry 683 + -0x1.ffffffffffffeff55555555555565599p-31, + -0x1.fffffffffffffp-31 + }, + { // Entry 684 + 0x1.fffffffffffffff55555555555555599p-31, + 0x1.0p-30 + }, + { // Entry 685 + -0x1.fffffffffffffff55555555555555599p-31, + -0x1.0p-30 + }, + { // Entry 686 + 0x1.0000000000000ffaaaaaaaaaaaa9aaccp-30, + 0x1.0000000000001p-30 + }, + { // Entry 687 + -0x1.0000000000000ffaaaaaaaaaaaa9aaccp-30, + -0x1.0000000000001p-30 + }, + { // Entry 688 + 0x1.ffffffffffffeffffffffffffffd5555p-56, + 0x1.fffffffffffffp-56 + }, + { // Entry 689 + -0x1.ffffffffffffeffffffffffffffd5555p-56, + -0x1.fffffffffffffp-56 + }, + { // Entry 690 + 0x1.fffffffffffffffffffffffffffd5555p-56, + 0x1.0p-55 + }, + { // Entry 691 + -0x1.fffffffffffffffffffffffffffd5555p-56, + -0x1.0p-55 + }, + { // Entry 692 + 0x1.0000000000000ffffffffffffffeaaaap-55, + 0x1.0000000000001p-55 + }, + { // Entry 693 + -0x1.0000000000000ffffffffffffffeaaaap-55, + -0x1.0000000000001p-55 + }, + { // Entry 694 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 695 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp1023 + }, + { // Entry 696 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp1023 + }, + { // Entry 697 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 698 + 0x1.p0, + HUGE_VAL + }, + { // Entry 699 + -0x1.p0, + -HUGE_VAL + }, + { // Entry 700 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffffffffffp1023 + }, + { // Entry 701 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffffffffffp1023 + }, + { // Entry 702 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ffffffffffffep1023 + }, + { // Entry 703 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ffffffffffffep1023 + }, + { // Entry 704 + 0x1.fe175fa29280faada6e2c93ea708789ep-1, + 0x1.921fb54442d18p1 + }, + { // Entry 705 + -0x1.fe175fa29280faada6e2c93ea708789ep-1, + -0x1.921fb54442d18p1 + }, + { // Entry 706 + 0x1.d594fdae482b98a703d473d9a8cd44cdp-1, + 0x1.921fb54442d18p0 + }, + { // Entry 707 + -0x1.d594fdae482b98a703d473d9a8cd44cdp-1, + -0x1.921fb54442d18p0 + }, + { // Entry 708 + 0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + 0x1.0000000000001p0 + }, + { // Entry 709 + -0x1.85efab514f3952c8d133af19e5e8cdd6p-1, + -0x1.0000000000001p0 + }, + { // Entry 710 + 0x1.85efab514f394558632be293c4274fe6p-1, + 0x1.0p0 + }, + { // Entry 711 + -0x1.85efab514f394558632be293c4274fe6p-1, + -0x1.0p0 + }, + { // Entry 712 + 0x1.85efab514f393ea02c27fc50b2cbbe65p-1, + 0x1.fffffffffffffp-1 + }, + { // Entry 713 + -0x1.85efab514f393ea02c27fc50b2cbbe65p-1, + -0x1.fffffffffffffp-1 + }, + { // Entry 714 + 0x1.4fc441fa6d6d6195ca63f8eb92d312a4p-1, + 0x1.921fb54442d18p-1 + }, + { // Entry 715 + -0x1.4fc441fa6d6d6195ca63f8eb92d312a4p-1, + -0x1.921fb54442d18p-1 + }, + { // Entry 716 + 0x1.0000000000000fffffffffffffffffffp-1022, + 0x1.0000000000001p-1022 + }, + { // Entry 717 + -0x1.0000000000000fffffffffffffffffffp-1022, + -0x1.0000000000001p-1022 + }, + { // Entry 718 + 0x1.ffffffffffffffffffffffffffffffffp-1023, + 0x1.0p-1022 + }, + { // Entry 719 + -0x1.ffffffffffffffffffffffffffffffffp-1023, + -0x1.0p-1022 + }, + { // Entry 720 + 0x1.ffffffffffffdfffffffffffffffffffp-1023, + 0x1.ffffffffffffep-1023 + }, + { // Entry 721 + -0x1.ffffffffffffdfffffffffffffffffffp-1023, + -0x1.ffffffffffffep-1023 + }, + { // Entry 722 + 0x1.ffffffffffffbfffffffffffffffffffp-1023, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 723 + -0x1.ffffffffffffbfffffffffffffffffffp-1023, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 724 + 0x1.ffffffffffffffffffffffffffffffffp-1074, + 0x1.0p-1073 + }, + { // Entry 725 + -0x1.ffffffffffffffffffffffffffffffffp-1074, + -0x1.0p-1073 + }, + { // Entry 726 + 0.0, + 0x1.0p-1074 + }, + { // Entry 727 + -0.0, + -0x1.0p-1074 + }, + { // Entry 728 + 0.0, + 0.0 + }, + { // Entry 729 + -0.0, + -0.0 + } +}; diff --git a/tests/math_data/tanhf_intel_data.h b/tests/math_data/tanhf_intel_data.h new file mode 100644 index 000000000..be1cd9f80 --- /dev/null +++ b/tests/math_data/tanhf_intel_data.h @@ -0,0 +1,2274 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_tanhf_intel_data[] = { + { // Entry 0 + -0x1.ff5717ff015e292b197aa6a5bd8ead11p-5, + -0x1.0000c0p-4 + }, + { // Entry 1 + 0x1.ff5717ff015e292b197aa6a5bd8ead11p-5, + 0x1.0000c0p-4 + }, + { // Entry 2 + -0x1.fffffc0001871106009b5aaf55c49116p-1, + -0x1.0a2b2ap3 + }, + { // Entry 3 + 0x1.fffffc0001871106009b5aaf55c49116p-1, + 0x1.0a2b2ap3 + }, + { // Entry 4 + -0x1.f2c4e0c5399bd4c3248a88570584900dp-2, + -0x1.107fa4p-1 + }, + { // Entry 5 + 0x1.f2c4e0c5399bd4c3248a88570584900dp-2, + 0x1.107fa4p-1 + }, + { // Entry 6 + -0x1.968428ffd872ecb6c9fd8e70df8a8bfep-1, + -0x1.150498p0 + }, + { // Entry 7 + 0x1.968428ffd872ecb6c9fd8e70df8a8bfep-1, + 0x1.150498p0 + }, + { // Entry 8 + -0x1.fffffdfd7b7e46383ce8fadc5f8ea7eap-1, + -0x1.152e2ep3 + }, + { // Entry 9 + 0x1.fffffdfd7b7e46383ce8fadc5f8ea7eap-1, + 0x1.152e2ep3 + }, + { // Entry 10 + -0x1.189751ff578effbe5ec0f53fb816c705p-4, + -0x1.1908p-4 + }, + { // Entry 11 + 0x1.189751ff578effbe5ec0f53fb816c705p-4, + 0x1.1908p-4 + }, + { // Entry 12 + -0x1.fffffef20b998e5904f90043100cd5d3p-1, + -0x1.1f80p3 + }, + { // Entry 13 + 0x1.fffffef20b998e5904f90043100cd5d3p-1, + 0x1.1f80p3 + }, + { // Entry 14 + -0x1.fff9f601c71a50ea8042b6e535d99676p-1, + -0x1.55b54ep2 + }, + { // Entry 15 + 0x1.fff9f601c71a50ea8042b6e535d99676p-1, + 0x1.55b54ep2 + }, + { // Entry 16 + -0x1.35fec061664b9cf1b7b1484307f84259p-1, + -0x1.674804p-1 + }, + { // Entry 17 + 0x1.35fec061664b9cf1b7b1484307f84259p-1, + 0x1.674804p-1 + }, + { // Entry 18 + -0x1.8d9b1b0128196f89d9531df123a40ff4p-11, + -0x1.8d9b20p-11 + }, + { // Entry 19 + 0x1.8d9b1b0128196f89d9531df123a40ff4p-11, + 0x1.8d9b20p-11 + }, + { // Entry 20 + -0x1.e3b21701a09ce46bedfb3f6e4f5f9a30p-11, + -0x1.e3b220p-11 + }, + { // Entry 21 + 0x1.e3b21701a09ce46bedfb3f6e4f5f9a30p-11, + 0x1.e3b220p-11 + }, + { // Entry 22 + -0x1.fb070301e5b46bfdaf1d2a7bd9573b3cp-8, + -0x1.fb099ap-8 + }, + { // Entry 23 + 0x1.fb070301e5b46bfdaf1d2a7bd9573b3cp-8, + 0x1.fb099ap-8 + }, + { // Entry 24 + -0x1.ff85d977c45b8a463709fc31915c04bap-6, + -0x1.ffb06cp-6 + }, + { // Entry 25 + 0x1.ff85d977c45b8a463709fc31915c04bap-6, + 0x1.ffb06cp-6 + }, + { // Entry 26 + -0x1.ff5517ffac72f276baf86702efd7f0e4p-5, + -0x1.ffff7ep-5 + }, + { // Entry 27 + 0x1.ff5517ffac72f276baf86702efd7f0e4p-5, + 0x1.ffff7ep-5 + }, + { // Entry 28 + 0x1.85efacff5cf7afdba442be92190b551bp-1, + 0x1.000002p0 + }, + { // Entry 29 + -0x1.85efacff5cf7afdba442be92190b551bp-1, + -0x1.000002p0 + }, + { // Entry 30 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.000002p8 + }, + { // Entry 31 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.000002p8 + }, + { // Entry 32 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.000002p40 + }, + { // Entry 33 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.000002p40 + }, + { // Entry 34 + 0x1.ff5717ff015e292b197aa6a5bd8ead11p-5, + 0x1.0000c0p-4 + }, + { // Entry 35 + -0x1.ff5717ff015e292b197aa6a5bd8ead11p-5, + -0x1.0000c0p-4 + }, + { // Entry 36 + 0x1.ffd7b90143bb5d654465fbf6eb08db94p-6, + 0x1.000130p-5 + }, + { // Entry 37 + -0x1.ffd7b90143bb5d654465fbf6eb08db94p-6, + -0x1.000130p-5 + }, + { // Entry 38 + 0x1.ff5816ffa9aaf77b52ddf52d862ee085p-5, + 0x1.000140p-4 + }, + { // Entry 39 + -0x1.ff5816ffa9aaf77b52ddf52d862ee085p-5, + -0x1.000140p-4 + }, + { // Entry 40 + 0x1.fd5c86dbf1ef7c0b7c17b5a5fc9384bap-4, + 0x1.000180p-3 + }, + { // Entry 41 + -0x1.fd5c86dbf1ef7c0b7c17b5a5fc9384bap-4, + -0x1.000180p-3 + }, + { // Entry 42 + 0x1.fff8d56199d2d1496393498af57a65c5p-7, + 0x1.0001c0p-6 + }, + { // Entry 43 + -0x1.fff8d56199d2d1496393498af57a65c5p-7, + -0x1.0001c0p-6 + }, + { // Entry 44 + 0x1.ff5a1500f7488c88a28967ef3279598bp-5, + 0x1.000240p-4 + }, + { // Entry 45 + -0x1.ff5a1500f7488c88a28967ef3279598bp-5, + -0x1.000240p-4 + }, + { // Entry 46 + 0x1.ffdd57997869c223859da246115830a8p-6, + 0x1.0004p-5 + }, + { // Entry 47 + -0x1.ffdd57997869c223859da246115830a8p-6, + -0x1.0004p-5 + }, + { // Entry 48 + 0x1.0003ffffffeaa9aaa6aaa777a223777cp-21, + 0x1.0004p-21 + }, + { // Entry 49 + -0x1.0003ffffffeaa9aaa6aaa777a223777cp-21, + -0x1.0004p-21 + }, + { // Entry 50 + 0x1.fffed101db6291871ee5b1f184662c14p-7, + 0x1.0004bep-6 + }, + { // Entry 51 + -0x1.fffed101db6291871ee5b1f184662c14p-7, + -0x1.0004bep-6 + }, + { // Entry 52 + 0x1.ffa82cfe3d3102474919a811a60807b3p-1, + 0x1.0008p2 + }, + { // Entry 53 + -0x1.ffa82cfe3d3102474919a811a60807b3p-1, + -0x1.0008p2 + }, + { // Entry 54 + 0x1.00718b006b52c2ab11702de3389d77dep-5, + 0x1.0087p-5 + }, + { // Entry 55 + -0x1.00718b006b52c2ab11702de3389d77dep-5, + -0x1.0087p-5 + }, + { // Entry 56 + 0x1.ffaacb36b2dfa869b4fddee9c98dc067p-1, + 0x1.01p2 + }, + { // Entry 57 + -0x1.ffaacb36b2dfa869b4fddee9c98dc067p-1, + -0x1.01p2 + }, + { // Entry 58 + 0x1.fffff900052e44ea345da5965f4d110ep-1, + 0x1.0137p3 + }, + { // Entry 59 + -0x1.fffff900052e44ea345da5965f4d110ep-1, + -0x1.0137p3 + }, + { // Entry 60 + 0x1.fc32f80000dd7b300750a0078a9054c1p-3, + 0x1.03843ep-2 + }, + { // Entry 61 + -0x1.fc32f80000dd7b300750a0078a9054c1p-3, + -0x1.03843ep-2 + }, + { // Entry 62 + 0x1.fd19570002093df94b65683f9a00917fp-3, + 0x1.03ffp-2 + }, + { // Entry 63 + -0x1.fd19570002093df94b65683f9a00917fp-3, + -0x1.03ffp-2 + }, + { // Entry 64 + 0x1.fde5d8ffff80b927d4d76ae1dce6f59bp-3, + 0x1.046cp-2 + }, + { // Entry 65 + -0x1.fde5d8ffff80b927d4d76ae1dce6f59bp-3, + -0x1.046cp-2 + }, + { // Entry 66 + 0x1.feb06fff85b879ae19eb2bc5cf70e031p-3, + 0x1.04d8p-2 + }, + { // Entry 67 + -0x1.feb06fff85b879ae19eb2bc5cf70e031p-3, + -0x1.04d8p-2 + }, + { // Entry 68 + 0x1.e6c426ed700f503e6583df7694a4979bp-2, + 0x1.08b038p-1 + }, + { // Entry 69 + -0x1.e6c426ed700f503e6583df7694a4979bp-2, + -0x1.08b038p-1 + }, + { // Entry 70 + 0x1.fffffc0001871106009b5aaf55c49116p-1, + 0x1.0a2b2ap3 + }, + { // Entry 71 + -0x1.fffffc0001871106009b5aaf55c49116p-1, + -0x1.0a2b2ap3 + }, + { // Entry 72 + 0x1.ffc392f4ab8d534aa69f7c5166cf0366p-1, + 0x1.0cp2 + }, + { // Entry 73 + -0x1.ffc392f4ab8d534aa69f7c5166cf0366p-1, + -0x1.0cp2 + }, + { // Entry 74 + 0x1.0acd33000032a880878690d403afbcbep-3, + 0x1.0c5392p-3 + }, + { // Entry 75 + -0x1.0acd33000032a880878690d403afbcbep-3, + -0x1.0c5392p-3 + }, + { // Entry 76 + 0x1.fffffcfb1bf37b0f791d7a17eb6b0a15p-1, + 0x1.0eab7cp3 + }, + { // Entry 77 + -0x1.fffffcfb1bf37b0f791d7a17eb6b0a15p-1, + -0x1.0eab7cp3 + }, + { // Entry 78 + 0x1.fffffcfb1e37253dc76193d1e1aed817p-1, + 0x1.0eab88p3 + }, + { // Entry 79 + -0x1.fffffcfb1e37253dc76193d1e1aed817p-1, + -0x1.0eab88p3 + }, + { // Entry 80 + 0x1.fffffcfb3902021b406b1ea187844f4bp-1, + 0x1.0eac16p3 + }, + { // Entry 81 + -0x1.fffffcfb3902021b406b1ea187844f4bp-1, + -0x1.0eac16p3 + }, + { // Entry 82 + 0x1.f5443f00c7ad11ba27b4800bc8cff692p-2, + 0x1.12236ap-1 + }, + { // Entry 83 + -0x1.f5443f00c7ad11ba27b4800bc8cff692p-2, + -0x1.12236ap-1 + }, + { // Entry 84 + 0x1.0db18affff41c0dc320851eef3614bffp-2, + 0x1.1433d2p-2 + }, + { // Entry 85 + -0x1.0db18affff41c0dc320851eef3614bffp-2, + -0x1.1433d2p-2 + }, + { // Entry 86 + 0x1.fffffdfdabb86f8672c461c08d04046fp-1, + 0x1.152faep3 + }, + { // Entry 87 + -0x1.fffffdfdabb86f8672c461c08d04046fp-1, + -0x1.152faep3 + }, + { // Entry 88 + 0x1.fa265d240155e5013f12a3b41500189ep-2, + 0x1.155cp-1 + }, + { // Entry 89 + -0x1.fa265d240155e5013f12a3b41500189ep-2, + -0x1.155cp-1 + }, + { // Entry 90 + 0x1.fc9a1a5f9c32905aaf97cba3f8aafaf0p-2, + 0x1.16fcp-1 + }, + { // Entry 91 + -0x1.fc9a1a5f9c32905aaf97cba3f8aafaf0p-2, + -0x1.16fcp-1 + }, + { // Entry 92 + 0x1.155868ffff4152df457a24ad6f413bdfp-3, + 0x1.170f48p-3 + }, + { // Entry 93 + -0x1.155868ffff4152df457a24ad6f413bdfp-3, + -0x1.170f48p-3 + }, + { // Entry 94 + 0x1.177d0f00f641d1e96c79c7abd75269b1p-6, + 0x1.1784p-6 + }, + { // Entry 95 + -0x1.177d0f00f641d1e96c79c7abd75269b1p-6, + -0x1.1784p-6 + }, + { // Entry 96 + 0x1.189751ff578effbe5ec0f53fb816c705p-4, + 0x1.1908p-4 + }, + { // Entry 97 + -0x1.189751ff578effbe5ec0f53fb816c705p-4, + -0x1.1908p-4 + }, + { // Entry 98 + 0x1.1dce250138c3f920efea001b064975a3p-7, + 0x1.1dd0p-7 + }, + { // Entry 99 + -0x1.1dce250138c3f920efea001b064975a3p-7, + -0x1.1dd0p-7 + }, + { // Entry 100 + 0x1.1dda24c562621a0640fe0b86641cd64bp-7, + 0x1.1ddcp-7 + }, + { // Entry 101 + -0x1.1dda24c562621a0640fe0b86641cd64bp-7, + -0x1.1ddcp-7 + }, + { // Entry 102 + 0x1.1fa86e8f695d32c4d8d874744814444dp-6, + 0x1.1fb0p-6 + }, + { // Entry 103 + -0x1.1fa86e8f695d32c4d8d874744814444dp-6, + -0x1.1fb0p-6 + }, + { // Entry 104 + 0x1.a01401001045019528db07ebeec35ef9p-1, + 0x1.2281aap0 + }, + { // Entry 105 + -0x1.a01401001045019528db07ebeec35ef9p-1, + -0x1.2281aap0 + }, + { // Entry 106 + 0x1.aeea270075d91da2ac1928b5d795a866p-1, + 0x1.3a0b6cp0 + }, + { // Entry 107 + -0x1.aeea270075d91da2ac1928b5d795a866p-1, + -0x1.3a0b6cp0 + }, + { // Entry 108 + 0x1.58840500489a56042910d82b4425107cp-10, + 0x1.588412p-10 + }, + { // Entry 109 + -0x1.58840500489a56042910d82b4425107cp-10, + -0x1.588412p-10 + }, + { // Entry 110 + 0x1.fffc48bea6ea7bca9e3cc76637bfbfcep-1, + 0x1.653fbcp2 + }, + { // Entry 111 + -0x1.fffc48bea6ea7bca9e3cc76637bfbfcep-1, + -0x1.653fbcp2 + }, + { // Entry 112 + 0x1.fffc48d5dfe4c3c0ebf5fc4e969507bap-1, + 0x1.654084p2 + }, + { // Entry 113 + -0x1.fffc48d5dfe4c3c0ebf5fc4e969507bap-1, + -0x1.654084p2 + }, + { // Entry 114 + 0x1.fffc5933b716ebf93b846ed2d0629240p-1, + 0x1.65ceb4p2 + }, + { // Entry 115 + -0x1.fffc5933b716ebf93b846ed2d0629240p-1, + -0x1.65ceb4p2 + }, + { // Entry 116 + 0x1.6cc3070142cab25a8a3556c9810da1e8p-5, + 0x1.6d00d0p-5 + }, + { // Entry 117 + -0x1.6cc3070142cab25a8a3556c9810da1e8p-5, + -0x1.6d00d0p-5 + }, + { // Entry 118 + 0x1.6cc309003eed18aedf499413fadb462fp-5, + 0x1.6d00d2p-5 + }, + { // Entry 119 + -0x1.6cc309003eed18aedf499413fadb462fp-5, + -0x1.6d00d2p-5 + }, + { // Entry 120 + 0x1.fd3f72ffe427753610423980d1d05fedp-1, + 0x1.7aa642p1 + }, + { // Entry 121 + -0x1.fd3f72ffe427753610423980d1d05fedp-1, + -0x1.7aa642p1 + }, + { // Entry 122 + 0x1.7c2f60ffff4224b41b98aa2e87d40e93p-3, + 0x1.80a516p-3 + }, + { // Entry 123 + -0x1.7c2f60ffff4224b41b98aa2e87d40e93p-3, + -0x1.80a516p-3 + }, + { // Entry 124 + 0x1.fffec68f7d9cae8cb2022d2f6e1cb483p-1, + 0x1.88c660p2 + }, + { // Entry 125 + -0x1.fffec68f7d9cae8cb2022d2f6e1cb483p-1, + -0x1.88c660p2 + }, + { // Entry 126 + 0x1.8959449ca3adfa7d322370460455a902p-9, + 0x1.895992p-9 + }, + { // Entry 127 + -0x1.8959449ca3adfa7d322370460455a902p-9, + -0x1.895992p-9 + }, + { // Entry 128 + 0x1.fffecc86683d8ef8a1fb2cafaea1545fp-1, + 0x1.8963c4p2 + }, + { // Entry 129 + -0x1.fffecc86683d8ef8a1fb2cafaea1545fp-1, + -0x1.8963c4p2 + }, + { // Entry 130 + 0x1.79b6110000baefbe3999a6dff4c4acdbp-2, + 0x1.8c6448p-2 + }, + { // Entry 131 + -0x1.79b6110000baefbe3999a6dff4c4acdbp-2, + -0x1.8c6448p-2 + }, + { // Entry 132 + 0x1.9556a2f5d933a6a7c7cf78568bb7249ap-7, + 0x1.955beep-7 + }, + { // Entry 133 + -0x1.9556a2f5d933a6a7c7cf78568bb7249ap-7, + -0x1.955beep-7 + }, + { // Entry 134 + 0x1.a6460901ad2d3a62ccc87319783ddde8p-8, + 0x1.a64788p-8 + }, + { // Entry 135 + -0x1.a6460901ad2d3a62ccc87319783ddde8p-8, + -0x1.a64788p-8 + }, + { // Entry 136 + 0x1.62faf5001c03bf4b64fe9125b3ecbd72p-1, + 0x1.b569c2p-1 + }, + { // Entry 137 + -0x1.62faf5001c03bf4b64fe9125b3ecbd72p-1, + -0x1.b569c2p-1 + }, + { // Entry 138 + 0x1.ffffb2f40c1a3456b2931f183789727dp-1, + 0x1.b5ad60p2 + }, + { // Entry 139 + -0x1.ffffb2f40c1a3456b2931f183789727dp-1, + -0x1.b5ad60p2 + }, + { // Entry 140 + 0x1.b855a8c8313c4cd13e0f00b884857ca3p-7, + 0x1.b85c72p-7 + }, + { // Entry 141 + -0x1.b855a8c8313c4cd13e0f00b884857ca3p-7, + -0x1.b85c72p-7 + }, + { // Entry 142 + 0x1.af0793000035655bbe779d897c9f5d4ep-2, + 0x1.cb9714p-2 + }, + { // Entry 143 + -0x1.af0793000035655bbe779d897c9f5d4ep-2, + -0x1.cb9714p-2 + }, + { // Entry 144 + 0x1.cf812104022313677123e2625c6cb00bp-5, + 0x1.cffffep-5 + }, + { // Entry 145 + -0x1.cf812104022313677123e2625c6cb00bp-5, + -0x1.cffffep-5 + }, + { // Entry 146 + 0x1.d5132b00e44b3c951c3d25000110a656p-4, + 0x1.d7244cp-4 + }, + { // Entry 147 + -0x1.d5132b00e44b3c951c3d25000110a656p-4, + -0x1.d7244cp-4 + }, + { // Entry 148 + 0x1.bc797cffffff6db7359d1c595930bc63p-2, + 0x1.dc0accp-2 + }, + { // Entry 149 + -0x1.bc797cffffff6db7359d1c595930bc63p-2, + -0x1.dc0accp-2 + }, + { // Entry 150 + 0x1.dd556501c8476b8826b0d4995a3e0054p-7, + 0x1.dd5e0ap-7 + }, + { // Entry 151 + -0x1.dd556501c8476b8826b0d4995a3e0054p-7, + -0x1.dd5e0ap-7 + }, + { // Entry 152 + 0x1.dfe86501ca363c2f1da356d0632fe6c8p-7, + 0x1.dff12ep-7 + }, + { // Entry 153 + -0x1.dfe86501ca363c2f1da356d0632fe6c8p-7, + -0x1.dff12ep-7 + }, + { // Entry 154 + 0x1.d9d7000000930fc88ef47c6e1ada9a2ep-3, + 0x1.e293c6p-3 + }, + { // Entry 155 + -0x1.d9d7000000930fc88ef47c6e1ada9a2ep-3, + -0x1.e293c6p-3 + }, + { // Entry 156 + 0x1.e3871b0406361c77ff3262df09e8c737p-11, + 0x1.e38724p-11 + }, + { // Entry 157 + -0x1.e3871b0406361c77ff3262df09e8c737p-11, + -0x1.e38724p-11 + }, + { // Entry 158 + 0x1.e7f6c1d323d9985457500cf721006947p-7, + 0x1.e7fffep-7 + }, + { // Entry 159 + -0x1.e7f6c1d323d9985457500cf721006947p-7, + -0x1.e7fffep-7 + }, + { // Entry 160 + 0x1.7c54ecfffa1859038ca17969c97fe5dep-1, + 0x1.e9de92p-1 + }, + { // Entry 161 + -0x1.7c54ecfffa1859038ca17969c97fe5dep-1, + -0x1.e9de92p-1 + }, + { // Entry 162 + 0x1.f34e86fff858026738196409a11a9d77p-4, + 0x1.f5cd60p-4 + }, + { // Entry 163 + -0x1.f34e86fff858026738196409a11a9d77p-4, + -0x1.f5cd60p-4 + }, + { // Entry 164 + 0x1.f650cd01dd1dd3b74d4170b58162d604p-7, + 0x1.f65ae0p-7 + }, + { // Entry 165 + -0x1.f650cd01dd1dd3b74d4170b58162d604p-7, + -0x1.f65ae0p-7 + }, + { // Entry 166 + 0x1.f7f5d19736651657bb4a908bb6ce6f3cp-7, + 0x1.f7fffep-7 + }, + { // Entry 167 + -0x1.f7f5d19736651657bb4a908bb6ce6f3cp-7, + -0x1.f7fffep-7 + }, + { // Entry 168 + 0x1.f936b301e75e5596ad5b43deb4061c2cp-10, + 0x1.f936dcp-10 + }, + { // Entry 169 + -0x1.f936b301e75e5596ad5b43deb4061c2cp-10, + -0x1.f936dcp-10 + }, + { // Entry 170 + 0x1.fb5c247b97361255c41f765d4cbab28ep-10, + 0x1.fb5c4ep-10 + }, + { // Entry 171 + -0x1.fb5c247b97361255c41f765d4cbab28ep-10, + -0x1.fb5c4ep-10 + }, + { // Entry 172 + 0x1.fb60ee7a6a3af79f5ce57fd612d65a22p-10, + 0x1.fb6118p-10 + }, + { // Entry 173 + -0x1.fb60ee7a6a3af79f5ce57fd612d65a22p-10, + -0x1.fb6118p-10 + }, + { // Entry 174 + 0x1.fb61507a522ba9573e82098c0792ba25p-10, + 0x1.fb617ap-10 + }, + { // Entry 175 + -0x1.fb61507a522ba9573e82098c0792ba25p-10, + -0x1.fb617ap-10 + }, + { // Entry 176 + 0x1.fb896701df3450ee4bc970f28fb75445p-8, + 0x1.fb8cp-8 + }, + { // Entry 177 + -0x1.fb896701df3450ee4bc970f28fb75445p-8, + -0x1.fb8cp-8 + }, + { // Entry 178 + 0x1.fc3c1bffffc9f2bffbd43471548806fcp-4, + 0x1.fede10p-4 + }, + { // Entry 179 + -0x1.fc3c1bffffc9f2bffbd43471548806fcp-4, + -0x1.fede10p-4 + }, + { // Entry 180 + 0x1.fed5976f11593f5d7e4b3836da802317p-6, + 0x1.fefffep-6 + }, + { // Entry 181 + -0x1.fed5976f11593f5d7e4b3836da802317p-6, + -0x1.fefffep-6 + }, + { // Entry 182 + 0x1.ff1d56d81077af007425dda32d1f0031p-8, + 0x1.ff1ffep-8 + }, + { // Entry 183 + -0x1.ff1d56d81077af007425dda32d1f0031p-8, + -0x1.ff1ffep-8 + }, + { // Entry 184 + 0x1.fff1d3d1b5268bffb0a21ac78411370bp-7, + 0x1.fffc7ep-7 + }, + { // Entry 185 + -0x1.fff1d3d1b5268bffb0a21ac78411370bp-7, + -0x1.fffc7ep-7 + }, + { // Entry 186 + 0x1.fd580cdbebec6f60e3365d17ed60414ap-4, + 0x1.fffe74p-4 + }, + { // Entry 187 + -0x1.fd580cdbebec6f60e3365d17ed60414ap-4, + -0x1.fffe74p-4 + }, + { // Entry 188 + 0x1.f596b7f7b4c13c155c3efd93f5dfe6d2p-3, + 0x1.fffebap-3 + }, + { // Entry 189 + -0x1.f596b7f7b4c13c155c3efd93f5dfe6d2p-3, + -0x1.fffebap-3 + }, + { // Entry 190 + 0x1.f597340cb7cde9ab8349aed17bf234d0p-3, + 0x1.ffff3ep-3 + }, + { // Entry 191 + -0x1.f597340cb7cde9ab8349aed17bf234d0p-3, + -0x1.ffff3ep-3 + }, + { // Entry 192 + 0x1.ff5517ffac72f276baf86702efd7f0e4p-5, + 0x1.ffff7ep-5 + }, + { // Entry 193 + -0x1.ff5517ffac72f276baf86702efd7f0e4p-5, + -0x1.ffff7ep-5 + }, + { // Entry 194 + 0x1.85ef82ffff600101847e4b0f9e445356p-1, + 0x1.ffffa0p-1 + }, + { // Entry 195 + -0x1.85ef82ffff600101847e4b0f9e445356p-1, + -0x1.ffffa0p-1 + }, + { // Entry 196 + 0x1.d9352125813bde3aa9ea505b2809fca3p-2, + 0x1.ffffdcp-2 + }, + { // Entry 197 + -0x1.d9352125813bde3aa9ea505b2809fca3p-2, + -0x1.ffffdcp-2 + }, + { // Entry 198 + 0x1.ffa817006391aeb5707dac7212cf73d5p-1, + 0x1.fffffap1 + }, + { // Entry 199 + -0x1.ffa817006391aeb5707dac7212cf73d5p-1, + -0x1.fffffap1 + }, + { // Entry 200 + 0x1.a86c170000be8e7f4d04a063da24860ep-3, + 0x1.aea8e2p-3 + }, + { // Entry 201 + -0x1.a86c170000be8e7f4d04a063da24860ep-3, + -0x1.aea8e2p-3 + }, + { // Entry 202 + 0.0, + 0.0 + }, + { // Entry 203 + 0x1.1a5eefe0da6da46ea6f171425810e4dfp-5, + 0x1.1a7b96p-5 + }, + { // Entry 204 + -0x1.1a5eefe0da6da46ea6f171425810e4dfp-5, + -0x1.1a7b96p-5 + }, + { // Entry 205 + 0x1.1a09274ac6f7b6d4b727690be74eb0ddp-4, + 0x1.1a7b96p-4 + }, + { // Entry 206 + -0x1.1a09274ac6f7b6d4b727690be74eb0ddp-4, + -0x1.1a7b96p-4 + }, + { // Entry 207 + 0x1.a6381479e10e322568c693ec4f279989p-4, + 0x1.a7b960p-4 + }, + { // Entry 208 + -0x1.a6381479e10e322568c693ec4f279989p-4, + -0x1.a7b960p-4 + }, + { // Entry 209 + 0x1.18b472d6fbe7dee4499ec16056fea055p-3, + 0x1.1a7b96p-3 + }, + { // Entry 210 + -0x1.18b472d6fbe7dee4499ec16056fea055p-3, + -0x1.1a7b96p-3 + }, + { // Entry 211 + 0x1.5da54dc77f05440705ed9d5be3f9e9d8p-3, + 0x1.611a7cp-3 + }, + { // Entry 212 + -0x1.5da54dc77f05440705ed9d5be3f9e9d8p-3, + -0x1.611a7cp-3 + }, + { // Entry 213 + 0x1.a1c7a7ee254eb0b79612d120102ce9cdp-3, + 0x1.a7b962p-3 + }, + { // Entry 214 + -0x1.a1c7a7ee254eb0b79612d120102ce9cdp-3, + -0x1.a7b962p-3 + }, + { // Entry 215 + 0x1.e4f66de638560e22d3726a77da8f160fp-3, + 0x1.ee5848p-3 + }, + { // Entry 216 + -0x1.e4f66de638560e22d3726a77da8f160fp-3, + -0x1.ee5848p-3 + }, + { // Entry 217 + 0x1.13875aa36e2d8920626dbd412fff0a19p-2, + 0x1.1a7b96p-2 + }, + { // Entry 218 + -0x1.13875aa36e2d8920626dbd412fff0a19p-2, + -0x1.1a7b96p-2 + }, + { // Entry 219 + 0x1.33f8019585f3cc502e91eecf50e70e1ep-2, + 0x1.3dcb08p-2 + }, + { // Entry 220 + -0x1.33f8019585f3cc502e91eecf50e70e1ep-2, + -0x1.3dcb08p-2 + }, + { // Entry 221 + 0x1.53be3e2cd98b021967b9bd31e58b5176p-2, + 0x1.611a7ap-2 + }, + { // Entry 222 + -0x1.53be3e2cd98b021967b9bd31e58b5176p-2, + -0x1.611a7ap-2 + }, + { // Entry 223 + 0x1.72cc88c146572445dafcbe755d41bcabp-2, + 0x1.8469ecp-2 + }, + { // Entry 224 + -0x1.72cc88c146572445dafcbe755d41bcabp-2, + -0x1.8469ecp-2 + }, + { // Entry 225 + 0x1.9116ceec77a9f298abf6b13437746b97p-2, + 0x1.a7b95ep-2 + }, + { // Entry 226 + -0x1.9116ceec77a9f298abf6b13437746b97p-2, + -0x1.a7b95ep-2 + }, + { // Entry 227 + 0x1.ae927d0b74198b988ccf700a98369717p-2, + 0x1.cb08d0p-2 + }, + { // Entry 228 + -0x1.ae927d0b74198b988ccf700a98369717p-2, + -0x1.cb08d0p-2 + }, + { // Entry 229 + 0x1.cb3682279dc978565aefc3dbd264dc6bp-2, + 0x1.ee5842p-2 + }, + { // Entry 230 + -0x1.cb3682279dc978565aefc3dbd264dc6bp-2, + -0x1.ee5842p-2 + }, + { // Entry 231 + 0x1.e6fb4e9962e192a0d5bde52d580d91p-2, + 0x1.08d3dap-1 + }, + { // Entry 232 + -0x1.e6fb4e9962e192a0d5bde52d580d91p-2, + -0x1.08d3dap-1 + }, + { // Entry 233 + 0x1.00ed67a7ca644147f7f84f1f3f68eb4ep-1, + 0x1.1a7b94p-1 + }, + { // Entry 234 + -0x1.00ed67a7ca644147f7f84f1f3f68eb4ep-1, + -0x1.1a7b94p-1 + }, + { // Entry 235 + 0x1.0de82f529333a223ff587747d148653cp-1, + 0x1.2c234ep-1 + }, + { // Entry 236 + -0x1.0de82f529333a223ff587747d148653cp-1, + -0x1.2c234ep-1 + }, + { // Entry 237 + 0x1.1a6c5d5a29120e952b1038e517a86a7ap-1, + 0x1.3dcb08p-1 + }, + { // Entry 238 + -0x1.1a6c5d5a29120e952b1038e517a86a7ap-1, + -0x1.3dcb08p-1 + }, + { // Entry 239 + 0x1.2678f914054d8f29392b6e43daa2fe82p-1, + 0x1.4f72c2p-1 + }, + { // Entry 240 + -0x1.2678f914054d8f29392b6e43daa2fe82p-1, + -0x1.4f72c2p-1 + }, + { // Entry 241 + 0x1.320da804a66b5aea0e2572fe3978eac8p-1, + 0x1.611a7cp-1 + }, + { // Entry 242 + -0x1.320da804a66b5aea0e2572fe3978eac8p-1, + -0x1.611a7cp-1 + }, + { // Entry 243 + 0x1.3d2aa2c374c14e0b68b69e1f2aad8daep-1, + 0x1.72c236p-1 + }, + { // Entry 244 + -0x1.3d2aa2c374c14e0b68b69e1f2aad8daep-1, + -0x1.72c236p-1 + }, + { // Entry 245 + 0x1.47d0a924d14e34db0ec4761b0df7646dp-1, + 0x1.8469f0p-1 + }, + { // Entry 246 + -0x1.47d0a924d14e34db0ec4761b0df7646dp-1, + -0x1.8469f0p-1 + }, + { // Entry 247 + 0x1.5200f5eeb74275fa79657708d5b078b6p-1, + 0x1.9611aap-1 + }, + { // Entry 248 + -0x1.5200f5eeb74275fa79657708d5b078b6p-1, + -0x1.9611aap-1 + }, + { // Entry 249 + 0x1.5bbd32569013f13f86d8a0f1ef604c1dp-1, + 0x1.a7b964p-1 + }, + { // Entry 250 + -0x1.5bbd32569013f13f86d8a0f1ef604c1dp-1, + -0x1.a7b964p-1 + }, + { // Entry 251 + 0x1.650769803034e7d79ffaa44b0cc39437p-1, + 0x1.b9611ep-1 + }, + { // Entry 252 + -0x1.650769803034e7d79ffaa44b0cc39437p-1, + -0x1.b9611ep-1 + }, + { // Entry 253 + 0x1.6de1fc2ec1c6722f9de045bb1a94b919p-1, + 0x1.cb08d8p-1 + }, + { // Entry 254 + -0x1.6de1fc2ec1c6722f9de045bb1a94b919p-1, + -0x1.cb08d8p-1 + }, + { // Entry 255 + 0x1.764f94d0fb2866129f770f308fa0ba85p-1, + 0x1.dcb092p-1 + }, + { // Entry 256 + -0x1.764f94d0fb2866129f770f308fa0ba85p-1, + -0x1.dcb092p-1 + }, + { // Entry 257 + 0x1.7e531c0aa594c275df30c5b8451bba53p-1, + 0x1.ee584cp-1 + }, + { // Entry 258 + -0x1.7e531c0aa594c275df30c5b8451bba53p-1, + -0x1.ee584cp-1 + }, + { // Entry 259 + 0x1.85efab514f394558632be293c4274fe6p-1, + 0x1.p0 + }, + { // Entry 260 + -0x1.85efab514f394558632be293c4274fe6p-1, + -0x1.p0 + }, + { // Entry 261 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p100 + }, + { // Entry 262 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p100 + }, + { // Entry 263 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.0d7944p100 + }, + { // Entry 264 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.0d7944p100 + }, + { // Entry 265 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.1af288p100 + }, + { // Entry 266 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.1af288p100 + }, + { // Entry 267 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.286bccp100 + }, + { // Entry 268 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.286bccp100 + }, + { // Entry 269 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.35e510p100 + }, + { // Entry 270 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.35e510p100 + }, + { // Entry 271 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.435e54p100 + }, + { // Entry 272 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.435e54p100 + }, + { // Entry 273 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.50d798p100 + }, + { // Entry 274 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.50d798p100 + }, + { // Entry 275 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.5e50dcp100 + }, + { // Entry 276 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.5e50dcp100 + }, + { // Entry 277 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.6bca20p100 + }, + { // Entry 278 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.6bca20p100 + }, + { // Entry 279 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.794364p100 + }, + { // Entry 280 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.794364p100 + }, + { // Entry 281 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.86bca8p100 + }, + { // Entry 282 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.86bca8p100 + }, + { // Entry 283 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9435ecp100 + }, + { // Entry 284 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9435ecp100 + }, + { // Entry 285 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.a1af30p100 + }, + { // Entry 286 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.a1af30p100 + }, + { // Entry 287 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.af2874p100 + }, + { // Entry 288 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.af2874p100 + }, + { // Entry 289 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.bca1b8p100 + }, + { // Entry 290 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.bca1b8p100 + }, + { // Entry 291 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.ca1afcp100 + }, + { // Entry 292 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.ca1afcp100 + }, + { // Entry 293 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.d79440p100 + }, + { // Entry 294 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.d79440p100 + }, + { // Entry 295 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.e50d84p100 + }, + { // Entry 296 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.e50d84p100 + }, + { // Entry 297 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.f286c8p100 + }, + { // Entry 298 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.f286c8p100 + }, + { // Entry 299 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p101 + }, + { // Entry 300 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p101 + }, + { // Entry 301 + -0.0f, + -0x1.p-149 + }, + { // Entry 302 + 0.0f, + 0x1.p-149 + }, + { // Entry 303 + 0.0, + 0.0 + }, + { // Entry 304 + 0.0f, + 0x1.p-149 + }, + { // Entry 305 + -0.0f, + -0x1.p-149 + }, + { // Entry 306 + 0x1.d9353be2bf67df131f7df0e337af4ca9p-2, + 0x1.fffffep-2 + }, + { // Entry 307 + -0x1.d9353be2bf67df131f7df0e337af4ca9p-2, + -0x1.fffffep-2 + }, + { // Entry 308 + 0x1.d9353d7568af365128ee21c65b08d3a7p-2, + 0x1.p-1 + }, + { // Entry 309 + -0x1.d9353d7568af365128ee21c65b08d3a7p-2, + -0x1.p-1 + }, + { // Entry 310 + 0x1.d935409abb3bb6925a21ec1ab4945211p-2, + 0x1.000002p-1 + }, + { // Entry 311 + -0x1.d935409abb3bb6925a21ec1ab4945211p-2, + -0x1.000002p-1 + }, + { // Entry 312 + 0x1.fffffa7fc7b1f6bc2e2cdde1540f0470p-2, + 0x1.193ea4p-1 + }, + { // Entry 313 + -0x1.fffffa7fc7b1f6bc2e2cdde1540f0470p-2, + -0x1.193ea4p-1 + }, + { // Entry 314 + 0x1.fffffd7fc7b5f6f475c594f45adc9be5p-2, + 0x1.193ea6p-1 + }, + { // Entry 315 + -0x1.fffffd7fc7b5f6f475c594f45adc9be5p-2, + -0x1.193ea6p-1 + }, + { // Entry 316 + 0x1.0000003fe3db7b965f4f34192b818b64p-1, + 0x1.193ea8p-1 + }, + { // Entry 317 + -0x1.0000003fe3db7b965f4f34192b818b64p-1, + -0x1.193ea8p-1 + }, + { // Entry 318 + 0x1.fffffffffffffffa422e1905e1f508eep-1, + 0x1.5ffffep4 + }, + { // Entry 319 + -0x1.fffffffffffffffa422e1905e1f508eep-1, + -0x1.5ffffep4 + }, + { // Entry 320 + 0x1.fffffffffffffffa422f887a2dc5050cp-1, + 0x1.60p4 + }, + { // Entry 321 + -0x1.fffffffffffffffa422f887a2dc5050cp-1, + -0x1.60p4 + }, + { // Entry 322 + 0x1.fffffffffffffffa4230f7ee1db7f9b3p-1, + 0x1.600002p4 + }, + { // Entry 323 + -0x1.fffffffffffffffa4230f7ee1db7f9b3p-1, + -0x1.600002p4 + }, + { // Entry 324 + -0x1.3333333dabc33b19ad2c008a3f7d4144p-1, + -0x1.62e430p-1 + }, + { // Entry 325 + 0x1.3333333dabc33b19ad2c008a3f7d4144p-1, + 0x1.62e430p-1 + }, + { // Entry 326 + -0x1.333331f5fdae082d6c69302af70f1ab2p-1, + -0x1.62e42ep-1 + }, + { // Entry 327 + 0x1.333331f5fdae082d6c69302af70f1ab2p-1, + 0x1.62e42ep-1 + }, + { // Entry 328 + -0x1.333330ae4f974c09dfacf6fd31a6a22ap-1, + -0x1.62e42cp-1 + }, + { // Entry 329 + 0x1.333330ae4f974c09dfacf6fd31a6a22ap-1, + 0x1.62e42cp-1 + }, + { // Entry 330 + -0x1.55555563e05644101a754f1b989bf5e0p-2, + -0x1.62e430p-2 + }, + { // Entry 331 + 0x1.55555563e05644101a754f1b989bf5e0p-2, + 0x1.62e430p-2 + }, + { // Entry 332 + -0x1.5555539cc3e435f2961e38240bc73aa4p-2, + -0x1.62e42ep-2 + }, + { // Entry 333 + 0x1.5555539cc3e435f2961e38240bc73aa4p-2, + 0x1.62e42ep-2 + }, + { // Entry 334 + -0x1.555551d5a7719020ec6cf2d7658d0ac8p-2, + -0x1.62e42cp-2 + }, + { // Entry 335 + 0x1.555551d5a7719020ec6cf2d7658d0ac8p-2, + 0x1.62e42cp-2 + }, + { // Entry 336 + -0x1.5f619990a5492052ffe57497a9abd298p-3, + -0x1.62e430p-3 + }, + { // Entry 337 + 0x1.5f619990a5492052ffe57497a9abd298p-3, + 0x1.62e430p-3 + }, + { // Entry 338 + -0x1.5f61979fb7af4d856def98ede8520596p-3, + -0x1.62e42ep-3 + }, + { // Entry 339 + 0x1.5f61979fb7af4d856def98ede8520596p-3, + 0x1.62e42ep-3 + }, + { // Entry 340 + -0x1.5f6195aeca155016a893d14088fd4ba5p-3, + -0x1.62e42cp-3 + }, + { // Entry 341 + 0x1.5f6195aeca155016a893d14088fd4ba5p-3, + 0x1.62e42cp-3 + }, + { // Entry 342 + -0x1.620185f59f2beaefe5f1ff532c6185e9p-4, + -0x1.62e430p-4 + }, + { // Entry 343 + 0x1.620185f59f2beaefe5f1ff532c6185e9p-4, + 0x1.62e430p-4 + }, + { // Entry 344 + -0x1.620183f9723c526db01581b03289e0f8p-4, + -0x1.62e42ep-4 + }, + { // Entry 345 + 0x1.620183f9723c526db01581b03289e0f8p-4, + 0x1.62e42ep-4 + }, + { // Entry 346 + -0x1.620181fd454caef095a305bc4bfa5f8cp-4, + -0x1.62e42cp-4 + }, + { // Entry 347 + 0x1.620181fd454caef095a305bc4bfa5f8cp-4, + 0x1.62e42cp-4 + }, + { // Entry 348 + -0x1.62ab64d86ab1c41d432598f1a7016c16p-5, + -0x1.62e430p-5 + }, + { // Entry 349 + 0x1.62ab64d86ab1c41d432598f1a7016c16p-5, + 0x1.62e430p-5 + }, + { // Entry 350 + -0x1.62ab62d96060fd8e75e7cb16c3cd0f7bp-5, + -0x1.62e42ep-5 + }, + { // Entry 351 + 0x1.62ab62d96060fd8e75e7cb16c3cd0f7bp-5, + 0x1.62e42ep-5 + }, + { // Entry 352 + -0x1.62ab60da5610343ba64510e844c87ed4p-5, + -0x1.62e42cp-5 + }, + { // Entry 353 + 0x1.62ab60da5610343ba64510e844c87ed4p-5, + 0x1.62e42cp-5 + }, + { // Entry 354 + -0x1.62d5fb2a4e0746b264bbd3e451c465d4p-6, + -0x1.62e430p-6 + }, + { // Entry 355 + 0x1.62d5fb2a4e0746b264bbd3e451c465d4p-6, + 0x1.62e430p-6 + }, + { // Entry 356 + -0x1.62d5f92a8b81d6095737ce1a949ac4bep-6, + -0x1.62e42ep-6 + }, + { // Entry 357 + 0x1.62d5f92a8b81d6095737ce1a949ac4bep-6, + 0x1.62e42ep-6 + }, + { // Entry 358 + -0x1.62d5f72ac8fc64aef404ea2dd7db57a6p-6, + -0x1.62e42cp-6 + }, + { // Entry 359 + 0x1.62d5f72ac8fc64aef404ea2dd7db57a6p-6, + 0x1.62e42cp-6 + }, + { // Entry 360 + 0x1.62d5f72ac8fc64aef404ea2dd7db57a6p-6, + 0x1.62e42cp-6 + }, + { // Entry 361 + -0x1.62d5f72ac8fc64aef404ea2dd7db57a6p-6, + -0x1.62e42cp-6 + }, + { // Entry 362 + 0x1.62d5f92a8b81d6095737ce1a949ac4bep-6, + 0x1.62e42ep-6 + }, + { // Entry 363 + -0x1.62d5f92a8b81d6095737ce1a949ac4bep-6, + -0x1.62e42ep-6 + }, + { // Entry 364 + 0x1.62d5fb2a4e0746b264bbd3e451c465d4p-6, + 0x1.62e430p-6 + }, + { // Entry 365 + -0x1.62d5fb2a4e0746b264bbd3e451c465d4p-6, + -0x1.62e430p-6 + }, + { // Entry 366 + 0x1.62ab60da5610343ba64510e844c87ed4p-5, + 0x1.62e42cp-5 + }, + { // Entry 367 + -0x1.62ab60da5610343ba64510e844c87ed4p-5, + -0x1.62e42cp-5 + }, + { // Entry 368 + 0x1.62ab62d96060fd8e75e7cb16c3cd0f7bp-5, + 0x1.62e42ep-5 + }, + { // Entry 369 + -0x1.62ab62d96060fd8e75e7cb16c3cd0f7bp-5, + -0x1.62e42ep-5 + }, + { // Entry 370 + 0x1.62ab64d86ab1c41d432598f1a7016c16p-5, + 0x1.62e430p-5 + }, + { // Entry 371 + -0x1.62ab64d86ab1c41d432598f1a7016c16p-5, + -0x1.62e430p-5 + }, + { // Entry 372 + 0x1.620181fd454caef095a305bc4bfa5f8cp-4, + 0x1.62e42cp-4 + }, + { // Entry 373 + -0x1.620181fd454caef095a305bc4bfa5f8cp-4, + -0x1.62e42cp-4 + }, + { // Entry 374 + 0x1.620183f9723c526db01581b03289e0f8p-4, + 0x1.62e42ep-4 + }, + { // Entry 375 + -0x1.620183f9723c526db01581b03289e0f8p-4, + -0x1.62e42ep-4 + }, + { // Entry 376 + 0x1.620185f59f2beaefe5f1ff532c6185e9p-4, + 0x1.62e430p-4 + }, + { // Entry 377 + -0x1.620185f59f2beaefe5f1ff532c6185e9p-4, + -0x1.62e430p-4 + }, + { // Entry 378 + 0x1.5f6195aeca155016a893d14088fd4ba5p-3, + 0x1.62e42cp-3 + }, + { // Entry 379 + -0x1.5f6195aeca155016a893d14088fd4ba5p-3, + -0x1.62e42cp-3 + }, + { // Entry 380 + 0x1.5f61979fb7af4d856def98ede8520596p-3, + 0x1.62e42ep-3 + }, + { // Entry 381 + -0x1.5f61979fb7af4d856def98ede8520596p-3, + -0x1.62e42ep-3 + }, + { // Entry 382 + 0x1.5f619990a5492052ffe57497a9abd298p-3, + 0x1.62e430p-3 + }, + { // Entry 383 + -0x1.5f619990a5492052ffe57497a9abd298p-3, + -0x1.62e430p-3 + }, + { // Entry 384 + 0x1.555551d5a7719020ec6cf2d7658d0ac8p-2, + 0x1.62e42cp-2 + }, + { // Entry 385 + -0x1.555551d5a7719020ec6cf2d7658d0ac8p-2, + -0x1.62e42cp-2 + }, + { // Entry 386 + 0x1.5555539cc3e435f2961e38240bc73aa4p-2, + 0x1.62e42ep-2 + }, + { // Entry 387 + -0x1.5555539cc3e435f2961e38240bc73aa4p-2, + -0x1.62e42ep-2 + }, + { // Entry 388 + 0x1.55555563e05644101a754f1b989bf5e0p-2, + 0x1.62e430p-2 + }, + { // Entry 389 + -0x1.55555563e05644101a754f1b989bf5e0p-2, + -0x1.62e430p-2 + }, + { // Entry 390 + 0x1.333330ae4f974c09dfacf6fd31a6a22ap-1, + 0x1.62e42cp-1 + }, + { // Entry 391 + -0x1.333330ae4f974c09dfacf6fd31a6a22ap-1, + -0x1.62e42cp-1 + }, + { // Entry 392 + 0x1.333331f5fdae082d6c69302af70f1ab2p-1, + 0x1.62e42ep-1 + }, + { // Entry 393 + -0x1.333331f5fdae082d6c69302af70f1ab2p-1, + -0x1.62e42ep-1 + }, + { // Entry 394 + 0x1.3333333dabc33b19ad2c008a3f7d4144p-1, + 0x1.62e430p-1 + }, + { // Entry 395 + -0x1.3333333dabc33b19ad2c008a3f7d4144p-1, + -0x1.62e430p-1 + }, + { // Entry 396 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42cp6 + }, + { // Entry 397 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42cp6 + }, + { // Entry 398 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42ep6 + }, + { // Entry 399 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42ep6 + }, + { // Entry 400 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e430p6 + }, + { // Entry 401 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e430p6 + }, + { // Entry 402 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1da2p6 + }, + { // Entry 403 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9d1da2p6 + }, + { // Entry 404 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1da0p6 + }, + { // Entry 405 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9d1da0p6 + }, + { // Entry 406 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.9d1d9ep6 + }, + { // Entry 407 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.9d1d9ep6 + }, + { // Entry 408 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.65a9f6p6 + }, + { // Entry 409 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.65a9f6p6 + }, + { // Entry 410 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.65a9f8p6 + }, + { // Entry 411 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.65a9f8p6 + }, + { // Entry 412 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.65a9fap6 + }, + { // Entry 413 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.65a9fap6 + }, + { // Entry 414 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e430p6 + }, + { // Entry 415 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e430p6 + }, + { // Entry 416 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42ep6 + }, + { // Entry 417 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42ep6 + }, + { // Entry 418 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.62e42cp6 + }, + { // Entry 419 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.62e42cp6 + }, + { // Entry 420 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep62 + }, + { // Entry 421 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep62 + }, + { // Entry 422 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p63 + }, + { // Entry 423 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p63 + }, + { // Entry 424 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.000002p63 + }, + { // Entry 425 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.000002p63 + }, + { // Entry 426 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep26 + }, + { // Entry 427 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep26 + }, + { // Entry 428 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p27 + }, + { // Entry 429 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p27 + }, + { // Entry 430 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.000002p27 + }, + { // Entry 431 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.000002p27 + }, + { // Entry 432 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep23 + }, + { // Entry 433 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep23 + }, + { // Entry 434 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.p24 + }, + { // Entry 435 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.p24 + }, + { // Entry 436 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.000002p24 + }, + { // Entry 437 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.000002p24 + }, + { // Entry 438 + 0x1.ffffffffffffffffffffffcd2c4a64d0p-1, + 0x1.fffffep4 + }, + { // Entry 439 + -0x1.ffffffffffffffffffffffcd2c4a64d0p-1, + -0x1.fffffep4 + }, + { // Entry 440 + 0x1.ffffffffffffffffffffffcd2c5719bcp-1, + 0x1.p5 + }, + { // Entry 441 + -0x1.ffffffffffffffffffffffcd2c5719bcp-1, + -0x1.p5 + }, + { // Entry 442 + 0x1.ffffffffffffffffffffffcd2c70838ap-1, + 0x1.000002p5 + }, + { // Entry 443 + -0x1.ffffffffffffffffffffffcd2c70838ap-1, + -0x1.000002p5 + }, + { // Entry 444 + 0x1.fffffffffff1bdcbbc08e2044832bbfep-1, + 0x1.fffffep3 + }, + { // Entry 445 + -0x1.fffffffffff1bdcbbc08e2044832bbfep-1, + -0x1.fffffep3 + }, + { // Entry 446 + 0x1.fffffffffff1bdcd844f4dfec4941943p-1, + 0x1.p4 + }, + { // Entry 447 + -0x1.fffffffffff1bdcd844f4dfec4941943p-1, + -0x1.p4 + }, + { // Entry 448 + 0x1.fffffffffff1bdd114db7ad966aba40dp-1, + 0x1.000002p4 + }, + { // Entry 449 + -0x1.fffffffffff1bdd114db7ad966aba40dp-1, + -0x1.000002p4 + }, + { // Entry 450 + 0x1.fffff872a8a6b12003ef317c57617676p-1, + 0x1.fffffep2 + }, + { // Entry 451 + -0x1.fffff872a8a6b12003ef317c57617676p-1, + -0x1.fffffep2 + }, + { // Entry 452 + 0x1.fffff872a91f8690ee0e6d3ad8aee46bp-1, + 0x1.p3 + }, + { // Entry 453 + -0x1.fffff872a91f8690ee0e6d3ad8aee46bp-1, + -0x1.p3 + }, + { // Entry 454 + 0x1.fffff872aa11315c1a493c74b407aa6ep-1, + 0x1.000002p3 + }, + { // Entry 455 + -0x1.fffff872aa11315c1a493c74b407aa6ep-1, + -0x1.000002p3 + }, + { // Entry 456 + 0x1.ffa81705e1a8bbcbf5a3dcf7cb937ef6p-1, + 0x1.fffffep1 + }, + { // Entry 457 + -0x1.ffa81705e1a8bbcbf5a3dcf7cb937ef6p-1, + -0x1.fffffep1 + }, + { // Entry 458 + 0x1.ffa81708a0b4216857246c19dc60acb8p-1, + 0x1.p2 + }, + { // Entry 459 + -0x1.ffa81708a0b4216857246c19dc60acb8p-1, + -0x1.p2 + }, + { // Entry 460 + 0x1.ffa8170e1ecaaac35b6d81d682891126p-1, + 0x1.000002p2 + }, + { // Entry 461 + -0x1.ffa8170e1ecaaac35b6d81d682891126p-1, + -0x1.000002p2 + }, + { // Entry 462 + 0x1.ed950599638c18fec5bd8135b3976fafp-1, + 0x1.fffffep0 + }, + { // Entry 463 + -0x1.ed950599638c18fec5bd8135b3976fafp-1, + -0x1.fffffep0 + }, + { // Entry 464 + 0x1.ed9505e1bc3d3d33c432fc3e8255c8b5p-1, + 0x1.p1 + }, + { // Entry 465 + -0x1.ed9505e1bc3d3d33c432fc3e8255c8b5p-1, + -0x1.p1 + }, + { // Entry 466 + 0x1.ed9506726d9c40b04cf2556073e90aecp-1, + 0x1.000002p1 + }, + { // Entry 467 + -0x1.ed9506726d9c40b04cf2556073e90aecp-1, + -0x1.000002p1 + }, + { // Entry 468 + 0x1.85efaa7a485824cc9f98f88674c08b83p-1, + 0x1.fffffep-1 + }, + { // Entry 469 + -0x1.85efaa7a485824cc9f98f88674c08b83p-1, + -0x1.fffffep-1 + }, + { // Entry 470 + 0x1.85efab514f394558632be293c4274fe6p-1, + 0x1.p0 + }, + { // Entry 471 + -0x1.85efab514f394558632be293c4274fe6p-1, + -0x1.p0 + }, + { // Entry 472 + 0x1.85efacff5cf7afdba442be92190b551bp-1, + 0x1.000002p0 + }, + { // Entry 473 + -0x1.85efacff5cf7afdba442be92190b551bp-1, + -0x1.000002p0 + }, + { // Entry 474 + 0x1.d9353be2bf67df131f7df0e337af4ca9p-2, + 0x1.fffffep-2 + }, + { // Entry 475 + -0x1.d9353be2bf67df131f7df0e337af4ca9p-2, + -0x1.fffffep-2 + }, + { // Entry 476 + 0x1.d9353d7568af365128ee21c65b08d3a7p-2, + 0x1.p-1 + }, + { // Entry 477 + -0x1.d9353d7568af365128ee21c65b08d3a7p-2, + -0x1.p-1 + }, + { // Entry 478 + 0x1.d935409abb3bb6925a21ec1ab4945211p-2, + 0x1.000002p-1 + }, + { // Entry 479 + -0x1.d935409abb3bb6925a21ec1ab4945211p-2, + -0x1.000002p-1 + }, + { // Entry 480 + 0x1.f597e8885827eed9d73369feec84841dp-3, + 0x1.fffffep-3 + }, + { // Entry 481 + -0x1.f597e8885827eed9d73369feec84841dp-3, + -0x1.fffffep-3 + }, + { // Entry 482 + 0x1.f597ea69a1c85f1358d71d84729c80c8p-3, + 0x1.p-2 + }, + { // Entry 483 + -0x1.f597ea69a1c85f1358d71d84729c80c8p-3, + -0x1.p-2 + }, + { // Entry 484 + 0x1.f597ee2c35088eb5da928b278522fdc0p-3, + 0x1.000002p-2 + }, + { // Entry 485 + -0x1.f597ee2c35088eb5da928b278522fdc0p-3, + -0x1.000002p-2 + }, + { // Entry 486 + 0x1.fd5990c4365de99b093619573aed5eefp-4, + 0x1.fffffep-4 + }, + { // Entry 487 + -0x1.fd5990c4365de99b093619573aed5eefp-4, + -0x1.fffffep-4 + }, + { // Entry 488 + 0x1.fd5992bc4b834fc0af6ac8eff7d81040p-4, + 0x1.p-3 + }, + { // Entry 489 + -0x1.fd5992bc4b834fc0af6ac8eff7d81040p-4, + -0x1.p-3 + }, + { // Entry 490 + 0x1.fd5996ac75cded089eba2285d0035a24p-4, + 0x1.000002p-3 + }, + { // Entry 491 + -0x1.fd5996ac75cded089eba2285d0035a24p-4, + -0x1.000002p-3 + }, + { // Entry 492 + 0x1.ff55978001b8da0e0ab4904fa64b8d32p-5, + 0x1.fffffep-5 + }, + { // Entry 493 + -0x1.ff55978001b8da0e0ab4904fa64b8d32p-5, + -0x1.fffffep-5 + }, + { // Entry 494 + 0x1.ff55997e030d705935592a366a8a66d4p-5, + 0x1.p-4 + }, + { // Entry 495 + -0x1.ff55997e030d705935592a366a8a66d4p-5, + -0x1.p-4 + }, + { // Entry 496 + 0x1.ff559d7a05b690ff7d0e4114c0eb72c1p-5, + 0x1.000002p-4 + }, + { // Entry 497 + -0x1.ff559d7a05b690ff7d0e4114c0eb72c1p-5, + -0x1.000002p-4 + }, + { // Entry 498 + 0x1.ffd55799ab088fb326e9ba18d0997203p-6, + 0x1.fffffep-6 + }, + { // Entry 499 + -0x1.ffd55799ab088fb326e9ba18d0997203p-6, + -0x1.fffffep-6 + }, + { // Entry 500 + 0x1.ffd559992b1de28305fc17382205392ep-6, + 0x1.p-5 + }, + { // Entry 501 + -0x1.ffd559992b1de28305fc17382205392ep-6, + -0x1.p-5 + }, + { // Entry 502 + 0x1.ffd55d982b488523c3e9758124e0628bp-6, + 0x1.000002p-5 + }, + { // Entry 503 + -0x1.ffd55d982b488523c3e9758124e0628bp-6, + -0x1.000002p-5 + }, + { // Entry 504 + 0x1.fff55399b7de33c0d4da3bfbdc23a5d4p-7, + 0x1.fffffep-7 + }, + { // Entry 505 + -0x1.fff55399b7de33c0d4da3bfbdc23a5d4p-7, + -0x1.fffffep-7 + }, + { // Entry 506 + 0x1.fff5559997df892a1128575843fc0d52p-7, + 0x1.p-6 + }, + { // Entry 507 + -0x1.fff5559997df892a1128575843fc0d52p-7, + -0x1.p-6 + }, + { // Entry 508 + 0x1.fff5599957e2333c99c37490eae25a5ap-7, + 0x1.000002p-6 + }, + { // Entry 509 + -0x1.fff5599957e2333c99c37490eae25a5ap-7, + -0x1.000002p-6 + }, + { // Entry 510 + 0x1.fffffdf5555575999978428a3604016fp-15, + 0x1.fffffep-15 + }, + { // Entry 511 + -0x1.fffffdf5555575999978428a3604016fp-15, + -0x1.fffffep-15 + }, + { // Entry 512 + 0x1.fffffff555555599999997df7df7eab0p-15, + 0x1.p-14 + }, + { // Entry 513 + -0x1.fffffff555555599999997df7df7eab0p-15, + -0x1.p-14 + }, + { // Entry 514 + 0x1.000001faaaaa8acccc8e2144eeefdea1p-14, + 0x1.000002p-14 + }, + { // Entry 515 + -0x1.000001faaaaa8acccc8e2144eeefdea1p-14, + -0x1.000002p-14 + }, + { // Entry 516 + 0x1.fffffdfffffffff55555755555355599p-31, + 0x1.fffffep-31 + }, + { // Entry 517 + -0x1.fffffdfffffffff55555755555355599p-31, + -0x1.fffffep-31 + }, + { // Entry 518 + 0x1.fffffffffffffff55555555555555599p-31, + 0x1.p-30 + }, + { // Entry 519 + -0x1.fffffffffffffff55555555555555599p-31, + -0x1.p-30 + }, + { // Entry 520 + 0x1.000001fffffffffaaaaa8aaaaa6aaaccp-30, + 0x1.000002p-30 + }, + { // Entry 521 + -0x1.000001fffffffffaaaaa8aaaaa6aaaccp-30, + -0x1.000002p-30 + }, + { // Entry 522 + 0x1.fffffdfffffffffffffffffffffd5555p-56, + 0x1.fffffep-56 + }, + { // Entry 523 + -0x1.fffffdfffffffffffffffffffffd5555p-56, + -0x1.fffffep-56 + }, + { // Entry 524 + 0x1.fffffffffffffffffffffffffffd5555p-56, + 0x1.p-55 + }, + { // Entry 525 + -0x1.fffffffffffffffffffffffffffd5555p-56, + -0x1.p-55 + }, + { // Entry 526 + 0x1.000001fffffffffffffffffffffeaaaap-55, + 0x1.000002p-55 + }, + { // Entry 527 + -0x1.000001fffffffffffffffffffffeaaaap-55, + -0x1.000002p-55 + }, + { // Entry 528 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep127 + }, + { // Entry 529 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep127 + }, + { // Entry 530 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep127 + }, + { // Entry 531 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep127 + }, + { // Entry 532 + 0x1.p0, + HUGE_VALF + }, + { // Entry 533 + -0x1.p0, + -HUGE_VALF + }, + { // Entry 534 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffep127 + }, + { // Entry 535 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffep127 + }, + { // Entry 536 + 0x1.ffffffffffffffffffffffffffffffffp-1, + 0x1.fffffcp127 + }, + { // Entry 537 + -0x1.ffffffffffffffffffffffffffffffffp-1, + -0x1.fffffcp127 + }, + { // Entry 538 + 0x1.fe175fa8292deb3d8c41deec7c2ee47cp-1, + 0x1.921fb6p1 + }, + { // Entry 539 + -0x1.fe175fa8292deb3d8c41deec7c2ee47cp-1, + -0x1.921fb6p1 + }, + { // Entry 540 + 0x1.d594fde9eb7012c121b429007ea7884ap-1, + 0x1.921fb6p0 + }, + { // Entry 541 + -0x1.d594fde9eb7012c121b429007ea7884ap-1, + -0x1.921fb6p0 + }, + { // Entry 542 + 0x1.85efacff5cf7afdba442be92190b551bp-1, + 0x1.000002p0 + }, + { // Entry 543 + -0x1.85efacff5cf7afdba442be92190b551bp-1, + -0x1.000002p0 + }, + { // Entry 544 + 0x1.85efab514f394558632be293c4274fe6p-1, + 0x1.p0 + }, + { // Entry 545 + -0x1.85efab514f394558632be293c4274fe6p-1, + -0x1.p0 + }, + { // Entry 546 + 0x1.85efaa7a485824cc9f98f88674c08b83p-1, + 0x1.fffffep-1 + }, + { // Entry 547 + -0x1.85efaa7a485824cc9f98f88674c08b83p-1, + -0x1.fffffep-1 + }, + { // Entry 548 + 0x1.4fc442656d206b21f6dcd108d6a88ad7p-1, + 0x1.921fb6p-1 + }, + { // Entry 549 + -0x1.4fc442656d206b21f6dcd108d6a88ad7p-1, + -0x1.921fb6p-1 + }, + { // Entry 550 + 0x1.000001ffffffffffffffffffffffffffp-126, + 0x1.000002p-126 + }, + { // Entry 551 + -0x1.000001ffffffffffffffffffffffffffp-126, + -0x1.000002p-126 + }, + { // Entry 552 + 0x1.ffffffffffffffffffffffffffffffffp-127, + 0x1.p-126 + }, + { // Entry 553 + -0x1.ffffffffffffffffffffffffffffffffp-127, + -0x1.p-126 + }, + { // Entry 554 + 0x1.fffffbffffffffffffffffffffffffffp-127, + 0x1.fffffcp-127 + }, + { // Entry 555 + -0x1.fffffbffffffffffffffffffffffffffp-127, + -0x1.fffffcp-127 + }, + { // Entry 556 + 0x1.fffff7ffffffffffffffffffffffffffp-127, + 0x1.fffff8p-127 + }, + { // Entry 557 + -0x1.fffff7ffffffffffffffffffffffffffp-127, + -0x1.fffff8p-127 + }, + { // Entry 558 + 0x1.ffffffffffffffffffffffffffffffffp-149, + 0x1.p-148 + }, + { // Entry 559 + -0x1.ffffffffffffffffffffffffffffffffp-149, + -0x1.p-148 + }, + { // Entry 560 + 0.0f, + 0x1.p-149 + }, + { // Entry 561 + -0.0f, + -0x1.p-149 + }, + { // Entry 562 + 0.0, + 0.0f + }, + { // Entry 563 + -0.0, + -0.0f + } +}; diff --git a/tests/math_data/trunc_intel_data.h b/tests/math_data/trunc_intel_data.h new file mode 100644 index 000000000..4d3a2d8c1 --- /dev/null +++ b/tests/math_data/trunc_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_trunc_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.0p-1074 + }, + { // Entry 1 + -0.0, + -0.0 + }, + { // Entry 2 + 0.0, + 0x1.0p-1074 + }, + { // Entry 3 + 0.0, + 0x1.fffffffffffffp-2 + }, + { // Entry 4 + 0.0, + 0x1.0p-1 + }, + { // Entry 5 + 0.0, + 0x1.0000000000001p-1 + }, + { // Entry 6 + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffffffffffp0 + }, + { // Entry 10 + 0x1.p0, + 0x1.8p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.8000000000001p0 + }, + { // Entry 12 + 0x1.p0, + 0x1.fffffffffffffp0 + }, + { // Entry 13 + 0x1.p1, + 0x1.0p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.0000000000001p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffffffffffp1 + }, + { // Entry 16 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 17 + 0x1.p1, + 0x1.4000000000001p1 + }, + { // Entry 18 + 0x1.8cp6, + 0x1.8ffffffffffffp6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.9p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.9000000000001p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffffffffffp6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.920p6 + }, + { // Entry 23 + 0x1.90p6, + 0x1.9200000000001p6 + }, + { // Entry 24 + 0x1.f380p9, + 0x1.f3fffffffffffp9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f40p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f400000000001p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffffffffffp9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f44p9 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f440000000001p9 + }, + { // Entry 30 + 0x1.ffffffffffff80p49, + 0x1.fffffffffffffp49 + }, + { // Entry 31 + 0x1.p50, + 0x1.0p50 + }, + { // Entry 32 + 0x1.p50, + 0x1.0000000000001p50 + }, + { // Entry 33 + 0x1.ffffffffffffc0p50, + 0x1.fffffffffffffp50 + }, + { // Entry 34 + 0x1.p51, + 0x1.0p51 + }, + { // Entry 35 + 0x1.p51, + 0x1.0000000000001p51 + }, + { // Entry 36 + 0x1.ffffffffffffe0p51, + 0x1.fffffffffffffp51 + }, + { // Entry 37 + 0x1.p52, + 0x1.0p52 + }, + { // Entry 38 + 0x1.00000000000010p52, + 0x1.0000000000001p52 + }, + { // Entry 39 + 0x1.fffffffffffff0p52, + 0x1.fffffffffffffp52 + }, + { // Entry 40 + 0x1.p53, + 0x1.0p53 + }, + { // Entry 41 + 0x1.00000000000010p53, + 0x1.0000000000001p53 + }, + { // Entry 42 + 0x1.fffffffffffff0p53, + 0x1.fffffffffffffp53 + }, + { // Entry 43 + 0x1.p54, + 0x1.0p54 + }, + { // Entry 44 + 0x1.00000000000010p54, + 0x1.0000000000001p54 + }, + { // Entry 45 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 46 + -0.0, + -0x1.0000000000001p-1 + }, + { // Entry 47 + -0.0, + -0x1.0p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffffffffffp-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 51 + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 52 + -0x1.p0, + -0x1.8000000000001p0 + }, + { // Entry 53 + -0x1.p0, + -0x1.8p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffffffffffp0 + }, + { // Entry 55 + -0x1.p1, + -0x1.0000000000001p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.0p1 + }, + { // Entry 57 + -0x1.p0, + -0x1.fffffffffffffp0 + }, + { // Entry 58 + -0x1.p1, + -0x1.4000000000001p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffffffffffp1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.9000000000001p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.9p6 + }, + { // Entry 63 + -0x1.8cp6, + -0x1.8ffffffffffffp6 + }, + { // Entry 64 + -0x1.90p6, + -0x1.9200000000001p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.920p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffffffffffp6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f400000000001p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f40p9 + }, + { // Entry 69 + -0x1.f380p9, + -0x1.f3fffffffffffp9 + }, + { // Entry 70 + -0x1.f4p9, + -0x1.f440000000001p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f44p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffffffffffp9 + }, + { // Entry 73 + -0x1.p50, + -0x1.0000000000001p50 + }, + { // Entry 74 + -0x1.p50, + -0x1.0p50 + }, + { // Entry 75 + -0x1.ffffffffffff80p49, + -0x1.fffffffffffffp49 + }, + { // Entry 76 + -0x1.p51, + -0x1.0000000000001p51 + }, + { // Entry 77 + -0x1.p51, + -0x1.0p51 + }, + { // Entry 78 + -0x1.ffffffffffffc0p50, + -0x1.fffffffffffffp50 + }, + { // Entry 79 + -0x1.00000000000010p52, + -0x1.0000000000001p52 + }, + { // Entry 80 + -0x1.p52, + -0x1.0p52 + }, + { // Entry 81 + -0x1.ffffffffffffe0p51, + -0x1.fffffffffffffp51 + }, + { // Entry 82 + -0x1.00000000000010p53, + -0x1.0000000000001p53 + }, + { // Entry 83 + -0x1.p53, + -0x1.0p53 + }, + { // Entry 84 + -0x1.fffffffffffff0p52, + -0x1.fffffffffffffp52 + }, + { // Entry 85 + -0x1.00000000000010p54, + -0x1.0000000000001p54 + }, + { // Entry 86 + -0x1.p54, + -0x1.0p54 + }, + { // Entry 87 + -0x1.fffffffffffff0p53, + -0x1.fffffffffffffp53 + }, + { // Entry 88 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 89 + 0x1.fffffff8p29, + 0x1.fffffffffffffp29 + }, + { // Entry 90 + 0x1.p30, + 0x1.0p30 + }, + { // Entry 91 + 0x1.p30, + 0x1.0000000000001p30 + }, + { // Entry 92 + 0x1.fffffff4p30, + 0x1.fffffff7ffffep30 + }, + { // Entry 93 + 0x1.fffffff4p30, + 0x1.fffffff7fffffp30 + }, + { // Entry 94 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 95 + 0x1.fffffff8p30, + 0x1.fffffff800001p30 + }, + { // Entry 96 + 0x1.fffffff8p30, + 0x1.fffffff800002p30 + }, + { // Entry 97 + 0x1.fffffff8p30, + 0x1.fffffff9ffffep30 + }, + { // Entry 98 + 0x1.fffffff8p30, + 0x1.fffffff9fffffp30 + }, + { // Entry 99 + 0x1.fffffff8p30, + 0x1.fffffffa0p30 + }, + { // Entry 100 + 0x1.fffffff8p30, + 0x1.fffffffa00001p30 + }, + { // Entry 101 + 0x1.fffffff8p30, + 0x1.fffffffa00002p30 + }, + { // Entry 102 + 0x1.fffffff8p30, + 0x1.fffffffbffffep30 + }, + { // Entry 103 + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 104 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 105 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 106 + 0x1.fffffffcp30, + 0x1.fffffffc00002p30 + }, + { // Entry 107 + 0x1.fffffffcp30, + 0x1.fffffffdffffep30 + }, + { // Entry 108 + 0x1.fffffffcp30, + 0x1.fffffffdfffffp30 + }, + { // Entry 109 + 0x1.fffffffcp30, + 0x1.fffffffe0p30 + }, + { // Entry 110 + 0x1.fffffffcp30, + 0x1.fffffffe00001p30 + }, + { // Entry 111 + 0x1.fffffffcp30, + 0x1.fffffffe00002p30 + }, + { // Entry 112 + 0x1.fffffffcp30, + 0x1.ffffffffffffep30 + }, + { // Entry 113 + 0x1.fffffffcp30, + 0x1.fffffffffffffp30 + }, + { // Entry 114 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 115 + 0x1.p31, + 0x1.0000000000001p31 + }, + { // Entry 116 + 0x1.p31, + 0x1.0000000000002p31 + }, + { // Entry 117 + 0x1.p31, + 0x1.00000000ffffep31 + }, + { // Entry 118 + 0x1.p31, + 0x1.00000000fffffp31 + }, + { // Entry 119 + 0x1.p31, + 0x1.000000010p31 + }, + { // Entry 120 + 0x1.p31, + 0x1.0000000100001p31 + }, + { // Entry 121 + 0x1.p31, + 0x1.0000000100002p31 + }, + { // Entry 122 + 0x1.ffffffe0p30, + 0x1.ffffffep30 + }, + { // Entry 123 + 0x1.ffffffe4p30, + 0x1.ffffffe40p30 + }, + { // Entry 124 + 0x1.ffffffe8p30, + 0x1.ffffffe80p30 + }, + { // Entry 125 + 0x1.ffffffecp30, + 0x1.ffffffec0p30 + }, + { // Entry 126 + 0x1.fffffff0p30, + 0x1.fffffffp30 + }, + { // Entry 127 + 0x1.fffffff4p30, + 0x1.fffffff40p30 + }, + { // Entry 128 + 0x1.fffffff8p30, + 0x1.fffffff80p30 + }, + { // Entry 129 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 130 + 0x1.p31, + 0x1.0p31 + }, + { // Entry 131 + 0x1.00000002p31, + 0x1.000000020p31 + }, + { // Entry 132 + -0x1.p30, + -0x1.0000000000001p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.0p30 + }, + { // Entry 134 + -0x1.fffffff8p29, + -0x1.fffffffffffffp29 + }, + { // Entry 135 + -0x1.fffffff8p30, + -0x1.fffffff800002p30 + }, + { // Entry 136 + -0x1.fffffff8p30, + -0x1.fffffff800001p30 + }, + { // Entry 137 + -0x1.fffffff8p30, + -0x1.fffffff80p30 + }, + { // Entry 138 + -0x1.fffffff4p30, + -0x1.fffffff7fffffp30 + }, + { // Entry 139 + -0x1.fffffff4p30, + -0x1.fffffff7ffffep30 + }, + { // Entry 140 + -0x1.fffffff8p30, + -0x1.fffffffa00002p30 + }, + { // Entry 141 + -0x1.fffffff8p30, + -0x1.fffffffa00001p30 + }, + { // Entry 142 + -0x1.fffffff8p30, + -0x1.fffffffa0p30 + }, + { // Entry 143 + -0x1.fffffff8p30, + -0x1.fffffff9fffffp30 + }, + { // Entry 144 + -0x1.fffffff8p30, + -0x1.fffffff9ffffep30 + }, + { // Entry 145 + -0x1.fffffffcp30, + -0x1.fffffffc00002p30 + }, + { // Entry 146 + -0x1.fffffffcp30, + -0x1.fffffffc00001p30 + }, + { // Entry 147 + -0x1.fffffffcp30, + -0x1.fffffffc0p30 + }, + { // Entry 148 + -0x1.fffffff8p30, + -0x1.fffffffbfffffp30 + }, + { // Entry 149 + -0x1.fffffff8p30, + -0x1.fffffffbffffep30 + }, + { // Entry 150 + -0x1.fffffffcp30, + -0x1.fffffffe00002p30 + }, + { // Entry 151 + -0x1.fffffffcp30, + -0x1.fffffffe00001p30 + }, + { // Entry 152 + -0x1.fffffffcp30, + -0x1.fffffffe0p30 + }, + { // Entry 153 + -0x1.fffffffcp30, + -0x1.fffffffdfffffp30 + }, + { // Entry 154 + -0x1.fffffffcp30, + -0x1.fffffffdffffep30 + }, + { // Entry 155 + -0x1.p31, + -0x1.0000000000002p31 + }, + { // Entry 156 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 158 + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 159 + -0x1.fffffffcp30, + -0x1.ffffffffffffep30 + }, + { // Entry 160 + -0x1.p31, + -0x1.0000000100002p31 + }, + { // Entry 161 + -0x1.p31, + -0x1.0000000100001p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.000000010p31 + }, + { // Entry 163 + -0x1.p31, + -0x1.00000000fffffp31 + }, + { // Entry 164 + -0x1.p31, + -0x1.00000000ffffep31 + }, + { // Entry 165 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 166 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 167 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 168 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 169 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 170 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 171 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 172 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 173 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 174 + -0x1.ffffffe0p30, + -0x1.ffffffep30 + }, + { // Entry 175 + 0x1.ffffffffffffe0p61, + 0x1.ffffffffffffep61 + }, + { // Entry 176 + 0x1.fffffffffffff0p61, + 0x1.fffffffffffffp61 + }, + { // Entry 177 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 178 + 0x1.00000000000010p62, + 0x1.0000000000001p62 + }, + { // Entry 179 + 0x1.00000000000020p62, + 0x1.0000000000002p62 + }, + { // Entry 180 + 0x1.ffffffffffffe0p62, + 0x1.ffffffffffffep62 + }, + { // Entry 181 + 0x1.fffffffffffff0p62, + 0x1.fffffffffffffp62 + }, + { // Entry 182 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 183 + 0x1.00000000000010p63, + 0x1.0000000000001p63 + }, + { // Entry 184 + 0x1.00000000000020p63, + 0x1.0000000000002p63 + }, + { // Entry 185 + 0x1.ffffffffffffe0p63, + 0x1.ffffffffffffep63 + }, + { // Entry 186 + 0x1.fffffffffffff0p63, + 0x1.fffffffffffffp63 + }, + { // Entry 187 + 0x1.p64, + 0x1.0p64 + }, + { // Entry 188 + 0x1.00000000000010p64, + 0x1.0000000000001p64 + }, + { // Entry 189 + 0x1.00000000000020p64, + 0x1.0000000000002p64 + }, + { // Entry 190 + -0x1.00000000000020p62, + -0x1.0000000000002p62 + }, + { // Entry 191 + -0x1.00000000000010p62, + -0x1.0000000000001p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 193 + -0x1.fffffffffffff0p61, + -0x1.fffffffffffffp61 + }, + { // Entry 194 + -0x1.ffffffffffffe0p61, + -0x1.ffffffffffffep61 + }, + { // Entry 195 + -0x1.00000000000020p63, + -0x1.0000000000002p63 + }, + { // Entry 196 + -0x1.00000000000010p63, + -0x1.0000000000001p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 198 + -0x1.fffffffffffff0p62, + -0x1.fffffffffffffp62 + }, + { // Entry 199 + -0x1.ffffffffffffe0p62, + -0x1.ffffffffffffep62 + }, + { // Entry 200 + -0x1.00000000000020p64, + -0x1.0000000000002p64 + }, + { // Entry 201 + -0x1.00000000000010p64, + -0x1.0000000000001p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.0p64 + }, + { // Entry 203 + -0x1.fffffffffffff0p63, + -0x1.fffffffffffffp63 + }, + { // Entry 204 + -0x1.ffffffffffffe0p63, + -0x1.ffffffffffffep63 + }, + { // Entry 205 + 0x1.p62, + 0x1.0p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.0p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.0p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.0p63 + }, + { // Entry 209 + 0x1.fffffff8p30, + 0x1.fffffffbfffffp30 + }, + { // Entry 210 + 0x1.fffffffcp30, + 0x1.fffffffc0p30 + }, + { // Entry 211 + 0x1.fffffffcp30, + 0x1.fffffffc00001p30 + }, + { // Entry 212 + -0x1.p31, + -0x1.0000000000001p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.0p31 + }, + { // Entry 214 + -0x1.fffffffcp30, + -0x1.fffffffffffffp30 + }, + { // Entry 215 + 0x1.80p1, + 0x1.fffffffffffffp1 + }, + { // Entry 216 + 0x1.p2, + 0x1.0p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.0000000000001p2 + }, + { // Entry 218 + 0x1.c0p2, + 0x1.fffffffffffffp2 + }, + { // Entry 219 + 0x1.p3, + 0x1.0p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.0000000000001p3 + }, + { // Entry 221 + 0x1.e0p3, + 0x1.fffffffffffffp3 + }, + { // Entry 222 + 0x1.p4, + 0x1.0p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.0000000000001p4 + }, + { // Entry 224 + 0x1.f0p4, + 0x1.fffffffffffffp4 + }, + { // Entry 225 + 0x1.p5, + 0x1.0p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.0000000000001p5 + }, + { // Entry 227 + 0x1.f8p5, + 0x1.fffffffffffffp5 + }, + { // Entry 228 + 0x1.p6, + 0x1.0p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.0000000000001p6 + }, + { // Entry 230 + 0x1.fcp6, + 0x1.fffffffffffffp6 + }, + { // Entry 231 + 0x1.p7, + 0x1.0p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.0000000000001p7 + }, + { // Entry 233 + 0x1.fep7, + 0x1.fffffffffffffp7 + }, + { // Entry 234 + 0x1.p8, + 0x1.0p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.0000000000001p8 + }, + { // Entry 236 + 0x1.ffp8, + 0x1.fffffffffffffp8 + }, + { // Entry 237 + 0x1.p9, + 0x1.0p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.0000000000001p9 + }, + { // Entry 239 + 0x1.ff80p9, + 0x1.fffffffffffffp9 + }, + { // Entry 240 + 0x1.p10, + 0x1.0p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.0000000000001p10 + }, + { // Entry 242 + 0x1.ffc0p10, + 0x1.fffffffffffffp10 + }, + { // Entry 243 + 0x1.p11, + 0x1.0p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.0000000000001p11 + }, + { // Entry 245 + 0x1.ffe0p11, + 0x1.fffffffffffffp11 + }, + { // Entry 246 + 0x1.p12, + 0x1.0p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.0000000000001p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffffffffffp2 + }, + { // Entry 249 + 0x1.p2, + 0x1.2p2 + }, + { // Entry 250 + 0x1.p2, + 0x1.2000000000001p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffffffffffp3 + }, + { // Entry 252 + 0x1.p3, + 0x1.1p3 + }, + { // Entry 253 + 0x1.p3, + 0x1.1000000000001p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffffffffffp4 + }, + { // Entry 255 + 0x1.p4, + 0x1.080p4 + }, + { // Entry 256 + 0x1.p4, + 0x1.0800000000001p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffffffffffp5 + }, + { // Entry 258 + 0x1.p5, + 0x1.040p5 + }, + { // Entry 259 + 0x1.p5, + 0x1.0400000000001p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffffffffffp6 + }, + { // Entry 261 + 0x1.p6, + 0x1.020p6 + }, + { // Entry 262 + 0x1.p6, + 0x1.0200000000001p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffffffffffp7 + }, + { // Entry 264 + 0x1.p7, + 0x1.010p7 + }, + { // Entry 265 + 0x1.p7, + 0x1.0100000000001p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffffffffffp8 + }, + { // Entry 267 + 0x1.p8, + 0x1.008p8 + }, + { // Entry 268 + 0x1.p8, + 0x1.0080000000001p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffffffffffp9 + }, + { // Entry 270 + 0x1.p9, + 0x1.004p9 + }, + { // Entry 271 + 0x1.p9, + 0x1.0040000000001p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffffffffffp10 + }, + { // Entry 273 + 0x1.p10, + 0x1.002p10 + }, + { // Entry 274 + 0x1.p10, + 0x1.0020000000001p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffffffffffp10 + }, + { // Entry 276 + 0x1.0040p10, + 0x1.006p10 + }, + { // Entry 277 + 0x1.0040p10, + 0x1.0060000000001p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffffffffffp11 + }, + { // Entry 279 + 0x1.p11, + 0x1.001p11 + }, + { // Entry 280 + 0x1.p11, + 0x1.0010000000001p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fffffffffp12 + }, + { // Entry 282 + 0x1.p12, + 0x1.00080p12 + }, + { // Entry 283 + 0x1.p12, + 0x1.0008000000001p12 + }, + { // Entry 284 + HUGE_VAL, + HUGE_VAL + }, + { // Entry 285 + -HUGE_VAL, + -HUGE_VAL + }, + { // Entry 286 + 0x1.fffffffffffff0p1023, + 0x1.fffffffffffffp1023 + }, + { // Entry 287 + -0x1.fffffffffffff0p1023, + -0x1.fffffffffffffp1023 + }, + { // Entry 288 + 0x1.ffffffffffffe0p1023, + 0x1.ffffffffffffep1023 + }, + { // Entry 289 + -0x1.ffffffffffffe0p1023, + -0x1.ffffffffffffep1023 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb54442d18p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb54442d18p1 + }, + { // Entry 292 + 0x1.p0, + 0x1.921fb54442d18p0 + }, + { // Entry 293 + -0x1.p0, + -0x1.921fb54442d18p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.0000000000001p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.0000000000001p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.0p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.0p0 + }, + { // Entry 298 + 0.0, + 0x1.fffffffffffffp-1 + }, + { // Entry 299 + -0.0, + -0x1.fffffffffffffp-1 + }, + { // Entry 300 + 0.0, + 0x1.921fb54442d18p-1 + }, + { // Entry 301 + -0.0, + -0x1.921fb54442d18p-1 + }, + { // Entry 302 + 0.0, + 0x1.0000000000001p-1022 + }, + { // Entry 303 + -0.0, + -0x1.0000000000001p-1022 + }, + { // Entry 304 + 0.0, + 0x1.0p-1022 + }, + { // Entry 305 + -0.0, + -0x1.0p-1022 + }, + { // Entry 306 + 0.0, + 0x1.ffffffffffffep-1023 + }, + { // Entry 307 + -0.0, + -0x1.ffffffffffffep-1023 + }, + { // Entry 308 + 0.0, + 0x1.ffffffffffffcp-1023 + }, + { // Entry 309 + -0.0, + -0x1.ffffffffffffcp-1023 + }, + { // Entry 310 + 0.0, + 0x1.0p-1073 + }, + { // Entry 311 + -0.0, + -0x1.0p-1073 + }, + { // Entry 312 + 0.0, + 0x1.0p-1074 + }, + { // Entry 313 + -0.0, + -0x1.0p-1074 + }, + { // Entry 314 + 0.0, + 0.0 + }, + { // Entry 315 + -0.0, + -0.0 + }, + { // Entry 316 + 0x1.p0, + 0x1.8p0 + }, + { // Entry 317 + -0x1.p0, + -0x1.8p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.4p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.4p1 + }, + { // Entry 320 + 0.0, + 0x1.fffffp-2 + }, + { // Entry 321 + 0.0, + 0x1.0p-1 + }, + { // Entry 322 + 0.0, + 0x1.00001p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffffp-2 + }, + { // Entry 324 + -0.0, + -0x1.0p-1 + }, + { // Entry 325 + -0.0, + -0x1.00001p-1 + }, + { // Entry 326 + 0x1.p0, + 0x1.80001p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffffp0 + }, + { // Entry 328 + -0x1.p0, + -0x1.80001p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffffp0 + } +}; diff --git a/tests/math_data/truncf_intel_data.h b/tests/math_data/truncf_intel_data.h new file mode 100644 index 000000000..1f1a447aa --- /dev/null +++ b/tests/math_data/truncf_intel_data.h @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +static data_1_1_t g_truncf_intel_data[] = { + { // Entry 0 + -0.0, + -0x1.p-149 + }, + { // Entry 1 + 0.0, + 0.0 + }, + { // Entry 2 + 0.0, + 0x1.p-149 + }, + { // Entry 3 + 0.0, + 0x1.fffffep-2 + }, + { // Entry 4 + 0.0, + 0x1.p-1 + }, + { // Entry 5 + 0.0, + 0x1.000002p-1 + }, + { // Entry 6 + 0.0, + 0x1.fffffep-1 + }, + { // Entry 7 + 0x1.p0, + 0x1.p0 + }, + { // Entry 8 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 9 + 0x1.p0, + 0x1.7ffffep0 + }, + { // Entry 10 + 0x1.p0, + 0x1.80p0 + }, + { // Entry 11 + 0x1.p0, + 0x1.800002p0 + }, + { // Entry 12 + 0x1.p0, + 0x1.fffffep0 + }, + { // Entry 13 + 0x1.p1, + 0x1.p1 + }, + { // Entry 14 + 0x1.p1, + 0x1.000002p1 + }, + { // Entry 15 + 0x1.p1, + 0x1.3ffffep1 + }, + { // Entry 16 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 17 + 0x1.p1, + 0x1.400002p1 + }, + { // Entry 18 + 0x1.8cp6, + 0x1.8ffffep6 + }, + { // Entry 19 + 0x1.90p6, + 0x1.90p6 + }, + { // Entry 20 + 0x1.90p6, + 0x1.900002p6 + }, + { // Entry 21 + 0x1.90p6, + 0x1.91fffep6 + }, + { // Entry 22 + 0x1.90p6, + 0x1.92p6 + }, + { // Entry 23 + 0x1.90p6, + 0x1.920002p6 + }, + { // Entry 24 + 0x1.f380p9, + 0x1.f3fffep9 + }, + { // Entry 25 + 0x1.f4p9, + 0x1.f4p9 + }, + { // Entry 26 + 0x1.f4p9, + 0x1.f40002p9 + }, + { // Entry 27 + 0x1.f4p9, + 0x1.f43ffep9 + }, + { // Entry 28 + 0x1.f4p9, + 0x1.f440p9 + }, + { // Entry 29 + 0x1.f4p9, + 0x1.f44002p9 + }, + { // Entry 30 + 0x1.fffff0p20, + 0x1.fffffep20 + }, + { // Entry 31 + 0x1.p21, + 0x1.p21 + }, + { // Entry 32 + 0x1.p21, + 0x1.000002p21 + }, + { // Entry 33 + 0x1.fffff8p21, + 0x1.fffffep21 + }, + { // Entry 34 + 0x1.p22, + 0x1.p22 + }, + { // Entry 35 + 0x1.p22, + 0x1.000002p22 + }, + { // Entry 36 + 0x1.fffffcp22, + 0x1.fffffep22 + }, + { // Entry 37 + 0x1.p23, + 0x1.p23 + }, + { // Entry 38 + 0x1.000002p23, + 0x1.000002p23 + }, + { // Entry 39 + 0x1.fffffep23, + 0x1.fffffep23 + }, + { // Entry 40 + 0x1.p24, + 0x1.p24 + }, + { // Entry 41 + 0x1.000002p24, + 0x1.000002p24 + }, + { // Entry 42 + 0x1.fffffep24, + 0x1.fffffep24 + }, + { // Entry 43 + 0x1.p25, + 0x1.p25 + }, + { // Entry 44 + 0x1.000002p25, + 0x1.000002p25 + }, + { // Entry 45 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 46 + -0.0, + -0x1.000002p-1 + }, + { // Entry 47 + -0.0, + -0x1.p-1 + }, + { // Entry 48 + -0.0, + -0x1.fffffep-2 + }, + { // Entry 49 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 50 + -0x1.p0, + -0x1.p0 + }, + { // Entry 51 + -0.0, + -0x1.fffffep-1 + }, + { // Entry 52 + -0x1.p0, + -0x1.800002p0 + }, + { // Entry 53 + -0x1.p0, + -0x1.80p0 + }, + { // Entry 54 + -0x1.p0, + -0x1.7ffffep0 + }, + { // Entry 55 + -0x1.p1, + -0x1.000002p1 + }, + { // Entry 56 + -0x1.p1, + -0x1.p1 + }, + { // Entry 57 + -0x1.p0, + -0x1.fffffep0 + }, + { // Entry 58 + -0x1.p1, + -0x1.400002p1 + }, + { // Entry 59 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 60 + -0x1.p1, + -0x1.3ffffep1 + }, + { // Entry 61 + -0x1.90p6, + -0x1.900002p6 + }, + { // Entry 62 + -0x1.90p6, + -0x1.90p6 + }, + { // Entry 63 + -0x1.8cp6, + -0x1.8ffffep6 + }, + { // Entry 64 + -0x1.90p6, + -0x1.920002p6 + }, + { // Entry 65 + -0x1.90p6, + -0x1.92p6 + }, + { // Entry 66 + -0x1.90p6, + -0x1.91fffep6 + }, + { // Entry 67 + -0x1.f4p9, + -0x1.f40002p9 + }, + { // Entry 68 + -0x1.f4p9, + -0x1.f4p9 + }, + { // Entry 69 + -0x1.f380p9, + -0x1.f3fffep9 + }, + { // Entry 70 + -0x1.f4p9, + -0x1.f44002p9 + }, + { // Entry 71 + -0x1.f4p9, + -0x1.f440p9 + }, + { // Entry 72 + -0x1.f4p9, + -0x1.f43ffep9 + }, + { // Entry 73 + -0x1.p21, + -0x1.000002p21 + }, + { // Entry 74 + -0x1.p21, + -0x1.p21 + }, + { // Entry 75 + -0x1.fffff0p20, + -0x1.fffffep20 + }, + { // Entry 76 + -0x1.p22, + -0x1.000002p22 + }, + { // Entry 77 + -0x1.p22, + -0x1.p22 + }, + { // Entry 78 + -0x1.fffff8p21, + -0x1.fffffep21 + }, + { // Entry 79 + -0x1.000002p23, + -0x1.000002p23 + }, + { // Entry 80 + -0x1.p23, + -0x1.p23 + }, + { // Entry 81 + -0x1.fffffcp22, + -0x1.fffffep22 + }, + { // Entry 82 + -0x1.000002p24, + -0x1.000002p24 + }, + { // Entry 83 + -0x1.p24, + -0x1.p24 + }, + { // Entry 84 + -0x1.fffffep23, + -0x1.fffffep23 + }, + { // Entry 85 + -0x1.000002p25, + -0x1.000002p25 + }, + { // Entry 86 + -0x1.p25, + -0x1.p25 + }, + { // Entry 87 + -0x1.fffffep24, + -0x1.fffffep24 + }, + { // Entry 88 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 89 + 0x1.fffffep29, + 0x1.fffffep29 + }, + { // Entry 90 + 0x1.p30, + 0x1.p30 + }, + { // Entry 91 + 0x1.000002p30, + 0x1.000002p30 + }, + { // Entry 92 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 93 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 94 + 0x1.p31, + 0x1.p31 + }, + { // Entry 95 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 96 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 97 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 98 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 99 + 0x1.p31, + 0x1.p31 + }, + { // Entry 100 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 101 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 102 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 103 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 104 + 0x1.p31, + 0x1.p31 + }, + { // Entry 105 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 106 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 107 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 108 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 109 + 0x1.p31, + 0x1.p31 + }, + { // Entry 110 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 111 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 112 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 113 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 114 + 0x1.p31, + 0x1.p31 + }, + { // Entry 115 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 116 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 117 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 118 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 119 + 0x1.p31, + 0x1.p31 + }, + { // Entry 120 + 0x1.000002p31, + 0x1.000002p31 + }, + { // Entry 121 + 0x1.000004p31, + 0x1.000004p31 + }, + { // Entry 122 + 0x1.p31, + 0x1.p31 + }, + { // Entry 123 + 0x1.p31, + 0x1.p31 + }, + { // Entry 124 + 0x1.p31, + 0x1.p31 + }, + { // Entry 125 + 0x1.p31, + 0x1.p31 + }, + { // Entry 126 + 0x1.p31, + 0x1.p31 + }, + { // Entry 127 + 0x1.p31, + 0x1.p31 + }, + { // Entry 128 + 0x1.p31, + 0x1.p31 + }, + { // Entry 129 + 0x1.p31, + 0x1.p31 + }, + { // Entry 130 + 0x1.p31, + 0x1.p31 + }, + { // Entry 131 + 0x1.p31, + 0x1.p31 + }, + { // Entry 132 + -0x1.000002p30, + -0x1.000002p30 + }, + { // Entry 133 + -0x1.p30, + -0x1.p30 + }, + { // Entry 134 + -0x1.fffffep29, + -0x1.fffffep29 + }, + { // Entry 135 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 136 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 137 + -0x1.p31, + -0x1.p31 + }, + { // Entry 138 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 139 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 140 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 141 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 142 + -0x1.p31, + -0x1.p31 + }, + { // Entry 143 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 144 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 145 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 146 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 147 + -0x1.p31, + -0x1.p31 + }, + { // Entry 148 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 149 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 150 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 151 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 152 + -0x1.p31, + -0x1.p31 + }, + { // Entry 153 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 154 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 155 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 156 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 157 + -0x1.p31, + -0x1.p31 + }, + { // Entry 158 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 159 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 160 + -0x1.000004p31, + -0x1.000004p31 + }, + { // Entry 161 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 162 + -0x1.p31, + -0x1.p31 + }, + { // Entry 163 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 164 + -0x1.fffffcp30, + -0x1.fffffcp30 + }, + { // Entry 165 + -0x1.p31, + -0x1.p31 + }, + { // Entry 166 + -0x1.p31, + -0x1.p31 + }, + { // Entry 167 + -0x1.p31, + -0x1.p31 + }, + { // Entry 168 + -0x1.p31, + -0x1.p31 + }, + { // Entry 169 + -0x1.p31, + -0x1.p31 + }, + { // Entry 170 + -0x1.p31, + -0x1.p31 + }, + { // Entry 171 + -0x1.p31, + -0x1.p31 + }, + { // Entry 172 + -0x1.p31, + -0x1.p31 + }, + { // Entry 173 + -0x1.p31, + -0x1.p31 + }, + { // Entry 174 + -0x1.p31, + -0x1.p31 + }, + { // Entry 175 + 0x1.fffffcp61, + 0x1.fffffcp61 + }, + { // Entry 176 + 0x1.fffffep61, + 0x1.fffffep61 + }, + { // Entry 177 + 0x1.p62, + 0x1.p62 + }, + { // Entry 178 + 0x1.000002p62, + 0x1.000002p62 + }, + { // Entry 179 + 0x1.000004p62, + 0x1.000004p62 + }, + { // Entry 180 + 0x1.fffffcp62, + 0x1.fffffcp62 + }, + { // Entry 181 + 0x1.fffffep62, + 0x1.fffffep62 + }, + { // Entry 182 + 0x1.p63, + 0x1.p63 + }, + { // Entry 183 + 0x1.000002p63, + 0x1.000002p63 + }, + { // Entry 184 + 0x1.000004p63, + 0x1.000004p63 + }, + { // Entry 185 + 0x1.fffffcp63, + 0x1.fffffcp63 + }, + { // Entry 186 + 0x1.fffffep63, + 0x1.fffffep63 + }, + { // Entry 187 + 0x1.p64, + 0x1.p64 + }, + { // Entry 188 + 0x1.000002p64, + 0x1.000002p64 + }, + { // Entry 189 + 0x1.000004p64, + 0x1.000004p64 + }, + { // Entry 190 + -0x1.000004p62, + -0x1.000004p62 + }, + { // Entry 191 + -0x1.000002p62, + -0x1.000002p62 + }, + { // Entry 192 + -0x1.p62, + -0x1.p62 + }, + { // Entry 193 + -0x1.fffffep61, + -0x1.fffffep61 + }, + { // Entry 194 + -0x1.fffffcp61, + -0x1.fffffcp61 + }, + { // Entry 195 + -0x1.000004p63, + -0x1.000004p63 + }, + { // Entry 196 + -0x1.000002p63, + -0x1.000002p63 + }, + { // Entry 197 + -0x1.p63, + -0x1.p63 + }, + { // Entry 198 + -0x1.fffffep62, + -0x1.fffffep62 + }, + { // Entry 199 + -0x1.fffffcp62, + -0x1.fffffcp62 + }, + { // Entry 200 + -0x1.000004p64, + -0x1.000004p64 + }, + { // Entry 201 + -0x1.000002p64, + -0x1.000002p64 + }, + { // Entry 202 + -0x1.p64, + -0x1.p64 + }, + { // Entry 203 + -0x1.fffffep63, + -0x1.fffffep63 + }, + { // Entry 204 + -0x1.fffffcp63, + -0x1.fffffcp63 + }, + { // Entry 205 + 0x1.p62, + 0x1.p62 + }, + { // Entry 206 + 0x1.p63, + 0x1.p63 + }, + { // Entry 207 + -0x1.p62, + -0x1.p62 + }, + { // Entry 208 + -0x1.p63, + -0x1.p63 + }, + { // Entry 209 + 0x1.fffffcp30, + 0x1.fffffcp30 + }, + { // Entry 210 + 0x1.fffffep30, + 0x1.fffffep30 + }, + { // Entry 211 + 0x1.p31, + 0x1.p31 + }, + { // Entry 212 + -0x1.000002p31, + -0x1.000002p31 + }, + { // Entry 213 + -0x1.p31, + -0x1.p31 + }, + { // Entry 214 + -0x1.fffffep30, + -0x1.fffffep30 + }, + { // Entry 215 + 0x1.80p1, + 0x1.fffffep1 + }, + { // Entry 216 + 0x1.p2, + 0x1.p2 + }, + { // Entry 217 + 0x1.p2, + 0x1.000002p2 + }, + { // Entry 218 + 0x1.c0p2, + 0x1.fffffep2 + }, + { // Entry 219 + 0x1.p3, + 0x1.p3 + }, + { // Entry 220 + 0x1.p3, + 0x1.000002p3 + }, + { // Entry 221 + 0x1.e0p3, + 0x1.fffffep3 + }, + { // Entry 222 + 0x1.p4, + 0x1.p4 + }, + { // Entry 223 + 0x1.p4, + 0x1.000002p4 + }, + { // Entry 224 + 0x1.f0p4, + 0x1.fffffep4 + }, + { // Entry 225 + 0x1.p5, + 0x1.p5 + }, + { // Entry 226 + 0x1.p5, + 0x1.000002p5 + }, + { // Entry 227 + 0x1.f8p5, + 0x1.fffffep5 + }, + { // Entry 228 + 0x1.p6, + 0x1.p6 + }, + { // Entry 229 + 0x1.p6, + 0x1.000002p6 + }, + { // Entry 230 + 0x1.fcp6, + 0x1.fffffep6 + }, + { // Entry 231 + 0x1.p7, + 0x1.p7 + }, + { // Entry 232 + 0x1.p7, + 0x1.000002p7 + }, + { // Entry 233 + 0x1.fep7, + 0x1.fffffep7 + }, + { // Entry 234 + 0x1.p8, + 0x1.p8 + }, + { // Entry 235 + 0x1.p8, + 0x1.000002p8 + }, + { // Entry 236 + 0x1.ffp8, + 0x1.fffffep8 + }, + { // Entry 237 + 0x1.p9, + 0x1.p9 + }, + { // Entry 238 + 0x1.p9, + 0x1.000002p9 + }, + { // Entry 239 + 0x1.ff80p9, + 0x1.fffffep9 + }, + { // Entry 240 + 0x1.p10, + 0x1.p10 + }, + { // Entry 241 + 0x1.p10, + 0x1.000002p10 + }, + { // Entry 242 + 0x1.ffc0p10, + 0x1.fffffep10 + }, + { // Entry 243 + 0x1.p11, + 0x1.p11 + }, + { // Entry 244 + 0x1.p11, + 0x1.000002p11 + }, + { // Entry 245 + 0x1.ffe0p11, + 0x1.fffffep11 + }, + { // Entry 246 + 0x1.p12, + 0x1.p12 + }, + { // Entry 247 + 0x1.p12, + 0x1.000002p12 + }, + { // Entry 248 + 0x1.p2, + 0x1.1ffffep2 + }, + { // Entry 249 + 0x1.p2, + 0x1.20p2 + }, + { // Entry 250 + 0x1.p2, + 0x1.200002p2 + }, + { // Entry 251 + 0x1.p3, + 0x1.0ffffep3 + }, + { // Entry 252 + 0x1.p3, + 0x1.10p3 + }, + { // Entry 253 + 0x1.p3, + 0x1.100002p3 + }, + { // Entry 254 + 0x1.p4, + 0x1.07fffep4 + }, + { // Entry 255 + 0x1.p4, + 0x1.08p4 + }, + { // Entry 256 + 0x1.p4, + 0x1.080002p4 + }, + { // Entry 257 + 0x1.p5, + 0x1.03fffep5 + }, + { // Entry 258 + 0x1.p5, + 0x1.04p5 + }, + { // Entry 259 + 0x1.p5, + 0x1.040002p5 + }, + { // Entry 260 + 0x1.p6, + 0x1.01fffep6 + }, + { // Entry 261 + 0x1.p6, + 0x1.02p6 + }, + { // Entry 262 + 0x1.p6, + 0x1.020002p6 + }, + { // Entry 263 + 0x1.p7, + 0x1.00fffep7 + }, + { // Entry 264 + 0x1.p7, + 0x1.01p7 + }, + { // Entry 265 + 0x1.p7, + 0x1.010002p7 + }, + { // Entry 266 + 0x1.p8, + 0x1.007ffep8 + }, + { // Entry 267 + 0x1.p8, + 0x1.0080p8 + }, + { // Entry 268 + 0x1.p8, + 0x1.008002p8 + }, + { // Entry 269 + 0x1.p9, + 0x1.003ffep9 + }, + { // Entry 270 + 0x1.p9, + 0x1.0040p9 + }, + { // Entry 271 + 0x1.p9, + 0x1.004002p9 + }, + { // Entry 272 + 0x1.p10, + 0x1.001ffep10 + }, + { // Entry 273 + 0x1.p10, + 0x1.0020p10 + }, + { // Entry 274 + 0x1.p10, + 0x1.002002p10 + }, + { // Entry 275 + 0x1.0040p10, + 0x1.005ffep10 + }, + { // Entry 276 + 0x1.0040p10, + 0x1.0060p10 + }, + { // Entry 277 + 0x1.0040p10, + 0x1.006002p10 + }, + { // Entry 278 + 0x1.p11, + 0x1.000ffep11 + }, + { // Entry 279 + 0x1.p11, + 0x1.0010p11 + }, + { // Entry 280 + 0x1.p11, + 0x1.001002p11 + }, + { // Entry 281 + 0x1.p12, + 0x1.0007fep12 + }, + { // Entry 282 + 0x1.p12, + 0x1.0008p12 + }, + { // Entry 283 + 0x1.p12, + 0x1.000802p12 + }, + { // Entry 284 + HUGE_VALF, + HUGE_VALF + }, + { // Entry 285 + -HUGE_VALF, + -HUGE_VALF + }, + { // Entry 286 + 0x1.fffffep127, + 0x1.fffffep127 + }, + { // Entry 287 + -0x1.fffffep127, + -0x1.fffffep127 + }, + { // Entry 288 + 0x1.fffffcp127, + 0x1.fffffcp127 + }, + { // Entry 289 + -0x1.fffffcp127, + -0x1.fffffcp127 + }, + { // Entry 290 + 0x1.80p1, + 0x1.921fb6p1 + }, + { // Entry 291 + -0x1.80p1, + -0x1.921fb6p1 + }, + { // Entry 292 + 0x1.p0, + 0x1.921fb6p0 + }, + { // Entry 293 + -0x1.p0, + -0x1.921fb6p0 + }, + { // Entry 294 + 0x1.p0, + 0x1.000002p0 + }, + { // Entry 295 + -0x1.p0, + -0x1.000002p0 + }, + { // Entry 296 + 0x1.p0, + 0x1.p0 + }, + { // Entry 297 + -0x1.p0, + -0x1.p0 + }, + { // Entry 298 + 0.0, + 0x1.fffffep-1 + }, + { // Entry 299 + -0.0, + -0x1.fffffep-1 + }, + { // Entry 300 + 0.0, + 0x1.921fb6p-1 + }, + { // Entry 301 + -0.0, + -0x1.921fb6p-1 + }, + { // Entry 302 + 0.0, + 0x1.000002p-126 + }, + { // Entry 303 + -0.0, + -0x1.000002p-126 + }, + { // Entry 304 + 0.0, + 0x1.p-126 + }, + { // Entry 305 + -0.0, + -0x1.p-126 + }, + { // Entry 306 + 0.0, + 0x1.fffffcp-127 + }, + { // Entry 307 + -0.0, + -0x1.fffffcp-127 + }, + { // Entry 308 + 0.0, + 0x1.fffff8p-127 + }, + { // Entry 309 + -0.0, + -0x1.fffff8p-127 + }, + { // Entry 310 + 0.0, + 0x1.p-148 + }, + { // Entry 311 + -0.0, + -0x1.p-148 + }, + { // Entry 312 + 0.0, + 0x1.p-149 + }, + { // Entry 313 + -0.0, + -0x1.p-149 + }, + { // Entry 314 + 0.0, + 0.0f + }, + { // Entry 315 + -0.0, + -0.0f + }, + { // Entry 316 + 0x1.p0, + 0x1.80p0 + }, + { // Entry 317 + -0x1.p0, + -0x1.80p0 + }, + { // Entry 318 + 0x1.p1, + 0x1.40p1 + }, + { // Entry 319 + -0x1.p1, + -0x1.40p1 + }, + { // Entry 320 + 0.0, + 0x1.fffff0p-2 + }, + { // Entry 321 + 0.0, + 0x1.p-1 + }, + { // Entry 322 + 0.0, + 0x1.000010p-1 + }, + { // Entry 323 + -0.0, + -0x1.fffff0p-2 + }, + { // Entry 324 + -0.0, + -0x1.p-1 + }, + { // Entry 325 + -0.0, + -0x1.000010p-1 + }, + { // Entry 326 + 0x1.p0, + 0x1.800010p0 + }, + { // Entry 327 + 0x1.p0, + 0x1.7ffff0p0 + }, + { // Entry 328 + -0x1.p0, + -0x1.800010p0 + }, + { // Entry 329 + -0x1.p0, + -0x1.7ffff0p0 + } +}; diff --git a/tests/math_data_test.h b/tests/math_data_test.h index f3d25ef21..8aa2bf180 100644 --- a/tests/math_data_test.h +++ b/tests/math_data_test.h @@ -24,6 +24,12 @@ struct data_1_1_t { T1 input; }; +template +struct data_int_1_t { + int expected; + T1 input; +}; + template struct data_1_2_t { RT expected; @@ -38,6 +44,29 @@ struct data_2_1_t { T input; }; +template +struct data_1_int_1_t { + RT1 expected1; + int expected2; + T input; +}; + +template +struct data_1_int_2_t { + RT1 expected1; + int expected2; + T1 input1; + T2 input2; +}; + +template +struct data_1_3_t { + RT expected; + T1 input1; + T2 input2; + T3 input3; +}; + template union fp_u; template <> union fp_u { @@ -117,6 +146,17 @@ void DoMathDataTest(data_1_1_t (&data)[N], RT f(T)) { } } +// Runs through the array 'data' applying 'f' to each of the input values +// and asserting that the result is within ULP ulps of the expected value. +// For testing a (double) -> int function like ilogb(3). +template +void DoMathDataTest(data_int_1_t (&data)[N], int f(T)) { + fesetenv(FE_DFL_ENV); + for (size_t i = 0; i < N; ++i) { + EXPECT_EQ(data[i].expected, f(data[i].input)) << "Failed on element " << i; + } +} + // Runs through the array 'data' applying 'f' to each of the pairs of input values // and asserting that the result is within ULP ulps of the expected value. // For testing a (double, double) -> double function like pow(3). @@ -146,3 +186,66 @@ void DoMathDataTest(data_2_1_t (&data)[N], void f(T1, RT1*, RT2*)) EXPECT_PRED_FORMAT2(predicate2, data[i].expected2, out2) << "Failed on element " << i; } } + +// Runs through the array 'data' applying 'f' to each of the input values +// and asserting that the results are within ULP ulps of the expected values. +// For testing a (double, double*) -> double function like modf(3). +template +void DoMathDataTest(data_2_1_t (&data)[N], RT1 f(T1, RT2*)) { + fesetenv(FE_DFL_ENV); + FpUlpEq predicate1; + FpUlpEq predicate2; + for (size_t i = 0; i < N; ++i) { + RT1 out1; + RT2 out2; + out1 = f(data[i].input, &out2); + EXPECT_PRED_FORMAT2(predicate1, data[i].expected1, out1) << "Failed on element " << i; + EXPECT_PRED_FORMAT2(predicate2, data[i].expected2, out2) << "Failed on element " << i; + } +} + +// Runs through the array 'data' applying 'f' to each of the input values +// and asserting that the results are within ULP ulps of the expected values. +// For testing a (double, int*) -> double function like frexp(3). +template +void DoMathDataTest(data_1_int_1_t (&data)[N], RT1 f(T1, int*)) { + fesetenv(FE_DFL_ENV); + FpUlpEq predicate1; + for (size_t i = 0; i < N; ++i) { + RT1 out1; + int out2; + out1 = f(data[i].input, &out2); + EXPECT_PRED_FORMAT2(predicate1, data[i].expected1, out1) << "Failed on element " << i; + EXPECT_EQ(data[i].expected2, out2) << "Failed on element " << i; + } +} + +// Runs through the array 'data' applying 'f' to each of the input values +// and asserting that the results are within ULP ulps of the expected values. +// For testing a (double, double, int*) -> double function like remquo(3). +template +void DoMathDataTest(data_1_int_2_t (&data)[N], RT1 f(T1, T2, int*)) { + fesetenv(FE_DFL_ENV); + FpUlpEq predicate1; + for (size_t i = 0; i < N; ++i) { + RT1 out1; + int out2; + out1 = f(data[i].input1, data[i].input2, &out2); + EXPECT_PRED_FORMAT2(predicate1, data[i].expected1, out1) << "Failed on element " << i; + EXPECT_EQ(data[i].expected2, out2) << "Failed on element " << i; + } +} + +// Runs through the array 'data' applying 'f' to each of the pairs of input values +// and asserting that the result is within ULP ulps of the expected value. +// For testing a (double, double, double) -> double function like fma(3). +template +void DoMathDataTest(data_1_3_t (&data)[N], RT f(T1, T2, T3)) { + fesetenv(FE_DFL_ENV); + FpUlpEq predicate; + for (size_t i = 0; i < N; ++i) { + EXPECT_PRED_FORMAT2(predicate, + data[i].expected, f(data[i].input1, data[i].input2, data[i].input3)) << "Failed on element " << i; + } +} + diff --git a/tests/math_test.cpp b/tests/math_test.cpp index e14d3ddf4..e616e9b08 100644 --- a/tests/math_test.cpp +++ b/tests/math_test.cpp @@ -1379,72 +1379,492 @@ TEST(math, nextafterl_OpenBSD_bug) { ASSERT_TRUE(nextafterl(1.0L, 0.0L) - 1.0L < 0.0L); } -#include "math_cos_intel_data.h" +#include "math_data/acos_intel_data.h" +TEST(math, acos_intel) { + DoMathDataTest<1>(g_acos_intel_data, acos); +} + +#include "math_data/acosf_intel_data.h" +TEST(math, acosf_intel) { + DoMathDataTest<1>(g_acosf_intel_data, acosf); +} + +#include "math_data/acosh_intel_data.h" +TEST(math, acosh_intel) { + DoMathDataTest<2>(g_acosh_intel_data, acosh); +} + +#include "math_data/acoshf_intel_data.h" +TEST(math, acoshf_intel) { + DoMathDataTest<2>(g_acoshf_intel_data, acoshf); +} + +#include "math_data/asin_intel_data.h" +TEST(math, asin_intel) { + DoMathDataTest<1>(g_asin_intel_data, asin); +} + +#include "math_data/asinf_intel_data.h" +TEST(math, asinf_intel) { + DoMathDataTest<1>(g_asinf_intel_data, asinf); +} + +#include "math_data/asinh_intel_data.h" +TEST(math, asinh_intel) { + DoMathDataTest<2>(g_asinh_intel_data, asinh); +} + +#include "math_data/asinhf_intel_data.h" +TEST(math, asinhf_intel) { + DoMathDataTest<2>(g_asinhf_intel_data, asinhf); +} + +#include "math_data/atan2_intel_data.h" +TEST(math, atan2_intel) { + DoMathDataTest<2>(g_atan2_intel_data, atan2); +} + +#include "math_data/atan2f_intel_data.h" +TEST(math, atan2f_intel) { + DoMathDataTest<2>(g_atan2f_intel_data, atan2f); +} + +#include "math_data/atan_intel_data.h" +TEST(math, atan_intel) { + DoMathDataTest<1>(g_atan_intel_data, atan); +} + +#include "math_data/atanf_intel_data.h" +TEST(math, atanf_intel) { + DoMathDataTest<1>(g_atanf_intel_data, atanf); +} + +#include "math_data/atanh_intel_data.h" +TEST(math, atanh_intel) { + DoMathDataTest<2>(g_atanh_intel_data, atanh); +} + +#include "math_data/atanhf_intel_data.h" +TEST(math, atanhf_intel) { + DoMathDataTest<2>(g_atanhf_intel_data, atanhf); +} + +#include "math_data/cbrt_intel_data.h" +TEST(math, cbrt_intel) { + DoMathDataTest<1>(g_cbrt_intel_data, cbrt); +} + +#include "math_data/cbrtf_intel_data.h" +TEST(math, cbrtf_intel) { + DoMathDataTest<1>(g_cbrtf_intel_data, cbrtf); +} + +#include "math_data/ceil_intel_data.h" +TEST(math, ceil_intel) { + DoMathDataTest<1>(g_ceil_intel_data, ceil); +} + +#include "math_data/ceilf_intel_data.h" +TEST(math, ceilf_intel) { + DoMathDataTest<1>(g_ceilf_intel_data, ceilf); +} + +#include "math_data/copysign_intel_data.h" +TEST(math, copysign_intel) { + DoMathDataTest<1>(g_copysign_intel_data, copysign); +} + +#include "math_data/copysignf_intel_data.h" +TEST(math, copysignf_intel) { + DoMathDataTest<1>(g_copysignf_intel_data, copysignf); +} + +#include "math_data/cos_intel_data.h" TEST(math, cos_intel) { DoMathDataTest<1>(g_cos_intel_data, cos); } -#include "math_cosf_intel_data.h" +#include "math_data/cosf_intel_data.h" TEST(math, cosf_intel) { DoMathDataTest<1>(g_cosf_intel_data, cosf); } -#include "math_exp_intel_data.h" +#include "math_data/cosh_intel_data.h" +TEST(math, cosh_intel) { + DoMathDataTest<2>(g_cosh_intel_data, cosh); +} + +#include "math_data/coshf_intel_data.h" +TEST(math, coshf_intel) { + DoMathDataTest<2>(g_coshf_intel_data, coshf); +} + +#include "math_data/exp_intel_data.h" TEST(math, exp_intel) { DoMathDataTest<1>(g_exp_intel_data, exp); } -#include "math_expf_intel_data.h" +#include "math_data/expf_intel_data.h" TEST(math, expf_intel) { DoMathDataTest<1>(g_expf_intel_data, expf); } -#include "math_log_intel_data.h" +#include "math_data/exp2_intel_data.h" +TEST(math, exp2_intel) { + DoMathDataTest<1>(g_exp2_intel_data, exp2); +} + +#include "math_data/exp2f_intel_data.h" +TEST(math, exp2f_intel) { + DoMathDataTest<1>(g_exp2f_intel_data, exp2f); +} + +#include "math_data/expm1_intel_data.h" +TEST(math, expm1_intel) { + DoMathDataTest<1>(g_expm1_intel_data, expm1); +} + +#include "math_data/expm1f_intel_data.h" +TEST(math, expm1f_intel) { + DoMathDataTest<1>(g_expm1f_intel_data, expm1f); +} + +#include "math_data/fabs_intel_data.h" +TEST(math, fabs_intel) { + DoMathDataTest<1>(g_fabs_intel_data, fabs); +} + +#include "math_data/fabsf_intel_data.h" +TEST(math, fabsf_intel) { + DoMathDataTest<1>(g_fabsf_intel_data, fabsf); +} + +#include "math_data/fdim_intel_data.h" +TEST(math, fdim_intel) { + DoMathDataTest<1>(g_fdim_intel_data, fdim); +} + +#include "math_data/fdimf_intel_data.h" +TEST(math, fdimf_intel) { + DoMathDataTest<1>(g_fdimf_intel_data, fdimf); +} + +#include "math_data/floor_intel_data.h" +TEST(math, floor_intel) { + DoMathDataTest<1>(g_floor_intel_data, floor); +} + +#include "math_data/floorf_intel_data.h" +TEST(math, floorf_intel) { + DoMathDataTest<1>(g_floorf_intel_data, floorf); +} + +#include "math_data/fma_intel_data.h" +TEST(math, fma_intel) { + DoMathDataTest<1>(g_fma_intel_data, fma); +} + +#include "math_data/fmaf_intel_data.h" +TEST(math, fmaf_intel) { + DoMathDataTest<1>(g_fmaf_intel_data, fmaf); +} + +#include "math_data/fmax_intel_data.h" +TEST(math, fmax_intel) { + DoMathDataTest<1>(g_fmax_intel_data, fmax); +} + +#include "math_data/fmaxf_intel_data.h" +TEST(math, fmaxf_intel) { + DoMathDataTest<1>(g_fmaxf_intel_data, fmaxf); +} + +#include "math_data/fmin_intel_data.h" +TEST(math, fmin_intel) { + DoMathDataTest<1>(g_fmin_intel_data, fmin); +} + +#include "math_data/fminf_intel_data.h" +TEST(math, fminf_intel) { + DoMathDataTest<1>(g_fminf_intel_data, fminf); +} + +#include "math_data/fmod_intel_data.h" +TEST(math, fmod_intel) { + DoMathDataTest<1>(g_fmod_intel_data, fmod); +} + +#include "math_data/fmodf_intel_data.h" +TEST(math, fmodf_intel) { + DoMathDataTest<1>(g_fmodf_intel_data, fmodf); +} + +#include "math_data/frexp_intel_data.h" +TEST(math, frexp_intel) { + DoMathDataTest<1>(g_frexp_intel_data, frexp); +} + +#include "math_data/frexpf_intel_data.h" +TEST(math, frexpf_intel) { + DoMathDataTest<1>(g_frexpf_intel_data, frexpf); +} + +#include "math_data/hypot_intel_data.h" +TEST(math, hypot_intel) { + DoMathDataTest<1>(g_hypot_intel_data, hypot); +} + +#include "math_data/hypotf_intel_data.h" +TEST(math, hypotf_intel) { + DoMathDataTest<1>(g_hypotf_intel_data, hypotf); +} + +#include "math_data/ilogb_intel_data.h" +TEST(math, ilogb_intel) { + DoMathDataTest<1>(g_ilogb_intel_data, ilogb); +} + +#include "math_data/ilogbf_intel_data.h" +TEST(math, ilogbf_intel) { + DoMathDataTest<1>(g_ilogbf_intel_data, ilogbf); +} + +#include "math_data/ldexp_intel_data.h" +TEST(math, ldexp_intel) { + DoMathDataTest<1>(g_ldexp_intel_data, ldexp); +} + +#include "math_data/ldexpf_intel_data.h" +TEST(math, ldexpf_intel) { + DoMathDataTest<1>(g_ldexpf_intel_data, ldexpf); +} + +#include "math_data/log_intel_data.h" TEST(math, log_intel) { DoMathDataTest<1>(g_log_intel_data, log); } -#include "math_logf_intel_data.h" +#include "math_data/logf_intel_data.h" TEST(math, logf_intel) { DoMathDataTest<1>(g_logf_intel_data, logf); } -#include "math_pow_intel_data.h" +#include "math_data/log10_intel_data.h" +TEST(math, log10_intel) { + DoMathDataTest<1>(g_log10_intel_data, log10); +} + +#include "math_data/log10f_intel_data.h" +TEST(math, log10f_intel) { + DoMathDataTest<1>(g_log10f_intel_data, log10f); +} + +#include "math_data/log1p_intel_data.h" +TEST(math, log1p_intel) { + DoMathDataTest<1>(g_log1p_intel_data, log1p); +} + +#include "math_data/log1pf_intel_data.h" +TEST(math, log1pf_intel) { + DoMathDataTest<1>(g_log1pf_intel_data, log1pf); +} + +#include "math_data/log2_intel_data.h" +TEST(math, log2_intel) { + DoMathDataTest<1>(g_log2_intel_data, log2); +} + +#include "math_data/log2f_intel_data.h" +TEST(math, log2f_intel) { + DoMathDataTest<1>(g_log2f_intel_data, log2f); +} + +#include "math_data/logb_intel_data.h" +TEST(math, logb_intel) { + DoMathDataTest<1>(g_logb_intel_data, logb); +} + +#include "math_data/logbf_intel_data.h" +TEST(math, logbf_intel) { + DoMathDataTest<1>(g_logbf_intel_data, logbf); +} + +#include "math_data/modf_intel_data.h" +TEST(math, modf_intel) { + DoMathDataTest<1>(g_modf_intel_data, modf); +} + +#include "math_data/modff_intel_data.h" +TEST(math, modff_intel) { + DoMathDataTest<1>(g_modff_intel_data, modff); +} + +#include "math_data/nearbyint_intel_data.h" +TEST(math, nearbyint_intel) { + DoMathDataTest<1>(g_nearbyint_intel_data, nearbyint); +} + +#include "math_data/nearbyintf_intel_data.h" +TEST(math, nearbyintf_intel) { + DoMathDataTest<1>(g_nearbyintf_intel_data, nearbyintf); +} + +#include "math_data/nextafter_intel_data.h" +TEST(math, nextafter_intel) { + DoMathDataTest<1>(g_nextafter_intel_data, nextafter); +} + +#include "math_data/nextafterf_intel_data.h" +TEST(math, nextafterf_intel) { + DoMathDataTest<1>(g_nextafterf_intel_data, nextafterf); +} + +#include "math_data/pow_intel_data.h" TEST(math, pow_intel) { DoMathDataTest<1>(g_pow_intel_data, pow); } -#include "math_powf_intel_data.h" +#include "math_data/powf_intel_data.h" TEST(math, powf_intel) { DoMathDataTest<1>(g_powf_intel_data, powf); } -#include "math_sin_intel_data.h" +#include "math_data/remainder_intel_data.h" +TEST(math, remainder_intel) { + DoMathDataTest<1>(g_remainder_intel_data, remainder); +} + +#include "math_data/remainderf_intel_data.h" +TEST(math, remainderf_intel) { + DoMathDataTest<1>(g_remainderf_intel_data, remainderf); +} + +#include "math_data/remquo_intel_data.h" +TEST(math, remquo_intel) { + DoMathDataTest<1>(g_remquo_intel_data, remquo); +} + +#include "math_data/remquof_intel_data.h" +TEST(math, remquof_intel) { + DoMathDataTest<1>(g_remquof_intel_data, remquof); +} + +#include "math_data/rint_intel_data.h" +TEST(math, rint_intel) { + DoMathDataTest<1>(g_rint_intel_data, rint); +} + +#include "math_data/rintf_intel_data.h" +TEST(math, rintf_intel) { + DoMathDataTest<1>(g_rintf_intel_data, rintf); +} + +#include "math_data/round_intel_data.h" +TEST(math, round_intel) { + DoMathDataTest<1>(g_round_intel_data, round); +} + +#include "math_data/roundf_intel_data.h" +TEST(math, roundf_intel) { + DoMathDataTest<1>(g_roundf_intel_data, roundf); +} + +#include "math_data/scalb_intel_data.h" +TEST(math, scalb_intel) { + DoMathDataTest<1>(g_scalb_intel_data, scalb); +} + +#include "math_data/scalbf_intel_data.h" +TEST(math, scalbf_intel) { + DoMathDataTest<1>(g_scalbf_intel_data, scalbf); +} + +#include "math_data/scalbn_intel_data.h" +TEST(math, scalbn_intel) { + DoMathDataTest<1>(g_scalbn_intel_data, scalbn); +} + +#include "math_data/scalbnf_intel_data.h" +TEST(math, scalbnf_intel) { + DoMathDataTest<1>(g_scalbnf_intel_data, scalbnf); +} + +#include "math_data/significand_intel_data.h" +TEST(math, significand_intel) { + DoMathDataTest<1>(g_significand_intel_data, significand); +} + +#include "math_data/significandf_intel_data.h" +TEST(math, significandf_intel) { + DoMathDataTest<1>(g_significandf_intel_data, significandf); +} + +#include "math_data/sin_intel_data.h" TEST(math, sin_intel) { DoMathDataTest<1>(g_sin_intel_data, sin); } -#include "math_sincos_intel_data.h" -TEST(math, sincos_intel) { - DoMathDataTest<1>(g_sincos_intel_data, sincos); -} - -#include "math_sincosf_intel_data.h" -TEST(math, sincosf_intel) { - DoMathDataTest<1>(g_sincosf_intel_data, sincosf); -} - -#include "math_sinf_intel_data.h" +#include "math_data/sinf_intel_data.h" TEST(math, sinf_intel) { DoMathDataTest<1>(g_sinf_intel_data, sinf); } -#include "math_tan_intel_data.h" +#include "math_data/sinh_intel_data.h" +TEST(math, sinh_intel) { + DoMathDataTest<2>(g_sinh_intel_data, sinh); +} + +#include "math_data/sinhf_intel_data.h" +TEST(math, sinhf_intel) { + DoMathDataTest<2>(g_sinhf_intel_data, sinhf); +} + +#include "math_data/sincos_intel_data.h" +TEST(math, sincos_intel) { + DoMathDataTest<1>(g_sincos_intel_data, sincos); +} + +#include "math_data/sincosf_intel_data.h" +TEST(math, sincosf_intel) { + DoMathDataTest<1>(g_sincosf_intel_data, sincosf); +} + +#include "math_data/sqrt_intel_data.h" +TEST(math, sqrt_intel) { + DoMathDataTest<1>(g_sqrt_intel_data, sqrt); +} + +#include "math_data/sqrtf_intel_data.h" +TEST(math, sqrtf_intel) { + DoMathDataTest<1>(g_sqrtf_intel_data, sqrtf); +} + +#include "math_data/tan_intel_data.h" TEST(math, tan_intel) { DoMathDataTest<1>(g_tan_intel_data, tan); } -#include "math_tanf_intel_data.h" +#include "math_data/tanf_intel_data.h" TEST(math, tanf_intel) { DoMathDataTest<1>(g_tanf_intel_data, tanf); } + +#include "math_data/tanh_intel_data.h" +TEST(math, tanh_intel) { + DoMathDataTest<2>(g_tanh_intel_data, tanh); +} + +#include "math_data/tanhf_intel_data.h" +TEST(math, tanhf_intel) { + DoMathDataTest<2>(g_tanhf_intel_data, tanhf); +} + +#include "math_data/trunc_intel_data.h" +TEST(math, trunc_intel) { + DoMathDataTest<1>(g_trunc_intel_data, trunc); +} + +#include "math_data/truncf_intel_data.h" +TEST(math, truncf_intel) { + DoMathDataTest<1>(g_truncf_intel_data, truncf); +} From c9d09431b982b44ebec5b1ca0913e80f13aba809 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Fri, 13 Feb 2015 10:52:35 -0800 Subject: [PATCH 118/194] Declare getgrent/setgrent/endgrent as missing. Bug: 19340053 Change-Id: I42bfeda95e6f262e2e74ab47336ea346c2de7e4a --- libc/include/grp.h | 6 +++--- libc/include/sys/cdefs.h | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libc/include/grp.h b/libc/include/grp.h index fc4d52031..ab900223a 100644 --- a/libc/include/grp.h +++ b/libc/include/grp.h @@ -54,9 +54,9 @@ __BEGIN_DECLS struct group *getgrgid(gid_t); struct group *getgrnam(const char *); #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE -struct group *getgrent(void); -void setgrent(void); -void endgrent(void); +struct group *getgrent(void) __errorattr("This function is meaningless on Android."); +__errordecl(setgrent, "This function is meaningless on Android."); +__errordecl(endgrent, "This function is meaningless on Android."); int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); int getgrnam_r(const char *, struct group *, char *, diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 48763d730..1d33895e9 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -335,13 +335,15 @@ #endif #if __GNUC_PREREQ(4, 3) -#define __errordecl(name, msg) extern void name(void) __attribute__((__error__(msg))) +#define __errorattr(msg) __attribute__((__error__(msg))) #define __warnattr(msg) __attribute__((__warning__(msg))) #else -#define __errordecl(name, msg) extern void name(void) +#define __errorattr(msg) #define __warnattr(msg) #endif +#define __errordecl(name, msg) extern void name(void) __errorattr(msg) + /* * Some BSD source needs these macros. * Originally they embedded the rcs versions of each source file From 13ed3f0af15ebd5b10aa44f8f51a5bba1b3bd9fc Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 13 Feb 2015 16:25:43 -0800 Subject: [PATCH 119/194] Add missing SHT_LOOS/SHT_HIOS values Change-Id: Ib0b0987a7e85af7863c6ef894263b5980e32344d --- libc/include/elf.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libc/include/elf.h b/libc/include/elf.h index 2039cc056..a41a2441a 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -106,6 +106,9 @@ typedef struct { #define STB_LOPROC 13 #define STB_HIPROC 15 +#define SHT_LOOS 0x60000000 +#define SHT_HIOS 0x6fffffff + #define STT_GNU_IFUNC 10 #define STT_LOOS 10 #define STT_HIOS 12 From c6292ea39cce054175e4f9f797c05aeb8da0ac4b Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 13 Feb 2015 16:29:50 -0800 Subject: [PATCH 120/194] Fix: DT_DEBUG was acting as DT_REL on mips64 Change-Id: I88827aa07d75d06d606c987e6270fcca3ae6216f --- linker/linker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 39344849e..5d2425f52 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -2040,8 +2040,8 @@ bool soinfo::prelink_image() { if ((dynamic_flags & PF_W) != 0) { d->d_un.d_val = reinterpret_cast(&_r_debug); } - break; #endif + break; #if defined(USE_RELA) case DT_RELA: rela_ = reinterpret_cast(load_bias + d->d_un.d_ptr); From 41ef902379ba24bd8a3ca6d7733b8376efb55ebd Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sat, 14 Feb 2015 13:21:22 -0800 Subject: [PATCH 121/194] Fix memchr overflow. The overflow's actually in the generic C implementation of memchr. While I'm here, let's switch our generic memrchr to the OpenBSD version too. Bug: https://code.google.com/p/android/issues/detail?id=147048 Change-Id: I296ae06a1ee196d2c77c95a22f11ee4d658962da --- libc/arch-arm/arm.mk | 4 +- libc/arch-arm64/arm64.mk | 2 +- libc/arch-mips/mips.mk | 4 +- libc/arch-mips64/mips64.mk | 4 +- libc/arch-x86_64/x86_64.mk | 6 ++- libc/bionic/memchr.c | 46 ------------------ libc/bionic/memrchr.c | 47 ------------------ .../upstream-openbsd/lib/libc/string/memchr.c | 48 +++++++++++++++++++ .../lib/libc/string/memrchr.c | 38 +++++++++++++++ tests/string_test.cpp | 10 ++++ 10 files changed, 107 insertions(+), 102 deletions(-) delete mode 100644 libc/bionic/memchr.c delete mode 100644 libc/bionic/memrchr.c create mode 100644 libc/upstream-openbsd/lib/libc/string/memchr.c create mode 100644 libc/upstream-openbsd/lib/libc/string/memrchr.c diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index 60600e5fd..d72a160d0 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -5,8 +5,6 @@ # libc_bionic_src_files_arm += \ - bionic/memchr.c \ - bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ @@ -22,6 +20,8 @@ libc_freebsd_src_files_arm += \ upstream-freebsd/lib/libc/string/wmemmove.c \ libc_openbsd_src_files_arm += \ + upstream-openbsd/lib/libc/string/memchr.c \ + upstream-openbsd/lib/libc/string/memrchr.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strlcat.c \ upstream-openbsd/lib/libc/string/strlcpy.c \ diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index 841899329..470a03838 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -8,7 +8,6 @@ libc_bionic_src_files_arm64 += \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ - bionic/memrchr.c \ bionic/strrchr.cpp \ libc_freebsd_src_files_arm64 += \ @@ -21,6 +20,7 @@ libc_freebsd_src_files_arm64 += \ upstream-freebsd/lib/libc/string/wmemcmp.c \ libc_openbsd_src_files_arm64 += \ + upstream-openbsd/lib/libc/string/memrchr.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ upstream-openbsd/lib/libc/string/strlcat.c \ diff --git a/libc/arch-mips/mips.mk b/libc/arch-mips/mips.mk index 7e3fe25ae..33eceab72 100644 --- a/libc/arch-mips/mips.mk +++ b/libc/arch-mips/mips.mk @@ -10,8 +10,6 @@ libc_bionic_src_files_mips += \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ - bionic/memchr.c \ - bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ @@ -27,7 +25,9 @@ libc_freebsd_src_files_mips += \ upstream-freebsd/lib/libc/string/wmemmove.c \ libc_openbsd_src_files_mips += \ + upstream-openbsd/lib/libc/string/memchr.c \ upstream-openbsd/lib/libc/string/memmove.c \ + upstream-openbsd/lib/libc/string/memrchr.c \ upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ diff --git a/libc/arch-mips64/mips64.mk b/libc/arch-mips64/mips64.mk index 137639550..2b81e635c 100644 --- a/libc/arch-mips64/mips64.mk +++ b/libc/arch-mips64/mips64.mk @@ -9,8 +9,6 @@ libc_bionic_src_files_mips64 += \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ - bionic/memchr.c \ - bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ @@ -30,7 +28,9 @@ libc_freebsd_src_files_mips64 += \ upstream-freebsd/lib/libc/string/wmemmove.c \ libc_openbsd_src_files_mips64 += \ + upstream-openbsd/lib/libc/string/memchr.c \ upstream-openbsd/lib/libc/string/memmove.c \ + upstream-openbsd/lib/libc/string/memrchr.c \ upstream-openbsd/lib/libc/string/stpcpy.c \ upstream-openbsd/lib/libc/string/stpncpy.c \ upstream-openbsd/lib/libc/string/strcat.c \ diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk index ae01d2a0a..06d318574 100644 --- a/libc/arch-x86_64/x86_64.mk +++ b/libc/arch-x86_64/x86_64.mk @@ -9,8 +9,6 @@ libc_bionic_src_files_x86_64 += \ bionic/__memset_chk.cpp \ bionic/__strcpy_chk.cpp \ bionic/__strcat_chk.cpp \ - bionic/memchr.c \ - bionic/memrchr.c \ bionic/strchr.cpp \ bionic/strnlen.c \ bionic/strrchr.cpp \ @@ -25,6 +23,10 @@ libc_freebsd_src_files_x86_64 += \ upstream-freebsd/lib/libc/string/wmemcmp.c \ upstream-freebsd/lib/libc/string/wmemmove.c \ +libc_openbsd_src_files_x86_64 += \ + upstream-openbsd/lib/libc/string/memchr.c \ + upstream-openbsd/lib/libc/string/memrchr.c \ + # # Inherently architecture-specific code. # diff --git a/libc/bionic/memchr.c b/libc/bionic/memchr.c deleted file mode 100644 index b14167abd..000000000 --- a/libc/bionic/memchr.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include -#include - -void *memchr(const void *s, int c, size_t n) -{ - const unsigned char* p = s; - const unsigned char* end = p + n; - - for (;;) { - if (p >= end || p[0] == c) break; p++; - if (p >= end || p[0] == c) break; p++; - if (p >= end || p[0] == c) break; p++; - if (p >= end || p[0] == c) break; p++; - } - if (p >= end) - return NULL; - else - return (void*) p; -} diff --git a/libc/bionic/memrchr.c b/libc/bionic/memrchr.c deleted file mode 100644 index aeb5643b0..000000000 --- a/libc/bionic/memrchr.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include -#include - -void *memrchr(const void *s, int c, size_t n) -{ - if (n > 0) { - const char* p = (const char*) s; - const char* q = p + n; - - while (1) { - q--; if (q < p || q[0] == (char) c) break; - q--; if (q < p || q[0] == (char) c) break; - q--; if (q < p || q[0] == (char) c) break; - q--; if (q < p || q[0] == (char) c) break; - } - if (q >= p) - return (void*)q; - } - return NULL; -} diff --git a/libc/upstream-openbsd/lib/libc/string/memchr.c b/libc/upstream-openbsd/lib/libc/string/memchr.c new file mode 100644 index 000000000..4573e3ceb --- /dev/null +++ b/libc/upstream-openbsd/lib/libc/string/memchr.c @@ -0,0 +1,48 @@ +/* $OpenBSD: memchr.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Chris Torek. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +void * +memchr(const void *s, int c, size_t n) +{ + if (n != 0) { + const unsigned char *p = s; + + do { + if (*p++ == (unsigned char)c) + return ((void *)(p - 1)); + } while (--n != 0); + } + return (NULL); +} diff --git a/libc/upstream-openbsd/lib/libc/string/memrchr.c b/libc/upstream-openbsd/lib/libc/string/memrchr.c new file mode 100644 index 000000000..bd27ebc62 --- /dev/null +++ b/libc/upstream-openbsd/lib/libc/string/memrchr.c @@ -0,0 +1,38 @@ +/* $OpenBSD: memrchr.c,v 1.2 2007/11/27 16:22:12 martynas Exp $ */ + +/* + * Copyright (c) 2007 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +/* + * Reverse memchr() + * Find the last occurrence of 'c' in the buffer 's' of size 'n'. + */ +void * +memrchr(const void *s, int c, size_t n) +{ + const unsigned char *cp; + + if (n != 0) { + cp = (unsigned char *)s + n; + do { + if (*(--cp) == (unsigned char)c) + return((void *)cp); + } while (--n != 0); + } + return(NULL); +} diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 137565e25..66cf848c9 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -1385,3 +1385,13 @@ TEST(string, __gnu_basename) { TestBasename("///", ""); TestBasename("//usr//lib//", ""); } + +TEST(string, strnlen_147048) { + // https://code.google.com/p/android/issues/detail?id=147048 + char stack_src[64] = {0}; + EXPECT_EQ(0U, strnlen(stack_src, 1024*1024*1024)); + char* heap_src = new char[1]; + *heap_src = '\0'; + EXPECT_EQ(0U, strnlen(heap_src, 1024*1024*1024)); + delete[] heap_src; +} From e1f9ddaf0d314186da8b2a86e5a438f6ff204030 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sat, 14 Feb 2015 14:11:50 -0800 Subject: [PATCH 122/194] Regression test for NDK bug 80199. Bionic never had this bug, but since the proposed fix is to remove the NDK's broken code, we should add a regression test here. Bug: https://code.google.com/p/android/issues/detail?id=80199 Change-Id: I4de21b5da9913cef990bc4d05a7e27562a71a02b --- tests/wchar_test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/wchar_test.cpp b/tests/wchar_test.cpp index 63f376086..a1d150117 100644 --- a/tests/wchar_test.cpp +++ b/tests/wchar_test.cpp @@ -234,6 +234,11 @@ TEST(wchar, wcsstr) { ASSERT_EQ(NULL, wcsstr(haystack, bad_needle)); } +TEST(wchar, wcsstr_80199) { + // https://code.google.com/p/android/issues/detail?id=80199 + ASSERT_TRUE(wcsstr(L"romrom", L"rom") != NULL); +} + TEST(wchar, mbtowc) { wchar_t out[8]; From 094a8ae078dc3646ff23a845cf038ddc3364116c Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Mon, 2 Feb 2015 11:24:22 +0000 Subject: [PATCH 123/194] Update tzdata to tzdata2015a Time Zone Data v. 2015a (Released 2015-01-29) http://www.iana.org/time-zones/repository/releases/tzdata2015a.tar.gz Information from NEWS: Release 2015a - 2015-01-29 22:35:20 -0800 Changes affecting future time stamps The Mexican state of Quintana Roo, represented by America/Cancun, will shift from Central Time with DST to Eastern Time without DST on 2015-02-01 at 02:00. (Thanks to Steffen Thorsen and Gwillim Law.) Chile will not change clocks in April or thereafter; its new standard time will be its old daylight saving time. This affects America/Santiago, Pacific/Easter, and Antarctica/Palmer. (Thanks to Juan Correa.) New leap second 2015-06-30 23:59:60 UTC as per IERS Bulletin C 49. (Thanks to Tim Parenti.) Changes affecting past time stamps Iceland observed DST in 1919 and 1921, and its 1939 fallback transition was Oct. 29, not Nov. 29. Remove incorrect data from Shanks about time in Iceland between 1837 and 1908. Some more zones have been turned into links, when they differed from existing zones only for older time stamps. As usual, these changes affect UTC offsets in pre-1970 time stamps only. Their old contents have been moved to the 'backzone' file. The affected zones are: Asia/Aden, Asia/Bahrain, Asia/Kuwait, and Asia/Muscat. Bug: 19212588 (cherry-picked from commit 700eb048fb6df8805245097d73a87384108fdf67) Change-Id: I23d94982f634889ab9dcef28cf4a8853224bfd9c --- libc/zoneinfo/tzdata | Bin 498091 -> 494904 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index fc6c5babb83b74177bbaa18f47f38cd5de8d7c5b..b9a66210eb8eb2a94d5db930cb3ac727921251b8 100644 GIT binary patch delta 4585 zcmb8ye^?b&8VB&1GndN`uXZ(5Kon9`RK&}OMn#5*MtRYzVqsnrgb0fi4N-}9*`yYY zdXO(Q>_6S-k&kEQ%sFS? zbLKrWyY`K0*fuI4H$NjSH%+xgO-qyb3y`EdhvXe!x+h@E0FhU*uX?}?MVz0suX9km zB9zex9}+3vpM#VknZi9C?jfphcjG!a@*2W#R>dd9aNfL4oXSQoOJD3jgug1j%tIlFVz2qB}51EGkAj>pFjcHApq5S4xuia^s{kD9HTCzgc%T z>Vk%1YfzwAQ-j(dRjeP04)Wwq_>V9~o=A$GMFA=CLLI@6=p2zLUibp`U{$=*gF^Dw zLDUoWc!@B2!6Q|%w+)Vws^7jn9OSe5lxb^T@V*(ZjvOxb$D)BXcy$+H{m@aIp1Y7t zj*dk!Id%q(gfZzRC!!G+qKc*wNFgU*KuJiZ_HOZDflDmT`>s7lmv8@Ky@v7MVF%rhB<~LQ&=v)+x zj}*I~L@iIeV@C&Zjf8)=u}~Aqd*vt~96=p9QG-rTDPV$e(C(qoLp?cl4wp#VAOufT z#pz*ikn<9X2-kE2>3#=Ygl&dSic-X{2}qt~6pM-PpV3GLm!X>kA4OP%D#q?Z3YnaS z5)zpXH<_{?*NM%J@X4x}ZiACN_c%%?tLEufCCMuvO_L)rtshg$RKl^s31w((M%S`m)TTt-%do62O5y&p^_}S2QB0$H%w8g zNE?6{lJy$0$;w5jB5NAZO4fY>AC*zugIJQc1v%si2datpIkb7OOjX67K0+MXd@FKE z;WX5EO6_FJc37iT@$5%PASDlD19`p?wM5&64#LL#r*YzYkVsyaQ9!n5p^oh6M<>}e z69Lmz@yIgRN!<_>l0A>0p6pG+C34t;;9JQ-IEXtDMP%$oG>{`F(d8jDMin0b$%Hpn zOqvd%k(|s!H~IK7!frEyn?hQ?Mu`VE`J6eGwCzUt?OZG_I0EbtW8^{`ddbC| zh`2))UCBr#*Q_Wf4003saUS~ah*Fdu7i_VVGm)X&y9pJ#eea-I_m{n8cN)=%zLTY2 z=Oc?n#ez!WwFfPPfiunEB3ywO;&&a{FKDSrJ8fjOOmMqU9%#^y7dT7$P{@3MG30de+3OB z|3h?$cA09v!;eJ+0m@8Tclb&g=kzHblbOzak8LMipC&{$3$T~iDBgw?tZ{)ySd*r~X zHQdp%^?hd6x)oS3HFRs7S&_L@wz2vrwXh^{dzTQGq~7#po+SD7=v8MwyfG&ia#|SP zNSY?@c>wLK)sYSBJc9(C3)n!uN=2>C1$2-L8StM^zCj}SIs*kd7f?q!Q_-n&4gn5T z{L=}$&KVSvZ&FZC*uy2g^aX+!@X1&VhfW)c$fc!d&^d=L@@*PI7m`jSlgsHS*13R2 zawQGjIvogG#0P6RQgqItgnYLQZo-bPdk9bF!FD*w)rBbaaLhxmP7@*)M=7SCCnI$+ zgMS(2q;vzCi0?b-BZF^;?LH3XL1d7iyHG*KzK>=Sxv=bh=FWUXlUrX#7MW>6C1F@w z$o=DCN->&@A?X6yo>CQI5^MF8e3qyp_gBP{{O^%NHu<8Oa13pPBeFceSBK+>BRdx( zm(=H>hOo_c^4@E(F6E2Fc_ffe=3xV2GO8tf!aB&=v+#EsZ6*@lPyzWq40X;Z#p~ze z=w#9B76dHw6z$85x`o8=Y1Dg4mxy&Pf*({xz$Q3I$VC*9@Juui2BC}Cwjgx55t-!W zp4N(4jM;%kGV@+^lY34eEL9cr&LM^HPD{v=#c-#pmb83s^BMYLy*plCsaol7*`$Xd zJk5xPlW>|#(^S6>efe{3OA_3Uv0LLziiu}>JryEW81+&~);W|DZYNDEeor%H=_|y_ z#mGqKWLQz5Q;FvEO!4R>L}#et(I#Y(?1xZE9^*@GMy6P0M$AJ-Ce0?yq*a7(h^>Sv z)F+cuV?%6a=73e(`N&Pzhn9ry^TT0H8?2b~PNR)g*3XCKVdLE*j_~C!m+(EVhVX5m zooL^~nxziBdR&rxpU_)zES#kW!;2Y`8Gl0-x7gXJC7bU+N0#dM+~chIlwMQI`HQzd zY%7O}7k@%a$=ivzq;m?v zk20fegM-xFh9aFW(LnaRf-VoC*$hSnlF7ad6ca|Fk?dE{t@Ad*9#h2u2U3X3i4xLa zhnpPq$90{L5WY$khkD>7hr3Zq8VhiYygM1a9wJt=^e$4#d#NZV?jkf1Ue`yCtb{Fx zo4YSEbY4OQ;f*(wqo0+nVNza!Xu@MzgbT2e@QG_#qYk|3up}vFJ%$VC&()(nkkR(y z>%5q(AH?7pVTg-2>w9hXTH_h6B1|%^Yq#m|zd4T^A6wOgA3<$|@7R`HBT{jMp9{H! zUs5%M-&O5|p9a=->cB&Kdj47OW^wY3nP%eJu+GR|wS*6L$2!&T*uVIEEYNGBC0Sqe z-lnSyS<2I*4l7gkJ&|W^)Eqs+;x&;6y|hYIt}!K_JS%B^Q{@REN`L>`HImfdzpF|z z_4l7}%Rc@62kRt@{#UkY>!amS+RGD^;s4c!>-}iiA^*`v8U~4xaKCKP98a2j{<exgG;x>}E#>!QOn+|QT<*N&y8(=SX*;2`zIIr!PsO;wd!M@cV#T3q_d+69HL zo>Ht;i=LKVJ21VpI(B?v^}$^0he<)wi95%KYHwUKeW#sXX1aZxSAYMNR9?@Y%sac* zE%|!>dX5+;2HLf&-=`lUi<8`3N+%i$SErB1?^FOj^g-x8FpF+L=q;!w5 zxqb~%EV8UgUM2Tqyzam6bL^P<4B0)t&1iwOrOz>zF zGsvTs$3?|iCm{y46G_?_%CPc_XWLuBFHa)V@7&@x@sL2xm@DMPmpMK+y6SicDQ>@B4B%alL<4P5L?tiLM%HW+FB_sI=L zbh32)S%mwj@)x~fCwIz zi4I2t850hRzbeO$1?^?PU}#S`H(NI&zbWJ?GN$?N;!AbWP8 zX;7xTHwOuUs(k2m6qD+is3GjJnJ{{RgH`#xTqKeAr=f&6ui_-(4y}Yuf`e4~<7-GJ z7e2yPaxo953B%A%F4ZA)h$>$`fmBjI0;NMT<uOLkkZ4jJg&+=&w-6#BJv6Mt9m?B-fx5V6RP}1CgPt^%~h8rsmCQ0 zJ`o|m3siGM&0;i?)1%=Nrq9i(D~|?!Rh`_u#-s~ zLo)4s)RNm{&_$k0fpsML4jJV69oS3ea16=(HRV=SUidpilEp2^a#KN;ZbUs<77ODj z(v29hdN;C3-V{`ljn%kHHl2f~$_e;O#FC;-$R#E5I86Fk(BQ^0nm5WB*hu+P$S1Eo zi7I#L27w0eNLAi-2JvL~3s_Gy2dYWsK{OH`%qNO>$TyfujyyymsZN7~IKD#@sfmJL zv?}LkA%T2gMlm_H5H;k(31}wgB?OKkN0CG>#iE3ad=n?h<+EsY6C9(;zutmm!VB9< zt{lT@^7(SKlWVsS`ZTlRHKdX+@=@x>MQ*-=4)Xi)2pg-)Urt3DY0^+e?ndG~X)~jf zJZM1pI92}sXRwohACFyxL9Qj;h3FbLN-;`zVU4ARKOjRWzk|I(^G(zVJsQiO(W4Rh z3`?FbBa20^v8W(@Zlj(saK`aWt!0QIzC)2s{98~-0`KE08L|zY&#H3BSBNDHRW2Dm z2Z!A>kf;1$vFVp(BjHPt@1}|{em96U9^Mo5D~Kmiaad2rN~k8|Pot5{fZ$2Y7$Ha|+_sfy_i>t3mY|&+dIzDCRr#McA(b3kgHlrcDqQYT z2YIgoVN>+o(+Kw~BWFh8JYf%=g#Cq2)tlG}54MYNzgohUU4$oLou=oj48rWWmoP2W zk&Aid|lc0`i;v&bS`!YT-JMLl8CGfvmDOAJx+kWHAeDyO@X%vBcI#xp@rGO-Ci z<-q)e2(KfBlH_?)JPpJZEXK^y!8>hc#lXd}fz7WwVM*jl(+jplwa=Yb*z|kRbkd6( za`SOzHXEDpMq;Eqdnsz7)pPYFGRfNa9L29ev{emig`VHdA^?6uNn2)LnZ?Z=6bu)a@^kYsXyr4qT zH4=`rQHt4Ek0uuTgu`!vyO^**Z(B@!%24AjHIsl81TN&$+v`XoPkxIMqOQhC!XUJg zvAYqxNRLeNBKOg@vN-WwoF>!fpq5G%#qt_EGL~>G24Sz@P1G&PlnbH}nW4%BpCOB^%|!)SHx%_5nezI+h*_%V(rm(9 zTDes1vu6h%Mem5ScrHCRJ;!~@JQZeD&rDTzRU$6mO zTN0`XCZmyXN1tWfQNmQg4=5yWwZgGXHM^4snwLe$C+5L#IrG|+NDw?kF?qidHRRNJ zG?Nc!B5(ztvj!kZ@E%IYN3(H~oC!dyo8WBbN*^Q(8nKn|!cUX4MQA4<4@c-qQioJ> zt^uXwd@Wq$LK!;9CzBDDqdyC$k=ksO2|96}TzU(gZo*e_HGdj*!42#ppGv4De1`54 zC9bNus{EVH$RPjXi@k&wUPtPmFJH~Sw-8BKmqj=SD+q78`qiqJe~Tn3W)b08Gp7F- z;a1K51L>^+?$W z-xKl)U!kf9U#M;nz94uPs9qQI*ukGfFLRRrJi1I?>kIT8R!w+wHx{TpudLubGE+1~ zeX^MO9>z}24QVYVyfg@owZ10`*Y-KBIb?&yG?(>etwJ?aX)&IL4-AU7dWvE0&|_7S z)ZP7drDW{xzUVS|c6Wc^kSyY_!P{N0m5nw8X*+rwhq;g8{Cu<_$>2P&PF`vFpB^R6 z%kYern`rRdayH7~JR2on_)5$CxuHK?CoQG}JVQ_CkwB%^P&DV>Dcjt@Xvf@NSJ+a! z{2cS%-ejA9H_H0LcDpU@!a(bS{6g2l!~bSol)TVoFZrD{J<{e{obi!$iO*11M*Kl* zMu*XrIpRY{=FP`!Szh}cSsy93Wo<={vnj5>_ zwtDSEYu>OoU29T8qpbO+*IWhBW^2LS6|Qx@&DM1n5?$*bUbb%d&mL}-~IO0@Qi5G7!k*h3$?o*d0cF`D6tPe+W3h#sj%h9^cw zM2i2kE3cdVHScJH#n~RB%zEvoY3=ng_x9v>!1sHPO1N{)>O62%vHZPG@gv8S8K^%N z!8cWAo%WVME#SD~tyzyNK^~%tfznF*8U6G-TEBE>@o}X@{{NY+&(y!g%$7N|-9LQ% z@Zh`_KiaR3DP#YOfeZa{;H3Y4g4d7n@O3u5t4uPB<)z0L=`krxX~TzWWAcshe^D&S zH>&!&Y}R6;;Bn!n+=I^{6Pif@{CUnKH#Vu&3Vk(6@Wa*fzRdn;{z~dps&s$UG_i z7Tqw@czyRU8+#RteBbT%S9ewH43hR=*;;lWZ)Wkqe^tCcNeqxKW|}IsEngekw9C!1 zk7oPOF!XU#clW()?!=FQYvzM?smEXcFL}+NHnTVVW)o{Od*k~td;W|6rM?MVXlC&{ zZ8jI0Y5Y!ML2oA38{AntRI|022X1+I&&aRI`S6~(ez=~X^dZucI*guL>i~~U&KCzO zz5dTLQ}q98@l|kVU66KmkReyQ;pY)LXcA*EX##`6KVto5C?5TawKv36#t3;hr~7;K zFgWi7EB*iBQ`GXm-Que~NHGL!j~z9wU`jG+p9Ojhe^$)mzaF$7hs;e+F`Uu*aQ?Ia ktAAdA-?5wgnP)7{q`@BFC3(ax&B@P8&vwqv@wglGA7LSX6aWAK From 92b9c6ff3ea5bdadf33feb05e06703fa35f34497 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 16 Feb 2015 12:19:46 -0800 Subject: [PATCH 124/194] POSIX says flock is in , not . Bug: 19392265 Change-Id: I14d0b56883f0354e13db04a1d140b8f60dae08d7 --- libc/include/sys/file.h | 9 +++++++-- libc/include/unistd.h | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libc/include/sys/file.h b/libc/include/sys/file.h index cf2f4b142..f414d34aa 100644 --- a/libc/include/sys/file.h +++ b/libc/include/sys/file.h @@ -25,14 +25,19 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_FILE_H_ #define _SYS_FILE_H_ #include #include -/* ANDROID: needed for flock() */ -#include #include +__BEGIN_DECLS + +int flock(int, int); + +__END_DECLS + #endif /* _SYS_FILE_H_ */ diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 6403d4ae6..16d413a8c 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -168,7 +168,6 @@ extern int dup2(int, int); extern int dup3(int, int, int); extern int fcntl(int, int, ...); extern int ioctl(int, int, ...); -extern int flock(int, int); extern int fsync(int); extern int fdatasync(int); extern int ftruncate(int, off_t); From be6a44566a7085470b96bc41d371e37b5b12ff87 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 17 Feb 2015 09:55:58 -0800 Subject: [PATCH 125/194] Fix sysconf for _SC_CHILD_MAX and _SC_OPEN_MAX. Change-Id: I656f613166bd604f35b31e5ec042a5230c6b82b8 --- libc/bionic/sysconf.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libc/bionic/sysconf.cpp b/libc/bionic/sysconf.cpp index 411c23ab0..c301b27b3 100644 --- a/libc/bionic/sysconf.cpp +++ b/libc/bionic/sysconf.cpp @@ -33,6 +33,7 @@ #include #include // For FOPEN_MAX. #include +#include #include #include #include @@ -50,6 +51,12 @@ static bool __sysconf_has_clock(clockid_t clock_id) { return clock_getres(clock_id, NULL) == 0; } +static long __sysconf_rlimit(int resource) { + rlimit rl; + getrlimit(resource, &rl); + return rl.rlim_cur; +} + long sysconf(int name) { switch (name) { case _SC_ARG_MAX: return ARG_MAX; @@ -57,13 +64,13 @@ long sysconf(int name) { case _SC_BC_DIM_MAX: return _POSIX2_BC_DIM_MAX; // Minimum requirement. case _SC_BC_SCALE_MAX: return _POSIX2_BC_SCALE_MAX; // Minimum requirement. case _SC_BC_STRING_MAX: return _POSIX2_BC_STRING_MAX; // Minimum requirement. - case _SC_CHILD_MAX: return CHILD_MAX; + case _SC_CHILD_MAX: return __sysconf_rlimit(RLIMIT_NPROC); case _SC_CLK_TCK: return static_cast(getauxval(AT_CLKTCK)); case _SC_COLL_WEIGHTS_MAX: return _POSIX2_COLL_WEIGHTS_MAX; // Minimum requirement. case _SC_EXPR_NEST_MAX: return _POSIX2_EXPR_NEST_MAX; // Minimum requirement. case _SC_LINE_MAX: return _POSIX2_LINE_MAX; // Minimum requirement. case _SC_NGROUPS_MAX: return NGROUPS_MAX; - case _SC_OPEN_MAX: return OPEN_MAX; + case _SC_OPEN_MAX: return __sysconf_rlimit(RLIMIT_NOFILE); case _SC_PASS_MAX: return PASS_MAX; case _SC_2_C_BIND: return _POSIX2_C_BIND; case _SC_2_C_DEV: return _POSIX2_C_DEV; From 62533de98e6dded91aba701d8b6339e77fbc8121 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 17 Feb 2015 11:33:42 -0800 Subject: [PATCH 126/194] Change getgrent error declaration message to proper style. Bug: 19340053 Change-Id: I9c47a2016f356d171a5f2082acb8391d81e019b2 --- libc/include/grp.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/include/grp.h b/libc/include/grp.h index ab900223a..7b3e32b3e 100644 --- a/libc/include/grp.h +++ b/libc/include/grp.h @@ -54,9 +54,9 @@ __BEGIN_DECLS struct group *getgrgid(gid_t); struct group *getgrnam(const char *); #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE -struct group *getgrent(void) __errorattr("This function is meaningless on Android."); -__errordecl(setgrent, "This function is meaningless on Android."); -__errordecl(endgrent, "This function is meaningless on Android."); +struct group *getgrent(void) __errorattr("getgrent is meaningless on Android"); +__errordecl(setgrent, "setgrent is meaningless on Android"); +__errordecl(endgrent, "endgrent is meaningless on Android"); int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); int getgrnam_r(const char *, struct group *, char *, From 4645c4f62df49d1ece5aabb7c9fa44ca34d30272 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 17 Feb 2015 12:39:39 -0800 Subject: [PATCH 127/194] Move use of __warnattr to __deprecated. clang don't support warning attribute. Replacing warning attriubte with deprecated attribute can achieve the same behavior whether compiled by gcc or clang. Bug: 19340053 Change-Id: I064432b81cf55212458edbc749eb72dc15a810fb --- libc/include/stdio.h | 10 +++++----- libc/include/stdlib.h | 2 +- libc/include/sys/cdefs.h | 8 ++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/libc/include/stdio.h b/libc/include/stdio.h index b04aa24c2..f3bfae0d8 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -266,16 +266,16 @@ int vdprintf(int, const char * __restrict, __va_list) __printflike(2, 0); #ifndef __AUDIT__ #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L -char* gets(char*) __warnattr("gets is very unsafe; consider using fgets"); +char* gets(char*) __deprecated("gets is very unsafe; consider using fgets"); #endif int sprintf(char* __restrict, const char* __restrict, ...) - __printflike(2, 3) __warnattr("sprintf is often misused; please use snprintf"); -char* tmpnam(char*) __warnattr("tmpnam possibly used unsafely; consider using mkstemp"); + __printflike(2, 3) __deprecated("sprintf is often misused; please use snprintf"); +char* tmpnam(char*) __deprecated("tmpnam possibly used unsafely; consider using mkstemp"); int vsprintf(char* __restrict, const char* __restrict, __va_list) - __printflike(2, 0) __warnattr("vsprintf is often misused; please use vsnprintf"); + __printflike(2, 0) __deprecated("vsprintf is often misused; please use vsnprintf"); #if __XPG_VISIBLE char* tempnam(const char*, const char*) - __warnattr("tempnam possibly used unsafely; consider using mkstemp"); + __deprecated("tempnam possibly used unsafely; consider using mkstemp"); #endif #endif diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index cbd7aeb98..7f1710d8b 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -58,7 +58,7 @@ extern int unsetenv(const char*); extern int clearenv(void); extern char* mkdtemp(char*); -extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); +extern char* mktemp(char*) __deprecated("mktemp possibly used unsafely; consider using mkstemp"); extern int mkostemp64(char*, int); extern int mkostemp(char*, int); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 1d33895e9..17da393b0 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -334,12 +334,16 @@ #define __wur #endif +#if __GNUC_PREREQ(3, 2) +#define __deprecated(msg) __attribute__ ((deprecated(msg))) +#else +#define __deprecated(msg) +#endif + #if __GNUC_PREREQ(4, 3) #define __errorattr(msg) __attribute__((__error__(msg))) -#define __warnattr(msg) __attribute__((__warning__(msg))) #else #define __errorattr(msg) -#define __warnattr(msg) #endif #define __errordecl(name, msg) extern void name(void) __errorattr(msg) From 784de4e50a1161d78757402c149d85368bd49c29 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 17 Feb 2015 23:54:40 +0000 Subject: [PATCH 128/194] Revert "Move use of __warnattr to __deprecated." This reverts commit 4645c4f62df49d1ece5aabb7c9fa44ca34d30272. Change-Id: I6c1062d54a4e2c4f41ce7a403e4e7840e6339146 --- libc/include/stdio.h | 10 +++++----- libc/include/stdlib.h | 2 +- libc/include/sys/cdefs.h | 8 ++------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/libc/include/stdio.h b/libc/include/stdio.h index f3bfae0d8..b04aa24c2 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -266,16 +266,16 @@ int vdprintf(int, const char * __restrict, __va_list) __printflike(2, 0); #ifndef __AUDIT__ #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L -char* gets(char*) __deprecated("gets is very unsafe; consider using fgets"); +char* gets(char*) __warnattr("gets is very unsafe; consider using fgets"); #endif int sprintf(char* __restrict, const char* __restrict, ...) - __printflike(2, 3) __deprecated("sprintf is often misused; please use snprintf"); -char* tmpnam(char*) __deprecated("tmpnam possibly used unsafely; consider using mkstemp"); + __printflike(2, 3) __warnattr("sprintf is often misused; please use snprintf"); +char* tmpnam(char*) __warnattr("tmpnam possibly used unsafely; consider using mkstemp"); int vsprintf(char* __restrict, const char* __restrict, __va_list) - __printflike(2, 0) __deprecated("vsprintf is often misused; please use vsnprintf"); + __printflike(2, 0) __warnattr("vsprintf is often misused; please use vsnprintf"); #if __XPG_VISIBLE char* tempnam(const char*, const char*) - __deprecated("tempnam possibly used unsafely; consider using mkstemp"); + __warnattr("tempnam possibly used unsafely; consider using mkstemp"); #endif #endif diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index 7f1710d8b..cbd7aeb98 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -58,7 +58,7 @@ extern int unsetenv(const char*); extern int clearenv(void); extern char* mkdtemp(char*); -extern char* mktemp(char*) __deprecated("mktemp possibly used unsafely; consider using mkstemp"); +extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); extern int mkostemp64(char*, int); extern int mkostemp(char*, int); diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 17da393b0..1d33895e9 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -334,16 +334,12 @@ #define __wur #endif -#if __GNUC_PREREQ(3, 2) -#define __deprecated(msg) __attribute__ ((deprecated(msg))) -#else -#define __deprecated(msg) -#endif - #if __GNUC_PREREQ(4, 3) #define __errorattr(msg) __attribute__((__error__(msg))) +#define __warnattr(msg) __attribute__((__warning__(msg))) #else #define __errorattr(msg) +#define __warnattr(msg) #endif #define __errordecl(name, msg) extern void name(void) __errorattr(msg) From 9a9ea3a28099602fe22e36638a44fa36df80fe8e Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 9 Feb 2015 17:45:22 -0800 Subject: [PATCH 129/194] Update the NDK compatlib for 4.4.4 and ToT. Now passes all libc++ tests for these targets, with the exception of the usual failing replacement new tests since libc uses new/delete for things. I don't know if we can ever really fix these. Bug: 18471532 Change-Id: Ibc0a15f26b0e4613249b5e15ecf3cf80e523467c --- libc/Android.mk | 183 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 157 insertions(+), 26 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index fdaa8eea5..737eee298 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -85,7 +85,7 @@ libc_common_src_files += \ bionic/__vsnprintf_chk.cpp \ bionic/__vsprintf_chk.cpp \ -libc_bionic_src_files := \ +libc_bionic_ndk_src_files := \ bionic/abort.cpp \ bionic/accept.cpp \ bionic/accept4.cpp \ @@ -120,10 +120,8 @@ libc_bionic_src_files := \ bionic/fchmodat.cpp \ bionic/ffs.cpp \ bionic/flockfile.cpp \ - bionic/fork.cpp \ bionic/fpclassify.cpp \ bionic/futimens.cpp \ - bionic/getauxval.cpp \ bionic/getcwd.cpp \ bionic/getentropy_linux.c \ bionic/gethostname.cpp \ @@ -160,27 +158,6 @@ libc_bionic_src_files := \ bionic/posix_fallocate.cpp \ bionic/posix_madvise.cpp \ bionic/posix_timers.cpp \ - bionic/pthread_atfork.cpp \ - bionic/pthread_attr.cpp \ - bionic/pthread_cond.cpp \ - bionic/pthread_create.cpp \ - bionic/pthread_detach.cpp \ - bionic/pthread_equal.cpp \ - bionic/pthread_exit.cpp \ - bionic/pthread_getcpuclockid.cpp \ - bionic/pthread_getschedparam.cpp \ - bionic/pthread_gettid_np.cpp \ - bionic/pthread_internals.cpp \ - bionic/pthread_join.cpp \ - bionic/pthread_key.cpp \ - bionic/pthread_kill.cpp \ - bionic/pthread_mutex.cpp \ - bionic/pthread_once.cpp \ - bionic/pthread_rwlock.cpp \ - bionic/pthread_self.cpp \ - bionic/pthread_setname_np.cpp \ - bionic/pthread_setschedparam.cpp \ - bionic/pthread_sigmask.cpp \ bionic/ptrace.cpp \ bionic/pty.cpp \ bionic/raise.cpp \ @@ -241,6 +218,18 @@ libc_bionic_src_files := \ bionic/wchar.cpp \ bionic/wctype.cpp \ +libc_bionic_src_files := + +# The fork implementation depends on pthread data, so we can't include it in +# libc_ndk.a. +libc_bionic_src_files += bionic/fork.cpp + +# The data that backs getauxval is initialized in the libc init functions which +# are invoked by the linker. If this file is included in libc_ndk.a, only one of +# the copies of the global data will be initialized, resulting in nullptr +# dereferences. +libc_bionic_src_files += bionic/getauxval.cpp + libc_cxa_src_files := \ bionic/__cxa_guard.cpp \ bionic/__cxa_pure_virtual.cpp \ @@ -513,6 +502,29 @@ libc_upstream_openbsd_src_files := \ upstream-openbsd/lib/libc/string/wcsstr.c \ upstream-openbsd/lib/libc/string/wcswidth.c \ +libc_pthread_src_files := \ + bionic/pthread_atfork.cpp \ + bionic/pthread_attr.cpp \ + bionic/pthread_cond.cpp \ + bionic/pthread_create.cpp \ + bionic/pthread_detach.cpp \ + bionic/pthread_equal.cpp \ + bionic/pthread_exit.cpp \ + bionic/pthread_getcpuclockid.cpp \ + bionic/pthread_getschedparam.cpp \ + bionic/pthread_gettid_np.cpp \ + bionic/pthread_internals.cpp \ + bionic/pthread_join.cpp \ + bionic/pthread_key.cpp \ + bionic/pthread_kill.cpp \ + bionic/pthread_mutex.cpp \ + bionic/pthread_once.cpp \ + bionic/pthread_rwlock.cpp \ + bionic/pthread_self.cpp \ + bionic/pthread_setname_np.cpp \ + bionic/pthread_setschedparam.cpp \ + bionic/pthread_sigmask.cpp \ + libc_arch_static_src_files := \ bionic/dl_iterate_phdr_static.cpp \ @@ -899,11 +911,80 @@ LOCAL_SYSTEM_SHARED_LIBRARIES := LOCAL_ADDRESS_SANITIZER := false LOCAL_NATIVE_COVERAGE := $(bionic_coverage) +$(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) +include $(BUILD_STATIC_LIBRARY) + + +# ======================================================== +# libc_bionic_ndk.a - The portions of libc_bionic that can +# be safely used in libc_ndk.a (no troublesome global data +# or constructors). +# ======================================================== + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(libc_bionic_ndk_src_files) +LOCAL_CFLAGS := $(libc_common_cflags) \ + -Wframe-larger-than=2048 \ + +# ssse3-strcmp-slm.S does not compile with Clang. +LOCAL_CLANG_ASFLAGS_x86_64 += -no-integrated-as + +# memcpy.S, memchr.S, etc. do not compile with Clang. +LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as +LOCAL_CLANG_ASFLAGS_arm64 += -no-integrated-as + +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast +LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include +LOCAL_MODULE := libc_bionic_ndk +LOCAL_CLANG := $(use_clang) +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_CXX_STL := none +LOCAL_SYSTEM_SHARED_LIBRARIES := +LOCAL_ADDRESS_SANITIZER := false +LOCAL_NATIVE_COVERAGE := $(bionic_coverage) + $(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_bionic_src_files)) include $(BUILD_STATIC_LIBRARY) +# ======================================================== +# libc_pthread.a - pthreads parts that previously lived in +# libc_bionic.a. Relocated to their own library because +# they can't be included in libc_ndk.a (as they layout of +# pthread_t has changed over the years and has ABI +# compatibility issues). +# ======================================================== + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(libc_pthread_src_files) +LOCAL_CFLAGS := $(libc_common_cflags) \ + -Wframe-larger-than=2048 \ + +# ssse3-strcmp-slm.S does not compile with Clang. +LOCAL_CLANG_ASFLAGS_x86_64 += -no-integrated-as + +# memcpy.S, memchr.S, etc. do not compile with Clang. +LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as +LOCAL_CLANG_ASFLAGS_arm64 += -no-integrated-as + +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_MODULE := libc_pthread +LOCAL_CLANG := $(use_clang) +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_CXX_STL := none +LOCAL_SYSTEM_SHARED_LIBRARIES := +LOCAL_ADDRESS_SANITIZER := false +LOCAL_NATIVE_COVERAGE := $(bionic_coverage) + +include $(BUILD_STATIC_LIBRARY) + + # ======================================================== # libc_cxa.a - Things traditionally in libstdc++ # ======================================================== @@ -992,9 +1073,57 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libc_ndk -LOCAL_WHOLE_STATIC_LIBRARIES := libc_syscalls libm -LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_CLANG := true +LOCAL_ASFLAGS := $(LOCAL_CFLAGS) +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CFLAGS := $(libc_common_cflags) -fvisibility=hidden -O0 +LOCAL_CPPFLAGS := $(libc_common_cppflags) +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_ADDRESS_SANITIZER := false +LOCAL_NATIVE_COVERAGE := $(bionic_coverage) +LOCAL_SYSTEM_SHARED_LIBRARIES := +LOCAL_SRC_FILES := \ + $(libc_common_src_files) \ + $(libc_arch_dynamic_src_files) \ + $(libc_ndk_stub_src_files) \ + bionic/malloc_debug_common.cpp \ + +LOCAL_SRC_FILES_arm += \ + arch-common/bionic/crtbegin_so.c \ + arch-arm/bionic/atexit_legacy.c \ + arch-common/bionic/crtend_so.S \ + +LOCAL_CFLAGS := $(libc_common_cflags) \ + -DLIBC_STATIC \ + +LOCAL_WHOLE_STATIC_LIBRARIES := \ + libc_bionic_ndk \ + libc_cxa \ + libc_dns \ + libc_freebsd \ + libc_gdtoa \ + libc_malloc \ + libc_netbsd \ + libc_openbsd \ + libc_stack_protector \ + libc_syscalls \ + libc_tzcode \ + libm \ + +LOCAL_WHOLE_STATIC_LIBRARIES_arm := libc_aeabi +LOCAL_CXX_STL := none + +ifneq ($(MALLOC_IMPL),dlmalloc) +LOCAL_WHOLE_STATIC_LIBRARIES += libjemalloc +endif + +$(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) +$(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_common_src_files)) +$(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_arch_dynamic_src_files)) +$(eval $(call patch-up-arch-specific-flags,LOCAL_ASFLAGS,LOCAL_CFLAGS)) + +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) include $(BUILD_STATIC_LIBRARY) # ======================================================== @@ -1013,6 +1142,7 @@ LOCAL_CLANG := $(use_clang) LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_WHOLE_STATIC_LIBRARIES := \ libc_bionic \ + libc_bionic_ndk \ libc_cxa \ libc_dns \ libc_freebsd \ @@ -1020,6 +1150,7 @@ LOCAL_WHOLE_STATIC_LIBRARIES := \ libc_malloc \ libc_netbsd \ libc_openbsd \ + libc_pthread \ libc_stack_protector \ libc_syscalls \ libc_tzcode \ From a6395e1fd0ccc818ed6424797690b12f8b690755 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 12 Feb 2015 16:35:09 -0800 Subject: [PATCH 130/194] Update NDK compatlib for 4.1.2. The replacement new failures present in newer versions are present here as well, with the following new issues: XPASS std/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.pass.cpp This is from the -NaN formatting fix in bionic. We previously had this wrong, and the upstream test is also wrong. There's currently an XFAIL for Android in this test because I haven't fixed the upstream test yet. After that is done, I'll need to teach the test runner how to XFAIL older Android versions... FAIL std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.dtor/dtor.pass.cpp dtor.pass.cpp:39: int main(): assertion "globalMemCounter.checkDeleteArrayCalledEq(1)" failed Haven't investigated this one yet. http://b/19412688 Note that this also needs the libgcc link ordering to be fixed in the build system, as we'll otherwise depend on libgcc symbols from libc that may or may not have been there. The build fix can't be submitted because the proper link order causes the libgcc unwinder to be used instead of the EHABI one: http://b/18471342 Bug: 18471532 Change-Id: Icf560485a9b8f5ebbe01e4458703e62ec94df5e1 --- libc/Android.mk | 62 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index 737eee298..b5e489976 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -123,7 +123,6 @@ libc_bionic_ndk_src_files := \ bionic/fpclassify.cpp \ bionic/futimens.cpp \ bionic/getcwd.cpp \ - bionic/getentropy_linux.c \ bionic/gethostname.cpp \ bionic/getpgrp.cpp \ bionic/getpid.cpp \ @@ -200,7 +199,6 @@ libc_bionic_ndk_src_files := \ bionic/strtold.cpp \ bionic/stubs.cpp \ bionic/symlink.cpp \ - bionic/sysconf.cpp \ bionic/sysinfo.cpp \ bionic/syslog.cpp \ bionic/sys_siglist.c \ @@ -213,7 +211,6 @@ libc_bionic_ndk_src_files := \ bionic/umount.cpp \ bionic/unlink.cpp \ bionic/utimes.cpp \ - bionic/vdso.cpp \ bionic/wait.cpp \ bionic/wchar.cpp \ bionic/wctype.cpp \ @@ -230,6 +227,11 @@ libc_bionic_src_files += bionic/fork.cpp # dereferences. libc_bionic_src_files += bionic/getauxval.cpp +# These three require getauxval, which isn't available on older platforms. +libc_bionic_src_files += bionic/getentropy_linux.c +libc_bionic_src_files += bionic/sysconf.cpp +libc_bionic_src_files += bionic/vdso.cpp + libc_cxa_src_files := \ bionic/__cxa_guard.cpp \ bionic/__cxa_pure_virtual.cpp \ @@ -326,10 +328,13 @@ libc_upstream_openbsd_gdtoa_src_files_64 := \ $(libc_upstream_openbsd_gdtoa_src_files) \ upstream-openbsd/lib/libc/gdtoa/strtorQ.c \ +# These two depend on getentropy_linux.cpp, which isn't in libc_ndk.a. libc_upstream_openbsd_src_files := \ - upstream-openbsd/lib/libc/compat-43/killpg.c \ upstream-openbsd/lib/libc/crypt/arc4random.c \ upstream-openbsd/lib/libc/crypt/arc4random_uniform.c \ + +libc_upstream_openbsd_ndk_src_files := \ + upstream-openbsd/lib/libc/compat-43/killpg.c \ upstream-openbsd/lib/libc/gen/alarm.c \ upstream-openbsd/lib/libc/gen/ctype_.c \ upstream-openbsd/lib/libc/gen/daemon.c \ @@ -797,6 +802,51 @@ $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_netbsd_src_files include $(BUILD_STATIC_LIBRARY) +# ======================================================== +# libc_openbsd_ndk.a - upstream OpenBSD C library code +# that can be safely included in the libc_ndk.a (doesn't +# contain any troublesome global data or constructors). +# ======================================================== +# +# These files are built with the openbsd-compat.h header file +# automatically included. + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(libc_upstream_openbsd_ndk_src_files) +ifneq (,$(filter $(TARGET_ARCH),x86 x86_64)) + # Clang has wrong long double size or LDBL_MANT_DIG, http://b/17163651. + LOCAL_CLANG := false +else + LOCAL_CLANG := $(use_clang) +endif + +LOCAL_CFLAGS := \ + $(libc_common_cflags) \ + -Wno-sign-compare \ + -Wno-uninitialized \ + -Wno-unused-parameter \ + -include openbsd-compat.h \ + +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) +LOCAL_C_INCLUDES := $(libc_common_c_includes) \ + $(LOCAL_PATH)/private \ + $(LOCAL_PATH)/upstream-openbsd/android/include \ + $(LOCAL_PATH)/upstream-openbsd/lib/libc/include \ + $(LOCAL_PATH)/upstream-openbsd/lib/libc/gdtoa/ \ + +LOCAL_MODULE := libc_openbsd_ndk +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_CXX_STL := none +LOCAL_SYSTEM_SHARED_LIBRARIES := +LOCAL_ADDRESS_SANITIZER := false +LOCAL_NATIVE_COVERAGE := $(bionic_coverage) + +$(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags)) +include $(BUILD_STATIC_LIBRARY) + + # ======================================================== # libc_openbsd.a - upstream OpenBSD C library code # ======================================================== @@ -1100,12 +1150,11 @@ LOCAL_CFLAGS := $(libc_common_cflags) \ LOCAL_WHOLE_STATIC_LIBRARIES := \ libc_bionic_ndk \ libc_cxa \ - libc_dns \ libc_freebsd \ libc_gdtoa \ libc_malloc \ libc_netbsd \ - libc_openbsd \ + libc_openbsd_ndk \ libc_stack_protector \ libc_syscalls \ libc_tzcode \ @@ -1150,6 +1199,7 @@ LOCAL_WHOLE_STATIC_LIBRARIES := \ libc_malloc \ libc_netbsd \ libc_openbsd \ + libc_openbsd_ndk \ libc_pthread \ libc_stack_protector \ libc_syscalls \ From 68dc20d41193831a94df04b994ff2f601dd38d10 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 6 Feb 2015 22:28:49 -0800 Subject: [PATCH 131/194] Implement _FILE_OFFSET_BITS (mostly). I still don't think we can make stdio's fseeko and ftello work, but we can have everything else, and very few programs use fseeko/ftello (and they can just refrain from using _FILE_OFFSET_BITS and be no worse off than they are today). Bug: 11865851 Change-Id: Ic3cb409aae6713f4b345de954bcc4241fcd969ec --- libc/include/fcntl.h | 19 +++++++++++++------ libc/include/stdio.h | 15 ++++++++++++--- libc/include/sys/cdefs.h | 9 +++++++++ libc/include/sys/mman.h | 5 +++++ libc/include/sys/sendfile.h | 4 ++++ libc/include/sys/types.h | 12 +++++------- libc/include/unistd.h | 25 +++++++++++++++++-------- 7 files changed, 65 insertions(+), 24 deletions(-) diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h index 4c4cfbd73..0f016d718 100644 --- a/libc/include/fcntl.h +++ b/libc/include/fcntl.h @@ -59,22 +59,29 @@ __BEGIN_DECLS extern int creat(const char*, mode_t); extern int creat64(const char*, mode_t); -extern int fallocate64(int, int, off64_t, off64_t); -extern int fallocate(int, int, off_t, off_t); extern int fcntl(int, int, ...); extern int openat(int, const char*, int, ...); extern int openat64(int, const char*, int, ...); extern int open(const char*, int, ...); extern int open64(const char*, int, ...); -extern int posix_fadvise64(int, off64_t, off64_t, int); -extern int posix_fadvise(int, off_t, off_t, int); -extern int posix_fallocate64(int, off64_t, off64_t); -extern int posix_fallocate(int, off_t, off_t); extern ssize_t splice(int, off64_t*, int, off64_t*, size_t, unsigned int); extern ssize_t tee(int, int, size_t, unsigned int); extern int unlinkat(int, const char*, int); extern ssize_t vmsplice(int, const struct iovec*, size_t, unsigned int); +#if defined(__USE_FILE_OFFSET64) +extern int fallocate(int, int, off_t, off_t) __RENAME(fallocate64); +extern int posix_fadvise(int, off_t, off_t, int) __RENAME(posix_fadvise64); +extern int posix_fallocate(int, off_t, off_t) __RENAME(posix_fallocate); +#else +extern int fallocate(int, int, off_t, off_t); +extern int posix_fadvise(int, off_t, off_t, int); +extern int posix_fallocate(int, off_t, off_t); +#endif +extern int fallocate64(int, int, off64_t, off64_t); +extern int posix_fadvise64(int, off64_t, off64_t, int); +extern int posix_fallocate64(int, off64_t, off64_t); + extern int __open_2(const char*, int); extern int __open_real(const char*, int, ...) __RENAME(open); extern int __openat_2(int, const char*, int); diff --git a/libc/include/stdio.h b/libc/include/stdio.h index b04aa24c2..ff454daaf 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -57,8 +57,6 @@ __BEGIN_DECLS -#define _FSTDIO /* Define for new stdio with functions. */ - typedef off_t fpos_t; /* stdio file position type */ /* @@ -282,11 +280,22 @@ char* tempnam(const char*, const char*) extern int rename(const char*, const char*); extern int renameat(int, const char*, int, const char*); +#if defined(__USE_FILE_OFFSET64) +/* Not possible. */ +int fgetpos(FILE * __restrict, fpos_t * __restrict) + __attribute__((__error__("not available with _FILE_OFFSET_BITS=64"))); +int fsetpos(FILE *, const fpos_t *) + __attribute__((__error__("not available with _FILE_OFFSET_BITS=64"))); +int fseeko(FILE *, off_t, int) + __attribute__((__error__("not available with _FILE_OFFSET_BITS=64"))); +off_t ftello(FILE *) + __attribute__((__error__("not available with _FILE_OFFSET_BITS=64"))); +#else int fgetpos(FILE * __restrict, fpos_t * __restrict); int fsetpos(FILE *, const fpos_t *); - int fseeko(FILE *, off_t, int); off_t ftello(FILE *); +#endif #if __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE int snprintf(char * __restrict, size_t, const char * __restrict, ...) diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 48763d730..29665e56e 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -378,6 +378,15 @@ # define __USE_BSD 1 #endif +/* + * _FILE_OFFSET_BITS 64 support. + */ +#if !defined(__LP64__) && defined(_FILE_OFFSET_BITS) +#if _FILE_OFFSET_BITS == 64 +#define __USE_FILE_OFFSET64 1 +#endif +#endif + /*- * POSIX.1 requires that the macros we test be defined before any standard * header file is included. diff --git a/libc/include/sys/mman.h b/libc/include/sys/mman.h index 166322269..6857f60fa 100644 --- a/libc/include/sys/mman.h +++ b/libc/include/sys/mman.h @@ -49,8 +49,13 @@ __BEGIN_DECLS #define POSIX_MADV_WILLNEED MADV_WILLNEED #define POSIX_MADV_DONTNEED MADV_DONTNEED +#if defined(__USE_FILE_OFFSET64) +extern void* mmap(void*, size_t, int, int, int, off_t) __RENAME(mmap64); +#else extern void* mmap(void*, size_t, int, int, int, off_t); +#endif extern void* mmap64(void*, size_t, int, int, int, off64_t); + extern int munmap(void*, size_t); extern int msync(const void*, size_t, int); extern int mprotect(const void*, size_t, int); diff --git a/libc/include/sys/sendfile.h b/libc/include/sys/sendfile.h index 81a3c44d5..c588e6839 100644 --- a/libc/include/sys/sendfile.h +++ b/libc/include/sys/sendfile.h @@ -34,7 +34,11 @@ __BEGIN_DECLS +#if defined(__USE_FILE_OFFSET64) +extern ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count) __RENAME(sendfile64); +#else extern ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count); +#endif extern ssize_t sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count); __END_DECLS diff --git a/libc/include/sys/types.h b/libc/include/sys/types.h index a5fa69290..a6b0fd87f 100644 --- a/libc/include/sys/types.h +++ b/libc/include/sys/types.h @@ -90,16 +90,14 @@ typedef uint64_t dev_t; typedef __kernel_time_t __time_t; typedef __time_t time_t; -/* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ -#if !defined(__LP64__) -typedef __kernel_off_t off_t; -typedef __kernel_loff_t loff_t; +#if defined(__USE_FILE_OFFSET64) || defined(__LP64__) +typedef int64_t off_t; +typedef off_t loff_t; typedef loff_t off64_t; #else -/* We could re-use the LP32 definitions, but that would mean that although off_t and loff_t/off64_t - * would be the same size, they wouldn't actually be the same type, which can lead to warnings. */ +/* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ typedef __kernel_off_t off_t; -typedef off_t loff_t; +typedef __kernel_loff_t loff_t; typedef loff_t off64_t; #endif diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 6403d4ae6..25d48b653 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -146,22 +146,14 @@ extern int chown(const char *, uid_t, gid_t); extern int fchown(int, uid_t, gid_t); extern int fchownat(int, const char*, uid_t, gid_t, int); extern int lchown(const char *, uid_t, gid_t); -extern int truncate(const char *, off_t); -extern int truncate64(const char *, off64_t); extern char *getcwd(char *, size_t); extern int sync(void); extern int close(int); -extern off_t lseek(int, off_t, int); -extern off64_t lseek64(int, off64_t, int); extern ssize_t read(int, void *, size_t); extern ssize_t write(int, const void *, size_t); -extern ssize_t pread(int, void *, size_t, off_t); -extern ssize_t pread64(int, void *, size_t, off64_t); -extern ssize_t pwrite(int, const void *, size_t, off_t); -extern ssize_t pwrite64(int, const void *, size_t, off64_t); extern int dup(int); extern int dup2(int, int); @@ -171,7 +163,24 @@ extern int ioctl(int, int, ...); extern int flock(int, int); extern int fsync(int); extern int fdatasync(int); + +#if defined(__USE_FILE_OFFSET64) +extern int truncate(const char *, off_t) __RENAME(truncate64); +extern off_t lseek(int, off_t, int) __RENAME(lseek64); +extern ssize_t pread(int, void *, size_t, off_t) __RENAME(pread64); +extern ssize_t pwrite(int, const void *, size_t, off_t) __RENAME(pwrite64); +extern int ftruncate(int, off_t) __RENAME(ftruncate64); +#else +extern int truncate(const char *, off_t); +extern off_t lseek(int, off_t, int); +extern ssize_t pread(int, void *, size_t, off_t); +extern ssize_t pwrite(int, const void *, size_t, off_t); extern int ftruncate(int, off_t); +#endif +extern int truncate64(const char *, off64_t); +extern off64_t lseek64(int, off64_t, int); +extern ssize_t pread64(int, void *, size_t, off64_t); +extern ssize_t pwrite64(int, const void *, size_t, off64_t); extern int ftruncate64(int, off64_t); extern int pause(void); From 913fcb274f353348a353aaabbe872b3b5924a6e7 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 18 Feb 2015 12:20:32 -0800 Subject: [PATCH 132/194] Make gets() deprecated. gets is already deprecated in glibc. Others with __warnattr are not deprecated. Change-Id: I80a276d2b5964630218be47f1c94b146c0d31151 --- libc/include/stdio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/include/stdio.h b/libc/include/stdio.h index b04aa24c2..eb578f586 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -266,7 +266,7 @@ int vdprintf(int, const char * __restrict, __va_list) __printflike(2, 0); #ifndef __AUDIT__ #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L -char* gets(char*) __warnattr("gets is very unsafe; consider using fgets"); +char* gets(char*) __attribute__((deprecated("gets is very unsafe; consider using fgets"))); #endif int sprintf(char* __restrict, const char* __restrict, ...) __printflike(2, 3) __warnattr("sprintf is often misused; please use snprintf"); From 2c678e6644a0ac7bfdfb8f199ac2cd0d4ea1153f Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Wed, 18 Feb 2015 17:37:52 -0800 Subject: [PATCH 133/194] Parameterize use of clang in libc_ndk. We still have issues with clang coverage in static libraries, so we need to make sure we follow suit with the rest of libc for now. Bug: 17574078 Change-Id: I2ab58a84b1caa0d8d08415d240c35adec5b1e150 --- libc/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/Android.mk b/libc/Android.mk index b5e489976..7dc7cbf28 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1123,7 +1123,7 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libc_ndk -LOCAL_CLANG := true +LOCAL_CLANG := $(use_clang) LOCAL_ASFLAGS := $(LOCAL_CFLAGS) LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CFLAGS := $(libc_common_cflags) -fvisibility=hidden -O0 From 3cfb52aab2548df635e9672218cc433e14922fd3 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 18 Feb 2015 21:29:13 -0800 Subject: [PATCH 134/194] Add GNU extensions mempcpy and wmemcpy. Used by elfutils. On the bright side, they stopped using __mempcpy. Bug: 18374026 Change-Id: Id29bbe6ef1c5ed5a171bb6c32182f129d8332abb --- libc/Android.mk | 2 ++ libc/bionic/mempcpy.cpp | 33 +++++++++++++++++++++++++++++++++ libc/bionic/wmempcpy.cpp | 33 +++++++++++++++++++++++++++++++++ libc/include/string.h | 3 +++ libc/include/wchar.h | 3 +++ tests/string_test.cpp | 5 +++++ tests/wchar_test.cpp | 5 +++++ 7 files changed, 84 insertions(+) create mode 100644 libc/bionic/mempcpy.cpp create mode 100644 libc/bionic/wmempcpy.cpp diff --git a/libc/Android.mk b/libc/Android.mk index 7dc7cbf28..9dd386411 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -143,6 +143,7 @@ libc_bionic_ndk_src_files := \ bionic/mbrtoc16.cpp \ bionic/mbrtoc32.cpp \ bionic/mbstate.cpp \ + bionic/mempcpy.cpp \ bionic/mkdir.cpp \ bionic/mkfifo.cpp \ bionic/mknod.cpp \ @@ -214,6 +215,7 @@ libc_bionic_ndk_src_files := \ bionic/wait.cpp \ bionic/wchar.cpp \ bionic/wctype.cpp \ + bionic/wmempcpy.cpp \ libc_bionic_src_files := diff --git a/libc/bionic/mempcpy.cpp b/libc/bionic/mempcpy.cpp new file mode 100644 index 000000000..b7b72f737 --- /dev/null +++ b/libc/bionic/mempcpy.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +void* mempcpy(void* dst, const void* src, size_t n) { + return reinterpret_cast(memcpy(dst, src, n)) + n; +} diff --git a/libc/bionic/wmempcpy.cpp b/libc/bionic/wmempcpy.cpp new file mode 100644 index 000000000..54ebf8662 --- /dev/null +++ b/libc/bionic/wmempcpy.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +wchar_t* wmempcpy(wchar_t* dst, const wchar_t* src, size_t n) { + return wmemcpy(dst, src, n) + n; +} diff --git a/libc/include/string.h b/libc/include/string.h index d67928c0f..fffe1362c 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -44,6 +44,9 @@ extern void* memchr(const void *, int, size_t) __purefunc; extern void* memrchr(const void *, int, size_t) __purefunc; extern int memcmp(const void *, const void *, size_t) __purefunc; extern void* memcpy(void* __restrict, const void* __restrict, size_t); +#if defined(__USE_GNU) +extern void* mempcpy(void* __restrict, const void* __restrict, size_t); +#endif extern void* memmove(void *, const void *, size_t); extern void* memset(void *, int, size_t); extern void* memmem(const void *, size_t, const void *, size_t) __purefunc; diff --git a/libc/include/wchar.h b/libc/include/wchar.h index cfd22992b..ea6aca03c 100644 --- a/libc/include/wchar.h +++ b/libc/include/wchar.h @@ -151,6 +151,9 @@ extern int wcwidth(wchar_t); extern wchar_t *wmemchr(const wchar_t *, wchar_t, size_t); extern int wmemcmp(const wchar_t *, const wchar_t *, size_t); extern wchar_t *wmemcpy(wchar_t *, const wchar_t *, size_t); +#if defined(__USE_GNU) +extern wchar_t *wmempcpy(wchar_t *, const wchar_t *, size_t); +#endif extern wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t); extern wchar_t *wmemset(wchar_t *, wchar_t, size_t); extern int wprintf(const wchar_t *, ...); diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 66cf848c9..1d63c7668 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -1395,3 +1395,8 @@ TEST(string, strnlen_147048) { EXPECT_EQ(0U, strnlen(heap_src, 1024*1024*1024)); delete[] heap_src; } + +TEST(string, mempcpy) { + char dst[6]; + ASSERT_EQ(&dst[4], reinterpret_cast(mempcpy(dst, "hello", 4))); +} diff --git a/tests/wchar_test.cpp b/tests/wchar_test.cpp index a1d150117..e86d56dc0 100644 --- a/tests/wchar_test.cpp +++ b/tests/wchar_test.cpp @@ -667,3 +667,8 @@ TEST(wchar, wcstoull_l_EINVAL) { wcstoull_l(L"123", NULL, 37, LC_GLOBAL_LOCALE); ASSERT_EQ(EINVAL, errno); } + +TEST(wchar, wmempcpy) { + wchar_t dst[6]; + ASSERT_EQ(&dst[4], wmempcpy(dst, L"hello", 4)); +} From df4942c04a63ae6e4f5c78ece9f696d6b8b74d32 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 17 Feb 2015 19:58:53 -0800 Subject: [PATCH 135/194] Refactor the benchmark code. Changes: - Modify the benchmarks to derive from a single Benchmark object. - Rewrite the main iteration code. This includes changing the iteration code to use the actual total time calculated by the benchmark as a basis for determining whether there are enough iterations instead of using the time it takes to run the benchmark. - Allow benchmarks to take no argument, int, or double. - Fix the PrettyInt printer for negative integers. - Modify the max column width name to include the whole name including the arg part. - Reformat property_benchmark.cpp in line with the rest of the code. - Modify a few of the math benchmarks to take an argument instead of separate benchmarks for the same function with different args. - Create a vector of regex_t structs to represent the args all at once instead of when running each benchmark. This change is in preparation for adding new math based benchmarks. Tested by running on a nexus flo running at max using the new code and the old code and comparing. All of the numbers are similar, but some of the iterations are different due to the slightly different algorithm used. Change-Id: I57ad1f3ff083282b9ffeb72e687cab369ce3523a --- benchmarks/Android.mk | 59 +++--- benchmarks/Benchmark.cpp | 154 ++++++++++++++ benchmarks/benchmark/Benchmark.h | 154 ++++++++++++++ benchmarks/benchmark_main.cpp | 266 ------------------------ benchmarks/include/benchmark.h | 65 ------ benchmarks/main.cpp | 61 ++++++ benchmarks/math_benchmark.cpp | 121 +++-------- benchmarks/property_benchmark.cpp | 318 ++++++++++++++--------------- benchmarks/pthread_benchmark.cpp | 74 +++---- benchmarks/semaphore_benchmark.cpp | 114 +---------- benchmarks/stdio_benchmark.cpp | 50 ++--- benchmarks/string_benchmark.cpp | 35 ++-- benchmarks/time_benchmark.cpp | 25 ++- benchmarks/unistd_benchmark.cpp | 20 +- benchmarks/utils.cpp | 81 ++++++++ benchmarks/utils.h | 26 +++ 16 files changed, 807 insertions(+), 816 deletions(-) create mode 100644 benchmarks/Benchmark.cpp create mode 100644 benchmarks/benchmark/Benchmark.h delete mode 100644 benchmarks/benchmark_main.cpp delete mode 100644 benchmarks/include/benchmark.h create mode 100644 benchmarks/main.cpp create mode 100644 benchmarks/utils.cpp create mode 100644 benchmarks/utils.h diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk index c3eb6d3fb..ae0541f12 100644 --- a/benchmarks/Android.mk +++ b/benchmarks/Android.mk @@ -20,12 +20,29 @@ LOCAL_PATH := $(call my-dir) # Benchmarks library, usable by projects outside this directory. # ----------------------------------------------------------------------------- +benchmark_cflags := \ + -O2 \ + -fno-builtin \ + -Wall \ + -Wextra \ + -Werror \ + -Wunused \ + +benchmark_cppflags := \ + -std=gnu++11 \ + +benchmarklib_src_files := \ + Benchmark.cpp \ + utils.cpp \ + main.cpp \ + include $(CLEAR_VARS) LOCAL_MODULE := libbenchmark -LOCAL_CFLAGS += -O2 -Wall -Wextra -Werror -LOCAL_SRC_FILES := benchmark_main.cpp -LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include +LOCAL_CFLAGS := $(benchmark_cflags) +LOCAL_CPPFLAGS := $(benchmark_cppflags) +LOCAL_SRC_FILES := $(benchmarklib_src_files) +LOCAL_C_INCLUDES := $(benchmark_c_includes) +LOCAL_STATIC_LIBRARIES := libutils include $(BUILD_STATIC_LIBRARY) # Only supported on linux systems. @@ -33,11 +50,12 @@ ifeq ($(HOST_OS),linux) include $(CLEAR_VARS) LOCAL_MODULE := libbenchmark -LOCAL_CFLAGS += -O2 -Wall -Wextra -Werror -LOCAL_SRC_FILES := benchmark_main.cpp -LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include +LOCAL_CFLAGS := $(benchmark_cflags) +LOCAL_CPPFLAGS := $(benchmark_cppflags) +LOCAL_SRC_FILES := $(benchmarklib_src_files) +LOCAL_C_INCLUDES := $(benchmark_c_includes) LOCAL_MULTILIB := both +LOCAL_STATIC_LIBRARIES := libutils include $(BUILD_HOST_STATIC_LIBRARY) endif @@ -45,16 +63,9 @@ endif # ----------------------------------------------------------------------------- # Benchmarks. # ----------------------------------------------------------------------------- - -benchmark_c_flags = \ - -O2 \ - -Wall -Wextra -Wunused \ - -Werror \ - -fno-builtin \ - -std=gnu++11 \ - -benchmark_src_files = \ +benchmark_src_files := \ math_benchmark.cpp \ + property_benchmark.cpp \ pthread_benchmark.cpp \ semaphore_benchmark.cpp \ stdio_benchmark.cpp \ @@ -70,9 +81,10 @@ LOCAL_MODULE := bionic-benchmarks LOCAL_MODULE_STEM_32 := bionic-benchmarks32 LOCAL_MODULE_STEM_64 := bionic-benchmarks64 LOCAL_MULTILIB := both -LOCAL_CFLAGS += $(benchmark_c_flags) -LOCAL_SRC_FILES := $(benchmark_src_files) property_benchmark.cpp -LOCAL_STATIC_LIBRARIES += libbenchmark +LOCAL_CFLAGS := $(benchmark_cflags) +LOCAL_CPPFLAGS := $(benchmark_cppflags) +LOCAL_SRC_FILES := $(benchmark_src_files) +LOCAL_STATIC_LIBRARIES := libbenchmark libutils include $(BUILD_EXECUTABLE) # We don't build a static benchmark executable because it's not usually @@ -90,10 +102,11 @@ LOCAL_MODULE := bionic-benchmarks-glibc LOCAL_MODULE_STEM_32 := bionic-benchmarks-glibc32 LOCAL_MODULE_STEM_64 := bionic-benchmarks-glibc64 LOCAL_MULTILIB := both -LOCAL_CFLAGS += $(benchmark_c_flags) -LOCAL_LDFLAGS += -lrt +LOCAL_CFLAGS := $(benchmark_cflags) +LOCAL_CPPFLAGS := $(benchmark_cppflags) +LOCAL_LDFLAGS := -lrt LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES += libbenchmark +LOCAL_STATIC_LIBRARIES := libbenchmark libutils include $(BUILD_HOST_EXECUTABLE) endif diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp new file mode 100644 index 000000000..0eb779a5d --- /dev/null +++ b/benchmarks/Benchmark.cpp @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include "utils.h" + +namespace testing { + +static uint64_t NanoTime() { + struct timespec t; + t.tv_sec = t.tv_nsec = 0; + clock_gettime(CLOCK_MONOTONIC, &t); + return static_cast(t.tv_sec) * 1000000000LL + t.tv_nsec; +} + +std::vector& Benchmark::List() { + static std::vector list; + return list; +} + +size_t Benchmark::MaxNameColumnWidth() { + size_t max = 20; + for (auto& benchmark : List()) { + max = std::max(max, benchmark->NameColumnWidth()); + } + return max; +} + +bool Benchmark::RunAll(std::vector& regs) { + bool ran_benchmark = false; + for (auto& benchmark : List()) { + if (benchmark->ShouldRun(regs)) { + if (!ran_benchmark) { + printf("%-*s %10s %10s\n", MaxNameColumnWidth(), "", "iterations", "ns/op"); + ran_benchmark = true; + } + benchmark->RunAll(); + } + } + return ran_benchmark; +} + +bool Benchmark::ShouldRun(std::vector& regs) { + if (regs.empty()) { + return true; + } + + for (const auto& re : regs) { + if (regexec(re, Name().c_str(), 0, NULL, 0) != REG_NOMATCH) { + return true; + } + } + return false; +} + +void Benchmark::StopBenchmarkTiming() { + if (start_time_ns_ != 0) { + total_time_ns_ += NanoTime() - start_time_ns_; + } + start_time_ns_ = 0; +} + +void Benchmark::StartBenchmarkTiming() { + if (start_time_ns_ == 0) { + start_time_ns_ = NanoTime(); + } +} + +std::string BenchmarkWithoutArg::GetNameStr(void*) { + return Name(); +} + +template <> +std::string BenchmarkWithArg::GetNameStr(int arg) { + return Name() + "/" + PrettyInt(arg, 2); +} + +template <> +std::string BenchmarkWithArg::GetNameStr(double arg) { + return Name() + "/" + android::StringPrintf("%0.6f", arg); +} + +template +void BenchmarkT::RunWithArg(T arg) { + int new_iterations = 1; + int iterations; + while (new_iterations < 1e8) { + bytes_processed_ = 0; + total_time_ns_ = 0; + start_time_ns_ = 0; + + iterations = new_iterations; + RunIterations(iterations, arg); + if (total_time_ns_ >= 1e9) { + break; + } + + if (total_time_ns_/iterations == 0) { + new_iterations = 1e9; + } else { + new_iterations = 1e9/ (total_time_ns_/iterations); + } + new_iterations = std::max(iterations + 1, + std::min(new_iterations + new_iterations/2, 100*iterations)); + + new_iterations = Round(new_iterations); + } + + printf("%-*s %10s %10" PRId64, MaxNameColumnWidth(), GetNameStr(arg).c_str(), + PrettyInt(iterations, 10).c_str(), total_time_ns_/iterations); + + if (total_time_ns_ > 0 && bytes_processed_ > 0) { + double gib_processed = static_cast(bytes_processed_)/1e9; + double seconds = static_cast(total_time_ns_)/1e9; + printf(" %8.3f GiB/s", gib_processed/seconds); + } + printf("\n"); + fflush(stdout); +} + +template class BenchmarkT; +template class BenchmarkT; +template class BenchmarkT; + +template class BenchmarkWithArg; +template class BenchmarkWithArg; + +} // namespace testing diff --git a/benchmarks/benchmark/Benchmark.h b/benchmarks/benchmark/Benchmark.h new file mode 100644 index 000000000..7c208e657 --- /dev/null +++ b/benchmarks/benchmark/Benchmark.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BENCHMARKS_BENCHMARK_H_ +#define BENCHMARKS_BENCHMARK_H_ + +#include +#include + +#include +#include + +namespace testing { + +class Benchmark { +public: + Benchmark() { + List().push_back(this); + } + virtual ~Benchmark() {} + + virtual std::string Name() = 0; + + virtual void RunAll() = 0; + + bool ShouldRun(std::vector&); + + void SetBenchmarkBytesProcessed(uint64_t bytes) { bytes_processed_ += bytes; } + void StopBenchmarkTiming(); + void StartBenchmarkTiming(); + + // Run all of the benchmarks that have registered. + static bool RunAll(std::vector&); + + static std::vector& List(); + + static size_t MaxNameColumnWidth(); + +protected: + virtual size_t NameColumnWidth() = 0; + + uint64_t bytes_processed_; + uint64_t total_time_ns_; + uint64_t start_time_ns_; +}; + +template +class BenchmarkT : public Benchmark { +public: + BenchmarkT() {} + virtual ~BenchmarkT() {} + +protected: + void RunWithArg(T arg); + virtual void RunIterations(int, T) = 0; + virtual std::string GetNameStr(T) = 0; +}; + +class BenchmarkWithoutArg : public BenchmarkT { +public: + BenchmarkWithoutArg() {} + virtual ~BenchmarkWithoutArg() {} + +protected: + virtual void RunAll() override { + RunWithArg(nullptr); + } + + virtual void RunIterations(int iters, void*) override { + Run(iters); + } + + virtual void Run(int) = 0; + + virtual size_t NameColumnWidth() override { + return Name().size(); + } + + virtual std::string GetNameStr(void *) override; +}; + +template +class BenchmarkWithArg : public BenchmarkT { +public: + BenchmarkWithArg() {} + virtual ~BenchmarkWithArg() {} + + BenchmarkWithArg* Arg(T arg) { + args_.push_back(arg); + return this; + } + +protected: + virtual size_t NameColumnWidth() override { + size_t max = 0; + for (const auto arg : args_) { + max = std::max(max, GetNameStr(arg).size()); + } + return max; + } + + std::string GetNameStr(T arg) override; + + virtual void RunAll() override { + for (T arg : args_) { + BenchmarkT::RunWithArg(arg); + } + } + + virtual void RunIterations(int iters, T arg) override { + Run(iters, arg); + } + + virtual void Run(int iters, T arg) = 0; + +private: + std::vector args_; +}; + +} // namespace testing + +#define BENCHMARK_START(f, super_class) \ + class f : public super_class { \ + public: \ + f() {} \ + virtual ~f() {} \ + virtual std::string Name() override { return #f; } \ + +#define BENCHMARK_NO_ARG(f) \ + BENCHMARK_START(f, ::testing::BenchmarkWithoutArg) \ + virtual void Run(int) override; \ + }; \ + static ::testing::Benchmark* __benchmark_##f = new f() + +#define BENCHMARK_WITH_ARG(f, arg_type) \ + BENCHMARK_START(f, ::testing::BenchmarkWithArg) \ + virtual void Run(int, arg_type) override; \ + }; \ + static ::testing::BenchmarkWithArg* __benchmark_##f = (new f()) + +#endif // BENCHMARKS_BENCHMARK_H_ diff --git a/benchmarks/benchmark_main.cpp b/benchmarks/benchmark_main.cpp deleted file mode 100644 index fae09bec4..000000000 --- a/benchmarks/benchmark_main.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include -#include -#include -#include - -#include -#include - -#include - -static int64_t g_bytes_processed; -static int64_t g_benchmark_total_time_ns; -static int64_t g_benchmark_start_time_ns; -static int g_name_column_width = 20; - -typedef std::vector<::testing::Benchmark*> BenchmarkList; - -static BenchmarkList& Benchmarks() { - static BenchmarkList benchmarks; - return benchmarks; -} - -// Similar to the code in art, but supporting both binary and decimal prefixes. -static std::string PrettyInt(uint64_t count, size_t base) { - if (base != 2 && base != 10) abort(); - - // The byte thresholds at which we display amounts. A count is displayed - // in unit U when kUnitThresholds[U] <= bytes < kUnitThresholds[U+1]. - static const uint64_t kUnitThresholds2[] = { - 1024*1024*1024 /* Gi */, 2*1024*1024 /* Mi */, 3*1024 /* Ki */, 0, - }; - static const uint64_t kUnitThresholds10[] = { - 1000*1000*1000 /* G */, 2*1000*1000 /* M */, 3*1000 /* k */, 0, - }; - static const uint64_t kAmountPerUnit2[] = { 1024*1024*1024, 1024*1024, 1024, 1 }; - static const uint64_t kAmountPerUnit10[] = { 1000*1000*1000, 1000*1000, 1000, 1 }; - static const char* const kUnitStrings2[] = { "Gi", "Mi", "Ki", "" }; - static const char* const kUnitStrings10[] = { "G", "M", "k", "" }; - - // Which set are we using? - const uint64_t* kUnitThresholds = ((base == 2) ? kUnitThresholds2 : kUnitThresholds10); - const uint64_t* kAmountPerUnit = ((base == 2) ? kAmountPerUnit2 : kAmountPerUnit10); - const char* const* kUnitStrings = ((base == 2) ? kUnitStrings2 : kUnitStrings10); - - size_t i = 0; - for (; kUnitThresholds[i] != 0; ++i) { - if (count >= kUnitThresholds[i]) { - break; - } - } - char* s = NULL; - asprintf(&s, "%" PRId64 "%s", count / kAmountPerUnit[i], kUnitStrings[i]); - std::string result(s); - free(s); - return result; -} - -static int Round(int n) { - int base = 1; - while (base*10 < n) { - base *= 10; - } - if (n < 2*base) { - return 2*base; - } - if (n < 5*base) { - return 5*base; - } - return 10*base; -} - -static int64_t NanoTime() { - struct timespec t; - t.tv_sec = t.tv_nsec = 0; - clock_gettime(CLOCK_MONOTONIC, &t); - return static_cast(t.tv_sec) * 1000000000LL + t.tv_nsec; -} - -namespace testing { - -Benchmark* Benchmark::Arg(int arg) { - args_.push_back(arg); - return this; -} - -const char* Benchmark::Name() { - return name_; -} - -bool Benchmark::ShouldRun(int argc, char* argv[]) { - if (argc == 1) { - return true; // With no arguments, we run all benchmarks. - } - // Otherwise, we interpret each argument as a regular expression and - // see if any of our benchmarks match. - for (int i = 1; i < argc; i++) { - regex_t re; - if (regcomp(&re, argv[i], 0) != 0) { - fprintf(stderr, "couldn't compile \"%s\" as a regular expression!\n", argv[i]); - exit(EXIT_FAILURE); - } - int match = regexec(&re, name_, 0, NULL, 0); - regfree(&re); - if (match != REG_NOMATCH) { - return true; - } - } - return false; -} - -void Benchmark::Register(const char* name, void (*fn)(int), void (*fn_range)(int, int)) { - name_ = name; - fn_ = fn; - fn_range_ = fn_range; - - if (fn_ == NULL && fn_range_ == NULL) { - fprintf(stderr, "%s: missing function\n", name_); - exit(EXIT_FAILURE); - } - - Benchmarks().push_back(this); -} - -void Benchmark::Run() { - if (fn_ != NULL) { - RunWithArg(0); - } else { - if (args_.empty()) { - fprintf(stderr, "%s: no args!\n", name_); - exit(EXIT_FAILURE); - } - for (size_t i = 0; i < args_.size(); ++i) { - RunWithArg(args_[i]); - } - } -} - -void Benchmark::RunRepeatedlyWithArg(int iterations, int arg) { - g_bytes_processed = 0; - g_benchmark_total_time_ns = 0; - g_benchmark_start_time_ns = NanoTime(); - if (fn_ != NULL) { - fn_(iterations); - } else { - fn_range_(iterations, arg); - } - if (g_benchmark_start_time_ns != 0) { - g_benchmark_total_time_ns += NanoTime() - g_benchmark_start_time_ns; - } -} - -void Benchmark::RunWithArg(int arg) { - // Run once in case it's expensive. - int iterations = 1; - int64_t realStartTime = NanoTime(); - RunRepeatedlyWithArg(iterations, arg); - int64_t realTotalTime = NanoTime() - realStartTime; - while (realTotalTime < 1e9 && iterations < 1e8) { - int last = iterations; - if (realTotalTime/iterations == 0) { - iterations = 1e9; - } else { - iterations = 1e9 / (realTotalTime/iterations); - } - iterations = std::max(last + 1, std::min(iterations + iterations/2, 100*last)); - iterations = Round(iterations); - realStartTime = NanoTime(); - RunRepeatedlyWithArg(iterations, arg); - realTotalTime = NanoTime() - realStartTime; - } - - char throughput[100]; - throughput[0] = '\0'; - - if (g_benchmark_total_time_ns > 0 && g_bytes_processed > 0) { - double gib_processed = static_cast(g_bytes_processed)/1e9; - double seconds = static_cast(g_benchmark_total_time_ns)/1e9; - snprintf(throughput, sizeof(throughput), " %8.3f GiB/s", gib_processed/seconds); - } - - char full_name[100]; - if (fn_range_ != NULL) { - snprintf(full_name, sizeof(full_name), "%s/%s", name_, PrettyInt(arg, 2).c_str()); - } else { - snprintf(full_name, sizeof(full_name), "%s", name_); - } - - printf("%-*s %10s %10" PRId64 "%s\n", - g_name_column_width, full_name, - PrettyInt(iterations, 10).c_str(), - g_benchmark_total_time_ns/iterations, - throughput); - fflush(stdout); -} - -} // namespace testing - -void SetBenchmarkBytesProcessed(int64_t x) { - g_bytes_processed = x; -} - -void StopBenchmarkTiming() { - if (g_benchmark_start_time_ns != 0) { - g_benchmark_total_time_ns += NanoTime() - g_benchmark_start_time_ns; - } - g_benchmark_start_time_ns = 0; -} - -void StartBenchmarkTiming() { - if (g_benchmark_start_time_ns == 0) { - g_benchmark_start_time_ns = NanoTime(); - } -} - -int main(int argc, char* argv[]) { - if (Benchmarks().empty()) { - fprintf(stderr, "No benchmarks registered!\n"); - exit(EXIT_FAILURE); - } - - for (auto& b : Benchmarks()) { - int name_width = static_cast(strlen(b->Name())); - g_name_column_width = std::max(g_name_column_width, name_width); - } - - bool need_header = true; - for (auto& b : Benchmarks()) { - if (b->ShouldRun(argc, argv)) { - if (need_header) { - printf("%-*s %10s %10s\n", g_name_column_width, "", "iterations", "ns/op"); - fflush(stdout); - need_header = false; - } - b->Run(); - } - } - - if (need_header) { - fprintf(stderr, "No matching benchmarks!\n"); - fprintf(stderr, "Available benchmarks:\n"); - for (auto& b : Benchmarks()) { - fprintf(stderr, " %s\n", b->Name()); - } - exit(EXIT_FAILURE); - } - - return 0; -} diff --git a/benchmarks/include/benchmark.h b/benchmarks/include/benchmark.h deleted file mode 100644 index 7e134a06b..000000000 --- a/benchmarks/include/benchmark.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef BENCHMARKS_BENCHMARK_H_ -#define BENCHMARKS_BENCHMARK_H_ - -#include -#include - -namespace testing { - -class Benchmark { - public: - Benchmark(const char* name, void (*fn)(int)) { - Register(name, fn, NULL); - } - - Benchmark(const char* name, void (*fn_range)(int, int)) { - Register(name, NULL, fn_range); - } - - Benchmark* Arg(int x); - - const char* Name(); - - bool ShouldRun(int argc, char* argv[]); - void Run(); - - private: - const char* name_; - - void (*fn_)(int); - void (*fn_range_)(int, int); - - std::vector args_; - - void Register(const char* name, void (*fn)(int), void (*fn_range)(int, int)); - void RunRepeatedlyWithArg(int iterations, int arg); - void RunWithArg(int arg); -}; - -} // namespace testing - -void SetBenchmarkBytesProcessed(int64_t); -void StopBenchmarkTiming(); -void StartBenchmarkTiming(); - -#define BENCHMARK(f) \ - static ::testing::Benchmark* _benchmark_##f __attribute__((unused)) = \ - (new ::testing::Benchmark(#f, f)) - -#endif diff --git a/benchmarks/main.cpp b/benchmarks/main.cpp new file mode 100644 index 000000000..b6984fca7 --- /dev/null +++ b/benchmarks/main.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include +#include + +#include + +#include + +int main(int argc, char* argv[]) { + if (::testing::Benchmark::List().empty()) { + fprintf(stderr, "No benchmarks registered!\n"); + exit(EXIT_FAILURE); + } + + std::vector regs; + for (int i = 1; i < argc; i++) { + regex_t* re = new regex_t; + int errcode = regcomp(re, argv[i], 0); + if (errcode != 0) { + size_t errbuf_size = regerror(errcode, re, NULL, 0); + if (errbuf_size > 0) { + char* errbuf = new char[errbuf_size]; + regerror(errcode, re, errbuf, errbuf_size); + fprintf(stderr, "Couldn't compile \"%s\" as a regular expression: %s\n", + argv[i], errbuf); + } else { + fprintf(stderr, "Unknown compile error for \"%s\" as a regular expression!\n", argv[i]); + } + exit(EXIT_FAILURE); + } + regs.push_back(re); + } + + if (!::testing::Benchmark::RunAll(regs)) { + fprintf(stderr, "No matching benchmarks!\n"); + fprintf(stderr, "Available benchmarks:\n"); + for (const auto& benchmark : ::testing::Benchmark::List()) { + fprintf(stderr, " %s\n", benchmark->Name().c_str()); + } + exit(EXIT_FAILURE); + } + + return 0; +} diff --git a/benchmarks/math_benchmark.cpp b/benchmarks/math_benchmark.cpp index 8d6dd1002..4de28d1b3 100644 --- a/benchmarks/math_benchmark.cpp +++ b/benchmarks/math_benchmark.cpp @@ -14,16 +14,20 @@ * limitations under the License. */ -#include "benchmark.h" - #include #include +#include + +#define AT_COMMON_VALS \ + Arg(1234.0)->Arg(nan(""))->Arg(HUGE_VAL)->Arg(0.0) + // Avoid optimization. volatile double d; volatile double v; -static void BM_math_sqrt(int iters) { +BENCHMARK_NO_ARG(BM_math_sqrt); +void BM_math_sqrt::Run(int iters) { StartBenchmarkTiming(); d = 0.0; @@ -34,9 +38,9 @@ static void BM_math_sqrt(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_sqrt); -static void BM_math_log10(int iters) { +BENCHMARK_NO_ARG(BM_math_log10); +void BM_math_log10::Run(int iters) { StartBenchmarkTiming(); d = 0.0; @@ -47,9 +51,9 @@ static void BM_math_log10(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_log10); -static void BM_math_logb(int iters) { +BENCHMARK_NO_ARG(BM_math_logb); +void BM_math_logb::Run(int iters) { StartBenchmarkTiming(); d = 0.0; @@ -60,61 +64,22 @@ static void BM_math_logb(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_logb); -static void BM_math_isinf_NORMAL(int iters) { +BENCHMARK_WITH_ARG(BM_math_isinf, double)->AT_COMMON_VALS; +void BM_math_isinf::Run(int iters, double value) { StartBenchmarkTiming(); d = 0.0; - v = 1234.0; // FP_NORMAL + v = value; for (int i = 0; i < iters; ++i) { d += (isinf)(v); } StopBenchmarkTiming(); } -BENCHMARK(BM_math_isinf_NORMAL); -static void BM_math_isinf_NAN(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = nan(""); // FP_NAN - for (int i = 0; i < iters; ++i) { - d += (isinf)(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_isinf_NAN); - -static void BM_math_isinf_INFINITE(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = HUGE_VAL; // FP_INFINITE - for (int i = 0; i < iters; ++i) { - d += (isinf)(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_isinf_INFINITE); - -static void BM_math_isinf_ZERO(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = 0.0; // FP_ZERO - for (int i = 0; i < iters; ++i) { - d += (isinf)(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_isinf_ZERO); - -static void BM_math_sin_fast(int iters) { +BENCHMARK_NO_ARG(BM_math_sin_fast); +void BM_math_sin_fast::Run(int iters) { StartBenchmarkTiming(); d = 1.0; @@ -124,9 +89,9 @@ static void BM_math_sin_fast(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_sin_fast); -static void BM_math_sin_feupdateenv(int iters) { +BENCHMARK_NO_ARG(BM_math_sin_feupdateenv); +void BM_math_sin_feupdateenv::Run(int iters) { StartBenchmarkTiming(); d = 1.0; @@ -140,9 +105,9 @@ static void BM_math_sin_feupdateenv(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_sin_feupdateenv); -static void BM_math_sin_fesetenv(int iters) { +BENCHMARK_NO_ARG(BM_math_sin_fesetenv); +void BM_math_sin_fesetenv::Run(int iters) { StartBenchmarkTiming(); d = 1.0; @@ -156,56 +121,16 @@ static void BM_math_sin_fesetenv(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_math_sin_fesetenv); -static void BM_math_fpclassify_NORMAL(int iters) { +BENCHMARK_WITH_ARG(BM_math_fpclassify, double)->AT_COMMON_VALS; +void BM_math_fpclassify::Run(int iters, double value) { StartBenchmarkTiming(); d = 0.0; - v = 1234.0; // FP_NORMAL + v = value; for (int i = 0; i < iters; ++i) { d += fpclassify(v); } StopBenchmarkTiming(); } -BENCHMARK(BM_math_fpclassify_NORMAL); - -static void BM_math_fpclassify_NAN(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = nan(""); // FP_NAN - for (int i = 0; i < iters; ++i) { - d += fpclassify(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_fpclassify_NAN); - -static void BM_math_fpclassify_INFINITE(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = HUGE_VAL; // FP_INFINITE - for (int i = 0; i < iters; ++i) { - d += fpclassify(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_fpclassify_INFINITE); - -static void BM_math_fpclassify_ZERO(int iters) { - StartBenchmarkTiming(); - - d = 0.0; - v = 0.0; // FP_ZERO - for (int i = 0; i < iters; ++i) { - d += fpclassify(v); - } - - StopBenchmarkTiming(); -} -BENCHMARK(BM_math_fpclassify_ZERO); diff --git a/benchmarks/property_benchmark.cpp b/benchmarks/property_benchmark.cpp index 0802b4c30..944cd6849 100644 --- a/benchmarks/property_benchmark.cpp +++ b/benchmarks/property_benchmark.cpp @@ -14,19 +14,21 @@ * limitations under the License. */ -#include "benchmark.h" #include #include #include #include +#include + +#if defined(__BIONIC__) + #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ #include -#include -#include +#include -extern void *__system_property_area__; +extern void* __system_property_area__; // Do not exceed 512, that is about the largest number of properties // that can be created with the current property area size. @@ -34,200 +36,198 @@ extern void *__system_property_area__; Arg(1)->Arg(4)->Arg(16)->Arg(64)->Arg(128)->Arg(256)->Arg(512) struct LocalPropertyTestState { - LocalPropertyTestState(int nprops) : nprops(nprops), valid(false) { - static const char prop_name_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_."; + LocalPropertyTestState(int nprops) : nprops(nprops), valid(false) { + static const char prop_name_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_."; - const char* android_data = getenv("ANDROID_DATA"); - if (android_data == NULL) { - printf("ANDROID_DATA environment variable not set\n"); - return; - } - char dir_template[PATH_MAX]; - snprintf(dir_template, sizeof(dir_template), "%s/local/tmp/prop-XXXXXX", android_data); - char *dirname = mkdtemp(dir_template); - if (!dirname) { - printf("making temp file for test state failed (is %s/local/tmp writable?): %s\n", - android_data, strerror(errno)); - return; - } - - old_pa = __system_property_area__; - __system_property_area__ = NULL; - - pa_dirname = dirname; - pa_filename = pa_dirname + "/__properties__"; - - __system_property_set_filename(pa_filename.c_str()); - __system_property_area_init(); - - names = new char* [nprops]; - name_lens = new int[nprops]; - values = new char* [nprops]; - value_lens = new int[nprops]; - - srandom(nprops); - - for (int i = 0; i < nprops; i++) { - // Make sure the name has at least 10 characters to make - // it very unlikely to generate the same random name. - name_lens[i] = (random() % (PROP_NAME_MAX - 10)) + 10; - names[i] = new char[PROP_NAME_MAX + 1]; - size_t prop_name_len = sizeof(prop_name_chars) - 1; - for (int j = 0; j < name_lens[i]; j++) { - if (j == 0 || names[i][j-1] == '.' || j == name_lens[i] - 1) { - // Certain values are not allowed: - // - Don't start name with '.' - // - Don't allow '.' to appear twice in a row - // - Don't allow the name to end with '.' - // This assumes that '.' is the last character in the - // array so that decrementing the length by one removes - // the value from the possible values. - prop_name_len--; - } - names[i][j] = prop_name_chars[random() % prop_name_len]; - } - names[i][name_lens[i]] = 0; - - // Make sure the value contains at least 1 character. - value_lens[i] = (random() % (PROP_VALUE_MAX - 1)) + 1; - values[i] = new char[PROP_VALUE_MAX]; - for (int j = 0; j < value_lens[i]; j++) { - values[i][j] = prop_name_chars[random() % (sizeof(prop_name_chars) - 1)]; - } - - if (__system_property_add(names[i], name_lens[i], values[i], value_lens[i]) < 0) { - printf("Failed to add a property, terminating...\n"); - printf("%s = %.*s\n", names[i], value_lens[i], values[i]); - exit(1); - } - } - - valid = true; + const char* android_data = getenv("ANDROID_DATA"); + if (android_data == NULL) { + printf("ANDROID_DATA environment variable not set\n"); + return; + } + char dir_template[PATH_MAX]; + snprintf(dir_template, sizeof(dir_template), "%s/local/tmp/prop-XXXXXX", android_data); + char* dirname = mkdtemp(dir_template); + if (!dirname) { + printf("making temp file for test state failed (is %s/local/tmp writable?): %s\n", + android_data, strerror(errno)); + return; } - ~LocalPropertyTestState() { - if (!valid) - return; + old_pa = __system_property_area__; + __system_property_area__ = NULL; - __system_property_area__ = old_pa; + pa_dirname = dirname; + pa_filename = pa_dirname + "/__properties__"; - __system_property_set_filename(PROP_FILENAME); - unlink(pa_filename.c_str()); - rmdir(pa_dirname.c_str()); + __system_property_set_filename(pa_filename.c_str()); + __system_property_area_init(); - for (int i = 0; i < nprops; i++) { - delete names[i]; - delete values[i]; + names = new char* [nprops]; + name_lens = new int[nprops]; + values = new char* [nprops]; + value_lens = new int[nprops]; + + srandom(nprops); + + for (int i = 0; i < nprops; i++) { + // Make sure the name has at least 10 characters to make + // it very unlikely to generate the same random name. + name_lens[i] = (random() % (PROP_NAME_MAX - 10)) + 10; + names[i] = new char[PROP_NAME_MAX + 1]; + size_t prop_name_len = sizeof(prop_name_chars) - 1; + for (int j = 0; j < name_lens[i]; j++) { + if (j == 0 || names[i][j-1] == '.' || j == name_lens[i] - 1) { + // Certain values are not allowed: + // - Don't start name with '.' + // - Don't allow '.' to appear twice in a row + // - Don't allow the name to end with '.' + // This assumes that '.' is the last character in the + // array so that decrementing the length by one removes + // the value from the possible values. + prop_name_len--; } - delete[] names; - delete[] name_lens; - delete[] values; - delete[] value_lens; + names[i][j] = prop_name_chars[random() % prop_name_len]; + } + names[i][name_lens[i]] = 0; + + // Make sure the value contains at least 1 character. + value_lens[i] = (random() % (PROP_VALUE_MAX - 1)) + 1; + values[i] = new char[PROP_VALUE_MAX]; + for (int j = 0; j < value_lens[i]; j++) { + values[i][j] = prop_name_chars[random() % (sizeof(prop_name_chars) - 1)]; + } + + if (__system_property_add(names[i], name_lens[i], values[i], value_lens[i]) < 0) { + printf("Failed to add a property, terminating...\n"); + printf("%s = %.*s\n", names[i], value_lens[i], values[i]); + exit(1); + } } + + valid = true; + } + + ~LocalPropertyTestState() { + if (!valid) + return; + + __system_property_area__ = old_pa; + + __system_property_set_filename(PROP_FILENAME); + unlink(pa_filename.c_str()); + rmdir(pa_dirname.c_str()); + + for (int i = 0; i < nprops; i++) { + delete names[i]; + delete values[i]; + } + delete[] names; + delete[] name_lens; + delete[] values; + delete[] value_lens; + } public: - const int nprops; - char **names; - int *name_lens; - char **values; - int *value_lens; - bool valid; + const int nprops; + char** names; + int* name_lens; + char** values; + int* value_lens; + bool valid; private: - std::string pa_dirname; - std::string pa_filename; - void *old_pa; + std::string pa_dirname; + std::string pa_filename; + void* old_pa; }; -static void BM_property_get(int iters, int nprops) -{ - StopBenchmarkTiming(); +BENCHMARK_WITH_ARG(BM_property_get, int)->TEST_NUM_PROPS; +void BM_property_get::Run(int iters, int nprops) { + StopBenchmarkTiming(); - LocalPropertyTestState pa(nprops); - char value[PROP_VALUE_MAX]; + LocalPropertyTestState pa(nprops); + char value[PROP_VALUE_MAX]; - if (!pa.valid) - return; + if (!pa.valid) + return; - srandom(iters * nprops); + srandom(iters * nprops); - StartBenchmarkTiming(); + StartBenchmarkTiming(); - for (int i = 0; i < iters; i++) { - __system_property_get(pa.names[random() % nprops], value); - } - StopBenchmarkTiming(); + for (int i = 0; i < iters; i++) { + __system_property_get(pa.names[random() % nprops], value); + } + StopBenchmarkTiming(); } -BENCHMARK(BM_property_get)->TEST_NUM_PROPS; -static void BM_property_find(int iters, int nprops) -{ - StopBenchmarkTiming(); +BENCHMARK_WITH_ARG(BM_property_find, int)->TEST_NUM_PROPS; +void BM_property_find::Run(int iters, int nprops) { + StopBenchmarkTiming(); - LocalPropertyTestState pa(nprops); + LocalPropertyTestState pa(nprops); - if (!pa.valid) - return; + if (!pa.valid) + return; - srandom(iters * nprops); + srandom(iters * nprops); - StartBenchmarkTiming(); + StartBenchmarkTiming(); - for (int i = 0; i < iters; i++) { - __system_property_find(pa.names[random() % nprops]); - } - StopBenchmarkTiming(); + for (int i = 0; i < iters; i++) { + __system_property_find(pa.names[random() % nprops]); + } + StopBenchmarkTiming(); } -BENCHMARK(BM_property_find)->TEST_NUM_PROPS; -static void BM_property_read(int iters, int nprops) -{ - StopBenchmarkTiming(); +BENCHMARK_WITH_ARG(BM_property_read, int)->TEST_NUM_PROPS; +void BM_property_read::Run(int iters, int nprops) { + StopBenchmarkTiming(); - LocalPropertyTestState pa(nprops); + LocalPropertyTestState pa(nprops); - if (!pa.valid) - return; + if (!pa.valid) + return; - srandom(iters * nprops); - const prop_info** pinfo = new const prop_info*[iters]; - char propvalue[PROP_VALUE_MAX]; + srandom(iters * nprops); + const prop_info** pinfo = new const prop_info*[iters]; + char propvalue[PROP_VALUE_MAX]; - for (int i = 0; i < iters; i++) { - pinfo[i] = __system_property_find(pa.names[random() % nprops]); - } + for (int i = 0; i < iters; i++) { + pinfo[i] = __system_property_find(pa.names[random() % nprops]); + } - StartBenchmarkTiming(); - for (int i = 0; i < iters; i++) { - __system_property_read(pinfo[i], 0, propvalue); - } - StopBenchmarkTiming(); + StartBenchmarkTiming(); + for (int i = 0; i < iters; i++) { + __system_property_read(pinfo[i], 0, propvalue); + } + StopBenchmarkTiming(); - delete[] pinfo; + delete[] pinfo; } -BENCHMARK(BM_property_read)->TEST_NUM_PROPS; -static void BM_property_serial(int iters, int nprops) -{ - StopBenchmarkTiming(); +BENCHMARK_WITH_ARG(BM_property_serial, int)->TEST_NUM_PROPS; +void BM_property_serial::Run(int iters, int nprops) { + StopBenchmarkTiming(); - LocalPropertyTestState pa(nprops); + LocalPropertyTestState pa(nprops); - if (!pa.valid) - return; + if (!pa.valid) + return; - srandom(iters * nprops); - const prop_info** pinfo = new const prop_info*[iters]; + srandom(iters * nprops); + const prop_info** pinfo = new const prop_info*[iters]; - for (int i = 0; i < iters; i++) { - pinfo[i] = __system_property_find(pa.names[random() % nprops]); - } + for (int i = 0; i < iters; i++) { + pinfo[i] = __system_property_find(pa.names[random() % nprops]); + } - StartBenchmarkTiming(); - for (int i = 0; i < iters; i++) { - __system_property_serial(pinfo[i]); - } - StopBenchmarkTiming(); + StartBenchmarkTiming(); + for (int i = 0; i < iters; i++) { + __system_property_serial(pinfo[i]); + } + StopBenchmarkTiming(); - delete[] pinfo; + delete[] pinfo; } -BENCHMARK(BM_property_serial)->TEST_NUM_PROPS; + +#endif // __BIONIC__ diff --git a/benchmarks/pthread_benchmark.cpp b/benchmarks/pthread_benchmark.cpp index 42023e04a..2f6572dd8 100644 --- a/benchmarks/pthread_benchmark.cpp +++ b/benchmarks/pthread_benchmark.cpp @@ -14,14 +14,15 @@ * limitations under the License. */ -#include "benchmark.h" - #include +#include + // Stop GCC optimizing out our pure function. /* Must not be static! */ pthread_t (*pthread_self_fp)() = pthread_self; -static void BM_pthread_self(int iters) { +BENCHMARK_NO_ARG(BM_pthread_self); +void BM_pthread_self::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -30,9 +31,9 @@ static void BM_pthread_self(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_pthread_self); -static void BM_pthread_getspecific(int iters) { +BENCHMARK_NO_ARG(BM_pthread_getspecific); +void BM_pthread_getspecific::Run(int iters) { StopBenchmarkTiming(); pthread_key_t key; pthread_key_create(&key, NULL); @@ -45,9 +46,9 @@ static void BM_pthread_getspecific(int iters) { StopBenchmarkTiming(); pthread_key_delete(key); } -BENCHMARK(BM_pthread_getspecific); -static void BM_pthread_setspecific(int iters) { +BENCHMARK_NO_ARG(BM_pthread_setspecific); +void BM_pthread_setspecific::Run(int iters) { StopBenchmarkTiming(); pthread_key_t key; pthread_key_create(&key, NULL); @@ -60,12 +61,12 @@ static void BM_pthread_setspecific(int iters) { StopBenchmarkTiming(); pthread_key_delete(key); } -BENCHMARK(BM_pthread_setspecific); static void DummyPthreadOnceInitFunction() { } -static void BM_pthread_once(int iters) { +BENCHMARK_NO_ARG(BM_pthread_once); +void BM_pthread_once::Run(int iters) { StopBenchmarkTiming(); pthread_once_t once = PTHREAD_ONCE_INIT; pthread_once(&once, DummyPthreadOnceInitFunction); @@ -77,9 +78,9 @@ static void BM_pthread_once(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_pthread_once); -static void BM_pthread_mutex_lock(int iters) { +BENCHMARK_NO_ARG(BM_pthread_mutex_lock); +void BM_pthread_mutex_lock::Run(int iters) { StopBenchmarkTiming(); pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; StartBenchmarkTiming(); @@ -91,9 +92,9 @@ static void BM_pthread_mutex_lock(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_pthread_mutex_lock); -static void BM_pthread_mutex_lock_ERRORCHECK(int iters) { +BENCHMARK_NO_ARG(BM_pthread_mutex_lock_ERRORCHECK); +void BM_pthread_mutex_lock_ERRORCHECK::Run(int iters) { StopBenchmarkTiming(); pthread_mutex_t mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; StartBenchmarkTiming(); @@ -105,9 +106,9 @@ static void BM_pthread_mutex_lock_ERRORCHECK(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_pthread_mutex_lock_ERRORCHECK); -static void BM_pthread_mutex_lock_RECURSIVE(int iters) { +BENCHMARK_NO_ARG(BM_pthread_mutex_lock_RECURSIVE); +void BM_pthread_mutex_lock_RECURSIVE::Run(int iters) { StopBenchmarkTiming(); pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; StartBenchmarkTiming(); @@ -119,9 +120,9 @@ static void BM_pthread_mutex_lock_RECURSIVE(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_pthread_mutex_lock_RECURSIVE); -static void BM_pthread_rw_lock_read(int iters) { +BENCHMARK_NO_ARG(BM_pthread_rw_lock_read); +void BM_pthread_rw_lock_read::Run(int iters) { StopBenchmarkTiming(); pthread_rwlock_t lock; pthread_rwlock_init(&lock, NULL); @@ -135,9 +136,9 @@ static void BM_pthread_rw_lock_read(int iters) { StopBenchmarkTiming(); pthread_rwlock_destroy(&lock); } -BENCHMARK(BM_pthread_rw_lock_read); -static void BM_pthread_rw_lock_write(int iters) { +BENCHMARK_NO_ARG(BM_pthread_rw_lock_write); +void BM_pthread_rw_lock_write::Run(int iters) { StopBenchmarkTiming(); pthread_rwlock_t lock; pthread_rwlock_init(&lock, NULL); @@ -151,13 +152,13 @@ static void BM_pthread_rw_lock_write(int iters) { StopBenchmarkTiming(); pthread_rwlock_destroy(&lock); } -BENCHMARK(BM_pthread_rw_lock_write); static void* IdleThread(void*) { return NULL; } -static void BM_pthread_create(int iters) { +BENCHMARK_NO_ARG(BM_pthread_create); +void BM_pthread_create::Run(int iters) { StopBenchmarkTiming(); pthread_t thread; @@ -168,43 +169,45 @@ static void BM_pthread_create(int iters) { pthread_join(thread, NULL); } } -BENCHMARK(BM_pthread_create); -static void* RunThread(void*) { - StopBenchmarkTiming(); +static void* RunThread(void* arg) { + ::testing::Benchmark* benchmark = reinterpret_cast<::testing::Benchmark*>(arg); + benchmark->StopBenchmarkTiming(); return NULL; } -static void BM_pthread_create_and_run(int iters) { +BENCHMARK_NO_ARG(BM_pthread_create_and_run); +void BM_pthread_create_and_run::Run(int iters) { StopBenchmarkTiming(); pthread_t thread; for (int i = 0; i < iters; ++i) { StartBenchmarkTiming(); - pthread_create(&thread, NULL, RunThread, NULL); + pthread_create(&thread, NULL, RunThread, this); pthread_join(thread, NULL); } } -BENCHMARK(BM_pthread_create_and_run); -static void* ExitThread(void*) { - StartBenchmarkTiming(); +static void* ExitThread(void* arg) { + ::testing::Benchmark* benchmark = reinterpret_cast<::testing::Benchmark*>(arg); + benchmark->StartBenchmarkTiming(); pthread_exit(NULL); } -static void BM_pthread_exit_and_join(int iters) { +BENCHMARK_NO_ARG(BM_pthread_exit_and_join); +void BM_pthread_exit_and_join::Run(int iters) { StopBenchmarkTiming(); pthread_t thread; for (int i = 0; i < iters; ++i) { - pthread_create(&thread, NULL, ExitThread, NULL); + pthread_create(&thread, NULL, ExitThread, this); pthread_join(thread, NULL); StopBenchmarkTiming(); } } -BENCHMARK(BM_pthread_exit_and_join); -static void BM_pthread_key_create(int iters) { +BENCHMARK_NO_ARG(BM_pthread_key_create); +void BM_pthread_key_create::Run(int iters) { StopBenchmarkTiming(); pthread_key_t key; @@ -215,9 +218,9 @@ static void BM_pthread_key_create(int iters) { pthread_key_delete(key); } } -BENCHMARK(BM_pthread_key_create); -static void BM_pthread_key_delete(int iters) { +BENCHMARK_NO_ARG(BM_pthread_key_delete); +void BM_pthread_key_delete::Run(int iters) { StopBenchmarkTiming(); pthread_key_t key; @@ -228,4 +231,3 @@ static void BM_pthread_key_delete(int iters) { StopBenchmarkTiming(); } } -BENCHMARK(BM_pthread_key_delete); diff --git a/benchmarks/semaphore_benchmark.cpp b/benchmarks/semaphore_benchmark.cpp index 974b0460e..8dd56849d 100644 --- a/benchmarks/semaphore_benchmark.cpp +++ b/benchmarks/semaphore_benchmark.cpp @@ -14,14 +14,15 @@ * limitations under the License. */ -#include "benchmark.h" - #include #include #include #include -static void BM_semaphore_sem_getvalue(int iters) { +#include + +BENCHMARK_NO_ARG(BM_semaphore_sem_getvalue); +void BM_semaphore_sem_getvalue::Run(int iters) { StopBenchmarkTiming(); sem_t semaphore; sem_init(&semaphore, 1, 1); @@ -34,9 +35,9 @@ static void BM_semaphore_sem_getvalue(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_semaphore_sem_getvalue); -static void BM_semaphore_sem_wait_sem_post(int iters) { +BENCHMARK_NO_ARG(BM_semaphore_sem_wait_sem_post); +void BM_semaphore_sem_wait_sem_post::Run(int iters) { StopBenchmarkTiming(); sem_t semaphore; sem_init(&semaphore, 1, 1); @@ -49,7 +50,6 @@ static void BM_semaphore_sem_wait_sem_post(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_semaphore_sem_wait_sem_post); /* * This test reports the overhead of the underlying futex wake syscall on @@ -87,7 +87,8 @@ static void *BM_semaphore_sem_post_start_thread(void *obj) { return NULL; } -static void BM_semaphore_sem_post(int iters) { +BENCHMARK_NO_ARG(BM_semaphore_sem_post); +void BM_semaphore_sem_post::Run(int iters) { StopBenchmarkTiming(); sem_t semaphore; @@ -100,9 +101,6 @@ static void BM_semaphore_sem_post(int iters) { pthread_attr_setschedparam(&attr, ¶m); pthread_attr_setschedpolicy(&attr, SCHED_OTHER); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); -#ifdef PTHREAD_SET_INHERIT_SCHED - pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); -#endif pthread_t pthread; pthread_create(&pthread, &attr, BM_semaphore_sem_post_start_thread, &semaphore); pthread_attr_destroy(&attr); @@ -143,99 +141,3 @@ static void BM_semaphore_sem_post(int iters) { sched_yield(); } while (!BM_semaphore_sem_post_running); } -BENCHMARK(BM_semaphore_sem_post); - -/* - * This test reports the overhead of sem_post to sem_wake. A circle of - * num_semaphore - 1 threads are run on a set of semaphores to measure the - * activity. One can calculate the sem_wake overhead alone by: - * - * BM_semaphore_sem_post_sem_wait - BM_semaphore_sem_post - BM_time_clock_gettime - * - * Differences will result if there are more threads than active processors, - * there will be delay induced when scheduling the processes. This cost is - * measured by trying different values of num_semaphore. The governor selected - * will have a major impact on the results for a large number of threads. - * - * To reduce the chances for threads racing ahead and not triggering the - * futex, for example the background threads finish their job before the - * sem_wait is hit in the main thread, the background threads will run at - * batch priority and the main thread at fifo priority. This should generally - * guarantee the main thread completes its task of priming itself with the - * sem_wait before the other threads can start. In practice without the - * sched mechanics here, this works on Android configured kernels, this is - * insurance for wacky(tm) sched configurations. - */ -static void *BM_semaphore_sem_post_sem_wait_start_thread(void *obj) { - sem_t *semaphore = reinterpret_cast(obj); - - while ((BM_semaphore_sem_post_running > 0) && !sem_wait(semaphore)) { - sem_post(semaphore + 1); - } - --BM_semaphore_sem_post_running; - return NULL; -} - -static void BM_semaphore_sem_post_sem_wait_num(int iters, int num_semaphore) { - StopBenchmarkTiming(); - - sem_t semaphore[num_semaphore]; - - for (int i = 0; i < num_semaphore; ++i) { - sem_init(semaphore + i, 0, 0); - } - - pthread_attr_t attr; - pthread_attr_init(&attr); - BM_semaphore_sem_post_running = 1; - struct sched_param param = { 0, }; - pthread_attr_setschedparam(&attr, ¶m); - pthread_attr_setschedpolicy(&attr, SCHED_BATCH); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); -#ifdef PTHREAD_SET_INHERIT_SCHED - pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); -#endif - for (int i = 0; i < (num_semaphore - 1); ++i) { - pthread_t pthread; - pthread_create(&pthread, &attr, BM_semaphore_sem_post_sem_wait_start_thread, semaphore + i); - } - pthread_attr_destroy(&attr); - sched_yield(); - - param.sched_priority = 1; - sched_setscheduler((pid_t)0, SCHED_FIFO, ¶m); - - StartBenchmarkTiming(); - - for (int i = 0; i < iters; i += num_semaphore) { - sem_post(semaphore); - sem_wait(semaphore + num_semaphore - 1); - } - - StopBenchmarkTiming(); - - param.sched_priority = 0; - sched_setscheduler((pid_t)0, SCHED_OTHER, ¶m); - - if (BM_semaphore_sem_post_running > 0) { - BM_semaphore_sem_post_running = 0; - } - for (int i = 0; - (i < (10 * num_semaphore)) && (BM_semaphore_sem_post_running > (1 - num_semaphore)); - ++i) { - for (int j = 0; j < (num_semaphore - 1); ++j) { - sem_post(semaphore + j); - } - sched_yield(); - } -} - -static void BM_semaphore_sem_post_sem_wait_low(int iters) { - BM_semaphore_sem_post_sem_wait_num(iters, 2); -} -BENCHMARK(BM_semaphore_sem_post_sem_wait_low); - -static void BM_semaphore_sem_post_sem_wait_high(int iters) { - BM_semaphore_sem_post_sem_wait_num(iters, 100); -} -BENCHMARK(BM_semaphore_sem_post_sem_wait_high); diff --git a/benchmarks/stdio_benchmark.cpp b/benchmarks/stdio_benchmark.cpp index 5658a506e..342e56154 100644 --- a/benchmarks/stdio_benchmark.cpp +++ b/benchmarks/stdio_benchmark.cpp @@ -14,11 +14,11 @@ * limitations under the License. */ -#include "benchmark.h" - #include #include +#include + #define KB 1024 #define MB 1024*KB @@ -27,12 +27,12 @@ Arg(1*KB)->Arg(4*KB)->Arg(8*KB)->Arg(16*KB)->Arg(64*KB) template -static void ReadWriteTest(int iters, int chunk_size, Fn f, bool buffered) { - StopBenchmarkTiming(); +void ReadWriteTest(::testing::Benchmark* benchmark, int iters, int chunk_size, Fn f, bool buffered) { + benchmark->StopBenchmarkTiming(); FILE* fp = fopen("/dev/zero", "rw"); __fsetlocking(fp, FSETLOCKING_BYCALLER); char* buf = new char[chunk_size]; - StartBenchmarkTiming(); + benchmark->StartBenchmarkTiming(); if (!buffered) { setvbuf(fp, 0, _IONBF, 0); @@ -42,31 +42,31 @@ static void ReadWriteTest(int iters, int chunk_size, Fn f, bool buffered) { f(buf, chunk_size, 1, fp); } - StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(chunk_size)); + benchmark->StopBenchmarkTiming(); + benchmark->SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(chunk_size)); delete[] buf; fclose(fp); } -static void BM_stdio_fread(int iters, int chunk_size) { - ReadWriteTest(iters, chunk_size, fread, true); +BENCHMARK_WITH_ARG(BM_stdio_fread, int)->AT_COMMON_SIZES; +void BM_stdio_fread::Run(int iters, int chunk_size) { + ReadWriteTest(this, iters, chunk_size, fread, true); } -BENCHMARK(BM_stdio_fread)->AT_COMMON_SIZES; -static void BM_stdio_fwrite(int iters, int chunk_size) { - ReadWriteTest(iters, chunk_size, fwrite, true); +BENCHMARK_WITH_ARG(BM_stdio_fwrite, int)->AT_COMMON_SIZES; +void BM_stdio_fwrite::Run(int iters, int chunk_size) { + ReadWriteTest(this, iters, chunk_size, fwrite, true); } -BENCHMARK(BM_stdio_fwrite)->AT_COMMON_SIZES; -static void BM_stdio_fread_unbuffered(int iters, int chunk_size) { - ReadWriteTest(iters, chunk_size, fread, false); +BENCHMARK_WITH_ARG(BM_stdio_fread_unbuffered, int)->AT_COMMON_SIZES; +void BM_stdio_fread_unbuffered::Run(int iters, int chunk_size) { + ReadWriteTest(this, iters, chunk_size, fread, false); } -BENCHMARK(BM_stdio_fread_unbuffered)->AT_COMMON_SIZES; -static void BM_stdio_fwrite_unbuffered(int iters, int chunk_size) { - ReadWriteTest(iters, chunk_size, fwrite, false); +BENCHMARK_WITH_ARG(BM_stdio_fwrite_unbuffered, int)->AT_COMMON_SIZES; +void BM_stdio_fwrite_unbuffered::Run(int iters, int chunk_size) { + ReadWriteTest(this, iters, chunk_size, fwrite, false); } -BENCHMARK(BM_stdio_fwrite_unbuffered)->AT_COMMON_SIZES; static void FopenFgetsFclose(int iters, bool no_locking) { char buf[1024]; @@ -78,12 +78,16 @@ static void FopenFgetsFclose(int iters, bool no_locking) { } } -static void BM_stdio_fopen_fgets_fclose_locking(int iters) { +BENCHMARK_NO_ARG(BM_stdio_fopen_fgets_fclose_locking); +void BM_stdio_fopen_fgets_fclose_locking::Run(int iters) { + StartBenchmarkTiming(); FopenFgetsFclose(iters, false); + StopBenchmarkTiming(); } -BENCHMARK(BM_stdio_fopen_fgets_fclose_locking); -static void BM_stdio_fopen_fgets_fclose_no_locking(int iters) { +BENCHMARK_NO_ARG(BM_stdio_fopen_fgets_fclose_no_locking); +void BM_stdio_fopen_fgets_fclose_no_locking::Run(int iters) { + StartBenchmarkTiming(); FopenFgetsFclose(iters, true); + StopBenchmarkTiming(); } -BENCHMARK(BM_stdio_fopen_fgets_fclose_no_locking); diff --git a/benchmarks/string_benchmark.cpp b/benchmarks/string_benchmark.cpp index 536e253fd..866aa0047 100644 --- a/benchmarks/string_benchmark.cpp +++ b/benchmarks/string_benchmark.cpp @@ -14,10 +14,11 @@ * limitations under the License. */ -#include "benchmark.h" - +#include #include +#include + #define KB 1024 #define MB 1024*KB @@ -26,7 +27,8 @@ // TODO: test unaligned operation too? (currently everything will be 8-byte aligned by malloc.) -static void BM_string_memcmp(int iters, int nbytes) { +BENCHMARK_WITH_ARG(BM_string_memcmp, int)->AT_COMMON_SIZES; +void BM_string_memcmp::Run(int iters, int nbytes) { StopBenchmarkTiming(); char* src = new char[nbytes]; char* dst = new char[nbytes]; memset(src, 'x', nbytes); @@ -39,13 +41,13 @@ static void BM_string_memcmp(int iters, int nbytes) { } StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(nbytes)); + SetBenchmarkBytesProcessed(uint64_t(iters) * uint64_t(nbytes)); delete[] src; delete[] dst; } -BENCHMARK(BM_string_memcmp)->AT_COMMON_SIZES; -static void BM_string_memcpy(int iters, int nbytes) { +BENCHMARK_WITH_ARG(BM_string_memcpy, int)->AT_COMMON_SIZES; +void BM_string_memcpy::Run(int iters, int nbytes) { StopBenchmarkTiming(); char* src = new char[nbytes]; char* dst = new char[nbytes]; memset(src, 'x', nbytes); @@ -56,13 +58,13 @@ static void BM_string_memcpy(int iters, int nbytes) { } StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(nbytes)); + SetBenchmarkBytesProcessed(uint64_t(iters) * uint64_t(nbytes)); delete[] src; delete[] dst; } -BENCHMARK(BM_string_memcpy)->AT_COMMON_SIZES; -static void BM_string_memmove(int iters, int nbytes) { +BENCHMARK_WITH_ARG(BM_string_memmove, int)->AT_COMMON_SIZES; +void BM_string_memmove::Run(int iters, int nbytes) { StopBenchmarkTiming(); char* buf = new char[nbytes + 64]; memset(buf, 'x', nbytes + 64); @@ -73,12 +75,12 @@ static void BM_string_memmove(int iters, int nbytes) { } StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(nbytes)); + SetBenchmarkBytesProcessed(uint64_t(iters) * uint64_t(nbytes)); delete[] buf; } -BENCHMARK(BM_string_memmove)->AT_COMMON_SIZES; -static void BM_string_memset(int iters, int nbytes) { +BENCHMARK_WITH_ARG(BM_string_memset, int)->AT_COMMON_SIZES; +void BM_string_memset::Run(int iters, int nbytes) { StopBenchmarkTiming(); char* dst = new char[nbytes]; StartBenchmarkTiming(); @@ -88,12 +90,12 @@ static void BM_string_memset(int iters, int nbytes) { } StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(nbytes)); + SetBenchmarkBytesProcessed(uint64_t(iters) * uint64_t(nbytes)); delete[] dst; } -BENCHMARK(BM_string_memset)->AT_COMMON_SIZES; -static void BM_string_strlen(int iters, int nbytes) { +BENCHMARK_WITH_ARG(BM_string_strlen, int)->AT_COMMON_SIZES; +void BM_string_strlen::Run(int iters, int nbytes) { StopBenchmarkTiming(); char* s = new char[nbytes]; memset(s, 'x', nbytes); @@ -106,7 +108,6 @@ static void BM_string_strlen(int iters, int nbytes) { } StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(nbytes)); + SetBenchmarkBytesProcessed(uint64_t(iters) * uint64_t(nbytes)); delete[] s; } -BENCHMARK(BM_string_strlen)->AT_COMMON_SIZES; diff --git a/benchmarks/time_benchmark.cpp b/benchmarks/time_benchmark.cpp index f093ec19f..6688bbc57 100644 --- a/benchmarks/time_benchmark.cpp +++ b/benchmarks/time_benchmark.cpp @@ -14,14 +14,14 @@ * limitations under the License. */ -#include "benchmark.h" - -#include #include #include #include -static void BM_time_clock_gettime(int iters) { +#include + +BENCHMARK_NO_ARG(BM_time_clock_gettime); +void BM_time_clock_gettime::Run(int iters) { StartBenchmarkTiming(); timespec t; @@ -31,9 +31,9 @@ static void BM_time_clock_gettime(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_time_clock_gettime); -static void BM_time_clock_gettime_syscall(int iters) { +BENCHMARK_NO_ARG(BM_time_clock_gettime_syscall); +void BM_time_clock_gettime_syscall::Run(int iters) { StartBenchmarkTiming(); timespec t; @@ -43,9 +43,9 @@ static void BM_time_clock_gettime_syscall(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_time_clock_gettime_syscall); -static void BM_time_gettimeofday(int iters) { +BENCHMARK_NO_ARG(BM_time_gettimeofday); +void BM_time_gettimeofday::Run(int iters) { StartBenchmarkTiming(); timeval tv; @@ -55,9 +55,9 @@ static void BM_time_gettimeofday(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_time_gettimeofday); -static void BM_time_gettimeofday_syscall(int iters) { +BENCHMARK_NO_ARG(BM_time_gettimeofday_syscall); +void BM_time_gettimeofday_syscall::Run(int iters) { StartBenchmarkTiming(); timeval tv; @@ -67,9 +67,9 @@ static void BM_time_gettimeofday_syscall(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_time_gettimeofday_syscall); -static void BM_time_time(int iters) { +BENCHMARK_NO_ARG(BM_time_time); +void BM_time_time::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -78,4 +78,3 @@ static void BM_time_time(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_time_time); diff --git a/benchmarks/unistd_benchmark.cpp b/benchmarks/unistd_benchmark.cpp index 94be1dd5e..09ca0e6bf 100644 --- a/benchmarks/unistd_benchmark.cpp +++ b/benchmarks/unistd_benchmark.cpp @@ -14,12 +14,13 @@ * limitations under the License. */ -#include "benchmark.h" - #include #include -static void BM_unistd_getpid(int iters) { +#include + +BENCHMARK_NO_ARG(BM_unistd_getpid); +void BM_unistd_getpid::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -28,9 +29,9 @@ static void BM_unistd_getpid(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_unistd_getpid); -static void BM_unistd_getpid_syscall(int iters) { +BENCHMARK_NO_ARG(BM_unistd_getpid_syscall); +void BM_unistd_getpid_syscall::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -39,14 +40,14 @@ static void BM_unistd_getpid_syscall(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_unistd_getpid_syscall); #if defined(__BIONIC__) // Stop GCC optimizing out our pure function. /* Must not be static! */ pid_t (*gettid_fp)() = gettid; -static void BM_unistd_gettid(int iters) { +BENCHMARK_NO_ARG(BM_unistd_gettid); +void BM_unistd_gettid::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -55,11 +56,11 @@ static void BM_unistd_gettid(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_unistd_gettid); #endif -static void BM_unistd_gettid_syscall(int iters) { +BENCHMARK_NO_ARG(BM_unistd_gettid_syscall); +void BM_unistd_gettid_syscall::Run(int iters) { StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -68,4 +69,3 @@ static void BM_unistd_gettid_syscall(int iters) { StopBenchmarkTiming(); } -BENCHMARK(BM_unistd_gettid_syscall); diff --git a/benchmarks/utils.cpp b/benchmarks/utils.cpp new file mode 100644 index 000000000..863b9db13 --- /dev/null +++ b/benchmarks/utils.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include + +#include "utils.h" + +int Round(int n) { + int base = 1; + while (base*10 < n) { + base *= 10; + } + if (n < 2*base) { + return 2*base; + } + if (n < 5*base) { + return 5*base; + } + return 10*base; +} + +// Similar to the code in art, but supporting both binary and decimal prefixes. +std::string PrettyInt(long value, size_t base) { + if (base != 2 && base != 10) abort(); + + uint64_t count = static_cast(value); + bool negative_number = false; + if (value < 0) { + negative_number = true; + count = static_cast(-value); + } + + // The byte thresholds at which we display amounts. A count is displayed + // in unit U when kUnitThresholds[U] <= bytes < kUnitThresholds[U+1]. + static const uint64_t kUnitThresholds2[] = { + 1024*1024*1024 /* Gi */, 2*1024*1024 /* Mi */, 3*1024 /* Ki */, 0, + }; + static const uint64_t kUnitThresholds10[] = { + 1000*1000*1000 /* G */, 2*1000*1000 /* M */, 3*1000 /* k */, 0, + }; + static const uint64_t kAmountPerUnit2[] = { 1024*1024*1024, 1024*1024, 1024, 1 }; + static const uint64_t kAmountPerUnit10[] = { 1000*1000*1000, 1000*1000, 1000, 1 }; + static const char* const kUnitStrings2[] = { "Gi", "Mi", "Ki", "" }; + static const char* const kUnitStrings10[] = { "G", "M", "k", "" }; + + // Which set are we using? + const uint64_t* kUnitThresholds = ((base == 2) ? kUnitThresholds2 : kUnitThresholds10); + const uint64_t* kAmountPerUnit = ((base == 2) ? kAmountPerUnit2 : kAmountPerUnit10); + const char* const* kUnitStrings = ((base == 2) ? kUnitStrings2 : kUnitStrings10); + + size_t i = 0; + for (; kUnitThresholds[i] != 0; ++i) { + if (count >= kUnitThresholds[i]) { + break; + } + } + char* s = NULL; + asprintf(&s, "%s%" PRId64 "%s", (negative_number ? "-" : ""), + count / kAmountPerUnit[i], kUnitStrings[i]); + std::string result(s); + free(s); + return result; +} diff --git a/benchmarks/utils.h b/benchmarks/utils.h new file mode 100644 index 000000000..c3c64bab2 --- /dev/null +++ b/benchmarks/utils.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BENCHMARKS_UTILS_H +#define BENCHMARKS_UTILS_H + +#include +#include + +int Round(int n); +std::string PrettyInt(long value, size_t base); + +#endif // BENCHMARKS_UTILS_H From 4c5891d93dc151e2f07fc87ae967f23e6c3d6e0c Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 19 Feb 2015 22:49:44 -0800 Subject: [PATCH 136/194] valgrind can't find syscall because we didn't put it in . Change-Id: I1e47291d4476bd2816138a8cf58f29d4986d39e3 --- libc/bionic/ndk_cruft.cpp | 1 + libc/include/sys/syscall.h | 15 ++++----------- libc/include/unistd.h | 2 ++ libc/private/bionic_futex.h | 1 + 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 28d635518..77412aca6 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include #include diff --git a/libc/include/sys/syscall.h b/libc/include/sys/syscall.h index 34a29df3f..21eaf336b 100644 --- a/libc/include/sys/syscall.h +++ b/libc/include/sys/syscall.h @@ -25,20 +25,13 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_SYSCALL_H_ #define _SYS_SYSCALL_H_ -#include -#include -#include -#include +#include /* Linux kernel __NR_* names. */ +#include /* glibc-compatible SYS_* aliases. */ -#include /* glibc-compatible SYS_* aliases for our __NR_* names. */ - -__BEGIN_DECLS - -long syscall(long number, ...); - -__END_DECLS +/* The syscall function itself is declared in , not here. */ #endif /* _SYS_SYSCALL_H_ */ diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 0b6700486..a6d791c98 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -208,6 +208,8 @@ int getpagesize(void); long sysconf(int); +long syscall(long number, ...); + extern int daemon(int, int); #if defined(__arm__) || (defined(__mips__) && !defined(__LP64__)) diff --git a/libc/private/bionic_futex.h b/libc/private/bionic_futex.h index bd2bd369c..401577ab8 100644 --- a/libc/private/bionic_futex.h +++ b/libc/private/bionic_futex.h @@ -34,6 +34,7 @@ #include #include #include +#include __BEGIN_DECLS From 567bfb3779f238784be6d3fa9d384ecdc423ea39 Mon Sep 17 00:00:00 2001 From: Greg Hackmann Date: Fri, 20 Feb 2015 11:00:14 -0800 Subject: [PATCH 137/194] Fix 64-bit benchmark build The * flag to printf() wants an int instead of size_t, and these are distinct types on 64-bit. To accomodate this, make the name column width helpers return int. In theory this truncates things, but in practice this only matters if you have a benchmark with more than INT_MAX characters in its name (in which case you have bigger problems). Change-Id: I3338948c25a3a8d84f1ead2f5b457c05da8a01cf Signed-off-by: Greg Hackmann --- benchmarks/Benchmark.cpp | 4 ++-- benchmarks/benchmark/Benchmark.h | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp index 0eb779a5d..eea304f5b 100644 --- a/benchmarks/Benchmark.cpp +++ b/benchmarks/Benchmark.cpp @@ -44,8 +44,8 @@ std::vector& Benchmark::List() { return list; } -size_t Benchmark::MaxNameColumnWidth() { - size_t max = 20; +int Benchmark::MaxNameColumnWidth() { + int max = 20; for (auto& benchmark : List()) { max = std::max(max, benchmark->NameColumnWidth()); } diff --git a/benchmarks/benchmark/Benchmark.h b/benchmarks/benchmark/Benchmark.h index 7c208e657..16ae5fa31 100644 --- a/benchmarks/benchmark/Benchmark.h +++ b/benchmarks/benchmark/Benchmark.h @@ -47,10 +47,10 @@ public: static std::vector& List(); - static size_t MaxNameColumnWidth(); + static int MaxNameColumnWidth(); protected: - virtual size_t NameColumnWidth() = 0; + virtual int NameColumnWidth() = 0; uint64_t bytes_processed_; uint64_t total_time_ns_; @@ -85,8 +85,8 @@ protected: virtual void Run(int) = 0; - virtual size_t NameColumnWidth() override { - return Name().size(); + virtual int NameColumnWidth() override { + return (int)Name().size(); } virtual std::string GetNameStr(void *) override; @@ -104,10 +104,10 @@ public: } protected: - virtual size_t NameColumnWidth() override { - size_t max = 0; + virtual int NameColumnWidth() override { + int max = 0; for (const auto arg : args_) { - max = std::max(max, GetNameStr(arg).size()); + max = std::max(max, (int)GetNameStr(arg).size()); } return max; } From daf8911079ad9c5e0b874701aabe3835e94991b6 Mon Sep 17 00:00:00 2001 From: Nikola Veljkovic Date: Mon, 23 Feb 2015 16:14:56 +0100 Subject: [PATCH 138/194] [MIPS64] Fix mips64 build. Build was broken by: https://android-review.googlesource.com/133834 Use to get syscall(). Remove , it gets included through . Change-Id: Id762f6dea5f9538c19b79cdd46deda978efd50fe --- libc/arch-mips64/bionic/stat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc/arch-mips64/bionic/stat.cpp b/libc/arch-mips64/bionic/stat.cpp index df63906cb..2767fbd1c 100644 --- a/libc/arch-mips64/bionic/stat.cpp +++ b/libc/arch-mips64/bionic/stat.cpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include struct kernel_stat { unsigned int st_dev; From 6af62e0d5016d0e8263f77139154a518d50fc2d6 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 23 Feb 2015 13:41:40 -0800 Subject: [PATCH 139/194] Add RLIM_SAVED_CUR and RLIM_SAVED_MAX. Change-Id: Ia6be76460bfcf852832325c5f36cb272f49a4b87 --- libc/include/sys/resource.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libc/include/sys/resource.h b/libc/include/sys/resource.h index a91fa5394..3f8dd4571 100644 --- a/libc/include/sys/resource.h +++ b/libc/include/sys/resource.h @@ -36,6 +36,10 @@ __BEGIN_DECLS +/* The kernel header doesn't have these, but POSIX does. */ +#define RLIM_SAVED_CUR RLIM_INFINITY +#define RLIM_SAVED_MAX RLIM_INFINITY + typedef unsigned long rlim_t; extern int getrlimit(int, struct rlimit*); From be52e658171edf6651895c40d1563289bafa52f7 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 23 Feb 2015 18:02:29 -0800 Subject: [PATCH 140/194] Fix dup2 in the case where the two fds are equal. dup3's behavior differs from dup2 in this case, so we need to paper over that in the C library. Change-Id: I313cd6f226db5e237f61866f324c5ecdd12bf762 --- libc/bionic/dup2.cpp | 11 +++++++++++ tests/unistd_test.cpp | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/libc/bionic/dup2.cpp b/libc/bionic/dup2.cpp index 0b8632bee..98c56469d 100644 --- a/libc/bionic/dup2.cpp +++ b/libc/bionic/dup2.cpp @@ -26,8 +26,19 @@ * SUCH DAMAGE. */ +#include #include int dup2(int old_fd, int new_fd) { + // If old_fd is equal to new_fd and a valid file descriptor, dup2 returns + // old_fd without closing it. This is not true of dup3, so we have to + // handle this case ourselves. + if (old_fd == new_fd) { + if (fcntl(old_fd, F_GETFD) == -1) { + return -1; + } + return old_fd; + } + return dup3(old_fd, new_fd, 0); } diff --git a/tests/unistd_test.cpp b/tests/unistd_test.cpp index f5c0524c4..f54a4619b 100644 --- a/tests/unistd_test.cpp +++ b/tests/unistd_test.cpp @@ -801,3 +801,22 @@ TEST(unistd, sysconf) { VERIFY_SYSCONF_NOT_SUPPORT(_SC_XOPEN_UUCP); #endif // defined(__BIONIC__) } + +TEST(unistd, dup2_same) { + // POSIX says of dup2: + // If fildes2 is already a valid open file descriptor ... + // [and] fildes is equal to fildes2 ... dup2() shall return + // fildes2 without closing it. + // This isn't true of dup3(2), so we need to manually implement that. + + // Equal and valid. + int fd = open("/proc/version", O_RDONLY); + ASSERT_TRUE(fd != -1); + ASSERT_EQ(fd, dup2(fd, fd)); + ASSERT_EQ(0, close(fd)); // Check that dup2 didn't close fd. + + // Equal, but invalid. + errno = 0; + ASSERT_EQ(-1, dup2(fd, fd)); + ASSERT_EQ(EBADF, errno); +} From b8ce47421727f7621f3e00043d535e35cd904852 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 10 Feb 2015 21:35:56 -0800 Subject: [PATCH 141/194] Switch system_properties.cpp from bionic atomic operations to stdatomic. Bug: 17177189 Change-Id: I42e05ad1c490cc7a8040138151afc0ee72a9b63f --- libc/bionic/system_properties.cpp | 140 ++++++++++++++++-------------- 1 file changed, 76 insertions(+), 64 deletions(-) diff --git a/libc/bionic/system_properties.cpp b/libc/bionic/system_properties.cpp index 170e7ac97..aae99b12c 100644 --- a/libc/bionic/system_properties.cpp +++ b/libc/bionic/system_properties.cpp @@ -51,7 +51,6 @@ #include #include -#include "private/bionic_atomic_inline.h" #include "private/bionic_futex.h" #include "private/bionic_macros.h" @@ -80,22 +79,26 @@ struct prop_bt { uint8_t namelen; uint8_t reserved[3]; - // TODO: The following fields should be declared as atomic_uint32_t. - // They should be assigned to with release semantics, instead of using - // explicit fences. Unfortunately, the read accesses are generally - // followed by more dependent read accesses, and the dependence - // is assumed to enforce memory ordering. Which it does on supported - // hardware. This technically should use memory_order_consume, if - // that worked as intended. + // The property trie is updated only by the init process (single threaded) which provides + // property service. And it can be read by multiple threads at the same time. + // As the property trie is not protected by locks, we use atomic_uint_least32_t types for the + // left, right, children "pointers" in the trie node. To make sure readers who see the + // change of "pointers" can also notice the change of prop_bt structure contents pointed by + // the "pointers", we always use release-consume ordering pair when accessing these "pointers". + + // prop "points" to prop_info structure if there is a propery associated with the trie node. + // Its situation is similar to the left, right, children "pointers". So we use + // atomic_uint_least32_t and release-consume ordering to protect it as well. + // We should also avoid rereading these fields redundantly, since not // all processor implementations ensure that multiple loads from the // same field are carried out in the right order. - volatile uint32_t prop; + atomic_uint_least32_t prop; - volatile uint32_t left; - volatile uint32_t right; + atomic_uint_least32_t left; + atomic_uint_least32_t right; - volatile uint32_t children; + atomic_uint_least32_t children; char name[0]; @@ -103,8 +106,6 @@ struct prop_bt { this->namelen = name_length; memcpy(this->name, name, name_length); this->name[name_length] = '\0'; - ANDROID_MEMBAR_FULL(); // TODO: Instead use a release store - // for subsequent pointer assignment. } private: @@ -143,8 +144,6 @@ struct prop_info { atomic_init(&this->serial, valuelen << 24); memcpy(this->value, value, valuelen); this->value[valuelen] = '\0'; - ANDROID_MEMBAR_FULL(); // TODO: Instead use a release store - // for subsequent point assignment. } private: DISALLOW_COPY_AND_ASSIGN(prop_info); @@ -291,10 +290,10 @@ static int map_prop_area() return map_result; } -static void *allocate_obj(const size_t size, uint32_t *const off) +static void *allocate_obj(const size_t size, uint_least32_t *const off) { prop_area *pa = __system_property_area__; - const size_t aligned = BIONIC_ALIGN(size, sizeof(uint32_t)); + const size_t aligned = BIONIC_ALIGN(size, sizeof(uint_least32_t)); if (pa->bytes_used + aligned > pa_data_size) { return NULL; } @@ -304,12 +303,12 @@ static void *allocate_obj(const size_t size, uint32_t *const off) return pa->data + *off; } -static prop_bt *new_prop_bt(const char *name, uint8_t namelen, uint32_t *const off) +static prop_bt *new_prop_bt(const char *name, uint8_t namelen, uint_least32_t *const off) { - uint32_t new_offset; - void *const offset = allocate_obj(sizeof(prop_bt) + namelen + 1, &new_offset); - if (offset) { - prop_bt* bt = new(offset) prop_bt(name, namelen); + uint_least32_t new_offset; + void *const p = allocate_obj(sizeof(prop_bt) + namelen + 1, &new_offset); + if (p != NULL) { + prop_bt* bt = new(p) prop_bt(name, namelen); *off = new_offset; return bt; } @@ -318,20 +317,20 @@ static prop_bt *new_prop_bt(const char *name, uint8_t namelen, uint32_t *const o } static prop_info *new_prop_info(const char *name, uint8_t namelen, - const char *value, uint8_t valuelen, uint32_t *const off) + const char *value, uint8_t valuelen, uint_least32_t *const off) { - uint32_t off_tmp; - void* const offset = allocate_obj(sizeof(prop_info) + namelen + 1, &off_tmp); - if (offset) { - prop_info* info = new(offset) prop_info(name, namelen, value, valuelen); - *off = off_tmp; + uint_least32_t new_offset; + void* const p = allocate_obj(sizeof(prop_info) + namelen + 1, &new_offset); + if (p != NULL) { + prop_info* info = new(p) prop_info(name, namelen, value, valuelen); + *off = new_offset; return info; } return NULL; } -static void *to_prop_obj(const uint32_t off) +static void *to_prop_obj(uint_least32_t off) { if (off > pa_data_size) return NULL; @@ -341,7 +340,17 @@ static void *to_prop_obj(const uint32_t off) return (__system_property_area__->data + off); } -static prop_bt *root_node() +static inline prop_bt *to_prop_bt(atomic_uint_least32_t* off_p) { + uint_least32_t off = atomic_load_explicit(off_p, memory_order_consume); + return reinterpret_cast(to_prop_obj(off)); +} + +static inline prop_info *to_prop_info(atomic_uint_least32_t* off_p) { + uint_least32_t off = atomic_load_explicit(off_p, memory_order_consume); + return reinterpret_cast(to_prop_obj(off)); +} + +static inline prop_bt *root_node() { return reinterpret_cast(to_prop_obj(0)); } @@ -373,36 +382,34 @@ static prop_bt *find_prop_bt(prop_bt *const bt, const char *name, } if (ret < 0) { - if (current->left) { - current = reinterpret_cast(to_prop_obj(current->left)); + uint_least32_t left_offset = atomic_load_explicit(¤t->left, memory_order_relaxed); + if (left_offset != 0) { + current = to_prop_bt(¤t->left); } else { if (!alloc_if_needed) { return NULL; } - // Note that there isn't a race condition here. "clients" never - // reach this code-path since It's only the (single threaded) server - // that allocates new nodes. Though "bt->left" is volatile, it can't - // have changed since the last value was last read. - uint32_t new_offset = 0; + uint_least32_t new_offset; prop_bt* new_bt = new_prop_bt(name, namelen, &new_offset); if (new_bt) { - current->left = new_offset; + atomic_store_explicit(¤t->left, new_offset, memory_order_release); } return new_bt; } } else { - if (current->right) { - current = reinterpret_cast(to_prop_obj(current->right)); + uint_least32_t right_offset = atomic_load_explicit(¤t->right, memory_order_relaxed); + if (right_offset != 0) { + current = to_prop_bt(¤t->right); } else { if (!alloc_if_needed) { return NULL; } - uint32_t new_offset; + uint_least32_t new_offset; prop_bt* new_bt = new_prop_bt(name, namelen, &new_offset); if (new_bt) { - current->right = new_offset; + atomic_store_explicit(¤t->right, new_offset, memory_order_release); } return new_bt; } @@ -429,13 +436,14 @@ static const prop_info *find_property(prop_bt *const trie, const char *name, } prop_bt* root = NULL; - if (current->children) { - root = reinterpret_cast(to_prop_obj(current->children)); + uint_least32_t children_offset = atomic_load_explicit(¤t->children, memory_order_relaxed); + if (children_offset != 0) { + root = to_prop_bt(¤t->children); } else if (alloc_if_needed) { - uint32_t new_bt_offset; - root = new_prop_bt(remaining_name, substr_size, &new_bt_offset); + uint_least32_t new_offset; + root = new_prop_bt(remaining_name, substr_size, &new_offset); if (root) { - current->children = new_bt_offset; + atomic_store_explicit(¤t->children, new_offset, memory_order_release); } } @@ -454,13 +462,14 @@ static const prop_info *find_property(prop_bt *const trie, const char *name, remaining_name = sep + 1; } - if (current->prop) { - return reinterpret_cast(to_prop_obj(current->prop)); + uint_least32_t prop_offset = atomic_load_explicit(¤t->prop, memory_order_relaxed); + if (prop_offset != 0) { + return to_prop_info(¤t->prop); } else if (alloc_if_needed) { - uint32_t new_info_offset; - prop_info* new_info = new_prop_info(name, namelen, value, valuelen, &new_info_offset); + uint_least32_t new_offset; + prop_info* new_info = new_prop_info(name, namelen, value, valuelen, &new_offset); if (new_info) { - current->prop = new_info_offset; + atomic_store_explicit(¤t->prop, new_offset, memory_order_release); } return new_info; @@ -534,31 +543,34 @@ static void find_nth_fn(const prop_info *pi, void *ptr) cookie->count++; } -static int foreach_property(const uint32_t off, +static int foreach_property(prop_bt *const trie, void (*propfn)(const prop_info *pi, void *cookie), void *cookie) { - prop_bt *trie = reinterpret_cast(to_prop_obj(off)); if (!trie) return -1; - if (trie->left) { - const int err = foreach_property(trie->left, propfn, cookie); + uint_least32_t left_offset = atomic_load_explicit(&trie->left, memory_order_relaxed); + if (left_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->left), propfn, cookie); if (err < 0) return -1; } - if (trie->prop) { - prop_info *info = reinterpret_cast(to_prop_obj(trie->prop)); + uint_least32_t prop_offset = atomic_load_explicit(&trie->prop, memory_order_relaxed); + if (prop_offset != 0) { + prop_info *info = to_prop_info(&trie->prop); if (!info) return -1; propfn(info, cookie); } - if (trie->children) { - const int err = foreach_property(trie->children, propfn, cookie); + uint_least32_t children_offset = atomic_load_explicit(&trie->children, memory_order_relaxed); + if (children_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->children), propfn, cookie); if (err < 0) return -1; } - if (trie->right) { - const int err = foreach_property(trie->right, propfn, cookie); + uint_least32_t right_offset = atomic_load_explicit(&trie->right, memory_order_relaxed); + if (right_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->right), propfn, cookie); if (err < 0) return -1; } @@ -766,5 +778,5 @@ int __system_property_foreach(void (*propfn)(const prop_info *pi, void *cookie), return __system_property_foreach_compat(propfn, cookie); } - return foreach_property(0, propfn, cookie); + return foreach_property(root_node(), propfn, cookie); } From 35778253a5ed71e87a608ca590b63729d9f88567 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Tue, 24 Feb 2015 13:40:43 -0800 Subject: [PATCH 142/194] Fix "faccessat ignores flags" The kernel system call faccessat() does not have any flags arguments, so passing flags to the kernel is currently ignored. Fix the kernel system call so that no flags argument is passed in. Ensure that we don't support AT_SYMLINK_NOFOLLOW. This non-POSIX (http://pubs.opengroup.org/onlinepubs/9699919799/functions/access.html) flag is a glibc extension, and has non-intuitive, error prone behavior. For example, consider the following code: symlink("foo.is.dangling", "foo"); if (faccessat(AT_FDCWD, "foo", R_OK, AT_SYMLINK_NOFOLLOW) == 0) { int fd = openat(AT_FDCWD, "foo", O_RDONLY | O_NOFOLLOW); } The faccessat() call in glibc will return true, but an attempt to open the dangling symlink will end up failing. GLIBC documents this as returning the access mode of the symlink itself, which will always return true for any symlink on Linux. Some further discussions of this are at: * http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003617.html * http://permalink.gmane.org/gmane.linux.lib.musl.general/6952 AT_SYMLINK_NOFOLLOW seems broken by design. I suspect this is why this function was never added to POSIX. (note that "access" is pretty much broken by design too, since it introduces a race condition between check and action). We shouldn't support this until it's clearly documented by POSIX or we can have it produce intuitive results. Don't support AT_EACCESS for now. Implementing it is complicated, and pretty much useless on Android, since we don't have setuid binaries. See http://git.musl-libc.org/cgit/musl/commit/?id=0a05eace163cee9b08571d2ff9d90f5e82d9c228 for how an implementation might look. Bug: 18867827 Change-Id: I25b86c5020f3152ffa3ac3047f6c4152908d0e04 --- libc/Android.mk | 1 + libc/SYSCALLS.TXT | 2 +- .../syscalls/{faccessat.S => ___faccessat.S} | 5 +- .../syscalls/{faccessat.S => ___faccessat.S} | 5 +- .../syscalls/{faccessat.S => ___faccessat.S} | 5 +- .../syscalls/{faccessat.S => ___faccessat.S} | 5 +- .../syscalls/{faccessat.S => ___faccessat.S} | 16 ++--- .../syscalls/{faccessat.S => ___faccessat.S} | 6 +- libc/bionic/faccessat.cpp | 59 +++++++++++++++++++ tests/sys_stat_test.cpp | 40 +++++++++++++ 10 files changed, 122 insertions(+), 22 deletions(-) rename libc/arch-arm/syscalls/{faccessat.S => ___faccessat.S} (81%) rename libc/arch-arm64/syscalls/{faccessat.S => ___faccessat.S} (79%) rename libc/arch-mips/syscalls/{faccessat.S => ___faccessat.S} (82%) rename libc/arch-mips64/syscalls/{faccessat.S => ___faccessat.S} (85%) rename libc/arch-x86/syscalls/{faccessat.S => ___faccessat.S} (70%) rename libc/arch-x86_64/syscalls/{faccessat.S => ___faccessat.S} (81%) create mode 100644 libc/bionic/faccessat.cpp diff --git a/libc/Android.mk b/libc/Android.mk index 9dd386411..cb1d8c034 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -116,6 +116,7 @@ libc_bionic_ndk_src_files := \ bionic/error.cpp \ bionic/eventfd_read.cpp \ bionic/eventfd_write.cpp \ + bionic/faccessat.cpp \ bionic/fchmod.cpp \ bionic/fchmodat.cpp \ bionic/ffs.cpp \ diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index aae7de779..150dd14f9 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -130,7 +130,7 @@ int fremovexattr(int, const char*) all int __getdents64:getdents64(unsigned int, struct dirent*, unsigned int) arm,arm64,mips,mips64,x86,x86_64 int __openat:openat(int, const char*, int, mode_t) all -int faccessat(int, const char*, int, int) all +int ___faccessat:faccessat(int, const char*, int) all int ___fchmodat:fchmodat(int, const char*, mode_t) all int fchownat(int, const char*, uid_t, gid_t, int) all int fstatat64|fstatat:fstatat64(int, const char*, struct stat*, int) arm,mips,x86 diff --git a/libc/arch-arm/syscalls/faccessat.S b/libc/arch-arm/syscalls/___faccessat.S similarity index 81% rename from libc/arch-arm/syscalls/faccessat.S rename to libc/arch-arm/syscalls/___faccessat.S index a1df5c09f..1d09cf7c5 100644 --- a/libc/arch-arm/syscalls/faccessat.S +++ b/libc/arch-arm/syscalls/___faccessat.S @@ -2,7 +2,7 @@ #include -ENTRY(faccessat) +ENTRY(___faccessat) mov ip, r7 ldr r7, =__NR_faccessat swi #0 @@ -11,4 +11,5 @@ ENTRY(faccessat) bxls lr neg r0, r0 b __set_errno_internal -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/arch-arm64/syscalls/faccessat.S b/libc/arch-arm64/syscalls/___faccessat.S similarity index 79% rename from libc/arch-arm64/syscalls/faccessat.S rename to libc/arch-arm64/syscalls/___faccessat.S index 4c96cfa7b..6a41b697c 100644 --- a/libc/arch-arm64/syscalls/faccessat.S +++ b/libc/arch-arm64/syscalls/___faccessat.S @@ -2,7 +2,7 @@ #include -ENTRY(faccessat) +ENTRY(___faccessat) mov x8, __NR_faccessat svc #0 @@ -11,4 +11,5 @@ ENTRY(faccessat) b.hi __set_errno_internal ret -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/arch-mips/syscalls/faccessat.S b/libc/arch-mips/syscalls/___faccessat.S similarity index 82% rename from libc/arch-mips/syscalls/faccessat.S rename to libc/arch-mips/syscalls/___faccessat.S index e61610620..4e11bae27 100644 --- a/libc/arch-mips/syscalls/faccessat.S +++ b/libc/arch-mips/syscalls/___faccessat.S @@ -2,7 +2,7 @@ #include -ENTRY(faccessat) +ENTRY(___faccessat) .set noreorder .cpload t9 li v0, __NR_faccessat @@ -16,4 +16,5 @@ ENTRY(faccessat) j t9 nop .set reorder -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/arch-mips64/syscalls/faccessat.S b/libc/arch-mips64/syscalls/___faccessat.S similarity index 85% rename from libc/arch-mips64/syscalls/faccessat.S rename to libc/arch-mips64/syscalls/___faccessat.S index 18bb80062..240625f46 100644 --- a/libc/arch-mips64/syscalls/faccessat.S +++ b/libc/arch-mips64/syscalls/___faccessat.S @@ -2,7 +2,7 @@ #include -ENTRY(faccessat) +ENTRY(___faccessat) .set push .set noreorder li v0, __NR_faccessat @@ -22,4 +22,5 @@ ENTRY(faccessat) j t9 move ra, t0 .set pop -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/arch-x86/syscalls/faccessat.S b/libc/arch-x86/syscalls/___faccessat.S similarity index 70% rename from libc/arch-x86/syscalls/faccessat.S rename to libc/arch-x86/syscalls/___faccessat.S index 9d522311b..361a6ea6e 100644 --- a/libc/arch-x86/syscalls/faccessat.S +++ b/libc/arch-x86/syscalls/___faccessat.S @@ -2,7 +2,7 @@ #include -ENTRY(faccessat) +ENTRY(___faccessat) pushl %ebx .cfi_def_cfa_offset 8 .cfi_rel_offset ebx, 0 @@ -12,13 +12,9 @@ ENTRY(faccessat) pushl %edx .cfi_adjust_cfa_offset 4 .cfi_rel_offset edx, 0 - pushl %esi - .cfi_adjust_cfa_offset 4 - .cfi_rel_offset esi, 0 - mov 20(%esp), %ebx - mov 24(%esp), %ecx - mov 28(%esp), %edx - mov 32(%esp), %esi + mov 16(%esp), %ebx + mov 20(%esp), %ecx + mov 24(%esp), %edx movl $__NR_faccessat, %eax int $0x80 cmpl $-MAX_ERRNO, %eax @@ -28,9 +24,9 @@ ENTRY(faccessat) call __set_errno_internal addl $4, %esp 1: - popl %esi popl %edx popl %ecx popl %ebx ret -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/arch-x86_64/syscalls/faccessat.S b/libc/arch-x86_64/syscalls/___faccessat.S similarity index 81% rename from libc/arch-x86_64/syscalls/faccessat.S rename to libc/arch-x86_64/syscalls/___faccessat.S index 05a6e7863..e8fd3f585 100644 --- a/libc/arch-x86_64/syscalls/faccessat.S +++ b/libc/arch-x86_64/syscalls/___faccessat.S @@ -2,8 +2,7 @@ #include -ENTRY(faccessat) - movq %rcx, %r10 +ENTRY(___faccessat) movl $__NR_faccessat, %eax syscall cmpq $-MAX_ERRNO, %rax @@ -13,4 +12,5 @@ ENTRY(faccessat) call __set_errno_internal 1: ret -END(faccessat) +END(___faccessat) +.hidden ___faccessat diff --git a/libc/bionic/faccessat.cpp b/libc/bionic/faccessat.cpp new file mode 100644 index 000000000..5f375e0f7 --- /dev/null +++ b/libc/bionic/faccessat.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include + +extern "C" int ___faccessat(int, const char*, int); + +int faccessat(int dirfd, const char* pathname, int mode, int flags) { + // "The mode specifies the accessibility check(s) to be performed, + // and is either the value F_OK, or a mask consisting of the + // bitwise OR of one or more of R_OK, W_OK, and X_OK." + if ((mode != F_OK) && ((mode & ~(R_OK | W_OK | X_OK)) != 0) && + ((mode & (R_OK | W_OK | X_OK)) == 0)) { + errno = EINVAL; + return -1; + } + + if (flags != 0) { + // We deliberately don't support AT_SYMLINK_NOFOLLOW, a glibc + // only feature which is error prone and dangerous. + // + // AT_EACCESS isn't supported either. Android doesn't have setuid + // programs, and never runs code with euid!=uid. It could be + // implemented in an expensive way, following the model at + // https://gitlab.com/bminor/musl/commit/0a05eace163cee9b08571d2ff9d90f5e82d9c228 + // but not worth it. + errno = EINVAL; + return -1; + } + + return ___faccessat(dirfd, pathname, mode); +} diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp index 7bbb7c665..28c7c5262 100644 --- a/tests/sys_stat_test.cpp +++ b/tests/sys_stat_test.cpp @@ -219,3 +219,43 @@ TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_with_dangling_symlink) { ASSERT_EQ(ENOTSUP, errno); unlink(linkname); } + +TEST(sys_stat, faccessat_EINVAL) { + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", F_OK, ~AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(EINVAL, errno); +#if defined(__BIONIC__) + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), 0)); + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), 0)); + ASSERT_EQ(EINVAL, errno); +#endif +} + +TEST(sys_stat, faccessat_AT_SYMLINK_NOFOLLOW_EINVAL) { +#if defined(__BIONIC__) + // Android doesn't support AT_SYMLINK_NOFOLLOW + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", F_OK, AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", F_OK, AT_SYMLINK_NOFOLLOW)); +#endif +} + +TEST(sys_stat, faccessat_dev_null) { + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", F_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", R_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", W_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", R_OK|W_OK, 0)); +} + +TEST(sys_stat, faccessat_nonexistant) { + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/blah", F_OK, AT_SYMLINK_NOFOLLOW)); +#if defined(__BIONIC__) + // Android doesn't support AT_SYMLINK_NOFOLLOW + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(ENOENT, errno); +#endif +} From ea9c933f360cc07b821b542321309c65cceddbfc Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 24 Feb 2015 14:39:19 -0800 Subject: [PATCH 143/194] Make all output of child test go to parent process in gtest_main. Change-Id: Iad460e89755051cdb99593cbf42c97d9a359f32b --- tests/gtest_main.cpp | 51 +++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp index 86d64660d..664e4a1d3 100644 --- a/tests/gtest_main.cpp +++ b/tests/gtest_main.cpp @@ -124,15 +124,15 @@ class Test { int64_t GetTestTime() const { return elapsed_time_ns_; } - void AppendFailureMessage(const std::string& s) { failure_message_ += s; } + void AppendTestOutput(const std::string& s) { output_ += s; } - const std::string& GetFailureMessage() const { return failure_message_; } + const std::string& GetTestOutput() const { return output_; } private: const std::string name_; TestResult result_; int64_t elapsed_time_ns_; - std::string failure_message_; + std::string output_; }; class TestCase { @@ -196,10 +196,6 @@ class TestCase { std::vector test_list_; }; -// This is the file descriptor used by the child process to write failure message. -// The parent process will collect the information and dump to stdout / xml file. -static int child_output_fd; - class TestResultPrinter : public testing::EmptyTestEventListener { public: TestResultPrinter() : pinfo_(NULL) {} @@ -219,25 +215,9 @@ void TestResultPrinter::OnTestPartResult(const testing::TestPartResult& result) return; // Print failure message from the assertion (e.g. expected this and got that). - char buf[1024]; - snprintf(buf, sizeof(buf), "%s:(%d) Failure in test %s.%s\n%s\n", result.file_name(), - result.line_number(), - pinfo_->test_case_name(), - pinfo_->name(), - result.message()); - - int towrite = strlen(buf); - char* p = buf; - while (towrite > 0) { - ssize_t bytes_written = TEMP_FAILURE_RETRY(write(child_output_fd, p, towrite)); - if (bytes_written == -1) { - fprintf(stderr, "failed to write child_output_fd: %s\n", strerror(errno)); - exit(1); - } else { - towrite -= bytes_written; - p += bytes_written; - } - } + printf("%s:(%d) Failure in test %s.%s\n%s\n", result.file_name(), result.line_number(), + pinfo_->test_case_name(), pinfo_->name(), result.message()); + fflush(stdout); } static int64_t NanoTime() { @@ -332,8 +312,8 @@ static void OnTestEndPrint(const TestCase& testcase, size_t test_id) { printf("\n"); } - const std::string& failure_message = testcase.GetTest(test_id).GetFailureMessage(); - printf("%s", failure_message.c_str()); + const std::string& test_output = testcase.GetTest(test_id).GetTestOutput(); + printf("%s", test_output.c_str()); fflush(stdout); } @@ -481,8 +461,8 @@ void OnTestIterationEndXmlPrint(const std::string& xml_output_filename, fputs(" />\n", fp); } else { fputs(">\n", fp); - const std::string& failure_message = testcase.GetTest(j).GetFailureMessage(); - fprintf(fp, " \n", failure_message.c_str()); + const std::string& test_output = testcase.GetTest(j).GetTestOutput(); + fprintf(fp, " \n", test_output.c_str()); fputs(" \n", fp); fputs(" \n", fp); } @@ -538,7 +518,10 @@ static ChildProcInfo RunChildProcess(const std::string& test_name, int testcase_ } else if (pid == 0) { // In child process, run a single test. close(pipefd[0]); - child_output_fd = pipefd[1]; + close(STDOUT_FILENO); + close(STDERR_FILENO); + dup2(pipefd[1], STDOUT_FILENO); + dup2(pipefd[1], STDERR_FILENO); if (sigprocmask(SIG_SETMASK, &sigmask, NULL) == -1) { perror("sigprocmask SIG_SETMASK"); @@ -692,7 +675,7 @@ static void CollectChildTestResult(const ChildProcInfo& child_proc, TestCase& te ssize_t bytes_read = TEMP_FAILURE_RETRY(read(child_proc.child_read_fd, buf, sizeof(buf) - 1)); if (bytes_read > 0) { buf[bytes_read] = '\0'; - testcase.GetTest(test_id).AppendFailureMessage(buf); + testcase.GetTest(test_id).AppendTestOutput(buf); } else if (bytes_read == 0) { break; // Read end. } else { @@ -713,7 +696,7 @@ static void CollectChildTestResult(const ChildProcInfo& child_proc, TestCase& te char buf[1024]; snprintf(buf, sizeof(buf), "%s killed because of timeout at %" PRId64 " ms.\n", testcase.GetTestName(test_id).c_str(), testcase.GetTestTime(test_id) / 1000000); - testcase.GetTest(test_id).AppendFailureMessage(buf); + testcase.GetTest(test_id).AppendTestOutput(buf); } else if (WIFSIGNALED(child_proc.exit_status)) { // Record signal terminated test as failed. @@ -721,7 +704,7 @@ static void CollectChildTestResult(const ChildProcInfo& child_proc, TestCase& te char buf[1024]; snprintf(buf, sizeof(buf), "%s terminated by signal: %s.\n", testcase.GetTestName(test_id).c_str(), strsignal(WTERMSIG(child_proc.exit_status))); - testcase.GetTest(test_id).AppendFailureMessage(buf); + testcase.GetTest(test_id).AppendTestOutput(buf); } else { testcase.SetTestResult(test_id, WEXITSTATUS(child_proc.exit_status) == 0 ? From 7fb680bfda059746c9bb8939ffaed600eecc3a29 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 24 Feb 2015 13:18:25 -0800 Subject: [PATCH 144/194] Move getusershell/endusershell/setusershell to ndk_cruft.cpp. Bug: 19108648 Change-Id: I65134040345398dde612c4325d902db58f3bd2be --- libc/bionic/ndk_cruft.cpp | 21 ++++++++++++++++++--- libc/bionic/stubs.cpp | 13 ------------- libc/include/unistd.h | 4 ---- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 28d635518..5d1cbb0a6 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -26,8 +26,7 @@ * SUCH DAMAGE. */ -// This file perpetuates the mistakes of the past, but only for 32-bit targets. -#if !defined(__LP64__) +// This file perpetuates the mistakes of the past. #include #include @@ -45,6 +44,11 @@ #include #include +#include "private/libc_logging.h" + +// The part is only for 32-bit targets. +#if !defined(__LP64__) + // These were accidentally declared in because we stupidly used to inline // getpagesize() and __getpageshift(). Needed for backwards compatibility with old NDK apps. extern "C" { @@ -341,4 +345,15 @@ extern "C" void* dlmalloc(size_t size) { return malloc(size); } -#endif +#endif // !defined(__LP64__) + +// This is never implemented in bionic, only needed for ABI compatibility with the NDK. +extern "C" char* getusershell() { + return NULL; +} + +// This is never implemented in bionic, only needed for ABI compatibility with the NDK. +extern "C" void setusershell() { } + +// This is never implemented in bionic, only needed for ABI compatibility with the NDK. +extern "C" void endusershell() { } diff --git a/libc/bionic/stubs.cpp b/libc/bionic/stubs.cpp index 1264fd7c1..c192bf83e 100644 --- a/libc/bionic/stubs.cpp +++ b/libc/bionic/stubs.cpp @@ -458,19 +458,6 @@ void endpwent() { UNIMPLEMENTED; } -char* getusershell() { - UNIMPLEMENTED; - return NULL; -} - -void setusershell() { - UNIMPLEMENTED; -} - -void endusershell() { - UNIMPLEMENTED; -} - // Portable code should use sysconf(_SC_PAGE_SIZE) directly instead. int getpagesize() { // We dont use sysconf(3) here because that drags in stdio, which makes static binaries fat. diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 0b6700486..9fcb5dbfb 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -116,10 +116,6 @@ extern int setresgid(gid_t, gid_t, gid_t); extern int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); extern int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); extern char* getlogin(void); -extern char* getusershell(void); -extern void setusershell(void); -extern void endusershell(void); - extern long fpathconf(int, int); extern long pathconf(const char*, int); From 339ac378ca04678bdbf9d60dbe715fe7fe7189c3 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 20 Feb 2015 18:31:06 -0800 Subject: [PATCH 145/194] Allow wildcards to match arg values. Change-Id: I38230b500bb8f8f69af0d7c740855a401cd12898 --- benchmarks/Benchmark.cpp | 33 ++++++++++++---------- benchmarks/benchmark/Benchmark.h | 47 +++++++++++++++++++++----------- benchmarks/main.cpp | 2 +- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp index eea304f5b..5ca1d4792 100644 --- a/benchmarks/Benchmark.cpp +++ b/benchmarks/Benchmark.cpp @@ -39,40 +39,45 @@ static uint64_t NanoTime() { return static_cast(t.tv_sec) * 1000000000LL + t.tv_nsec; } +bool Benchmark::header_printed_; + std::vector& Benchmark::List() { static std::vector list; return list; } int Benchmark::MaxNameColumnWidth() { - int max = 20; + size_t max = 20; for (auto& benchmark : List()) { max = std::max(max, benchmark->NameColumnWidth()); } - return max; + return static_cast(max); } -bool Benchmark::RunAll(std::vector& regs) { - bool ran_benchmark = false; +size_t Benchmark::RunAll(std::vector& regs) { + size_t benchmarks_run = 0; + header_printed_ = false; for (auto& benchmark : List()) { - if (benchmark->ShouldRun(regs)) { - if (!ran_benchmark) { - printf("%-*s %10s %10s\n", MaxNameColumnWidth(), "", "iterations", "ns/op"); - ran_benchmark = true; - } - benchmark->RunAll(); - } + benchmarks_run += benchmark->RunAllArgs(regs); } - return ran_benchmark; + return benchmarks_run; } -bool Benchmark::ShouldRun(std::vector& regs) { +void Benchmark::PrintHeader() { + if (!header_printed_) { + printf("%-*s %10s %10s\n", MaxNameColumnWidth(), "", "iterations", "ns/op"); + header_printed_ = true; + } +} + +template +bool BenchmarkT::ShouldRun(std::vector& regs, T arg) { if (regs.empty()) { return true; } for (const auto& re : regs) { - if (regexec(re, Name().c_str(), 0, NULL, 0) != REG_NOMATCH) { + if (regexec(re, GetNameStr(arg).c_str(), 0, NULL, 0) != REG_NOMATCH) { return true; } } diff --git a/benchmarks/benchmark/Benchmark.h b/benchmarks/benchmark/Benchmark.h index 16ae5fa31..ae5c1a228 100644 --- a/benchmarks/benchmark/Benchmark.h +++ b/benchmarks/benchmark/Benchmark.h @@ -34,27 +34,29 @@ public: virtual std::string Name() = 0; - virtual void RunAll() = 0; - - bool ShouldRun(std::vector&); + virtual size_t RunAllArgs(std::vector&) = 0; void SetBenchmarkBytesProcessed(uint64_t bytes) { bytes_processed_ += bytes; } void StopBenchmarkTiming(); void StartBenchmarkTiming(); // Run all of the benchmarks that have registered. - static bool RunAll(std::vector&); + static size_t RunAll(std::vector&); static std::vector& List(); static int MaxNameColumnWidth(); protected: - virtual int NameColumnWidth() = 0; + virtual size_t NameColumnWidth() = 0; uint64_t bytes_processed_; uint64_t total_time_ns_; uint64_t start_time_ns_; + + static bool header_printed_; + + static void PrintHeader(); }; template @@ -64,6 +66,7 @@ public: virtual ~BenchmarkT() {} protected: + bool ShouldRun(std::vector&, T arg); void RunWithArg(T arg); virtual void RunIterations(int, T) = 0; virtual std::string GetNameStr(T) = 0; @@ -75,8 +78,14 @@ public: virtual ~BenchmarkWithoutArg() {} protected: - virtual void RunAll() override { - RunWithArg(nullptr); + virtual size_t RunAllArgs(std::vector& regs) override { + size_t benchmarks_run = 0; + if (BenchmarkT::ShouldRun(regs, nullptr)) { + PrintHeader(); + RunWithArg(nullptr); + benchmarks_run++; + } + return benchmarks_run; } virtual void RunIterations(int iters, void*) override { @@ -85,8 +94,8 @@ protected: virtual void Run(int) = 0; - virtual int NameColumnWidth() override { - return (int)Name().size(); + virtual size_t NameColumnWidth() override { + return Name().size(); } virtual std::string GetNameStr(void *) override; @@ -104,20 +113,26 @@ public: } protected: - virtual int NameColumnWidth() override { - int max = 0; - for (const auto arg : args_) { - max = std::max(max, (int)GetNameStr(arg).size()); + virtual size_t NameColumnWidth() override { + size_t max = 0; + for (const auto& arg : args_) { + max = std::max(max, GetNameStr(arg).size()); } return max; } std::string GetNameStr(T arg) override; - virtual void RunAll() override { - for (T arg : args_) { - BenchmarkT::RunWithArg(arg); + virtual size_t RunAllArgs(std::vector& regs) override { + size_t benchmarks_run = 0; + for (T& arg : args_) { + if (BenchmarkT::ShouldRun(regs, arg)) { + Benchmark::PrintHeader(); + BenchmarkT::RunWithArg(arg); + benchmarks_run++; + } } + return benchmarks_run; } virtual void RunIterations(int iters, T arg) override { diff --git a/benchmarks/main.cpp b/benchmarks/main.cpp index b6984fca7..5bce47904 100644 --- a/benchmarks/main.cpp +++ b/benchmarks/main.cpp @@ -48,7 +48,7 @@ int main(int argc, char* argv[]) { regs.push_back(re); } - if (!::testing::Benchmark::RunAll(regs)) { + if (::testing::Benchmark::RunAll(regs) == 0) { fprintf(stderr, "No matching benchmarks!\n"); fprintf(stderr, "Available benchmarks:\n"); for (const auto& benchmark : ::testing::Benchmark::List()) { From 52d7f1a94fd6ccb87dabd21c682f68d31810aca9 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 25 Feb 2015 14:58:08 -0800 Subject: [PATCH 146/194] Move endpwent to ndk_cruft.cpp. Bug: 19109159 Change-Id: I3683a247643006ea6d6bcf3845f57d1908d457d7 --- libc/bionic/ndk_cruft.cpp | 3 +++ libc/bionic/stubs.cpp | 12 ------------ libc/include/pwd.h | 4 ---- 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index ceff6a1db..109c5239b 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -358,3 +358,6 @@ extern "C" void setusershell() { } // This is never implemented in bionic, only needed for ABI compatibility with the NDK. extern "C" void endusershell() { } + +// This is never implemented in bionic, only needed for ABI compatibility with the NDK. +extern "C" void endpwent() { } diff --git a/libc/bionic/stubs.cpp b/libc/bionic/stubs.cpp index c192bf83e..f9a31b9af 100644 --- a/libc/bionic/stubs.cpp +++ b/libc/bionic/stubs.cpp @@ -446,18 +446,6 @@ protoent* getprotobynumber(int /*proto*/) { return NULL; } -static void unimplemented_stub(const char* function) { - const char* fmt = "%s(3) is not implemented on Android\n"; - __libc_format_log(ANDROID_LOG_WARN, "libc", fmt, function); - fprintf(stderr, fmt, function); -} - -#define UNIMPLEMENTED unimplemented_stub(__PRETTY_FUNCTION__) - -void endpwent() { - UNIMPLEMENTED; -} - // Portable code should use sysconf(_SC_PAGE_SIZE) directly instead. int getpagesize() { // We dont use sysconf(3) here because that drags in stdio, which makes static binaries fat. diff --git a/libc/include/pwd.h b/libc/include/pwd.h index 6d483c03f..6012b9658 100644 --- a/libc/include/pwd.h +++ b/libc/include/pwd.h @@ -119,10 +119,6 @@ struct passwd* getpwuid(uid_t); int getpwnam_r(const char*, struct passwd*, char*, size_t, struct passwd**); int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**); -void endpwent(void); -struct passwd* getpwent(void); -int setpwent(void); - __END_DECLS #endif From 9b4f77f5cfc45a377b7de7195341a7769a722b74 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Mon, 23 Feb 2015 16:42:07 -0800 Subject: [PATCH 147/194] Make tempnam/mktemp deprecated. Bug: 19340053 Change-Id: Ib02c65814ef97cd1758fd8142b73736cc8bc1700 --- libc/include/stdio.h | 6 +++--- libc/include/stdlib.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libc/include/stdio.h b/libc/include/stdio.h index eb578f586..12408382f 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -266,16 +266,16 @@ int vdprintf(int, const char * __restrict, __va_list) __printflike(2, 0); #ifndef __AUDIT__ #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L -char* gets(char*) __attribute__((deprecated("gets is very unsafe; consider using fgets"))); +char* gets(char*) __attribute__((deprecated("gets is unsafe, use fgets instead"))); #endif int sprintf(char* __restrict, const char* __restrict, ...) __printflike(2, 3) __warnattr("sprintf is often misused; please use snprintf"); -char* tmpnam(char*) __warnattr("tmpnam possibly used unsafely; consider using mkstemp"); int vsprintf(char* __restrict, const char* __restrict, __va_list) __printflike(2, 0) __warnattr("vsprintf is often misused; please use vsnprintf"); +char* tmpnam(char*) __attribute__((deprecated("tmpnam is unsafe, use mkstemp or tmpfile instead"))); #if __XPG_VISIBLE char* tempnam(const char*, const char*) - __warnattr("tempnam possibly used unsafely; consider using mkstemp"); + __attribute__((deprecated("tempnam is unsafe, use mkstemp or tmpfile instead"))); #endif #endif diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index cbd7aeb98..84bf56dee 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -58,7 +58,7 @@ extern int unsetenv(const char*); extern int clearenv(void); extern char* mkdtemp(char*); -extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); +extern char* mktemp(char*) __attribute__((deprecated("mktemp is unsafe, use mkstemp or tmpfile instead"))); extern int mkostemp64(char*, int); extern int mkostemp(char*, int); From b8b5a72f41830eadbb4753a74845cf5fcba86334 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 25 Feb 2015 19:05:37 -0800 Subject: [PATCH 148/194] Make getgrent deprecated. Bug: 19340053 Change-Id: Ie8b97f840d9e87555e6a3d591fc87bc08c2d6820 --- libc/include/grp.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/include/grp.h b/libc/include/grp.h index 7b3e32b3e..df7a6137d 100644 --- a/libc/include/grp.h +++ b/libc/include/grp.h @@ -54,9 +54,9 @@ __BEGIN_DECLS struct group *getgrgid(gid_t); struct group *getgrnam(const char *); #if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE -struct group *getgrent(void) __errorattr("getgrent is meaningless on Android"); -__errordecl(setgrent, "setgrent is meaningless on Android"); -__errordecl(endgrent, "endgrent is meaningless on Android"); +struct group *getgrent(void) __attribute__((deprecated("getgrent is meaningless on Android"))); +void setgrent(void) __attribute__((deprecated("setgrent is meaningless on Android"))); +void endgrent(void) __attribute__((deprecated("endgrent is meaningless on Android"))); int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); int getgrnam_r(const char *, struct group *, char *, From ce751b3536586683ad1dc9bac7e2a4fcfa9d028b Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 26 Feb 2015 13:45:06 -0800 Subject: [PATCH 149/194] Lose bionic_atomic stuff. Bug: 17177189 Change-Id: Ie1f5d7af359d31b14f58e53ec89c72111362d7ec --- libc/private/bionic_atomic_arm.h | 74 ------------------------ libc/private/bionic_atomic_arm64.h | 72 ----------------------- libc/private/bionic_atomic_gcc_builtin.h | 50 ---------------- libc/private/bionic_atomic_inline.h | 61 ------------------- libc/private/bionic_atomic_mips.h | 71 ----------------------- libc/private/bionic_atomic_x86.h | 58 ------------------- 6 files changed, 386 deletions(-) delete mode 100644 libc/private/bionic_atomic_arm.h delete mode 100644 libc/private/bionic_atomic_arm64.h delete mode 100644 libc/private/bionic_atomic_gcc_builtin.h delete mode 100644 libc/private/bionic_atomic_inline.h delete mode 100644 libc/private/bionic_atomic_mips.h delete mode 100644 libc/private/bionic_atomic_x86.h diff --git a/libc/private/bionic_atomic_arm.h b/libc/private/bionic_atomic_arm.h deleted file mode 100644 index 0cb832f97..000000000 --- a/libc/private/bionic_atomic_arm.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef BIONIC_ATOMIC_ARM_H -#define BIONIC_ATOMIC_ARM_H - -__ATOMIC_INLINE__ void __bionic_memory_barrier() { - __asm__ __volatile__ ( "dmb ish" : : : "memory" ); -} - -/* Compare-and-swap, without any explicit barriers. Note that this function - * returns 0 on success, and 1 on failure. The opposite convention is typically - * used on other platforms. - */ -__ATOMIC_INLINE__ int __bionic_cmpxchg(int32_t old_value, int32_t new_value, volatile int32_t* ptr) { - int32_t prev, status; - do { - __asm__ __volatile__ ( - "ldrex %0, [%3]\n" - "mov %1, #0\n" - "teq %0, %4\n" -#ifdef __thumb2__ - "it eq\n" -#endif - "strexeq %1, %5, [%3]" - : "=&r" (prev), "=&r" (status), "+m"(*ptr) - : "r" (ptr), "Ir" (old_value), "r" (new_value) - : "cc"); - } while (__builtin_expect(status != 0, 0)); - return prev != old_value; -} - -/* Swap, without any explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_swap(int32_t new_value, volatile int32_t* ptr) { - int32_t prev, status; - do { - __asm__ __volatile__ ( - "ldrex %0, [%3]\n" - "strex %1, %4, [%3]" - : "=&r" (prev), "=&r" (status), "+m" (*ptr) - : "r" (ptr), "r" (new_value) - : "cc"); - } while (__builtin_expect(status != 0, 0)); - return prev; -} - -/* Atomic decrement, without explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_atomic_dec(volatile int32_t* ptr) { - int32_t prev, tmp, status; - do { - __asm__ __volatile__ ( - "ldrex %0, [%4]\n" - "sub %1, %0, #1\n" - "strex %2, %1, [%4]" - : "=&r" (prev), "=&r" (tmp), "=&r" (status), "+m"(*ptr) - : "r" (ptr) - : "cc"); - } while (__builtin_expect(status != 0, 0)); - return prev; -} - -#endif /* SYS_ATOMICS_ARM_H */ diff --git a/libc/private/bionic_atomic_arm64.h b/libc/private/bionic_atomic_arm64.h deleted file mode 100644 index c3a34e18c..000000000 --- a/libc/private/bionic_atomic_arm64.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef BIONIC_ATOMIC_AARCH64_H -#define BIONIC_ATOMIC_AARCH64_H - -/* For ARMv8, we can use the 'dmb' instruction directly */ -__ATOMIC_INLINE__ void __bionic_memory_barrier() { - __asm__ __volatile__ ( "dmb ish" : : : "memory" ); -} - -/* Compare-and-swap, without any explicit barriers. Note that this function - * returns 0 on success, and 1 on failure. The opposite convention is typically - * used on other platforms. - */ -__ATOMIC_INLINE__ int __bionic_cmpxchg(int32_t old_value, int32_t new_value, volatile int32_t* ptr) { - int32_t tmp, oldval; - __asm__ __volatile__ ( - "// atomic_cmpxchg\n" - "1: ldxr %w1, [%3]\n" - " cmp %w1, %w4\n" - " b.ne 2f\n" - " stxr %w0, %w5, [%3]\n" - " cbnz %w0, 1b\n" - "2:" - : "=&r" (tmp), "=&r" (oldval), "+o"(*ptr) - : "r" (ptr), "Ir" (old_value), "r" (new_value) - : "cc", "memory"); - return oldval != old_value; -} - -/* Swap, without any explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_swap(int32_t new_value, volatile int32_t* ptr) { - int32_t prev, status; - __asm__ __volatile__ ( - "// atomic_swap\n" - "1: ldxr %w0, [%3]\n" - " stxr %w1, %w4, [%3]\n" - " cbnz %w1, 1b\n" - : "=&r" (prev), "=&r" (status), "+o" (*ptr) - : "r" (ptr), "r" (new_value) - : "cc", "memory"); - return prev; -} - -/* Atomic decrement, without explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_atomic_dec(volatile int32_t* ptr) { - int32_t prev, tmp, status; - __asm__ __volatile__ ( - "1: ldxr %w0, [%4]\n" - " sub %w1, %w0, #1\n" - " stxr %w2, %w1, [%4]\n" - " cbnz %w2, 1b" - : "=&r" (prev), "=&r" (tmp), "=&r" (status), "+m"(*ptr) - : "r" (ptr) - : "cc", "memory"); - return prev; -} - -#endif /* BIONIC_ATOMICS_AARCH64_H */ diff --git a/libc/private/bionic_atomic_gcc_builtin.h b/libc/private/bionic_atomic_gcc_builtin.h deleted file mode 100644 index 70eb861fe..000000000 --- a/libc/private/bionic_atomic_gcc_builtin.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef BIONIC_ATOMIC_GCC_BUILTIN_H -#define BIONIC_ATOMIC_GCC_BUILTIN_H - -/* - * This header file is used by default if we don't have optimized atomic - * routines for a given platform. See bionic_atomic_arm.h and - * bionic_atomic_x86.h for examples. - * - * Note that the GCC builtins include barriers that aren't present in - * the architecture-specific assembler versions. - */ - -__ATOMIC_INLINE__ void __bionic_memory_barrier() { - __sync_synchronize(); -} - -__ATOMIC_INLINE__ int __bionic_cmpxchg(int32_t old_value, int32_t new_value, volatile int32_t* ptr) { - /* We must return 0 on success. */ - return __sync_val_compare_and_swap(ptr, old_value, new_value) != old_value; -} - -__ATOMIC_INLINE__ int32_t __bionic_swap(int32_t new_value, volatile int32_t* ptr) { - int32_t old_value; - do { - old_value = *ptr; - } while (__sync_val_compare_and_swap(ptr, old_value, new_value) != old_value); - return old_value; -} - -__ATOMIC_INLINE__ int32_t __bionic_atomic_dec(volatile int32_t* ptr) { - /* We must return the old value. */ - return __sync_fetch_and_add(ptr, -1); -} - -#endif /* BIONIC_ATOMIC_GCC_BUILTIN_H */ diff --git a/libc/private/bionic_atomic_inline.h b/libc/private/bionic_atomic_inline.h deleted file mode 100644 index f8032c34a..000000000 --- a/libc/private/bionic_atomic_inline.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef BIONIC_ATOMIC_INLINE_H -#define BIONIC_ATOMIC_INLINE_H - -/* - * Inline declarations and macros for some special-purpose atomic - * operations. These are intended for rare circumstances where a - * memory barrier needs to be issued inline rather than as a function - * call. - * - * Macros defined in this header: - * - * void ANDROID_MEMBAR_FULL() - * Full memory barrier. Provides a compiler reordering barrier, and - * on SMP systems emits an appropriate instruction. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Define __ATOMIC_INLINE__ to control the inlining of all atomics - * functions declared here. For a slight performance boost, we want - * all of them to be always_inline - */ -#define __ATOMIC_INLINE__ static __inline__ __attribute__((always_inline)) - -#if defined(__arm__) -# include "bionic_atomic_arm.h" -#elif defined(__aarch64__) -# include "bionic_atomic_arm64.h" -#elif defined(__i386__) -# include "bionic_atomic_x86.h" -#elif defined(__mips__) -# include "bionic_atomic_mips.h" -#else -# include "bionic_atomic_gcc_builtin.h" -#endif - -#define ANDROID_MEMBAR_FULL __bionic_memory_barrier - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // BIONIC_ATOMIC_INLINE_H diff --git a/libc/private/bionic_atomic_mips.h b/libc/private/bionic_atomic_mips.h deleted file mode 100644 index 83f75fe86..000000000 --- a/libc/private/bionic_atomic_mips.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef BIONIC_ATOMIC_MIPS_H -#define BIONIC_ATOMIC_MIPS_H - -/* Define a full memory barrier, this is only needed if we build the - * platform for a multi-core device. - */ - -__ATOMIC_INLINE__ void __bionic_memory_barrier() { - __asm__ __volatile__ ( "sync" : : : "memory" ); -} - -/* Compare-and-swap, without any explicit barriers. Note that this function - * returns 0 on success, and 1 on failure. The opposite convention is typically - * used on other platforms. - */ -__ATOMIC_INLINE__ int __bionic_cmpxchg(int32_t old_value, int32_t new_value, volatile int32_t* ptr) { - int32_t prev, status; - __asm__ __volatile__ ("1: move %[status], %[new_value] \n" - " ll %[prev], 0(%[ptr]) \n" - " bne %[old_value], %[prev], 2f \n" - " sc %[status], 0(%[ptr]) \n" - " beqz %[status], 1b \n" - "2: \n" - : [prev]"=&r"(prev), [status]"=&r"(status), "+m"(*ptr) - : [new_value]"r"(new_value), [old_value]"r"(old_value), [ptr]"r"(ptr) - : "memory"); - return prev != old_value; -} - -/* Swap, without any explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_swap(int32_t new_value, volatile int32_t* ptr) { - int32_t prev, status; - __asm__ __volatile__ ("1: move %[status], %[new_value] \n" - " ll %[prev], 0(%[ptr]) \n" - " sc %[status], 0(%[ptr]) \n" - " beqz %[status], 1b \n" - : [prev]"=&r"(prev), [status]"=&r"(status), "+m"(*ptr) - : [ptr]"r"(ptr), [new_value]"r"(new_value) - : "memory"); - return prev; -} - -/* Atomic decrement, without explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_atomic_dec(volatile int32_t* ptr) { - int32_t prev, status; - __asm__ __volatile__ ("1: ll %[prev], 0(%[ptr]) \n" - " addiu %[status], %[prev], -1 \n" - " sc %[status], 0(%[ptr]) \n" - " beqz %[status], 1b \n" - : [prev]"=&r" (prev), [status]"=&r"(status), "+m" (*ptr) - : [ptr]"r"(ptr) - : "memory"); - return prev; -} - -#endif /* BIONIC_ATOMIC_MIPS_H */ diff --git a/libc/private/bionic_atomic_x86.h b/libc/private/bionic_atomic_x86.h deleted file mode 100644 index e63df9384..000000000 --- a/libc/private/bionic_atomic_x86.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef BIONIC_ATOMIC_X86_H -#define BIONIC_ATOMIC_X86_H - -/* Define a full memory barrier, this is only needed if we build the - * platform for a multi-core device. - */ -__ATOMIC_INLINE__ void __bionic_memory_barrier() { - __asm__ __volatile__ ( "mfence" : : : "memory" ); -} - -/* Compare-and-swap, without any explicit barriers. Note that this function - * returns 0 on success, and 1 on failure. The opposite convention is typically - * used on other platforms. - */ -__ATOMIC_INLINE__ int __bionic_cmpxchg(int32_t old_value, int32_t new_value, volatile int32_t* ptr) { - int32_t prev; - __asm__ __volatile__ ("lock; cmpxchgl %1, %2" - : "=a" (prev) - : "q" (new_value), "m" (*ptr), "0" (old_value) - : "memory"); - return prev != old_value; -} - -/* Swap, without any explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_swap(int32_t new_value, volatile int32_t *ptr) { - __asm__ __volatile__ ("xchgl %1, %0" - : "=r" (new_value) - : "m" (*ptr), "0" (new_value) - : "memory"); - return new_value; -} - -/* Atomic decrement, without explicit barriers. */ -__ATOMIC_INLINE__ int32_t __bionic_atomic_dec(volatile int32_t* ptr) { - int increment = -1; - __asm__ __volatile__ ("lock; xaddl %0, %1" - : "+r" (increment), "+m" (*ptr) - : : "memory"); - /* increment now holds the old value of *ptr */ - return increment; -} - -#endif /* BIONIC_ATOMIC_X86_H */ From f6237470a3f5ce801b5df2500f3d0ffb1aec4515 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 26 Feb 2015 19:03:54 -0800 Subject: [PATCH 150/194] Make bionic gtest main be compatible with gtest output format for cts test. Bug: 17589740 Change-Id: Ifab521da379a33bf0a7bf11c21386f936f0d494c --- tests/Android.mk | 20 +++++++++++++++++++- tests/gtest_main.cpp | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/tests/Android.mk b/tests/Android.mk index bd4695f17..b3eea0620 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -211,7 +211,7 @@ build_type := host include $(LOCAL_PATH)/Android.build.mk # ----------------------------------------------------------------------------- -# Library of bionic customized gtest main function. +# Library of bionic customized gtest main function, with simplified output format. # ----------------------------------------------------------------------------- libBionicGtestMain_src_files := gtest_main.cpp @@ -227,6 +227,24 @@ include $(LOCAL_PATH)/Android.build.mk build_type := host include $(LOCAL_PATH)/Android.build.mk +# ----------------------------------------------------------------------------- +# Library of bionic customized gtest main function, with normal gtest output format, +# which is needed by bionic cts test. +# ----------------------------------------------------------------------------- +libBionicCtsGtestMain_src_files := gtest_main.cpp + +libBionicCtsGtestMain_cflags := $(test_cflags) + +libBionicCtsGtestMain_cppflags := $(test_cppflags) -DUSING_GTEST_OUTPUT_FORMAT + +module := libBionicCtsGtestMain +module_tag := optional +build_type := target +build_target := STATIC_TEST_LIBRARY +include $(LOCAL_PATH)/Android.build.mk +build_type := host +include $(LOCAL_PATH)/Android.build.mk + # ----------------------------------------------------------------------------- # Tests for the device using bionic's .so. Run with: # adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests32 diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp index 664e4a1d3..b1953fc29 100644 --- a/tests/gtest_main.cpp +++ b/tests/gtest_main.cpp @@ -295,6 +295,32 @@ static void OnTestIterationStartPrint(const std::vector& testcase_list fflush(stdout); } +// bionic cts test needs gtest output format. +#if defined(USING_GTEST_OUTPUT_FORMAT) + +static void OnTestEndPrint(const TestCase& testcase, size_t test_id) { + ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + printf("%s\n", testcase.GetTestName(test_id).c_str()); + + const std::string& test_output = testcase.GetTest(test_id).GetTestOutput(); + printf("%s", test_output.c_str()); + + TestResult result = testcase.GetTestResult(test_id); + if (result == TEST_SUCCESS) { + ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else { + ColoredPrintf(COLOR_RED, "[ FAILED ] "); + } + printf("%s", testcase.GetTestName(test_id).c_str()); + if (testing::GTEST_FLAG(print_time)) { + printf(" (%" PRId64 " ms)", testcase.GetTestTime(test_id) / 1000000); + } + printf("\n"); + fflush(stdout); +} + +#else // !defined(USING_GTEST_OUTPUT_FORMAT) + static void OnTestEndPrint(const TestCase& testcase, size_t test_id) { TestResult result = testcase.GetTestResult(test_id); if (result == TEST_SUCCESS) { @@ -307,16 +333,17 @@ static void OnTestEndPrint(const TestCase& testcase, size_t test_id) { printf("%s", testcase.GetTestName(test_id).c_str()); if (testing::GTEST_FLAG(print_time)) { - printf(" (%" PRId64 " ms)\n", testcase.GetTestTime(test_id) / 1000000); - } else { - printf("\n"); + printf(" (%" PRId64 " ms)", testcase.GetTestTime(test_id) / 1000000); } + printf("\n"); const std::string& test_output = testcase.GetTest(test_id).GetTestOutput(); printf("%s", test_output.c_str()); fflush(stdout); } +#endif // !defined(USING_GTEST_OUTPUT_FORMAT) + static void OnTestIterationEndPrint(const std::vector& testcase_list, size_t /*iteration*/, int64_t elapsed_time_ns) { From cc9ca1051dbf5bd2af1b801de13d43a399521cf9 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 27 Feb 2015 18:22:45 -0800 Subject: [PATCH 151/194] Fix fread returning bad data. Bug: 19172514 Change-Id: I05016577858a02aca7d14e75e6ec28abc925037c --- libc/stdio/fread.c | 6 ++++++ tests/stdio_test.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/libc/stdio/fread.c b/libc/stdio/fread.c index bac8dad66..f3f012737 100644 --- a/libc/stdio/fread.c +++ b/libc/stdio/fread.c @@ -102,6 +102,12 @@ fread(void *buf, size_t size, size_t count, FILE *fp) * avoid copying it through the buffer? */ if (total > (size_t) fp->_bf._size) { + /* + * Make sure that fseek doesn't think it can + * reuse the buffer since we are going to read + * directly from the file descriptor. + */ + fp->_flags |= __SMOD; break; } diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index 890e86edc..2ecfc6072 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -965,3 +965,41 @@ TEST(stdio, fwrite_after_fread_slow_path) { TEST(stdio, fwrite_after_fread_fast_path) { test_fwrite_after_fread(64*1024); } + +// http://b/19172514 +TEST(stdio, fread_after_fseek) { + TemporaryFile tf; + + FILE* fp = fopen(tf.filename, "w+"); + ASSERT_TRUE(fp != nullptr); + + char file_data[12288]; + for (size_t i = 0; i < 12288; i++) { + file_data[i] = i; + } + ASSERT_EQ(12288U, fwrite(file_data, 1, 12288, fp)); + fclose(fp); + + fp = fopen(tf.filename, "r"); + ASSERT_TRUE(fp != nullptr); + + char buffer[8192]; + size_t cur_location = 0; + // Small read to populate internal buffer. + ASSERT_EQ(100U, fread(buffer, 1, 100, fp)); + ASSERT_EQ(memcmp(file_data, buffer, 100), 0); + + cur_location = static_cast(ftell(fp)); + // Large read to force reading into the user supplied buffer and bypassing + // the internal buffer. + ASSERT_EQ(8192U, fread(buffer, 1, 8192, fp)); + ASSERT_EQ(memcmp(file_data+cur_location, buffer, 8192), 0); + + // Small backwards seek to verify fseek does not reuse the internal buffer. + ASSERT_EQ(0, fseek(fp, -22, SEEK_CUR)); + cur_location = static_cast(ftell(fp)); + ASSERT_EQ(22U, fread(buffer, 1, 22, fp)); + ASSERT_EQ(memcmp(file_data+cur_location, buffer, 22), 0); + + fclose(fp); +} From c09268a3fef0b9574b2b6227c9fac3096ad6654e Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Mon, 2 Mar 2015 09:14:51 -0800 Subject: [PATCH 152/194] bionic: deprecate _PATH_MEM /dev/mem (and /dev/kmem) are not enabled in the kernels, and selinux prevents access and makes it a rule compilation error to enable access. No code uses the _PATH_MEM macro. Remove definition to suppress future usage. Bug: 19549480 Change-Id: Ie0fb0f53d43349f4fe227068e4bf8a768f620d60 --- libc/include/paths.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libc/include/paths.h b/libc/include/paths.h index 1eba53636..33c2eee1b 100644 --- a/libc/include/paths.h +++ b/libc/include/paths.h @@ -39,7 +39,6 @@ #define _PATH_CONSOLE "/dev/console" #define _PATH_DEVNULL "/dev/null" #define _PATH_KLOG "/proc/kmsg" -#define _PATH_MEM "/dev/mem" #define _PATH_MOUNTED "/proc/mounts" #define _PATH_TTY "/dev/tty" From 5e2bd719d7dd19afe55f8d4f24366c0230e0e6c7 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Fri, 20 Feb 2015 16:15:33 -0800 Subject: [PATCH 153/194] Refactor pthread_key.cpp to be lock-free. Change-Id: I20dfb9d3cdc40eed10ea12ac34f03caaa94f7a49 --- libc/bionic/pthread_create.cpp | 5 +- libc/bionic/pthread_internal.h | 7 + libc/bionic/pthread_key.cpp | 279 ++++++++++++--------------------- libc/private/bionic_tls.h | 35 +++-- 4 files changed, 130 insertions(+), 196 deletions(-) diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp index c6d8494aa..2bca43f83 100644 --- a/libc/bionic/pthread_create.cpp +++ b/libc/bionic/pthread_create.cpp @@ -56,7 +56,8 @@ void __init_tls(pthread_internal_t* thread) { if (thread->mmap_size == 0) { // If the TLS area was not allocated by mmap(), it may not have been cleared to zero. // So assume the worst and zero the TLS area. - memset(&thread->tls[0], 0, BIONIC_TLS_SLOTS * sizeof(void*)); + memset(thread->tls, 0, sizeof(thread->tls)); + memset(thread->key_data, 0, sizeof(thread->key_data)); } // Slot 0 must point to itself. The x86 Linux kernel reads the TLS from %fs:0. @@ -155,7 +156,7 @@ static int __allocate_thread(pthread_attr_t* attr, pthread_internal_t** threadp, } // Mapped space(or user allocated stack) is used for: - // thread_internal_t (including tls array) + // thread_internal_t // thread stack (including guard page) stack_top -= sizeof(pthread_internal_t); pthread_internal_t* thread = reinterpret_cast(stack_top); diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h index 8fbaf2213..f131d7aaa 100644 --- a/libc/bionic/pthread_internal.h +++ b/libc/bionic/pthread_internal.h @@ -44,6 +44,11 @@ /* Is this the main thread? */ #define PTHREAD_ATTR_FLAG_MAIN_THREAD 0x80000000 +struct pthread_key_data_t { + uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below. + void* data; +}; + struct pthread_internal_t { struct pthread_internal_t* next; struct pthread_internal_t* prev; @@ -86,6 +91,8 @@ struct pthread_internal_t { void* tls[BIONIC_TLS_SLOTS]; + pthread_key_data_t key_data[BIONIC_PTHREAD_KEY_COUNT]; + /* * The dynamic linker implements dlerror(3), which makes it hard for us to implement this * per-thread buffer by simply using malloc(3) and free(3). diff --git a/libc/bionic/pthread_key.cpp b/libc/bionic/pthread_key.cpp index 49b72e9de..65e087902 100644 --- a/libc/bionic/pthread_key.cpp +++ b/libc/bionic/pthread_key.cpp @@ -28,175 +28,98 @@ #include #include +#include #include "private/bionic_tls.h" #include "pthread_internal.h" -/* A technical note regarding our thread-local-storage (TLS) implementation: - * - * There can be up to BIONIC_TLS_SLOTS independent TLS keys in a given process, - * The keys below TLS_SLOT_FIRST_USER_SLOT are reserved for Bionic to hold - * special thread-specific variables like errno or a pointer to - * the current thread's descriptor. These entries cannot be accessed through - * pthread_getspecific() / pthread_setspecific() or pthread_key_delete() - * - * The 'tls_map_t' type defined below implements a shared global map of - * currently created/allocated TLS keys and the destructors associated - * with them. - * - * The global TLS map simply contains a bitmap of allocated keys, and - * an array of destructors. - * - * Each thread has a TLS area that is a simple array of BIONIC_TLS_SLOTS void* - * pointers. the TLS area of the main thread is stack-allocated in - * __libc_init_common, while the TLS area of other threads is placed at - * the top of their stack in pthread_create. - * - * When pthread_key_delete() is called it will erase the key's bitmap bit - * and its destructor, and will also clear the key data in the TLS area of - * all created threads. As mandated by Posix, it is the responsibility of - * the caller of pthread_key_delete() to properly reclaim the objects that - * were pointed to by these data fields (either before or after the call). - */ - -#define TLSMAP_BITS 32 -#define TLSMAP_WORDS ((BIONIC_TLS_SLOTS+TLSMAP_BITS-1)/TLSMAP_BITS) -#define TLSMAP_WORD(m,k) (m).map[(k)/TLSMAP_BITS] -#define TLSMAP_MASK(k) (1U << ((k)&(TLSMAP_BITS-1))) - -static inline bool IsValidUserKey(pthread_key_t key) { - return (key >= TLS_SLOT_FIRST_USER_SLOT && key < BIONIC_TLS_SLOTS); -} - typedef void (*key_destructor_t)(void*); -struct tls_map_t { - bool is_initialized; +#define SEQ_KEY_IN_USE_BIT 0 - /* bitmap of allocated keys */ - uint32_t map[TLSMAP_WORDS]; +#define SEQ_INCREMENT_STEP (1 << SEQ_KEY_IN_USE_BIT) - key_destructor_t key_destructors[BIONIC_TLS_SLOTS]; +// pthread_key_internal_t records the use of each pthread key slot: +// seq records the state of the slot. +// bit 0 is 1 when the key is in use, 0 when it is unused. Each time we create or delete the +// pthread key in the slot, we increse the seq by 1 (which inverts bit 0). The reason to use +// a sequence number instead of a boolean value here is that when the key slot is deleted and +// reused for a new key, pthread_getspecific will not return stale data. +// key_destructor records the destructor called at thread exit. +struct pthread_key_internal_t { + atomic_uintptr_t seq; + atomic_uintptr_t key_destructor; }; -class ScopedTlsMapAccess { - public: - ScopedTlsMapAccess() { - Lock(); +static pthread_key_internal_t key_map[BIONIC_PTHREAD_KEY_COUNT]; - // If this is the first time the TLS map has been accessed, - // mark the slots belonging to well-known keys as being in use. - // This isn't currently necessary because the well-known keys - // can only be accessed directly by bionic itself, do not have - // destructors, and all the functions that touch the TLS map - // start after the maximum well-known slot. - if (!s_tls_map_.is_initialized) { - for (pthread_key_t key = 0; key < TLS_SLOT_FIRST_USER_SLOT; ++key) { - SetInUse(key, NULL); - } - s_tls_map_.is_initialized = true; - } - } +static inline bool SeqOfKeyInUse(uintptr_t seq) { + return seq & (1 << SEQ_KEY_IN_USE_BIT); +} - ~ScopedTlsMapAccess() { - Unlock(); - } - - int CreateKey(pthread_key_t* result, void (*key_destructor)(void*)) { - // Take the first unallocated key. - for (int key = 0; key < BIONIC_TLS_SLOTS; ++key) { - if (!IsInUse(key)) { - SetInUse(key, key_destructor); - *result = key; - return 0; - } - } - - // We hit PTHREAD_KEYS_MAX. POSIX says EAGAIN for this case. - return EAGAIN; - } - - void DeleteKey(pthread_key_t key) { - TLSMAP_WORD(s_tls_map_, key) &= ~TLSMAP_MASK(key); - s_tls_map_.key_destructors[key] = NULL; - } - - bool IsInUse(pthread_key_t key) { - return (TLSMAP_WORD(s_tls_map_, key) & TLSMAP_MASK(key)) != 0; - } - - void SetInUse(pthread_key_t key, void (*key_destructor)(void*)) { - TLSMAP_WORD(s_tls_map_, key) |= TLSMAP_MASK(key); - s_tls_map_.key_destructors[key] = key_destructor; - } - - // Called from pthread_exit() to remove all TLS key data - // from this thread's TLS area. This must call the destructor of all keys - // that have a non-NULL data value and a non-NULL destructor. - void CleanAll() { - void** tls = __get_tls(); - - // Because destructors can do funky things like deleting/creating other - // keys, we need to implement this in a loop. - for (int rounds = PTHREAD_DESTRUCTOR_ITERATIONS; rounds > 0; --rounds) { - size_t called_destructor_count = 0; - for (int key = 0; key < BIONIC_TLS_SLOTS; ++key) { - if (IsInUse(key)) { - void* data = tls[key]; - void (*key_destructor)(void*) = s_tls_map_.key_destructors[key]; - - if (data != NULL && key_destructor != NULL) { - // we need to clear the key data now, this will prevent the - // destructor (or a later one) from seeing the old value if - // it calls pthread_getspecific() for some odd reason - - // we do not do this if 'key_destructor == NULL' just in case another - // destructor function might be responsible for manually - // releasing the corresponding data. - tls[key] = NULL; - - // because the destructor is free to call pthread_key_create - // and/or pthread_key_delete, we need to temporarily unlock - // the TLS map - Unlock(); - (*key_destructor)(data); - Lock(); - ++called_destructor_count; - } - } - } - - // If we didn't call any destructors, there is no need to check the TLS data again. - if (called_destructor_count == 0) { - break; - } - } - } - - private: - static tls_map_t s_tls_map_; - static pthread_mutex_t s_tls_map_lock_; - - void Lock() { - pthread_mutex_lock(&s_tls_map_lock_); - } - - void Unlock() { - pthread_mutex_unlock(&s_tls_map_lock_); - } -}; - -__LIBC_HIDDEN__ tls_map_t ScopedTlsMapAccess::s_tls_map_; -__LIBC_HIDDEN__ pthread_mutex_t ScopedTlsMapAccess::s_tls_map_lock_; +static inline bool KeyInValidRange(pthread_key_t key) { + return key >= 0 && key < BIONIC_PTHREAD_KEY_COUNT; +} +// Called from pthread_exit() to remove all pthread keys. This must call the destructor of +// all keys that have a non-NULL data value and a non-NULL destructor. __LIBC_HIDDEN__ void pthread_key_clean_all() { - ScopedTlsMapAccess tls_map; - tls_map.CleanAll(); + // Because destructors can do funky things like deleting/creating other keys, + // we need to implement this in a loop. + pthread_key_data_t* key_data = __get_thread()->key_data; + for (size_t rounds = PTHREAD_DESTRUCTOR_ITERATIONS; rounds > 0; --rounds) { + size_t called_destructor_count = 0; + for (size_t i = 0; i < BIONIC_PTHREAD_KEY_COUNT; ++i) { + uintptr_t seq = atomic_load_explicit(&key_map[i].seq, memory_order_relaxed); + if (SeqOfKeyInUse(seq) && seq == key_data[i].seq && key_data[i].data != NULL) { + // Other threads may be calling pthread_key_delete/pthread_key_create while current thread + // is exiting. So we need to ensure we read the right key_destructor. + // We can rely on a user-established happens-before relationship between the creation and + // use of pthread key to ensure that we're not getting an earlier key_destructor. + // To avoid using the key_destructor of the newly created key in the same slot, we need to + // recheck the sequence number after reading key_destructor. As a result, we either see the + // right key_destructor, or the sequence number must have changed when we reread it below. + key_destructor_t key_destructor = reinterpret_cast( + atomic_load_explicit(&key_map[i].key_destructor, memory_order_relaxed)); + if (key_destructor == NULL) { + continue; + } + atomic_thread_fence(memory_order_acquire); + if (atomic_load_explicit(&key_map[i].seq, memory_order_relaxed) != seq) { + continue; + } + + // We need to clear the key data now, this will prevent the destructor (or a later one) + // from seeing the old value if it calls pthread_getspecific(). + // We don't do this if 'key_destructor == NULL' just in case another destructor + // function is responsible for manually releasing the corresponding data. + void* data = key_data[i].data; + key_data[i].data = NULL; + + (*key_destructor)(data); + ++called_destructor_count; + } + } + + // If we didn't call any destructors, there is no need to check the pthread keys again. + if (called_destructor_count == 0) { + break; + } + } } int pthread_key_create(pthread_key_t* key, void (*key_destructor)(void*)) { - ScopedTlsMapAccess tls_map; - return tls_map.CreateKey(key, key_destructor); + for (size_t i = 0; i < BIONIC_PTHREAD_KEY_COUNT; ++i) { + uintptr_t seq = atomic_load_explicit(&key_map[i].seq, memory_order_relaxed); + while (!SeqOfKeyInUse(seq)) { + if (atomic_compare_exchange_weak(&key_map[i].seq, &seq, seq + SEQ_INCREMENT_STEP)) { + atomic_store(&key_map[i].key_destructor, reinterpret_cast(key_destructor)); + *key = i; + return 0; + } + } + } + return EAGAIN; } // Deletes a pthread_key_t. note that the standard mandates that this does @@ -204,42 +127,44 @@ int pthread_key_create(pthread_key_t* key, void (*key_destructor)(void*)) { // responsibility of the caller to properly dispose of the corresponding data // and resources, using any means it finds suitable. int pthread_key_delete(pthread_key_t key) { - ScopedTlsMapAccess tls_map; - - if (!IsValidUserKey(key) || !tls_map.IsInUse(key)) { + if (!KeyInValidRange(key)) { return EINVAL; } - - // Clear value in all threads. - pthread_mutex_lock(&g_thread_list_lock); - for (pthread_internal_t* t = g_thread_list; t != NULL; t = t->next) { - t->tls[key] = NULL; + // Increase seq to invalidate values in all threads. + uintptr_t seq = atomic_load_explicit(&key_map[key].seq, memory_order_relaxed); + if (SeqOfKeyInUse(seq)) { + if (atomic_compare_exchange_strong(&key_map[key].seq, &seq, seq + SEQ_INCREMENT_STEP)) { + return 0; + } } - tls_map.DeleteKey(key); - - pthread_mutex_unlock(&g_thread_list_lock); - return 0; + return EINVAL; } void* pthread_getspecific(pthread_key_t key) { - if (!IsValidUserKey(key)) { + if (!KeyInValidRange(key)) { return NULL; } - - // For performance reasons, we do not lock/unlock the global TLS map - // to check that the key is properly allocated. If the key was not - // allocated, the value read from the TLS should always be NULL - // due to pthread_key_delete() clearing the values for all threads. - return __get_tls()[key]; + uintptr_t seq = atomic_load_explicit(&key_map[key].seq, memory_order_relaxed); + pthread_key_data_t* data = &(__get_thread()->key_data[key]); + // It is user's responsibility to synchornize between the creation and use of pthread keys, + // so we use memory_order_relaxed when checking the sequence number. + if (__predict_true(SeqOfKeyInUse(seq) && data->seq == seq)) { + return data->data; + } + data->data = NULL; + return NULL; } int pthread_setspecific(pthread_key_t key, const void* ptr) { - ScopedTlsMapAccess tls_map; - - if (!IsValidUserKey(key) || !tls_map.IsInUse(key)) { + if (!KeyInValidRange(key)) { return EINVAL; } - - __get_tls()[key] = const_cast(ptr); - return 0; + uintptr_t seq = atomic_load_explicit(&key_map[key].seq, memory_order_relaxed); + if (SeqOfKeyInUse(seq)) { + pthread_key_data_t* data = &(__get_thread()->key_data[key]); + data->seq = seq; + data->data = const_cast(ptr); + return 0; + } + return EINVAL; } diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h index 944f95790..04f5fd256 100644 --- a/libc/private/bionic_tls.h +++ b/libc/private/bionic_tls.h @@ -67,15 +67,15 @@ enum { TLS_SLOT_STACK_GUARD = 5, // GCC requires this specific slot for x86. TLS_SLOT_DLERROR, - TLS_SLOT_FIRST_USER_SLOT // Must come last! + BIONIC_TLS_SLOTS // Must come last! }; /* - * There are two kinds of slot used internally by bionic --- there are the well-known slots - * enumerated above, and then there are those that are allocated during startup by calls to - * pthread_key_create; grep for GLOBAL_INIT_THREAD_LOCAL_BUFFER to find those. We need to manually - * maintain that second number, but pthread_test will fail if we forget. - * Following are current pthread keys used internally: + * Bionic uses some pthread keys internally. All pthread keys used internally + * should be created in constructors. + * We need to manually maintain the count of pthread keys used internally, but + * pthread_test should fail if we forget. + * Following are current pthread keys used internally by libc: * basename libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * dirname libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * uselocale libc @@ -88,28 +88,29 @@ enum { * passwd libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * group libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * _res_key libc + */ + +#define LIBC_PTHREAD_KEY_RESERVED_COUNT 12 + +#if defined(USE_JEMALLOC) +/* Following are current pthread keys used internally by jemalloc: * je_thread_allocated_tsd jemalloc * je_arenas_tsd jemalloc * je_tcache_tsd jemalloc * je_tcache_enabled_tsd jemalloc * je_quarantine_tsd jemalloc - * */ - -#define LIBC_TLS_RESERVED_SLOTS 12 - -#if defined(USE_JEMALLOC) -/* jemalloc uses 5 keys for itself. */ -#define BIONIC_TLS_RESERVED_SLOTS (LIBC_TLS_RESERVED_SLOTS + 5) +#define JEMALLOC_PTHREAD_KEY_RESERVED_COUNT 5 +#define BIONIC_PTHREAD_KEY_RESERVED_COUNT (LIBC_PTHREAD_KEY_RESERVED_COUNT + JEMALLOC_PTHREAD_KEY_RESERVED_COUNT) #else -#define BIONIC_TLS_RESERVED_SLOTS LIBC_TLS_RESERVED_SLOTS +#define BIONIC_PTHREAD_KEY_RESERVED_COUNT LIBC_PTHREAD_KEY_RESERVED_COUNT #endif /* - * Maximum number of elements in the TLS array. - * This includes space for pthread keys and our own internal slots. + * Maximum number of pthread keys allocated. + * This includes pthread keys used internally and externally. */ -#define BIONIC_TLS_SLOTS (PTHREAD_KEYS_MAX + TLS_SLOT_FIRST_USER_SLOT + BIONIC_TLS_RESERVED_SLOTS) +#define BIONIC_PTHREAD_KEY_COUNT (BIONIC_PTHREAD_KEY_RESERVED_COUNT + PTHREAD_KEYS_MAX) __END_DECLS From 32936c895d4407f7444c09ef4b0fd0ea532feb00 Mon Sep 17 00:00:00 2001 From: Amaury Le Leyzour Date: Tue, 17 Feb 2015 15:05:51 -0800 Subject: [PATCH 154/194] Add aarch64 instructions wherever possible fma, sqrt and various rounding functions have aarch64 instruction equivalent Change-Id: I1284f31b9f78f914281e5563b8d44db8362b627d --- libm/Android.mk | 109 ++++++++++++++++++++++++++++++++++++--------- libm/arm64/ceil.S | 27 +++++++++++ libm/arm64/floor.S | 27 +++++++++++ libm/arm64/fma.S | 27 +++++++++++ libm/arm64/lrint.S | 36 +++++++++++++++ libm/arm64/rint.S | 27 +++++++++++ libm/arm64/sqrt.S | 27 +++++++++++ libm/arm64/trunc.S | 27 +++++++++++ 8 files changed, 285 insertions(+), 22 deletions(-) create mode 100644 libm/arm64/ceil.S create mode 100644 libm/arm64/floor.S create mode 100644 libm/arm64/fma.S create mode 100644 libm/arm64/lrint.S create mode 100644 libm/arm64/rint.S create mode 100644 libm/arm64/sqrt.S create mode 100644 libm/arm64/trunc.S diff --git a/libm/Android.mk b/libm/Android.mk index ebc3c9fe9..3139bc252 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -69,8 +69,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/e_scalbf.c \ upstream-freebsd/lib/msun/src/e_sinh.c \ upstream-freebsd/lib/msun/src/e_sinhf.c \ - upstream-freebsd/lib/msun/src/e_sqrt.c \ - upstream-freebsd/lib/msun/src/e_sqrtf.c \ upstream-freebsd/lib/msun/src/imprecise.c \ upstream-freebsd/lib/msun/src/k_cos.c \ upstream-freebsd/lib/msun/src/k_cosf.c \ @@ -92,8 +90,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_cbrtf.c \ upstream-freebsd/lib/msun/src/s_ccosh.c \ upstream-freebsd/lib/msun/src/s_ccoshf.c \ - upstream-freebsd/lib/msun/src/s_ceil.c \ - upstream-freebsd/lib/msun/src/s_ceilf.c \ upstream-freebsd/lib/msun/src/s_cexp.c \ upstream-freebsd/lib/msun/src/s_cexpf.c \ upstream-freebsd/lib/msun/src/s_cimag.c \ @@ -130,9 +126,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_fdim.c \ upstream-freebsd/lib/msun/src/s_finite.c \ upstream-freebsd/lib/msun/src/s_finitef.c \ - upstream-freebsd/lib/msun/src/s_floorf.c \ - upstream-freebsd/lib/msun/src/s_fma.c \ - upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_fmax.c \ upstream-freebsd/lib/msun/src/s_fmaxf.c \ upstream-freebsd/lib/msun/src/s_fmin.c \ @@ -141,16 +134,12 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_frexpf.c \ upstream-freebsd/lib/msun/src/s_ilogb.c \ upstream-freebsd/lib/msun/src/s_ilogbf.c \ - upstream-freebsd/lib/msun/src/s_llrint.c \ - upstream-freebsd/lib/msun/src/s_llrintf.c \ upstream-freebsd/lib/msun/src/s_llround.c \ upstream-freebsd/lib/msun/src/s_llroundf.c \ upstream-freebsd/lib/msun/src/s_log1p.c \ upstream-freebsd/lib/msun/src/s_log1pf.c \ upstream-freebsd/lib/msun/src/s_logb.c \ upstream-freebsd/lib/msun/src/s_logbf.c \ - upstream-freebsd/lib/msun/src/s_lrint.c \ - upstream-freebsd/lib/msun/src/s_lrintf.c \ upstream-freebsd/lib/msun/src/s_lround.c \ upstream-freebsd/lib/msun/src/s_lroundf.c \ upstream-freebsd/lib/msun/src/s_modf.c \ @@ -161,8 +150,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_nextafterf.c \ upstream-freebsd/lib/msun/src/s_remquo.c \ upstream-freebsd/lib/msun/src/s_remquof.c \ - upstream-freebsd/lib/msun/src/s_rint.c \ - upstream-freebsd/lib/msun/src/s_rintf.c \ upstream-freebsd/lib/msun/src/s_round.c \ upstream-freebsd/lib/msun/src/s_roundf.c \ upstream-freebsd/lib/msun/src/s_scalbln.c \ @@ -178,8 +165,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_tanh.c \ upstream-freebsd/lib/msun/src/s_tanhf.c \ upstream-freebsd/lib/msun/src/s_tgammaf.c \ - upstream-freebsd/lib/msun/src/s_trunc.c \ - upstream-freebsd/lib/msun/src/s_truncf.c \ upstream-freebsd/lib/msun/src/w_cabs.c \ upstream-freebsd/lib/msun/src/w_cabsf.c \ upstream-freebsd/lib/msun/src/w_cabsl.c \ @@ -260,8 +245,28 @@ LOCAL_SRC_FILES += \ LOCAL_SRC_FILES += \ signbit.c \ +# Arch specific optimizations. + +# ----------------------------------------------------------------------------- +# arm +# ----------------------------------------------------------------------------- LOCAL_SRC_FILES_arm += \ arm/fenv.c \ + upstream-freebsd/lib/msun/src/e_sqrt.c \ + upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_fma.c \ + upstream-freebsd/lib/msun/src/s_fmaf.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_llrint.c \ + upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_lrint.c \ + upstream-freebsd/lib/msun/src/s_lrintf.c \ + upstream-freebsd/lib/msun/src/s_rint.c \ + upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_trunc.c \ + upstream-freebsd/lib/msun/src/s_truncf.c \ # s_floor.S requires neon instructions. ifdef TARGET_2ND_ARCH @@ -277,25 +282,87 @@ else LOCAL_SRC_FILES_arm += arm/s_floor.S endif +# ----------------------------------------------------------------------------- +# arm64 +# ----------------------------------------------------------------------------- LOCAL_SRC_FILES_arm64 += \ + arm64/ceil.S \ arm64/fenv.c \ - upstream-freebsd/lib/msun/src/s_floor.c \ + arm64/fma.S \ + arm64/floor.S \ + arm64/lrint.S \ + arm64/rint.S \ + arm64/sqrt.S \ + arm64/trunc.S \ -LOCAL_SRC_FILES_mips += \ +# ----------------------------------------------------------------------------- +# mips +# ----------------------------------------------------------------------------- +libm_mips_arch_files := \ mips/fenv.c \ + upstream-freebsd/lib/msun/src/e_sqrt.c \ + upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_fma.c \ + upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_floor.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_llrint.c \ + upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_lrint.c \ + upstream-freebsd/lib/msun/src/s_lrintf.c \ + upstream-freebsd/lib/msun/src/s_rint.c \ + upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_trunc.c \ + upstream-freebsd/lib/msun/src/s_truncf.c \ -LOCAL_SRC_FILES_mips64 += \ - mips/fenv.c \ - upstream-freebsd/lib/msun/src/s_floor.c \ +LOCAL_SRC_FILES_mips += $(libm_mips_arch_files) +LOCAL_SRC_FILES_mips64 += $(libm_mips_arch_files) +# ----------------------------------------------------------------------------- +# x86 +# ----------------------------------------------------------------------------- LOCAL_SRC_FILES_x86 += \ i387/fenv.c \ + upstream-freebsd/lib/msun/src/e_sqrt.c \ + upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_fma.c \ + upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_floor.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_llrint.c \ + upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_lrint.c \ + upstream-freebsd/lib/msun/src/s_lrintf.c \ + upstream-freebsd/lib/msun/src/s_rint.c \ + upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_trunc.c \ + upstream-freebsd/lib/msun/src/s_truncf.c \ +# ----------------------------------------------------------------------------- +# x86_64 +# ----------------------------------------------------------------------------- LOCAL_SRC_FILES_x86_64 += \ amd64/fenv.c \ + upstream-freebsd/lib/msun/src/e_sqrt.c \ + upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_fma.c \ + upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_floor.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_llrint.c \ + upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_lrint.c \ + upstream-freebsd/lib/msun/src/s_lrintf.c \ + upstream-freebsd/lib/msun/src/s_rint.c \ + upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_trunc.c \ + upstream-freebsd/lib/msun/src/s_truncf.c \ LOCAL_C_INCLUDES_x86 += $(LOCAL_PATH)/i387 @@ -303,7 +370,6 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/upstream-freebsd/lib/msun/src/ LOCAL_C_INCLUDES_64 += $(LOCAL_PATH)/upstream-freebsd/lib/msun/ld128/ LOCAL_CLANG := $(libm_clang) -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_ARM_MODE := arm LOCAL_CFLAGS := \ -DFLT_EVAL_METHOD=0 \ @@ -340,7 +406,6 @@ include $(CLEAR_VARS) LOCAL_MODULE := libm LOCAL_CLANG := $(libm_clang) -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_SYSTEM_SHARED_LIBRARIES := libc LOCAL_WHOLE_STATIC_LIBRARIES := libm diff --git a/libm/arm64/ceil.S b/libm/arm64/ceil.S new file mode 100644 index 000000000..006c9887a --- /dev/null +++ b/libm/arm64/ceil.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(ceil) + frintP d0, d0 + ret +END(ceil) + +ENTRY(ceilf) + frintP s0, s0 + ret +END(ceilf) diff --git a/libm/arm64/floor.S b/libm/arm64/floor.S new file mode 100644 index 000000000..2d792e555 --- /dev/null +++ b/libm/arm64/floor.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(floor) + frintM d0, d0 + ret +END(floor) + +ENTRY(floorf) + frintM s0, s0 + ret +END(floorf) diff --git a/libm/arm64/fma.S b/libm/arm64/fma.S new file mode 100644 index 000000000..e64e8077e --- /dev/null +++ b/libm/arm64/fma.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(fma) + fmadd d0, d0, d1, d2 + ret +END(fma) + +ENTRY(fmaf) + fmadd s0, s0, s1, s2 + ret +END(fmaf) diff --git a/libm/arm64/lrint.S b/libm/arm64/lrint.S new file mode 100644 index 000000000..69cc10c3e --- /dev/null +++ b/libm/arm64/lrint.S @@ -0,0 +1,36 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(lrint) + frintX d0, d0 + fcvtzs x0, d0 + ret +END(lrint) + +ENTRY(lrintf) + frintX s0, s0 + fcvtzs x0, s0 + ret +END(lrintf) + +// sizeof(long) and sizeof(long long) are the same for aarch64 +.weak llrint +.equ llrint,lrint + +.weak llrintf +.equ llrintf,lrintf diff --git a/libm/arm64/rint.S b/libm/arm64/rint.S new file mode 100644 index 000000000..0820c2211 --- /dev/null +++ b/libm/arm64/rint.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(rint) + frintX d0, d0 + ret +END(rint) + +ENTRY(rintf) + frintX s0, s0 + ret +END(rintf) diff --git a/libm/arm64/sqrt.S b/libm/arm64/sqrt.S new file mode 100644 index 000000000..fe0020bd6 --- /dev/null +++ b/libm/arm64/sqrt.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(sqrt) + fsqrt d0, d0 + ret +END(sqrt) + +ENTRY(sqrtf) + fsqrt s0, s0 + ret +END(sqrtf) diff --git a/libm/arm64/trunc.S b/libm/arm64/trunc.S new file mode 100644 index 000000000..329c08d12 --- /dev/null +++ b/libm/arm64/trunc.S @@ -0,0 +1,27 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +ENTRY(trunc) + frintZ d0, d0 + ret +END(trunc) + +ENTRY(truncf) + frintZ s0, s0 + ret +END(truncf) From 20f2268d61966230587957912491b67ad8bb91c8 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Tue, 3 Mar 2015 20:27:58 -0800 Subject: [PATCH 155/194] Add fortify compile test. Two parts of tests are added: 1. Compile time warnings for gcc checking built-in functions. 2. Compile time errors for each errordecl() in bionic. Bug: 19234260 Change-Id: Iec6e4a8070c36815574fe9e0af9595d6143a4757 --- tests/fortify_sprintf_warnings.cpp | 187 ++++++++++++++++++++++++++++- 1 file changed, 181 insertions(+), 6 deletions(-) diff --git a/tests/fortify_sprintf_warnings.cpp b/tests/fortify_sprintf_warnings.cpp index 3a2d3c4c1..141bc1d5e 100644 --- a/tests/fortify_sprintf_warnings.cpp +++ b/tests/fortify_sprintf_warnings.cpp @@ -16,7 +16,16 @@ #undef _FORTIFY_SOURCE #define _FORTIFY_SOURCE 2 +#include +#include +#include +#include #include +#include +#include +#include +#include +#include void test_sprintf() { char buf[4]; @@ -24,12 +33,12 @@ void test_sprintf() { // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___sprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - sprintf(buf, "foobar"); // NOLINT(runtime/printf) + sprintf(buf, "foobar"); // NOLINT(runtime/printf) // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___sprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - sprintf(buf, "%s", "foobar"); // NOLINT(runtime/printf) + sprintf(buf, "%s", "foobar"); // NOLINT(runtime/printf) } void test_snprintf() { @@ -38,20 +47,186 @@ void test_snprintf() { // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___snprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - snprintf(buf, 5, "foobar"); // NOLINT(runtime/printf) + snprintf(buf, 5, "foobar"); // NOLINT(runtime/printf) // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___snprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - snprintf(buf, 5, "%s", "foobar"); // NOLINT(runtime/printf) + snprintf(buf, 5, "%s", "foobar"); // NOLINT(runtime/printf) // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___snprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - snprintf(buf, 5, " %s ", "foobar"); // NOLINT(runtime/printf) + snprintf(buf, 5, " %s ", "foobar"); // NOLINT(runtime/printf) // NOLINTNEXTLINE(whitespace/line_length) // GCC: warning: call to int __builtin___snprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, ...) will always overflow destination buffer // clang should emit a warning, but doesn't - snprintf(buf, 5, "%d", 100000); // NOLINT(runtime/printf) + snprintf(buf, 5, "%d", 100000); // NOLINT(runtime/printf) +} + +void test_memcpy() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to void* __builtin___memcpy_chk(void*, const void*, {{(long )?}}unsigned int, {{(long )?}}unsigned int) will always overflow destination buffer + // clang should emit a warning, but doesn't + memcpy(buf, "foobar", sizeof("foobar")); +} + +void test_memmove() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to void* __builtin___memmove_chk(void*, const void*, {{(long )?}}unsigned int, {{(long )?}}unsigned int) will always overflow destination buffer + // clang should emit a warning, but doesn't + memmove(buf, "foobar", sizeof("foobar")); +} + +void test_memset() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to void* __builtin___memset_chk(void*, int, {{(long )?}}unsigned int, {{(long )?}}unsigned int) will always overflow destination buffer + // clang should emit a warning, but doesn't + memset(buf, 0, 6); +} + +void test_strcpy() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to {{(char\* __builtin___strcpy_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // clang should emit a warning, but doesn't + strcpy(buf, "foobar"); // NOLINT(runtime/printf) +} + +void test_stpcpy() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to char* __builtin___stpcpy_chk(char*, const char*, {{(long )?}}unsigned int) will always overflow destination buffer + // clang should emit a warning, but doesn't + stpcpy(buf, "foobar"); +} + +void test_strncpy() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to char* __builtin___strncpy_chk(char*, const char*, {{(long )?}}unsigned int, {{(long )?}}unsigned int) will always overflow destination buffer + // clang should emit a warning, but doesn't + strncpy(buf, "foobar", sizeof("foobar")); +} + +void test_strcat() { + char buf[4] = ""; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // clang should emit a warning, but doesn't + strcat(buf, "foobar"); // NOLINT(runtime/printf) +} + +void test_strncat() { + char buf[4] = ""; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // gcc output warning with __builtin___strcat_chk for __builtin___strncat_chk. + // clang should emit a warning, but doesn't + strncat(buf, "foobar", sizeof("foobar")); +} + +void test_vsprintf(const char* fmt, ...) { + va_list va; + char buf[4]; + va_start(va, fmt); + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, __va_list) will always overflow destination buffer + // clang should emit a warning, but doesn't + vsprintf(buf, "foobar", va); + va_end(va); +} + +void test_vsnprintf(const char* fmt, ...) { + va_list va; + char buf[4]; + va_start(va, fmt); + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, __va_list) will always overflow destination buffer + // clang should emit a warning, but doesn't + vsnprintf(buf, 5, "foobar", va); // NOLINT(runtime/printf) + + va_end(va); +} + +void test_fgets() { + char buf[4]; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__fgets_too_small_error' declared with attribute error: fgets called with size less than zero + // clang should emit a warning, but doesn't + fgets(buf, -1, stdin); + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__fgets_too_big_error' declared with attribute error: fgets called with size bigger than buffer + // clang should emit a warning, but doesn't + fgets(buf, 6, stdin); +} + +void test_recvfrom() { + char buf[4]; + sockaddr_in addr; + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__recvfrom_error' declared with attribute error: recvfrom called with size bigger than buffer + // clang should emit a warning, but doesn't + recvfrom(0, buf, 6, 0, reinterpret_cast(&addr), NULL); +} + +void test_umask() { + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__umask_invalid_mode' declared with attribute error: umask called with invalid mode + // clang should emit a warning, but doesn't + umask(01777); +} + +void test_read() { + char buf[4]; + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__read_dest_size_error' declared with attribute error: read called with size bigger than destination + // clang should emit a warning, but doesn't + read(0, buf, 6); +} + +void test_open() { + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__creat_missing_mode' declared with attribute error: called with O_CREAT, but missing mode + // clang should emit a warning, but doesn't + open("/dev/null", O_CREAT); + + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__creat_too_many_args' declared with attribute error: too many arguments + // clang should emit a warning, but doesn't + open("/dev/null", O_CREAT, 0, 0); +} + +void test_poll() { + pollfd fds[1]; + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__poll_too_small_error' declared with attribute error: poll: pollfd array smaller than fd count + // clang should emit a warning, but doesn't + poll(fds, 2, 0); +} + +void test_ppoll() { + pollfd fds[1]; + timespec timeout; + // NOLINTNEXTLINE(whitespace/line_length) + // GCC: error: call to '__ppoll_too_small_error' declared with attribute error: ppoll: pollfd array smaller than fd count + // clang should emit a warning, but doesn't + ppoll(fds, 2, &timeout, NULL); } From c78fa26d47987d7e29245199e66b9cb45020be10 Mon Sep 17 00:00:00 2001 From: Shu Zhang Date: Wed, 23 Jul 2014 17:21:55 +0800 Subject: [PATCH 156/194] libm: arm: add arm specific sqrt and sqrtf Add arm specific optimized sqrt and sqrtf. Change-Id: I8ea417fc98a800c8cf4f47a0c6668c51d927b1dc --- libm/Android.mk | 14 ++++++++++---- libm/arm/e_sqrt.S | 45 +++++++++++++++++++++++++++++++++++++++++++++ libm/arm/e_sqrtf.S | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 libm/arm/e_sqrt.S create mode 100644 libm/arm/e_sqrtf.S diff --git a/libm/Android.mk b/libm/Android.mk index 3139bc252..15c390cb0 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -252,8 +252,6 @@ LOCAL_SRC_FILES += \ # ----------------------------------------------------------------------------- LOCAL_SRC_FILES_arm += \ arm/fenv.c \ - upstream-freebsd/lib/msun/src/e_sqrt.c \ - upstream-freebsd/lib/msun/src/e_sqrtf.c \ upstream-freebsd/lib/msun/src/s_ceil.c \ upstream-freebsd/lib/msun/src/s_ceilf.c \ upstream-freebsd/lib/msun/src/s_fma.c \ @@ -277,9 +275,17 @@ endif # Use the C version on armv7-a since it doesn't support neon instructions. ifeq ($(arch_variant),armv7-a) -LOCAL_SRC_FILES_arm += upstream-freebsd/lib/msun/src/s_floor.c +LOCAL_SRC_FILES_arm += \ + upstream-freebsd/lib/msun/src/e_sqrt.c \ + upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ + else -LOCAL_SRC_FILES_arm += arm/s_floor.S +LOCAL_SRC_FILES_arm += \ + arm/e_sqrt.S \ + arm/e_sqrtf.S \ + arm/s_floor.S \ + endif # ----------------------------------------------------------------------------- diff --git a/libm/arm/e_sqrt.S b/libm/arm/e_sqrt.S new file mode 100644 index 000000000..669212f58 --- /dev/null +++ b/libm/arm/e_sqrt.S @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2013-2014, NVIDIA Corporation. All rights reserved. + * Johnny Qiu + * Shu Zhang + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +ENTRY(sqrt) + vmov.f64 d0, r0, r1 + vsqrt.f64 d0, d0 + vmov.f64 r0, r1, d0 + bx lr +END(sqrt) + +#if LDBL_MANT_DIG == 53 + .weak sqrtl + .equ sqrtl, sqrt +#endif diff --git a/libm/arm/e_sqrtf.S b/libm/arm/e_sqrtf.S new file mode 100644 index 000000000..ddefb226a --- /dev/null +++ b/libm/arm/e_sqrtf.S @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2013-2014, NVIDIA Corporation. All rights reserved. + * Johhnny Qiu + * Shu Zhang + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +ENTRY(sqrtf) + vmov.f32 s0, r0 + vsqrt.f32 s0, s0 + vmov.f32 r0, s0 + bx lr +END(sqrtf) From 4a2891d8c8f09a64ea9e1479518b0cc969bd5969 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 4 Mar 2015 16:53:23 -0800 Subject: [PATCH 157/194] Better control of pthread keys used in bionic. Change-Id: I1e1bc77c0e7879baead6c3417282ce549a1153b5 --- libc/bionic/locale.cpp | 6 ++---- libc/dns/resolv/res_state.c | 11 +++-------- libc/private/ThreadLocalBuffer.h | 10 ++++++---- libc/private/bionic_tls.h | 4 ++-- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp index 90aa7b8aa..e5a170ff7 100644 --- a/libc/bionic/locale.cpp +++ b/libc/bionic/locale.cpp @@ -36,6 +36,7 @@ #include #include "private/bionic_macros.h" +#include "private/ThreadLocalBuffer.h" // We currently support a single locale, the "C" locale (also known as "POSIX"). @@ -62,10 +63,7 @@ static pthread_once_t g_locale_once = PTHREAD_ONCE_INIT; static lconv g_locale; // We don't use pthread_once for this so that we know when the resource (a TLS slot) will be taken. -static pthread_key_t g_uselocale_key; -__attribute__((constructor)) static void __bionic_tls_uselocale_key_init() { - pthread_key_create(&g_uselocale_key, NULL); -} +BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR(g_uselocale_key, NULL); static void __locale_init() { g_locale.decimal_point = const_cast("."); diff --git a/libc/dns/resolv/res_state.c b/libc/dns/resolv/res_state.c index 7533d1957..459f07394 100644 --- a/libc/dns/resolv/res_state.c +++ b/libc/dns/resolv/res_state.c @@ -39,6 +39,8 @@ #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ #include +#include "private/ThreadLocalBuffer.h" + /* Set to 1 to enable debug traces */ #define DEBUG 0 @@ -50,8 +52,6 @@ # define D(...) do{}while(0) #endif -static pthread_key_t _res_key; - typedef struct { int _h_errno; // TODO: Have one __res_state per network so we don't have to repopulate frequently. @@ -105,12 +105,7 @@ _res_thread_free( void* _rt ) free(rt); } -__attribute__((constructor)) -static void -_res_init_key( void ) -{ - pthread_key_create( &_res_key, _res_thread_free ); -} +BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR(_res_key, _res_thread_free); static _res_thread* _res_thread_get(void) diff --git a/libc/private/ThreadLocalBuffer.h b/libc/private/ThreadLocalBuffer.h index e5bd28c37..cc4731703 100644 --- a/libc/private/ThreadLocalBuffer.h +++ b/libc/private/ThreadLocalBuffer.h @@ -38,15 +38,17 @@ // We used to use pthread_once to initialize the keys, but life is more predictable // if we allocate them all up front when the C library starts up, via __constructor__. +#define BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR(key_name, key_destructor) \ + static pthread_key_t key_name; \ + __attribute__((constructor)) static void __bionic_tls_ ## key_name ## _key_init() { \ + pthread_key_create(&key_name, key_destructor); \ + } #define GLOBAL_INIT_THREAD_LOCAL_BUFFER(name) \ - static pthread_key_t __bionic_tls_ ## name ## _key; \ static void __bionic_tls_ ## name ## _key_destroy(void* buffer) { \ free(buffer); \ } \ - __attribute__((constructor)) static void __bionic_tls_ ## name ## _key_init() { \ - pthread_key_create(&__bionic_tls_ ## name ## _key, __bionic_tls_ ## name ## _key_destroy); \ - } + BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR(__bionic_tls_ ## name ## _key, __bionic_tls_ ## name ## _key_destroy) // Leaves "name_tls_buffer" and "name_tls_buffer_size" defined and initialized. #define LOCAL_INIT_THREAD_LOCAL_BUFFER(type, name, byte_count) \ diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h index 04f5fd256..724f8965d 100644 --- a/libc/private/bionic_tls.h +++ b/libc/private/bionic_tls.h @@ -78,7 +78,7 @@ enum { * Following are current pthread keys used internally by libc: * basename libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * dirname libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) - * uselocale libc + * uselocale libc (BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR) * getmntent_mntent libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * getmntent_strings libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * ptsname libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) @@ -87,7 +87,7 @@ enum { * strsignal libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * passwd libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * group libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) - * _res_key libc + * _res_key libc (BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR) */ #define LIBC_PTHREAD_KEY_RESERVED_COUNT 12 From 08ee8d2030fbc73c4c144e819dd68806b0351cbe Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 11 Feb 2015 17:04:36 -0800 Subject: [PATCH 158/194] Switch pthread_rwlock_t to stdatomic. Bug: 19099838 Change-Id: Ie82967a60b5cec61a8bdd1e0e4a03738d01944f8 --- libc/bionic/pthread_rwlock.cpp | 234 +++++++++++++++++++++------------ libc/include/pthread.h | 8 +- tests/pthread_test.cpp | 75 +++++++++++ 3 files changed, 227 insertions(+), 90 deletions(-) diff --git a/libc/bionic/pthread_rwlock.cpp b/libc/bionic/pthread_rwlock.cpp index 0d63457d2..83243ab46 100644 --- a/libc/bionic/pthread_rwlock.cpp +++ b/libc/bionic/pthread_rwlock.cpp @@ -27,6 +27,7 @@ */ #include +#include #include "pthread_internal.h" #include "private/bionic_futex.h" @@ -52,11 +53,6 @@ * - This implementation will return EDEADLK in "write after write" and "read after * write" cases and will deadlock in write after read case. * - * TODO: VERY CAREFULLY convert this to use C++11 atomics when possible. All volatile - * members of pthread_rwlock_t should be converted to atomics<> and __sync_bool_compare_and_swap - * should be changed to compare_exchange_strong accompanied by the proper ordering - * constraints (comments have been added with the intending ordering across the code). - * * TODO: As it stands now, pending_readers and pending_writers could be merged into a * a single waiters variable. Keeping them separate adds a bit of clarity and keeps * the door open for a writer-biased implementation. @@ -105,8 +101,40 @@ int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t* attr, int* pshared return 0; } +static inline atomic_int* STATE_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { + static_assert(sizeof(atomic_int) == sizeof(rwlock->state), + "rwlock->state should actually be atomic_int in implementation."); + + // We prefer casting to atomic_int instead of declaring rwlock->state to be atomic_int directly. + // Because using the second method pollutes pthread.h, and causes an error when compiling libcxx. + return reinterpret_cast(&rwlock->state); +} + +static inline atomic_int* WRITER_THREAD_ID_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { + static_assert(sizeof(atomic_int) == sizeof(rwlock->writer_thread_id), + "rwlock->writer_thread_id should actually be atomic_int in implementation."); + + return reinterpret_cast(&rwlock->writer_thread_id); +} + +static inline atomic_uint* PENDING_READERS_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { + static_assert(sizeof(atomic_uint) == sizeof(rwlock->pending_readers), + "rwlock->pending_readers should actually be atomic_uint in implementation."); + + return reinterpret_cast(&rwlock->pending_readers); +} + +static inline atomic_uint* PENDING_WRITERS_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { + static_assert(sizeof(atomic_uint) == sizeof(rwlock->pending_writers), + "rwlock->pending_writers should actually be atomic_uint in implementation."); + + return reinterpret_cast(&rwlock->pending_writers); +} + int pthread_rwlock_init(pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* attr) { - if (attr != NULL) { + if (__predict_true(attr == NULL)) { + rwlock->attr = 0; + } else { switch (*attr) { case PTHREAD_PROCESS_SHARED: case PTHREAD_PROCESS_PRIVATE: @@ -117,10 +145,10 @@ int pthread_rwlock_init(pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* at } } - rwlock->state = 0; - rwlock->pending_readers = 0; - rwlock->pending_writers = 0; - rwlock->writer_thread_id = 0; + atomic_init(STATE_ATOMIC_POINTER(rwlock), 0); + atomic_init(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), 0); + atomic_init(PENDING_READERS_ATOMIC_POINTER(rwlock), 0); + atomic_init(PENDING_WRITERS_ATOMIC_POINTER(rwlock), 0); return 0; } @@ -133,72 +161,87 @@ int pthread_rwlock_destroy(pthread_rwlock_t* rwlock) { } static int __pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { - if (__predict_false(__get_thread()->tid == rwlock->writer_thread_id)) { + if (__predict_false(__get_thread()->tid == + atomic_load_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), memory_order_relaxed))) { return EDEADLK; } timespec ts; timespec* rel_timeout = (abs_timeout == NULL) ? NULL : &ts; - bool done = false; - do { - // This is actually a race read as there's nothing that guarantees the atomicity of integer - // reads / writes. However, in practice this "never" happens so until we switch to C++11 this - // should work fine. The same applies in the other places this idiom is used. - int32_t cur_state = rwlock->state; // C++11 relaxed atomic read + + atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); + + while (true) { + int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); if (__predict_true(cur_state >= 0)) { - // Add as an extra reader. - done = __sync_bool_compare_and_swap(&rwlock->state, cur_state, cur_state + 1); // C++11 memory_order_aquire + if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state + 1, + memory_order_acquire, memory_order_relaxed)) { + return 0; + } } else { if (!timespec_from_absolute(rel_timeout, abs_timeout)) { return ETIMEDOUT; } - // Owner holds it in write mode, hang up. - // To avoid losing wake ups the pending_readers update and the state read should be - // sequentially consistent. (currently enforced by __sync_fetch_and_add which creates a full barrier) - __sync_fetch_and_add(&rwlock->pending_readers, 1); // C++11 memory_order_relaxed (if the futex_wait ensures the ordering) - int ret = __futex_wait_ex(&rwlock->state, rwlock_is_shared(rwlock), cur_state, rel_timeout); - __sync_fetch_and_sub(&rwlock->pending_readers, 1); // C++11 memory_order_relaxed + atomic_uint* pending_readers_ptr = PENDING_READERS_ATOMIC_POINTER(rwlock); + + // To avoid losing wake ups, the pending_readers increment should be observed before + // futex_wait by all threads. A seq_cst fence instead of a seq_cst operation is used + // here. Because only a seq_cst fence can ensure sequential consistency for non-atomic + // operations in futex_wait. + atomic_fetch_add_explicit(pending_readers_ptr, 1, memory_order_relaxed); + atomic_thread_fence(memory_order_seq_cst); + int ret = __futex_wait_ex(state_ptr, rwlock_is_shared(rwlock), cur_state, rel_timeout); + atomic_fetch_sub_explicit(pending_readers_ptr, 1, memory_order_relaxed); if (ret == -ETIMEDOUT) { return ETIMEDOUT; } } - } while (!done); - - return 0; + } } static int __pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { - int tid = __get_thread()->tid; - if (__predict_false(tid == rwlock->writer_thread_id)) { + if (__predict_false(__get_thread()->tid == + atomic_load_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), memory_order_relaxed))) { return EDEADLK; } timespec ts; timespec* rel_timeout = (abs_timeout == NULL) ? NULL : &ts; - bool done = false; - do { - int32_t cur_state = rwlock->state; + + atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); + + while (true) { + int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); if (__predict_true(cur_state == 0)) { - // Change state from 0 to -1. - done = __sync_bool_compare_and_swap(&rwlock->state, 0 /* cur state */, -1 /* new state */); // C++11 memory_order_aquire + if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, -1, + memory_order_acquire, memory_order_relaxed)) { + // writer_thread_id is protected by rwlock and can only be modified in rwlock write + // owner thread. Other threads may read it for EDEADLK error checking, atomic operation + // is safe enough for it. + atomic_store_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), __get_thread()->tid, + memory_order_relaxed); + return 0; + } } else { if (!timespec_from_absolute(rel_timeout, abs_timeout)) { return ETIMEDOUT; } - // Failed to acquire, hang up. - // To avoid losing wake ups the pending_writers update and the state read should be - // sequentially consistent. (currently enforced by __sync_fetch_and_add which creates a full barrier) - __sync_fetch_and_add(&rwlock->pending_writers, 1); // C++11 memory_order_relaxed (if the futex_wait ensures the ordering) - int ret = __futex_wait_ex(&rwlock->state, rwlock_is_shared(rwlock), cur_state, rel_timeout); - __sync_fetch_and_sub(&rwlock->pending_writers, 1); // C++11 memory_order_relaxed + + atomic_uint* pending_writers_ptr = PENDING_WRITERS_ATOMIC_POINTER(rwlock); + + // To avoid losing wake ups, the pending_writers increment should be observed before + // futex_wait by all threads. A seq_cst fence instead of a seq_cst operation is used + // here. Because only a seq_cst fence can ensure sequential consistency for non-atomic + // operations in futex_wait. + atomic_fetch_add_explicit(pending_writers_ptr, 1, memory_order_relaxed); + atomic_thread_fence(memory_order_seq_cst); + int ret = __futex_wait_ex(state_ptr, rwlock_is_shared(rwlock), cur_state, rel_timeout); + atomic_fetch_sub_explicit(pending_writers_ptr, 1, memory_order_relaxed); if (ret == -ETIMEDOUT) { return ETIMEDOUT; } } - } while (!done); - - rwlock->writer_thread_id = tid; - return 0; + } } int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock) { @@ -210,10 +253,14 @@ int pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock, const timespec* abs_tim } int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock) { - int32_t cur_state = rwlock->state; - if ((cur_state >= 0) && - __sync_bool_compare_and_swap(&rwlock->state, cur_state, cur_state + 1)) { // C++11 memory_order_acquire - return 0; + atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); + int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); + + while (cur_state >= 0) { + if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state + 1, + memory_order_acquire, memory_order_relaxed)) { + return 0; + } } return EBUSY; } @@ -227,12 +274,16 @@ int pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock, const timespec* abs_tim } int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock) { - int tid = __get_thread()->tid; - int32_t cur_state = rwlock->state; - if ((cur_state == 0) && - __sync_bool_compare_and_swap(&rwlock->state, 0 /* cur state */, -1 /* new state */)) { // C++11 memory_order_acquire - rwlock->writer_thread_id = tid; - return 0; + atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); + int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); + + while (cur_state == 0) { + if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, -1, + memory_order_acquire, memory_order_relaxed)) { + int tid = __get_thread()->tid; + atomic_store_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), tid, memory_order_relaxed); + return 0; + } } return EBUSY; } @@ -240,42 +291,53 @@ int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock) { int pthread_rwlock_unlock(pthread_rwlock_t* rwlock) { int tid = __get_thread()->tid; - bool done = false; - do { - int32_t cur_state = rwlock->state; - if (cur_state == 0) { + atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); + atomic_uint* pending_readers_ptr = PENDING_READERS_ATOMIC_POINTER(rwlock); + atomic_uint* pending_writers_ptr = PENDING_WRITERS_ATOMIC_POINTER(rwlock); + + int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); + if (__predict_false(cur_state == 0)) { + return EPERM; + } else if (cur_state == -1) { + atomic_int* writer_thread_id_ptr = WRITER_THREAD_ID_ATOMIC_POINTER(rwlock); + if (atomic_load_explicit(writer_thread_id_ptr, memory_order_relaxed) != tid) { return EPERM; } - if (cur_state == -1) { - if (rwlock->writer_thread_id != tid) { + // We're no longer the owner. + atomic_store_explicit(writer_thread_id_ptr, 0, memory_order_relaxed); + // Change state from -1 to 0. + atomic_store_explicit(state_ptr, 0, memory_order_release); + goto wakeup_waiters; + + } else { // cur_state > 0 + // Reduce state by 1. + while (!atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state - 1, + memory_order_release, memory_order_relaxed)) { + if (cur_state <= 0) { return EPERM; } - // We're no longer the owner. - rwlock->writer_thread_id = 0; - // Change state from -1 to 0. - // We use __sync_bool_compare_and_swap to achieve sequential consistency of the state store and - // the following pendingX loads. A simple store with memory_order_release semantics - // is not enough to guarantee that the pendingX loads are not reordered before the - // store (which may lead to a lost wakeup). - __sync_bool_compare_and_swap( &rwlock->state, -1 /* cur state*/, 0 /* new state */); // C++11 maybe memory_order_seq_cst? - - // Wake any waiters. - if (__predict_false(rwlock->pending_readers > 0 || rwlock->pending_writers > 0)) { - __futex_wake_ex(&rwlock->state, rwlock_is_shared(rwlock), INT_MAX); - } - done = true; - } else { // cur_state > 0 - // Reduce state by 1. - // See the comment above on why we need __sync_bool_compare_and_swap. - done = __sync_bool_compare_and_swap(&rwlock->state, cur_state, cur_state - 1); // C++11 maybe memory_order_seq_cst? - if (done && (cur_state - 1) == 0) { - // There are no more readers, wake any waiters. - if (__predict_false(rwlock->pending_readers > 0 || rwlock->pending_writers > 0)) { - __futex_wake_ex(&rwlock->state, rwlock_is_shared(rwlock), INT_MAX); - } - } } - } while (!done); + if (cur_state == 1) { + goto wakeup_waiters; + } + } + return 0; +wakeup_waiters: + // To avoid losing wake ups, the update of state should be observed before reading + // pending_readers/pending_writers by all threads. Use read locking as an example: + // read locking thread unlocking thread + // pending_readers++; state = 0; + // seq_cst fence seq_cst fence + // read state for futex_wait read pending_readers for futex_wake + // + // So when locking and unlocking threads are running in parallel, we will not get + // in a situation that the locking thread reads state as negative and needs to wait, + // while the unlocking thread reads pending_readers as zero and doesn't need to wake up waiters. + atomic_thread_fence(memory_order_seq_cst); + if (__predict_false(atomic_load_explicit(pending_readers_ptr, memory_order_relaxed) > 0 || + atomic_load_explicit(pending_writers_ptr, memory_order_relaxed) > 0)) { + __futex_wake_ex(state_ptr, rwlock_is_shared(rwlock), INT_MAX); + } return 0; } diff --git a/libc/include/pthread.h b/libc/include/pthread.h index 212551b81..1fe61e29c 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -91,10 +91,10 @@ typedef struct { pthread_mutex_t __unused_lock; pthread_cond_t __unused_cond; #endif - volatile int32_t state; // 0=unlock, -1=writer lock, +n=reader lock - volatile int32_t writer_thread_id; - volatile int32_t pending_readers; - volatile int32_t pending_writers; + int32_t state; // 0=unlock, -1=writer lock, +n=reader lock + int32_t writer_thread_id; + uint32_t pending_readers; + uint32_t pending_writers; int32_t attr; #ifdef __LP64__ char __reserved[36]; diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index 5dc60eeee..c507faab9 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -33,6 +33,8 @@ #include #include +#include + TEST(pthread, pthread_key_create) { pthread_key_t key; ASSERT_EQ(0, pthread_key_create(&key, NULL)); @@ -699,6 +701,79 @@ TEST(pthread, pthread_rwlock_smoke) { ASSERT_EQ(0, pthread_rwlock_destroy(&l)); } +struct RwlockWakeupHelperArg { + pthread_rwlock_t lock; + enum Progress { + LOCK_INITIALIZED, + LOCK_WAITING, + LOCK_RELEASED, + LOCK_ACCESSED + }; + std::atomic progress; +}; + +static void pthread_rwlock_reader_wakeup_writer_helper(RwlockWakeupHelperArg* arg) { + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_INITIALIZED, arg->progress); + arg->progress = RwlockWakeupHelperArg::LOCK_WAITING; + + ASSERT_EQ(EBUSY, pthread_rwlock_trywrlock(&arg->lock)); + ASSERT_EQ(0, pthread_rwlock_wrlock(&arg->lock)); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_RELEASED, arg->progress); + ASSERT_EQ(0, pthread_rwlock_unlock(&arg->lock)); + + arg->progress = RwlockWakeupHelperArg::LOCK_ACCESSED; +} + +TEST(pthread, pthread_rwlock_reader_wakeup_writer) { + RwlockWakeupHelperArg wakeup_arg; + ASSERT_EQ(0, pthread_rwlock_init(&wakeup_arg.lock, NULL)); + ASSERT_EQ(0, pthread_rwlock_rdlock(&wakeup_arg.lock)); + wakeup_arg.progress = RwlockWakeupHelperArg::LOCK_INITIALIZED; + + pthread_t thread; + ASSERT_EQ(0, pthread_create(&thread, NULL, + reinterpret_cast(pthread_rwlock_reader_wakeup_writer_helper), &wakeup_arg)); + sleep(1); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_WAITING, wakeup_arg.progress); + wakeup_arg.progress = RwlockWakeupHelperArg::LOCK_RELEASED; + ASSERT_EQ(0, pthread_rwlock_unlock(&wakeup_arg.lock)); + + ASSERT_EQ(0, pthread_join(thread, NULL)); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_ACCESSED, wakeup_arg.progress); + ASSERT_EQ(0, pthread_rwlock_destroy(&wakeup_arg.lock)); +} + +static void pthread_rwlock_writer_wakeup_reader_helper(RwlockWakeupHelperArg* arg) { + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_INITIALIZED, arg->progress); + arg->progress = RwlockWakeupHelperArg::LOCK_WAITING; + + ASSERT_EQ(EBUSY, pthread_rwlock_tryrdlock(&arg->lock)); + ASSERT_EQ(0, pthread_rwlock_rdlock(&arg->lock)); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_RELEASED, arg->progress); + ASSERT_EQ(0, pthread_rwlock_unlock(&arg->lock)); + + arg->progress = RwlockWakeupHelperArg::LOCK_ACCESSED; +} + +TEST(pthread, pthread_rwlock_writer_wakeup_reader) { + RwlockWakeupHelperArg wakeup_arg; + ASSERT_EQ(0, pthread_rwlock_init(&wakeup_arg.lock, NULL)); + ASSERT_EQ(0, pthread_rwlock_wrlock(&wakeup_arg.lock)); + wakeup_arg.progress = RwlockWakeupHelperArg::LOCK_INITIALIZED; + + pthread_t thread; + ASSERT_EQ(0, pthread_create(&thread, NULL, + reinterpret_cast(pthread_rwlock_writer_wakeup_reader_helper), &wakeup_arg)); + sleep(1); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_WAITING, wakeup_arg.progress); + wakeup_arg.progress = RwlockWakeupHelperArg::LOCK_RELEASED; + ASSERT_EQ(0, pthread_rwlock_unlock(&wakeup_arg.lock)); + + ASSERT_EQ(0, pthread_join(thread, NULL)); + ASSERT_EQ(RwlockWakeupHelperArg::LOCK_ACCESSED, wakeup_arg.progress); + ASSERT_EQ(0, pthread_rwlock_destroy(&wakeup_arg.lock)); +} + static int g_once_fn_call_count = 0; static void OnceFn() { ++g_once_fn_call_count; From f3bd305b8f8270f157ee79851fc630abd94d3245 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 4 Mar 2015 21:43:14 -0800 Subject: [PATCH 159/194] Fix fortify compilation test on mips. Change-Id: Icff5b859ae58067bfa34430d3f5684335fe063b4 --- tests/fortify_sprintf_warnings.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/fortify_sprintf_warnings.cpp b/tests/fortify_sprintf_warnings.cpp index 141bc1d5e..0ea8fcdd8 100644 --- a/tests/fortify_sprintf_warnings.cpp +++ b/tests/fortify_sprintf_warnings.cpp @@ -96,7 +96,7 @@ void test_strcpy() { char buf[4]; // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to {{(char\* __builtin___strcpy_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // GCC: warning: call to {{(char\* __builtin___strcpy_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, (long )?unsigned int, (long )?unsigned int\))}} will always overflow destination buffer // clang should emit a warning, but doesn't strcpy(buf, "foobar"); // NOLINT(runtime/printf) } @@ -123,7 +123,7 @@ void test_strcat() { char buf[4] = ""; // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, (long )?unsigned int, (long )?unsigned int\))}} will always overflow destination buffer // clang should emit a warning, but doesn't strcat(buf, "foobar"); // NOLINT(runtime/printf) } @@ -132,7 +132,7 @@ void test_strncat() { char buf[4] = ""; // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, long unsigned int, long unsigned int\))}} will always overflow destination buffer + // GCC: warning: call to {{(char\* __builtin___strcat_chk\(char\*, const char\*, unsigned int\))|(void\* __builtin___memcpy_chk\(void\*, const void\*, (long )?unsigned int, (long )?unsigned int\))}} will always overflow destination buffer // gcc output warning with __builtin___strcat_chk for __builtin___strncat_chk. // clang should emit a warning, but doesn't strncat(buf, "foobar", sizeof("foobar")); @@ -144,7 +144,7 @@ void test_vsprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, __va_list) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsprintf(buf, "foobar", va); va_end(va); @@ -156,7 +156,7 @@ void test_vsnprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, __va_list) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsnprintf(buf, 5, "foobar", va); // NOLINT(runtime/printf) From 94545eba371be428c11d587a3b7d9883f37c7b19 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 4 Mar 2015 22:35:13 -0800 Subject: [PATCH 160/194] Fix fortify compilation test on x86. Change-Id: I9b88cbcec51b6f1dbac2780a9bf82851bd6cc87c --- tests/fortify_sprintf_warnings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/fortify_sprintf_warnings.cpp b/tests/fortify_sprintf_warnings.cpp index 0ea8fcdd8..341f48b02 100644 --- a/tests/fortify_sprintf_warnings.cpp +++ b/tests/fortify_sprintf_warnings.cpp @@ -144,7 +144,7 @@ void test_vsprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)}}) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsprintf(buf, "foobar", va); va_end(va); @@ -156,7 +156,7 @@ void test_vsnprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)}}) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsnprintf(buf, 5, "foobar", va); // NOLINT(runtime/printf) From d9647594dee6fc0352845904f2249b7f1c4e2364 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 5 Mar 2015 00:39:09 -0800 Subject: [PATCH 161/194] Fix fortify compilation test in x86_64. Change-Id: Ic243f6583e4f435899d01c7845dddacacbfc916e --- tests/fortify_sprintf_warnings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/fortify_sprintf_warnings.cpp b/tests/fortify_sprintf_warnings.cpp index 341f48b02..537b341b9 100644 --- a/tests/fortify_sprintf_warnings.cpp +++ b/tests/fortify_sprintf_warnings.cpp @@ -144,7 +144,7 @@ void test_vsprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)}}) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsprintf_chk(char*, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)|(__va_list_tag\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsprintf(buf, "foobar", va); va_end(va); @@ -156,7 +156,7 @@ void test_vsnprintf(const char* fmt, ...) { va_start(va, fmt); // NOLINTNEXTLINE(whitespace/line_length) - // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)}}) will always overflow destination buffer + // GCC: warning: call to int __builtin___vsnprintf_chk(char*, {{(long )?}}unsigned int, int, {{(long )?}}unsigned int, const char*, {{(__va_list)|(void\*)|(char\*)|(__va_list_tag\*)}}) will always overflow destination buffer // clang should emit a warning, but doesn't vsnprintf(buf, 5, "foobar", va); // NOLINT(runtime/printf) From 24e8871faa34e9c49c629ae63970422ff75ee4a2 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 4 Mar 2015 15:31:55 -0800 Subject: [PATCH 162/194] Rename fortify_sprintf_warnings.cpp to fortify_compilation_test.cpp. Bug: 19234260 Change-Id: Ife27ca13eeae317739eda25b40dd2a08606d6d6f --- tests/Android.mk | 2 +- ...ortify_sprintf_warnings.cpp => fortify_compilation_test.cpp} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/{fortify_sprintf_warnings.cpp => fortify_compilation_test.cpp} (100%) diff --git a/tests/Android.mk b/tests/Android.mk index b3eea0620..0a83e8478 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -388,7 +388,7 @@ LOCAL_CXX = $(LOCAL_PATH)/file-check-cxx \ LOCAL_CLANG := false LOCAL_MODULE := bionic-compile-time-tests-g++ LOCAL_CPPFLAGS := -Wall -LOCAL_SRC_FILES := fortify_sprintf_warnings.cpp +LOCAL_SRC_FILES := fortify_compilation_test.cpp include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) diff --git a/tests/fortify_sprintf_warnings.cpp b/tests/fortify_compilation_test.cpp similarity index 100% rename from tests/fortify_sprintf_warnings.cpp rename to tests/fortify_compilation_test.cpp From f7e3b3e48ab3ffbf7bbce5102ce1739c200093cb Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 5 Mar 2015 20:08:21 -0800 Subject: [PATCH 163/194] Use pthread_once for g_uselocale_key creation. Bug: 19625804 Change-Id: I57ec4c965067dc0c157c795c1f7217a3ca403286 --- libc/bionic/locale.cpp | 31 ++++++++++++++++++------------- libc/private/bionic_tls.h | 4 ++-- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp index e5a170ff7..b42b440c6 100644 --- a/libc/bionic/locale.cpp +++ b/libc/bionic/locale.cpp @@ -36,7 +36,6 @@ #include #include "private/bionic_macros.h" -#include "private/ThreadLocalBuffer.h" // We currently support a single locale, the "C" locale (also known as "POSIX"). @@ -59,12 +58,18 @@ struct __locale_t { DISALLOW_COPY_AND_ASSIGN(__locale_t); }; +size_t __ctype_get_mb_cur_max() { + locale_t l = uselocale(NULL); + if (l == LC_GLOBAL_LOCALE) { + return __bionic_current_locale_is_utf8 ? 4 : 1; + } else { + return l->mb_cur_max; + } +} + static pthread_once_t g_locale_once = PTHREAD_ONCE_INIT; static lconv g_locale; -// We don't use pthread_once for this so that we know when the resource (a TLS slot) will be taken. -BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR(g_uselocale_key, NULL); - static void __locale_init() { g_locale.decimal_point = const_cast("."); @@ -95,15 +100,6 @@ static void __locale_init() { g_locale.int_n_sign_posn = CHAR_MAX; } -size_t __ctype_get_mb_cur_max() { - locale_t l = reinterpret_cast(pthread_getspecific(g_uselocale_key)); - if (l == nullptr || l == LC_GLOBAL_LOCALE) { - return __bionic_current_locale_is_utf8 ? 4 : 1; - } else { - return l->mb_cur_max; - } -} - static bool __is_supported_locale(const char* locale) { return (strcmp(locale, "") == 0 || strcmp(locale, "C") == 0 || @@ -160,7 +156,16 @@ char* setlocale(int category, const char* locale_name) { return const_cast(__bionic_current_locale_is_utf8 ? "C.UTF-8" : "C"); } +// We can't use a constructor to create g_uselocal_key, because it may be used in constructors. +static pthread_once_t g_uselocale_once = PTHREAD_ONCE_INIT; +static pthread_key_t g_uselocale_key; + +static void g_uselocale_key_init() { + pthread_key_create(&g_uselocale_key, NULL); +} + locale_t uselocale(locale_t new_locale) { + pthread_once(&g_uselocale_once, g_uselocale_key_init); locale_t old_locale = static_cast(pthread_getspecific(g_uselocale_key)); // If this is the first call to uselocale(3) on this thread, we return LC_GLOBAL_LOCALE. diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h index 724f8965d..1ab8d4a26 100644 --- a/libc/private/bionic_tls.h +++ b/libc/private/bionic_tls.h @@ -72,13 +72,13 @@ enum { /* * Bionic uses some pthread keys internally. All pthread keys used internally - * should be created in constructors. + * should be created in constructors, except for keys that may be used in or before constructors. * We need to manually maintain the count of pthread keys used internally, but * pthread_test should fail if we forget. * Following are current pthread keys used internally by libc: * basename libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * dirname libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) - * uselocale libc (BIONIC_PTHREAD_KEY_WITH_CONSTRUCTOR) + * uselocale libc (can be used in constructors) * getmntent_mntent libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * getmntent_strings libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) * ptsname libc (GLOBAL_INIT_THREAD_LOCAL_BUFFER) From 87a0617ebe7561bf28d3a19fbe192372598969b8 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 6 Feb 2015 10:56:28 -0800 Subject: [PATCH 164/194] Import relocation packer from chromium repo Bug: 18051137 Change-Id: Ia67fa11da8247e3f86f70a8ce99e6695f2c05423 --- tools/relocation_packer/BUILD.gn | 148 ++ tools/relocation_packer/LICENSE | 27 + tools/relocation_packer/README.TXT | 135 ++ tools/relocation_packer/config.gni | 21 + tools/relocation_packer/relocation_packer.gyp | 161 +++ tools/relocation_packer/src/debug.cc | 55 + tools/relocation_packer/src/debug.h | 115 ++ tools/relocation_packer/src/debug_unittest.cc | 122 ++ tools/relocation_packer/src/delta_encoder.cc | 72 + tools/relocation_packer/src/delta_encoder.h | 80 + .../src/delta_encoder_unittest.cc | 150 ++ tools/relocation_packer/src/elf_file.cc | 1283 +++++++++++++++++ tools/relocation_packer/src/elf_file.h | 134 ++ .../src/elf_file_unittest.cc | 164 +++ tools/relocation_packer/src/elf_traits.h | 105 ++ tools/relocation_packer/src/leb128.cc | 69 + tools/relocation_packer/src/leb128.h | 74 + .../relocation_packer/src/leb128_unittest.cc | 111 ++ tools/relocation_packer/src/main.cc | 175 +++ tools/relocation_packer/src/packer.cc | 124 ++ tools/relocation_packer/src/packer.h | 78 + .../relocation_packer/src/packer_unittest.cc | 250 ++++ .../src/run_all_unittests.cc | 10 + .../src/run_length_encoder.cc | 144 ++ .../src/run_length_encoder.h | 81 ++ .../src/run_length_encoder_unittest.cc | 124 ++ tools/relocation_packer/src/sleb128.cc | 95 ++ tools/relocation_packer/src/sleb128.h | 75 + .../relocation_packer/src/sleb128_unittest.cc | 166 +++ .../test_data/elf_file_unittest_relocs.cc | 1014 +++++++++++++ .../elf_file_unittest_relocs_arm32.so | Bin 0 -> 93210 bytes .../elf_file_unittest_relocs_arm32_packed.so | Bin 0 -> 89126 bytes .../elf_file_unittest_relocs_arm64.so | Bin 0 -> 134131 bytes .../elf_file_unittest_relocs_arm64_packed.so | Bin 0 -> 123855 bytes .../generate_elf_file_unittest_relocs.py | 88 ++ .../generate_elf_file_unittest_relocs.sh | 35 + 36 files changed, 5485 insertions(+) create mode 100644 tools/relocation_packer/BUILD.gn create mode 100644 tools/relocation_packer/LICENSE create mode 100644 tools/relocation_packer/README.TXT create mode 100644 tools/relocation_packer/config.gni create mode 100644 tools/relocation_packer/relocation_packer.gyp create mode 100644 tools/relocation_packer/src/debug.cc create mode 100644 tools/relocation_packer/src/debug.h create mode 100644 tools/relocation_packer/src/debug_unittest.cc create mode 100644 tools/relocation_packer/src/delta_encoder.cc create mode 100644 tools/relocation_packer/src/delta_encoder.h create mode 100644 tools/relocation_packer/src/delta_encoder_unittest.cc create mode 100644 tools/relocation_packer/src/elf_file.cc create mode 100644 tools/relocation_packer/src/elf_file.h create mode 100644 tools/relocation_packer/src/elf_file_unittest.cc create mode 100644 tools/relocation_packer/src/elf_traits.h create mode 100644 tools/relocation_packer/src/leb128.cc create mode 100644 tools/relocation_packer/src/leb128.h create mode 100644 tools/relocation_packer/src/leb128_unittest.cc create mode 100644 tools/relocation_packer/src/main.cc create mode 100644 tools/relocation_packer/src/packer.cc create mode 100644 tools/relocation_packer/src/packer.h create mode 100644 tools/relocation_packer/src/packer_unittest.cc create mode 100644 tools/relocation_packer/src/run_all_unittests.cc create mode 100644 tools/relocation_packer/src/run_length_encoder.cc create mode 100644 tools/relocation_packer/src/run_length_encoder.h create mode 100644 tools/relocation_packer/src/run_length_encoder_unittest.cc create mode 100644 tools/relocation_packer/src/sleb128.cc create mode 100644 tools/relocation_packer/src/sleb128.h create mode 100644 tools/relocation_packer/src/sleb128_unittest.cc create mode 100644 tools/relocation_packer/test_data/elf_file_unittest_relocs.cc create mode 100755 tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so create mode 100755 tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so create mode 100755 tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so create mode 100755 tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so create mode 100755 tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.py create mode 100755 tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.sh diff --git a/tools/relocation_packer/BUILD.gn b/tools/relocation_packer/BUILD.gn new file mode 100644 index 000000000..0b29c9162 --- /dev/null +++ b/tools/relocation_packer/BUILD.gn @@ -0,0 +1,148 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("config.gni") +import("//testing/test.gni") + +assert(relocation_packing_supported) + +if (target_arch == "arm") { + target_define = "TARGET_ARM" +} else if (target_arch == "arm64") { + target_define = "TARGET_ARM64" +} + +if (current_toolchain == host_toolchain) { + # GYP: //tools/relocation_packer/relocation_packer.gyp:lib_relocation_packer + source_set("lib_relocation_packer") { + defines = [ target_define ] + deps = [ + "//third_party/elfutils:libelf", + ] + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + sources = [ + "src/debug.cc", + "src/delta_encoder.cc", + "src/elf_file.cc", + "src/leb128.cc", + "src/packer.cc", + "src/sleb128.cc", + "src/run_length_encoder.cc", + ] + } + + # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer + executable("relocation_packer") { + defines = [ target_define ] + deps = [ + ":lib_relocation_packer", + "//third_party/elfutils:libelf", + ] + sources = [ + "src/main.cc", + ] + } + + # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests + test("relocation_packer_unittests") { + sources = [ + "src/debug_unittest.cc", + "src/delta_encoder_unittest.cc", + "src/elf_file_unittest.cc", + "src/leb128_unittest.cc", + "src/packer_unittest.cc", + "src/sleb128_unittest.cc", + "src/run_length_encoder_unittest.cc", + "src/run_all_unittests.cc", + ] + rebased_test_data = rebase_path("test_data", root_build_dir) + data = [ + "test_data/elf_file_unittest_relocs_arm32.so", + "test_data/elf_file_unittest_relocs_arm32_packed.so", + "test_data/elf_file_unittest_relocs_arm64.so", + "test_data/elf_file_unittest_relocs_arm64_packed.so", + ] + defines = [ + target_define, + "INTERMEDIATE_DIR=\"$rebased_test_data\"", + ] + include_dirs = [ "//" ] + deps = [ + ":lib_relocation_packer", + ":relocation_packer_test_data", + "//testing:gtest", + ] + } +} + +if (current_toolchain == default_toolchain && + (target_arch == "arm" || target_arch == "arm64")) { + # Targets to build test data. These participate only in building test + # data for use with elf_file_unittest.cc, and are not part of the main + # relocation packer build. Unit test data files are checked in to the + # source tree as 'golden' data, and are not generated 'on the fly' by + # the build. + # + # See test_data/generate_elf_file_unittest_relocs.sh for instructions. + + # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_test_data + shared_library("relocation_packer_test_data") { + cflags = [ + "-O0", + "-g0", + ] + sources = [ + "test_data/elf_file_unittest_relocs.cc", + ] + } + + # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests_test_data + action("relocation_packer_unittests_test_data") { + script = "test_data/generate_elf_file_unittest_relocs.py" + test_file = "$root_build_dir/librelocation_packer_test_data.so" + if (target_arch == "arm") { + added_section = ".android.rel.dyn" + packed_output = "elf_file_unittest_relocs_arm32_packed.so" + unpacked_output = "elf_file_unittest_relocs_arm32.so" + } else if (target_arch == "arm64") { + added_section = ".android.rela.dyn" + packed_output = "elf_file_unittest_relocs_arm64_packed.so" + unpacked_output = "elf_file_unittest_relocs_arm64.so" + } else { + assert(false, "Unsupported target arch for relocation packer") + } + + packed_output = "$root_build_dir/$packed_output" + unpacked_output = "$root_build_dir/$unpacked_output" + + inputs = [ + test_file, + ] + + deps = [ + ":relocation_packer_test_data", + ":relocation_packer($host_toolchain)", + ] + + outputs = [ + packed_output, + unpacked_output, + ] + + args = [ + "--android-pack-relocations", + rebase_path(relocation_packer_exe, root_build_dir), + "--android-objcopy", + rebase_path(android_objcopy, root_build_dir), + "--added-section=$added_section", + "--test-file", + rebase_path(test_file, root_build_dir), + "--packed-output", + rebase_path(packed_output, root_build_dir), + "--unpacked-output", + rebase_path(unpacked_output, root_build_dir), + ] + } +} diff --git a/tools/relocation_packer/LICENSE b/tools/relocation_packer/LICENSE new file mode 100644 index 000000000..972bb2edb --- /dev/null +++ b/tools/relocation_packer/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/relocation_packer/README.TXT b/tools/relocation_packer/README.TXT new file mode 100644 index 000000000..071ab5df2 --- /dev/null +++ b/tools/relocation_packer/README.TXT @@ -0,0 +1,135 @@ +Introduction: +------------- + +Relative relocations are the bulk of dynamic relocations (the .rel.dyn +or .rela.dyn sections) in libchrome..so. The ELF standard +representation of them is wasteful. + +Packing uses a combination of run length encoding, delta encoding, and LEB128 +encoding to store them more efficiently. Packed relocations are placed in +a new .android.rel.dyn or .android.rela.dyn section. Packing reduces +the footprint of libchrome..so in the filesystem, in APK downloads, +and in memory when loaded on the device. + +A packed libchrome..so is designed so that it can be loaded directly +on Android, but requires the explicit support of a crazy linker that has been +extended to understand packed relocations. Packed relocations are currently +only supported on ARM. + +A packed libchrome..so cannot currently be used with the standard +Android runtime linker. + +See src/*.h for design and implementation notes. + + +Notes: +------ + +Packing does not adjust debug data. An unstripped libchrome..so +can be packed and will run, but may no longer be useful for debugging. + +Unpacking on the device requires the explicit support of an extended crazy +linker. Adds the following new .dynamic tags, used by the crazy linker to +find the packed .android.rel.dyn or .android.rela.dyn section data: + + DT_ANDROID_REL_OFFSET = DT_LOOS (Operating System specific: 0x6000000d) + - The offset of packed relocation data in libchrome..so + DT_ANDROID_REL_SIZE = DT_LOOS + 1 (Operating System Specific: 0x6000000e) + - The size of packed relocation data in bytes + +32 bit ARM libraries use relocations without addends. 64 bit ARM libraries +use relocations with addends. The packing strategy necessarily differs for +the two relocation types. + +Where libchrome..so contains relocations without addends, the format +of .android.rel.dyn data is: + + "APR1" identifier + N: the number of count-delta pairs in the encoding + A: the initial offset + N * C,D: N count-delta pairs + +Where libchrome..so contains relocations with addends, the format +of .android.rela.dyn data is: + + "APA1" identifier + N: the number of addr-addend delta pairs in the encoding + N * A,V: N addr-addend delta pairs + +All numbers in the encoding stream are stored as LEB128 values. For details +see http://en.wikipedia.org/wiki/LEB128. + +The streaming unpacking algorithm for 32 bit ARM is: + + skip over "APR1" + pairs, addr = next leb128 value, next leb128 value + emit R_ARM_RELATIVE relocation with r_offset = addr + while pairs: + count, delta = next leb128 value, next leb128 value + while count: + addr += delta + emit R_ARM_RELATIVE relocation with r_offset = addr + count-- + pairs-- + +The streaming unpacking algorithm for 64 bit ARM is: + + skip over "APA1" + pairs = next signed leb128 value + addr, addend = 0, 0 + while pairs: + addr += next signed leb128 value + addend += next signed leb128 value + emit R_AARCH64_RELATIVE relocation with r_offset = addr, r_addend = addend + pairs-- + + +Usage instructions: +------------------- + +To pack relocations, add an empty .android.rel.dyn or .android.rela.dyn and +then run the tool: + + echo -n 'NULL' >/tmp/small + if file libchrome..so | grep -q 'ELF 32'; then + arm-linux-androideabi-objcopy + --add-section .android.rel.dyn=/tmp/small + libchrome..so libchrome..so.packed + else + aarch64-linux-android-objcopy + --add-section .android.rela.dyn=/tmp/small + libchrome..so libchrome..so.packed + fi + rm /tmp/small + relocation_packer libchrome..so.packed + +To unpack and restore the shared library to its original state: + + cp libchrome..so.packed unpackable + relocation_packer -u unpackable + if file libchrome..so | grep -q 'ELF 32'; then + arm-linux-androideabi-objcopy \ + --remove-section=.android.rel.dyn unpackable libchrome..so + else + aarch64-linux-android-objcopy \ + --remove-section=.android.rela.dyn unpackable libchrome..so + endif + rm unpackable + + +Bugs & TODOs: +------------- + +Requires two free slots in the .dynamic section. Uses these to add data that +tells the crazy linker where to find the packed relocation data. Fails +if insufficient free slots exist (use gold --spare-dynamic-slots to increase +the allocation). + +Requires libelf 0.158 or later. Earlier libelf releases may be buggy in +ways that prevent the packer from working correctly. + + +Testing: +-------- + +Unittests run under gtest, on the host system. diff --git a/tools/relocation_packer/config.gni b/tools/relocation_packer/config.gni new file mode 100644 index 000000000..90e397933 --- /dev/null +++ b/tools/relocation_packer/config.gni @@ -0,0 +1,21 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +relocation_packing_supported = target_arch == "arm" || target_arch == "arm64" + +if (relocation_packing_supported) { + relocation_packer_target = "//tools/relocation_packer($host_toolchain)" + relocation_packer_dir = + get_label_info("$relocation_packer_target", "root_out_dir") + relocation_packer_exe = "${relocation_packer_dir}/relocation_packer" + + if (target_arch == "arm") { + relocations_have_addends = 0 + } else if (target_arch == "arm64") { + relocations_have_addends = 1 + } +} else { + relocations_have_addends = 0 + relocation_packer_exe = "" +} diff --git a/tools/relocation_packer/relocation_packer.gyp b/tools/relocation_packer/relocation_packer.gyp new file mode 100644 index 000000000..1e9c1b95b --- /dev/null +++ b/tools/relocation_packer/relocation_packer.gyp @@ -0,0 +1,161 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'variables': { + 'target_define%': 'TARGET_UNSUPPORTED', + 'conditions': [ + [ 'target_arch == "arm"', { + 'target_define': 'TARGET_ARM', + }], + [ 'target_arch == "arm64"', { + 'target_define': 'TARGET_ARM64', + }], + ], + }, + 'targets': [ + { + # GN: //tools/relocation_packer:lib_relocation_packer + 'target_name': 'lib_relocation_packer', + 'toolsets': ['host'], + 'type': 'static_library', + 'defines': [ + '<(target_define)', + ], + 'dependencies': [ + '../../third_party/elfutils/elfutils.gyp:libelf', + ], + 'sources': [ + 'src/debug.cc', + 'src/delta_encoder.cc', + 'src/elf_file.cc', + 'src/leb128.cc', + 'src/packer.cc', + 'src/sleb128.cc', + 'src/run_length_encoder.cc', + ], + }, + { + # GN: //tools/relocation_packer:relocation_packer + 'target_name': 'relocation_packer', + 'toolsets': ['host'], + 'type': 'executable', + 'defines': [ + '<(target_define)', + ], + 'dependencies': [ + '../../third_party/elfutils/elfutils.gyp:libelf', + 'lib_relocation_packer', + ], + 'sources': [ + 'src/main.cc', + ], + }, + { + # GN: //tools/relocation_packer:relocation_packer_unittests + 'target_name': 'relocation_packer_unittests', + 'toolsets': ['host'], + 'type': 'executable', + 'defines': [ + '<(target_define)', + ], + 'cflags': [ + '-DINTERMEDIATE_DIR="<(INTERMEDIATE_DIR)"', + ], + 'dependencies': [ + '../../testing/gtest.gyp:gtest', + 'lib_relocation_packer', + ], + 'include_dirs': [ + '../..', + ], + 'sources': [ + 'src/debug_unittest.cc', + 'src/delta_encoder_unittest.cc', + 'src/elf_file_unittest.cc', + 'src/leb128_unittest.cc', + 'src/packer_unittest.cc', + 'src/sleb128_unittest.cc', + 'src/run_length_encoder_unittest.cc', + 'src/run_all_unittests.cc', + ], + 'copies': [ + { + 'destination': '<(INTERMEDIATE_DIR)', + 'files': [ + 'test_data/elf_file_unittest_relocs_arm32.so', + 'test_data/elf_file_unittest_relocs_arm32_packed.so', + 'test_data/elf_file_unittest_relocs_arm64.so', + 'test_data/elf_file_unittest_relocs_arm64_packed.so', + ], + }, + ], + }, + + # Targets to build test data. These participate only in building test + # data for use with elf_file_unittest.cc, and are not part of the main + # relocation packer build. Unit test data files are checked in to the + # source tree as 'golden' data, and are not generated 'on the fly' by + # the build. + # + # See test_data/generate_elf_file_unittest_relocs.sh for instructions. + { + # GN: //tools/relocation_packer:relocation_packer_test_data + 'target_name': 'relocation_packer_test_data', + 'toolsets': ['target'], + 'type': 'shared_library', + 'cflags': [ + '-O0', + '-g0', + ], + 'sources': [ + 'test_data/elf_file_unittest_relocs.cc', + ], + }, + { + # GN: //tools/relocation_packer:relocation_packer_unittests_test_data + 'target_name': 'relocation_packer_unittests_test_data', + 'toolsets': ['target'], + 'type': 'none', + 'actions': [ + { + 'variables': { + 'test_file': '<(SHARED_LIB_DIR)/librelocation_packer_test_data.so', + 'conditions': [ + [ 'target_arch == "arm"', { + 'added_section': '.android.rel.dyn', + 'unpacked_output': 'elf_file_unittest_relocs_arm32.so', + 'packed_output': 'elf_file_unittest_relocs_arm32_packed.so', + }], + [ 'target_arch == "arm64"', { + 'added_section': '.android.rela.dyn', + 'unpacked_output': 'elf_file_unittest_relocs_arm64.so', + 'packed_output': 'elf_file_unittest_relocs_arm64_packed.so', + }], + ], + }, + 'action_name': 'generate_relocation_packer_test_data', + 'inputs': [ + 'test_data/generate_elf_file_unittest_relocs.py', + '<(PRODUCT_DIR)/relocation_packer', + '<(test_file)', + ], + 'outputs': [ + '<(INTERMEDIATE_DIR)/<(unpacked_output)', + '<(INTERMEDIATE_DIR)/<(packed_output)', + ], + 'action': [ + 'python', 'test_data/generate_elf_file_unittest_relocs.py', + '--android-pack-relocations=<(PRODUCT_DIR)/relocation_packer', + '--android-objcopy=<(android_objcopy)', + '--added-section=<(added_section)', + '--test-file=<(test_file)', + '--unpacked-output=<(INTERMEDIATE_DIR)/<(unpacked_output)', + '--packed-output=<(INTERMEDIATE_DIR)/<(packed_output)', + ], + }, + ], + }, + ], +} diff --git a/tools/relocation_packer/src/debug.cc b/tools/relocation_packer/src/debug.cc new file mode 100644 index 000000000..29d7ab067 --- /dev/null +++ b/tools/relocation_packer/src/debug.cc @@ -0,0 +1,55 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "debug.h" + +#include +#include +#include + +namespace relocation_packer { + +// Construct a new message logger. Prints if level is less than or equal to +// the level set with SetVerbose() and predicate is true. +Logger::Logger(Severity severity, int level, bool predicate) { + severity_ = severity; + level_ = level; + predicate_ = predicate; +} + +// On destruction, flush and print the strings accumulated. Abort if FATAL. +Logger::~Logger() { + if (predicate_) { + if (level_ <= max_level_) { + std::ostream* log = severity_ == INFO ? info_stream_ : error_stream_; + std::string tag; + switch (severity_) { + case INFO: tag = "INFO"; break; + case WARNING: tag = "WARNING"; break; + case ERROR: tag = "ERROR"; break; + case FATAL: tag = "FATAL"; break; + } + stream_.flush(); + *log << tag << ": " << stream_.str() << std::endl; + } + if (severity_ == FATAL) + abort(); + } +} + +// Reset to initial state. +void Logger::Reset() { + max_level_ = -1; + info_stream_ = &std::cout; + error_stream_ = &std::cerr; +} + +// Verbosity. Not thread-safe. +int Logger::max_level_ = -1; + +// Logging streams. Not thread-safe. +std::ostream* Logger::info_stream_ = &std::cout; +std::ostream* Logger::error_stream_ = &std::cerr; + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/debug.h b/tools/relocation_packer/src/debug.h new file mode 100644 index 000000000..48be6c19b --- /dev/null +++ b/tools/relocation_packer/src/debug.h @@ -0,0 +1,115 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Logging and checks. Avoids a dependency on base. +// +// LOG(tag) prints messages. Tags are INFO, WARNING, ERROR and FATAL. +// INFO prints to stdout, the others to stderr. FATAL aborts after printing. +// +// LOG_IF(tag, predicate) logs if predicate evaluates to true, else silent. +// +// VLOG(level) logs INFO messages where level is less than or equal to the +// verbosity level set with SetVerbose(). +// +// VLOG_IF(level, predicate) logs INFO if predicate evaluates to true, +// else silent. +// +// CHECK(predicate) logs a FATAL error if predicate is false. +// NOTREACHED() always aborts. +// Log streams can be changed with SetStreams(). Logging is not thread-safe. +// + +#ifndef TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ +#define TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ + +#include +#include +#include + +namespace relocation_packer { + +class Logger { + public: + enum Severity {INFO = 0, WARNING, ERROR, FATAL}; + + // Construct a new message logger. Prints if level is less than or + // equal to the level set with SetVerbose() and predicate is true. + // |severity| is an enumerated severity. + // |level| is the verbosity level. + // |predicate| controls if the logger prints or is silent. + Logger(Severity severity, int level, bool predicate); + + // On destruction, flush and print the strings accumulated in stream_. + ~Logger(); + + // Return the stream for this logger. + std::ostream& GetStream() { return stream_; } + + // Set verbosity level. Messages with a level less than or equal to + // this level are printed, others are discarded. Static, not thread-safe. + static void SetVerbose(int level) { max_level_ = level; } + + // Set info and error logging streams. Static, not thread-safe. + static void SetStreams(std::ostream* info_stream, + std::ostream* error_stream) { + info_stream_ = info_stream; + error_stream_ = error_stream; + } + + // Reset to initial state. + static void Reset(); + + private: + // Message severity, verbosity level, and predicate. + Severity severity_; + int level_; + bool predicate_; + + // String stream, accumulates message text. + std::ostringstream stream_; + + // Verbosity for INFO messages. Not thread-safe. + static int max_level_; + + // Logging streams. Not thread-safe. + static std::ostream* info_stream_; + static std::ostream* error_stream_; +}; + +} // namespace relocation_packer + +// Make logging severities visible globally. +typedef relocation_packer::Logger::Severity LogSeverity; +using LogSeverity::INFO; +using LogSeverity::WARNING; +using LogSeverity::ERROR; +using LogSeverity::FATAL; + +// LOG(severity) prints a message with the given severity, and aborts if +// severity is FATAL. LOG_IF(severity, predicate) does the same but only if +// predicate is true. INT_MIN is guaranteed to be less than or equal to +// any verbosity level. +#define LOG(severity) \ + (relocation_packer::Logger(severity, INT_MIN, true).GetStream()) +#define LOG_IF(severity, predicate) \ + (relocation_packer::Logger(severity, INT_MIN, (predicate)).GetStream()) + +// VLOG(level) prints its message as INFO if level is less than or equal to +// the current verbosity level. +#define VLOG(level) \ + (relocation_packer::Logger(INFO, (level), true).GetStream()) +#define VLOG_IF(level, predicate) \ + (relocation_packer::Logger(INFO, (level), (predicate)).GetStream()) + +// CHECK(predicate) fails with a FATAL log message if predicate is false. +#define CHECK(predicate) (LOG_IF(FATAL, !(predicate)) \ + << __FILE__ << ":" << __LINE__ << ": " \ + << __FUNCTION__ << ": CHECK '" #predicate "' failed") + +// NOTREACHED() always fails with a FATAL log message. +#define NOTREACHED(_) (LOG(FATAL) \ + << __FILE__ << ":" << __LINE__ << ": " \ + << __FUNCTION__ << ": NOTREACHED() hit") + +#endif // TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ diff --git a/tools/relocation_packer/src/debug_unittest.cc b/tools/relocation_packer/src/debug_unittest.cc new file mode 100644 index 000000000..1b65cd16e --- /dev/null +++ b/tools/relocation_packer/src/debug_unittest.cc @@ -0,0 +1,122 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "debug.h" + +#include +#include "testing/gtest/include/gtest/gtest.h" + +namespace relocation_packer { + +TEST(Debug, Log) { + Logger::Reset(); + std::ostringstream info; + std::ostringstream error; + Logger::SetStreams(&info, &error); + + LOG(INFO) << "INFO log message"; + LOG(WARNING) << "WARNING log message"; + LOG(ERROR) << "ERROR log message"; + + EXPECT_EQ("INFO: INFO log message\n", info.str()); + EXPECT_EQ("WARNING: WARNING log message\n" + "ERROR: ERROR log message\n", error.str()); + Logger::Reset(); +} + +TEST(Debug, LogIf) { + Logger::Reset(); + std::ostringstream info; + std::ostringstream error; + Logger::SetStreams(&info, &error); + + LOG_IF(INFO, true) << "INFO log message"; + LOG_IF(INFO, false) << "INFO log message, SHOULD NOT PRINT"; + LOG_IF(WARNING, true) << "WARNING log message"; + LOG_IF(WARNING, false) << "WARNING log message, SHOULD NOT PRINT"; + LOG_IF(ERROR, true) << "ERROR log message"; + LOG_IF(ERROR, false) << "ERROR log message, SHOULD NOT PRINT"; + LOG_IF(FATAL, false) << "FATAL log message, SHOULD NOT PRINT"; + + EXPECT_EQ("INFO: INFO log message\n", info.str()); + EXPECT_EQ("WARNING: WARNING log message\n" + "ERROR: ERROR log message\n", error.str()); + Logger::Reset(); +} + +TEST(Debug, Vlog) { + Logger::Reset(); + std::ostringstream info; + std::ostringstream error; + Logger::SetStreams(&info, &error); + + VLOG(0) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; + VLOG(1) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; + VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; + + EXPECT_EQ("", info.str()); + EXPECT_EQ("", error.str()); + + Logger::SetVerbose(1); + + VLOG(0) << "VLOG 0 INFO log message"; + VLOG(1) << "VLOG 1 INFO log message"; + VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; + + EXPECT_EQ("INFO: VLOG 0 INFO log message\n" + "INFO: VLOG 1 INFO log message\n", info.str()); + EXPECT_EQ("", error.str()); + Logger::Reset(); +} + +TEST(Debug, VlogIf) { + Logger::Reset(); + std::ostringstream info; + std::ostringstream error; + Logger::SetStreams(&info, &error); + + VLOG_IF(0, true) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; + VLOG_IF(1, true) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; + VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; + + EXPECT_EQ("", info.str()); + EXPECT_EQ("", error.str()); + + Logger::SetVerbose(1); + + VLOG_IF(0, true) << "VLOG 0 INFO log message"; + VLOG_IF(0, false) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; + VLOG_IF(1, true) << "VLOG 1 INFO log message"; + VLOG_IF(1, false) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; + VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; + VLOG_IF(2, false) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; + + EXPECT_EQ("INFO: VLOG 0 INFO log message\n" + "INFO: VLOG 1 INFO log message\n", info.str()); + EXPECT_EQ("", error.str()); + Logger::Reset(); +} + +TEST(DebugDeathTest, Fatal) { + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + Logger::Reset(); + EXPECT_DEATH(LOG(FATAL) << "FATAL log message", "FATAL: FATAL log message"); + EXPECT_DEATH( + LOG_IF(FATAL, true) << "FATAL log message", "FATAL: FATAL log message"); +} + +TEST(DebugDeathTest, Check) { + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + Logger::Reset(); + CHECK(0 == 0); + EXPECT_DEATH(CHECK(0 == 1), "FATAL: .*:.*: .*: CHECK '0 == 1' failed"); +} + +TEST(DebugDeathTest, NotReached) { + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + Logger::Reset(); + EXPECT_DEATH(NOTREACHED(), "FATAL: .*:.*: .*: NOTREACHED\\(\\) hit"); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/delta_encoder.cc b/tools/relocation_packer/src/delta_encoder.cc new file mode 100644 index 000000000..69cc91a51 --- /dev/null +++ b/tools/relocation_packer/src/delta_encoder.cc @@ -0,0 +1,72 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "delta_encoder.h" + +#include + +#include "debug.h" +#include "elf_traits.h" + +namespace relocation_packer { + +// Encode relative relocations with addends into a delta encoded (packed) +// representation. Represented as simple r_offset and r_addend delta pairs, +// with an implicit neutral element at the start. +void RelocationDeltaCodec::Encode(const std::vector& relocations, + std::vector* packed) { + // One relocation is sufficient for delta encoding. + if (relocations.size() < 1) + return; + + // Start with the element count, then append the delta pairs. + packed->push_back(relocations.size()); + + ELF::Addr offset = 0; + ELF::Sxword addend = 0; + + for (size_t i = 0; i < relocations.size(); ++i) { + const ELF::Rela* relocation = &relocations[i]; + CHECK(ELF_R_TYPE(relocation->r_info) == ELF::kRelativeRelocationCode); + + packed->push_back(relocation->r_offset - offset); + offset = relocation->r_offset; + packed->push_back(relocation->r_addend - addend); + addend = relocation->r_addend; + } +} + +// Decode relative relocations with addends from a delta encoded (packed) +// representation. +void RelocationDeltaCodec::Decode(const std::vector& packed, + std::vector* relocations) { + // We need at least one packed pair after the packed pair count to be + // able to unpack. + if (packed.size() < 3) + return; + + // Ensure that the packed data offers enough pairs. There may be zero + // padding on it that we ignore. + CHECK(static_cast(packed[0]) <= (packed.size() - 1) >> 1); + + ELF::Addr offset = 0; + ELF::Sxword addend = 0; + + // The first packed vector element is the pairs count. Start uncondensing + // pairs at the second, and finish at the end of the pairs data. + const size_t pairs_count = packed[0]; + for (size_t i = 1; i < 1 + (pairs_count << 1); i += 2) { + offset += packed[i]; + addend += packed[i + 1]; + + // Generate a relocation for this offset and addend pair. + ELF::Rela relocation; + relocation.r_offset = offset; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocation.r_addend = addend; + relocations->push_back(relocation); + } +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/delta_encoder.h b/tools/relocation_packer/src/delta_encoder.h new file mode 100644 index 000000000..498b6d1af --- /dev/null +++ b/tools/relocation_packer/src/delta_encoder.h @@ -0,0 +1,80 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Delta encode and decode relative relocations with addends. +// +// Relative relocations are the bulk of dynamic relocations (the +// .rel.dyn or .rela.dyn sections) in libchrome..so, and the ELF +// standard representation of them is wasteful. .rel.dyn contains +// relocations without addends, .rela.dyn relocations with addends. +// +// A relocation with an addend is 12 bytes on 32 bit platforms and 24 bytes +// on 64 bit plaforms. It is split into offset, info, and addend fields. +// Offsets strictly increase, and each is commonly a few bytes different +// from its predecessor. Addends are less well behaved. The info field is +// constant. Example, from 'readelf -x4 libchrome..so' 64 bit: +// +// offset info +// 80949303 00000000 03040000 00000000 ................ +// addend offset +// fc015b00 00000000 88949303 00000000 ..[............. +// info addend +// 03040000 00000000 24025b00 00000000 ........$.[..... +// offset info +// 90949303 00000000 03040000 00000000 ................ +// addend offset +// 3c025b00 00000000 98949303 00000000 <.[............. +// info addend +// 03040000 00000000 50025b00 00000000 ........P.[..... +// +// The offset strictly increases, but the addend is unpredictable, so run +// length encoding will not work well with this data. We can however pack +// with delta encoding. The upper four bytes of the eight byte offset and +// addend are invariably zeroes. The difference between adjacent offsets +// is almost always small, and between adjacent addends is often small. And +// info is constant and can be eliminated. +// +// Delta encoding reduces the size of the data modestly, so that the first +// three relocations above can be represented as: +// +// initial offset initial addend offset delta addend delta +// 00000000 03939480 00000000 005b01fc 00000000 00000008 00000000 00000028 +// offset delta addend delta ... +// 00000000 00000008 00000000 0000009f +// +// The addend delta can be negative as well as positive, but overall the +// deltas have a much smaller range than the input data. When encoded as +// signed LEB128 the total data reduction becomes useful. + +#ifndef TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_ +#define TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_ + +#include + +#include "elf.h" +#include "elf_traits.h" + +namespace relocation_packer { + +// A RelocationDeltaCodec packs vectors of relative relocations with +// addends into more compact forms, and unpacks them to reproduce the +// pre-packed data. +class RelocationDeltaCodec { + public: + // Encode relative relocations with addends into a more compact form. + // |relocations| is a vector of relative relocation with addend structs. + // |packed| is the vector of packed words into which relocations are packed. + static void Encode(const std::vector& relocations, + std::vector* packed); + + // Decode relative relocations with addends from their more compact form. + // |packed| is the vector of packed relocations. + // |relocations| is a vector of unpacked relative relocations. + static void Decode(const std::vector& packed, + std::vector* relocations); +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_ diff --git a/tools/relocation_packer/src/delta_encoder_unittest.cc b/tools/relocation_packer/src/delta_encoder_unittest.cc new file mode 100644 index 000000000..b9bf39adb --- /dev/null +++ b/tools/relocation_packer/src/delta_encoder_unittest.cc @@ -0,0 +1,150 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "delta_encoder.h" + +#include +#include "elf.h" +#include "elf_traits.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +void AddRelocation(ELF::Addr addr, + ELF::Sxword addend, + std::vector* relocations) { + ELF::Rela relocation; + relocation.r_offset = addr; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocation.r_addend = addend; + relocations->push_back(relocation); +} + +bool CheckRelocation(ELF::Addr addr, + ELF::Sxword addend, + const ELF::Rela& relocation) { + return relocation.r_offset == addr && + ELF_R_SYM(relocation.r_info) == 0 && + ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode && + relocation.r_addend == addend; +} + +} // namespace + +namespace relocation_packer { + +TEST(Delta, Encode) { + std::vector relocations; + std::vector packed; + + RelocationDeltaCodec codec; + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(0, packed.size()); + + // Initial relocation. + AddRelocation(0xf00d0000, 10000, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(3, packed.size()); + // One pair present. + EXPECT_EQ(1, packed[0]); + // Delta from the neutral element is the initial relocation. + EXPECT_EQ(0xf00d0000, packed[1]); + EXPECT_EQ(10000, packed[2]); + + // Add a second relocation, 4 byte offset delta, 12 byte addend delta. + AddRelocation(0xf00d0004, 10012, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(5, packed.size()); + // Two pairs present. + EXPECT_EQ(2, packed[0]); + // Delta from the neutral element is the initial relocation. + EXPECT_EQ(0xf00d0000, packed[1]); + EXPECT_EQ(10000, packed[2]); + // 4 byte offset delta, 12 byte addend delta. + EXPECT_EQ(4, packed[3]); + EXPECT_EQ(12, packed[4]); + + // Add a third relocation, 4 byte offset delta, 12 byte addend delta. + AddRelocation(0xf00d0008, 10024, &relocations); + + // Add three more relocations, 8 byte offset deltas, -24 byte addend deltas. + AddRelocation(0xf00d0010, 10000, &relocations); + AddRelocation(0xf00d0018, 9976, &relocations); + AddRelocation(0xf00d0020, 9952, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(13, packed.size()); + // Six pairs present. + EXPECT_EQ(6, packed[0]); + // Initial relocation. + EXPECT_EQ(0xf00d0000, packed[1]); + EXPECT_EQ(10000, packed[2]); + // Two relocations, 4 byte offset deltas, 12 byte addend deltas. + EXPECT_EQ(4, packed[3]); + EXPECT_EQ(12, packed[4]); + EXPECT_EQ(4, packed[5]); + EXPECT_EQ(12, packed[6]); + // Three relocations, 8 byte offset deltas, -24 byte addend deltas. + EXPECT_EQ(8, packed[7]); + EXPECT_EQ(-24, packed[8]); + EXPECT_EQ(8, packed[9]); + EXPECT_EQ(-24, packed[10]); + EXPECT_EQ(8, packed[11]); + EXPECT_EQ(-24, packed[12]); +} + +TEST(Delta, Decode) { + std::vector packed; + std::vector relocations; + + RelocationDeltaCodec codec; + codec.Decode(packed, &relocations); + + EXPECT_EQ(0, relocations.size()); + + // Six pairs. + packed.push_back(6); + // Initial relocation. + packed.push_back(0xc0de0000); + packed.push_back(10000); + // Two relocations, 4 byte offset deltas, 12 byte addend deltas. + packed.push_back(4); + packed.push_back(12); + packed.push_back(4); + packed.push_back(12); + // Three relocations, 8 byte offset deltas, -24 byte addend deltas. + packed.push_back(8); + packed.push_back(-24); + packed.push_back(8); + packed.push_back(-24); + packed.push_back(8); + packed.push_back(-24); + + relocations.clear(); + codec.Decode(packed, &relocations); + + EXPECT_EQ(6, relocations.size()); + // Initial relocation. + EXPECT_TRUE(CheckRelocation(0xc0de0000, 10000, relocations[0])); + // Two relocations, 4 byte offset deltas, 12 byte addend deltas. + EXPECT_TRUE(CheckRelocation(0xc0de0004, 10012, relocations[1])); + EXPECT_TRUE(CheckRelocation(0xc0de0008, 10024, relocations[2])); + // Three relocations, 8 byte offset deltas, -24 byte addend deltas. + EXPECT_TRUE(CheckRelocation(0xc0de0010, 10000, relocations[3])); + EXPECT_TRUE(CheckRelocation(0xc0de0018, 9976, relocations[4])); + EXPECT_TRUE(CheckRelocation(0xc0de0020, 9952, relocations[5])); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_file.cc b/tools/relocation_packer/src/elf_file.cc new file mode 100644 index 000000000..3ffccecd7 --- /dev/null +++ b/tools/relocation_packer/src/elf_file.cc @@ -0,0 +1,1283 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Implementation notes: +// +// We need to remove a piece from the ELF shared library. However, we also +// want to ensure that code and data loads at the same addresses as before +// packing, so that tools like breakpad can still match up addresses found +// in any crash dumps with data extracted from the pre-packed version of +// the shared library. +// +// Arranging this means that we have to split one of the LOAD segments into +// two. Unfortunately, the program headers are located at the very start +// of the shared library file, so expanding the program header section +// would cause a lot of consequent changes to files offsets that we don't +// really want to have to handle. +// +// Luckily, though, there is a segment that is always present and always +// unused on Android; the GNU_STACK segment. What we do is to steal that +// and repurpose it to be one of the split LOAD segments. We then have to +// sort LOAD segments by offset to keep the crazy linker happy. +// +// All of this takes place in SplitProgramHeadersForHole(), used on packing, +// and is unraveled on unpacking in CoalesceProgramHeadersForHole(). See +// commentary on those functions for an example of this segment stealing +// in action. + +#include "elf_file.h" + +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "elf_traits.h" +#include "libelf.h" +#include "packer.h" + +namespace relocation_packer { + +// Stub identifier written to 'null out' packed data, "NULL". +static const uint32_t kStubIdentifier = 0x4c4c554eu; + +// Out-of-band dynamic tags used to indicate the offset and size of the +// android packed relocations section. +static const ELF::Sword DT_ANDROID_REL_OFFSET = DT_LOOS; +static const ELF::Sword DT_ANDROID_REL_SIZE = DT_LOOS + 1; + +// Alignment to preserve, in bytes. This must be at least as large as the +// largest d_align and sh_addralign values found in the loaded file. +// Out of caution for RELRO page alignment, we preserve to a complete target +// page. See http://www.airs.com/blog/archives/189. +static const size_t kPreserveAlignment = 4096; + +namespace { + +// Get section data. Checks that the section has exactly one data entry, +// so that the section size and the data size are the same. True in +// practice for all sections we resize when packing or unpacking. Done +// by ensuring that a call to elf_getdata(section, data) returns NULL as +// the next data entry. +Elf_Data* GetSectionData(Elf_Scn* section) { + Elf_Data* data = elf_getdata(section, NULL); + CHECK(data && elf_getdata(section, data) == NULL); + return data; +} + +// Rewrite section data. Allocates new data and makes it the data element's +// buffer. Relies on program exit to free allocated data. +void RewriteSectionData(Elf_Scn* section, + const void* section_data, + size_t size) { + Elf_Data* data = GetSectionData(section); + CHECK(size == data->d_size); + uint8_t* area = new uint8_t[size]; + memcpy(area, section_data, size); + data->d_buf = area; +} + +// Verbose ELF header logging. +void VerboseLogElfHeader(const ELF::Ehdr* elf_header) { + VLOG(1) << "e_phoff = " << elf_header->e_phoff; + VLOG(1) << "e_shoff = " << elf_header->e_shoff; + VLOG(1) << "e_ehsize = " << elf_header->e_ehsize; + VLOG(1) << "e_phentsize = " << elf_header->e_phentsize; + VLOG(1) << "e_phnum = " << elf_header->e_phnum; + VLOG(1) << "e_shnum = " << elf_header->e_shnum; + VLOG(1) << "e_shstrndx = " << elf_header->e_shstrndx; +} + +// Verbose ELF program header logging. +void VerboseLogProgramHeader(size_t program_header_index, + const ELF::Phdr* program_header) { + std::string type; + switch (program_header->p_type) { + case PT_NULL: type = "NULL"; break; + case PT_LOAD: type = "LOAD"; break; + case PT_DYNAMIC: type = "DYNAMIC"; break; + case PT_INTERP: type = "INTERP"; break; + case PT_PHDR: type = "PHDR"; break; + case PT_GNU_RELRO: type = "GNU_RELRO"; break; + case PT_GNU_STACK: type = "GNU_STACK"; break; + case PT_ARM_EXIDX: type = "EXIDX"; break; + default: type = "(OTHER)"; break; + } + VLOG(1) << "phdr[" << program_header_index << "] : " << type; + VLOG(1) << " p_offset = " << program_header->p_offset; + VLOG(1) << " p_vaddr = " << program_header->p_vaddr; + VLOG(1) << " p_paddr = " << program_header->p_paddr; + VLOG(1) << " p_filesz = " << program_header->p_filesz; + VLOG(1) << " p_memsz = " << program_header->p_memsz; + VLOG(1) << " p_flags = " << program_header->p_flags; + VLOG(1) << " p_align = " << program_header->p_align; +} + +// Verbose ELF section header logging. +void VerboseLogSectionHeader(const std::string& section_name, + const ELF::Shdr* section_header) { + VLOG(1) << "section " << section_name; + VLOG(1) << " sh_addr = " << section_header->sh_addr; + VLOG(1) << " sh_offset = " << section_header->sh_offset; + VLOG(1) << " sh_size = " << section_header->sh_size; + VLOG(1) << " sh_addralign = " << section_header->sh_addralign; +} + +// Verbose ELF section data logging. +void VerboseLogSectionData(const Elf_Data* data) { + VLOG(1) << " data"; + VLOG(1) << " d_buf = " << data->d_buf; + VLOG(1) << " d_off = " << data->d_off; + VLOG(1) << " d_size = " << data->d_size; + VLOG(1) << " d_align = " << data->d_align; +} + +} // namespace + +// Load the complete ELF file into a memory image in libelf, and identify +// the .rel.dyn or .rela.dyn, .dynamic, and .android.rel.dyn or +// .android.rela.dyn sections. No-op if the ELF file has already been loaded. +bool ElfFile::Load() { + if (elf_) + return true; + + Elf* elf = elf_begin(fd_, ELF_C_RDWR, NULL); + CHECK(elf); + + if (elf_kind(elf) != ELF_K_ELF) { + LOG(ERROR) << "File not in ELF format"; + return false; + } + + ELF::Ehdr* elf_header = ELF::getehdr(elf); + if (!elf_header) { + LOG(ERROR) << "Failed to load ELF header: " << elf_errmsg(elf_errno()); + return false; + } + if (elf_header->e_machine != ELF::kMachine) { + LOG(ERROR) << "ELF file architecture is not " << ELF::Machine(); + return false; + } + if (elf_header->e_type != ET_DYN) { + LOG(ERROR) << "ELF file is not a shared object"; + return false; + } + + // Require that our endianness matches that of the target, and that both + // are little-endian. Safe for all current build/target combinations. + const int endian = elf_header->e_ident[EI_DATA]; + CHECK(endian == ELFDATA2LSB); + CHECK(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__); + + // Also require that the file class is as expected. + const int file_class = elf_header->e_ident[EI_CLASS]; + CHECK(file_class == ELF::kFileClass); + + VLOG(1) << "endian = " << endian << ", file class = " << file_class; + VerboseLogElfHeader(elf_header); + + const ELF::Phdr* elf_program_header = ELF::getphdr(elf); + CHECK(elf_program_header); + + const ELF::Phdr* dynamic_program_header = NULL; + for (size_t i = 0; i < elf_header->e_phnum; ++i) { + const ELF::Phdr* program_header = &elf_program_header[i]; + VerboseLogProgramHeader(i, program_header); + + if (program_header->p_type == PT_DYNAMIC) { + CHECK(dynamic_program_header == NULL); + dynamic_program_header = program_header; + } + } + CHECK(dynamic_program_header != NULL); + + size_t string_index; + elf_getshdrstrndx(elf, &string_index); + + // Notes of the dynamic relocations, packed relocations, and .dynamic + // sections. Found while iterating sections, and later stored in class + // attributes. + Elf_Scn* found_relocations_section = NULL; + Elf_Scn* found_android_relocations_section = NULL; + Elf_Scn* found_dynamic_section = NULL; + + // Notes of relocation section types seen. We require one or the other of + // these; both is unsupported. + bool has_rel_relocations = false; + bool has_rela_relocations = false; + + Elf_Scn* section = NULL; + while ((section = elf_nextscn(elf, section)) != NULL) { + const ELF::Shdr* section_header = ELF::getshdr(section); + std::string name = elf_strptr(elf, string_index, section_header->sh_name); + VerboseLogSectionHeader(name, section_header); + + // Note relocation section types. + if (section_header->sh_type == SHT_REL) { + has_rel_relocations = true; + } + if (section_header->sh_type == SHT_RELA) { + has_rela_relocations = true; + } + + // Note special sections as we encounter them. + if ((name == ".rel.dyn" || name == ".rela.dyn") && + section_header->sh_size > 0) { + found_relocations_section = section; + } + if ((name == ".android.rel.dyn" || name == ".android.rela.dyn") && + section_header->sh_size > 0) { + found_android_relocations_section = section; + } + if (section_header->sh_offset == dynamic_program_header->p_offset) { + found_dynamic_section = section; + } + + // Ensure we preserve alignment, repeated later for the data block(s). + CHECK(section_header->sh_addralign <= kPreserveAlignment); + + Elf_Data* data = NULL; + while ((data = elf_getdata(section, data)) != NULL) { + CHECK(data->d_align <= kPreserveAlignment); + VerboseLogSectionData(data); + } + } + + // Loading failed if we did not find the required special sections. + if (!found_relocations_section) { + LOG(ERROR) << "Missing or empty .rel.dyn or .rela.dyn section"; + return false; + } + if (!found_android_relocations_section) { + LOG(ERROR) << "Missing or empty .android.rel.dyn or .android.rela.dyn " + << "section (to fix, run with --help and follow the " + << "pre-packing instructions)"; + return false; + } + if (!found_dynamic_section) { + LOG(ERROR) << "Missing .dynamic section"; + return false; + } + + // Loading failed if we could not identify the relocations type. + if (!has_rel_relocations && !has_rela_relocations) { + LOG(ERROR) << "No relocations sections found"; + return false; + } + if (has_rel_relocations && has_rela_relocations) { + LOG(ERROR) << "Multiple relocations sections with different types found, " + << "not currently supported"; + return false; + } + + elf_ = elf; + relocations_section_ = found_relocations_section; + dynamic_section_ = found_dynamic_section; + android_relocations_section_ = found_android_relocations_section; + relocations_type_ = has_rel_relocations ? REL : RELA; + return true; +} + +namespace { + +// Helper for ResizeSection(). Adjust the main ELF header for the hole. +void AdjustElfHeaderForHole(ELF::Ehdr* elf_header, + ELF::Off hole_start, + ssize_t hole_size) { + if (elf_header->e_phoff > hole_start) { + elf_header->e_phoff += hole_size; + VLOG(1) << "e_phoff adjusted to " << elf_header->e_phoff; + } + if (elf_header->e_shoff > hole_start) { + elf_header->e_shoff += hole_size; + VLOG(1) << "e_shoff adjusted to " << elf_header->e_shoff; + } +} + +// Helper for ResizeSection(). Adjust all section headers for the hole. +void AdjustSectionHeadersForHole(Elf* elf, + ELF::Off hole_start, + ssize_t hole_size) { + size_t string_index; + elf_getshdrstrndx(elf, &string_index); + + Elf_Scn* section = NULL; + while ((section = elf_nextscn(elf, section)) != NULL) { + ELF::Shdr* section_header = ELF::getshdr(section); + std::string name = elf_strptr(elf, string_index, section_header->sh_name); + + if (section_header->sh_offset > hole_start) { + section_header->sh_offset += hole_size; + VLOG(1) << "section " << name + << " sh_offset adjusted to " << section_header->sh_offset; + } + } +} + +// Helper for ResizeSection(). Adjust the offsets of any program headers +// that have offsets currently beyond the hole start. +void AdjustProgramHeaderOffsets(ELF::Phdr* program_headers, + size_t count, + ELF::Phdr* ignored_1, + ELF::Phdr* ignored_2, + ELF::Off hole_start, + ssize_t hole_size) { + for (size_t i = 0; i < count; ++i) { + ELF::Phdr* program_header = &program_headers[i]; + + if (program_header == ignored_1 || program_header == ignored_2) + continue; + + if (program_header->p_offset > hole_start) { + // The hole start is past this segment, so adjust offset. + program_header->p_offset += hole_size; + VLOG(1) << "phdr[" << i + << "] p_offset adjusted to "<< program_header->p_offset; + } + } +} + +// Helper for ResizeSection(). Find the first loadable segment in the +// file. We expect it to map from file offset zero. +ELF::Phdr* FindFirstLoadSegment(ELF::Phdr* program_headers, + size_t count) { + ELF::Phdr* first_loadable_segment = NULL; + + for (size_t i = 0; i < count; ++i) { + ELF::Phdr* program_header = &program_headers[i]; + + if (program_header->p_type == PT_LOAD && + program_header->p_offset == 0 && + program_header->p_vaddr == 0 && + program_header->p_paddr == 0) { + first_loadable_segment = program_header; + } + } + LOG_IF(FATAL, !first_loadable_segment) + << "Cannot locate a LOAD segment with address and offset zero"; + + return first_loadable_segment; +} + +// Helper for ResizeSection(). Find the PT_GNU_STACK segment, and check +// that it contains what we expect so we can restore it on unpack if needed. +ELF::Phdr* FindUnusedGnuStackSegment(ELF::Phdr* program_headers, + size_t count) { + ELF::Phdr* unused_segment = NULL; + + for (size_t i = 0; i < count; ++i) { + ELF::Phdr* program_header = &program_headers[i]; + + if (program_header->p_type == PT_GNU_STACK && + program_header->p_offset == 0 && + program_header->p_vaddr == 0 && + program_header->p_paddr == 0 && + program_header->p_filesz == 0 && + program_header->p_memsz == 0 && + program_header->p_flags == (PF_R | PF_W) && + program_header->p_align == ELF::kGnuStackSegmentAlignment) { + unused_segment = program_header; + } + } + LOG_IF(FATAL, !unused_segment) + << "Cannot locate the expected GNU_STACK segment"; + + return unused_segment; +} + +// Helper for ResizeSection(). Find the segment that was the first loadable +// one before we split it into two. This is the one into which we coalesce +// the split segments on unpacking. +ELF::Phdr* FindOriginalFirstLoadSegment(ELF::Phdr* program_headers, + size_t count) { + const ELF::Phdr* first_loadable_segment = + FindFirstLoadSegment(program_headers, count); + + ELF::Phdr* original_first_loadable_segment = NULL; + + for (size_t i = 0; i < count; ++i) { + ELF::Phdr* program_header = &program_headers[i]; + + // The original first loadable segment is the one that follows on from + // the one we wrote on split to be the current first loadable segment. + if (program_header->p_type == PT_LOAD && + program_header->p_offset == first_loadable_segment->p_filesz) { + original_first_loadable_segment = program_header; + } + } + LOG_IF(FATAL, !original_first_loadable_segment) + << "Cannot locate the LOAD segment that follows a LOAD at offset zero"; + + return original_first_loadable_segment; +} + +// Helper for ResizeSection(). Find the segment that contains the hole. +Elf_Scn* FindSectionContainingHole(Elf* elf, + ELF::Off hole_start, + ssize_t hole_size) { + Elf_Scn* section = NULL; + Elf_Scn* last_unholed_section = NULL; + + while ((section = elf_nextscn(elf, section)) != NULL) { + const ELF::Shdr* section_header = ELF::getshdr(section); + + // Because we get here after section headers have been adjusted for the + // hole, we need to 'undo' that adjustment to give a view of the original + // sections layout. + ELF::Off offset = section_header->sh_offset; + if (section_header->sh_offset >= hole_start) { + offset -= hole_size; + } + + if (offset <= hole_start) { + last_unholed_section = section; + } + } + LOG_IF(FATAL, !last_unholed_section) + << "Cannot identify the section before the one containing the hole"; + + // The section containing the hole is the one after the last one found + // by the loop above. + Elf_Scn* holed_section = elf_nextscn(elf, last_unholed_section); + LOG_IF(FATAL, !holed_section) + << "Cannot identify the section containing the hole"; + + return holed_section; +} + +// Helper for ResizeSection(). Find the last section contained in a segment. +Elf_Scn* FindLastSectionInSegment(Elf* elf, + ELF::Phdr* program_header, + ELF::Off hole_start, + ssize_t hole_size) { + const ELF::Off segment_end = + program_header->p_offset + program_header->p_filesz; + + Elf_Scn* section = NULL; + Elf_Scn* last_section = NULL; + + while ((section = elf_nextscn(elf, section)) != NULL) { + const ELF::Shdr* section_header = ELF::getshdr(section); + + // As above, 'undo' any section offset adjustment to give a view of the + // original sections layout. + ELF::Off offset = section_header->sh_offset; + if (section_header->sh_offset >= hole_start) { + offset -= hole_size; + } + + if (offset < segment_end) { + last_section = section; + } + } + LOG_IF(FATAL, !last_section) + << "Cannot identify the last section in the given segment"; + + return last_section; +} + +// Helper for ResizeSection(). Order loadable segments by their offsets. +// The crazy linker contains assumptions about loadable segment ordering, +// and it is better if we do not break them. +void SortOrderSensitiveProgramHeaders(ELF::Phdr* program_headers, + size_t count) { + std::vector orderable; + + // Collect together orderable program headers. These are all the LOAD + // segments, and any GNU_STACK that may be present (removed on packing, + // but replaced on unpacking). + for (size_t i = 0; i < count; ++i) { + ELF::Phdr* program_header = &program_headers[i]; + + if (program_header->p_type == PT_LOAD || + program_header->p_type == PT_GNU_STACK) { + orderable.push_back(program_header); + } + } + + // Order these program headers so that any PT_GNU_STACK is last, and + // the LOAD segments that precede it appear in offset order. Uses + // insertion sort. + for (size_t i = 1; i < orderable.size(); ++i) { + for (size_t j = i; j > 0; --j) { + ELF::Phdr* first = orderable[j - 1]; + ELF::Phdr* second = orderable[j]; + + if (!(first->p_type == PT_GNU_STACK || + first->p_offset > second->p_offset)) { + break; + } + std::swap(*first, *second); + } + } +} + +// Helper for ResizeSection(). The GNU_STACK program header is unused in +// Android, so we can repurpose it here. Before packing, the program header +// table contains something like: +// +// Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align +// LOAD 0x000000 0x00000000 0x00000000 0x1efc818 0x1efc818 R E 0x1000 +// LOAD 0x1efd008 0x01efe008 0x01efe008 0x17ec3c 0x1a0324 RW 0x1000 +// DYNAMIC 0x205ec50 0x0205fc50 0x0205fc50 0x00108 0x00108 RW 0x4 +// GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0 +// +// The hole in the file is in the first of these. In order to preserve all +// load addresses, what we do is to turn the GNU_STACK into a new LOAD entry +// that maps segments up to where we created the hole, adjust the first LOAD +// entry so that it maps segments after that, adjust any other program +// headers whose offset is after the hole start, and finally order the LOAD +// segments by offset, to give: +// +// Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align +// LOAD 0x000000 0x00000000 0x00000000 0x14ea4 0x14ea4 R E 0x1000 +// LOAD 0x014ea4 0x00212ea4 0x00212ea4 0x1cea164 0x1cea164 R E 0x1000 +// DYNAMIC 0x1e60c50 0x0205fc50 0x0205fc50 0x00108 0x00108 RW 0x4 +// LOAD 0x1cff008 0x01efe008 0x01efe008 0x17ec3c 0x1a0324 RW 0x1000 +// +// We work out the split points by finding the .rel.dyn or .rela.dyn section +// that contains the hole, and by finding the last section in a given segment. +// +// To unpack, we reverse the above to leave the file as it was originally. +void SplitProgramHeadersForHole(Elf* elf, + ELF::Off hole_start, + ssize_t hole_size) { + CHECK(hole_size < 0); + const ELF::Ehdr* elf_header = ELF::getehdr(elf); + CHECK(elf_header); + + ELF::Phdr* elf_program_header = ELF::getphdr(elf); + CHECK(elf_program_header); + + const size_t program_header_count = elf_header->e_phnum; + + // Locate the segment that we can overwrite to form the new LOAD entry, + // and the segment that we are going to split into two parts. + ELF::Phdr* spliced_header = + FindUnusedGnuStackSegment(elf_program_header, program_header_count); + ELF::Phdr* split_header = + FindFirstLoadSegment(elf_program_header, program_header_count); + + VLOG(1) << "phdr[" << split_header - elf_program_header << "] split"; + VLOG(1) << "phdr[" << spliced_header - elf_program_header << "] new LOAD"; + + // Find the section that contains the hole. We split on the section that + // follows it. + Elf_Scn* holed_section = + FindSectionContainingHole(elf, hole_start, hole_size); + + size_t string_index; + elf_getshdrstrndx(elf, &string_index); + + ELF::Shdr* section_header = ELF::getshdr(holed_section); + std::string name = elf_strptr(elf, string_index, section_header->sh_name); + VLOG(1) << "section " << name << " split after"; + + // Find the last section in the segment we are splitting. + Elf_Scn* last_section = + FindLastSectionInSegment(elf, split_header, hole_start, hole_size); + + section_header = ELF::getshdr(last_section); + name = elf_strptr(elf, string_index, section_header->sh_name); + VLOG(1) << "section " << name << " split end"; + + // Split on the section following the holed one, and up to (but not + // including) the section following the last one in the split segment. + Elf_Scn* split_section = elf_nextscn(elf, holed_section); + LOG_IF(FATAL, !split_section) + << "No section follows the section that contains the hole"; + Elf_Scn* end_section = elf_nextscn(elf, last_section); + LOG_IF(FATAL, !end_section) + << "No section follows the last section in the segment being split"; + + // Split the first portion of split_header into spliced_header. + const ELF::Shdr* split_section_header = ELF::getshdr(split_section); + spliced_header->p_type = split_header->p_type; + spliced_header->p_offset = split_header->p_offset; + spliced_header->p_vaddr = split_header->p_vaddr; + spliced_header->p_paddr = split_header->p_paddr; + CHECK(split_header->p_filesz == split_header->p_memsz); + spliced_header->p_filesz = split_section_header->sh_offset; + spliced_header->p_memsz = split_section_header->sh_offset; + spliced_header->p_flags = split_header->p_flags; + spliced_header->p_align = split_header->p_align; + + // Now rewrite split_header to remove the part we spliced from it. + const ELF::Shdr* end_section_header = ELF::getshdr(end_section); + split_header->p_offset = spliced_header->p_filesz; + CHECK(split_header->p_vaddr == split_header->p_paddr); + split_header->p_vaddr = split_section_header->sh_addr; + split_header->p_paddr = split_section_header->sh_addr; + CHECK(split_header->p_filesz == split_header->p_memsz); + split_header->p_filesz = + end_section_header->sh_offset - spliced_header->p_filesz; + split_header->p_memsz = + end_section_header->sh_offset - spliced_header->p_filesz; + + // Adjust the offsets of all program headers that are not one of the pair + // we just created by splitting. + AdjustProgramHeaderOffsets(elf_program_header, + program_header_count, + spliced_header, + split_header, + hole_start, + hole_size); + + // Finally, order loadable segments by offset/address. The crazy linker + // contains assumptions about loadable segment ordering. + SortOrderSensitiveProgramHeaders(elf_program_header, + program_header_count); +} + +// Helper for ResizeSection(). Undo the work of SplitProgramHeadersForHole(). +void CoalesceProgramHeadersForHole(Elf* elf, + ELF::Off hole_start, + ssize_t hole_size) { + CHECK(hole_size > 0); + const ELF::Ehdr* elf_header = ELF::getehdr(elf); + CHECK(elf_header); + + ELF::Phdr* elf_program_header = ELF::getphdr(elf); + CHECK(elf_program_header); + + const size_t program_header_count = elf_header->e_phnum; + + // Locate the segment that we overwrote to form the new LOAD entry, and + // the segment that we split into two parts on packing. + ELF::Phdr* spliced_header = + FindFirstLoadSegment(elf_program_header, program_header_count); + ELF::Phdr* split_header = + FindOriginalFirstLoadSegment(elf_program_header, program_header_count); + + VLOG(1) << "phdr[" << spliced_header - elf_program_header << "] stack"; + VLOG(1) << "phdr[" << split_header - elf_program_header << "] coalesce"; + + // Find the last section in the second segment we are coalescing. + Elf_Scn* last_section = + FindLastSectionInSegment(elf, split_header, hole_start, hole_size); + + size_t string_index; + elf_getshdrstrndx(elf, &string_index); + + const ELF::Shdr* section_header = ELF::getshdr(last_section); + std::string name = elf_strptr(elf, string_index, section_header->sh_name); + VLOG(1) << "section " << name << " coalesced"; + + // Rewrite the coalesced segment into split_header. + const ELF::Shdr* last_section_header = ELF::getshdr(last_section); + split_header->p_offset = spliced_header->p_offset; + CHECK(split_header->p_vaddr == split_header->p_paddr); + split_header->p_vaddr = spliced_header->p_vaddr; + split_header->p_paddr = spliced_header->p_vaddr; + CHECK(split_header->p_filesz == split_header->p_memsz); + split_header->p_filesz = + last_section_header->sh_offset + last_section_header->sh_size; + split_header->p_memsz = + last_section_header->sh_offset + last_section_header->sh_size; + + // Reconstruct the original GNU_STACK segment into spliced_header. + spliced_header->p_type = PT_GNU_STACK; + spliced_header->p_offset = 0; + spliced_header->p_vaddr = 0; + spliced_header->p_paddr = 0; + spliced_header->p_filesz = 0; + spliced_header->p_memsz = 0; + spliced_header->p_flags = PF_R | PF_W; + spliced_header->p_align = ELF::kGnuStackSegmentAlignment; + + // Adjust the offsets of all program headers that are not one of the pair + // we just coalesced. + AdjustProgramHeaderOffsets(elf_program_header, + program_header_count, + spliced_header, + split_header, + hole_start, + hole_size); + + // Finally, order loadable segments by offset/address. The crazy linker + // contains assumptions about loadable segment ordering. + SortOrderSensitiveProgramHeaders(elf_program_header, + program_header_count); +} + +// Helper for ResizeSection(). Rewrite program headers. +void RewriteProgramHeadersForHole(Elf* elf, + ELF::Off hole_start, + ssize_t hole_size) { + // If hole_size is negative then we are removing a piece of the file, and + // we want to split program headers so that we keep the same addresses + // for text and data. If positive, then we are putting that piece of the + // file back in, so we coalesce the previously split program headers. + if (hole_size < 0) + SplitProgramHeadersForHole(elf, hole_start, hole_size); + else if (hole_size > 0) + CoalesceProgramHeadersForHole(elf, hole_start, hole_size); +} + +// Helper for ResizeSection(). Locate and return the dynamic section. +Elf_Scn* GetDynamicSection(Elf* elf) { + const ELF::Ehdr* elf_header = ELF::getehdr(elf); + CHECK(elf_header); + + const ELF::Phdr* elf_program_header = ELF::getphdr(elf); + CHECK(elf_program_header); + + // Find the program header that describes the dynamic section. + const ELF::Phdr* dynamic_program_header = NULL; + for (size_t i = 0; i < elf_header->e_phnum; ++i) { + const ELF::Phdr* program_header = &elf_program_header[i]; + + if (program_header->p_type == PT_DYNAMIC) { + dynamic_program_header = program_header; + } + } + CHECK(dynamic_program_header); + + // Now find the section with the same offset as this program header. + Elf_Scn* dynamic_section = NULL; + Elf_Scn* section = NULL; + while ((section = elf_nextscn(elf, section)) != NULL) { + ELF::Shdr* section_header = ELF::getshdr(section); + + if (section_header->sh_offset == dynamic_program_header->p_offset) { + dynamic_section = section; + } + } + CHECK(dynamic_section != NULL); + + return dynamic_section; +} + +// Helper for ResizeSection(). Adjust the .dynamic section for the hole. +template +void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section, + ELF::Off hole_start, + ssize_t hole_size) { + Elf_Data* data = GetSectionData(dynamic_section); + + const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( + dynamic_base, + dynamic_base + data->d_size / sizeof(dynamics[0])); + + for (size_t i = 0; i < dynamics.size(); ++i) { + ELF::Dyn* dynamic = &dynamics[i]; + const ELF::Sword tag = dynamic->d_tag; + + // DT_RELSZ or DT_RELASZ indicate the overall size of relocations. + // Only one will be present. Adjust by hole size. + if (tag == DT_RELSZ || tag == DT_RELASZ) { + dynamic->d_un.d_val += hole_size; + VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag + << " d_val adjusted to " << dynamic->d_un.d_val; + } + + // DT_RELCOUNT or DT_RELACOUNT hold the count of relative relocations. + // Only one will be present. Packing reduces it to the alignment + // padding, if any; unpacking restores it to its former value. The + // crazy linker does not use it, but we update it anyway. + if (tag == DT_RELCOUNT || tag == DT_RELACOUNT) { + // Cast sizeof to a signed type to avoid the division result being + // promoted into an unsigned size_t. + const ssize_t sizeof_rel = static_cast(sizeof(Rel)); + dynamic->d_un.d_val += hole_size / sizeof_rel; + VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag + << " d_val adjusted to " << dynamic->d_un.d_val; + } + + // DT_RELENT and DT_RELAENT do not change, but make sure they are what + // we expect. Only one will be present. + if (tag == DT_RELENT || tag == DT_RELAENT) { + CHECK(dynamic->d_un.d_val == sizeof(Rel)); + } + } + + void* section_data = &dynamics[0]; + size_t bytes = dynamics.size() * sizeof(dynamics[0]); + RewriteSectionData(dynamic_section, section_data, bytes); +} + +// Resize a section. If the new size is larger than the current size, open +// up a hole by increasing file offsets that come after the hole. If smaller +// than the current size, remove the hole by decreasing those offsets. +template +void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size) { + ELF::Shdr* section_header = ELF::getshdr(section); + if (section_header->sh_size == new_size) + return; + + // Note if we are resizing the real dyn relocations. + size_t string_index; + elf_getshdrstrndx(elf, &string_index); + const std::string section_name = + elf_strptr(elf, string_index, section_header->sh_name); + const bool is_relocations_resize = + (section_name == ".rel.dyn" || section_name == ".rela.dyn"); + + // Require that the section size and the data size are the same. True + // in practice for all sections we resize when packing or unpacking. + Elf_Data* data = GetSectionData(section); + CHECK(data->d_off == 0 && data->d_size == section_header->sh_size); + + // Require that the section is not zero-length (that is, has allocated + // data that we can validly expand). + CHECK(data->d_size && data->d_buf); + + const ELF::Off hole_start = section_header->sh_offset; + const ssize_t hole_size = new_size - data->d_size; + + VLOG_IF(1, (hole_size > 0)) << "expand section size = " << data->d_size; + VLOG_IF(1, (hole_size < 0)) << "shrink section size = " << data->d_size; + + // Resize the data and the section header. + data->d_size += hole_size; + section_header->sh_size += hole_size; + + // Add the hole size to all offsets in the ELF file that are after the + // start of the hole. If the hole size is positive we are expanding the + // section to create a new hole; if negative, we are closing up a hole. + + // Start with the main ELF header. + ELF::Ehdr* elf_header = ELF::getehdr(elf); + AdjustElfHeaderForHole(elf_header, hole_start, hole_size); + + // Adjust all section headers. + AdjustSectionHeadersForHole(elf, hole_start, hole_size); + + // If resizing the dynamic relocations, rewrite the program headers to + // either split or coalesce segments, and adjust dynamic entries to match. + if (is_relocations_resize) { + RewriteProgramHeadersForHole(elf, hole_start, hole_size); + + Elf_Scn* dynamic_section = GetDynamicSection(elf); + AdjustDynamicSectionForHole(dynamic_section, hole_start, hole_size); + } +} + +// Find the first slot in a dynamics array with the given tag. The array +// always ends with a free (unused) element, and which we exclude from the +// search. Returns dynamics->size() if not found. +size_t FindDynamicEntry(ELF::Sword tag, + std::vector* dynamics) { + // Loop until the penultimate entry. We exclude the end sentinel. + for (size_t i = 0; i < dynamics->size() - 1; ++i) { + if (dynamics->at(i).d_tag == tag) + return i; + } + + // The tag was not found. + return dynamics->size(); +} + +// Replace the first free (unused) slot in a dynamics vector with the given +// value. The vector always ends with a free (unused) element, so the slot +// found cannot be the last one in the vector. +void AddDynamicEntry(const ELF::Dyn& dyn, + std::vector* dynamics) { + const size_t slot = FindDynamicEntry(DT_NULL, dynamics); + if (slot == dynamics->size()) { + LOG(FATAL) << "No spare dynamic array slots found " + << "(to fix, increase gold's --spare-dynamic-tags value)"; + } + + // Replace this entry with the one supplied. + dynamics->at(slot) = dyn; + VLOG(1) << "dynamic[" << slot << "] overwritten with " << dyn.d_tag; +} + +// Remove the element in the dynamics vector that matches the given tag with +// unused slot data. Shuffle the following elements up, and ensure that the +// last is the null sentinel. +void RemoveDynamicEntry(ELF::Sword tag, + std::vector* dynamics) { + const size_t slot = FindDynamicEntry(tag, dynamics); + CHECK(slot != dynamics->size()); + + // Remove this entry by shuffling up everything that follows. + for (size_t i = slot; i < dynamics->size() - 1; ++i) { + dynamics->at(i) = dynamics->at(i + 1); + VLOG(1) << "dynamic[" << i + << "] overwritten with dynamic[" << i + 1 << "]"; + } + + // Ensure that the end sentinel is still present. + CHECK(dynamics->at(dynamics->size() - 1).d_tag == DT_NULL); +} + +// Construct a null relocation without addend. +void NullRelocation(ELF::Rel* relocation) { + relocation->r_offset = 0; + relocation->r_info = ELF_R_INFO(0, ELF::kNoRelocationCode); +} + +// Construct a null relocation with addend. +void NullRelocation(ELF::Rela* relocation) { + relocation->r_offset = 0; + relocation->r_info = ELF_R_INFO(0, ELF::kNoRelocationCode); + relocation->r_addend = 0; +} + +// Pad relocations with the given number of null entries. Generates its +// null entry with the appropriate NullRelocation() invocation. +template +void PadRelocations(size_t count, std::vector* relocations) { + Rel null_relocation; + NullRelocation(&null_relocation); + std::vector padding(count, null_relocation); + relocations->insert(relocations->end(), padding.begin(), padding.end()); +} + +} // namespace + +// Remove relative entries from dynamic relocations and write as packed +// data into android packed relocations. +bool ElfFile::PackRelocations() { + // Load the ELF file into libelf. + if (!Load()) { + LOG(ERROR) << "Failed to load as ELF"; + return false; + } + + // Retrieve the current dynamic relocations section data. + Elf_Data* data = GetSectionData(relocations_section_); + + if (relocations_type_ == REL) { + // Convert data to a vector of relocations. + const ELF::Rel* relocations_base = reinterpret_cast(data->d_buf); + std::vector relocations( + relocations_base, + relocations_base + data->d_size / sizeof(relocations[0])); + + LOG(INFO) << "Relocations : REL"; + return PackTypedRelocations(relocations); + } + + if (relocations_type_ == RELA) { + // Convert data to a vector of relocations with addends. + const ELF::Rela* relocations_base = + reinterpret_cast(data->d_buf); + std::vector relocations( + relocations_base, + relocations_base + data->d_size / sizeof(relocations[0])); + + LOG(INFO) << "Relocations : RELA"; + return PackTypedRelocations(relocations); + } + + NOTREACHED(); + return false; +} + +// Helper for PackRelocations(). Rel type is one of ELF::Rel or ELF::Rela. +template +bool ElfFile::PackTypedRelocations(const std::vector& relocations) { + // Filter relocations into those that are relative and others. + std::vector relative_relocations; + std::vector other_relocations; + + for (size_t i = 0; i < relocations.size(); ++i) { + const Rel& relocation = relocations[i]; + if (ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode) { + CHECK(ELF_R_SYM(relocation.r_info) == 0); + relative_relocations.push_back(relocation); + } else { + other_relocations.push_back(relocation); + } + } + LOG(INFO) << "Relative : " << relative_relocations.size() << " entries"; + LOG(INFO) << "Other : " << other_relocations.size() << " entries"; + LOG(INFO) << "Total : " << relocations.size() << " entries"; + + // If no relative relocations then we have nothing packable. Perhaps + // the shared object has already been packed? + if (relative_relocations.empty()) { + LOG(ERROR) << "No relative relocations found (already packed?)"; + return false; + } + + // If not padding fully, apply only enough padding to preserve alignment. + // Otherwise, pad so that we do not shrink the relocations section at all. + if (!is_padding_relocations_) { + // Calculate the size of the hole we will close up when we rewrite + // dynamic relocations. + ssize_t hole_size = + relative_relocations.size() * sizeof(relative_relocations[0]); + const ssize_t unaligned_hole_size = hole_size; + + // Adjust the actual hole size to preserve alignment. We always adjust + // by a whole number of NONE-type relocations. + while (hole_size % kPreserveAlignment) + hole_size -= sizeof(relative_relocations[0]); + LOG(INFO) << "Compaction : " << hole_size << " bytes"; + + // Adjusting for alignment may have removed any packing benefit. + if (hole_size == 0) { + LOG(INFO) << "Too few relative relocations to pack after alignment"; + return false; + } + + // Find the padding needed in other_relocations to preserve alignment. + // Ensure that we never completely empty the real relocations section. + size_t padding_bytes = unaligned_hole_size - hole_size; + if (padding_bytes == 0 && other_relocations.size() == 0) { + do { + padding_bytes += sizeof(relative_relocations[0]); + } while (padding_bytes % kPreserveAlignment); + } + CHECK(padding_bytes % sizeof(other_relocations[0]) == 0); + const size_t padding = padding_bytes / sizeof(other_relocations[0]); + + // Padding may have removed any packing benefit. + if (padding >= relative_relocations.size()) { + LOG(INFO) << "Too few relative relocations to pack after padding"; + return false; + } + + // Add null relocations to other_relocations to preserve alignment. + PadRelocations(padding, &other_relocations); + LOG(INFO) << "Alignment pad : " << padding << " relocations"; + } else { + // If padding, add NONE-type relocations to other_relocations to make it + // the same size as the the original relocations we read in. This makes + // the ResizeSection() below a no-op. + const size_t padding = relocations.size() - other_relocations.size(); + PadRelocations(padding, &other_relocations); + } + + // Pack relative relocations. + const size_t initial_bytes = + relative_relocations.size() * sizeof(relative_relocations[0]); + LOG(INFO) << "Unpacked relative: " << initial_bytes << " bytes"; + std::vector packed; + RelocationPacker packer; + packer.PackRelativeRelocations(relative_relocations, &packed); + const void* packed_data = &packed[0]; + const size_t packed_bytes = packed.size() * sizeof(packed[0]); + LOG(INFO) << "Packed relative: " << packed_bytes << " bytes"; + + // If we have insufficient relative relocations to form a run then + // packing fails. + if (packed.empty()) { + LOG(INFO) << "Too few relative relocations to pack"; + return false; + } + + // Run a loopback self-test as a check that packing is lossless. + std::vector unpacked; + packer.UnpackRelativeRelocations(packed, &unpacked); + CHECK(unpacked.size() == relative_relocations.size()); + CHECK(!memcmp(&unpacked[0], + &relative_relocations[0], + unpacked.size() * sizeof(unpacked[0]))); + + // Make sure packing saved some space. + if (packed_bytes >= initial_bytes) { + LOG(INFO) << "Packing relative relocations saves no space"; + return false; + } + + // Rewrite the current dynamic relocations section to be only the ARM + // non-relative relocations, then shrink it to size. + const void* section_data = &other_relocations[0]; + const size_t bytes = other_relocations.size() * sizeof(other_relocations[0]); + ResizeSection(elf_, relocations_section_, bytes); + RewriteSectionData(relocations_section_, section_data, bytes); + + // Rewrite the current packed android relocations section to hold the packed + // relative relocations. + ResizeSection(elf_, android_relocations_section_, packed_bytes); + RewriteSectionData(android_relocations_section_, packed_data, packed_bytes); + + // Rewrite .dynamic to include two new tags describing the packed android + // relocations. + Elf_Data* data = GetSectionData(dynamic_section_); + const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( + dynamic_base, + dynamic_base + data->d_size / sizeof(dynamics[0])); + // Use two of the spare slots to describe the packed section. + ELF::Shdr* section_header = ELF::getshdr(android_relocations_section_); + { + ELF::Dyn dyn; + dyn.d_tag = DT_ANDROID_REL_OFFSET; + dyn.d_un.d_ptr = section_header->sh_offset; + AddDynamicEntry(dyn, &dynamics); + } + { + ELF::Dyn dyn; + dyn.d_tag = DT_ANDROID_REL_SIZE; + dyn.d_un.d_val = section_header->sh_size; + AddDynamicEntry(dyn, &dynamics); + } + const void* dynamics_data = &dynamics[0]; + const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]); + RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes); + + Flush(); + return true; +} + +// Find packed relative relocations in the packed android relocations +// section, unpack them, and rewrite the dynamic relocations section to +// contain unpacked data. +bool ElfFile::UnpackRelocations() { + // Load the ELF file into libelf. + if (!Load()) { + LOG(ERROR) << "Failed to load as ELF"; + return false; + } + + // Retrieve the current packed android relocations section data. + Elf_Data* data = GetSectionData(android_relocations_section_); + + // Convert data to a vector of bytes. + const uint8_t* packed_base = reinterpret_cast(data->d_buf); + std::vector packed( + packed_base, + packed_base + data->d_size / sizeof(packed[0])); + + if (packed.size() > 3 && + packed[0] == 'A' && + packed[1] == 'P' && + packed[2] == 'R' && + packed[3] == '1') { + // Signature is APR1, unpack relocations. + CHECK(relocations_type_ == REL); + LOG(INFO) << "Relocations : REL"; + return UnpackTypedRelocations(packed); + } + + if (packed.size() > 3 && + packed[0] == 'A' && + packed[1] == 'P' && + packed[2] == 'A' && + packed[3] == '1') { + // Signature is APA1, unpack relocations with addends. + CHECK(relocations_type_ == RELA); + LOG(INFO) << "Relocations : RELA"; + return UnpackTypedRelocations(packed); + } + + LOG(ERROR) << "Packed relative relocations not found (not packed?)"; + return false; +} + +// Helper for UnpackRelocations(). Rel type is one of ELF::Rel or ELF::Rela. +template +bool ElfFile::UnpackTypedRelocations(const std::vector& packed) { + // Unpack the data to re-materialize the relative relocations. + const size_t packed_bytes = packed.size() * sizeof(packed[0]); + LOG(INFO) << "Packed relative: " << packed_bytes << " bytes"; + std::vector relative_relocations; + RelocationPacker packer; + packer.UnpackRelativeRelocations(packed, &relative_relocations); + const size_t unpacked_bytes = + relative_relocations.size() * sizeof(relative_relocations[0]); + LOG(INFO) << "Unpacked relative: " << unpacked_bytes << " bytes"; + + // Retrieve the current dynamic relocations section data. + Elf_Data* data = GetSectionData(relocations_section_); + + // Interpret data as relocations. + const Rel* relocations_base = reinterpret_cast(data->d_buf); + std::vector relocations( + relocations_base, + relocations_base + data->d_size / sizeof(relocations[0])); + + std::vector other_relocations; + size_t padding = 0; + + // Filter relocations to locate any that are NONE-type. These will occur + // if padding was turned on for packing. + for (size_t i = 0; i < relocations.size(); ++i) { + const Rel& relocation = relocations[i]; + if (ELF_R_TYPE(relocation.r_info) != ELF::kNoRelocationCode) { + other_relocations.push_back(relocation); + } else { + ++padding; + } + } + LOG(INFO) << "Relative : " << relative_relocations.size() << " entries"; + LOG(INFO) << "Other : " << other_relocations.size() << " entries"; + + // If we found the same number of null relocation entries in the dynamic + // relocations section as we hold as unpacked relative relocations, then + // this is a padded file. + const bool is_padded = padding == relative_relocations.size(); + + // Unless padded, report by how much we expand the file. + if (!is_padded) { + // Calculate the size of the hole we will open up when we rewrite + // dynamic relocations. + ssize_t hole_size = + relative_relocations.size() * sizeof(relative_relocations[0]); + + // Adjust the hole size for the padding added to preserve alignment. + hole_size -= padding * sizeof(other_relocations[0]); + LOG(INFO) << "Expansion : " << hole_size << " bytes"; + } + + // Rewrite the current dynamic relocations section to be the relative + // relocations followed by other relocations. This is the usual order in + // which we find them after linking, so this action will normally put the + // entire dynamic relocations section back to its pre-split-and-packed state. + relocations.assign(relative_relocations.begin(), relative_relocations.end()); + relocations.insert(relocations.end(), + other_relocations.begin(), other_relocations.end()); + const void* section_data = &relocations[0]; + const size_t bytes = relocations.size() * sizeof(relocations[0]); + LOG(INFO) << "Total : " << relocations.size() << " entries"; + ResizeSection(elf_, relocations_section_, bytes); + RewriteSectionData(relocations_section_, section_data, bytes); + + // Nearly empty the current packed android relocations section. Leaves a + // four-byte stub so that some data remains allocated to the section. + // This is a convenience which allows us to re-pack this file again without + // having to remove the section and then add a new small one with objcopy. + // The way we resize sections relies on there being some data in a section. + ResizeSection( + elf_, android_relocations_section_, sizeof(kStubIdentifier)); + RewriteSectionData( + android_relocations_section_, &kStubIdentifier, sizeof(kStubIdentifier)); + + // Rewrite .dynamic to remove two tags describing packed android relocations. + data = GetSectionData(dynamic_section_); + const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( + dynamic_base, + dynamic_base + data->d_size / sizeof(dynamics[0])); + RemoveDynamicEntry(DT_ANDROID_REL_OFFSET, &dynamics); + RemoveDynamicEntry(DT_ANDROID_REL_SIZE, &dynamics); + const void* dynamics_data = &dynamics[0]; + const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]); + RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes); + + Flush(); + return true; +} + +// Flush rewritten shared object file data. +void ElfFile::Flush() { + // Flag all ELF data held in memory as needing to be written back to the + // file, and tell libelf that we have controlled the file layout. + elf_flagelf(elf_, ELF_C_SET, ELF_F_DIRTY); + elf_flagelf(elf_, ELF_C_SET, ELF_F_LAYOUT); + + // Write ELF data back to disk. + const off_t file_bytes = elf_update(elf_, ELF_C_WRITE); + CHECK(file_bytes > 0); + VLOG(1) << "elf_update returned: " << file_bytes; + + // Clean up libelf, and truncate the output file to the number of bytes + // written by elf_update(). + elf_end(elf_); + elf_ = NULL; + const int truncate = ftruncate(fd_, file_bytes); + CHECK(truncate == 0); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_file.h b/tools/relocation_packer/src/elf_file.h new file mode 100644 index 000000000..655027497 --- /dev/null +++ b/tools/relocation_packer/src/elf_file.h @@ -0,0 +1,134 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ELF shared object file updates handler. +// +// Provides functions to remove relative relocations from the .rel.dyn +// or .rela.dyn sections and pack into .android.rel.dyn or .android.rela.dyn, +// and unpack to return the file to its pre-packed state. +// +// Files to be packed or unpacked must include an existing .android.rel.dyn +// or android.rela.dyn section. A standard libchrome..so will not +// contain this section, so the following can be used to add one: +// +// echo -n 'NULL' >/tmp/small +// if file libchrome..so | grep -q 'ELF 32'; then +// arm-linux-androideabi-objcopy +// --add-section .android.rel.dyn=/tmp/small +// libchrome..so libchrome..so.packed +// else +// aarch64-linux-android-objcopy +// --add-section .android.rela.dyn=/tmp/small +// libchrome..so libchrome..so.packed +// fi +// rm /tmp/small +// +// To use, open the file and pass the file descriptor to the constructor, +// then pack or unpack as desired. Packing or unpacking will flush the file +// descriptor on success. Example: +// +// int fd = open(..., O_RDWR); +// ElfFile elf_file(fd); +// bool status; +// if (is_packing) +// status = elf_file.PackRelocations(); +// else +// status = elf_file.UnpackRelocations(); +// close(fd); +// +// SetPadding() causes PackRelocations() to pad .rel.dyn or .rela.dyn with +// NONE-type entries rather than cutting a hole out of the shared object +// file. This keeps all load addresses and offsets constant, and enables +// easier debugging and testing. +// +// A packed shared object file has all of its relative relocations +// removed from .rel.dyn or .rela.dyn, and replaced as packed data in +// .android.rel.dyn or .android.rela.dyn respectively. The resulting file +// is shorter than its non-packed original. +// +// Unpacking a packed file restores the file to its non-packed state, by +// expanding the packed data in .android.rel.dyn or .android.rela.dyn, +// combining the relative relocations with the data already in .rel.dyn +// or .rela.dyn, and then writing back the now expanded section. + +#ifndef TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_ +#define TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_ + +#include +#include + +#include "elf.h" +#include "libelf.h" +#include "packer.h" + +namespace relocation_packer { + +// An ElfFile reads shared objects, and shuttles relative relocations +// between .rel.dyn or .rela.dyn and .android.rel.dyn or .android.rela.dyn +// sections. +class ElfFile { + public: + explicit ElfFile(int fd) + : fd_(fd), is_padding_relocations_(false), elf_(NULL), + relocations_section_(NULL), dynamic_section_(NULL), + android_relocations_section_(NULL), relocations_type_(NONE) {} + ~ElfFile() {} + + // Set padding mode. When padding, PackRelocations() will not shrink + // the .rel.dyn or .rela.dyn section, but instead replace relative with + // NONE-type entries. + // |flag| is true to pad .rel.dyn or .rela.dyn, false to shrink it. + inline void SetPadding(bool flag) { is_padding_relocations_ = flag; } + + // Transfer relative relocations from .rel.dyn or .rela.dyn to a packed + // representation in .android.rel.dyn or .android.rela.dyn. Returns true + // on success. + bool PackRelocations(); + + // Transfer relative relocations from a packed representation in + // .android.rel.dyn or .android.rela.dyn to .rel.dyn or .rela.dyn. Returns + // true on success. + bool UnpackRelocations(); + + private: + // Load a new ElfFile from a filedescriptor. If flushing, the file must + // be open for read/write. Returns true on successful ELF file load. + // |fd| is an open file descriptor for the shared object. + bool Load(); + + // Templated packer, helper for PackRelocations(). Rel type is one of + // ELF::Rel or ELF::Rela. + template + bool PackTypedRelocations(const std::vector& relocations); + + // Templated unpacker, helper for UnpackRelocations(). Rel type is one of + // ELF::Rel or ELF::Rela. + template + bool UnpackTypedRelocations(const std::vector& packed); + + // Write ELF file changes. + void Flush(); + + // File descriptor opened on the shared object. + int fd_; + + // If set, pad rather than shrink .rel.dyn or .rela.dyn. Primarily for + // debugging, allows packing to be checked without affecting load addresses. + bool is_padding_relocations_; + + // Libelf handle, assigned by Load(). + Elf* elf_; + + // Sections that we manipulate, assigned by Load(). + Elf_Scn* relocations_section_; + Elf_Scn* dynamic_section_; + Elf_Scn* android_relocations_section_; + + // Relocation type found, assigned by Load(). + enum { NONE = 0, REL, RELA } relocations_type_; +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_ELF_FILE_H_ diff --git a/tools/relocation_packer/src/elf_file_unittest.cc b/tools/relocation_packer/src/elf_file_unittest.cc new file mode 100644 index 000000000..37abd0d95 --- /dev/null +++ b/tools/relocation_packer/src/elf_file_unittest.cc @@ -0,0 +1,164 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "elf_file.h" + +#include +#include +#include +#include +#include +#include "debug.h" +#include "elf_traits.h" +#include "testing/gtest/include/gtest/gtest.h" + +// Macro stringification. +// https://gcc.gnu.org/onlinedocs/cpp/Stringification.html +#define XSTR(S) STR(S) +#define STR(S) #S + +namespace { + +void GetDataFilePath(const char* name, std::string* path) { + std::string data_dir; + + const char* bindir = getenv("bindir"); + if (bindir) { + data_dir = std::string(bindir); + } else { + // Test data is in the gyp INTERMEDIATE_DIR subdirectory of the directory + // that contains the current binary. + char path[PATH_MAX]; + memset(path, 0, sizeof(path)); + ASSERT_NE(-1, readlink("/proc/self/exe", path, sizeof(path) - 1)); + + data_dir = std::string(path); + size_t pos = data_dir.rfind('/'); + ASSERT_NE(std::string::npos, pos); + + data_dir.erase(pos + 1); + data_dir += std::string(XSTR(INTERMEDIATE_DIR)); + } + + *path = data_dir + "/" + name; +} + +void OpenRelocsTestFile(const char* name, FILE** stream) { + std::string path; + GetDataFilePath(name, &path); + + FILE* testfile = fopen(path.c_str(), "rb"); + ASSERT_FALSE(testfile == NULL); + + FILE* temporary = tmpfile(); + ASSERT_FALSE(temporary == NULL); + + static const size_t buffer_size = 4096; + unsigned char buffer[buffer_size]; + + size_t bytes; + do { + bytes = fread(buffer, 1, sizeof(buffer), testfile); + ASSERT_EQ(bytes, fwrite(buffer, 1, bytes, temporary)); + } while (bytes > 0); + + ASSERT_EQ(0, fclose(testfile)); + ASSERT_EQ(0, fseek(temporary, 0, SEEK_SET)); + ASSERT_EQ(0, lseek(fileno(temporary), 0, SEEK_SET)); + + *stream = temporary; +} + +void OpenRelocsTestFiles(FILE** relocs_so, FILE** packed_relocs_so) { + const char* arch = NULL; + if (ELF::kMachine == EM_ARM) { + arch = "arm32"; + } else if (ELF::kMachine == EM_AARCH64) { + arch = "arm64"; + } + ASSERT_FALSE(arch == NULL); + + const std::string base = std::string("elf_file_unittest_relocs_") + arch; + const std::string relocs = base + ".so"; + const std::string packed_relocs = base + "_packed.so"; + + OpenRelocsTestFile(relocs.c_str(), relocs_so); + OpenRelocsTestFile(packed_relocs.c_str(), packed_relocs_so); +} + +void CloseRelocsTestFile(FILE* temporary) { + fclose(temporary); +} + +void CloseRelocsTestFiles(FILE* relocs_so, FILE* packed_relocs_so) { + CloseRelocsTestFile(relocs_so); + CloseRelocsTestFile(packed_relocs_so); +} + +void CheckFileContentsEqual(FILE* first, FILE* second) { + ASSERT_EQ(0, fseek(first, 0, SEEK_SET)); + ASSERT_EQ(0, fseek(second, 0, SEEK_SET)); + + static const size_t buffer_size = 4096; + unsigned char first_buffer[buffer_size]; + unsigned char second_buffer[buffer_size]; + + do { + size_t first_read = fread(first_buffer, 1, sizeof(first_buffer), first); + size_t second_read = fread(second_buffer, 1, sizeof(second_buffer), second); + + EXPECT_EQ(first_read, second_read); + EXPECT_EQ(0, memcmp(first_buffer, second_buffer, first_read)); + } while (!feof(first) && !feof(second)); + + EXPECT_TRUE(feof(first) && feof(second)); +} + +} // namespace + +namespace relocation_packer { + +TEST(ElfFile, PackRelocations) { + ASSERT_NE(EV_NONE, elf_version(EV_CURRENT)); + + FILE* relocs_so = NULL; + FILE* packed_relocs_so = NULL; + OpenRelocsTestFiles(&relocs_so, &packed_relocs_so); + if (HasFatalFailure()) + return; + + ElfFile elf_file(fileno(relocs_so)); + + // Ensure unpacking fails (not packed). + EXPECT_FALSE(elf_file.UnpackRelocations()); + + // Pack relocations, and check files are now identical. + EXPECT_TRUE(elf_file.PackRelocations()); + CheckFileContentsEqual(relocs_so, packed_relocs_so); + + CloseRelocsTestFiles(relocs_so, packed_relocs_so); +} + +TEST(ElfFile, UnpackRelocations) { + ASSERT_NE(EV_NONE, elf_version(EV_CURRENT)); + + FILE* relocs_so = NULL; + FILE* packed_relocs_so = NULL; + OpenRelocsTestFiles(&relocs_so, &packed_relocs_so); + if (HasFatalFailure()) + return; + + ElfFile elf_file(fileno(packed_relocs_so)); + + // Ensure packing fails (already packed). + EXPECT_FALSE(elf_file.PackRelocations()); + + // Unpack golden relocations, and check files are now identical. + EXPECT_TRUE(elf_file.UnpackRelocations()); + CheckFileContentsEqual(packed_relocs_so, relocs_so); + + CloseRelocsTestFiles(relocs_so, packed_relocs_so); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_traits.h b/tools/relocation_packer/src/elf_traits.h new file mode 100644 index 000000000..f099bab60 --- /dev/null +++ b/tools/relocation_packer/src/elf_traits.h @@ -0,0 +1,105 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Target-specific ELF type traits. + +#ifndef TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ +#define TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ + +#include "elf.h" +#include "libelf.h" + +// The TARGET_ macro controls which Elf types we expect and handle. +// Either TARGET_ARM or TARGET_ARM64 must be defined, but not both. + +#if !defined(TARGET_ARM) && !defined(TARGET_ARM64) +# error "Unsupported target, define one of TARGET_ARM or TARGET_ARM64" +#elif defined(TARGET_ARM) && defined(TARGET_ARM64) +# error "Define one of TARGET_ARM or TARGET_ARM64, but not both" +#endif + +// TODO(simonb): Eliminate these once AARCH64 appears reliably in elf.h. +#ifndef EM_AARCH64 +#define EM_AARCH64 183 +#endif +#ifndef R_AARCH64_RELATIVE +#define R_AARCH64_RELATIVE 1027 +#endif +#ifndef R_AARCH64_NONE +#define R_AARCH64_NONE 0 +#endif + +// ELF is a traits structure used to provide convenient aliases for +// 32/64 bit Elf types and functions, depending on the target specified. + +#if defined(TARGET_ARM) +struct ELF { + typedef Elf32_Addr Addr; + typedef Elf32_Dyn Dyn; + typedef Elf32_Ehdr Ehdr; + typedef Elf32_Off Off; + typedef Elf32_Phdr Phdr; + typedef Elf32_Rel Rel; + typedef Elf32_Rela Rela; + typedef Elf32_Shdr Shdr; + typedef Elf32_Sword Sword; + typedef Elf32_Sxword Sxword; + typedef Elf32_Sym Sym; + typedef Elf32_Word Word; + typedef Elf32_Xword Xword; + + static inline Ehdr* getehdr(Elf* elf) { return elf32_getehdr(elf); } + static inline Phdr* getphdr(Elf* elf) { return elf32_getphdr(elf); } + static inline Shdr* getshdr(Elf_Scn* scn) { return elf32_getshdr(scn); } + + enum { kMachine = EM_ARM }; + enum { kFileClass = ELFCLASS32 }; + enum { kRelativeRelocationCode = R_ARM_RELATIVE }; + enum { kNoRelocationCode = R_ARM_NONE }; + enum { kGnuStackSegmentAlignment = 0 }; + + static inline const char* Machine() { return "ARM"; } + +# define ELF_R_SYM(val) ELF32_R_SYM(val) +# define ELF_R_TYPE(val) ELF32_R_TYPE(val) +# define ELF_R_INFO(sym, type) ELF32_R_INFO(sym, type) +# define ELF_ST_TYPE(val) ELF32_ST_TYPE(val) +}; + +#elif defined(TARGET_ARM64) +struct ELF { + typedef Elf64_Addr Addr; + typedef Elf64_Dyn Dyn; + typedef Elf64_Ehdr Ehdr; + typedef Elf64_Off Off; + typedef Elf64_Phdr Phdr; + typedef Elf64_Rel Rel; + typedef Elf64_Rela Rela; + typedef Elf64_Shdr Shdr; + typedef Elf64_Sword Sword; + typedef Elf64_Sxword Sxword; + typedef Elf64_Sym Sym; + typedef Elf64_Word Word; + typedef Elf64_Xword Xword; + + static inline Ehdr* getehdr(Elf* elf) { return elf64_getehdr(elf); } + static inline Phdr* getphdr(Elf* elf) { return elf64_getphdr(elf); } + static inline Shdr* getshdr(Elf_Scn* scn) { return elf64_getshdr(scn); } + + enum { kMachine = EM_AARCH64 }; + enum { kFileClass = ELFCLASS64 }; + enum { kRelativeRelocationCode = R_AARCH64_RELATIVE }; + enum { kNoRelocationCode = R_AARCH64_NONE }; + enum { kGnuStackSegmentAlignment = 16 }; + + static inline const char* Machine() { return "ARM64"; } + +# define ELF_R_SYM(val) ELF64_R_SYM(val) +# define ELF_R_TYPE(val) ELF64_R_TYPE(val) +# define ELF_R_INFO(sym, type) ELF64_R_INFO(sym, type) +# define ELF_ST_TYPE(val) ELF64_ST_TYPE(val) +}; +#endif + +#endif // TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ diff --git a/tools/relocation_packer/src/leb128.cc b/tools/relocation_packer/src/leb128.cc new file mode 100644 index 000000000..b48739c32 --- /dev/null +++ b/tools/relocation_packer/src/leb128.cc @@ -0,0 +1,69 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "leb128.h" + +#include +#include + +#include "elf_traits.h" + +namespace relocation_packer { + +// Empty constructor and destructor to silence chromium-style. +Leb128Encoder::Leb128Encoder() { } +Leb128Encoder::~Leb128Encoder() { } + +// Add a single value to the encoding. Values are encoded with variable +// length. The least significant 7 bits of each byte hold 7 bits of data, +// and the most significant bit is set on each byte except the last. +void Leb128Encoder::Enqueue(ELF::Xword value) { + do { + const uint8_t byte = value & 127; + value >>= 7; + encoding_.push_back((value ? 128 : 0) | byte); + } while (value); +} + +// Add a vector of values to the encoding. +void Leb128Encoder::EnqueueAll(const std::vector& values) { + for (size_t i = 0; i < values.size(); ++i) + Enqueue(values[i]); +} + +// Create a new decoder for the given encoded stream. +Leb128Decoder::Leb128Decoder(const std::vector& encoding) { + encoding_ = encoding; + cursor_ = 0; +} + +// Empty destructor to silence chromium-style. +Leb128Decoder::~Leb128Decoder() { } + +// Decode and retrieve a single value from the encoding. Read forwards until +// a byte without its most significant bit is found, then read the 7 bit +// fields of the bytes spanned to re-form the value. +ELF::Xword Leb128Decoder::Dequeue() { + ELF::Xword value = 0; + + size_t shift = 0; + uint8_t byte; + + // Loop until we reach a byte with its high order bit clear. + do { + byte = encoding_[cursor_++]; + value |= static_cast(byte & 127) << shift; + shift += 7; + } while (byte & 128); + + return value; +} + +// Decode and retrieve all remaining values from the encoding. +void Leb128Decoder::DequeueAll(std::vector* values) { + while (cursor_ < encoding_.size()) + values->push_back(Dequeue()); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/leb128.h b/tools/relocation_packer/src/leb128.h new file mode 100644 index 000000000..6cc2d7caf --- /dev/null +++ b/tools/relocation_packer/src/leb128.h @@ -0,0 +1,74 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// LEB128 encoder and decoder for packed relative relocations. +// +// Run-length encoded relative relocations consist of a large number +// of pairs of relatively small positive integer values. Encoding these as +// LEB128 saves space. +// +// For more on LEB128 see http://en.wikipedia.org/wiki/LEB128. + +#ifndef TOOLS_RELOCATION_PACKER_SRC_LEB128_H_ +#define TOOLS_RELOCATION_PACKER_SRC_LEB128_H_ + +#include +#include + +#include "elf_traits.h" + +namespace relocation_packer { + +// Encode packed words as a LEB128 byte stream. +class Leb128Encoder { + public: + // Explicit (but empty) constructor and destructor, for chromium-style. + Leb128Encoder(); + ~Leb128Encoder(); + + // Add a value to the encoding stream. + // |value| is the unsigned int to add. + void Enqueue(ELF::Xword value); + + // Add a vector of values to the encoding stream. + // |values| is the vector of unsigned ints to add. + void EnqueueAll(const std::vector& values); + + // Retrieve the encoded representation of the values. + // |encoding| is the returned vector of encoded data. + void GetEncoding(std::vector* encoding) { *encoding = encoding_; } + + private: + // Growable vector holding the encoded LEB128 stream. + std::vector encoding_; +}; + +// Decode a LEB128 byte stream to produce packed words. +class Leb128Decoder { + public: + // Create a new decoder for the given encoded stream. + // |encoding| is the vector of encoded data. + explicit Leb128Decoder(const std::vector& encoding); + + // Explicit (but empty) destructor, for chromium-style. + ~Leb128Decoder(); + + // Retrieve the next value from the encoded stream. + ELF::Xword Dequeue(); + + // Retrieve all remaining values from the encoded stream. + // |values| is the vector of decoded data. + void DequeueAll(std::vector* values); + + private: + // Encoded LEB128 stream. + std::vector encoding_; + + // Cursor indicating the current stream retrieval point. + size_t cursor_; +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_LEB128_H_ diff --git a/tools/relocation_packer/src/leb128_unittest.cc b/tools/relocation_packer/src/leb128_unittest.cc new file mode 100644 index 000000000..bd607b717 --- /dev/null +++ b/tools/relocation_packer/src/leb128_unittest.cc @@ -0,0 +1,111 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "leb128.h" + +#include +#include "testing/gtest/include/gtest/gtest.h" + +namespace relocation_packer { + +TEST(Leb128, Encoder) { + std::vector values; + values.push_back(624485); + values.push_back(0); + values.push_back(1); + values.push_back(127); + values.push_back(128); + + Leb128Encoder encoder; + encoder.EnqueueAll(values); + + encoder.Enqueue(4294967295); + encoder.Enqueue(18446744073709551615ul); + + std::vector encoding; + encoder.GetEncoding(&encoding); + + EXPECT_EQ(23, encoding.size()); + // 624485 + EXPECT_EQ(0xe5, encoding[0]); + EXPECT_EQ(0x8e, encoding[1]); + EXPECT_EQ(0x26, encoding[2]); + // 0 + EXPECT_EQ(0x00, encoding[3]); + // 1 + EXPECT_EQ(0x01, encoding[4]); + // 127 + EXPECT_EQ(0x7f, encoding[5]); + // 128 + EXPECT_EQ(0x80, encoding[6]); + EXPECT_EQ(0x01, encoding[7]); + // 4294967295 + EXPECT_EQ(0xff, encoding[8]); + EXPECT_EQ(0xff, encoding[9]); + EXPECT_EQ(0xff, encoding[10]); + EXPECT_EQ(0xff, encoding[11]); + EXPECT_EQ(0x0f, encoding[12]); + // 18446744073709551615 + EXPECT_EQ(0xff, encoding[13]); + EXPECT_EQ(0xff, encoding[14]); + EXPECT_EQ(0xff, encoding[15]); + EXPECT_EQ(0xff, encoding[16]); + EXPECT_EQ(0xff, encoding[17]); + EXPECT_EQ(0xff, encoding[18]); + EXPECT_EQ(0xff, encoding[19]); + EXPECT_EQ(0xff, encoding[20]); + EXPECT_EQ(0xff, encoding[21]); + EXPECT_EQ(0x01, encoding[22]); +} + +TEST(Leb128, Decoder) { + std::vector encoding; + // 624485 + encoding.push_back(0xe5); + encoding.push_back(0x8e); + encoding.push_back(0x26); + // 0 + encoding.push_back(0x00); + // 1 + encoding.push_back(0x01); + // 127 + encoding.push_back(0x7f); + // 128 + encoding.push_back(0x80); + encoding.push_back(0x01); + // 4294967295 + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0x0f); + // 18446744073709551615 + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0x01); + + Leb128Decoder decoder(encoding); + + EXPECT_EQ(624485, decoder.Dequeue()); + + std::vector dequeued; + decoder.DequeueAll(&dequeued); + + EXPECT_EQ(6, dequeued.size()); + EXPECT_EQ(0, dequeued[0]); + EXPECT_EQ(1, dequeued[1]); + EXPECT_EQ(127, dequeued[2]); + EXPECT_EQ(128, dequeued[3]); + EXPECT_EQ(4294967295, dequeued[4]); + EXPECT_EQ(18446744073709551615ul, dequeued[5]); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/main.cc b/tools/relocation_packer/src/main.cc new file mode 100644 index 000000000..28f5b0469 --- /dev/null +++ b/tools/relocation_packer/src/main.cc @@ -0,0 +1,175 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Tool to pack and unpack relative relocations in a shared library. +// +// Packing removes relative relocations from .rel.dyn and writes them +// in a more compact form to .android.rel.dyn. Unpacking does the reverse. +// +// Invoke with -v to trace actions taken when packing or unpacking. +// Invoke with -p to pad removed relocations with R_*_NONE. Suppresses +// shrinking of .rel.dyn. +// See PrintUsage() below for full usage details. +// +// NOTE: Breaks with libelf 0.152, which is buggy. libelf 0.158 works. + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "elf_file.h" +#include "libelf.h" + +namespace { + +void PrintUsage(const char* argv0) { + std::string temporary = argv0; + const size_t last_slash = temporary.find_last_of("/"); + if (last_slash != temporary.npos) { + temporary.erase(0, last_slash + 1); + } + const char* basename = temporary.c_str(); + + printf( + "Usage: %s [-u] [-v] [-p] file\n\n" + "Pack or unpack relative relocations in a shared library.\n\n" + " -u, --unpack unpack previously packed relative relocations\n" + " -v, --verbose trace object file modifications (for debugging)\n" + " -p, --pad do not shrink relocations, but pad (for debugging)\n\n", + basename); + + if (ELF::kMachine == EM_ARM) { + printf( + "Extracts relative relocations from the .rel.dyn section, packs them\n" + "into a more compact format, and stores the packed relocations in\n" + ".android.rel.dyn. Expands .android.rel.dyn to hold the packed\n" + "data, and shrinks .rel.dyn by the amount of unpacked data removed\n" + "from it.\n\n" + "Before being packed, a shared library needs to be prepared by adding\n" + "a null .android.rel.dyn section.\n\n" + "To pack relocations in a shared library:\n\n" + " echo -n 'NULL' >/tmp/small\n" + " arm-linux-androideabi-objcopy \\\n" + " --add-section .android.rel.dyn=/tmp/small \\\n" + " libchrome..so\n" + " rm /tmp/small\n" + " %s libchrome..so\n\n" + "To unpack and restore the shared library to its original state:\n\n" + " %s -u libchrome..so\n" + " arm-linux-androideabi-objcopy \\\n" + " --remove-section=.android.rel.dyn libchrome..so\n\n", + basename, basename); + } else if (ELF::kMachine == EM_AARCH64) { + printf( + "Extracts relative relocations from the .rela.dyn section, packs them\n" + "into a more compact format, and stores the packed relocations in\n" + ".android.rela.dyn. Expands .android.rela.dyn to hold the packed\n" + "data, and shrinks .rela.dyn by the amount of unpacked data removed\n" + "from it.\n\n" + "Before being packed, a shared library needs to be prepared by adding\n" + "a null .android.rela.dyn section.\n\n" + "To pack relocations in a shared library:\n\n" + " echo -n 'NULL' >/tmp/small\n" + " aarch64-linux-android-objcopy \\\n" + " --add-section .android.rela.dyn=/tmp/small \\\n" + " libchrome..so\n" + " rm /tmp/small\n" + " %s libchrome..so\n\n" + "To unpack and restore the shared library to its original state:\n\n" + " %s -u libchrome..so\n" + " aarch64-linux-android-objcopy \\\n" + " --remove-section=.android.rela.dyn libchrome..so\n\n", + basename, basename); + } else { + NOTREACHED(); + } + + printf( + "Debug sections are not handled, so packing should not be used on\n" + "shared libraries compiled for debugging or otherwise unstripped.\n"); +} + +} // namespace + +int main(int argc, char* argv[]) { + bool is_unpacking = false; + bool is_verbose = false; + bool is_padding = false; + + static const option options[] = { + {"unpack", 0, 0, 'u'}, {"verbose", 0, 0, 'v'}, {"pad", 0, 0, 'p'}, + {"help", 0, 0, 'h'}, {NULL, 0, 0, 0} + }; + bool has_options = true; + while (has_options) { + int c = getopt_long(argc, argv, "uvph", options, NULL); + switch (c) { + case 'u': + is_unpacking = true; + break; + case 'v': + is_verbose = true; + break; + case 'p': + is_padding = true; + break; + case 'h': + PrintUsage(argv[0]); + return 0; + case '?': + LOG(INFO) << "Try '" << argv[0] << " --help' for more information."; + return 1; + case -1: + has_options = false; + break; + default: + NOTREACHED(); + return 1; + } + } + if (optind != argc - 1) { + LOG(INFO) << "Try '" << argv[0] << " --help' for more information."; + return 1; + } + + if (elf_version(EV_CURRENT) == EV_NONE) { + LOG(WARNING) << "Elf Library is out of date!"; + } + + LOG(INFO) << "Configured for " << ELF::Machine(); + + const char* file = argv[argc - 1]; + const int fd = open(file, O_RDWR); + if (fd == -1) { + LOG(ERROR) << file << ": " << strerror(errno); + return 1; + } + + if (is_verbose) + relocation_packer::Logger::SetVerbose(1); + + relocation_packer::ElfFile elf_file(fd); + elf_file.SetPadding(is_padding); + + bool status; + if (is_unpacking) + status = elf_file.UnpackRelocations(); + else + status = elf_file.PackRelocations(); + + close(fd); + + if (!status) { + LOG(ERROR) << file << ": failed to pack/unpack file"; + return 1; + } + + return 0; +} diff --git a/tools/relocation_packer/src/packer.cc b/tools/relocation_packer/src/packer.cc new file mode 100644 index 000000000..29bec1e3c --- /dev/null +++ b/tools/relocation_packer/src/packer.cc @@ -0,0 +1,124 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "packer.h" + +#include + +#include "debug.h" +#include "delta_encoder.h" +#include "elf_traits.h" +#include "leb128.h" +#include "run_length_encoder.h" +#include "sleb128.h" + +namespace relocation_packer { + +// Pack relative relocations into a run-length encoded packed +// representation. +void RelocationPacker::PackRelativeRelocations( + const std::vector& relocations, + std::vector* packed) { + // Run-length encode. + std::vector packed_words; + RelocationRunLengthCodec codec; + codec.Encode(relocations, &packed_words); + + // If insufficient data to run-length encode, do nothing. + if (packed_words.empty()) + return; + + // LEB128 encode, with "APR1" prefix. + Leb128Encoder encoder; + encoder.Enqueue('A'); + encoder.Enqueue('P'); + encoder.Enqueue('R'); + encoder.Enqueue('1'); + encoder.EnqueueAll(packed_words); + + encoder.GetEncoding(packed); + + // Pad packed to a whole number of words. This padding will decode as + // LEB128 zeroes. Run-length decoding ignores it because encoding + // embeds the pairs count in the stream itself. + while (packed->size() % sizeof(ELF::Word)) + packed->push_back(0); +} + +// Unpack relative relocations from a run-length encoded packed +// representation. +void RelocationPacker::UnpackRelativeRelocations( + const std::vector& packed, + std::vector* relocations) { + // LEB128 decode, after checking and stripping "APR1" prefix. + std::vector packed_words; + Leb128Decoder decoder(packed); + CHECK(decoder.Dequeue() == 'A' && + decoder.Dequeue() == 'P' && + decoder.Dequeue() == 'R' && + decoder.Dequeue() == '1'); + decoder.DequeueAll(&packed_words); + + // Run-length decode. + RelocationRunLengthCodec codec; + codec.Decode(packed_words, relocations); +} + +// Pack relative relocations with addends into a delta encoded packed +// representation. +void RelocationPacker::PackRelativeRelocations( + const std::vector& relocations, + std::vector* packed) { + // Delta encode. + std::vector packed_words; + RelocationDeltaCodec codec; + codec.Encode(relocations, &packed_words); + + // If insufficient data to delta encode, do nothing. + if (packed_words.empty()) + return; + + // Signed LEB128 encode, with "APA1" prefix. ASCII does not encode as + // itself under signed LEB128, so we have to treat it specially. + Sleb128Encoder encoder; + encoder.EnqueueAll(packed_words); + std::vector encoded; + encoder.GetEncoding(&encoded); + + packed->push_back('A'); + packed->push_back('P'); + packed->push_back('A'); + packed->push_back('1'); + packed->insert(packed->end(), encoded.begin(), encoded.end()); + + // Pad packed to a whole number of words. This padding will decode as + // signed LEB128 zeroes. Delta decoding ignores it because encoding + // embeds the pairs count in the stream itself. + while (packed->size() % sizeof(ELF::Word)) + packed->push_back(0); +} + +// Unpack relative relocations with addends from a delta encoded +// packed representation. +void RelocationPacker::UnpackRelativeRelocations( + const std::vector& packed, + std::vector* relocations) { + // Check "APA1" prefix. + CHECK(packed.at(0) == 'A' && + packed.at(1) == 'P' && + packed.at(2) == 'A' && + packed.at(3) == '1'); + + // Signed LEB128 decode, after stripping "APA1" prefix. + std::vector packed_words; + std::vector stripped(packed.begin() + 4, packed.end()); + Sleb128Decoder decoder(stripped); + decoder.DequeueAll(&packed_words); + + // Delta decode. + RelocationDeltaCodec codec; + codec.Decode(packed_words, relocations); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/packer.h b/tools/relocation_packer/src/packer.h new file mode 100644 index 000000000..db09ce8cc --- /dev/null +++ b/tools/relocation_packer/src/packer.h @@ -0,0 +1,78 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Pack relative relocations into a more compact form. +// +// +// For relative relocations without addends (32 bit platforms) +// ----------------------------------------------------------- +// +// Applies two packing strategies. The first is run-length encoding, which +// turns a large set of relative relocations into a much smaller set +// of delta-count pairs, prefixed with a two-word header comprising the +// count of pairs and the initial relocation offset. The second is LEB128 +// encoding, which compresses the result of run-length encoding. +// +// Once packed, data is prefixed by an identifier that allows for any later +// versioning of packing strategies. +// +// A complete packed stream of relocations without addends might look +// something like: +// +// "APR1" pairs init_offset count1 delta1 count2 delta2 ... +// 41505231 f2b003 b08ac716 e001 04 01 10 ... +// +// +// For relative relocations with addends (64 bit platforms) +// -------------------------------------------------------- +// +// Applies two packing strategies. The first is delta encoding, which +// turns a large set of relative relocations into a smaller set +// of offset and addend delta pairs, prefixed with a header indicating the +// count of pairs. The second is signed LEB128 encoding, which compacts +// the result of delta encoding. +// +// Once packed, data is prefixed by an identifier that allows for any later +// versioning of packing strategies. +// +// A complete packed stream might look something like: +// +// "APA1" pairs offset_d1 addend_d1 offset_d2 addend_d2 ... +// 41505232 f2b018 04 28 08 9f01 ... + +#ifndef TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ +#define TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ + +#include +#include + +#include "elf.h" +#include "elf_traits.h" + +namespace relocation_packer { + +// A RelocationPacker packs vectors of relative relocations into more +// compact forms, and unpacks them to reproduce the pre-packed data. +class RelocationPacker { + public: + // Pack relative relocations into a more compact form. + // |relocations| is a vector of relative relocation structs. + // |packed| is the vector of packed bytes into which relocations are packed. + static void PackRelativeRelocations(const std::vector& relocations, + std::vector* packed); + static void PackRelativeRelocations(const std::vector& relocations, + std::vector* packed); + + // Unpack relative relocations from their more compact form. + // |packed| is the vector of packed relocations. + // |relocations| is a vector of unpacked relative relocation structs. + static void UnpackRelativeRelocations(const std::vector& packed, + std::vector* relocations); + static void UnpackRelativeRelocations(const std::vector& packed, + std::vector* relocations); +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_PACKER_H_ diff --git a/tools/relocation_packer/src/packer_unittest.cc b/tools/relocation_packer/src/packer_unittest.cc new file mode 100644 index 000000000..de5be7979 --- /dev/null +++ b/tools/relocation_packer/src/packer_unittest.cc @@ -0,0 +1,250 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "packer.h" + +#include +#include "elf.h" +#include "elf_traits.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +void AddRelocation(ELF::Addr addr, std::vector* relocations) { + ELF::Rel relocation; + relocation.r_offset = addr; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocations->push_back(relocation); +} + +bool CheckRelocation(ELF::Addr addr, const ELF::Rel& relocation) { + return relocation.r_offset == addr && + ELF_R_SYM(relocation.r_info) == 0 && + ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode; +} + +void AddRelocation(ELF::Addr addr, + ELF::Sxword addend, + std::vector* relocations) { + ELF::Rela relocation; + relocation.r_offset = addr; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocation.r_addend = addend; + relocations->push_back(relocation); +} + +bool CheckRelocation(ELF::Addr addr, + ELF::Sxword addend, + const ELF::Rela& relocation) { + return relocation.r_offset == addr && + ELF_R_SYM(relocation.r_info) == 0 && + ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode && + relocation.r_addend == addend; +} + +} // namespace + +namespace relocation_packer { + +TEST(Packer, PackRel) { + std::vector relocations; + std::vector packed; + + RelocationPacker packer; + + // Initial relocation. + AddRelocation(0xd1ce0000, &relocations); + // Two more relocations, 4 byte deltas. + AddRelocation(0xd1ce0004, &relocations); + AddRelocation(0xd1ce0008, &relocations); + // Three more relocations, 8 byte deltas. + AddRelocation(0xd1ce0010, &relocations); + AddRelocation(0xd1ce0018, &relocations); + AddRelocation(0xd1ce0020, &relocations); + + packed.clear(); + packer.PackRelativeRelocations(relocations, &packed); + + EXPECT_EQ(16, packed.size()); + // Identifier. + EXPECT_EQ('A', packed[0]); + EXPECT_EQ('P', packed[1]); + EXPECT_EQ('R', packed[2]); + EXPECT_EQ('1', packed[3]); + // Count-delta pairs count. + EXPECT_EQ(2, packed[4]); + // 0xd1ce0000 + EXPECT_EQ(128, packed[5]); + EXPECT_EQ(128, packed[6]); + EXPECT_EQ(184, packed[7]); + EXPECT_EQ(142, packed[8]); + EXPECT_EQ(13, packed[9]); + // Run of two relocations, 4 byte deltas. + EXPECT_EQ(2, packed[10]); + EXPECT_EQ(4, packed[11]); + // Run of three relocations, 8 byte deltas. + EXPECT_EQ(3, packed[12]); + EXPECT_EQ(8, packed[13]); + // Padding. + EXPECT_EQ(0, packed[14]); + EXPECT_EQ(0, packed[15]); +} + +TEST(Packer, UnpackRel) { + std::vector packed; + std::vector relocations; + + RelocationPacker packer; + + // Identifier. + packed.push_back('A'); + packed.push_back('P'); + packed.push_back('R'); + packed.push_back('1'); + // Count-delta pairs count. + packed.push_back(2); + // 0xd1ce0000 + packed.push_back(128); + packed.push_back(128); + packed.push_back(184); + packed.push_back(142); + packed.push_back(13); + // Run of two relocations, 4 byte deltas. + packed.push_back(2); + packed.push_back(4); + // Run of three relocations, 8 byte deltas. + packed.push_back(3); + packed.push_back(8); + // Padding. + packed.push_back(0); + packed.push_back(0); + + relocations.clear(); + packer.UnpackRelativeRelocations(packed, &relocations); + + EXPECT_EQ(6, relocations.size()); + // Initial relocation. + EXPECT_TRUE(CheckRelocation(0xd1ce0000, relocations[0])); + // Two relocations, 4 byte deltas. + EXPECT_TRUE(CheckRelocation(0xd1ce0004, relocations[1])); + EXPECT_TRUE(CheckRelocation(0xd1ce0008, relocations[2])); + // Three relocations, 8 byte deltas. + EXPECT_TRUE(CheckRelocation(0xd1ce0010, relocations[3])); + EXPECT_TRUE(CheckRelocation(0xd1ce0018, relocations[4])); + EXPECT_TRUE(CheckRelocation(0xd1ce0020, relocations[5])); +} + +TEST(Packer, PackRela) { + std::vector relocations; + std::vector packed; + + RelocationPacker packer; + + // Initial relocation. + AddRelocation(0xd1ce0000, 10000, &relocations); + // Two more relocations, 4 byte offset deltas, 12 byte addend deltas. + AddRelocation(0xd1ce0004, 10012, &relocations); + AddRelocation(0xd1ce0008, 10024, &relocations); + // Three more relocations, 8 byte deltas, -24 byte addend deltas. + AddRelocation(0xd1ce0010, 10000, &relocations); + AddRelocation(0xd1ce0018, 9976, &relocations); + AddRelocation(0xd1ce0020, 9952, &relocations); + + packed.clear(); + packer.PackRelativeRelocations(relocations, &packed); + + EXPECT_EQ(24, packed.size()); + // Identifier. + EXPECT_EQ('A', packed[0]); + EXPECT_EQ('P', packed[1]); + EXPECT_EQ('A', packed[2]); + EXPECT_EQ('1', packed[3]); + // Delta pairs count. + EXPECT_EQ(6, packed[4]); + // 0xd1ce0000 + EXPECT_EQ(128, packed[5]); + EXPECT_EQ(128, packed[6]); + EXPECT_EQ(184, packed[7]); + EXPECT_EQ(142, packed[8]); + EXPECT_EQ(13, packed[9]); + // 10000 + EXPECT_EQ(144, packed[10]); + EXPECT_EQ(206, packed[11]); + EXPECT_EQ(0, packed[12]); + // 4, 12 + EXPECT_EQ(4, packed[13]); + EXPECT_EQ(12, packed[14]); + // 4, 12 + EXPECT_EQ(4, packed[15]); + EXPECT_EQ(12, packed[16]); + // 8, -24 + EXPECT_EQ(8, packed[17]); + EXPECT_EQ(104, packed[18]); + // 8, -24 + EXPECT_EQ(8, packed[19]); + EXPECT_EQ(104, packed[20]); + // 8, -24 + EXPECT_EQ(8, packed[21]); + EXPECT_EQ(104, packed[22]); + // Padding. + EXPECT_EQ(0, packed[23]); +} + +TEST(Packer, UnpackRela) { + std::vector packed; + std::vector relocations; + + RelocationPacker packer; + + // Identifier. + packed.push_back('A'); + packed.push_back('P'); + packed.push_back('A'); + packed.push_back('1'); + // Delta pairs count. + packed.push_back(6); + // 0xd1ce0000 + packed.push_back(128); + packed.push_back(128); + packed.push_back(184); + packed.push_back(142); + packed.push_back(13); + // 10000 + packed.push_back(144); + packed.push_back(206); + packed.push_back(0); + // 4, 12 + packed.push_back(4); + packed.push_back(12); + // 4, 12 + packed.push_back(4); + packed.push_back(12); + // 8, -24 + packed.push_back(8); + packed.push_back(104); + // 8, -24 + packed.push_back(8); + packed.push_back(104); + // 8, -24 + packed.push_back(8); + packed.push_back(104); + // Padding. + packed.push_back(0); + + relocations.clear(); + packer.UnpackRelativeRelocations(packed, &relocations); + + EXPECT_EQ(6, relocations.size()); + // Initial relocation. + EXPECT_TRUE(CheckRelocation(0xd1ce0000, 10000, relocations[0])); + // Two more relocations, 4 byte offset deltas, 12 byte addend deltas. + EXPECT_TRUE(CheckRelocation(0xd1ce0004, 10012, relocations[1])); + EXPECT_TRUE(CheckRelocation(0xd1ce0008, 10024, relocations[2])); + // Three more relocations, 8 byte offset deltas, -24 byte addend deltas. + EXPECT_TRUE(CheckRelocation(0xd1ce0010, 10000, relocations[3])); + EXPECT_TRUE(CheckRelocation(0xd1ce0018, 9976, relocations[4])); + EXPECT_TRUE(CheckRelocation(0xd1ce0020, 9952, relocations[5])); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/run_all_unittests.cc b/tools/relocation_packer/src/run_all_unittests.cc new file mode 100644 index 000000000..4122be18c --- /dev/null +++ b/tools/relocation_packer/src/run_all_unittests.cc @@ -0,0 +1,10 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "testing/gtest/include/gtest/gtest.h" + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tools/relocation_packer/src/run_length_encoder.cc b/tools/relocation_packer/src/run_length_encoder.cc new file mode 100644 index 000000000..2f2e1c315 --- /dev/null +++ b/tools/relocation_packer/src/run_length_encoder.cc @@ -0,0 +1,144 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "run_length_encoder.h" + +#include + +#include "debug.h" +#include "elf_traits.h" + +namespace relocation_packer { + +namespace { + +// Generate a vector of deltas between the r_offset fields of adjacent +// relative relocations. +void GetDeltas(const std::vector& relocations, + std::vector* deltas) { + CHECK(relocations.size() >= 2); + + for (size_t i = 0; i < relocations.size() - 1; ++i) { + const ELF::Rel* first = &relocations[i]; + CHECK(ELF_R_TYPE(first->r_info) == ELF::kRelativeRelocationCode); + + const ELF::Rel* second = &relocations[i + 1]; + CHECK(ELF_R_TYPE(second->r_info) == ELF::kRelativeRelocationCode); + + // Requires that offsets are 'strictly increasing'. The packing + // algorithm fails if this does not hold. + CHECK(second->r_offset > first->r_offset); + deltas->push_back(second->r_offset - first->r_offset); + } +} + +// Condense a set of r_offset deltas into a run-length encoded packing. +// Represented as count-delta pairs, where count is the run length and +// delta the common difference between adjacent r_offsets. +void Condense(const std::vector& deltas, + std::vector* packed) { + CHECK(!deltas.empty()); + size_t count = 0; + ELF::Addr current = deltas[0]; + + // Identify spans of identically valued deltas. + for (size_t i = 0; i < deltas.size(); ++i) { + const ELF::Addr delta = deltas[i]; + if (delta == current) { + count++; + } else { + // We reached the end of a span of identically valued deltas. + packed->push_back(count); + packed->push_back(current); + current = delta; + count = 1; + } + } + + // Write the final span. + packed->push_back(count); + packed->push_back(current); +} + +// Uncondense a set of r_offset deltas from a run-length encoded packing. +// The initial address for uncondensing, the start index for the first +// condensed slot in packed, and the count of pairs are provided. +void Uncondense(ELF::Addr addr, + const std::vector& packed, + size_t start_index, + size_t end_index, + std::vector* relocations) { + // The first relocation is just one created from the initial address. + ELF::Rel initial; + initial.r_offset = addr; + initial.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocations->push_back(initial); + + // Read each count and delta pair, beginning at the start index and + // finishing at the end index. + for (size_t i = start_index; i < end_index; i += 2) { + size_t count = packed[i]; + const ELF::Addr delta = packed[i + 1]; + CHECK(count > 0 && delta > 0); + + // Generate relocations for this count and delta pair. + while (count) { + addr += delta; + ELF::Rel relocation; + relocation.r_offset = addr; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocations->push_back(relocation); + count--; + } + } +} + +} // namespace + +// Encode relative relocations into a run-length encoded (packed) +// representation. +void RelocationRunLengthCodec::Encode(const std::vector& relocations, + std::vector* packed) { + // If we have zero or one relocation only then there is no packing + // possible; a run-length encoding needs a run. + if (relocations.size() < 2) + return; + + std::vector deltas; + GetDeltas(relocations, &deltas); + + // Reserve space for the element count. + packed->push_back(0); + + // Initialize the packed data with the first offset, then follow up with + // the condensed deltas vector. + packed->push_back(relocations[0].r_offset); + Condense(deltas, packed); + + // Fill in the packed pair count. + packed->at(0) = (packed->size() - 2) >> 1; +} + +// Decode relative relocations from a run-length encoded (packed) +// representation. +void RelocationRunLengthCodec::Decode(const std::vector& packed, + std::vector* relocations) { + // We need at least one packed pair after the packed pair count and start + // address to be able to unpack. + if (packed.size() < 4) + return; + + // Ensure that the packed data offers enough pairs. There may be zero + // padding on it that we ignore. + CHECK(packed[0] <= (packed.size() - 2) >> 1); + + // The first packed vector element is the pairs count and the second the + // initial address. Start uncondensing pairs at the third, and finish + // at the end of the pairs data. + const size_t pairs_count = packed[0]; + const ELF::Addr addr = packed[1]; + Uncondense(addr, packed, 2, 2 + (pairs_count << 1), relocations); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/run_length_encoder.h b/tools/relocation_packer/src/run_length_encoder.h new file mode 100644 index 000000000..f3a80e602 --- /dev/null +++ b/tools/relocation_packer/src/run_length_encoder.h @@ -0,0 +1,81 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Run-length encode and decode relative relocations. +// +// Relative relocations are the bulk of dynamic relocations (the +// .rel.dyn or .rela.dyn sections) in libchrome..so, and the ELF +// standard representation of them is wasteful. .rel.dyn contains +// relocations without addends, .rela.dyn relocations with addends. +// +// A relocation with no addend is 8 bytes on 32 bit platforms and 16 bytes +// on 64 bit plaforms, split into offset and info fields. Offsets strictly +// increase, and each is commonly a few bytes different from its predecessor. +// There are long runs where the difference does not change. The info field +// is constant. Example, from 'readelf -x4 libchrome..so' 32 bit: +// +// offset info offset info +// 808fef01 17000000 848fef01 17000000 ................ +// 888fef01 17000000 8c8fef01 17000000 ................ +// 908fef01 17000000 948fef01 17000000 ................ +// +// Run length encoding packs this data more efficiently, by representing it +// as a delta and a count of entries each differing from its predecessor +// by this delta. The above can be represented as a start address followed +// by an encoded count of 6 and offset difference of 4: +// +// start count diff +// 01ef8f80 00000006 00000004 +// +// Because relative relocation offsets strictly increase, the complete +// set of relative relocations in libchrome..so can be +// represented by a single start address followed by one or more difference +// and count encoded word pairs: +// +// start run1 count run1 diff run2 count run2 diff +// 01ef8f80 00000006 00000004 00000010 00000008 ... +// +// Decoding regenerates relative relocations beginning at address +// 'start' and for each encoded run, incrementing the address by 'difference' +// for 'count' iterations and emitting a new relative relocation. +// +// Once encoded, data is prefixed by a single word count of packed delta and +// count pairs. A final run-length encoded relative relocations vector +// might therefore look something like: +// +// pairs start run 1 run 2 ... run 15 +// 0000000f 01ef8f80 00000006 00000004 00000010 00000008 ... +// Interpreted as: +// pairs=15 start=.. count=6,delta=4 count=16,delta=8 + +#ifndef TOOLS_RELOCATION_PACKER_SRC_RUN_LENGTH_ENCODER_H_ +#define TOOLS_RELOCATION_PACKER_SRC_RUN_LENGTH_ENCODER_H_ + +#include + +#include "elf.h" +#include "elf_traits.h" + +namespace relocation_packer { + +// A RelocationRunLengthCodec packs vectors of relative relocations +// into more compact forms, and unpacks them to reproduce the pre-packed data. +class RelocationRunLengthCodec { + public: + // Encode relative relocations into a more compact form. + // |relocations| is a vector of relative relocation structs. + // |packed| is the vector of packed words into which relocations are packed. + static void Encode(const std::vector& relocations, + std::vector* packed); + + // Decode relative relocations from their more compact form. + // |packed| is the vector of packed relocations. + // |relocations| is a vector of unpacked relative relocation structs. + static void Decode(const std::vector& packed, + std::vector* relocations); +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_RUN_LENGTH_ENCODER_H_ diff --git a/tools/relocation_packer/src/run_length_encoder_unittest.cc b/tools/relocation_packer/src/run_length_encoder_unittest.cc new file mode 100644 index 000000000..83370f2a9 --- /dev/null +++ b/tools/relocation_packer/src/run_length_encoder_unittest.cc @@ -0,0 +1,124 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "run_length_encoder.h" + +#include +#include "elf.h" +#include "elf_traits.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +void AddRelocation(ELF::Addr addr, std::vector* relocations) { + ELF::Rel relocation; + relocation.r_offset = addr; + relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocations->push_back(relocation); +} + +bool CheckRelocation(ELF::Addr addr, const ELF::Rel& relocation) { + return relocation.r_offset == addr && + ELF_R_SYM(relocation.r_info) == 0 && + ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode; +} + +} // namespace + +namespace relocation_packer { + +TEST(RunLength, Encode) { + std::vector relocations; + std::vector packed; + + RelocationRunLengthCodec codec; + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(0, packed.size()); + + // Add one relocation (insufficient data to encode). + AddRelocation(0xf00d0000, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(0, packed.size()); + + // Add a second relocation, 4 byte delta (minimum data to encode). + AddRelocation(0xf00d0004, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(4, packed.size()); + // One count-delta pair present. + EXPECT_EQ(1, packed[0]); + // Initial relocation. + EXPECT_EQ(0xf00d0000, packed[1]); + // Run of a single relocation, 4 byte delta. + EXPECT_EQ(1, packed[2]); + EXPECT_EQ(4, packed[3]); + + // Add a third relocation, 4 byte delta. + AddRelocation(0xf00d0008, &relocations); + + // Add three more relocations, 8 byte deltas. + AddRelocation(0xf00d0010, &relocations); + AddRelocation(0xf00d0018, &relocations); + AddRelocation(0xf00d0020, &relocations); + + packed.clear(); + codec.Encode(relocations, &packed); + + EXPECT_EQ(6, packed.size()); + // Two count-delta pairs present. + EXPECT_EQ(2, packed[0]); + // Initial relocation. + EXPECT_EQ(0xf00d0000, packed[1]); + // Run of two relocations, 4 byte deltas. + EXPECT_EQ(2, packed[2]); + EXPECT_EQ(4, packed[3]); + // Run of three relocations, 8 byte deltas. + EXPECT_EQ(3, packed[4]); + EXPECT_EQ(8, packed[5]); +} + +TEST(RunLength, Decode) { + std::vector packed; + std::vector relocations; + + RelocationRunLengthCodec codec; + codec.Decode(packed, &relocations); + + EXPECT_EQ(0, relocations.size()); + + // Two count-delta pairs. + packed.push_back(2); + // Initial relocation. + packed.push_back(0xc0de0000); + // Run of two relocations, 4 byte deltas. + packed.push_back(2); + packed.push_back(4); + // Run of three relocations, 8 byte deltas. + packed.push_back(3); + packed.push_back(8); + + relocations.clear(); + codec.Decode(packed, &relocations); + + EXPECT_EQ(6, relocations.size()); + // Initial relocation. + EXPECT_TRUE(CheckRelocation(0xc0de0000, relocations[0])); + // Two relocations, 4 byte deltas. + EXPECT_TRUE(CheckRelocation(0xc0de0004, relocations[1])); + EXPECT_TRUE(CheckRelocation(0xc0de0008, relocations[2])); + // Three relocations, 8 byte deltas. + EXPECT_TRUE(CheckRelocation(0xc0de0010, relocations[3])); + EXPECT_TRUE(CheckRelocation(0xc0de0018, relocations[4])); + EXPECT_TRUE(CheckRelocation(0xc0de0020, relocations[5])); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/sleb128.cc b/tools/relocation_packer/src/sleb128.cc new file mode 100644 index 000000000..a10bd79a7 --- /dev/null +++ b/tools/relocation_packer/src/sleb128.cc @@ -0,0 +1,95 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "sleb128.h" + +#include +#include +#include + +#include "elf_traits.h" + +namespace relocation_packer { + +// Empty constructor and destructor to silence chromium-style. +Sleb128Encoder::Sleb128Encoder() { } +Sleb128Encoder::~Sleb128Encoder() { } + +// Add a single value to the encoding. Values are encoded with variable +// length. The least significant 7 bits of each byte hold 7 bits of data, +// and the most significant bit is set on each byte except the last. The +// value is sign extended up to a multiple of 7 bits (ensuring that the +// most significant bit is zero for a positive number and one for a +// negative number). +void Sleb128Encoder::Enqueue(ELF::Sxword value) { + static const size_t size = CHAR_BIT * sizeof(value); + + bool more = true; + const bool negative = value < 0; + + while (more) { + uint8_t byte = value & 127; + value >>= 7; + + // Sign extend if encoding a -ve value. + if (negative) + value |= -(static_cast(1) << (size - 7)); + + // The sign bit of byte is second high order bit. + const bool sign_bit = byte & 64; + if ((value == 0 && !sign_bit) || (value == -1 && sign_bit)) + more = false; + else + byte |= 128; + encoding_.push_back(byte); + } +} + +// Add a vector of values to the encoding. +void Sleb128Encoder::EnqueueAll(const std::vector& values) { + for (size_t i = 0; i < values.size(); ++i) + Enqueue(values[i]); +} + +// Create a new decoder for the given encoded stream. +Sleb128Decoder::Sleb128Decoder(const std::vector& encoding) { + encoding_ = encoding; + cursor_ = 0; +} + +// Empty destructor to silence chromium-style. +Sleb128Decoder::~Sleb128Decoder() { } + +// Decode and retrieve a single value from the encoding. Consume bytes +// until one without its most significant bit is found, and re-form the +// value from the 7 bit fields of the bytes consumed. +ELF::Sxword Sleb128Decoder::Dequeue() { + ELF::Sxword value = 0; + static const size_t size = CHAR_BIT * sizeof(value); + + size_t shift = 0; + uint8_t byte; + + // Loop until we reach a byte with its high order bit clear. + do { + byte = encoding_[cursor_++]; + value |= (static_cast(byte & 127) << shift); + shift += 7; + } while (byte & 128); + + // The sign bit is second high order bit of the final byte decoded. + // Sign extend if value is -ve and we did not shift all of it. + if (shift < size && (byte & 64)) + value |= -(static_cast(1) << shift); + + return value; +} + +// Decode and retrieve all remaining values from the encoding. +void Sleb128Decoder::DequeueAll(std::vector* values) { + while (cursor_ < encoding_.size()) + values->push_back(Dequeue()); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/src/sleb128.h b/tools/relocation_packer/src/sleb128.h new file mode 100644 index 000000000..3544543c0 --- /dev/null +++ b/tools/relocation_packer/src/sleb128.h @@ -0,0 +1,75 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// SLEB128 encoder and decoder for packed relative relocations. +// +// Delta encoded relative relocations consist of a large number +// of pairs signed integer values, many with small values. Encoding these +// as signed LEB128 saves space. +// +// For more on LEB128 see http://en.wikipedia.org/wiki/LEB128. + +#ifndef TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_ +#define TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_ + +#include +#include +#include + +#include "elf_traits.h" + +namespace relocation_packer { + +// Encode packed words as a signed LEB128 byte stream. +class Sleb128Encoder { + public: + // Explicit (but empty) constructor and destructor, for chromium-style. + Sleb128Encoder(); + ~Sleb128Encoder(); + + // Add a value to the encoding stream. + // |value| is the signed int to add. + void Enqueue(ELF::Sxword value); + + // Add a vector of values to the encoding stream. + // |values| is the vector of signed ints to add. + void EnqueueAll(const std::vector& values); + + // Retrieve the encoded representation of the values. + // |encoding| is the returned vector of encoded data. + void GetEncoding(std::vector* encoding) { *encoding = encoding_; } + + private: + // Growable vector holding the encoded LEB128 stream. + std::vector encoding_; +}; + +// Decode a LEB128 byte stream to produce packed words. +class Sleb128Decoder { + public: + // Create a new decoder for the given encoded stream. + // |encoding| is the vector of encoded data. + explicit Sleb128Decoder(const std::vector& encoding); + + // Explicit (but empty) destructor, for chromium-style. + ~Sleb128Decoder(); + + // Retrieve the next value from the encoded stream. + ELF::Sxword Dequeue(); + + // Retrieve all remaining values from the encoded stream. + // |values| is the vector of decoded data. + void DequeueAll(std::vector* values); + + private: + // Encoded LEB128 stream. + std::vector encoding_; + + // Cursor indicating the current stream retrieval point. + size_t cursor_; +}; + +} // namespace relocation_packer + +#endif // TOOLS_RELOCATION_PACKER_SRC_SLEB128_H_ diff --git a/tools/relocation_packer/src/sleb128_unittest.cc b/tools/relocation_packer/src/sleb128_unittest.cc new file mode 100644 index 000000000..60a5d0de7 --- /dev/null +++ b/tools/relocation_packer/src/sleb128_unittest.cc @@ -0,0 +1,166 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "sleb128.h" + +#include +#include "elf_traits.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace relocation_packer { + +TEST(Sleb128, Encoder) { + std::vector values; + values.push_back(624485); + values.push_back(0); + values.push_back(1); + values.push_back(63); + values.push_back(64); + values.push_back(-1); + values.push_back(-624485); + + Sleb128Encoder encoder; + encoder.EnqueueAll(values); + + encoder.Enqueue(2147483647); + encoder.Enqueue(-2147483648); + encoder.Enqueue(9223372036854775807ll); + encoder.Enqueue(-9223372036854775807ll - 1); + + std::vector encoding; + encoder.GetEncoding(&encoding); + + EXPECT_EQ(42u, encoding.size()); + // 624485 + EXPECT_EQ(0xe5, encoding[0]); + EXPECT_EQ(0x8e, encoding[1]); + EXPECT_EQ(0x26, encoding[2]); + // 0 + EXPECT_EQ(0x00, encoding[3]); + // 1 + EXPECT_EQ(0x01, encoding[4]); + // 63 + EXPECT_EQ(0x3f, encoding[5]); + // 64 + EXPECT_EQ(0xc0, encoding[6]); + EXPECT_EQ(0x00, encoding[7]); + // -1 + EXPECT_EQ(0x7f, encoding[8]); + // -624485 + EXPECT_EQ(0x9b, encoding[9]); + EXPECT_EQ(0xf1, encoding[10]); + EXPECT_EQ(0x59, encoding[11]); + // 2147483647 + EXPECT_EQ(0xff, encoding[12]); + EXPECT_EQ(0xff, encoding[13]); + EXPECT_EQ(0xff, encoding[14]); + EXPECT_EQ(0xff, encoding[15]); + EXPECT_EQ(0x07, encoding[16]); + // -2147483648 + EXPECT_EQ(0x80, encoding[17]); + EXPECT_EQ(0x80, encoding[18]); + EXPECT_EQ(0x80, encoding[19]); + EXPECT_EQ(0x80, encoding[20]); + EXPECT_EQ(0x78, encoding[21]); + // 9223372036854775807 + EXPECT_EQ(0xff, encoding[22]); + EXPECT_EQ(0xff, encoding[23]); + EXPECT_EQ(0xff, encoding[24]); + EXPECT_EQ(0xff, encoding[25]); + EXPECT_EQ(0xff, encoding[26]); + EXPECT_EQ(0xff, encoding[27]); + EXPECT_EQ(0xff, encoding[28]); + EXPECT_EQ(0xff, encoding[29]); + EXPECT_EQ(0xff, encoding[30]); + EXPECT_EQ(0x00, encoding[31]); + // -9223372036854775808 + EXPECT_EQ(0x80, encoding[32]); + EXPECT_EQ(0x80, encoding[33]); + EXPECT_EQ(0x80, encoding[34]); + EXPECT_EQ(0x80, encoding[35]); + EXPECT_EQ(0x80, encoding[36]); + EXPECT_EQ(0x80, encoding[37]); + EXPECT_EQ(0x80, encoding[38]); + EXPECT_EQ(0x80, encoding[39]); + EXPECT_EQ(0x80, encoding[40]); + EXPECT_EQ(0x7f, encoding[41]); +} + +TEST(Sleb128, Decoder) { + std::vector encoding; + // 624485 + encoding.push_back(0xe5); + encoding.push_back(0x8e); + encoding.push_back(0x26); + // 0 + encoding.push_back(0x00); + // 1 + encoding.push_back(0x01); + // 63 + encoding.push_back(0x3f); + // 64 + encoding.push_back(0xc0); + encoding.push_back(0x00); + // -1 + encoding.push_back(0x7f); + // -624485 + encoding.push_back(0x9b); + encoding.push_back(0xf1); + encoding.push_back(0x59); + // 2147483647 + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0x07); + // -2147483648 + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x78); + // 9223372036854775807 + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0xff); + encoding.push_back(0x00); + // -9223372036854775808 + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x80); + encoding.push_back(0x7f); + + Sleb128Decoder decoder(encoding); + + EXPECT_EQ(624485, decoder.Dequeue()); + + std::vector dequeued; + decoder.DequeueAll(&dequeued); + + EXPECT_EQ(10u, dequeued.size()); + EXPECT_EQ(0, dequeued[0]); + EXPECT_EQ(1, dequeued[1]); + EXPECT_EQ(63, dequeued[2]); + EXPECT_EQ(64, dequeued[3]); + EXPECT_EQ(-1, dequeued[4]); + EXPECT_EQ(-624485, dequeued[5]); + EXPECT_EQ(2147483647, dequeued[6]); + EXPECT_EQ(-2147483648, dequeued[7]); + EXPECT_EQ(9223372036854775807ll, dequeued[8]); + EXPECT_EQ(-9223372036854775807ll - 1, dequeued[9]); +} + +} // namespace relocation_packer diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc b/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc new file mode 100644 index 000000000..5e1fa747e --- /dev/null +++ b/tools/relocation_packer/test_data/elf_file_unittest_relocs.cc @@ -0,0 +1,1014 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Test data for packing/unpacking. When compiled, creates a run of +// relative relocations. +// +// See generate_elf_file_unittest_relocs.sh for instructions on how to build +// unit test data from this source file. + +const int i = 0; + +// Generator: +// python -c 'for i in xrange(0,1000):print"const void* pointer_%d = &i;"%i' +const void* pointer_0 = &i; +const void* pointer_1 = &i; +const void* pointer_2 = &i; +const void* pointer_3 = &i; +const void* pointer_4 = &i; +const void* pointer_5 = &i; +const void* pointer_6 = &i; +const void* pointer_7 = &i; +const void* pointer_8 = &i; +const void* pointer_9 = &i; +const void* pointer_10 = &i; +const void* pointer_11 = &i; +const void* pointer_12 = &i; +const void* pointer_13 = &i; +const void* pointer_14 = &i; +const void* pointer_15 = &i; +const void* pointer_16 = &i; +const void* pointer_17 = &i; +const void* pointer_18 = &i; +const void* pointer_19 = &i; +const void* pointer_20 = &i; +const void* pointer_21 = &i; +const void* pointer_22 = &i; +const void* pointer_23 = &i; +const void* pointer_24 = &i; +const void* pointer_25 = &i; +const void* pointer_26 = &i; +const void* pointer_27 = &i; +const void* pointer_28 = &i; +const void* pointer_29 = &i; +const void* pointer_30 = &i; +const void* pointer_31 = &i; +const void* pointer_32 = &i; +const void* pointer_33 = &i; +const void* pointer_34 = &i; +const void* pointer_35 = &i; +const void* pointer_36 = &i; +const void* pointer_37 = &i; +const void* pointer_38 = &i; +const void* pointer_39 = &i; +const void* pointer_40 = &i; +const void* pointer_41 = &i; +const void* pointer_42 = &i; +const void* pointer_43 = &i; +const void* pointer_44 = &i; +const void* pointer_45 = &i; +const void* pointer_46 = &i; +const void* pointer_47 = &i; +const void* pointer_48 = &i; +const void* pointer_49 = &i; +const void* pointer_50 = &i; +const void* pointer_51 = &i; +const void* pointer_52 = &i; +const void* pointer_53 = &i; +const void* pointer_54 = &i; +const void* pointer_55 = &i; +const void* pointer_56 = &i; +const void* pointer_57 = &i; +const void* pointer_58 = &i; +const void* pointer_59 = &i; +const void* pointer_60 = &i; +const void* pointer_61 = &i; +const void* pointer_62 = &i; +const void* pointer_63 = &i; +const void* pointer_64 = &i; +const void* pointer_65 = &i; +const void* pointer_66 = &i; +const void* pointer_67 = &i; +const void* pointer_68 = &i; +const void* pointer_69 = &i; +const void* pointer_70 = &i; +const void* pointer_71 = &i; +const void* pointer_72 = &i; +const void* pointer_73 = &i; +const void* pointer_74 = &i; +const void* pointer_75 = &i; +const void* pointer_76 = &i; +const void* pointer_77 = &i; +const void* pointer_78 = &i; +const void* pointer_79 = &i; +const void* pointer_80 = &i; +const void* pointer_81 = &i; +const void* pointer_82 = &i; +const void* pointer_83 = &i; +const void* pointer_84 = &i; +const void* pointer_85 = &i; +const void* pointer_86 = &i; +const void* pointer_87 = &i; +const void* pointer_88 = &i; +const void* pointer_89 = &i; +const void* pointer_90 = &i; +const void* pointer_91 = &i; +const void* pointer_92 = &i; +const void* pointer_93 = &i; +const void* pointer_94 = &i; +const void* pointer_95 = &i; +const void* pointer_96 = &i; +const void* pointer_97 = &i; +const void* pointer_98 = &i; +const void* pointer_99 = &i; +const void* pointer_100 = &i; +const void* pointer_101 = &i; +const void* pointer_102 = &i; +const void* pointer_103 = &i; +const void* pointer_104 = &i; +const void* pointer_105 = &i; +const void* pointer_106 = &i; +const void* pointer_107 = &i; +const void* pointer_108 = &i; +const void* pointer_109 = &i; +const void* pointer_110 = &i; +const void* pointer_111 = &i; +const void* pointer_112 = &i; +const void* pointer_113 = &i; +const void* pointer_114 = &i; +const void* pointer_115 = &i; +const void* pointer_116 = &i; +const void* pointer_117 = &i; +const void* pointer_118 = &i; +const void* pointer_119 = &i; +const void* pointer_120 = &i; +const void* pointer_121 = &i; +const void* pointer_122 = &i; +const void* pointer_123 = &i; +const void* pointer_124 = &i; +const void* pointer_125 = &i; +const void* pointer_126 = &i; +const void* pointer_127 = &i; +const void* pointer_128 = &i; +const void* pointer_129 = &i; +const void* pointer_130 = &i; +const void* pointer_131 = &i; +const void* pointer_132 = &i; +const void* pointer_133 = &i; +const void* pointer_134 = &i; +const void* pointer_135 = &i; +const void* pointer_136 = &i; +const void* pointer_137 = &i; +const void* pointer_138 = &i; +const void* pointer_139 = &i; +const void* pointer_140 = &i; +const void* pointer_141 = &i; +const void* pointer_142 = &i; +const void* pointer_143 = &i; +const void* pointer_144 = &i; +const void* pointer_145 = &i; +const void* pointer_146 = &i; +const void* pointer_147 = &i; +const void* pointer_148 = &i; +const void* pointer_149 = &i; +const void* pointer_150 = &i; +const void* pointer_151 = &i; +const void* pointer_152 = &i; +const void* pointer_153 = &i; +const void* pointer_154 = &i; +const void* pointer_155 = &i; +const void* pointer_156 = &i; +const void* pointer_157 = &i; +const void* pointer_158 = &i; +const void* pointer_159 = &i; +const void* pointer_160 = &i; +const void* pointer_161 = &i; +const void* pointer_162 = &i; +const void* pointer_163 = &i; +const void* pointer_164 = &i; +const void* pointer_165 = &i; +const void* pointer_166 = &i; +const void* pointer_167 = &i; +const void* pointer_168 = &i; +const void* pointer_169 = &i; +const void* pointer_170 = &i; +const void* pointer_171 = &i; +const void* pointer_172 = &i; +const void* pointer_173 = &i; +const void* pointer_174 = &i; +const void* pointer_175 = &i; +const void* pointer_176 = &i; +const void* pointer_177 = &i; +const void* pointer_178 = &i; +const void* pointer_179 = &i; +const void* pointer_180 = &i; +const void* pointer_181 = &i; +const void* pointer_182 = &i; +const void* pointer_183 = &i; +const void* pointer_184 = &i; +const void* pointer_185 = &i; +const void* pointer_186 = &i; +const void* pointer_187 = &i; +const void* pointer_188 = &i; +const void* pointer_189 = &i; +const void* pointer_190 = &i; +const void* pointer_191 = &i; +const void* pointer_192 = &i; +const void* pointer_193 = &i; +const void* pointer_194 = &i; +const void* pointer_195 = &i; +const void* pointer_196 = &i; +const void* pointer_197 = &i; +const void* pointer_198 = &i; +const void* pointer_199 = &i; +const void* pointer_200 = &i; +const void* pointer_201 = &i; +const void* pointer_202 = &i; +const void* pointer_203 = &i; +const void* pointer_204 = &i; +const void* pointer_205 = &i; +const void* pointer_206 = &i; +const void* pointer_207 = &i; +const void* pointer_208 = &i; +const void* pointer_209 = &i; +const void* pointer_210 = &i; +const void* pointer_211 = &i; +const void* pointer_212 = &i; +const void* pointer_213 = &i; +const void* pointer_214 = &i; +const void* pointer_215 = &i; +const void* pointer_216 = &i; +const void* pointer_217 = &i; +const void* pointer_218 = &i; +const void* pointer_219 = &i; +const void* pointer_220 = &i; +const void* pointer_221 = &i; +const void* pointer_222 = &i; +const void* pointer_223 = &i; +const void* pointer_224 = &i; +const void* pointer_225 = &i; +const void* pointer_226 = &i; +const void* pointer_227 = &i; +const void* pointer_228 = &i; +const void* pointer_229 = &i; +const void* pointer_230 = &i; +const void* pointer_231 = &i; +const void* pointer_232 = &i; +const void* pointer_233 = &i; +const void* pointer_234 = &i; +const void* pointer_235 = &i; +const void* pointer_236 = &i; +const void* pointer_237 = &i; +const void* pointer_238 = &i; +const void* pointer_239 = &i; +const void* pointer_240 = &i; +const void* pointer_241 = &i; +const void* pointer_242 = &i; +const void* pointer_243 = &i; +const void* pointer_244 = &i; +const void* pointer_245 = &i; +const void* pointer_246 = &i; +const void* pointer_247 = &i; +const void* pointer_248 = &i; +const void* pointer_249 = &i; +const void* pointer_250 = &i; +const void* pointer_251 = &i; +const void* pointer_252 = &i; +const void* pointer_253 = &i; +const void* pointer_254 = &i; +const void* pointer_255 = &i; +const void* pointer_256 = &i; +const void* pointer_257 = &i; +const void* pointer_258 = &i; +const void* pointer_259 = &i; +const void* pointer_260 = &i; +const void* pointer_261 = &i; +const void* pointer_262 = &i; +const void* pointer_263 = &i; +const void* pointer_264 = &i; +const void* pointer_265 = &i; +const void* pointer_266 = &i; +const void* pointer_267 = &i; +const void* pointer_268 = &i; +const void* pointer_269 = &i; +const void* pointer_270 = &i; +const void* pointer_271 = &i; +const void* pointer_272 = &i; +const void* pointer_273 = &i; +const void* pointer_274 = &i; +const void* pointer_275 = &i; +const void* pointer_276 = &i; +const void* pointer_277 = &i; +const void* pointer_278 = &i; +const void* pointer_279 = &i; +const void* pointer_280 = &i; +const void* pointer_281 = &i; +const void* pointer_282 = &i; +const void* pointer_283 = &i; +const void* pointer_284 = &i; +const void* pointer_285 = &i; +const void* pointer_286 = &i; +const void* pointer_287 = &i; +const void* pointer_288 = &i; +const void* pointer_289 = &i; +const void* pointer_290 = &i; +const void* pointer_291 = &i; +const void* pointer_292 = &i; +const void* pointer_293 = &i; +const void* pointer_294 = &i; +const void* pointer_295 = &i; +const void* pointer_296 = &i; +const void* pointer_297 = &i; +const void* pointer_298 = &i; +const void* pointer_299 = &i; +const void* pointer_300 = &i; +const void* pointer_301 = &i; +const void* pointer_302 = &i; +const void* pointer_303 = &i; +const void* pointer_304 = &i; +const void* pointer_305 = &i; +const void* pointer_306 = &i; +const void* pointer_307 = &i; +const void* pointer_308 = &i; +const void* pointer_309 = &i; +const void* pointer_310 = &i; +const void* pointer_311 = &i; +const void* pointer_312 = &i; +const void* pointer_313 = &i; +const void* pointer_314 = &i; +const void* pointer_315 = &i; +const void* pointer_316 = &i; +const void* pointer_317 = &i; +const void* pointer_318 = &i; +const void* pointer_319 = &i; +const void* pointer_320 = &i; +const void* pointer_321 = &i; +const void* pointer_322 = &i; +const void* pointer_323 = &i; +const void* pointer_324 = &i; +const void* pointer_325 = &i; +const void* pointer_326 = &i; +const void* pointer_327 = &i; +const void* pointer_328 = &i; +const void* pointer_329 = &i; +const void* pointer_330 = &i; +const void* pointer_331 = &i; +const void* pointer_332 = &i; +const void* pointer_333 = &i; +const void* pointer_334 = &i; +const void* pointer_335 = &i; +const void* pointer_336 = &i; +const void* pointer_337 = &i; +const void* pointer_338 = &i; +const void* pointer_339 = &i; +const void* pointer_340 = &i; +const void* pointer_341 = &i; +const void* pointer_342 = &i; +const void* pointer_343 = &i; +const void* pointer_344 = &i; +const void* pointer_345 = &i; +const void* pointer_346 = &i; +const void* pointer_347 = &i; +const void* pointer_348 = &i; +const void* pointer_349 = &i; +const void* pointer_350 = &i; +const void* pointer_351 = &i; +const void* pointer_352 = &i; +const void* pointer_353 = &i; +const void* pointer_354 = &i; +const void* pointer_355 = &i; +const void* pointer_356 = &i; +const void* pointer_357 = &i; +const void* pointer_358 = &i; +const void* pointer_359 = &i; +const void* pointer_360 = &i; +const void* pointer_361 = &i; +const void* pointer_362 = &i; +const void* pointer_363 = &i; +const void* pointer_364 = &i; +const void* pointer_365 = &i; +const void* pointer_366 = &i; +const void* pointer_367 = &i; +const void* pointer_368 = &i; +const void* pointer_369 = &i; +const void* pointer_370 = &i; +const void* pointer_371 = &i; +const void* pointer_372 = &i; +const void* pointer_373 = &i; +const void* pointer_374 = &i; +const void* pointer_375 = &i; +const void* pointer_376 = &i; +const void* pointer_377 = &i; +const void* pointer_378 = &i; +const void* pointer_379 = &i; +const void* pointer_380 = &i; +const void* pointer_381 = &i; +const void* pointer_382 = &i; +const void* pointer_383 = &i; +const void* pointer_384 = &i; +const void* pointer_385 = &i; +const void* pointer_386 = &i; +const void* pointer_387 = &i; +const void* pointer_388 = &i; +const void* pointer_389 = &i; +const void* pointer_390 = &i; +const void* pointer_391 = &i; +const void* pointer_392 = &i; +const void* pointer_393 = &i; +const void* pointer_394 = &i; +const void* pointer_395 = &i; +const void* pointer_396 = &i; +const void* pointer_397 = &i; +const void* pointer_398 = &i; +const void* pointer_399 = &i; +const void* pointer_400 = &i; +const void* pointer_401 = &i; +const void* pointer_402 = &i; +const void* pointer_403 = &i; +const void* pointer_404 = &i; +const void* pointer_405 = &i; +const void* pointer_406 = &i; +const void* pointer_407 = &i; +const void* pointer_408 = &i; +const void* pointer_409 = &i; +const void* pointer_410 = &i; +const void* pointer_411 = &i; +const void* pointer_412 = &i; +const void* pointer_413 = &i; +const void* pointer_414 = &i; +const void* pointer_415 = &i; +const void* pointer_416 = &i; +const void* pointer_417 = &i; +const void* pointer_418 = &i; +const void* pointer_419 = &i; +const void* pointer_420 = &i; +const void* pointer_421 = &i; +const void* pointer_422 = &i; +const void* pointer_423 = &i; +const void* pointer_424 = &i; +const void* pointer_425 = &i; +const void* pointer_426 = &i; +const void* pointer_427 = &i; +const void* pointer_428 = &i; +const void* pointer_429 = &i; +const void* pointer_430 = &i; +const void* pointer_431 = &i; +const void* pointer_432 = &i; +const void* pointer_433 = &i; +const void* pointer_434 = &i; +const void* pointer_435 = &i; +const void* pointer_436 = &i; +const void* pointer_437 = &i; +const void* pointer_438 = &i; +const void* pointer_439 = &i; +const void* pointer_440 = &i; +const void* pointer_441 = &i; +const void* pointer_442 = &i; +const void* pointer_443 = &i; +const void* pointer_444 = &i; +const void* pointer_445 = &i; +const void* pointer_446 = &i; +const void* pointer_447 = &i; +const void* pointer_448 = &i; +const void* pointer_449 = &i; +const void* pointer_450 = &i; +const void* pointer_451 = &i; +const void* pointer_452 = &i; +const void* pointer_453 = &i; +const void* pointer_454 = &i; +const void* pointer_455 = &i; +const void* pointer_456 = &i; +const void* pointer_457 = &i; +const void* pointer_458 = &i; +const void* pointer_459 = &i; +const void* pointer_460 = &i; +const void* pointer_461 = &i; +const void* pointer_462 = &i; +const void* pointer_463 = &i; +const void* pointer_464 = &i; +const void* pointer_465 = &i; +const void* pointer_466 = &i; +const void* pointer_467 = &i; +const void* pointer_468 = &i; +const void* pointer_469 = &i; +const void* pointer_470 = &i; +const void* pointer_471 = &i; +const void* pointer_472 = &i; +const void* pointer_473 = &i; +const void* pointer_474 = &i; +const void* pointer_475 = &i; +const void* pointer_476 = &i; +const void* pointer_477 = &i; +const void* pointer_478 = &i; +const void* pointer_479 = &i; +const void* pointer_480 = &i; +const void* pointer_481 = &i; +const void* pointer_482 = &i; +const void* pointer_483 = &i; +const void* pointer_484 = &i; +const void* pointer_485 = &i; +const void* pointer_486 = &i; +const void* pointer_487 = &i; +const void* pointer_488 = &i; +const void* pointer_489 = &i; +const void* pointer_490 = &i; +const void* pointer_491 = &i; +const void* pointer_492 = &i; +const void* pointer_493 = &i; +const void* pointer_494 = &i; +const void* pointer_495 = &i; +const void* pointer_496 = &i; +const void* pointer_497 = &i; +const void* pointer_498 = &i; +const void* pointer_499 = &i; +const void* pointer_500 = &i; +const void* pointer_501 = &i; +const void* pointer_502 = &i; +const void* pointer_503 = &i; +const void* pointer_504 = &i; +const void* pointer_505 = &i; +const void* pointer_506 = &i; +const void* pointer_507 = &i; +const void* pointer_508 = &i; +const void* pointer_509 = &i; +const void* pointer_510 = &i; +const void* pointer_511 = &i; +const void* pointer_512 = &i; +const void* pointer_513 = &i; +const void* pointer_514 = &i; +const void* pointer_515 = &i; +const void* pointer_516 = &i; +const void* pointer_517 = &i; +const void* pointer_518 = &i; +const void* pointer_519 = &i; +const void* pointer_520 = &i; +const void* pointer_521 = &i; +const void* pointer_522 = &i; +const void* pointer_523 = &i; +const void* pointer_524 = &i; +const void* pointer_525 = &i; +const void* pointer_526 = &i; +const void* pointer_527 = &i; +const void* pointer_528 = &i; +const void* pointer_529 = &i; +const void* pointer_530 = &i; +const void* pointer_531 = &i; +const void* pointer_532 = &i; +const void* pointer_533 = &i; +const void* pointer_534 = &i; +const void* pointer_535 = &i; +const void* pointer_536 = &i; +const void* pointer_537 = &i; +const void* pointer_538 = &i; +const void* pointer_539 = &i; +const void* pointer_540 = &i; +const void* pointer_541 = &i; +const void* pointer_542 = &i; +const void* pointer_543 = &i; +const void* pointer_544 = &i; +const void* pointer_545 = &i; +const void* pointer_546 = &i; +const void* pointer_547 = &i; +const void* pointer_548 = &i; +const void* pointer_549 = &i; +const void* pointer_550 = &i; +const void* pointer_551 = &i; +const void* pointer_552 = &i; +const void* pointer_553 = &i; +const void* pointer_554 = &i; +const void* pointer_555 = &i; +const void* pointer_556 = &i; +const void* pointer_557 = &i; +const void* pointer_558 = &i; +const void* pointer_559 = &i; +const void* pointer_560 = &i; +const void* pointer_561 = &i; +const void* pointer_562 = &i; +const void* pointer_563 = &i; +const void* pointer_564 = &i; +const void* pointer_565 = &i; +const void* pointer_566 = &i; +const void* pointer_567 = &i; +const void* pointer_568 = &i; +const void* pointer_569 = &i; +const void* pointer_570 = &i; +const void* pointer_571 = &i; +const void* pointer_572 = &i; +const void* pointer_573 = &i; +const void* pointer_574 = &i; +const void* pointer_575 = &i; +const void* pointer_576 = &i; +const void* pointer_577 = &i; +const void* pointer_578 = &i; +const void* pointer_579 = &i; +const void* pointer_580 = &i; +const void* pointer_581 = &i; +const void* pointer_582 = &i; +const void* pointer_583 = &i; +const void* pointer_584 = &i; +const void* pointer_585 = &i; +const void* pointer_586 = &i; +const void* pointer_587 = &i; +const void* pointer_588 = &i; +const void* pointer_589 = &i; +const void* pointer_590 = &i; +const void* pointer_591 = &i; +const void* pointer_592 = &i; +const void* pointer_593 = &i; +const void* pointer_594 = &i; +const void* pointer_595 = &i; +const void* pointer_596 = &i; +const void* pointer_597 = &i; +const void* pointer_598 = &i; +const void* pointer_599 = &i; +const void* pointer_600 = &i; +const void* pointer_601 = &i; +const void* pointer_602 = &i; +const void* pointer_603 = &i; +const void* pointer_604 = &i; +const void* pointer_605 = &i; +const void* pointer_606 = &i; +const void* pointer_607 = &i; +const void* pointer_608 = &i; +const void* pointer_609 = &i; +const void* pointer_610 = &i; +const void* pointer_611 = &i; +const void* pointer_612 = &i; +const void* pointer_613 = &i; +const void* pointer_614 = &i; +const void* pointer_615 = &i; +const void* pointer_616 = &i; +const void* pointer_617 = &i; +const void* pointer_618 = &i; +const void* pointer_619 = &i; +const void* pointer_620 = &i; +const void* pointer_621 = &i; +const void* pointer_622 = &i; +const void* pointer_623 = &i; +const void* pointer_624 = &i; +const void* pointer_625 = &i; +const void* pointer_626 = &i; +const void* pointer_627 = &i; +const void* pointer_628 = &i; +const void* pointer_629 = &i; +const void* pointer_630 = &i; +const void* pointer_631 = &i; +const void* pointer_632 = &i; +const void* pointer_633 = &i; +const void* pointer_634 = &i; +const void* pointer_635 = &i; +const void* pointer_636 = &i; +const void* pointer_637 = &i; +const void* pointer_638 = &i; +const void* pointer_639 = &i; +const void* pointer_640 = &i; +const void* pointer_641 = &i; +const void* pointer_642 = &i; +const void* pointer_643 = &i; +const void* pointer_644 = &i; +const void* pointer_645 = &i; +const void* pointer_646 = &i; +const void* pointer_647 = &i; +const void* pointer_648 = &i; +const void* pointer_649 = &i; +const void* pointer_650 = &i; +const void* pointer_651 = &i; +const void* pointer_652 = &i; +const void* pointer_653 = &i; +const void* pointer_654 = &i; +const void* pointer_655 = &i; +const void* pointer_656 = &i; +const void* pointer_657 = &i; +const void* pointer_658 = &i; +const void* pointer_659 = &i; +const void* pointer_660 = &i; +const void* pointer_661 = &i; +const void* pointer_662 = &i; +const void* pointer_663 = &i; +const void* pointer_664 = &i; +const void* pointer_665 = &i; +const void* pointer_666 = &i; +const void* pointer_667 = &i; +const void* pointer_668 = &i; +const void* pointer_669 = &i; +const void* pointer_670 = &i; +const void* pointer_671 = &i; +const void* pointer_672 = &i; +const void* pointer_673 = &i; +const void* pointer_674 = &i; +const void* pointer_675 = &i; +const void* pointer_676 = &i; +const void* pointer_677 = &i; +const void* pointer_678 = &i; +const void* pointer_679 = &i; +const void* pointer_680 = &i; +const void* pointer_681 = &i; +const void* pointer_682 = &i; +const void* pointer_683 = &i; +const void* pointer_684 = &i; +const void* pointer_685 = &i; +const void* pointer_686 = &i; +const void* pointer_687 = &i; +const void* pointer_688 = &i; +const void* pointer_689 = &i; +const void* pointer_690 = &i; +const void* pointer_691 = &i; +const void* pointer_692 = &i; +const void* pointer_693 = &i; +const void* pointer_694 = &i; +const void* pointer_695 = &i; +const void* pointer_696 = &i; +const void* pointer_697 = &i; +const void* pointer_698 = &i; +const void* pointer_699 = &i; +const void* pointer_700 = &i; +const void* pointer_701 = &i; +const void* pointer_702 = &i; +const void* pointer_703 = &i; +const void* pointer_704 = &i; +const void* pointer_705 = &i; +const void* pointer_706 = &i; +const void* pointer_707 = &i; +const void* pointer_708 = &i; +const void* pointer_709 = &i; +const void* pointer_710 = &i; +const void* pointer_711 = &i; +const void* pointer_712 = &i; +const void* pointer_713 = &i; +const void* pointer_714 = &i; +const void* pointer_715 = &i; +const void* pointer_716 = &i; +const void* pointer_717 = &i; +const void* pointer_718 = &i; +const void* pointer_719 = &i; +const void* pointer_720 = &i; +const void* pointer_721 = &i; +const void* pointer_722 = &i; +const void* pointer_723 = &i; +const void* pointer_724 = &i; +const void* pointer_725 = &i; +const void* pointer_726 = &i; +const void* pointer_727 = &i; +const void* pointer_728 = &i; +const void* pointer_729 = &i; +const void* pointer_730 = &i; +const void* pointer_731 = &i; +const void* pointer_732 = &i; +const void* pointer_733 = &i; +const void* pointer_734 = &i; +const void* pointer_735 = &i; +const void* pointer_736 = &i; +const void* pointer_737 = &i; +const void* pointer_738 = &i; +const void* pointer_739 = &i; +const void* pointer_740 = &i; +const void* pointer_741 = &i; +const void* pointer_742 = &i; +const void* pointer_743 = &i; +const void* pointer_744 = &i; +const void* pointer_745 = &i; +const void* pointer_746 = &i; +const void* pointer_747 = &i; +const void* pointer_748 = &i; +const void* pointer_749 = &i; +const void* pointer_750 = &i; +const void* pointer_751 = &i; +const void* pointer_752 = &i; +const void* pointer_753 = &i; +const void* pointer_754 = &i; +const void* pointer_755 = &i; +const void* pointer_756 = &i; +const void* pointer_757 = &i; +const void* pointer_758 = &i; +const void* pointer_759 = &i; +const void* pointer_760 = &i; +const void* pointer_761 = &i; +const void* pointer_762 = &i; +const void* pointer_763 = &i; +const void* pointer_764 = &i; +const void* pointer_765 = &i; +const void* pointer_766 = &i; +const void* pointer_767 = &i; +const void* pointer_768 = &i; +const void* pointer_769 = &i; +const void* pointer_770 = &i; +const void* pointer_771 = &i; +const void* pointer_772 = &i; +const void* pointer_773 = &i; +const void* pointer_774 = &i; +const void* pointer_775 = &i; +const void* pointer_776 = &i; +const void* pointer_777 = &i; +const void* pointer_778 = &i; +const void* pointer_779 = &i; +const void* pointer_780 = &i; +const void* pointer_781 = &i; +const void* pointer_782 = &i; +const void* pointer_783 = &i; +const void* pointer_784 = &i; +const void* pointer_785 = &i; +const void* pointer_786 = &i; +const void* pointer_787 = &i; +const void* pointer_788 = &i; +const void* pointer_789 = &i; +const void* pointer_790 = &i; +const void* pointer_791 = &i; +const void* pointer_792 = &i; +const void* pointer_793 = &i; +const void* pointer_794 = &i; +const void* pointer_795 = &i; +const void* pointer_796 = &i; +const void* pointer_797 = &i; +const void* pointer_798 = &i; +const void* pointer_799 = &i; +const void* pointer_800 = &i; +const void* pointer_801 = &i; +const void* pointer_802 = &i; +const void* pointer_803 = &i; +const void* pointer_804 = &i; +const void* pointer_805 = &i; +const void* pointer_806 = &i; +const void* pointer_807 = &i; +const void* pointer_808 = &i; +const void* pointer_809 = &i; +const void* pointer_810 = &i; +const void* pointer_811 = &i; +const void* pointer_812 = &i; +const void* pointer_813 = &i; +const void* pointer_814 = &i; +const void* pointer_815 = &i; +const void* pointer_816 = &i; +const void* pointer_817 = &i; +const void* pointer_818 = &i; +const void* pointer_819 = &i; +const void* pointer_820 = &i; +const void* pointer_821 = &i; +const void* pointer_822 = &i; +const void* pointer_823 = &i; +const void* pointer_824 = &i; +const void* pointer_825 = &i; +const void* pointer_826 = &i; +const void* pointer_827 = &i; +const void* pointer_828 = &i; +const void* pointer_829 = &i; +const void* pointer_830 = &i; +const void* pointer_831 = &i; +const void* pointer_832 = &i; +const void* pointer_833 = &i; +const void* pointer_834 = &i; +const void* pointer_835 = &i; +const void* pointer_836 = &i; +const void* pointer_837 = &i; +const void* pointer_838 = &i; +const void* pointer_839 = &i; +const void* pointer_840 = &i; +const void* pointer_841 = &i; +const void* pointer_842 = &i; +const void* pointer_843 = &i; +const void* pointer_844 = &i; +const void* pointer_845 = &i; +const void* pointer_846 = &i; +const void* pointer_847 = &i; +const void* pointer_848 = &i; +const void* pointer_849 = &i; +const void* pointer_850 = &i; +const void* pointer_851 = &i; +const void* pointer_852 = &i; +const void* pointer_853 = &i; +const void* pointer_854 = &i; +const void* pointer_855 = &i; +const void* pointer_856 = &i; +const void* pointer_857 = &i; +const void* pointer_858 = &i; +const void* pointer_859 = &i; +const void* pointer_860 = &i; +const void* pointer_861 = &i; +const void* pointer_862 = &i; +const void* pointer_863 = &i; +const void* pointer_864 = &i; +const void* pointer_865 = &i; +const void* pointer_866 = &i; +const void* pointer_867 = &i; +const void* pointer_868 = &i; +const void* pointer_869 = &i; +const void* pointer_870 = &i; +const void* pointer_871 = &i; +const void* pointer_872 = &i; +const void* pointer_873 = &i; +const void* pointer_874 = &i; +const void* pointer_875 = &i; +const void* pointer_876 = &i; +const void* pointer_877 = &i; +const void* pointer_878 = &i; +const void* pointer_879 = &i; +const void* pointer_880 = &i; +const void* pointer_881 = &i; +const void* pointer_882 = &i; +const void* pointer_883 = &i; +const void* pointer_884 = &i; +const void* pointer_885 = &i; +const void* pointer_886 = &i; +const void* pointer_887 = &i; +const void* pointer_888 = &i; +const void* pointer_889 = &i; +const void* pointer_890 = &i; +const void* pointer_891 = &i; +const void* pointer_892 = &i; +const void* pointer_893 = &i; +const void* pointer_894 = &i; +const void* pointer_895 = &i; +const void* pointer_896 = &i; +const void* pointer_897 = &i; +const void* pointer_898 = &i; +const void* pointer_899 = &i; +const void* pointer_900 = &i; +const void* pointer_901 = &i; +const void* pointer_902 = &i; +const void* pointer_903 = &i; +const void* pointer_904 = &i; +const void* pointer_905 = &i; +const void* pointer_906 = &i; +const void* pointer_907 = &i; +const void* pointer_908 = &i; +const void* pointer_909 = &i; +const void* pointer_910 = &i; +const void* pointer_911 = &i; +const void* pointer_912 = &i; +const void* pointer_913 = &i; +const void* pointer_914 = &i; +const void* pointer_915 = &i; +const void* pointer_916 = &i; +const void* pointer_917 = &i; +const void* pointer_918 = &i; +const void* pointer_919 = &i; +const void* pointer_920 = &i; +const void* pointer_921 = &i; +const void* pointer_922 = &i; +const void* pointer_923 = &i; +const void* pointer_924 = &i; +const void* pointer_925 = &i; +const void* pointer_926 = &i; +const void* pointer_927 = &i; +const void* pointer_928 = &i; +const void* pointer_929 = &i; +const void* pointer_930 = &i; +const void* pointer_931 = &i; +const void* pointer_932 = &i; +const void* pointer_933 = &i; +const void* pointer_934 = &i; +const void* pointer_935 = &i; +const void* pointer_936 = &i; +const void* pointer_937 = &i; +const void* pointer_938 = &i; +const void* pointer_939 = &i; +const void* pointer_940 = &i; +const void* pointer_941 = &i; +const void* pointer_942 = &i; +const void* pointer_943 = &i; +const void* pointer_944 = &i; +const void* pointer_945 = &i; +const void* pointer_946 = &i; +const void* pointer_947 = &i; +const void* pointer_948 = &i; +const void* pointer_949 = &i; +const void* pointer_950 = &i; +const void* pointer_951 = &i; +const void* pointer_952 = &i; +const void* pointer_953 = &i; +const void* pointer_954 = &i; +const void* pointer_955 = &i; +const void* pointer_956 = &i; +const void* pointer_957 = &i; +const void* pointer_958 = &i; +const void* pointer_959 = &i; +const void* pointer_960 = &i; +const void* pointer_961 = &i; +const void* pointer_962 = &i; +const void* pointer_963 = &i; +const void* pointer_964 = &i; +const void* pointer_965 = &i; +const void* pointer_966 = &i; +const void* pointer_967 = &i; +const void* pointer_968 = &i; +const void* pointer_969 = &i; +const void* pointer_970 = &i; +const void* pointer_971 = &i; +const void* pointer_972 = &i; +const void* pointer_973 = &i; +const void* pointer_974 = &i; +const void* pointer_975 = &i; +const void* pointer_976 = &i; +const void* pointer_977 = &i; +const void* pointer_978 = &i; +const void* pointer_979 = &i; +const void* pointer_980 = &i; +const void* pointer_981 = &i; +const void* pointer_982 = &i; +const void* pointer_983 = &i; +const void* pointer_984 = &i; +const void* pointer_985 = &i; +const void* pointer_986 = &i; +const void* pointer_987 = &i; +const void* pointer_988 = &i; +const void* pointer_989 = &i; +const void* pointer_990 = &i; +const void* pointer_991 = &i; +const void* pointer_992 = &i; +const void* pointer_993 = &i; +const void* pointer_994 = &i; +const void* pointer_995 = &i; +const void* pointer_996 = &i; +const void* pointer_997 = &i; +const void* pointer_998 = &i; +const void* pointer_999 = &i; diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32.so new file mode 100755 index 0000000000000000000000000000000000000000..6ce6d0cd22dba72959ffa1fb7f9abacc917c28bc GIT binary patch literal 93210 zcmeFae^^{~diOshjE;&~bkRi@U3Ae!C6W0(V~I;5afyprv}n;qg#;q(P7)*&7cIJI z(V|5cEn2kbqD6}qEn2i_(V|6*7A;z|XwjlYixyq9=z|vZx!*bOlexX0>-)W)>-zrj z{U>u}@}AdgKFqo2%;%i*nVECW{CZQ_nQ3Wh9`~}^lkagUB(iUK?>*j-C)abJ+?V4y z%5#7y+~;0rp2`QcS~9OF5qM2+V?X@WqLmOCeLu8Vb3L(Y-_H$WP8KTnnc5u zb;O!vU2{Xyb4guoO|nMZ*4?`=*`2Iug4$W@Ni=NTwr=+>WK&&Y*S4Bu!>*l|G}dgB zk}pZt?M_~Tze5WTUK2b&B<3^blfB?|!Mw$M|DHs8v6DV#1~ZeH#mr{rFmsuC%zS16 zvyd5L#+XISVrB`mlv&0sXI3yPnN`ecW-YUxnP4_Dlgwsj3$vBk#%yPHFguxD%x-26 zvzOV&>}L)z2bn|6Vde;PlsU#6XHGCDnN!SZ<_vR|Imeu5E-)9FOUz~F3e&TJuRqhr z%wT3RvzXb;9A+*vkD1RbU=}h%%owwXSBy);6&75J*GUu4{ z%mwBmbBVdkTw!`P^7Uu>m>JAWW)?G>nZwLw<}ve`1_ybp1HtWWG*q6nJY}s8GQYjK4u0plbOZLX67(+nR(27W&yL1 z8DhqmMa*Jm3A2=0#w=%6Fe{l=%xY#Wv!0n?HZqgUW@ZbsmD$E@XLc|4loCqL(F032y>J<#vEr(FejN)%xUHfbCx;BoM$dD7nw`UW#$UgQ^MDu>0@Rv zGnrY;Y-SEKmzl@RXBIFEnIUG3S;Q=6mM}}1Wz2GB1+$V_#jIx5GV7TMW+OAnY-YAF zTbXUlc4h~&li9`WX7(_9nSIQD<^Xe$Im8@hjxa}=W6W{p1ap!(#hhl&FlU)_%z5Sl zbCJ2kTxPB?J)8LYGkweqW+pR>na#{$<}&k``OE@lAv45`F^ibR%o1iPvy55JtYB6$ ztC-cyT4p^n!E9tEna#`=W-GIe+0N`>b~3w|-OL_lFSC!?&m3S5GKZMM%n{}&bBsC8 zoM28er z_A>{VgUli3Fmr@C${b^kGbfmn%qiwHbA~y~oMX;27nqC8CFU}7h3WYTUw@{LnZe9t zW-+swIm}#U9y6a=z$|2jm@#G%vzS@JEM=B4%b69-N@f+anpw-NXC|19%p|j!*}`mP zwlUk89n4N<7qgq$!|Y}DG5eVV%t7W5bC@~89A%C%$C(q%N#+!DnmNOqWzI3@nG4KC z<`Q$6xx)06^7Uu>m>JAWW)?G>nZwLw<}ve`1_ybp1HtWWG*q6nJY}sX1@MRA2WlQ$;@JAGjo`^%sgg3vw&I13^8NO zB4#nOgjvcgW0o^3n3c>bW;L^xS|^#b z2bhD*A?7f1ggMF_V~#T?n3K#Y<}`DLIm?`5&NCO7i_9hFGINFLIg779)5pwUW-_yw z*~}bfE;Emr&n#dTGDFN5vxr&DEMb;1%b4ZN3T7p6 zxy)Q)dVb2+pXp;}Ff*B1%xq>3Gnbji%x4xb3z;Eij9J7iW|lBZnPtp!W(Bj7S;eeo z)-vmv31%ZR$!un}Fk6{z%ywo6vy<7y>}K{bdzpRAe&zskkU7L0W{xmNnPbdx<^*$+ zImMi2&M;@0bIf_>0&|hM#9U^sFg;~_{h2;y1~ZeH#mr{rFmsuC%zS16vyd5L#+XIS zVrB`mlv&0sXI3yPnN`ecW-YUxnP4_Dlgwsj3$vBk#%yPHFguxD%x-26vzOV&>}L)z z2bn|6Vde;PlsU#6XHGCDnN!SZ<_vR|Imeu5E-)9FOUz~F3e$5oUw@{LnZe9tW-+sw zIm}#U9y6a=z$|2jm@#G%vzS@JEM=B4%b69-N@f+anpw-NXC|19%p|j!*}`mPwlUk8 z9n4N<7qgq$!|Y}DG5eVV%t7W5bC@~89A%C%$C(q%N#+!DnmNOqWzI3@nG4KC<`Q$6 zxx(~p;p@-zF*BH%%q(U$Gl!YW%wy&=3z&t>5HrRsViq$?n5E1zW;wHhS;?$oRx@jv z^~?mbk(p#RGh3Lg%r<5_vxC{m>|%B^dzihJad7$$XsGBGgp`%`QCc(_rFXZGlQAQ%wlFUbC|izJZ3(#fLX{4F=Nak zW-+sbS;{P9mNP4umCPz;HM5pk&rC2InMr0dvxV8pY-6@FJD8o!E@n5ghuO7L)d z=kfez_KR=6`LGJ@Jmvr4D_;A7uk|Tk;WwwgBRTKM?0qLA_qXq5NZVDpznMk*52byf zw4eIsn{V(}`!D{X{CU4pH?$3?)z*Ta8mgHf)X33q0%k9!1IQz8w%6f1^MvKPMy~7SdbC`z&vlLj9`7im@b@M0H}1aWcpHev`X8Ad z9^?PZC2^d`gDWmGlKZdw=fVCyu)h!N?*se$!2Uk4zYpy11N-~H{ywn35A5#)`}@HD zKJfoLHsd9t|PJ`ZiP6`5jhZdK^*UhT!>jY zS3uei9f3o?y#ED}=Lj4F=KUPv1V`XtFmD>3?TL=SQDNQ;h#xruhlhE;2a)dx94F>I z9^xcN;D9mjT8NV!fg{JfF^E$ffkVi=XFwD<0>_ehAD7OOw$>3z%;aYv);XdXVglk+ zN3=lvD@36qS|Q$r@H?Un;vuiT>nE68ytZHcD%PhY;**U-0}86oZ$!@!sGo*h!RKOSRU`A z5StuM7<+$Jc@VcDIyvif%)XU0^%2rz?1g2LHyDYcn03zKqMT2 za=dp!>~I7g+j}3xPDh}jcMxKiBN`$84g$Ai)-=ohiQeZSE~7w;S0I`k(XzLNd~Tn% z+Yuwh(&AN!Bn4W$4Y9`&*xAziA;jg5z+RW$&mn&02<(38U6n1O*%8+}j=RFhRYDdH%&V~53BZ?p{hG=y} zF~lz*u5m;O#N`mzI-(TfT8KY#L>a`*5N(dYIUl@tLR{wv&qfjVLtO8Obck2wJBqYF zb_8}u^u7(z?g;Fc==~7l21j5AMepYjH#!1)DtcGR_Zew_;t1@r=v@QR;Rx)z=sgFbH#?#j^E3eQ8%LBtoDR|Hh*F4tY+i411a>g=4nf@N2<&O-9fkN)M_`vj z?*v4bBe3tGcN*e0M_?yJ?;OPKj=o7X>gL^`^|g%CZC@Ih>cxXTe45KRzwJ0cU}M$F{jIwA|=c8Fd_WJBBw zagQT%ARdOe*Acl8PeS~KBk~}ghv;)eK15!wi2EFofGC8x-w}-vMG$}Kh$KWQM86}N zAu1pqa6}74HN=CCXoW~X{FNixAetct9MKNZ2Jw(1Iv_eB9(F`0#GTl@{5l75GJPq-vBW599g!mgr%t5>kG31DOh<70#bHoC~#}JP@ViDp?h`)6N zPP5}Z;CKojA#NRstr?K&tLX0}11EK=r8Ao(NR6{)Lh%ShePZaSFj__?15rG(ULv}C4l(YC9Ec`}7aWlbaW%w?j>vb@#DpVotd+MS zU&Kp}=tYZah?m&{A_4Kwj_8MIhM05&&d=g)gLuUeI8lqY6XI1z3_K1Q5 z#FQg&4j1nb#A}Wig&2i+-4Qsei#PW;5&!B49JcE{{CE-5j#xqeI2Pg!M|k$W3=nTR zA{`Cn017&RK&|a67h~B zDkQuK^pAHP(TzW8hWHOh^gy&h%sHYLq7&jhNAyATK)mmWeu#dE|8&Fv#1O>1Ba#x{ zQHT#5fo-UF0^&nQV1wwLmbb2H|K*5+jUw(v|5$KDA;iNFA2}if@g&5@j)*}#5Ai!k z6hXWSvFM0mh_@j=aYPBkhY+7S0!R9JKZp2lN0gz(D$K$qN8lJh?;I-q%n_A86)}PS z@wp?$@h8&||H}~*5OWaAj+lg4g!sY{Rd|dQh%X&6jTXL>MEs84TYvIhdv&W(npHngJLO zUXl!&L6{7fLuqiT9$z-h8XBCm$Cn559hwoCLYPb%oXE#l1alb87)&Y5;WXngi!k4% z$tw}F0+U6P593=a<_MYsm@JqhX$oO-VZKKbf+>K>risDCV2+|Gf+>MHnx+`09OnBp zeP@fQg2|!50ZqQibz+X8!6{~ZGcd=};AAttd6*y2;IuQoC74_qoPfrMGcl$eM}t$* z_;7B=wBu=TQW{@2%nxaLwus4t$)o9oDTFzJ28Z7GieOHp>4#~R(=Mj{$bFnmVme^* z-N%9HhB?W79GE_slikOG8H727W¯hsM;W*lZM%@E8K%sQH37+H$s;}V(?m<*Ug z8XQpK>qryhr>QtoOgBt`rV^$PCP-5SGYAu+sfHPW3DeZVjKf4|>S3l}qBIGZS(q42 zBg_I!oF)mg409UISh1LQy<&ckrWCJWJ^D`(O&LrQW<5*JUmHvrO+I=;C(PM21u#7@TWAVl0*8wE z8OD4(d%Ou!Vu{65VjOestS%@j-p%y~4^Fx4>U)6Bpm zVE%w+7N!}dl4cHO<9EbdK+}x=lfFvKg)}WNnJ_=6X@$vwsiJ9v$%na!rX3~(b1_W^ zOfk$QG@USIFx50&FqJShG~F<@Fk5MQU~XJ3W*be044izo!_?Ab!rTi}N0SBfFwAzE zY?vouE~UwVc^;;oCKu*am5tyrJ@?bW? zTuqY?vjyhYGzBmh!nD#9!W`@qa}CWn%#kqH(oDb{5A#PflQ8RG+GwU=PJ_9QW*X*9 znCod~V9tg4W13l*i(%Sn=3ssSa|6vh%;hjQ(k#F{k9FOj(6q^5&i5)z2Ms>g@x2Xm z6AeD4@qGw$GfgMV=P4JG3uU98cH_RHWA#b7SfjJuHRvLU(;X4uLPigvK0x(@P zI688ntc^c*pngW;?VeX_Ugn1q2&uKz1 z@51!Z#9%&#xr?R<=1Z8nX|m50b2>ip`z_6Qv6$`XKfN>|ycSI`_t3;(u7Rn zn7^PYhPfT4kER6XUYPr6N?{&`xu2#C=1G{pq$!7a9;TnB0_H4yqV@ny&qguV`oug) zvxqh~!~7M^63m@212oGp_rp9yvjX!d%)>Muyvk3*{54HF%!@FCG(MQuVIHB$fO!|@ zQJPGctFiX`8=8KY(+?IiL^A+$7R+NbgD~gAJWewNvlZrVX@+5T!VJ@lz+4IQ1kEVS z^)OG;jKSOr^LI4kFn7a@&`iKwi{A1SP4QV`4v@iL+S4>8Fo(nZJxwXhu`r`FWiThh zJVR3s6M=b_rUGUo%sq#1?T3G+`hV=!03Owf$OTo3aS%>>M?FfY?g!rTq>&oomo55i2+Ov9YJ zM$9WTzMqP@80J-)447ZQ{0mJc%;hjsG+8j$!n{V44RbTh>ohqqcf$NDO)kv+Fw-=7 zFpt8#L6Z;jG|Zbc1u)w&M*26JW|$_J8JZTDt6|=vX@$8F=53lbnA>6gou(b;UYJ>$ z4w#2w-l6G)c@pMbnl6~;a^8w8Y%)xT-McRin6=htH^j$$&Wx=3|;ln3E3| z^E;XdMWAXgK z7flPy?J&zUtuR;0Pbs8*K{Ew&Jc|A7$40b%+W9h(G0=OgyhM(SO#^WWk&Z^BtOOn2TXDX>wqG0dp8lF3jaHhtuT2TnqDEntYg>VX|ln zVD5xDf~FAWewZU^LNG^T^!`1XV$At_(SNdO+R)}J}1M@k|4`_N}R-td?()7Xfoh0Tsnq`0?1GhcDoq8<;V^|Xl`zM`_-U$OPKF84RKrAI zf;6=-8(~5;^)OrTm3Ej0rzr7V2os@cMVsv~QJOZGCYTsaJIvKEaheX88(~hP>4do* z=J#m2VD5z}qUnZt7-l_956qJ=r_=Pp+<3g0AJa_1Osy4DOfwC$>W5-B(9FQRiZSg* znpv2$Fb+S1W)9|jm=c3mm2W@^zQwj4ZzHu+3se*YL=4_g3m=|HT(A2`b4)ZgbdYE@%%4rfXAH$qO z(+Kk=%(*m4n5WS*f1hR!=0%tant7Ntcoyf;EWiX{&Zk*~IUnyG{(xo)W-Cl3%`(hR zm@$OOprlDa;?yu8cNN%WuV zX_{eLVg8t=1*QY0ou(D08|DU@Hkdw`8)@2M24Vh$rUPaKrh}#vW*p`wnl6|rn44+3 zVctDf%x`F7_&p(%zr06TczN>c)JILx2Yl)@Yf(?wGTb27|rH03Z6 znA>S8U=H59TMkVn%to~7rm2GI&lPhAO&81%%$+pdFrzSkPSXQ30nL z=a0lZL^B9;Jlg0ckP3cB4Yfcd}Of!fr$cZpd(3J0OgJo= z33DRM2u&4C0Ol#0YM9euo~EgVISc0RY3gClhZ&`rK|S-U#5_YYi#D@s#XL)sz?fti z<{xP0(I$p1;~32XObN_$G>b6hFwfI0!Bnmj^N%#kF!g9NPBR6Qgn5C+gLQ8!%!@QD zXtNXj@SkWJOU1l;yqF1^BD@w?qRmS*#V{YD&C4_;Fx_|s|Cy!~rVnP4rVM5f<`tT9 zn4|H?uhLY&oCxzTG?g#`m?@enm^U%!U!$4dET#aD{5s7v+QeY~m1YK}1ZJ9M7N#8L z4VpQaDwsEE=3(k#{*7h3^5((KOfTgV7g)cizWl67k{-tlL<43HXqSs!HmFsOp^^W4)Z&j9GEGX zMVefgS(r~~@?aKVKBdWrc^m7E|E6h%`4DD_rUj-XP0VLBtuU)F=Rc=ugDFRw|3%Xd zb2Qp4({#X8q0JXGoiG8k`I4p!=5(03uc9;2c{bDLB67ygh{}BO)~}44D$`m zG)x4Zt6nT2^UUCb()IhcO5Sxqw!GX#@Pvj8&+kcf%Y^(+Kk*%po*Mm<6mMGiaJ&9!Hx)X>zxSc@}03 zO)J`DqSt+grVS~A6f%;o5-ahk%PiCIDaIgO?q zuMT!GN&7vT3YaXIBAQB=T$uGVRWJoGr_)r!#9)3*Qwvi9Q%qA2Qx3C%CIM3gvyr9| z=FBx>&Y-C-7Bh|hQ$mxD*J2K46O9jM5#~&qTKv@t%ui@C(Z+|haVbp}41V=EZ8J?h z{wf#dESem&DS-JYO)g9fri>;J=J8B1XVX+~5Hp7UvxQ~^Z6;xUMl%XC15-{j2J7qR2Xj8n49tn?V*Y?8^b;{V@##S& zO$_FAw7Gz$2<9x93u%gB&WHIqO$p3am@1l5n4K^e(Uiel33D+`In4Dim(Wze+zL}o zQwejfS4<7f5X{9eTWN-2egU(MW(4MPm|B`qm}_C`XvSb}hS^Rt4s$2Wr8E;T_ruiF zOu{@0(?Bx?^EAvaXr^Jl#-}vDq^U*UI2fPlC1~nlj)d7klYluMW+zQ0M%`~8AZ8a$ z70ib)jWpFTpTk^6Qwy`|Kru};^)PE-cGDzaj)qCn43&sE67S9T&=i~@=6IOPX$oQ1 z!TgFQ2J^8`OfyZE3_E;Z!dyX<4RgRjVy>jgfjJ!J4{35?j)iHV$%8o=<|>+em_sG0hyzr!eg_Rp=XM{ZPyeG$G8x^I>kJDT3Jw^CvX3SaO>(#B|Wq zpC#sMn44&lcujAFxtXRBZElD8joSw1UYJgrW|)UzZlP&`c@pMUnpT)~=$U^?GmLq7 zBKl7k%?L~Y<~EvU)N?w_?KCYgXTkg#O)Jd#Fx@n5F!k6v+(FY0vlDIZr0IZ3qRpSv zbi!PZHa#?5Fn6bmxr-(r^Kj!qV(z9X#H+If=C?EvpSjP3gaG>b4t z!aPW`1amyhU(qbXtb-Y#S%G=@ATbZoc}`(dJp05t=!emtmfwnTL53=4qM*m;>EF{V!hDK0 zqclq}hoj9iG|MmtW3=-u%?ix1X!8#=o}Y?29&N^G(qUeNd5)$K=5?6oX+kjX!u%sm z4CZ5)ahf8SFJWGwDTX=VJ7Qj>DSU;kXJJJ2D$N+o`7r-NGY+#AW{PG4rs-%guhC4xT!}WX(@eo! zjW+*EGYxYq+Dy~Tz|^OSd4p!GOiU8yO`36-R+xXInSgl|-}TSX#9*F=d5fk9=0%vd zX^LT9hxvD!5}0>kW@$=cK8AURrVQpwn0IN)VIIf2?muV}XN!3jW{##2=4F`oXp%5% zF!p<&rXP=UG|Yd}48WWSGfy)J6M*@EW(ekVm=9@&Va|g2FPagU^I;ZfMqysY8v7%f zye(qhg!z~zALf0S-_aDnT#RpF7HM+vEPes=iTgM(m&1JOJ`T*aF#qj74$RFkOEiTr zcfx!|6N0%P=5v~u7#t^b!kX_MvU<(;*JR39SgS&w)$;kl?;W!FyEy)Q^@*O%@-)-) zJck@|`XQ@*@)3+QSmQMK@lj|Zi`pU5+T%I!M0q$L@Ahu~u55@P!rf$dg-3|u) z>UKcg4yxNBbvvwXN7U`8x}BOWEfp}_Kfq1I^Ks+_wKs;4{AfBo}5KqmkU@$eUU@$eU zU@$eUU@$eUU@$eUU@$eUU@$eUU@$eUU@$eUXgu|pQB{9b)gM*$M^*h%Rew~~A5-W``VW2*j`u3z<;sPvOl_v~&u70Y4b)Ju2mx-?OD>b70A@?WB6 z=Pw)f>^OCI)3#H0?MYrzv$M8oS3~WoC3Rc(T)MAEg#xKpJQ&iq)hnWUS1^>CdqLIH zf+6*as9qNgsaGVVUXf7h6$z`}7>=c0{jjPnrfLhTr8TB%i>caTsN&>cvnY2B7LTRoRb15{45!)z!>KmGaOyb*!)ktpRS#Fw3Wik=53BhZ zR`WBQnx8Q>-I$tgOieeYrW;e!jj8Fz)O2HNx-m7~n3`@}y{NvJS2tx#cVTA{+!v_gfcX@v??(+U-)rWGno zO-oLwwyzI_3RBYxtNLTA{+Oyirs|KW`eUm8n5sXn>W{1XW{1X%*X4AFB0sP>r&Js?MMqWd&oY`59EBte_fYh14i3q()gGHOdO9 zEoMlKvO?;)gw!Z2q()gGHOh*q`eUm8m|EAxRQ)kke@xXMQ}xGH{c%-)T-6^}^~Y8H zQMJ6pRsB)5?8H_5QMDY!)N2W{1X2Z;oZd^?_uBIDT(~YY>7FW}as`W-(O*g96A#pX`s9K*y_41|Xi5mZe z)c7Z)#y=r7{t2n^Pe_e_LTdaIQsbYH8vlg!_(x4QuBIDT(~Ya?#?^G=YPxYX-ME@= zTunEwrW;iAHmsK4uv&gYY77uk+x?K*)`!%#KBTtwAvJCZsqKD9ZTCZJ+!9jbmarPP zgw?nuti~;2HEs#3@jzIOyTWSR5?14`uo}0-RsC^Qe_YicRr4pV>W`{<6<75~)p{?Y z$1Q4}$JBBiQtRZ9S`UZRx;Lc803kI72&pkZNR0tPY77ukV}Otv1BBHWAgsm!VYO`y zt1&=WjRC@H3=mdhfUp_^g!LFe)gM>&$5s7tRexO7A6NCqRsC_bUW%)AQCzQo)Vd<1 z)(;`IP6(-ObVzNZLuwlxQrqZ|T8D(xHaeuX(P6cX4y$c+SZ$-jY8xF^+vutL<0iYyA;vwmq?{Cb_m|Ys328yS68{H{vhr_w3l}=GwiV=l*I} z(=TBXyVuq>)FkS*CD&iNb5HKtOAFB&^0DVKoK`t1(DejX}a{3=&pjkgytqgw+_tueObT zwaxddZN6V^^Zja@?^oM=IgkCm&s6+so9|cKe81Y}htzb#YMUQc+x)N^vxL<)KdiW`@UV`^L$Q{%Fj8kfcNxJEr+zgn;R)%M@7 zw*P*${r9Wwzh7ENgI|pu{A%prS7Qgi8aw#a*uk&H4t_Ou@T;*yNcD%X8ass5*deUO4q-KR2&=I} zSdSf4{Sj4vMAaWr^+#0w5mkRg)gMvyM^yb0H9uo&934~R=$INutEa1akLoNPgucwd|>JmtT#${A%2#TJQV2)F;5|^WS~kZK+b9Q>H%k zO?~DYQ8h(WO%YX7MAZ~g>!FBR4@J~^D5BOw5n1>AUw$or>i^rf^6vLpF*T-*sWEL# zz0Xn$gIX3;S5iGmbtKh~R5wz+NOdCBhx}?(<5!~^zZ%u})u_g=Mm2sls`0B)jbDvw z{AyI=SEHJ^>SPgBLqydOQ8h$V4G~pCMAZ;cHAGYm5miG()eulyeASUuKT_RD^&-`Y zR3B1ZNcAAK;?>(RH8%09v58-eP5f$X;#cD@zZ!q})%Mn}#$SHD?N#G1`K_XTOItvV zzXEFf6;R`^fEs@V)c7l)#$N$7{tBq^S47nxR?j!0>W`@UBdY$0sz0LYkE;43>M^6L z{)n2NVKqM^>ULDsA64~7zg2(geLzgTpO2~c^D*^)KB{_CRLxt}xmDj*U0d~R)v;B- zR^3|lYSpP#pZ2S*yI*bH{d()JMwxy!%Ji#IreBRR{c4oySEEe78f6C5I3b`03IR1z z2&kb#K#dgwYOoMcqlJJPE(FwgA)@M!sQM$S{)nnSqUw*R`Xj3TsH#7z>W`}WqpJR> zsz0jgkE;5ks{W{|KdP3ns9M6JY6(-FTlHtvh1JrfRu11)7&!2)aZ74+5YQtRJ#^7y7d?2im3V{s{V+oKdhc_ zMAaWr^+#0wQB{9b)gM;Fy{M``s_Kub`lG7;sH#7z>Q@W1T9(zKtd<0|AgJX)Ee2{S zPz!-t1_Em66i{QQfEqjn)aWUohED-CehR1oR6vcO0%`~qP-Cd5nr>80H=>??R82Rc z=0#LZH=<@tR82RkrW@7MRd2hZ>dlr~Fw}CPx{2yls#B>xr4|X*qg01d{VAY^6#+G_ z2&jQYK#eQ{YG@HqV~c$RM!A*yPKsv4rIhN!9`tk-_3hN!9` zs%nU;8UpGS2&m;Jpf;KTwbcx$&1OJtHv?+J8Bkl!fEtws)V4FAMx_C@^$e;}X;6*) zf@)M6RNMTZ+U5tSs|^e?)bW``V zW2*j$>ZmbQe@xXMQ}xGG{ZaLLMb)}Hu3o#idX91Z+Nr)5P}{nI>PrE&wF{`tT|jN` z0&0U7P+Po!+T;b)HZQ2ghCwwp465;9P>lzJYCITJW``VW2*j`sz0XckE=cqSFd|Ot%(C_?Hf>Q+<@8^ z1=PkUpteQ`wq-juKBJeTfD)aLrv$y4@tHiYHBnmYM1O->vjH@zFq zJv;aEsONx#58U9B)0G~aet3G8{JhKeR%gqpIKRL8*j2~N&xvd~PY%dgxBH46@F^Zl`=Xw@$tRlqn=?*Ir)Nv|GM+^Q@Cu zv92a5-vw^nBZrN6)^W%6z4c2`GPnNkE^y$71$02dsEkEZE)ooXGoX3MJ>Ong>U};~w^>SM#<&gulJqc-p zE2isS+(Udeig4R?OB-BE+(wdaJ2`T3-~4lb^V_`-&E4DOa$63?+dFSOKb9M(I(5sf zy%)D#mCzcwVjlXWoln}i_n{$b!lhoWcn)ZnA?@({KeJ?seb4tYxsAU;y9H^tAnoK3 zs(lytu`d_nw(}GV6nZ>;-`Uq}UkxpyFu(D5eLs^co{PG;^<5(lx8-5>UeHdC1$n=`J&9oBotMk6(K{SpL6|!tvOd za>X*FA8)QG%@dJ6<6hjybJ&vA4m& zd+(pJ_ZK^VjU_}*)w}P4>EZFxi(R$GgY5^FM?9}Ic~-dJS1kYSy{y^G8O20-JlvmY zILmOh;T*%chVu;P8!j+hXgFjzX1K_3vEdTKrH0E4mm97yTxl4mhIB5@{Hr!xYq;KU z!f>PEq~T`6ErweSw;66X++n!WaF^k3!##$34fh%DH#}f?(D0DqVZ$SaM-7h|9ydH; zc+&8c;c3G&hGz}W8J;)1V0h8+lHp~;D~3HAJiIvlG2O7waE9Sb!&!#24d)onHJoQS z-*AE9Lc<}$F~d0JqjPbdZ?WML!=;AH4C6$P`tfj@N6nRnaf(NMf3;zpWJlkRQ|xHQ z33fC$8crH+Hr!&k)o`2PcEcTpI}LXk?l#;eNvdh6fD~86Gw~VtCZ>nBj55 z6NV=ZPZ^#zJY#s)@SNd!!wZHN4KEp9HoRikv+>*gDc!KoaE9Sb!&!#24d)onHJoQS z-*AE9Lc<}$F~dcMiw&0;E;U?cxZH4s;Y!0*hN}(N8m>2-Fx+T3X}H-iPO7TcAFYPl z47VHZFx+Xl%W${h9>cwc`waIR9xyy;c*yXu;Ss~5hQ|z#8=f#cX?V);wBZ@Uvxesk z&l_Gayl8mI@Ur0*!#HuW?hiN-u4bR%48xg*vkYe&&M}Nr-|Fe%#J8IB4daAv`hJ|w zO*2kJrWq%9(~Q%SX)ZQgVz|_Bnc;H76^1JfR~fE0Tx+=AaKdn-;iTba!!3qe4YwI? zH{4;k({PvJZo@r>dkyy)?l(MOc+l{W;bFrghDQyL86G!0VR+K;l;LT^Glpjk&l#RK zykL0I@RH$W!z+eUAJB39U-Iqc!)G|daHiob!`X&&4CfloGn{X@z;L1Akl~o&BE!Xo zOAMD9E;C$ixWaIy;VQ$`hHDMi8%`K*G@LZtY`Dd6tKl}o?S?xHcN*?8+- zT>cIF3}+b5G@NBP+i;HIT*G;W^9>gmE;Jl695Y;GxY#gGU9QImrH0E4mm9`OsP*6D z6x5ol3|AY*$)|Pudcz6BjfRtkn+>-ZZZ+IyxZQAv;ZDO{hPw^-816OPXSm<+fZ;*I zLxzV9j~E^`JZ5;@@Py$>!&8Q*4bK>!H9Ti{-tdCqMZ-&mmkqBN_MG|c{)SVO>;8um zlxxPx^)=(<BhA1A!kTwu7+aL91XaFO9+!zG4G4VM`% zH(X)3(r}gGYQwdL>kTIiHyTbFZZ_OvxYcl*;da9vhC2;+8SXaRW4PCFpW%MP1BM3; z4;dadJYsm%@R;Fo!xM%l4Nn=KHauf^*6^I+dBY2a7Y#2NUN*d9*z=QbFJI|~eTFj( zXBy5joNYMAaIWDz!}*2_3>O*>8IBn)GF)u9#BizMGQ;JDD-2f}#;Mcw`V1$>)?912 z-f+Tjqv53CX2UIpTMf4vZa3UvxYKZ#;cmk{hIs7v zp5c7M1%?X^hYZII7a1-#Tw=J?aGBw9!xe@r4dcfz^!%s7vo?-l8iteukh6@ej z$1iky{Pcxp{P2Zl{OpBh{OE;d{N#n^GQ;?}3w?iu;Y!0*hN}(N8m>2-Fx+T3X}H;N zi{VzoZHC(ocNp$8+-11iaF5|$!+nPP4G$O|G(2Q@*zkzqQNv?~#|=*yo-{mVc-ruc z;aS6ThUX107+y5IWO&)|iedakTIiHyTbFZZ_OvxYcl*;da9v zhC2;+8SXaRW4PCFpW%MP1BM3;4;dadJYsm%@R;Fo!xM%l4Nn=KHauf^*6^I+dBY2a z7Y#2NUN*d9IJJX0$N&3wICt1*IKyzJ;Vi@1hI0((8qPDEZ@9oPen3dCZ}9U$n(^a7 zn(@;?nu`tNXM^4c8j3H=HosXgF!O*>H>DR>N(E z+YNUZ?ljzGxZ7}#;aCkNkv@?yu>FeTFj(XBy5joNYMAaIWDz!}*2_3>O*>8OBdo>F0+Z zu+m&?7(ZU6@5fJ9X_n*UzQy?2D(B*?FDndJ8m=;2ZMfEOz2Su6M#D+N&4ybHw;FCU z+-|tTaHrue!`+5^4EGxDGu&@@!0@2qA;ZIlM+}b|9y2^{c*5|c;VHw@hGz`V8lE#e zZ+OA*qTwaO%Z67Bd+>8$doSGn8}=E_Fq~;P%W$^g9K-nOGd=x0!}*2_4C5!y^xxwL z&ouA-xwE~(d4BkTY<+*R;S$58hRY0>8?G>1X}HR8wc%RB^@bCM8x1E7Hyds-+-kVZ zaJ%6S!<~k^40jvuG2Cky$DcVD=lHWebAP|#0mFlahYSxJ9x*&>c+Bv);R(Z&hNlcq z8=f&dYk1D^yx|4Ii-wmBFB@Jl?AhYZf36P<`wV9o&NQ55INNZJ;atP`K}F}{)PtW> z)Qlff)Qlgu*Bmk&GhAf2*l>yAQp072%MDi;t~6X_xY}^7;d;Xf!;OZMhMNty7;ZJ( zX1LvOhv81cU52|2_ZaRq+-JDo@POe#!$XFL4UZTeH9Tf`-0+0qNyAfyrwz{-o;5sY zc;4`W;YGtshL;Vm81~5V>3aD|H|#Tu}Ifio$=NZm7Twu7+aL91XaFO9+ z!zG4G4VM`%H(X)3(r}gGYQwdL>kTIiHyTbFZZ_OvxYcl*;da9vhC2;+8SXaRW4Kpw zR5~J#hsU`WR;}`R$|Z3;JdU{sUnDsqoJ+2i^c3^>^;K&;IFCb2wr}Z@X~I`Yh7{i* zT&Vaq;R40?2V1oaIxaMgo_kEARJTtm@wX7x%ECHjQ3wIza)(JXD+`XjL%bCeoq*mx48U? zFg}lQ`72?3UgPpXt7LkLj}XS^J?{O-3FGr1m)8p8^B9-o!uY(#?eby5_`KTXV}$W}w#z38eg-^aO+_n9!huX8y~Zs7Yomk*U2_`c8OqvQs@4|Mqixlt|q_qgnr z8|CW$^}=O}Hw%|4K2NwragA`X;vK?8imwokDZWlPr1%!$LdACp=gayq<~=6E0AHe~fUx;**5)6o-X#6>kvEQGB*=w&DwfvlQ0}$JG3}Ot?_- zRl)^|ZxF`uLT>%H2`AL+bB}Pn;)jH56+aII$r$y$^)z6@MmN zt2pgId41IDd#Et>FLdiYN*Mbex_p8#_D^)#FO2;cU0yGY{Tp50ER6jhT|Q43`$xK5 zBaHngUEU##{VQF*Lby`#b;1>jZxJq6e3x*U;s=CF6+b3iqWBr%V#O~B7b$*2IHveL z;gI4_gt5Q1TkluG*dN>FgM2bS6(1pt{kh%yj}ylJ-Y%~d#{S?g$Az)KxXYV_u|K)X z=LlnebC)j?u2!#agK(a@e~)mk;%kI+6yGFVUz~cpJA|{;{r3rHDt<(`R<(ah*r)D) zK{#FUYr@s4{X4>qn^M#JNI0SR3*maj-h*U%iVqX6R(y@KE?0cE zFy7y}^Ya2>91rMnoiL6Ubonx298c)-Rl+#l(B&J1dlcU$+^zT?;V#7w33n=fLbyZm zbHasceE*6tjz37}_T(+$A~nALKzLBy|Cun3Z*beE9W2jB@u9+fijNZRReXYQqZ+^Y zh4KA_`*`bxht%{p3wzYxpC^ptgWUEt!Z?1&iS7{@QU z_unOq--7aEapggo_n_B3z{SE8&>pgAS4DD?UOv zaaO9n)jzE8MC@gu@G9z0!MX1xD>N*KqByZnMMjwg5dHDMfY?(#drI3C^QkA!i&y31b( z<9K$Ly&1B8ReYE*j)!;eKSmhG%e#D%aF61!aJS+O!d;5b7VcDhfpCZ7I^lN3mkGBi zzDl@N@eRT)if`ka`_oyod3w>mxOVCB$wY1#`%+6 zeoq+ZS919iVVr--<*$UXKc&kDtKy8j5_O2x+sS14X9T&_4ST&8%FaH-;Rgi91( zBwVbxLAXfq9^uB)RDIV7<9sb{y*CMa)a!qTFwQsQ-hZDk&iCT-Bf>ZzjLT06<9snL zzaWhB$+-NQFwQsQ@;kzbpQiXDVVtkVz5fg08MVIjen-|v>i)xoYZV_OT&?&d;VQ*p z;Y!6Dgew%EEnKen0^vb5{W{@Nb^m3;I3Jf=?^VJ$Uzf`_2u~=!O?X`KJ;Gy(9}*r_ z{Dkm`;^%~i6~7`pr1&l2LB$^k#}t1i98#PnA9NNfK2*3s@lnG0icb*EQ|uScRlHs} zNAYH1d>`u0kMo4H)crNMUv2Mp2;=;UZu={QasEY@uM-|ne2Z|u;=6?V6h9!`tN1Zt zoFCGCyk~^F6~83hrT7iuD#h;!S1SHQxI*z)!sUt&k`uv}DLz8DRPk}bC5qPy7b}hn z7b)H(98-LbFh1{gpU*|Y_&nU@24Q?&?(!aCe4g&|HNyD3-Q}Bv@p-(uM%!ke1mYS;@gB<6yGD< ztoR|}URB={!a3^x=Y+ErzapHa_$}c~#UBV~DE>^?r#MYcDxR+RP@H63@lnF~{@$G* zCkW&FeV6^hB_%0dFWji+_h#XQ;`4;@{gV6lHNyD*$>klw)rzkWu2OuRaJE_>-y)o) z_%7j0#SaMk)ZafQoUZs8VUOaMgzT*nxcrnb_7`#a1!3$@;__?4*x$tEcZ9J&ipw7fV}BKw zzYv~Q?3EKtPbof3xL5Hp!aa&l67E(U7Vc8KLAX=#*}@%)FA#25TqoS7_%h*E#a9XU zs{V9?aJ{``1JjQs`O*L#OB_9t}t3gJG**9rG3 zzD2l4@m<2*iXRZ}Qv8^3r{ZUXI~2bp+^+Zy;WowZ2^XvSKM@Y8`@a${RD96)Wc#Q1 z2;qFi#|h^tUMrldI4+!{c$09p;&X(v6kjBqsklLSR4u=Ighv!#BRs75CgCB)cL)zE zzE5~S@gu_hik}khQ~ZK(uj1E)lZxLF9#Hf1BjF`g{};lGioNoq0Sk%`6P{OmjPRV| zlZ0m#hlOVpZxEhVe75kE;tPaZ71s&3D85X%S@BiENyRq^H!8kOIHC9+;d;dn3D+uq zLbzJ-bHY`MUlFcU{FZQr;tzy z#V-lxD}F;bPw{)gxr#p#&Qbi8aJJ%uj+W(9@e#tAijNb{P`p;yr#LP=t;RE(gr^jr zBRr}2BH;HsOB7_XuYyen>b&@e{&6#m@<+D}F`Tqxdah9DnaFuOA5G z_#hZmo6rU$tthh$F zNbwHgnBpshLyE5x9xqPSdy8wl9l&IjT09l~>p?-QO?{D|<3;-`eC6~7=nrT8`BNyYC7PbmIK zcwF%p!i9>x$I9!Y_%Pvo#m5NeDLzR!S8-T4NAU*XY{h2_XDPlwI8$+*aE9W`ga_64 z!B+_nD850sU-50ieTwf9?p6GdaF60Agu4|#C)}m@72!_BZwYrO{y?};@n^yXiqn1| z^H1@i!g-3163$h8f^d#vzi_tV^}<<-Hw$MfK2JD9agA_~T7Gv3cPqX^xJ&VM!kvn5 z5$;fYmvFn{2ZY-cKPKF&_;y_hprx6(u_@ zsV*$+>*}s`$(6%bsts8!BqWuzX(g4_LdHg-3yEfAWGrMXq`FkXLPAQSnJ#4QLdLe& z_v^>!*?#}I&+|UtZ(is7bq`T&39^%(SW^%4C2ezp1#dV~4^ zdXst|db@frdXIWH`k;Cj`ndW~TlsvQuHPT;_b;kDCza#mX=)vk) z=!euZ&|}r@=%Aj8o~S<3R_;$%*YNt!QTL*|)II1W>V@c4>Q3}}^?dY3^<4B;^=$OJ z>RIUh>iYG|&BdMnzIs%B0I%l<>V4?*>b>ZX)w|K3sdu6KJS?Bk1J&Em530AIN2}jK zoBHGNdQYf79zCu8c=WUN$D=#cxA1zrsJ?-IS^X(`t@;}J4fR#@X7v^HPW2A_etS>7 z4SiVMhWnpXKaM`D&gjc(kG`(1pl_?kq5FSV-+$<#>QU&C>SK6+FkXEG-Ksu>o~%BA zo~ho4o~Pc6?pE(cFIVqEuU79sZ%}VTZ<7x2t>5d(;cj2i2YE!}H`O!H{YL5g89i9tiN7yBq^|#bi{`uEFJsm7aXzTe;rvAP8T54ZT-<+-`V`K0 zsZXGnsE?snsb}Ny>(#sPesH6@9rxd=-huP)swd(6esvrAsQPjA2kMMIulDGV)fMz- z>T&2kql@BIydNB>UWtBCT|Rsr`>K*8r>TT$G>MiK*`g#2RTCN_0^Q+aP&>Pev z(3{l5(c9I-(0kNF&FQqe9Q6&n{$1)%(M#0V(5uu}(d*S$&>Pj4&|B3P(C@0xq4%rL zppU9QM1P=u9erN?8v0}PI`n7iHRwKL^n9TQs#l^PRIfmfR@cx*-HV=}?mK^nN^+NPV>Q3}O)$`Fe)pOC!-`Dp8`fKV#Q_HXC zTj~So(dvEZih3{lhw9zvDe7J5nd%+rx$14`7t~wOOV#h7SE-xP>(mAM&3fa%Z~R() zZvs3*kdawE#`cLYs=)bD3piiqWp)aT}p#Py>hyJ&E4Z6=b`HLQ)UWxvudIkDn zbqzgU-HXoZ9`qCHh3Kc$o#;907Ide&8NFCtpkGnnno>T0Yt=Wr|4Mxg{af`_ z^d9vU^a1rH^k397(0^06qtC0SqOYhYq5q|BL;qL(IJ*CM`GFpy_UP}ZE9ghn;g%xn4a2{ib?2db4^M`giIf=soH|=s&6l zppU9s(C@38(Pz~K`lI^ef27w`pYGFlKyg)lRb9XJ={vCTaY&!WhoY&tb1>$9_idb5 zcfXq&edT^P-+BCO1KKAyYZ{TqGn=gBt} zUv6~E-LJQ)_)4Sezn=Q7sTk1sc<-<+62ix?1seWr}{51PJ$9Gy6 zW8&6S=wd?Lni@Y{zWhW}p^LY0Yij(f0Oco|KKIk@>wDiQPwJ?t(8UV4H5J2(zCS2G z@pT;z{z89SeedfZR9yex=r6SSLKh2`)}HHnp?gtv+2Y3*6r(zdQJqCs&-2yiyL-B- z%NKRmYF*1})umlMix(_=Y{7z}`m=V^T~wYiOk3QGAZ1LTD7QKtR7uEED*49=WXB;OSM;r$ndmK9)TO1o4SIXmz z-HhFg-HhFg-HhFg-HhFg-HhFY-GtqQ-GtqQ-GtqQ-GtqQ-GtqU-H6?Y-H6?Y-H6?Y z-H6?Y-H6?Q-GJSI-GJSI-GJSI-GJSI-GE(>U5{OlU5{OlU5{OlU5{OlU5{OdU58zV zU58zVU58zVU58zVU58zZU5j0dU5j0dU5j0dU5j0dU5j0VU4vbNU4vbNU4vbNU4vbN zU4z{Ub}QJeV7G$Z3U({ltzfr;-3oRqtcREq8Nkxtm+d-P~I4=GJmI zx0buP6}#{%!>bIhGQ7(0D#NP`uQI&K@G8Tr46ic0%J3?~s|>F)yvpz@!>bIhGQ7(0 zD#NP`uQI&K@G8Tr46ic0%J3?~s|>F)yvpz@!>bIhGQ7(0D#NP`uQI&K@G8Tr46ic0 z%J3?~s|>F)yvpz@!>bIhGQ7(0D#NP`uQI&K@G8Tr46ic0%J3?~s|>F)yvpz@!>bIh zGQ7(0D#NP`uQI&K@G8Tr46ic0%J3?~s|>F)yvpz@!>bIhGQ7(0D#NP`uQI&K@G8Tr z1g{djO7JSds|2qSyh`vY!K(zX61+uOhsP@G8Qq2(Kc%itsAJ zs|c?myo&HD!m9|cBD{+5D#EJ>uOhsP@G8Qq2(Kc%itsAJs|c?myo&HD!m9|cBD{+5 zD#EJ>uOhsP@G8Qq2(Kc%itsAJs|c?myo&HD!m9|cBD{+5D#EJ>uOhsP@G8Qq2(Kc% zitsAJs|c?myo&HD!m9|cBD{+5D#EJ>uOhsP@G8Qq2(Kc%itsAJs|c?myo&HD!m9|c zBD{+5D#EJ>uOhsP@G8Qq2(Kc%itsAJs|c?myo&HD!m9wU0=x?FD!{7%uL8UZ@G8Ko z0IveP3h*kxs{pS8ybACtz^eeS0=x?FD!{7%uL8UZ@G8Ko0IveP3h*kxs{pS8ybACt zz^eeS0=x?FD!{7%uL8UZ@G8Ko0IveP3h*kxs{pS8ybACtz^eeS0=x?FD!{7%uL8UZ z@G8Ko0IveP3h*kxs{pS8ybACtz^eeS0=x?FD!{7%uL8UZ@G8Ko0IveP3h*kxs{pS8 zybACtz^eeS0=x?FD!{7%uL8UZ@G8Ko0IveP3h*kxs{pS8ybACtz^eeS0=x?FD!?lb zuROf+@XEt053fAD^6<*TD-W+cyz=nM!z&N3JiPMo%EK!UuROf+@XEt053fAD^6<*T zD-W+cyz=nM!z&N3JiPMo%EK!UuROf+@XEt053fAD^6<*TD-W+cyz=nM!z&N3JiPMo z%EK!UuROf+@XEt053fAD^6<*TD-W+cyz=nM!z&N3JiPMo%EK!UuROf+@XEt053fAD z^6<*TD-W+cyz=nM!z&N3JiPMo%EK!UuROf+@XEt053fAD^6<*TD-W+cyz=nM!z&N3 zJiPMo%EK!UuROf+@XEt02d^Bwa`4K*D+jL}ymIi$!7B%^9K3Sy%E2oKuN=H`@XEm} z2d^Bwa`4K*D+jL}ymIi$!7B%^9K3Sy%E2oKuN=H`@XEm}2d^Bwa`4K*D+jL}ymIi$ z!7B%^9K3Sy%E2oKuN=H`@XEm}2d^Bwa`4K*D+jL}ymIi$!7B%^9K3Sy%E2oKuN=H` z@XEm}2d^Bwa`4K*D+jL}ymIi$!7B%^9K3Sy%E2oKuN=H`@XEm}2d^Bwa`4K*D+jL} zymIi$!7B%^9K3Sy%E2oKuN=H`@XEm}2d^Bwa`4K*D+{kIyt44h!Yd1}EWEPt%EBuP zuPnT>@XEp~3$HA^vhd2nD+{kIyt44h!Yd1}EWEPt%EBuPuPnT>@XEp~3$HA^vhd2n zD+{kIyt44h!Yd1}EWEPt%EBuPuPnT>@XEp~3$HA^vhd2nD+{kIyt44h!Yd1}EWEPt z%EBuPuPnT>@XEp~3$HA^vhd2nD+{kIyt44h!Yd1}EWEPt%EBuPuPnT>@XEp~3$HA^ zvhd2nD+{kIyt44h!Yd1}EWEPt%EBuPuPnT>@XEp~3$HA^vhd2nD+{kIyt44h!Yc!> z47@V%%D^iFuME60@XEj|1FsCcGVsd4D+8|#yfX00z$*i<47@V%%D^iFuME60@XEj| z1FsCcGVsd4D+8|#yfX00z$*i<47@V%%D^iFuME60@XEj|1FsCcGVsd4D+8|#yfX00 zz$*i<47@V%%D^iFuME60@XEj|1FsCcGVsd4D+8|#yfX00z$*i<47@V%%D^iFuME60 z@XEj|1FsCcGVsd4D+8|#yfX00z$*i<47@V%%D^iFuME60@XEj|1FsCcGVsd4D+8|# zyfX00z$*i<47@V%%D^jd1+9P;tO8Y#3Q)l*Fa@Q66pR8<5DGxSC-4NFfD>#2O^^vN z!6mQ+m4FgV0!a`FAi*PW1dV_ZECNN42oS*`Fa(8w5DWrA5C{OlAMgWxfDh~eJ&*_R zz#Xsyb$|}c0XYx{;J_Pj18sl}tN}HU2GGD6Fau?P42%IW5C*`|m+~@8>QY|pNL$KF z9VttBq2uRVxqm4(R4K>GD=W*X@~X;msJx=GoGGuSEU%@k6xB&{o|-s)+7m_f$@Zsz zJh8p{^pq*jOrBMpHSx#oldHNqeZh(jUGBc9qo@0ouDf~f%Jr_!j#`I4_uR5&)n&Dg MrM05kwWzcBKMZ=B{{R30 literal 0 HcmV?d00001 diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so new file mode 100755 index 0000000000000000000000000000000000000000..7cfdd609451d207f835362b2262be27e69206d8e GIT binary patch literal 89126 zcmeF)e_UMkng9JEAxab@TC~KXC6-vC5Sia+EU`q1C6+{V(M5{}5{S@}1j)n_7cIKz zqKg(Sx@gg&ixypU(M2~}wCJKm7j1OWMHgMPiHjC3+UPf0)bI7?TqpDPx*zxb*#GW- z!b8kFUvrrAVdl&^A7+^0XKPB%N=i!dc^?aXIX+Jzi35G}=PU~OvV4cid6~YYzC$G8 zJnwT#PUACKKNrfs>2e|7=QqUo#QC^v@ABp3{71!6J|8|8L22&!^KF@Q`RqNy{q)XX zAd97bTRy+lyao*rHg{(V_KUzQ*L>Z`BtRR=!~UIPcOfrHn;!E4~) zHE{46ICu>lyaoP-0um$wxEioYfQ;%mI;mhodCF6%F{K3s-8Ena!oujenP(pyII z|LUWDna_t$d`!x}2R{#92M4!-gWJHtZQ$TGaBv$qxD6cK1`cim2e*NP+rYtX;NUiJ za2xplcN_5i;LI~m%gXt|`tw(0g;qwg0{MRVFF%r%)6iHWzxZ8KwY_G=*B6Rmp-{dP zh<<&cU#{_f^*cFf{V{TS{kP?@3_S259}DVyNr&gkiA4)>lP~nk$>iikbz9@UMOVp# z4@pO^oj=nj7jj54e!2b7MQ!M5ZcmoJ=oW;d+>nCMjc~LZQW5S$_=X$O5C#y^-H?v( z1i~?H$UqoDIMxlB2rnUg(+yb&69^e@$VNC#9!*JF>V~;9C9FX>&JDgI38e_%azir0 zj}S85kbV zA~*=AxM2$6OoUuF>_K=;HkPD3H^gxzKaH@`4NVAR2&cNC8R0(>^4-va@D76C4Xp?t zAOzgdhOi$Y=!SNLg;^3pZsZq0kMb2-kf_ z!fH3{LAV*=3^z<8bR(SUh8cukBNVw|7U2-La`fs zKalVi!df>ZBfN)jwi{9qhL%hCp&P0Zeuq%vhFXMI5Z1Y&9^p-d^=@cDm_|6q4RM4& zBb2(K3E@kGbKTI4u=pei=eeN;Asykb+|Y{fZGaA=N%ayQH%9F1_H8)gxXN4Urh`w(&ve&mMz2tkAjH~2~2;OA$7@p${P&VUrvB5l%&@cEbR|X$UoL7(`fu zu-Of}5K0j)b;A(Cj}U6zFpRME6bW^1!1c6fC&G{2fNy$HE5c9QfbU?@&k^d~fZ;5< z17V9BaM_FQMcC>FEVyU@VVfHo5PpMzQ*zZbt&{&hhj5t&Eb%fzqZ^v%mypNpleW8I zs8E)81tG2hOT2}!!wtg-?;~99h7p8M5q|21QG^8<5}MpFhOh)-ryF)79EWg)E^(%W zlMwz!1I7_RXx1-5I87euPrA|#q4g5ZLb%Ee4#If|KXXF?!X*eTZYV_fF~ZeuC_=a# z;Tks-BV2>O-xDVkvHzXsxBF|AI{hb>|aT#wRw7Fpn z;eCYb-LMokDyb2k(r zoQ}}phGK+19A0mBLrCT*iv|&Haf5>}jPMIL6d;Ttbh@DsVFKY+Hxwc4LAcEg#R#(q z|KNraggJyRHA#}ST1z|J7oo+})XhgWn z4QU8B;7b0L8`2SOL+Eis2EsiEce^1I;UR>3+>nLv1j0YMAsgX2gkCq~AY^ArxYrH! z2>A&2xuF4}0O8keh$9pu^tqu4p$y@EH#8$uB0S)R7KD0)e{w@BLK8y28`=ZkRxL1mR&fOd>pm@Q53x5MDs|7dPxdcnx9D4buqk zAUx`Z8H5iJ9&^Ji!siJ8>V|y?hny&3mmBsY?E8*{$KBAdT7oZI!V_+YBcvky#tlsf z83;peXhz6Jc+w3m2>A$4xuF%I0O7Z8XhSGQ7#2TN2UyrfGY)Fb@f4Sfhr2)o_TkI;(nvKs~vIuKrQ z!yrO8!hg777eXJxxEqEL1`%F$!!W`y!fS3ALC9Jr;XmClIX~SvQNn~9=CFO7fbhB- zeDgO0!W(W#Mu;H%mm5+L&On%SLn^|0gg4!ghHw$WTW*-cYBwYNw;M9BL?gnK8&ZlT zy!2fOZ@ZyP{#jIy?c*Icbm2>y5dPqXZiH5ZJ#Oeh=s?)(hF*kjgm>N0htP-cKW^wp z7(|$MLtOq@G>q_`8*mI=G=}iL8*o5eG$B8_CjHS3xo1eY2iwPt8}bnzLioT9A%rIo zK6HbF@EpRQ+)#k<3c{=#3K8By_{a@K2=60&?1nyUg`Xn)*$pLFVgatgeQxN-5_>Sx zPux)cLkVNpK0bBBD86I@;s3Z{3}Fw#emCq!m__)^4HdYIIfT#MFo7jfR!I1Z8zvFb z5$4=bi7&}Q_`(f)utYAxmu{%W5}Qw!@Rb`%1RHHnBa)_2%l;=j-%28TIP>NBG z)-sARi}DRE*+o+3P|~&JprqtUIYvt^N;=B1TJlk{P`;@pgp!Mrp~XRQP?l;bKq*2w zPD>$5DayCB^sbXqfs(1E4`ugCDaUJ>##c?EoS|PPSMhjGK7+=WdLOqB~QyB$~ekOExSWQ}YpF&VMTuysMHxqlYN_lp&NewG6D2GKx~9Wf)_AVzHDpTKciI6l422%lj&nGL#=^8AMrd zn3Q5IyHF~z%vvo&DD^03YZ*pqLiwSV5tLSx5-mB{5;{=UX~{+DMp>^VA0=>vlykHU zqsWh#@_34t5tM9{bG3}3$Yv;ysAw5ODM0xvExS>QQOdN8qm-eXuVn(I66FFdlPL8l zf30N-r3s~6%N~?7j+AntmL_aJ$qS@hq@@`p4dq8#T2L}kDzvns-@({{q zEg2|Jpj@gY6XiLSS}j>9ub|Xv$wqk#<;PlbP~J!RiI!ZHPf_Z%`50xJmQIu}Q5v*#p&YhI%4J%*QI17v)Y5};BFc6xy(lYD;#&GpPD9zDr61)i zl*_dYpnQn(Q!S~o4W@jK(xfE~<&Z<9?9`Huax}^nS~5^hK=~UjnJ6ctG;7I1iJ)Am zB^%`ol&iGlpsYvvnU-9Xi%?p$L-{)`Qz)09v}xIc@?(_iwM?U2j&g&R8I_1b=O@~XlRZHgCQtm*xO-mNaeJKB+B^%`tlrAkfC{Ll>t|b@c1(Z9q zASCFOKH;`b{pqlHp7WBcjR62fiKh;p|U z2jwc1d$bgw+<@|rS_)BaL+RC0gmMqcy;_P<9zwZKO9{#oD8JTHit-#vpO!L|v+;=9 z{aU)ukaA6mln1oTVwsyz{z=O|lsi!Rwd_Z^59L8Eb109XJfy{kTlp!Jf7X(W@&d|$ zmK2oNP#)Hjit-N1BU;i>uEO5$U$pe0oPL;;K`s3#XQMo-WdP*@l*hCTqHIL@S1r3x zwxaCPGK6vk%HvvwQLaOILdyusEhxXyGKz8+%8-^ZlxwiHJgKGdY$=Dx@F&ubY%*@*IjmSL2wDF3cy1my~pF)gDg*P*54 zC@WDu(2|OB8p?-S%27@}TFRfaRG>sqX0=qJoPqL@mTHvsC?9L7MY#y&&syqHHlys* z(ty&4@`;u>%2gC=0M{9IB-sWeG}(mI0LGP!?+$L^%oN zFfF@K0w{-T8A3T7B~{BX${>DnIYLVszOS>e{VdUvj&dH#kybP@*K*yv~-}nf|9AF6Xh+G{ocLN+XJ+r48jOl$e%wlp9b^)6#)*8_M^zbfVmYQlO;^D6e2ndxn-Nl(R7pKU2#dlnYRbv`nLHL|LO{24ySC zSz2aMu0Z*LmVGGKp%iPW#eSnKSISx~rR$|Ez`gQpEoCU(SmuXX%26J{Gwvl?Do~z6 zS*N8EQO3CYP2+<)S_(GQdA`60UTv6)v_Pk&n?(~YPHOv+=Wu7#fR(X0hAwW zNk(}LY#mR6Jq%H>+xP|iU4sg`z>^(akRI#4b`*{P)y zWi!eZTDs;h2YZsg(Gtg)@51)etR)q<&I2e{YDq(R4CN{<=_t>j{7g#*%1bCMS~5}I zK)G5=7RtLQ*J#N``55JIwdA0DiPEYi7v&M$Wi9NlO>XJ10o_xfTbHZ+wW- zp``%jbCjF46rvo0U+}y|OA*S^D8JBBjB)}>r8mxlKzM%3<@rmZPN{ z2j)V7V$;2{OVVV21 zWTBjnWqz$C8|5}E)2Af|#_GKcanT1HV)mP;AbGKP|l@~D>G zC|M|vX&FcP^kgajs-^f0DN9a~vP;VVjvyzYJg%j5ei?ihPiQGaIS%DFTFOyQLK)Ih zff7J@QcESu=_pTWsYW>)<+oaDQ7%9k)-s9lOfQh~w3aC>GnFUh87=jglk7+NH!agx z#=((sM9U0H5z4b#W>HE}p3|}qrF^B7-)Y&8Qj29qwTz?0QJ&Z0!@jo# z!++P(P%Pz@6Qzu4DZp)U1(tbHOCiepSmq@yMJQdk1%I!l7^N3wx0Vu=0hE`ul%gDm zOMXR58Olj0|DmNEC4e%nr2^#*T=TDLnO-X;7nl5+mI*B5p!}znNt7a#2`y77r6{j! z*@IGn@`jdalv?)*^hDow$=aEQjcqXBfg6%Ee-Pp z%e<{6j&cQ-c}GhVO8!DAf6&s5atoH(qooC<0L$#v(u(o`mU&l88_HuS|D&ZHrDX!86~(u3tq+g?Ormt4Bx#vKc_3NJ0xf$``moGGEz>B2D9Ku8P=-+!X_-YC zLpemtK9r4zN;yCP939XSbh;ob;2W1%LSS_yEyXCaD933jLHY6sDc{nP zk1-#+L`tTX5XwrF`cRf>*@to(F8M?) z`%#9m%y+cRp^TwqYw_Wdx8i53UNx2T?BrUs3q}+w_T`dhil+v(3N{*HuTuw8} z3N5`TZ73&e=|ky6IYmo9N)Jk|mI0K0lsqj37|$-0m0EUTnUAqWovI~&y_B4lQu4L5 zWBUoA__cJP6ru#QbfT1?1hsUbe2GgAY3W9(#xh|oJtz$*5iPwa%_vbVeJE`xj+TCu z%dxG-wB(;7We(fVX)=;RlD?;<3?&_sXP-aoi(o&7DnnU@4 zmNYDrg1vFEmUI;S)uW`fT59oCStw^~$;2|bC_mJah2o%;Xvs!-EKSNfEtRXKj9~j& zuVo0!>_$09%P`6$N~x9+lxJ``=V}>6*@tD$(=vwQTPWqPwCqMnMJdxVj*@|LzLp7; zY?KSMOro5WEak7Ygnl4pD;_;4*W#d@j%6;?Qh;(c%0*fVQ7%CFk(MHqjVKjbicz+r zT&$%8_Yi5$|fyCD3_yDYZ*ql z2Bk*J2+B<;o3)Ih+<|hbmNAt3P-?a8MtKCKPRlsTQz$>yGJ*0X9;Nw-mTGJphv6~3 zdM&jm$D(Y}Qjc;X%2qAqn03E(h?H$wDp1}>Y0y%M@+rz?TB=bN94e(zOD)P0lY@0+dFSd$bgyT!r$FT8dC^Kwy;@38 z?m@XvODW0=*pvKPOXUxwe0i9ZJ}om?<}e)J@7FSmaxBUNTK1uwi1JTb_M@ys>DMxc z^3Y-_4{Gt@Rz3^MJftNVr8`T?KWj-rxdh7$Xh}tR7jw~vwRGW{e-7KvBU)Oq%quAW zqNNSxEtEkm?I`b~JgTJwziTN*IRRx%O9{%!C@*R$MTwxiq@@g{f2EY)YnejXg|b`A9+VN3 zm$gizoQ)aLD_TZSET8 zmPwS_Bq^_J87YwxM|nfbC`t>;e`y&*c?8e(Pik>coVrQl3HCqoo1mC6v8d;wVcn_j^}MA1>!O zl>gDvk8%>qw3Y#s0Lpt>22oB&d0)#el(SL(sAUM{0+bmo!zeFdkNts`?DbOKK>1Kh z4$8YIf6|hRatWS=nbneo@8ZWOA96OVP6zt^J03_WWDf%Isf01KuXNkw5?kHS6{XDCv`ivoVvYn)2Z8b#5YuJt!~^_SAA+x z&Bh&<9@wHnfy6By4Do5YMQG~^h7#9akhZj7h;9+u>VhGrrcT_+K`P9k)jL=x9YC_k~T zP<~=vq5Qz$hJFKUFR_xe>9S~PGU6vDBTuO`d*^+y+mpJQ5t`Y_Hr>gg2d6uTL4{}r7@`?eh-OeBnn8tV1{IhkQl8u zO8b*2-@o`eq4`gU=072t|Ac7%6QcP~h~_^bn*W4o{u844Pl)F~wB8u4H%9A?(RyRF z-WaVnM(d5ydSkTS7_B!**KL^YzhS!nhG-5DqT_yuj`blr)`#d=AEJ3nh>rUqI_`&P z-V&mDOPJ;@VVbvuY2Fg1c}tk)17VtXg=yXrrg>MG<}EQAe~iW-qwz=S`iar_qjX)x zX#7#y??rgtLf5%N_v;YtlS8y04$;0hM00=;%>hC*2MEy|AVhP35X}KXGzSRN93V_{ zfG{0f!!!p7(;Og7bAT|-0m3u~2=g3(#vh~c$7uX98h?z&AEWWdX#6qSFU4qI6yyC5 z?JGjGe+bb&Awn#ZI#!10 zSQ(;YWr&WIAv#uu=vW!1V`Z3*m0>zohUq>PrekH8j+J3LR)*D@?c)IKO&25uHRM_&#T&4w`%*g&GF3*_{!QHTQ++C=FLBz`_pZW zKS8PAo>yI0RbR6yzUtDgJF@aF&6m&l|IU$9=WNf)+a9mRS*M)h_h;p8-nvbK3_#XU zUstugZmTT3`SQB$bsOvI>*70C)z(#4*KCzmy7o+W@pxlRP2ToK`3~^K^7vPMO=I5n zs>^HSvNvy!S8e)9UPI%yxQt+1qr1%Z+HH;Tyqc{$wqTLEt@U+VYx3&rw$#N}MM6@l ztKwC8+vN-7ioz0`cWj+M&25`3owvEMYD-O?KK>&M?%4X%x~$l9#iqtG2c(ed_NuYL$uy79rMF<%n#F?B}~WsFwI%Q zbj**?_#-s_2#r5N*Zp+-_tWv; zPse{h9sm7w{P)xG-%rPXKOO)5bo>v~@jpz*|1cf@!*u)))A2t{$Nw-L|06X12#r5N z8&X{In1D(>~Zw`(QuqgZ;D*_S4TO^5+;5+c3=? z{4{s))7-&Na|b`o9sD$R@YCGEPjd%9%^gCtJ%nlQ5T?09nC1>)nmdGP?hxj=1C2jI zk(+nm|Gng>VV8S$m z3DXQF{IwZO;*o*~jXy%;kI?udH2w&UKSJY=(D)-Xe!4TzwnUo}ZAr8t(RM_e5p6}Z z5z#gzf8```-=le#pXObDns?FC2fi-x2rxbVd*Ix}W50)Wl*S*S>oZK(XM|2iY5Y+d zfAnkPPy8I<(9iP@{XFl`&+}2*nxb^w(#B2OHf`FpWz&XD+cj<0v{lnaP204ej_!Us zy8HR)PP0ru%`*Ko%kE1;e;DCw|%!`e{$-r#+#c=GA_hSNmyR?WcLQpXSwmnpgX2ULByhP=F>w0h$d3 zXgU<2`A~o+L;;!+1!zhXpgB>5#vh^aM`-+E`hFuc{s@gfLgSCp_@gxbFirQOH2x@! zKT6||()gn^{wR%~?#y&wrn@rT6X=dW_XD~c(7k}}1auz=(9|hFbEg1Jo&q#`3efZ^ zK=Y>nO`rlag9^|TDnN6nD6Kb2>y6O2AEot1=(>o~dLwkjL}|TIT5pusOFwo+>4z=4 zW6=GAHWS*aXrrQSitZA$MbQRD+f#t16#<%81ZZLrpqWL0rWOI3TLfrw5un*cfTkA# znqP!@FGpjD(ioyNhA538N@ED~-jBu*r7=Wl3{e_GfNp^R-G2gf&Pa)&*!=3eeFmK!>{k9q$5kzzfh3FF=R903Gv!G&c;=+%QPvqSS)hsN*F_#GO*L*sX7{0@yj zM%zG)ZubD~i37Cv4bUDpK*yp09gG5WGz!q+C?Ln9`Il74i{9q{m8a)?mu{=C&hoF6 zZ`tQt9hU!9)yR`+^2Pyja?$GZ)@5BD^&N89p{rBm?Me?zJ~}yF{=CaK7iP#?aeiyz z2@6h?KPR%f^gRE9maF8A!v5#b`4?=g+`e;*Jn7_HDNmib|JHh^=AVpf@U5)gxm6Z& z|BW~LR@PQ+ul22zmtw4JsE_+r#%r47|Bc)5)R%9iJSSGSp{lX5YNv0doRnW0cTdZO zRBfr-+%vVA8s==EY~Jy;B$kV_CByIK7#ToFS49pZdxKfbJg>?Ka)>vEA!)%|E0@k zvAn(w#s`*>7x?&M^64#CvCQYIkk@8mJXlU%ymVl>RdO0*kQZzF>SeilSq|&b;)u?-a_)Px179+@xb*r|M$OTIqy6y?wu}`(=zP&>&EweIU%ox#<;x? zZ@CHyOXL&RVTvr5BFlN_VOfj`AGPv{?*YrD%5tf)+>~1Wng1GG{$=usufcLNvfPX; zCoiWu@ZnwdyFW-%@om)Coae4eTc=s({0t`_5TzIH4puj)JS zf%EWrgZ}HC@h4gCS8F`E%RsluCzkgd8V2R^*z{zZy+ z8fP9VS3vcFr4r};R+sa>kDthLQy%m@T+R#fiS5k$DEYO|Coj@J@Znv5Z%dKuuE9H_ zR+fu+kbk`~eMF~m_Fb}E8cyhkx14Nl^S6c9ACl!3cxOuVPU2thK7(b`9+dCnXFeb9 z|DPS|ZZEie+=p=6dLOg$790_}jlIkB&iDT1p6vVRt0U!%zGdFIDf8Pt?nmxNicel> z>+3b1zhBHRaM=9$#x$d+PK!Z-nhXyZro(tY}{hpYTRbrZrowqY20PpZQNtrYusntZ#-Z;XuQjK$avUz z#CX(r%y_r)xbcMXr16yT9^+}_8RJ>wea8EZ=Zt-;efr^UkIBX<#;L|>#_7fx#+k-h z#@WU>#<|A%#vxdIMv2lqp-t>_#4{!O%E;q*8J@WaL#(2XWJ|Azl z!^WHKup5ly#!be}#x2IJ#%;#!#vR6;#$CqU#y!Tp#(l>9#skKK#=DG%jE9X!j7N>f zjCUK48&4Qd8c!MTF`hP_F`hNvXT0Bd&Uk*(KEFZf{r`-wZ(k|Ksm5u>>BbqxnZ{Yh z*~U4>xyJd%A!En5z_`%3$hg?J#JJSB%(&dR!no2HZ_Vp|xVJ~GalLVaaoo7c7;mu3 zm)~NHH&^BJ+ldIMv2lrUsd1Tcxp9SYrE#@!t#Q3^gK^xr$++3L#kkeD z&A8pT!?@G9%edRP$GF$H&$!=sz>BbqxnZ{Yh*~U4>xyJd%A!En5z_`%3$hg?J z#JJSB%(&dR!no47+PK!Z-nhXyZro(tY}{hpYTRbrZrowqY20PpZQNtrYusntZ#-Z; zXuQjK$avUz#CX(r%y_r)xbcMXr16yT9^+}_8RJ>wea8EZ=Zt*^9yiwezj2Cjs&Sfe zx^aearg4^WwsDSeu5rF`$k;J1FfKI4+nDqGpxC&?xYQVLNX=i5x1(lP7*`tOji`C~ zTH|`-2IIJKlX0_gi*c)Qn{m5whjFKImvOgok8!VYpK-tOfbpR5F5@BNVdD|wQR6Y= z-Nxg_6ULLqQ^tFYr;TTfXN~t6?>C+^_MP?h?G0~N&f6c}telNE+Gpd9%Gr3EayI@{ zH5+eH&dxH%+mrM8c=KC!u5rF`$k;J1FfKGMGA=eQF)lSOGcGr-Fs?MNHm)_UH*PSF z8#fs@8@Cv@8n+p@8+RCY8h06Y8}}IZ8uuCZ8xI%{8t*b5G9ES_F&;G@Gu~}HZaiT; zX*^}T$9UR!#(36vpYeX4HqJ55HO@B<89T-W z#)Za3#>K`Z#-+w(#^uI%8+G2F;f=D{)yB2P^~MdxapNZAX5$v)R^v9~cH<7?PU9}) zZsQ)~UgJLFe&Ye-LE~M zHXbn^H6AnGZ9Hx~VLWL(WxU6D+IYrz)_9-se&ab~-`cNl56Q+U#;L|>#_7fx#+k-h z#@WXB<0-to<{IZ4;}2o*^7u0tZ2S=nHvR+#8-D9#skKK#=DG%jE9X!j7N>f zjCUK48&4Qd8c!MTF`hP_F`hNvXT0Bd&KQ3@g|}b)=@d5pa0(lLHieyLj6aRe=Vusa z8fO`28|N738s{5_j2+_w<3i&i<6`3y<5J@?<8tE)<4WUd<67f-;|Alnag%Ygaf@-Q zahq|wafflIahGwoagTAYai4L&@qqE5@h;;b<6+|w<5A-=Rirx~XkXBcN1XBlT3=NRW2bra z#KxZyViy|YPYCh(#m4yaL3}>`cn}+ZI*46vTwz>kTy0!yTyNZ995-$W)ZZ&Q* zZa3~Q?lkT)?l$f*?ltZ+?l&GV9yH!%JY+m*zpRwov^x1rHzd!u3Y(Brx zxX8HJxWu^BxXifRxWc&7xZ1eZxZb$IIBwiz+-%%p+-lrr+-}@q+-clp+-=-rjMtyJ zAMWeVdd>NL#{I?v#)HPYjE9VejYo_}jmM048;=`L7*85c8SgQkHl8t_HQr~u-+0d0 zx8A${b$?)-Vw`H6W}I%EVVr54WsEwea8EZ=Zt;leEt5DY@A}8YMf@A zZk%D9X`E%8ZJcAAYn*Q!GIop$j0=s6jEjv+j7yEnjLVHHj4O?+jcbkTjT?;P#!be} z#x2IJ#%;#!#vR6;#$CqU#yw4__?*4vDkW)$*^e zP+z~kV9EUZI5={AOO~7@zEb`Tk*^o$lW!I0lJ6GhkRKFhlOGpnk)Ora%l*k)-^=)V z@|*a2@_S zUgLR<7?0<8K37~uzF1sJt`nD#cZiG0SBs0tH;N0%w~GtN_lh0z!{QM6NpU{;d2urN zRk4r!wiu5Wd*9CoVmzMg`7<#dZ}z-sq0fiMqdgxb#^cqVj~Cz*^Kv;+DZk(2 z*)Jzb>HJmV67pJcG5LIP5xGiSNZukYAnz1A)k2$QR>$T7R9mmd@WH#_xlA>%UrDaAv|cibLev z#T9gW-z&!R$KKaJEXMQ8o}U!s`Df41i}C!l=U2se{@U}~;@#vA#CW}pcm8K$yuR1- zqC@2NBp)TtrLR9;oI_qA&L)S&S>)B?O!7K$2Khp9I=M#d(DiefIG=o_IG23A7_S%d z#(%50o^GGJ#kJ%I#nt4;#g*h|#TDe2#pUET#r3Nb>w8aJOa4S$O-?#gZXddRj}YVc z3%&6!73230JuesI_Y*z)#rXY2&#T1v{YKAg#rXY4&*zKr`;nfj#Q6P5&s)U!{YuX} z#pUE{#bxB1#iiss#U?)hSICEdPt;%qv9 zhd7ITwK$V}qqw#(ae23k)9L(s#cAY+#nrU@lj0OQ|9NpT`BiZxE&sN-VNGIvABgM8 zpNVV9ix$iJ$VZ7Q$;XQ;$ScI<jgbuCdTUt zJzput>kU0$FYYGaD()iRE$$>gDDEIXE^a43E6%6+{mWv!{vcV8CvS=iXny^kc!19T zM2y!rc*`dpCf^VF2yriYskn!{T--qOH@_IqPk5KNN<2vGUn};}*Pk!O>w~=ItHgNy zkmoI8yuQfuPBC78HEnO=hFCM;7I%?Xi#y5d z#2w@d#qH!8aU1zEaVz;saSQo+aWnZ=aTED&aSr)GaW?sJaTfVmaVGg?aR&KKaXR@u zaT@s(aVk0K2-#ngj}Rx5mx}TJE8g|FT#WZ;@$47l{aZY*665_{Jg*hw{a-wvFK#AR ziJQn<#BuUYaRd2UaXtBFG2Va3yZk%Fcz+_#_lxoVMV=oOMct04=Pm1w= zF`l0nry_KM>>nYP|D56Hn6qa?z2pKce%G5?7Ot7gv&3h%3lp zaXERlxQx6`TuQ!BJV5KO5f{_>mx=LyT;6!E6yyE6JYO#!Bi||>CEqO`AwMV{COi`kUtTJ$Vu`*XFmA|aV~kOIETDkoK5zNv&gH&ndG%%JRj;^ zALonH>HI33Psh70V!XeixBN~q-ha{awc>vA&Eh`to#I~d{o)?-qhh>2q<48wi@V4# ziaW`#iz~=`#pUFW#AW0!#HHlL@aG_ zPxO4DxPx3HZYN(RZX;hQZY5tYZXw?)ZYJL?ZX!P@?xFELF3zO$pA~12Ulym6-xQ~j z-xH^jKM|*pljKdslgUTmO~%Pf#d!YSyFQkS@%+ALzqqI<;Z@=Wy1v(n>&fSf@%)na z^;Kd#|Kxd#xRSh6TtU88oI(5Jo5ktmJH=__`^72r^^b~^$xn-YtZ~g z>3Odh&v$zMNQ~!0J%1s_^QE2_%M(j@KGpLvVm#mKd6_s)&J#C~W8!-98gVW8TyZt| zVsRz8PFz9WAucChEiNP9C@v-6F0Q5H^SxsHzK1vdhsF4P5YJDF@%tj4pBLlzNj$$Q z#_yYWep`&+NAdiD7{9OL`7`kZd6B%q^f>t_aS!=;aW{E|xQiSXcam3&JIL$A?c@u^ zZR8qpEBP{U3;9ZM4{cA^i)-opTgBDnyTz5{2gMcS$HnF3XT@dYm&K*zH^n97_r%5I zPsBy!q+@0OLOw#AL0&3OCodPLk^SOS@+xr(d965^e7@L6t`g(-1-;vQix|I8=y|8O zmwc_bhkUcRn|!CZi+sPhll-W-gZ#9(o&2J>jr_W}mAqG6NaO!V9HR5T5a*K@e^ZWs zd;V|LzbEk*^l-BHt(;B;PI`Am1zQ zCqFFiBR?tbB|k6jA-^h)liwEi)Ajj*cpr`bGx02Wk^Iqs8S+u$Y4Y*nJ>(VQDRNjm zNnS0UAg>dTlP?svkZZ)vSBpo;>%_z43&lg^8u2djW#U2dmEr;N_2Pc=t>QlN-QqOzgW^>3q#8%xDybpCR2DcLVB zA+Hh_lh=xi$mfd-$yMS4@)of}-YE`|uN99LCdPZSID;NPzf)X5xBvZOhy18GM1ESF zPkvFHOMYFPL*6USCVwQ(B7Y&yBriT*u7CP@?ig_|-CoPYJ>)!bH#sKmBCip5lFt=) zkS`Xulk3E7j=$=8ef$hV4n$#;u;$PbFU$&ZV>$j^#9$uEmL$Zv|<$?u8t$)AXG$w~5er*g^5QJn{>jIPcaxWi$H;l& zQF2T?LS7>tCZ8+LCtobiCD(~_$UDR%^z;4I;$iZQ;vw?w;$7r>#e?LB#RKFg#r@>x z#lwY(>+4l4PxJk^#nnZL^FI(*l0OqykQXhJ`2+bVaT)n|aVdF)xP%-Q7n4_uM+y_` zUnh>!?SG-Tfm|c5CtoJ6C0{A7CSNbEB;P8oAm1%6CqF1IBR?+2?=L6&+~-%H6%Wzv z`LcKy`AzX4`91Lf`4e$JIq5{%Kar0R_mY>2d&tYh-DE$$o^J0|_ac?4sk#EYH=U= zMsY9sc5wswUU5D7VR0?_NpUs#d2uEARdEIRZE-pI192JoGjS<-QMTNl$w!H+>F1^6 z#rXRc$$EcTA+DtJ!{SLgf3woP3PB$$HKng=3Cc_Gidpn#d9>DxKo@)=ie_* zB|j=oAwMlnCch~5kzW_j(eYugc#_ulk$8lz&o9Ko7_9&#Pdr|oNpIET)^TAWS3QJh7-U7Sh2SDZn9Se#CNQk+J9UYtsP zRh&Y8Tii+4_Xpw*@@L|9@}lp`{EmE-xRrdoxP`nz+)NIOo5-uhaq>EG1NlPne!Bf@ z#QVsXiD$`Iif72zi>JxAiuaK37Eh5M6i<>L7f+C%6_1l&7I%=}6t|P#6St8+5x0_) za^(6VA0cigFBLbDmy6?MzqoCT_ofh3Wif#0_-*i{g6n zgt(Uc2XQs|LvbbfGjRnu`4qW7kdG7(7bnJZoOp=5T)c~%FCHX+Pdq?AOWaRBSKLRg z5ciTV759)E#ogp9#mVG0v5))?2PoKHSkoJ$UiyVfMGk3w-L`G?{T@&)2{a+SD^TrX}V|5V&U zzDC?kzERvn?h?nz|0v#5lo;Pb;wkdu;z{y|c!KrjnBur21yWGh%!s zEjVKS-}I#Ue|!sl?uncOUNC<~+W{|}_w)fLyI=1vCSSj3-WAK{{}CTDf1>_?51lt& zKaY=vzLfcYCl7e>yuH6CztDHsyi;_%3w?*r8{ZE;7Wz`>|Mk9~g+BND@fFTzIe*Fg ziC&p6;bYqI@`DH@-SUCUJP72TvXz(^KIBr6|ZTki*Kl{+FD&- z)41WMja3Z|HH~t{wyhhg>o?VJ+g{^ymyuSzeVZ=nYuHw|H7;Kei^b@)L#Ly3Izp$z zbUH+*gLFDTr~Py~KXKZj^*Xd(ht})RdL3G?L+f>Dy$-F{q4hen-YBg%O6!f%dZV=7 zD6Kb2>y6TSqqN>Atv5>RjnH}{wB87kZR- z!?fNotv5{T4bytVwB9hSH%#jd(RxF)-Vm)fMC%RFdPB6{5Un>v>kZL*L$ux?tv5*P z4bpmpwB8`CH%RLZ(t3lm-XN_vNb3#IdIPlH0IfGb>kZI)1GL@%tv5jH4bXZ6v|c~0 z*H7#9(|Y~1UO%nZPwVy5di}IsKdskK>&>V2=F@ufX}$Th-h5hbKCL&O)|*f3&8PL| zC)VrG{>q6Z*6YL)>vdv@^*XV{dYxEey-qB#UMH4VuMq{Kl|%b0 zhxS(v?XMi#UpchDa%g|$(EiGy{gp%eD~I-14(+cT+Fv=ezjA1Q<N6IkdlWXn*C<{>q{Kl|%b0hxS(v z?XMi#UpchDa%g|$(EiGy{gp%eD~I-14(+cT+Fv=ezjA1Q<N6IkdlWXn*C<{>q{Kl|%b0hxS(v?XMi# zUpchDa%g|$(EiGy{gp%eD~I-14(+cT+Fv=ezjA1Q<cOke@#=HDI=ni( zI=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni( zI=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni( zI=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni( zI=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(I=ni(TD)4kTD)4kTD)4k zTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4k zTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4k zTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4k zTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4kTD)4k8oV038oV038oV038oV038oV03 z8oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV03 z8oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV03 z8oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV038oV03 z8oV038oV038oV038oV038oV038oV03YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^ zYP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^ zYP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^ zYP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^YP@Q^ zYP@Q^YP@Q^YP@Q^YP@Q^D!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZ zD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZ zD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZ zD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZD!eMZ zD!eMZD!eMZO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(E zO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(E zO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(E zO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(EO1w(E z3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u z3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u z3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u z3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!u3cL!uf-AHFE3ASl zqyj3Of+>^&DU5g!^TSs^KL7aY_1mwWKh^2K{Q2@JcmMt6w_pEy i|Ihhvx&Hp$%g2{bzn?#Rc>eJ5<&Td~&+mVK_w+YJI7dtX literal 0 HcmV?d00001 diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64.so new file mode 100755 index 0000000000000000000000000000000000000000..945b450e3ae1706dea37589b1b1708f8492994ca GIT binary patch literal 134131 zcmeF)f3#y&eLws&GX%m9F#=*lg@AzJ*O27q#|a`vK!{W^BG8CGCNnTY28SWc3>Z)_ zB4R+rKn0^Bjc7Ger70qf)MBJcQ=~MaVx&s1i1bP=MpSx5)aQKWeBN_EYba@ ze>`i=T`;-#m7RS)+2?ci-bqf*e(!5vf5P%*%RKz7@czM*zecM=Dd`>ky_d?AJl~6W zB`@y1aBJC!mU+&bHLAGX`Ur39zdHtZMK^}`M>mG`Sa=(r6Z;d#pgmd7RZaS44K zZU-7BZlhr}-kW~DQ(F3Z(O}${l#nb&(&MjHrH?QHmqNB=E}|I zd8^i*wR+3y;J!7RH?P{fW%Z^l_V-n*^sluW&)WLC-Uc^P!=|+x&O3AUmi6atT-8{8 z<~!GJTD4{E<}ItFMyXqWVw$%rbVuWOi|T%WKfOA9K#X{tc!GG6c#61ByhOZAyh6N6 zyhglEyg|H4yhXfCyhFT8yhprGd_a6id_;Uqd_sIme4h9M@fq<&;@iuMw{kZxC-1 zZxL@3?-1`2?-B149}piB9}yoDpAerCpC`URd`5hcxVMGmKk*pxIPnDWB=Hn+pLmIQ znRtbGm3WPKop^(IlX#1Gn|OzKmw1nOpZI|IkobuBnD~VFl=wXH1>!T}i^RPPNd6O# z5swp35Kj_M5%-Cgh?j|1h*yc%h}VfXh&PG1h_{J%hwX+h);>n z6JH=cBfd!7yO88R@fh(q@dWWC@f2~Nc!_wKc!hYCc#U|Sc!PM8c#C+Oc!zkGc#n9W z_<;D3_=xzJ_=NbB_&o6i;xpol#JzWs{3jkG9w(k4o+O?k?h`K&FB7j2uM)2juM=+& zZxU}2Zxinj?-K73?-L&o9}*uC9}}MtpAw%ZzCe6Ne37`7J~Mm$bDK|D!3McgM| zB3>q5Azme3BVH%oAl@Y2BHkw6A>Jk4Bi<)IAU-5MB0eTQAwDHOPke#+jQApP?;?`_ z#AC$c#1q7m#8bq5;w9o`;uYdm;x*!R;tk?W;w|EB;vM2$;yvPh;sfGC;v?c?;uGRi z;`788h|h>G68A19`AE5xhBYsBls z8^oK$Tg2PMJH)%hd&K+12gHZON5sd(C&Z`3=ZP;6pAlaq?!AZPKk*pxIPnDWB=Hn+ zpLmIQnRtbGm3WPKop^(IlX#1Gn|OzKmw1nOpZI|IkobuBnD~VFl=wXH1>!T}i^RQ4 zNd6O#5swp35Kj_M5%-Cgh?j|1h*yc%h}VfXh&PG1h_{J%hwX+ zh);>n6JH=cBfd!7yOiWV@fh(q@dWWC@f2~Nc!_wKc!hYCc#U|Sc!PM8c#C+Oc!zkG zc#n9W_<;D3_=xzJ_=NbB_&o6i;xpol#J%^D{3jkG9w(k4o+O?k?h`K&FB7j2uM)2j zuM=+&ZxU}2Zxinj?-K73?-L&o9}*uC9}}MtpAw%ZzCe6Ne37`q5Azme3BVH%oAl@Y2BHkw6A>Jk4Bi<)IAU-5MB0eTQAwDHOPke#+jQApP z?|mfyiN}b?i6@9BiKmGB#7o4>#4E(B#B0Rs#2dt$#9PGM#5=^h#Cyd1#0SKO#7D%( z#3#h3#OH}G5T6lWB<@{C@}GE&c$|2Gc#?RExKF%9yiB}8yh^-AyiUA9yh*%8yiL4A zyi2@Cyia^Ud`Nsmd`x^od`f(t_yX}6@kQd^`$_&2j}ea(PY_QMPZ9Ttmxz~%SBO`M z*NE4NH;6Zhw}`iicZhe1_lWn24~P$mkBE!T} zi^RPTko+eeBOWK7Af6#4E(B#B0Rs#2dt$#9PGM#5=^h#Cyd1#0SKO z#7D%(#3#h3#OH}G5T6lWB<@{B@}GE&c$|2Gc#?RExKF%9yiB}8yh^-AyiUA9yh*%8 zyiL4Ayi2@Cyia^Ud`Nsmd`x^od`f(t_yX}6@kQd^he-Ytj}ea(PY_QMPZ9Ttmxz~% zSBO`M*NE4NH;6Zhw}`iicZhe1_lWn24~P$mkBEWHt`PeF7Y1mKJfwZA@LFMG4ToUDe-yY z3&dx{7m0fxA^A@{Mm$bDK|D!3McgM|B3>q5Azme3BVH%oAl@Y2BHkw6A>Jk4Bi<)I zAU-5MB0eTQAwDHOPke#+jQApP?`o3&#AC$c#1q7m#8bq5;w9o`;uYdm;x*!R;tk?W z;w|EB;vM2$;yvPh;sfGC;v?c?;uGRi;`788h|h>G68H4F^3S^dGw~SlIPnDWB=Hn+ zpLmJ*!g=9wy*#+CyS;}0%sAEnkSn{--u;a)c08~1f+tS=eeAMVUz1qA-vj$4R{Q|} zZ@ury;J%x}`?mi5RPgs*;omLK8wAx{^W>lZ{GvYwb^URLcTLIjZu7iXKk&zQf3rVY zvFd@JuJCTYEG*YKHYn?*cDm;ApnUMS?LXUFV0#N}Z-MPCu)PJgx4`xm*xmx$TVQ(& zY;S>WEfBt%@w}I*?5?+~^ftDwWcbUA^>3`>_7eQ9xBKWV*1viw{?=Q(W~%Cju{PRF z7JdtUu!h@2@5ef7?+fqtWUV#%iHA2H)=Zn=^_O}|Z}-w$ye7koqRQ&<4tP^5!a8o# zw}EwH@>wzt6c7TDeb+go6J3v6$J?Jcmq1-7@q_7>RQ z0^3_)dkbuDf$c4@y#=pPl;du-=jo_Kj@ztl{r19voj~yQTzAiZJqO4~MEMM;}+f`0m*m=d% z`eFWxT=3@(J4DuR+~P&94{Bfb{5Nea;OVMcJ4XL9_mD8vGcZfdlQNb65SOU%j;~|!Trv&GWEPHW? zSWY$acENo@^mL8MNL}zHAx43l1z#Fs40x&F%R-C;uN2%j#02nTg8PM-1pc*PBE%H% zX2JbK^nqU$JRrmpa4|S5X4%U_#6pab74qB<3=yj^Ms^oGC`2s57@+9&*!IMM8dM6R@zyRME zA{IM|>?&9Z5i6ZU_7;3oh*;(%vcKRdA$q#@L*#J5H-{Jn76eZXF$Vn8K>?l?B9^#_ z?0j&5r-z93Eh2jf{$+?*+#<4{U^PUnY!NwB@GT)?S&K+c@Qe_#rbVPA_|_1yphe^_ z1m6~-r&sfdoG$owMZLs-WVPTsLW}}q$pBY{=tO8FIJS)T+@D#zdA=ZI!7hD%&16UV4JH#e%vtT{M7VwHg0$d*=F54ZsM(~^v zan0_?4TA3s5f|)^d_izSh`3sJu`hZVD0C=7>D>!T>ji*gSt(FlF$($YX+A6!j_wktYQ&2oaZ%h%Dbb zzzajf^&=v?3%)BvTs$JOk6<%ITsb0gu;4`@;<6EujNrvuQrA$A93%K{MZ|fM;CuAp zz*Bu_Mcab8wek z86v)h9ob#*su1xV?8rWX9|{p)z>XX&_~8)o?dwQJ@FOAOtJjfZ1g{RUb)g1-lHf-} zYy(dh?1b0>j$~?dO^9{!A>tdnk%ZtULhPgD;ewwGaR6K=Q=?CX7;R{SY!bX7#2D~W!B2-6 z2VNz3V~7dhO|pysI>aRK7QtSKDc~J~p9#?i-Ys}jh$Z0tf}ahs417rNb0JoMN6Xac zZ$g{`%YvT|aUOW8;1@z%0M-QiA};>!j9HpD2fBlx8dW562( zzZ_y5*cZGd#02nGnHv3Fh<)Ilf`bqTz!nB z@LnycSAULdkg3tXX`L77K57cyrzL@x3;w&-3G4_?LaYLB5d3b4HDF)x{t)ZH+XTNC zVgoo5{C(iS;X@^c#EBJwjY_@fX#B-pWn4~7^8 zo-FtuA;y4b2>v+4IB=cdPeM!pHwiuzBGz4tTq^jVA*N9BD#7^>W0 zoQ2o|J}LO?5Zl1z(#TJQSi#Y;yWnp^?4sm8g1-&1ijq&uGx}YKxMX(Z5y{UdL+l_w zXM+E$bpoFjTnw=XjJ_hk--n3HZAbPJd@95NN+tyVpe2Ea3qBnpuF4(p1^*c07$uJv z{F9J<8zXjF9``dfLev9oGfC-G5FcHu6n73glFyQ)^9anapW zYtRElpQl=frbKsFZ9tC}eZFcFS{99|wxFkqzCg7Nt%>fT+JQz73v^G_vc9nw-Ai;Y z)e1Br`a;zz^l;I=RclaR^hK(5=<%X))dsX8`eM~4^lhU1sJ5VW(U+)}_2pc2i|9*L zE6^iX2KqA9$wlF46@8`XzN%B`iK6?d&O_fUnowPUt`gl}bq0N>=mDyW(07TxT-Dc$ zC`I2ddZ20v`cct?RLjs$i5{$4f&S-_fxZIu>YIJh{}xT6Ug-ad9)fzID}wjnmmP|F zq0bjROtlJqiRj^~HRvluk5H{c=R{YkHlRTd5WHQg+Jx>Vno`9jYNGN=b6HxouW$QB zyP_G@0rYdCbE-q=Ks2j5f__~zr#gm?Mf0i?==Vhns#EB^sINK?{iSG8bpg64dX#Eg zClS$yBZ0nBwS%l~N&X(K+J$~t^i`@oXjk+Y)jsrdqOVpRKnJ2F)gkojqOVaMLC2!U zs*a)G7d=k3h9hfU^mx@4p4%Ne2l`soDl+v8lD{XQ2IyBrPgJc#m+um2S+xQEhLnAs zY7_b$(UVkL&>xEag=!o6Gtt+pR`dgz=&wZIpjw6gLG)zR8Z`5~K;Nj^LjDFXHG}t4 zRol>Dz7ULgsvT%>SOo8=s&=7Ai@sU42Q7=9s@jL1Dtemg09q40U3CcEAo`c8BWP2! zsyc=q`}{!PqB=wV?yx-2GgKF$G10fGdb%il^rfP2Q;kBCqHkA?L9?RoP>n-NqN`LB z(ASIBRFlxE=xWsz^eoXesy_6p6@i|q8rL`6qt}a`rJ8`=B)V2L3B5&hooWhthv?a= zKJ;$Ux@rk}zvz0^GV~$Qb5twP$3)+$T7^C-xcnt<-OW1ttQCZT(XUaXpe?koCkRUdk&=zCO4(7fm+s%7Z0qL->xpeKvI zSG5W~L$sw@gYFUy^nI!weLFt7x9DZ6UFZR#?^o?XSBhS)+J_z``T^Ae^aRl>REN-0 zL_erHg1$qvtvZIDBYLIk1bU(9RjO0y-7*GzNHwZ2;G*}7epodIeMs~ps&VLJqF1XX zpihc^R5b~GK=PrZnu6{wqsTR?K6D?^YgJ3ogGK*JwG7ROeoS?Sx$@P!26`Rp)dk_A zpA@|w^+G={`f=0?y;ZcUT7ljv`U%x4^d8Yqs@9+nh<-}74t-ek2Gs`ianVn!Hla_6 z-l&>Fzka%W`taAP9gOJfB!7FVb>#0R(a)$hpqGl?q}qgDCHh&_7W8`2&#AVdH;Mj@ zY6p6Y=;u|t&^tuGpxT4pE!tP@L)XZ=_Fq)>^;K;2GRfbYRp*hvSBw6w>H_qWqF+*- zK|e40Wz|LKt)jQ6dir@)^iI*gQ;kCJ5gn+;pbv=ty=ol#u;{I-3FxIVGJHj~g8V&3 z^7l5?D)c1Lud3Fdr;FaMT8FL?{RhcMM)MEV~o+LiZ5;2I__GD>_2G&_hMPsoI0)MekC@@|MwKMgLiK zfU+lxeoJ)-Jwx={sw3z+(YsZ#tY!2VnNR+UYF*zJik>7oR&78}7yVb&CUlMHJ*q9} zM$zx6wxJh`-mBVyULpE#s$J-{qW7uxpf`&CyJ{bLv*<*106k^*K)I8s?-0FT zH4Z&T^n0oa=!K%+S4~1M6a9f|3VOBZ1FAmslcGOVEkQpoI#n%0Zx#KKY6W_y=!2?N z=sKAz|A*=fx=HlMs*BJ|MSr5|=>l5Ot3)4CjY6*%{ZG{x^d`}H)j0GP(Vwa&pm&Hq zteS-0E&4On6!d=4M^t_2eX&4)u8IZ4q7RBbs*2^rqK}IHmns$$i#{Q`po*o$qJI+o zg(?;ji|+D*Kp#`Za#GQ~MgLnhs;6m04-oyOY7Dwk^nX<2(4#~jSH*Hv(L?tL^jE4_ zj4GNJovC6es_3zzzgERURMC?~pHRgzRM9g;f1`>;sG{pcf2)cmsG^%hf2WECsG^sO zKBY+s!8Z6qR&@NLEj-7Q}vq5H@y%NMD(bn%?%O_INH z)hP1!7SR{0#-MkI?xPxq-YxnP)dci@(U+>br zY8m=<`TS#l)fw~&DSLqGBJ@w9FIV-@4!Z=GYg=}pY81M+=s~J6=mDY!tHz-#MPH$s zfF329R82xp5IsaS1wBRdP*orLfaqbWZRo?IhpTp=kBc6m+J!zPx>B_V-BC`sI#RU{ z-9t2`I)LsgnpPb`4;9U*j-YwbIn^=rSkbKN1iDT%r-}=oM>mP)RXy}Omx>ltqtL5F zebpHBdeNe49D0-JQK|{(EuybfO+xPwJz6ydy<7BEsy_67(PLCg(3=v0zFM^p{pDeS zmQ)AOefAIZHL64C{qoxBSk)19jl3>APIV03D0;l=1bVUPYgMPvD@0FForhj4dZOwA z^hVJ#>P2tA;m|-|r`pr=(4ul>`ei4n_Mx{)*}qU7K<|+=(O$1Qggzkp2GtStVbPOS z$I!<`->5o)J|$XFokDk%Gmze-IuG4L^c2+v=$&%3yjgXO_p9#_JymrA-CdsXX{u9b zM)Y*mdFV!Y&HI1XQ$Ovhp6{>(bcLWXhn35>KOVq(KA&i(7NbZs#E9| z(Y31c(3a>r)iypCxmiZ^vsGuv-#B>;+eO!_df4-KiJqgn^)s(vIuN~2^qs0P zlzmWigK8Z5sOY(>3Fs4|8 gKZ%~Fnu6{k`P)$Sp=)H!I$yPfcfa)l}^P*c+J!I6eq8F$}p(l%8s2YQwA^I-WICPz8Q#AqIBzlo*5_+lV#i}Xj$?vNEM5kM87ZkVbug`m>2zsDi$<}{!;X6RV-%`eM-(L{itd~&$f*2C||AV zs5YT{h+d=Gg6=DNt!f*3sOVp*cA$CDkEwQ{$BJI3+Jl}fdcA5NdVuVqkE;%#XGqzu z>JU1T^E*GGn#6mr_lkZ}H3glDeoEDcJ|cR9Y6&_M{j_Qs`n2ecsugHdPJ{bv)hcu^ z(Vl7znh^brY8`sG=uN5(=#w%p`K)SE&s&S`E;EqNp)C5zgGK*F)koRurH0R|mY}Cg z*)OP;p|?oczG?+}hv*kotI)eeZ&s~A?-%`B)jISc(J!espjR9e=$BE0p6eF9QS=tn z0KHxG?@$ADc0iy5)h6_5(Z5%1L8C7Z^j6h2bT84bsCJ+U(c4tJ(8EQ)s@jA4qPMH| zp}QXv=s%!dJ(n$du;@^=hWGo95&atK-Bwnf@g1lani2g+)dBPv(XXoxp(ly{lj;b1 zy6By%W9S;uZ>Ub78%0N`7x6C0C&k}Hz4$y}QRd2bsZKHXjLG{C|BQN3wj#5YZ=o#o zZKB^+orl&%?^a!aHl*HvQJq0sQg*D`hkjV}UsXMfSzXb4R2Nb93OO#mqdJdIKpvC) zy;rq~{JmDn{+ntGx?J==)i!h>S@Q3y9q89ZC#qfOSoFK9J!nSiyk)le~22OZxfxWj-YkXAE}O^TSOmJoj_Zn|DigC zepvL!s`JpU=ucD^pq~?cNOcC?D96x$qF&_h#qx~jQSUaDvOh(=&}*ga!>AXUS`p~a zR2QK)OW8+MJ><^OQugPnQRrP#_EFUs^ghx5QjJ3&6kSkFK!0;Ypua%9$luRN{yv6! zp##zXM!nEKOAWt7z0k3g{U6mN^!uWZtEQmyqQ6r0p}!QJsg|INqQ6!xLw869`h;o) z`lRS@RA660rUn@Z^fHDdH;6^?Tao` z9YJrF*Rji0$Iy|KU7J&N^ji}B;9}(SAbpg6&r$Bd7UBs)pi$$ZV6X>;~ zJF8BiH;V3}IuE^BbXU~{=nm4`@1{C~-Y#XIr&_{mr@KUVSM_inX;Nx>Tt&+b-srHb+XN$g4wGZ7a zdbH{Q`d-mjsScqZ5fgER0q%lMNd~9LJyYF^e;JxjF(y-akiY8!gB=sML7^pm1zt9GHE7p<%Iptp*ySM5XZ6g@|E z0Nq>Ok$tD?7&&=>=mymZbfxIIs#EAuq8m{!UI9KNpYEKeI)pwZ+E5)qpA*yy}%6noLs8%s6K1%dL)f)5!(RZmfppVNra81=D&VhSM z^di+1bjO_oy;#+U?jiba)e>}H(f6p9p@)iIqFRCGMK4vYLT{FL_TH~$OZr&x(%T#-Kb$h$$`&IkUyF@Qn9YF6B{ebEa`k?3)sw3#5q90TpL!S_B zqXryrYxWQHO4T~{#YWMqRGZL?ML(oELT|Kbw?IFvI>9XSQqhm7E+BWV61`e=9%Zi= z{V2*pZxZdO&Y-u5UZc7Qy+ia`RS)k4oghccU#T{*FAkRc{g`SKni0KDb%uD45xrh@ z5qgs7$5lO?8+y8ES2YU#7a4g!p&Em3l(L^xjYGdDWk02wfL zh2A9kdDR~D9_c;5pgKaP{z>w;uR29m?;`WFFRIQ%_ZGcbbpd*S=-;Z&pesecq`C;b zMI!sMs)sx~LCW5u8in2_@4Ek;Y7F`gDLYV&Lm!pbIDfC2!rr`F^7mHMi~PM`^ed;irC#391bpd*YdiuU`53jQhkh0%WjY97c{kCci`he)&s&(kYqW_}WfIcodR&7F`68%@z7Ieqw2YQcc z8@h++cT_vjeMRq8?LrR~{WsMfG%tFeY9G4m%0T~Jb%Zn6UL-nE9YbF(`d!rt^dy-T z->=$+o-X=5)edxx==W8-(5vJV-5;p-pchNo2UPpe>!s`uRR_>(rR-F72(8PjgCD83 z@d{hsD_!=WY6mL)`?CK~?Lu#rbKrig+Q2z*cZ&W*wF$jP^dZ$2^a0WTRBb~a7M)k^ zKpz+VscIMcl<32%J?QN+2K-EQir46Oi9Vt_54}(H=c)_P-Q_jIqpB4=<9$T`OSK9; zSad(BMZz6b>`BkZFLq*`~`ohPT$1uXO`mkGfUg@GfUg@GfUg@ zGfUeFF0i|8TYhFKe&5EQU8=v3U8=K?U8<*8ScGRaj8tEXv-|c zpD8YFD^pyGKT}-VZl<^tf2Oz;f2O$9R&#Sp+nSqO+Sc6M(zfR2mbNuFx3sOfxutE* z%`I(fZfnWAWx3GVDqLU! zEvr^(4s!__b>;ID1=0Wiv~Ad@gH$H+#fn*Iag~_2x{b&1KCVFNY5=j$D+T~ zRz-iQt%@f8x!h8jx!h8jx!lrooXeT^%$W=~+nURn49}VN%$fGgEw!g_w(Fbi`ewVn z*{*N4>znQRX1l)Gu5Y&Mo9!0O{+csA=UmFPL*D*w+9Yq*!NgxM z@fS@mS2QC?(TpIz$p_!WIcG+wInyW1nGtHPu(ZGC3QPNIuCTPf<_b&uYp$@gzvc={ z`)jVSw7;_HrFO`sO>U%@wv|mUZ7Z8z+EzBbw5@DK zd(Of0 zZ{qh&{J!byd=tNK;`dGbzKOqR;xC%`izfb}iN9##FPP({XyPxJW2b21FPP)VH~TId zT$Ks4@i}w+&Y9zP&K$pUW(GB9W>9lx1~q49P;+JmHD_i}b7lsWH8ZHJnL%aE3@U48 zfLSwx%9HWH1QWr{BvfU&6;^pHf#DZGcU@Tc~REPi?U{3lr{6BteF>O&AcdU=S60_MYG+a z*>2Hnw`g*#XtrB0{YKGjw_y5^qS2Hnw`jIoG}|qj?H0{;=S0+T1tCb=LIBS_kzeU^sn7$%w`iHFP6S8KE&YCegYsToT8KbkN z56PM_I%~%0oEf8YW{l36F*;|)=$sj&b7qc_Gh=kl%rSCij4qn^izfb}iN9##FPiv^ zCjO#{KX1l*-}Kd4b1Y;{{%1|jXU$ldHDhJgjFnk4R%XpunKff&){K=oGgjuzSeY|p zWzHN^IWtz~%vhN-V`a{al{qt37ESy`6MxafUo`O-P5ea@f6>IBH^+X?KpEKiQ&Wy`BGd||bagj6QW8RE|Mf+GYHs#FNlrv*f&WuetGdAVS z*pxG4Q_hS{IWsop%-EDReP-H>1!*%Dq|I26He*5Bj0I^k7NpHskT!iq+KdHRv)!B- z3vy;G$eFP$XU2k@8Ow5JEXbSq^Ctehi9c`R&zt!3CjPvMKX2mCoA`Y*Ui)Ue_RV4~Wl(ZRB(q>Fan=vJA#+0-fQ_^NkNt-bxZN`+W$%mX7Q*vfZ$(b=F zXU3GA8B=n0Ofm82P5gNif8NBOH}U69{CN|9-o&3b@#jr@`euIRoB5S*=2zzFn(Q&j zV{*r&j>#O8I3{mQ+L)|Ko6#U`Mz*vW+0tfYOPi4`ZAP}V8QIciWJ{ZoEp0}&oEh12 zW@O8mku7INwwxK+a%N=9J!52BdIgy`@#jtac@ux$#Gg0u=S}>16Mx>sZw>~NOD2^} zCYeMsd1TVaWRXcClS9EumD}FqNSpCEZN}rY8IMirZI4@eXVAPaxb5Dh_XL;T5nOuz zYU$m;rS}5!CZ@cJDQ{xRo0#&ZAIh74C~x|qyy=JXLErO#_;Kx#|979(;=Li?%yoP- z*YVB#+Z+t$STLz%GRY*8$s?0SCW}lGnH)-+Sxwr^YSLy_lQy%Ow3*eU&8#MEW;JOu zt4W(#P1?+AiYCeOCWgF;A#Y;Hn;7yYhP;U(Z(_)s81g2Dyon)WMtqYMWS} z^QJv>raklK_kxMPVB#-4BmSk&D}3`h&o{60eDgZ5V6v%T+SVku$!(L`CbLaqo4ht@ zZL-=VwaMwU8Qs%nbWhvS-OMu6W|o;Yv&^)aWv0z6Gi_#>X*0{rn0Z3ROcXL^rjRjH zg^ZaiWXxnCV`d8(GhN7-`9j{rpEvR6P5gNif8NBOH}U69`~?$#!NgxM@fS?|1rvY4 z#9uJ+7fk#G6Mw-RVFh!970eN4lH267Nnvwzna<%E$JVw(-5yy>!>Bo~(q>#rn{g>^ z#-+4*UnOnkz-coFPMbM!+RTB|W)7S-bKuM~<}FLJgN&WI*r|)1yV%K#oxPZmC1d6< zc@ux$#Gg0u=S}>16Mx>spEvOrO#FFs5f^1rvY4#Gf&f@`C++ zX`=OvEp6NT=4deoi#b-zp<<2{bD)^xByD=awCM@crYB6Bd3D;%tJ7v)oi_98w3%0@ z&Ad8o=G7T97s{B)P{z!LGG;oIG4r8}nGj{nj3{HKL>V(D%A5G}CjPvMKWCnA-o&3b z@#jta1rvY4#GfotTAeiI890uknFb9D- z1~O*qlreLsjF~)T%uF>|Pb*>1sXH*cPP!E85g+M-~# zn>P(pFxxGd?H25I&C9NWd9h^<40BwVG%;CalFHMUwaA#cMaE1nGG=y>G1H5TnP22=FK1#Xm>3EshJuNqU}DJG-p|BPFfkNN3F$j2SmGX5h@2kuzgvr5Q7JX3VTKV@A(8Gb^1lGru`AE1ffA z{+t=}=ggQtXJ(~yW>z|9W~Djvyz(Z`3MT%%NxGb!m74eqCVt<<@0<926Tffb&znT` zP5gck|A{A`mN@RP!xGt*#YFIGBRIh;Q%EEmo7M)WF0Wm^dF>&IBhFnDobJ5-%;1*| z!D-DK)*i8T<5}xhZw&rky=MKZHZ=0t#1Utwg8#Sv_r~D2H*QWGv3bi`uR43<1&1A$ zPA867xAD9HHmyH%%Mq(LtY5u({l=j1x(nBDUcY92Q0Yals;@umthGUv>ng81PK(#i z+q5Ov)CK1Tm91O9al`tJYmeBl{@nFjUL_k`C#PH=v3c#8axS)%Sa-q3t-o8lVB@>i zZ#?UWEvwgTSSw|MDAqR5T-(57g1UWAx5D44V_m?5xe4uPUcm7+Za z%psgHQ-+K=Br|5xkTJ7{jF~oM%)B9ECJq@hbI6#f!KIs7wbK+BjxEMo?)j2Y51W=zkRK|Nze^-M6VpM2WuU+=Ble9^f!OW8k??lQCU0eM9Isy4*s#T0xn*rL_;=HJTfeNZa((a}g;lFJZCZVi zw=y`q*5mi!@vF~Wf2Ozc?DK-sVc9d!JNMkR8|6{_G$88+_?-+x-)LJZ=;EcW_Ywxio=?#|Pgi+4^%x@UJ+wKhs}u`@XQ) zwtuy{ZGYb#{3fyB@lB~L_`&V;?cv|J-`##XxZ6IyvN|k}+f?}H*7}35u|F&Rd|(oj z+$TRReLQYUTXpH5;0t40e{lQC;4l05kv<-`vYwm$LA%3V6Z|5N$MbtyACFtNy!-d- zg2(P2{IAXCMK?-q!SmGALVIn+;Gghb{N;J41-}Mg@Z0wIm_9zHkH_=GBi#BVTxmOO zKcSCL=;H^vLEMkWquz6Z$4U|0KRGXaz~sCDgP&A*v+Z9z9=B4=KHk&Ifq0GZA?4sI zl=cUYgIy5(B9C{sQ~qdJ;vf{%+c3JNcDyujm@Rs)K0aabIm&+IIZPh%5qeO``0b|h2S37q;UG@;X}>}Z?^sGmiB&wrKyQVabJWgc^M3 z&U-TW&LHv!{a^5v@8{fp=f~mW&pguB`t0pL^WJCvwIYZX{kXknMG!Ii=V$r~5B=^l zeTQxR=`%gzp`U!F@3^fWe5UW@phz9i66gncJl6B{mgrwzxB^&w{y6~XSZAE&)p8swcX&W?#~$y>WMn-DdX$1AnUPzaXg}Y z%qb6#6HgFN5>FBLiI<3%iC2i@GI`iLcwRM9zD~SByh*%8yiL4Ayi2@Cyia^Ud`Nsm zd`x^od`f(t_yX}6@kQdEUZ~pL?@{70;&I{$;<(JWyIox9+jU&(+jU&*+jU&-+jU&< z+jU&>+jU&@+jU&_+jU&{+w~@ChZgZR@ec7W@gDI$@d5E6@e%Pc@d@!M@p#4E(B#B0Rs#2dt$#9PGM#5=^h#Cyd1#0SKO z#7D%(#3#h3#OH}G5T6lWB<|@2xSy5(#AC$c#1q7m#8bq5;w9o`;uYdm;x*!R;tk?W z;w|EB;vM2$;yvPh;sfGC;v?c?;uGRi;`788h|h>G68H3y@XyMB;xXcJ;tAqO;wj=j z@e=Ve@e1)O@fz_u@doiG@fPtm@ec7W@gDI$@d5E6@e%Pc@d@!M@p#OuTx#GAxh#M{I> z#Jj|M#QVet#D~O3#K*)Z#HYmPi7ybJ5nm*ZlIQDE=TN^#|4R9$7OI`$EAv0#|3g-Z;^P~#5=^h#Cyd1#0SKO#7D%( z#3#h3#OH}G5T6lWB<|^gAntyN630?3Zh0)m;(CJAlO&EMS=@TCD2wYQQcsz9g?N>C zjd-1SgLsp8i+G!Ohj^EGk9eQ>fcTL3i1?WJg!q*BJn;qMGvbTHy=M5im77;l;xXcJ z;tAqO;wj=j@e=Ve@e1)O@fz_u@doiG@fPtm@ec7W@gDI$@d5E6@e%Pc@d@!M@p~p|^5#00!EwDxwp$}!C*C05B;F$4Cf*_5CEg?6Cq5uPBt9ZO zCO#oPB|cAlf%uI0B5_ZbsB-fmN<2n9PCP+8Njyc|Ctf06CSD<4C0-+5C*C05B;F$4 zCf*_5CEg?6Cq5uPBt9ZOCO#oPB|cAlf%uI0B5_Zb&U#k<6OR#(6HgFN5>FBLiI<3% ziC2hMiPwnNi8qKhiMNQiiFb&1iT8;2i4TYmiI0eniBE`6iO&;XAU-3$NZflbdH<7m zjCh=Qf_Rd6invd_M7&JALcB`6M!ZhELA*)4MZ8VCL%d78N4!sbKzvAiM0`wqLVQYm zp7;Xs8SzEpUW?>E@fh(q@dWWC@f2~Nc!_wKc!hYCc#U|Sc!PM8c#C+Oc!zkGc#n9W z_<;D3_=xzJ_=NbB_&o6i;xpol#IZE%v*tg#V5RF=p4D|M(CRvtXmuTnw7QPvK3(@o zJSE~~;uYdm;x*!R;tk?W;w|D>Fw|{_4k_Oy-Xq>8J|I3MJ|aFQJ|R9OK2Lms_>A}> zaZeZ2b=x^gJVrcDJV883JVo3mULsy5ULjs3UL#&7-XPv2-Xh*6-XY#4-Xq>8J|I3M zJ|aFQJ|R9OK2Lms_>A}>aqsXGePmp?& z#8bq5;w9o`;uYdm;x*!R;tk?W;w|EB;vM2$;yvPh;sfGC;v?c?;uGRi;`788h|h>G z68ChWcQG68Ekk^B>|d;&I{$;z{Bu;y&>b@iOrW@hb5e@jCGa@h0&W z@iy@e@h8J|I3MJ|aFQJ|R9OK2Lms_>A}>aj#ACpLmRT zoOptGl6Z=^PrO9DOuRz8O1wtAPP{?9NxVh8O}s#!Wh{uU1h$o4si2KA##LL7h#H++>#OuTx#GAxh#M{I>#Jj|M#QVet z#D~O3#K*)Z#HYmPi7ybJ5nm+kT}ASrc#L?Qc!GG6c#61ByhOZAyh6N6yhglEyg|H4 zyhXfCyhFT8yhprGd_a6id_;Uqd_sIme4h9M@fq<&;@*cy{u7T8j}uQ2PZCcN_lcLD z)0eK_=)SL2e$MjG^D4xv#B0Rs#2dt$#9PGM#5=^h#Cyd1#0SKO#7D%(#3#h3#OH}G z5T6lWB<_8f92dl6#N)&h#FNBR#C_r=;$`9$;#J}`;&tK;;!WZ$;%(v`;$7lB;(g)+ z;zQyi;$z|y;#1=D#21Lqh%XZNK0@-Jc#L?Qc!GG6c#61ByhOZAyh6N6yhglEyg|H4 zyhXfCyhFT8yhprGd_a6id_;Uqd_sIme4h9M@fq<&;@;IH|B1(l$B8G1CyA$s`@~Dc z%fu_htHf)>>%<$xo5Wkh+r&G>yTp6M`@{#thr~z3$HXVZr^M%pFA$#*UnK5*l;l70 z81Xpq1o0&C6mg$;$#Hod@Lbo2F9g2Kd!859?}uW&gJackePj5^>Q!ww_!)4$&MJJJ zdQ{K9g`ck;*Xt6%FHuLH!>?5L^>ZBfb?SIO2mYDBmwQXs+sFD1cWC*#UJnQ5?^eh6 zAK~|_$MpJ9@Q2iKy&d>t>bTAW{7H3Orv<(|NHb}FT(=6oyE@JNh z2Y5!ks{K6t7{X6*S>J>eY4!%Ym*VBNXt6tOV&cS7O%kzyn`6C}si(@=O z`D@fMABKNg9q)U?zo?$j>s`aYiu(0BFz|1x<2oMjdr@BBH-P_89p|CJe}?kJ4YRPpPN$dl@LdW3V`hv;)5P2Y&(FY5$k1H}w2olz)XfzDEqtsN;LG@MF|#dYxGK zN$PkV0Y6KI4hI|mCTNj~^a z{_LfW>jt2FLOto^;o<5-rygHD<-~csdeq6!H>!7?_Blfx-z!8s>(qUx{3i9LuFHV( zm#Qb7?Ovr`a{BG-)p344>bXfh=Jb2Fpnj)+xI-Q16{DWJQQkT3?pODm{^22Ye9nt{ z9#gM4{o#}9HD}yh9xS{f`yJQwL_NE!k%3qn@9ui8ZLeCJ@%KgkEY{|SGg zI?khj@2`&YAK*u*H}!fr@S-|CCxX9L9p77oSJZKy1N?1U{nvkX*L7N}<#GNV%Ab$= zop>%$$GRRUf2Dd^&u4>Q2Y1Gi&!B$&{x8aZNxkIwP(9%s*WXgd`(3DK0@u&i;6GN! z`&94+^^%k4zg15;c`l3X$$n2c`L>(7?~K=R^{CU&9H@@#fg_%jddwM@k5cw(etV*x)X!5;&yUrIPChKC zVYmeXZ&Ob={qQ>VxN}@=QtvwXcBy*9X@{%Sv3?xl zxnA9KUI*Qzj_cv0{4MIZ-Z=aY^{O*ZzFQsFIYIgFs(Vg<_!D(}Zyn`-p^oou!GEXj zJMFn_mvFyh9T}8=o;t1<4S%tE#c9uj)IDdMO{=$@{qibxobQMFU#E`iOu|o7?>fi( zYLs{K{9JXcKZSZOQja_Fe?YzJyUW;g74go%!uk>Io+wb_^EtmVUr@_SYWjF(;mvsdt?C4^dA# z<+JMeK0D$psi&Or==JI)XC7Ep_nrN9mO8Erjrtqvxc(3P-RiiW8~lUnC8z)YEA^Pu z5B#-y!N2@2Db}p-@oV+?!z3TMaHT9a)J{#0M z=Xh_bPaVHpz2f9;M;+J0L_6G|UU%Z`t2dnIdz(7GKZ|-s>NRJcbFX^W8Skd*B_|Ib zQOEgjsDGx8@8iS&pzb;Ijh%uefu$e7b?Q)lPq@?1@26gIp6_Am`1}a<6x0(=yB(*F z>+z!e$?8+5{T!;vE7coL|9PEy)5)LDsP`TJvUW``pMs@SDpFlD)p9=C+}2GIpfH?P>=I^{Qc^6 zC!UY0x1HzpDfPIs-7l!uoY&W1QExfN`#02ao+|dschmhbMAJkjUJaeaDLGi8g0jK|YfqL8Vm#Jf2PHguO^|-U$oO;vAhu5fkPW!(>9qWOj z{Tze>xlSF|)j>R;QOEUp;9pj6Is5Bt>QSft zzpY+!j`#1Xd(QFr6ZNK(C%;g~^`8;X@6;zwJiC`l>Uptx*=e7H z)W=Sqq}995^L>>%)?-EeuT!r(`{gvaGw!ce$Mxh<&$;St=Y6(|)P1L&KcGH#wtJ1b z=j7WB>WfZ0^wncd{kN&NoqQOf9_Rgm@2HoYe&&bjeP@6DOnv0^SHDspILF-|)IBGE zc6vdW4+Cd@yQlidiE}^oigSD&rrvPsFR0_ZYwWM%)UiG({Eg~;r#;`Q?m79kRvq8} zLOtiJx14_F67`7_|CQ=9XS>&_H=ODe0^EH?6kwz;LiNv+v+tZ&hM&soqB$v z9(UsTg*wi^MLYaXJ>ksfy*UZV?m#bHuI6LYUXWn>&dc*O)y6^1A+te4G@+0-3 zGk)Ex-gDyop?clve}1O!IrG3@smGlD3beP=(OtiIsHbB21&d0y*Kzmw0K)O*fxcd2^J=~u5(uRHVY>(pCL zJfA`R&hhePly~;aP<`yom%gPwbK;+<*PT51vAXB<&kLx>IgWm-UUTC4vwG4QFLvE4 z%!isYKYx*W+sVV1tK&L9*uO`r_nhP6mFg+yd7Y?UcE@L^@(%5e?=YFBSQIas3)A)JKs^qb?Q+50d?QW zw};j7{RotQTs`IVZ@*U`I{6lPVYuIMeR$LpgFDCFOVqp0xcLh8snc)IskfZt@zv^M zCvX2k-E;bf)8S4$tJN2rdd^kvIC;`kuR7z!Y^}4fP7E!-*yzj7gm=7`M`Nq`iPCPF~ zd1riih5E?pZ|Br~ryX9c9(D5eB=w||Kc}m=o%+|Pr<~(@qk7ee|6=t;r+uzaA3OPW zje6hduRe|Xo%Z~qdemvpuc{B6=lf06@ANMdvf|3~$d zvmbYUQJ4=E=Xt$Qz3Gf=`>U6o?H-|y^VM;@6xCzS`0`qHT;~Mk-=rRQj`z2#H=W~p zJ={57E>Isj@xM>K;pERpP~I6&KcOCX{BP8!PM-X|ddWH7|4BXJ^c(+*@=p8wKpo$| zK>Peu-E;Qu|EO1-{^9rPZRdE51SiJJ`vwDNyDw0$IOF)s)LYK@dx(0~8FzB(eWx8> zqn>h(mp7=-9Dj>?)aeJ-s>hr>IbXf+pJy{GjHsvH=I2DlKR+b zx1su?v)ym0x14#!M1A7)hd)*?JLBepdc*PGswbTN;=MTB?{%l0cT>mrN|0}H^}f@8 z9;m+P?3a{!+-ZlS)l*J8l+`;r;aaClyqtK&MW@DALG z=LYqGGf(TIyc6eb>TRcA8mV`j_P>ICI(afvPdWMU2la$=yzjJ6 zm=9g2KipHj<{V%9si&NJ4pVP9<4Zw(;NR9I&&-ab$Wv9P=t9r+&=WMvsKAY8h zj=xvE;ykYpsr%0H@^SU4v%fy89(Bg+FRLe=`oE^$cV0JrTfOb{C*M^cIr;Vz^_kNT z|3ZDyspog)Dw=M zre1gY=hf;-r++?IedNS*k$T1HA3mTSbDr-t>K&*2r`7w;@%2UZvXc*AQLi}jz;CE8 zI{WcE>Q(2s{-Ju`IZl73UUT~AU#WMTcKd^R+nK-Z^wKaNVov_=sor$vE&HigocYyZ z>Io;Ff_lR_E{;>5IP;T}QIFFPoPqLA{Oi=?PCK8k?mKZ_qCW4$c_r$1^5T4; z>LaI~FR8bjc!uf?Cr`em-gfe8f_j|(_Q&c;XWUs(?>fibZ`ET?J9{q+_xpmA=ew!* zoc=tnK5*LeK=r7TpDFdW<43Dcoc&u?PdWX-sp<)*eO9T@oc26Necs9c3)BbBxbQyp zwsYKlM7`M3Xb|4a3j z?R&VHFwk2>|g8udH<`AOyfeQ1O1Qd5sQ`*DMM!)fQHde!MyFNZt*d`Eri#Ce1I zg43RT^`Vmwx51rwM(TB^pSf3k>>Q_4^{zAje?%SY%%Yut1$Wx>DfNys-tD-*jth?O zp+0une_!>w(>{l)CmheK&z#qH$Ey2IKA)^UbdI|-)N4*2u2Y|P%5Q=@@n5Q5amrtX z@=iS0tJj_W|0eaMGY|Z-debTYHT9CSU%stAbK?1~dfC}8KSBLYKL0{J>9q6j)N$Ps zeB8ymNz*a9OILB2iOW33+T z**n}}R4yV(bsCNY-5DgQAX!OtTvU=eiIzlXqmtBV^hjhj3ds$Pc8SA_gy?s@*Z1C! zK27hRe*5hE^M1d6JYUb(>;1X*`h$BvPvh$ggX>@8*GkvFrpEY-?+@37Z{KJ5l>Ho% z$v!iNFN=P@!SFe;ry4#j_3~!JXGBkq7=A?h)O!uzk$O34_(|D+)$n!Ew{^p3B=5gw z_>}N@bFyCI|GS1?khpCbzA5X!Wca+Cd)e^I!iT>%d{+9))yY2M*S{OSBkOk!UzU0J zyI;ST_j!r`0mIjY&##%R7e3D#z9xK#h98r;Vs3(qJ%;|_@?ahNy9G)e%|n9+2{8rxaieI!;eb7{@n0QiRTr=&&m3KGW?3v#g5_g zlK1~I{G!z3;C9o0+5dYCuQESRPu2^5yWv~H^P%B$V$T~5zaV*;H+&#|J#6@lyK>x zy6k^xvcKrY-x$6v{Mk1An#Aqvh98i5t}{yuK_ zob2;i!?(oWCk;O@`F(1#kLdr?hF=o>e`d0e#O+zbcSKjeY521A!EYHpBX-{ULwkAO z7X0OgUy*pe+VE?FA2fVU?j!dYz9Vt|QNzzk9X)9H6{+jD8-7vd@b^vjk$nA>;d9cD zes+S(ee;(L-;n#!uNyuTdw$FCd8xb48NMU^bj$E5$?uo05G* z4^434!#fS%lzDH#@GXhM2MynrynNX3OOnTr8NMUB_X)#K3eP`n_z}TBKUpt2|Ha9A z;o+AjxbW~RhHpx}eAV!)!iR4deo^B5yy54?p6?hwkodoBc8?F|#m-k6eogFro#DHZ zm%9uIF z{7u8p3;#c3_@?y1Ck;O-aeK<}HR)eZ8$J{sK4bWX)bF!~&xya!8GcOk`~|}=i~YC! zi0Qx7`)!6#OPpV2_>}16LBlV~eCP~6D)zr|f=i#8H~fOc=i$lz!nb3F&xsB!89pm~ zUYp>OmtQt~L*lSu__p}_+lCKB_nt6(O6>fD$^OEtKQ(+-_Wvuxwoi7+ZFM4~+oqKtom%QI*__W05`wbt+d!g4Gen9-X z$M9v*r5`hVUh3#AhHpxreTU(5QZFOJPs%<&ZTMxGD;_m`O6H%B8a@!7eBAJ(68}#b zJ}Y(ogyG9_?jIVyBYO2`hR=&W|Fz*m$?rcJJ|jH;SHrJJ-TkNG>tg@64IfAxUiyYT zJ{*vF=@o_#1b?mJYoarE8h%OgRSe&i`nuonb>Z7#!#72*-edT(=*c67PYcgi48JCM z`H0~&lK009pO<((KEdVO&l-M3;`{}}=fs{rG5nJF^_PYp6F&c);k!~_|7`fS=*+(v zep&eW-;;f$zu$V-UfwSX{&K_T1%I{S=cKL=8h%9XWzO)S=;WIW-w}TwGJGI@z0>e2 z>lX|^Cj9xJ;Tw{#4^Q?H-hRyRqoO~bFnn6-<ci-vCq|G#Yb72(5I z44;)aeAV!C5{GXXJ|lKMZ}^t%^PLGUad_F?dwjSmI`c}y=ftnq89psKc9-GHvc4I< zA$C4s_)zNTZH8}29sT5Ff6=8=hHuOI4;g+y`rW$WmxZ5?8NMq#e|)lD?rWbh{FvnT zNyFzQo=+LRCU!n;_&KS&XAIwvIrCY=FA5L8Y4}me%eM@l5&OsgJbnE2lEHa%V;0VEm7h|0_~7=n!R;poi%TCEec;s6;^;%CPpz&luB?vEE-sxp zzH;~R_N{-;eNE|b9lHG`F2w!MF{S>w4F{vq z!s_DMsnyZRh0`aN#z#JSc42vW@$CL0pZdeT^-W9YpF`~j`!d{rHo%Ayffv|ZyI)~! z(7x-ge@<9aLtkG@-Cys!U#@kN6HH6BAM0G-rePbGx+^7j6MR3Z^%W6t>YMxAjR~nA zgpaMSu4Uhe*wGOB;TbV?uCH;fo04L;F#5h@>f3nVKSvsXSk%XQFkr&B?)0`!yXbhL{m0*qD)$ z3}!ZTkmkC--I|P|_3+B~yf)C%!GOr}fubeIb%Km}6nsX&3zF<&=ZC|&sdWzd+=CpT z%$4N;ZZ)(a4?Xs1J**h0NGtuQ1hsdFvE#7;xq|9cz@m7hwwKrCS%Wnm_$&ZfhG}SNke=xQjt+l9_uq&R=3ij zd3hu{G(;BK9#}PqxCik(yuv(?!10QCqxo)*=a>V>3(PE#aL?pI8zc0#qHrrn81QU? z-W9lrh@cTTC}qGr(?Bn3LG7%LoCi^e5p2oWK7*xb>=7hF&4kjkmQXVhZdXWCfrdls z0y;=Q)&l87)xkCn(wi~NI%WsKN#hB8G&-?z#>VOWo|0jIhV*$D>Y@1_S`fg%fb{{i z%g~XG9^s*79=cEvhzQ4O>V2W1j|5ai!8M~$3phpefudlW3bq%-Fu?r80!1#Mf)K0> zk@8@50W~A)FhbBP)_AZz!;y?eUw}7=8Y=>w2?je9ghMqaOhXRk8K5){Lv00TE7DNW z$s#Un6)`S1$ZEGUAl{WNBK9>6HaE=S3FVqFwMAS|9U|2Wx}dl#vy34qB034gtcXrv zgTS5*UPUyQ2FoI}G_Z2Q!}aSQAk+0sN|H)((TGE4?TkM*ECD zQqf-;=B!4sf&D1B3cYA(7YT$!1Owh66v$LX)GA~uViYKdcmYo%JW1Ho4SP2&hcd>y35L1aBH1|E1u zqyk>pGikYjz`T$ML5VnBYDk$9uQ3(*dj6^krKEnQl;5SS^ z9_mz4>mKCuV0^)F?O=n$wA2vt09rWM>ELf=pMcOt^mLEuEmJ@c^Nec9*fXPxdgLpC z_!UjY!S_G~!GH&GNKjgj{?R~4&#?<5o9DfP;lu#pQDhGF;ZPG9Vapi(GE}Bul*?p1 z=#VfHG=!%>q7w8zLufn%)?vJgh(n_981li41SUDmHVvjFFtVa=M6je_rmAqgVd`~g zwhrz#=z63g^V$8&YC>Hm=tKjL5(wZB@Q7Ky(Q`@|KV#1TY4^DGBO?b?q9xWr`-U5Zg7zKkJ z!sO6L3gVGrFxpqdNFQ-c2$;nK>b*j?kxLJ2GKSy68wSD=5V8iRpqO|OgYygQDtJE@ z5cdQvkMOmkEfthh!TN$B&BHM0P=+}HF$j>+fXD|(e8Ify(26|p3=ON8*&1fk4A(R0 z8gMJiU`0laXS#^>9;y_fT)5m}E-84A;6YZ80t@gYqfSwe97_D@JeK++prMBZ4jXlD&xHQ*TmbO>O?G?8!}NJzg&niG_(fsP(6 zFT#exbNgUlLGX&6kw~*Az67Gz`eg+vEN!78cD`j>2PF%j5}-{pxptlkP0aT zk%=h01kyXqF9BI-;6X((B;-4xfmMv20rzB&Ij*9R0*bTZR#G{H01pUdMWzaDcCanu z+yu=oNL9vJnZp&H#qfU}i<_Rn{Bg+>p}(VQR1w z$9kCQ87hw5DmcSvu*Jf4vvk7p6thUp_=a7Y-z8@5llL}t7-t#HwU!3mj$9QALk zK_xtxSukQ2WW+%+GW^J}ms19YE{FRpbRmt!eDsz>hwr=h(CF}k55D7pher?Jd*7i4 zM*HkQp;pZK0bvPnxk0=|oz=B5$2896sDso%l38+wTl1Bvu=uJUbGiZ@g(nU4N>IQIie$7o&jcYl z4p~W{R71r#L?>W8^RU@N)jZTIf+Pi#s6*9c^vi?{IpB?N4^cK5v5F9egg7`flmsR< zjwMjv$X<(~8X*aoF5yW-CMrCS7;r1vVM6x~h-N{i3mJe6MbuD2*(dfaL?{_G8zh>h!&`ugJ5|6$ zn{LQw&v_VMfJX0MSs5*!J~0}Nr_AGP3**1}etKc))Xy!BfBWJet*kDbUA_K?y3npp UST=sdc3M2Ku(~jK@pps&17yl0#sB~S literal 0 HcmV?d00001 diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so new file mode 100755 index 0000000000000000000000000000000000000000..532beac0bf22c653e9ff7489dd1ac339aa1ffed1 GIT binary patch literal 123855 zcmeF)dzfQol|TA)HK;+gx@N$Ahu=r zZ!-3}O=Y+2{puBuYMF@mJ+|o?(ZBLMdJWs-_wntc=kYtAw=m?b!v9i-MZZt2jbi8b zvFOJbzsI9uo3<*?i{p85JdfWidqxHMo!dL{_ZwGk@qc*U9Ja^r_%ZgH@HyCp*mm;# zsQTE}_`WT^ZxepE?I&@{Htp9U3;z#)UKDPf$5lUdQEZ1;tjWlu-y9QuON3ti%*$PV z+EG6lj{~Rt(T*oVf3UeC~vK6g?Wvf=N9ayva{6YLUuyL@pdSh(O z>g6kzZdeyvHn?(N<3RYk}ulW|3Z-Mz1m~Vmk7MO2=`4*UOf%z7gZ-Mz1m~Vmk z7MO2=`4*UOf%z7gZ-Mz1m~Vmk7MO2=`4*UOf%z7gZ-Mz1m~Vmk7MO2=`4*UOf%z7g zZ-Mz1m~Vmk7MO2=`4*UOf%z7gZ-Mz1m~VmqSG2&)y6AlQh2aVO`W*gQ<@^kQ1U&np z+rQC?#X7Hj`k22aE;{^*)WSXP-y^l?m;7(j@16^PcU|}8EFV5^ z{%gJk=38LC1?F2|z6Iu6V7>+BTVTEg=38LC1va+;KmGeA$YOk7hVO~ZC8Gzs;%9!Y z`VIUU-*?0J1U`TLM*fWNe9hF44fC_nv+}|3@Jl`$Enk!PJwHeN(TF#F)>fjPHC+#ur8W96G&)iugJ1sU^`9<@4L}#qIHXq_NlwFTJ$sGrw%dzvAb| z0pTaF>r(c<-$%~~+jrB?)7)^x|LcF-15p+H&d+BTVTEg=38LC1?F2| zz6Iu6V7>+BTVTEg=38LC1?F2|z6Iu6V7>+BTVTEg=38LC1?F2|z6Iu6V7>+BTVTEg z=38LC1^$230>>PA;YlL$jjCO3x_Y3Y8 zVXOsg2)-f0IB|pE8zW2*FBE)Jgh}G1g1bkUB7RnIj|lsS|0I}-FipHcaL)(>;&%o2 zim*bQ3(tyK@a72H=OOq-vhRCGI7D15xKD%~;;w@GMmS8|TktIrjt~zL?2B-ec(CAp z5snexF1UY$tEI7Ca`x zIpQA#s}aU7To8^`;oUHv6FfG;IB~&VAs!cDf_UGXLwrYs6U5&LzB9r};uC`Jig1ef ztl;qxP7`B$hj>DSGsNu#YZ1;8cM*Jdgmc6_1y77H_7UvSfr9UeFitE9o)lq%`1kOB z77I>}uuI%#-w;oUaDuqA;6Fq-N!&xQKf)>E{(|p~aGF>UJT<}@Vny(M5zZ3dA$VGZ zu_5fyDT40@wt)kJr$-nkCi+5L7GdyFlzf9=J;DlcU%`P0tHg}p@(63hLj+eu*iSr0 zaAkyb;)#NT5jKeL7hDx#lh_bEBf=JOgJ2`VHt~}ELR=l;*hSc*D+JGsaGZFJ;0Ge? z60a9r6X68$Cc(2JoFx96;MxeMh!cYABAh1vLa-U(>}3e)VZpP3Ecv+L`UvMXmwa7_ z8zO9-ji)~$xDohC;B$iKMA#-S+$F?wBOD?w7W`m@9pY|+tq6yS`wE^H;RrD+cs@#U z(mzb_LqNuPoZyG?bmEEOd7KL_h_LY~1b@2Vg%LK1X9|8K!WQvd!FGgg;zfcVjc|x~ zx!^?+c8FgP{8)s;#IFlp9O2vsgmjbO$0Lkw1l}fiNrZ9Y6XBVq3qBEH=hHkKfU2`h>r?>Ho`V>R`99_hlno??kqSQ;RrD$`1uG&i3bXPA;K}@Dp?wRF~T@*sI=vJ!D}K+5HA$`QiMt3WrEj6 zm?B;$hxnf&>?7VNI1*u+c&p%-BMgXl3SJjsg?O*vS0bzu9~S&-gf-$JvNZZygj2+- z;MXIZCY~gCeS|Z_y5MMpv&1!m--vLI*b=-U!Wet;#e)AFVVu|z{APp+;x&TbiZDqW z6}&OR6!9im8hty$QQ~caV-b!K?-Kl%2*-){3*HoAm-vX_cOsl1J}G!}gp0r4`y|A??cyjt+C2&=^F1b-S~jd-Kr-6;8S z9F8@zH2N9pJO|hkyay$T7YqI;>LhjqCnM}9UL*MP2;1dzX zK86IF-9N-XpibuJt&*RAjId6;Q}9m_Hi-8MJ{e(?_^{wp5w?g=2+l^>CO#+l=Lm<0 z3#E~tjFQE)E8 z5n}u;A^tVOan`xB;PVlVv1Cf{1(YNnDEMN8T|PY!{9A+*EP0gR-+?T7p}fR+DZ*ha zjpCOHhA%E-@^0S<^=i=t&{67jq6?v8)Eh+?LC2}Lif#ezQtuSq5;{S>S9B}rB=up@ zt)WxYCq(1WY3eibT4Nh%6^rD4n(e0r9)THS4&^mQ*(H)=-YFczLv`IZg z^fk~HwJMr`wy7tHz7{$}t&8pm?NH+fgt`;7iZ}M+JB#iNtx;2=uY>ke4;0-6TBio0 zuZK3MM~Nn(O=?YaS7?iRn&@uOHnk!8251$pvf>*>-w3Ty4_X@Po1l|;i!c6G(cPg_ z)MG^VfKF52BbtKFP?w4B37w^WKy)wY9QA{uZ-xeV#S#CQ=-$u@^)sUTK&#X*itY=o zQGat#sBdAtc(X752hl#(OZ^|w{a7z`QTQJGg8f-9^);dgK>Mk05IqoDr@lpW3A91Y zi7tgUso@9^zFi7!QRU9E3)0X4w`h&aE6oKN=qTRyiw}!tp<~pqisqo>)G^UKv`hVg zXaPDwoe(WTC#m;|mY`GAY0&^WP5q;289GCq6FnF@ghfRBku5`gE40I`ZcF|i0v)D) zO7u|Z2z6NWFz6`ttD=WP$EahX73eti2cmC-cBvDhM?fd2_lX_}t+QuMiyj4SbKh>= zCe*h>`8o%+BQp`Haz;)O!|G10Zq6!mG*bup*8BkqUS*SsYi>R3$0V16#XDHiI+C<=S5r46m_euLOl=KN8M5Md}x}w zyXc3Y0d;@T4?`=|qUZ(CD)k7_3!ydY@uDAr_ES$4ZA0tSZR4SS6xzYt@$p?mFMJ+z z9PmkK953MF_lkZBnxH-``e|sA`h@7^&=mDK(a%8psP{`gbf9VKVwpv*fCkjvM6ZNa zsQZfkBeY7*ihdS4%eC_5+l6`+>%BOf-@~u?7eudSz0|LZevb80ZxS7b)~L6MejeIS zy-V~9&^q;g(Jw+9)JH_Gfi|g6ihc>&qCPKrEi}z>{S^7@!#_bgoY7ZF{*FK!%-{8* zUxqfR7m8j7ZBZ{1{R*^Ay;}6E&>`w|qF;k{s5gp!9Xd?CRrGr32=z|UQRpajxx8!t z4QPN@vGI!}e{X*R3yH)t2VZm*zm%5|q?W~u& zyJ(m7Qui1AA#{XV6ukpFNlRTJ$&2 z1ob-6X=svqqv&s;DeA4Fk3jpVcZ&WFnx@_>`Y1G@-jfLR_s}Wo1EP;Xr>T#L{x@`n z`n2c_be8&e(Z`{4)NNlI>J!jWoRAUUMf4BQICU@4KSC4KrJ{d=CaDLDJ_#M8?!RNG zPeI42MbTMkmwJTgpP>`f<3*o_PEt=5{R?!8x=QpJ=rnb`=(Ern>V=}uL1(F#iT)3C zj(WA|95i+*GV1)DLj5arlzNHi^UyKsm7*^|$Enwfz6kA7ZxH<(bb@+|=-;7})H_69 zf=*HI5sfW;ceqa4X3;eD0nr7}8R}!A3!(jdr{RqUhPsGl*|Q#&{M`atVMaY6x+Szq zeNJ>MXpOp1a&l{EKXtKa99pODCb|u@LETq$TWFJ-72OWnq8=u?J+w^?FK!&Z{|im= z7#}V9yBOL>JyG;E&@}aQ(F8Q0o+uLgPI0H;V2GO;B$Y-3^+g-YNP9Xo`BT=o_JZ)Q3gi z1Wi+)5ZxUbP@fas16rXjl$=aKtJELJ-#_+*&QhP2vU@@2sDBrIGc?9_*fzXe+k(BJ zaq2Fj`#=-ay+rqgCaFtB-vUih4;Jl%_EC=(-4B|ko+!FMG@#xudH{5Y`iSU(&<^!U z(IwDf>hq#Yp(E6-h7W$=s0zM(JZt}EsEx#6VxL_^Uz7^D$xS8 z!grh3ix#0Vjyo5MmY{L!WugHzLA_eE3{6t66FnH3qTVR_R%jpfR?$PCY3iM#he8AD zy`qOfE7a>!p&kw$rT+1NP%F?e>TY|6`Znk|^HRpBJq`r>I-W8A$JjPE&UjJrO!Xy-j+{d!Q41 zzxpoGlc1B-#j?jIL#L=&(Nmz))V1=O_aC4$)bmCAp|jLWMBfXYqh2X`Dl~>u!{XP9 zz7HCw-XMA!G(kOHX5RNhQ+(xfs_5y^KI%ppQfc4zLDST2C4ZaHfVy1fth1pN zzWcSiO$DuRSPf7k>0-dD}i+%z+NByek5H!Xa za!mA6Xq@^3(aWF->V)Vgp-Jj}qMw4MsMDgKhW1haD0(?GO?_U@Dg6wziL))^TggXj zI?xt%N6{;wZR+l#S3-xV`-}b~v_mb5eik}RJwo&<=m_WiY+LTl8xoCfz#(0=O9 zq9f2cH6{9GXoGs7=ylL0^*LFWdCo6sipl6^w`7Hhz{Zt-hHZ)6SB zTSULj8mO~-g*papQC}4O7igOre{-leL5HY2i+%^%p{7J{h7MB?6#XuAgc^w60v)9; z-Y?XDWxY6;ExxblIJD09`wkQR9_!s)R`&Q-)=SNbejhqUJxufm&~fT515m+@*U7Au00d-{=>hsUY4!NYUM{POFd2W z$IxkNL-bDQ47Dls{scNpZA;k+=qUA5qW=Mnan2eRy$d?WvX@A|_$hRne*t+y^7n3N zi}`z{l>HgBOV)Xep(E6+)O#;zfqlx*#O*1-I&iT;W;P)`$`f_AA5(O*L+s2fEefKF1|qW=Y*qJB#B zLFhDfSo9(24E3v`4?}0EYo!nUhV?Rk&zC)(X1$wL%Kn!1Qm>SR*R_X*ZZ9TWWn z>!rRVHT;qFQYWPBpP+rz`$V6Frm54SPeB9fA4O-O73!SmpP^Oi7JZ>U4Xsh16a5Qx zmby@m&@<3E>QM_qeHI$yx_UP$`y4b*tx4JcfhMR~DLV&EQcshze}$%~$4S}ep?%a- zL|=fWsmn!Qga*`>yq5kObcA}b=-;8E)Q;#&&@t*YqOnEqj>-GKT#MZUvp8F5f!Tt)X*#Rd>E<96Cw8Qgj>W6!lus zZK2cD8$`E*&QQ0I(SCdAEcF&Cy92bs*G_kcE{4W<9%-M{@ET~Gniow#6V!v{@20PX z_H&haqUes$2G5T=Q*c(OsY|>H(s!hqkFD(Ij+; zdZg&C&<^zk(cPfK)W6GL9Nz$~bKiE6ztz1F+Mq5KeG_zwXS-b-CgXzLp_9~(=pN7{ z&x*K4GzFbz*-_Cwp)=HjWovsuXQ^E&`)24I^={FE_e^|PV}K>Mj9q6b3j)NhI|fwuTA>$vDr zXp?21maIOAH89sJlD}zalKJ~i(F`<2?HA2L`=~2LbI>&P@3OT#G@yQ1$`+s%>X2v= zTBYtNe-9`@Yt;Xic_@JPQ_qz?REF01TKavGzXwA{n7?O;z7;x3-5`1hbd35D(LNf-JpwvSJzBE*NNATmYfAF>C}^Dd`>5#K zp$Y1&=+V##*6^a}G0+st#$_g}Li?yYiyjM|WDP0NJJs#R({!WUX0Butr6skIpAc)(b8M~5!&Rj*jMuRv(OebD|!`lmhm1YdNp*8dYtIzpfR2sdWz^UG*11A z%)Fn6Ca7zr>=&R(>Mx}17ojQYB~tbpXdm@j89l!Qt#Q^nLh|=oXr1|cyy!nc8`M)p zN1#pWD$y@PTh#TU*FoFV3q`*I9im<)`c-I$dbQ}+pu^PbM86Ilq248<=k?GoGxhJ1 zzoXD8X7#qRKKllAn!1bV4bU0tUZVdDouw`n{U&sddZR@4Eoh8+cC?he5gMo7EbqF1 z8=9b=E@j7{N$O+r8s}f2X&%ixC4X;Xz0BWxMZd#(sSk_Z%zCL$h<+EEqCO{j3$%~A zP-6I3XqviMbQ~H`cN6^{v_joi^j7E)_u>}O??byRdxz)`pcB-4ME?ysNqs={Hs};} zD_O7K4xOexEoHmV8S1I>H^3i4XQ|uDO7{-v9Cdf8_urv0zRuc9%Kiu%r`{#{V`!av zzv!LN2K5oqpFo?`Cq*ZqE$Z{4{{d}Nw|Y&ecR`1!JBt1k+M(_)dN*{Ky1(eppd-|x z=snO;>UK**{ZD9@XRy6qbP_s2eY5D#p_A0(WL11GbclM2=r5oh>T=Qhpu^P5qaDd;%0A+HX84ISbuYZBy?T{S9=8`iST>v_pMT^taGq>hq$HKu4&z$Q(s31P4b| zVZGGLMW2Dzsb3I%7TTbGUGzC<6B-LYzrWAoowi%F_zjB_;SyzGKDH=+@OE$A?%16c zhMB!+-`KHXlWehfY`g6a+ip>~{@pSxusAAk_^whU93Hj{OUGhc?;F0sUS1g|SoR-vuv(<9c{OhA_2blHN;~9u)q6dfsL!ztzFg}Sn+|u z^#^Sn+^})k%7KjovDo06Rm)bbUNgAtoVBYrZt_jVH!NMTLMnTyv$E~&@8ZRN7PZIyyvou!~xXDR5_Sqge}7BcD0b(U28 zrJz@5pyCg*z4(J{Z(BjOx2+)C+g6b6Z7aOM?&fU;*sjL6@Q@O4^;etj$h?WDa@0D&e^d3AnAu|4mxAqx--@c9<*ZJ%J82x z18YC9`kb>4+OU4bLF>-hxNKnU%Ju73uRQ3e!R6aol2=D0-#a1&m5qg~r&K*biQ*a8(>pkfPD zY=Mfctb2N)w~ytZ*H-1A*H&c}f3DCglPmPf$b_2EDKy5cr+YQuq1GU{iZ8uQc4b*l6wcWBhUO6>#=F+Miiu$o?lcH*qqH2?( zYLjBG{c}atCPmdIMb#$7UYq38y=~>wy=~>wy=~>wy=~>wy=~>wy=~>wy={dTKkxOU zbZ=V)6@Q@O4^;etia${C2P*zR#a~wOmsR{_6@OX9Usmy#RGXJo{H0>AP0A|%k~$V8 zwJ#;LFC`U!NyT4Qqg+|dAZ0a!1S%f_6=zP(P&qXwE3anEyjo@D)xPA_Dl4y6 zS$Va}3RL`oia$_eU7+F*RQ!R8KTz?PRs3ZYe_6#}R`Hir{3X?2$}0Yn>N{l>e@XSD zKpne$cvU8@#&fFw=2ZX9ss5W&E2x}WLFLp6DyLRZIkkeysTEXCt)TL11(jDTsJvQ1 z<<$x>uU1fbwSvm46;xiWpz>-36{z?F6@Q@O4^;etia${C2P*!uiodMlFRS>=D*m#H zzpUaftN6<*{<4Zcr{>wbS{LQ>Y8+GRqP$uc<<+_?UvMdQquiPw~1Q+e&HH(^Zpo{4OF^w$3ToX_Q0tb0TDKI`dZ3`z zT?MsnDX4W=D*m#HzpTckKpo$*9)HwWkyqnGUX2NPHAm;w9GzElbY9KT zc{PUQ)f}Byb96z?(FHX}7t|bGP;+!a&Cvz5#we&cx}eq=1vN*PRs3ZYe_6#}R`Hir z{ACq?S;b#ebA6!3>b&X;d6oZpmGgNuSLW4RnOAdVUd@$xHCN`+`sJXJB=E|~)zpUaftN6<*{<4a{tl}@L_=~FV7gSCbR8AJu z{8&(JUQqL6LCuc^mH!1bKNi%yTu}34LG_D*njed59xUtUs=2A4=B9$0n+j@fDyX@s zpysB6nwtu0ZYrp`si5Yjj2bgDYA(pAxgewFf{dCAGHNc!sJS4c=7NkGD>7;>$gAxZ z)Lc+db3sAPWd$`C6x3W+P;)_1#a~qM7ghX46@O91UsUlIRs2O2e^JFBsQEfj^L3!+ z>p;(UYJW4Tzh~6EkWuqOM$HQuH7{h;ypU1zLPpIC88t6t)Vxqo^Fl$*3k5YV6x6&> zQ1e1T%?kxJFBDb$MHPQh#a~qM7ghX46@O91UsUlIRs3a@4`r1D8Pzv4s&8gg|H`Po znNfW+qxxn>_05c$Q!;8!$*4Icqvn*1no}}rPRXb_C8Oq)jG9yODjy1JPARB4rJ&}N zf|^qbYECKWIYq@^RPh&8{6!UiQN>?W@fTJ6MHPQh#a~qI8L0JDpw?G`T3@N%RoSDG zN9B%69hEsMaa7)@v{6};QL{lt&1@Mpvt`uGmQgcXM$K#)HM3>Z%$89zTSm=n1vRr3 z)XY{;Gh0E;Yy~y571YdDc-hR>dj(lk@fTJ6MHPQh#a~qM7ghX46@O91uR4RuC6!7l zlT;$9JW^?-vPdP7%AxR1m7Cw=$f)@^qvqp`nvYfK&Clz-GpODd-2B_#dxE`p1bgpa z_1+Eay%$(iF%?xzMHN#~#Z*+|P*IITMKul;)i_iP$DaS2f37{~|Mb^dzBd%8wN9Yc zI)Pe$tInYMf=VToNh*<49;q}^S)`Ik!HT zO-8M1GHO**R!LS=F%(q{MHNF)#ZXi+6jcmG6+=bEvwdF zS+)Mks`Xb^t-rEr{gqYgudG^sW!3ttsNyfE{Vl5aiz@!2iodAhFRJ)UD*mFXv!voL zs`f0X_AIK$B^7^3#b0_^{JpUCa8Wm8GDtx9f{+bXqHW~;x8UYC}h=2A*+@O zS+!Qks>MQ9troIsxsX-sg`$eTsNyfG_=_t3qKdz$;xDTBODg`7ioc}dFRA!TD*lp+ zzogDWm44 zjCx-sqt?I~wFb_pHE>3)fir3ioKb7w?90|Iz12ZhuUz!fMXz1-;zh4s)Xb7q>zAU6 zzo_Cbs`!g4{-TP%sNyfG_)9AOqUw1i6@O9n!jg)=sCr~c#a~kKmsI>&wJ0y?$GwHt z%eJ)n=&RnMI*aNns;j7;qB@G|CmA&oX4FWSQ6phSt*bL?U7bWo@fXVkhnqt?|K zwXV*pwNO?qhO%lklvT^2tXdCc)q*IiRzz8~B+9BaQBlQTRPh&8`~|hYMHPQh#a~qM zmsI>E6@Ni3_ev`Ml8V2i;xDQAODg`7ieGhR)t6OQRy{#=1l12zH&DGmbpq7~vTEs+ zRcoiLT0CXd>M5(1Pg%8o%BlraR;{42Y6+E9Yp9aiZb@yosCK`kwp&zfQBvD2s)i}4 z?UvMbOM1KNWmieP*is!s^$V3IDyvjdshm<>LS>XnD3woHwXDdhbwyS!EV624kyT5J ztXf-S)#4(nRu@^dyvVBcML~~pDu$AZp`>CcsTfKshJqgbR175*LrKL@QZZ!J5y-0k zlU0*uR?V7OHEm|qyqQ%KXI9OeS+y$7s<|_(R;5`rd*;-tG^bX6IkhUysX0HV=KP$R z^K)udnp3ONoLZF@)P5CJo|RPmMU`{~y((4lmsI?Lia${C2P*zR#a~p38mRb#F#cnX zKRI>e0SBb=OUtS7)kb)NSGJVuYpx#*PhB1y*f6+XYROs4!_%EtuLvKk2~TTYGq_}M z?aI{yYr~%hmajf^O|zI!Ejc3{{Cxnkq*pOPXVdKg}&sclT0S9CJ=N846Io_uwnJuu<)vLS8rIoe05mqd51PuuUt78R=KKn?2#zmShs#-xT$l_3M*T+ zdhMFkYX_ICS$)>(jfctxSIH^YOEwIykaMx6#Hw@FZhEZkoV6cZy>{i2jRVWq3`&_W ziow>3!6u&*{=9zU#?{epHa6A|4y@cTuxc<2H9W<8g*>Ad;*uzY4NDm6lIFnrfwNK@ zHZ+$kKWEjd!SzcvtUiD6Q1v22r9nxheMwD$Wz_}BDpkt53#cxfRZE7f>XKQtXvnHn zLsl&tvTEIsRSSo#S~+CZ(jljo*g3Vt&Z%W}PA#i*YFV9A%j%q3R_FAxTE$#aF_%=# zB^7f?#avP`msHGwiaAg*2kK=(pyCfy{DF!;Q1J&U{y@cFR$ZyAx_?$pXjwIhW!1!$ zRa1Ia&FNV+sb|%!o(-qwma=@;RAU-_wPkK|3y6CmbX728$Ne&_#c`r7GEp1h5LEfrf-|~H~J~s z79Y#^lf(bQ5ASb&ege-=;Q8E7DJx%W|LCV!Ov076!K%29v))&m5#n`{+G|^_jTcK^z&o5)K{z$J*666VOoFjd9-uF2l9Noo$9iv z#6B#D?@@HUcDyijnl5@4o}beADrGJ!NI|ZS%jj?03T7h}rhL3eP{>{DRNt_uKIN%^Sdj`+grim<~UK zufO;_+H1oH%pID1zxhwmPm>zM$M*U1Gy9${dhs*SPcyei-^0(-$DRvgVg7LZ3oqyL zs@q?4bF`%u2Sv~4zjpidSNpywjF#iL{{5mbVvf%*_eC*|yD#@GHjk$-_bp=_FJJCk zZ5{_-?pwz=zP;SzF^*d=_iZ+hM=$qnV;pB*?%TyUe!Sebk8xahxrdi(VSiV@ShQ(G zRDg$zHjQ+z=80EgD2rl}U9bFF6bmo#@+x18V&SC|%$FSREnI(GNK%YP$d zad`cOSG04q#aFglp>3GWVKF8CJ z2aZ=9uR30HoR`3rqak11uewvd;ds;Wmg8;5haB%XKJ562=q*YOF*Cmo-1 zeA@9D$7da%b3BHdP((+)ciiKSCmc^Yo^qVG@UYwEO+2jgHXhb_BMfw z=V6^U^svrbdRXU8J*>B!c4#|3G+i6(~i$LKI{0L z<1t(k)E=+6;|a%;j;9>&b3E;M;CRLHs^c}s`yH=4-f+C>c+2s&<3o;j93OUk#PLzb z#~dGbyzBUc<9jN`M8&p95$%{5+;|BfddPdc7*ywCBp!WIzH!k47YoEMgBXU za6IXF%JDwO(~bv@R~)Z8UUR(P@w(#;$D59~9B(^5G+i6(~i$LKI{0LD zv3BbT$CHky9OtdLZ2f7ceBd~5$Ytx{ExD}MoO*bx0b8Co8?eqx+*{{u2(0ts_tx7^ zJVTCm93OUk#PLzb#~dGbyzBUc<9jN`M8&p95$&A#k$i962Qtl9Fs(VF#? zQ%|4cyxp3uhc{faUUBNFI$m?U-|@QR4ab{~w;XRfKIC}E@nOeD93ORj%<*x@yN*vd zKI!{g(eAw|3$44C>b9~(KuHzGqPdYy3__X6Qj?X$i=QwYkXvbCFKG8aFplF>p zrnAml(^==u>8$hibk=!;I_tbeops)%&N^>XXPq~yv(8%&S?3L#tn>Cb)_H>*>uuaP z$NG@t9mj_qA8~xt@iE889q&3m;rOKEQ;ttNKI8bT<8zM3a1%e<{&B|>jwc;YIo{`Z z+VQ~gisMzsYmWCjUU$6Vc+>Hg<88->9PcedUB@RJpLBf6@oC3r9G`W3&T-yY_!aq&Tftf9EnBVgcF5Lw+g9tmajW&T zvt8c2)t2Y&Tdng3uGV>rJL~<mBONt+LG#}kex9Zxyl=Xl!j!10RXRmW?N_d8y9yy1A$@s{Il z$A=v6I6mz7h~uMc-Qd>$0r@1a(vqH8OLWGpL0Bh+hV>V{~b>_o^(9rc%S2G z#{NCmf%2e9G}@$7dX$ zb$rh87;dWliu`vx;ds*Vl;eGlryUO*uQ*Hg<88->9Pc(+Vub?dwVyLH~m+j`){Q*pfNc+K&C$Lo$a9B(?_a=h(0Zw7ALq2rVv zc6`L~QOCy|A9uX#_=Mw=j!!v0?f8u2vyRU>9=pgH{~b>_o^(9rc%S2G#{NCmf%2e9G}@$7dX$b$rh8*vFjw zcRb;E((#nzeU7Ic4;-&JUUj_Yc)#Oy#~Y3}9d9|_c6`Y3j^o3Qk2pT+_?YA4j&~iO zaD3A7DaWTBpK*NF@j1t17d!dyc*60d<0;4c98WtQI9_qQ>UhoZe#h&MHym#|-g3O{ z_>kir$A=vsaeUPAF~`Rp?>au=_@v`gj!!#2-dD@la5b0KJEC7 zIUc*j$$!Tajwc;YIo{`Z+VQ~gisMzsYmWCjUU$6Vc+>Hg<88->9Pc_o^(9rc%S2G#{NCmf%2e9G}@$7dX$b$rh8*pQR|jwc*XI-YX8 z&+)Y5f#Vg&tB%(k?{~cJc*F6g<1NSAjt@EBaeUbE5ywXzA9H-%@vh?&j!!y1<@mJY zGmg(XKIeGsQYZf%PdJ`*Jmq+w<7vkO$19Fk9j`gw?|9wuhT~1gTaLFKA9B3o_^{(6 zj*mJ%=J>edUB@RJpLBf6@oC3r9G`W3&hgk~PX0Tda6IXF%JDwO(~bv@R~)Z8UUR(P z@w(#;$D59~9B(^5G+i6(~i$LKI{0L9{Y@w|BfddPdc7*ywCBpa z6dvI3IP|OFd_RZ&<g0?z9^(4T|zIxX~tVVX%iylxeJF`Va@(szUNbHwz0;Q`Kbpl9Lz80YDS!8wo6 zkAw5`cl1->HJnFBUk>N>H0Wo+>$vV5T@JVGZ^Gn{{CQfO^AXEm0q1&{{v|ly_ojaX zp2GF6>EC7jxDE{chj3oUgMK&5<9!4Aui!injs829$LH+mPr{pKyU)YZ_*@3dZx!C0 zMB0I$`=h^>ZrcBi@FvdhW%;+j`8i^G7S7Mf(hq~zah+KDad5tlpq~Pdb^I6v=0|1O-@5vBhS9y8<8&*1z# z1Gr3>_+k-F!{4HoYxIt`4qg*%UNht2bMU&EHy4ICUXkO@>v^)C z#c*C&&+DU~ z53ibhxC9=Uao|cg|IWyIu7$_Vc5k4Y`SBJw*Nv>_4tT=k$vyCj+23Eoc|B*=^LseY zzoP#c-jBaa(*FkM=a}f*gg5<@eBk?^^w+_89tC|*IM08eFM+pkJsf%&&c74U-wx;J z7U?xO&vT%kw#onelD)6fAju{VvusNyp#U=numAJ{5fiUNL$83_NY}TyC}}$31QGZF_iN=IbOp zZpN9t;k+I=<4MC4W?nu7&d>L;d=<{?Z_rPooA$56d3|P8ETaGsCHdfo&dHu<(6oabG$d;wlF<=+OcnEZSfeB2zz_re=y zy)g(+n|wPP&ih6&o(t&haKRjY(JzJb{9F1}@VZ$id>KA!w)-tOub;zu#^DLm4nKmo z%(y)X@5A3ySkHs-agz@-aK7Kj^3T9|9TK|ixE%MC+3xmmUeAr?lW>0ioxV4mpBJX5 z;X`KJI0POy>%%I%X^zWD@IEuH*5NI)u3H1==XAm!H+{9>anoNehIdR}b>O3B-oJ)! z#?Mi@>0dX)TV@>S!V@O1?uPf9cAH{(v)xDGyw5`T|eN7vaNZ-4YLPL@D{u zHtn-BoS*w({V90O9@lB%{uu`IInZU@;`^i%y{?^oS$1~ z`N!e>+!p;=cwpLd!M4$H=Y3>Yeg`yf%AHpY=>*$4HM@mylM9LW;j1T%X+%-x>@Jk4Iei1-4wiH^6*hO z&wpe6vv7VMpZ)?oX4V^9hqnZlae&vUWBHxvW}M#xUNif90Gxk6Vm&2z%Cy^&a9)p> z<&TF?nfl)gkDGC95MDRO@oYHH<7NF9upZNoE`>ME_<0q)W%B3C@KNL6f_F^6_#T}1 z@nJkahSyC${W&~o;&}+(GV|07ylKYCzrgwVEN=HDc%Rwsc8jBYNSgRx53iZm(Qk&w zO+5#(9&_B^3LiGFcaDK~OrF07-fz~c%iwL3Cm(>P%{=l!)?;3ee+=F*@q7k8WcKTe z@TA%9_3*lRef=GH+w}L_;XF^3$K|K+G1Jb!f~U>vj^Dv~eiZ9@3O;Pc+ZW(%v(DT) zyrKA}^?(_FUJD;G{w6r@%gOET2Tz*q7T_(D4{w9VO#8nJ&ijF~{`bObracGY6*E4Z z4X>MgxBwoQ@$gc3(#$(o!FgRB#`9%3ug^pO7QAha*Z1IY)BZn(S4@BZIXq_i<3sS4 z$&<(7y#6!ec@{ot>RAxp(q4{x+Klr%!1*}^*0U?TYT9QX_=L%m41Cz^@1bzskCpWw z3vZa?ax&e_`vY)ZPoDLh1s^i+vz-SIOgn!ZK4G?d1w3Z*?Hc%;X@^mG!qk5=e8}WO zm-U$U2Yw2#m~rM;@KJNTeh2TG@#-n~nCW*fz+)zVwtj7t4`XJ1yA!-?;@ksXGyUrT zc+=Ehg7ds<9E*DlUUx=Ux$yFb>JG7H^;Zd`ptUa zVtBuavjeZ0b>lVgrtwjDV2@Htby3m-T0*WK_D6X&ns4Kx1y4jwb>z^C8|GoCyT z@0#&#tDP_}nDKB&I6rsK|ZF!mO8m1fMnWPr@4}PacHF z%=kRRdQ3lh23|Muyaewv^Tl>MNBK}U>+{#chfE&68P4nc@c14CA2I#nt?;zjuVdg< zGw;6#K56o88N6Zo%Lm|rDgQxupUKaU!TU{negIj^E!1be?L4h`Su8$pO0YqC*f%`zWo(GZt`u**G0#j*N1043A*WbZ-5V* zdGjssDKl>8;BC_%4~I{fynP2eX2yq8=q8>4_>8INEO^J{NekX@=8KErygmurp#u-h zJa`S9*C%KB>*3?3eZE6C$Ne^V(u^~A!P92_b02)xw zx6S(hZ}7A^j@!IG%7>cSuh+p_W?tJ9UNzfY0_XYa>@Q__!ptvkhx0loEdOqJ()9QD z!&|0bucn*+at?gl#Q#xv)8x;mS>DX2pNA)ne+@om^5kFO71Q7U4W2UN#(%K9X`f%h z`S}aB&u`%|bA0~GkDGB|5S}o3ayER_FGy~TpECRVD16-H$t*l=^5F$|%JlcGcZ>32*o=oe z!Rw}f?Ez1ldJcd$&HPe=kC{9_63+Yla(_>NSIv0)K6uB}a|YeC&j$F2@sGf3X1_iO z4@`gg9DK?gudl%4X1@LwywBACJ@}}3-SlJlkQq;Y4)2WM-Z10y0KCtP&u78A zCZ6-)H8VbZ9G)=ydj-5>%6|zyYWmkV;8l|k-+|Z6I`DS*oH>p^h4-6&{VVvW>8HPg z*Uk9+6ue{F?FIOdS-)-l#wZ^WCjWPWx6Ha_4|vV2uMU8xOgtrc)AWlY;ge>4ay;uX zjzG(L-AL^#RzXskmdG!W(pE4iy-J9Vp)1F;;%9Otw-ZA}s3O-?u_V?THX>+{3&+_K@{shkZ{%}0`1-#GnuZQ3rGtWLwH|3v&w@tn+NJYne z!t}2l;3+fy?+Wjl7s6|%{ADa};<*~$FysGq@IJE+{1&`r%6|`DF~{Y{@L3bj&*4>bTpnWmCZ8XN z_nCHn7S8LIFi#fj63t(2XC77@D^{5j(gR#e*)e%`TRzfH~HKL zZ<&0^!|P^UQK6f7-U**G-Vg5>UkPuS} zo~Pjz6VD;=QFC0X@R-@Jli(?H-0Scu6aN}`VAcsAgxAcx@G*G5@z20{9Vd=^UxZJa z_2>1W%XNyn7+1s7`!{{vjPh+$f0y-}apP|Il*ykd_^fHSN8t&x-k61VOwThp=rik+o!~LEUfKgbXW~2no-oI~L^pYOB)ntt=LC4t^so29n`XbxfX|ry+5qn} z{r4mAz|{XqmN)zRIe5j?^A-4*+20%CBj)(t%6iQBe7u;WK7jeFEMz z^Wbyvl!R8`rX&yGiE*=gU8MB{lO;x^GkE<7GT7P zzTJ!RbEZ8Xf;Y@~_&9vZjC;?*hm9|IOLW{DCO>z8S4}(b3a^>`-v>Tr@-qXUHRJiA z@VLqUW9cRzPKFPg_1*w{%(TN<@F{a#&VzT&ar`)Z#*BMcz#AsdzXY!t{|3vOasIn3 zZ}RYmbd!fagAbej@@x3C$%o&=$4xu`89rj-`5QcD+JBqAC?7^loUen=nmG4_&za-0 z1l};?c^N)q^8fAdN#pN^$4xz_u^!`Rz++~9To3Oz{qaIL?fe8lAc zb?{*`58eoGn0C7r-ZJyoo$$2D!+YT!(|;d^SIquC4zHW>{8{*fiGRU<82?Rw-vOR9 z?Yt{IZpO)d;Nxa}n1T13_z$6*d8!H@HSKc}>o@sUhgZxvum;{|^0`Gf$K_&p$FxHS zK4tdz8hFf%d)LF`CeE8!zsalH;C-h4yWmr%J@1FtOq`Fvr%m}M;Ym~ed3f8bAGX>* z%7+P)S3APT%yHZuK4*M?c*nGV5k76&{|I>1)blQuH+k}2c+%v_Abi~P$Fo`9)PDhd z%8aX*!sDhtUIlNN`Q^*-j)~`6@EJ1>e-GX^$Lq)NAv0e696oHu?T6rFrhOi#n>e3^ zSIv04;DG43SIu$X0iHDN^Llv9yf5@-c*5-0LGY#-m);7mntpT)eAvvh?}1lLe^~}^ zn0h_{pD^o+55nVS{qr$+%;d>u;QglkzXb6h?GPnqNXNqE(?=jZ5VyI+A%ns)v+ykg?{KD=x8 z>nHHK$>(3d=S=_l4SdRsGk<_jnEd=7)??=Pg-fF2K5l$5ylQ+m_>k$>`@n1Fby)_U zHsj=>@ENne$HHS~zfOh+ru+cBZt~|Wc*h*C^H`6`+mFNh&G>T#JZbvNm*5Fg{u}U7 z(+=N-cTE2O5I$-0;b-tZ(+)>^Bd~bwTO?%!7Z<#pngb$g1cQ3qS)|n5($4wqS0q-}*y1wN{T(kl^&IJxKf&>T zaQt+~V=LBgTt0Zl>b1)@tXsMwws$MG_sZDdnpMkItzI*@?3}f$H*Orq%)g~WODh z?{PUDTefUq<6vv`#$}CxwJX^fsI=r8hq} zr-CTum6ue^L2tiuVL+RAJ=1$!P-TK#uY6DnHkZ%#_A68FgBS9!MB3no|SZAd*V_euw)%{!6rX)f2>cu}=!CetgE$@D@g z6%OT!Yt-`&5==04SLn* za=q$v>0a@YdTO!v)NHR!1GV3QdS)@N^0Uy}Qc>kquGHI7F{2*qM$7af3rfB17IM8h z%f;T~Ou6^Cs2Z)P8a%6xb2jM3Syb_4RkCK&y#rTP`(DoVj(=WxQ10zZMzv2S=y_hZ zexU2`?Qc=#V5ZP>6>?VfyK=r)q@bFuobEMACasz<-3!00hcVR*1vSi+dexMRnb@+U z-h2Gp-gWGeyk?R_#@` zcU;RVEi)>ByzV|~L@TJ_x}b)!tm^PZ)!-#{kTdySeq_{k3*}x8WsAK=&Z&_((A`1h zR#{C$Sv4MK)zqVVj2cDCrQW6rYP8R&HqPkH=G3uLqfVfXf1pw@pYAntM(s*T9$TRvA-Nb(U0{G7^QT3;+DqmDnRxiqon!K{=KSd1F@sbL&q=xXUKDcUZ%&YM>P#rf=Ntjd5EvfOYq;^rYh?)p8YNX7m^-Ni% zmmUj(URLMzdQf%5yvmlMs=lbQR88!8l|-t~hGxO9gIN!P=h)X!4x)YGBL{zJa#kxg)X%^j^rEqggpeS( zc!RK!sRL>UnF^x72JsC~gOeop9KT#{x<50Bb>+xr^=d4C(5vLT8_X6x zY@8wSveZegb)?w@la{2JlGaWlYmjxCGD~A4b_CuS21BMSQe;U4^<3@pk>kqvRY7jK+JTX}!UsIXFajm^U zy$LphXct5s?1WPUWs#!-c1)@*jFH|H9EP8pSbP<}+4VN2IN-pdsRau+T%yFoR}X$F z+lT-ggWO2sLMjVI*GCwYO{a@nE(#6+J7lgy^$Sfbgl#cfo6!wKWg&P)qZ;Ug`V;V* z^fOVX!>mupH(~rHTn}m(q@@P(1uX`34$gb@34}KA^htUv1q95CX(;Ylxag!`3Gojm zGdTNFK?rz=L!z`3|7Zv~ja@{x>0Tk61c=Fy4d!Do69sHV^ea?m6XiDdYSFe72oAlo#hC5$}yM!=FyraBzGNxcKJ9UQmO^-z)h?(?#m z%w?hz4UZB63;++Ze0y>w%ztywg|tt$p5*??^@oh#>Jw-d*AK`OY&whcUP*CslHt^l zt~b;?Q2g-J;3V6s4kqsV2!Pr+2>4P<4k;NDDevoZ? zIjN=yzuOH1I2MpKhe9!V5ySI0b#2~{EpSh?JUHvYmNp}`xqcJUCWWCxML7!$7Bad( zej)LjygRU>$>)WJ9Wq;!O^c%!bX{y^1uKdfFOSIe6IBY7i{*}7vU!g%A?swo7AGm@ zlzE(3|HST_0-C-xG#d4!-<(+NtT|Qlc>&-6z#vT| z>p;@}Nt+YpYUntzyr72dbFW~3Ao#&E3eRZzdCYG#tL^~)_tzEA*4h|J5i19eOk{j; z>xFhNULkEMgvbPgmymvtUlv_xcyJhoq~D2w9ir!APoCts!yqk&^RSg1LkOQQpgeSH zQ}dv<;<<@tZ(3D6s|;6MKUpmTb~PC@VB?_|hkzIOVqoeE3>VBi%-(U{z`5z^Mwps9 zdF-UjDOASp`_SBO-@e{HfBE#~+tcGSR|7u|BG^XUH$Jj?7*f-~6AWnSfzWdUNzkrC zOkdb@V|`5=AGCLo$BPzCz6-KV`bdI962Y6>Crf1U*7R`134@bPBS+US)=-HFGdB@) z(~*H<6z3@FHDwUG2Ky|!kasb^{rdjHo7eAeAKtzD?d`|g$JcM(zr8)PgF!vy`~@tF zBRAqT2^rJH3K$Q#B;+25$YM|@WGxtXu#iBEnk3TLRnWeo^##!n>^r27Adv=m2k~ui z&7hu*fF5c{0~|HLP~-%~TwF0xuEk*subnRrdr`6BR#40$t$@K{0ykgX1ck-<4!u2` z1S)KvG?{>f-fUnkXi==M6MvgzBs2y`4hhbJc)(yn>Puk}#ODcJrY8V6i#KQp4RMWKPPTLPaC4*G`3nO*Z%j%mlzB4jl-a zFmS-4R%kg%L$5>u3yKsrH*FB;47!p~s+sr(okcvG)I3qOiFySj*(A}y)D(W1bZGE- z`}UBrDX{HJIouqRO$D6JM8&L4v&F7o*ZeNh1LIW9Zn2~mZ%{53*={>JOgHuzRzkYd|ZjhMf z;4Q#mr&=W1e9_OV=j*-z-F|<1x;=jVe7oIK=BK|N?tl6I_2J7Oe?Q*;`{PGX-yi<` e{_hX}f8o#7iOcR^`FW?u&kx@pUj6vrtA7AIE(MtY literal 0 HcmV?d00001 diff --git a/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.py b/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.py new file mode 100755 index 000000000..e71b5cbbd --- /dev/null +++ b/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Build relocation packer unit test data. + +Uses a built relocation packer to generate 'golden' reference test data +files for elf_file_unittests.cc. +""" + +import optparse +import os +import shutil +import subprocess +import sys +import tempfile + +def PackArmLibraryRelocations(android_pack_relocations, + android_objcopy, + added_section, + input_path, + output_path): + # Copy and add a 'NULL' .android.rel.dyn section for the packing tool. + with tempfile.NamedTemporaryFile() as stream: + stream.write('NULL') + stream.flush() + objcopy_command = [android_objcopy, + '--add-section', '%s=%s' % (added_section, stream.name), + input_path, output_path] + subprocess.check_call(objcopy_command) + + # Pack relocations. + pack_command = [android_pack_relocations, output_path] + subprocess.check_call(pack_command) + + +def UnpackArmLibraryRelocations(android_pack_relocations, + input_path, + output_path): + shutil.copy(input_path, output_path) + + # Unpack relocations. We leave the .android.rel.dyn or .android.rela.dyn + # in place. + unpack_command = [android_pack_relocations, '-u', output_path] + subprocess.check_call(unpack_command) + + +def main(): + parser = optparse.OptionParser() + + parser.add_option('--android-pack-relocations', + help='Path to the ARM relocations packer binary') + parser.add_option('--android-objcopy', + help='Path to the toolchain\'s objcopy binary') + parser.add_option('--added-section', + choices=['.android.rel.dyn', '.android.rela.dyn'], + help='Section to add, one of ".android.rel.dyn" or ".android.rela.dyn"') + parser.add_option('--test-file', + help='Path to the input test file, an unpacked ARM .so') + parser.add_option('--unpacked-output', + help='Path to the output file for reference unpacked data') + parser.add_option('--packed-output', + help='Path to the output file for reference packed data') + + options, _ = parser.parse_args() + + for output in [options.unpacked_output, options.packed_output]: + directory = os.path.dirname(output) + if not os.path.exists(directory): + os.makedirs(directory) + + PackArmLibraryRelocations(options.android_pack_relocations, + options.android_objcopy, + options.added_section, + options.test_file, + options.packed_output) + + UnpackArmLibraryRelocations(options.android_pack_relocations, + options.packed_output, + options.unpacked_output) + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.sh b/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.sh new file mode 100755 index 000000000..f90a2f658 --- /dev/null +++ b/tools/relocation_packer/test_data/generate_elf_file_unittest_relocs.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Generates elf_file_unittest_relocs_arm{32,64}{,_packed}.so test data files +# from elf_file_unittest_relocs.cc. Run once to create these test data +# files; the files are checked into the source tree. +# +# To use: +# ./generate_elf_file_unittest_relocs.sh +# git add elf_file_unittest_relocs_arm{32,64}{,_packed}.so + +function main() { + local '-r' test_data_directory="$(pwd)" + cd '../../..' + + source tools/cr/cr-bash-helpers.sh + local arch + for arch in 'arm32' 'arm64'; do + cr 'init' '--platform=android' '--type=Debug' '--architecture='"${arch}" + cr 'build' 'relocation_packer_unittests_test_data' + done + + local '-r' packer='out_android/Debug/obj/tools/relocation_packer' + local '-r' gen="${packer}/relocation_packer_unittests_test_data.gen" + + cp "${gen}/elf_file_unittest_relocs_arm"{32,64}{,_packed}'.so' \ + "${test_data_directory}" + + return 0 +} + +main From f8ff6b103bde3433d6f7dbf762fc7bf657d7de5f Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 27 Jan 2015 19:32:56 -0800 Subject: [PATCH 165/194] Generalize compression tool 1. One binary for all architectures 2. Generalize (and slightly improve) compression 2.1 works on all relocation types (rela?.dyn section only so far) 2.2 Uses same format to encode ElfW(Rel) as well as ElfW(Rela) tables Bug: 18051137 Change-Id: I66c95d9076954ca115816fc577d0f5ef274e5e72 --- tools/Android.mk | 19 + tools/relocation_packer/Android.mk | 96 ++ tools/relocation_packer/BUILD.gn | 148 --- tools/relocation_packer/config.gni | 21 - tools/relocation_packer/relocation_packer.gyp | 161 --- tools/relocation_packer/src/debug_unittest.cc | 2 +- tools/relocation_packer/src/delta_encoder.cc | 321 ++++- tools/relocation_packer/src/delta_encoder.h | 136 +- .../src/delta_encoder_unittest.cc | 231 ++-- tools/relocation_packer/src/elf_file.cc | 1145 ++++++----------- tools/relocation_packer/src/elf_file.h | 33 +- .../src/elf_file_unittest.cc | 134 +- tools/relocation_packer/src/elf_traits.h | 63 +- tools/relocation_packer/src/leb128.cc | 52 +- tools/relocation_packer/src/leb128.h | 12 +- .../relocation_packer/src/leb128_unittest.cc | 32 +- tools/relocation_packer/src/main.cc | 102 +- tools/relocation_packer/src/packer.cc | 142 +- tools/relocation_packer/src/packer.h | 24 +- .../relocation_packer/src/packer_unittest.cc | 452 ++++--- .../src/run_all_unittests.cc | 10 - .../src/run_length_encoder.cc | 144 --- .../src/run_length_encoder_unittest.cc | 124 -- tools/relocation_packer/src/sleb128.cc | 72 +- tools/relocation_packer/src/sleb128.h | 12 +- .../relocation_packer/src/sleb128_unittest.cc | 58 +- .../elf_file_unittest_relocs_arm32_packed.so | Bin 89126 -> 89114 bytes .../elf_file_unittest_relocs_arm64_packed.so | Bin 123855 -> 113651 bytes 28 files changed, 1627 insertions(+), 2119 deletions(-) create mode 100644 tools/Android.mk create mode 100644 tools/relocation_packer/Android.mk delete mode 100644 tools/relocation_packer/BUILD.gn delete mode 100644 tools/relocation_packer/config.gni delete mode 100644 tools/relocation_packer/relocation_packer.gyp delete mode 100644 tools/relocation_packer/src/run_all_unittests.cc delete mode 100644 tools/relocation_packer/src/run_length_encoder.cc delete mode 100644 tools/relocation_packer/src/run_length_encoder_unittest.cc diff --git a/tools/Android.mk b/tools/Android.mk new file mode 100644 index 000000000..4dd66fe07 --- /dev/null +++ b/tools/Android.mk @@ -0,0 +1,19 @@ +# +# Copyright (C) 2015 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) + +include $(call all-subdir-makefiles) diff --git a/tools/relocation_packer/Android.mk b/tools/relocation_packer/Android.mk new file mode 100644 index 000000000..99a39c02b --- /dev/null +++ b/tools/relocation_packer/Android.mk @@ -0,0 +1,96 @@ +# +# Copyright (C) 2015 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +common_cppflags := -Wall -Wextra -Wunused -Werror -Wold-style-cast + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_CPP_EXTENSION := .cc + +LOCAL_SRC_FILES := \ + src/debug.cc \ + src/delta_encoder.cc \ + src/elf_file.cc \ + src/leb128.cc \ + src/packer.cc \ + src/sleb128.cc \ + +LOCAL_STATIC_LIBRARIES := libelf +LOCAL_C_INCLUDES := external/elfutils/src/libelf +LOCAL_MODULE := lib_relocation_packer + +LOCAL_CPPFLAGS := $(common_cppflags) + +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + +include $(BUILD_HOST_STATIC_LIBRARY) + +include $(CLEAR_VARS) + +LOCAL_CPP_EXTENSION := .cc + +LOCAL_SRC_FILES := src/main.cc +LOCAL_STATIC_LIBRARIES := lib_relocation_packer libelf +LOCAL_C_INCLUDES := external/elfutils/src/libelf libnativehelper/include + +LOCAL_MODULE := relocation_packer + +LOCAL_CPPFLAGS := $(common_cppflags) + +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + +include $(BUILD_HOST_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_CPP_EXTENSION := .cc + +LOCAL_SRC_FILES := \ + src/debug_unittest.cc \ + src/delta_encoder_unittest.cc \ + src/elf_file_unittest.cc \ + src/leb128_unittest.cc \ + src/sleb128_unittest.cc \ + src/packer_unittest.cc \ + +LOCAL_STATIC_LIBRARIES := lib_relocation_packer libelf +LOCAL_C_INCLUDES := external/elfutils/src/libelf + +LOCAL_CPPFLAGS := $(common_cppflags) + +LOCAL_MODULE := relocation_packer_unit_tests +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + +include $(BUILD_HOST_NATIVE_TEST) + +# $(1) library name +define copy-test-library +include $(CLEAR_VARS) +LOCAL_IS_HOST_MODULE := true +LOCAL_MODULE := $(1) +LOCAL_MODULE_CLASS := SHARED_LIBRARIES +LOCAL_MODULE_PATH := $(HOST_OUT_EXECUTABLES) +LOCAL_STRIP_MODULE := false +LOCAL_SRC_FILES := test_data/$(1) +include $(BUILD_PREBUILT) +endef + +$(eval $(call copy-test-library,elf_file_unittest_relocs_arm32.so)) +$(eval $(call copy-test-library,elf_file_unittest_relocs_arm32_packed.so)) +$(eval $(call copy-test-library,elf_file_unittest_relocs_arm64.so)) +$(eval $(call copy-test-library,elf_file_unittest_relocs_arm64_packed.so)) diff --git a/tools/relocation_packer/BUILD.gn b/tools/relocation_packer/BUILD.gn deleted file mode 100644 index 0b29c9162..000000000 --- a/tools/relocation_packer/BUILD.gn +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("config.gni") -import("//testing/test.gni") - -assert(relocation_packing_supported) - -if (target_arch == "arm") { - target_define = "TARGET_ARM" -} else if (target_arch == "arm64") { - target_define = "TARGET_ARM64" -} - -if (current_toolchain == host_toolchain) { - # GYP: //tools/relocation_packer/relocation_packer.gyp:lib_relocation_packer - source_set("lib_relocation_packer") { - defines = [ target_define ] - deps = [ - "//third_party/elfutils:libelf", - ] - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] - sources = [ - "src/debug.cc", - "src/delta_encoder.cc", - "src/elf_file.cc", - "src/leb128.cc", - "src/packer.cc", - "src/sleb128.cc", - "src/run_length_encoder.cc", - ] - } - - # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer - executable("relocation_packer") { - defines = [ target_define ] - deps = [ - ":lib_relocation_packer", - "//third_party/elfutils:libelf", - ] - sources = [ - "src/main.cc", - ] - } - - # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests - test("relocation_packer_unittests") { - sources = [ - "src/debug_unittest.cc", - "src/delta_encoder_unittest.cc", - "src/elf_file_unittest.cc", - "src/leb128_unittest.cc", - "src/packer_unittest.cc", - "src/sleb128_unittest.cc", - "src/run_length_encoder_unittest.cc", - "src/run_all_unittests.cc", - ] - rebased_test_data = rebase_path("test_data", root_build_dir) - data = [ - "test_data/elf_file_unittest_relocs_arm32.so", - "test_data/elf_file_unittest_relocs_arm32_packed.so", - "test_data/elf_file_unittest_relocs_arm64.so", - "test_data/elf_file_unittest_relocs_arm64_packed.so", - ] - defines = [ - target_define, - "INTERMEDIATE_DIR=\"$rebased_test_data\"", - ] - include_dirs = [ "//" ] - deps = [ - ":lib_relocation_packer", - ":relocation_packer_test_data", - "//testing:gtest", - ] - } -} - -if (current_toolchain == default_toolchain && - (target_arch == "arm" || target_arch == "arm64")) { - # Targets to build test data. These participate only in building test - # data for use with elf_file_unittest.cc, and are not part of the main - # relocation packer build. Unit test data files are checked in to the - # source tree as 'golden' data, and are not generated 'on the fly' by - # the build. - # - # See test_data/generate_elf_file_unittest_relocs.sh for instructions. - - # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_test_data - shared_library("relocation_packer_test_data") { - cflags = [ - "-O0", - "-g0", - ] - sources = [ - "test_data/elf_file_unittest_relocs.cc", - ] - } - - # GYP: //tools/relocation_packer/relocation_packer.gyp:relocation_packer_unittests_test_data - action("relocation_packer_unittests_test_data") { - script = "test_data/generate_elf_file_unittest_relocs.py" - test_file = "$root_build_dir/librelocation_packer_test_data.so" - if (target_arch == "arm") { - added_section = ".android.rel.dyn" - packed_output = "elf_file_unittest_relocs_arm32_packed.so" - unpacked_output = "elf_file_unittest_relocs_arm32.so" - } else if (target_arch == "arm64") { - added_section = ".android.rela.dyn" - packed_output = "elf_file_unittest_relocs_arm64_packed.so" - unpacked_output = "elf_file_unittest_relocs_arm64.so" - } else { - assert(false, "Unsupported target arch for relocation packer") - } - - packed_output = "$root_build_dir/$packed_output" - unpacked_output = "$root_build_dir/$unpacked_output" - - inputs = [ - test_file, - ] - - deps = [ - ":relocation_packer_test_data", - ":relocation_packer($host_toolchain)", - ] - - outputs = [ - packed_output, - unpacked_output, - ] - - args = [ - "--android-pack-relocations", - rebase_path(relocation_packer_exe, root_build_dir), - "--android-objcopy", - rebase_path(android_objcopy, root_build_dir), - "--added-section=$added_section", - "--test-file", - rebase_path(test_file, root_build_dir), - "--packed-output", - rebase_path(packed_output, root_build_dir), - "--unpacked-output", - rebase_path(unpacked_output, root_build_dir), - ] - } -} diff --git a/tools/relocation_packer/config.gni b/tools/relocation_packer/config.gni deleted file mode 100644 index 90e397933..000000000 --- a/tools/relocation_packer/config.gni +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -relocation_packing_supported = target_arch == "arm" || target_arch == "arm64" - -if (relocation_packing_supported) { - relocation_packer_target = "//tools/relocation_packer($host_toolchain)" - relocation_packer_dir = - get_label_info("$relocation_packer_target", "root_out_dir") - relocation_packer_exe = "${relocation_packer_dir}/relocation_packer" - - if (target_arch == "arm") { - relocations_have_addends = 0 - } else if (target_arch == "arm64") { - relocations_have_addends = 1 - } -} else { - relocations_have_addends = 0 - relocation_packer_exe = "" -} diff --git a/tools/relocation_packer/relocation_packer.gyp b/tools/relocation_packer/relocation_packer.gyp deleted file mode 100644 index 1e9c1b95b..000000000 --- a/tools/relocation_packer/relocation_packer.gyp +++ /dev/null @@ -1,161 +0,0 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -{ - 'variables': { - 'target_define%': 'TARGET_UNSUPPORTED', - 'conditions': [ - [ 'target_arch == "arm"', { - 'target_define': 'TARGET_ARM', - }], - [ 'target_arch == "arm64"', { - 'target_define': 'TARGET_ARM64', - }], - ], - }, - 'targets': [ - { - # GN: //tools/relocation_packer:lib_relocation_packer - 'target_name': 'lib_relocation_packer', - 'toolsets': ['host'], - 'type': 'static_library', - 'defines': [ - '<(target_define)', - ], - 'dependencies': [ - '../../third_party/elfutils/elfutils.gyp:libelf', - ], - 'sources': [ - 'src/debug.cc', - 'src/delta_encoder.cc', - 'src/elf_file.cc', - 'src/leb128.cc', - 'src/packer.cc', - 'src/sleb128.cc', - 'src/run_length_encoder.cc', - ], - }, - { - # GN: //tools/relocation_packer:relocation_packer - 'target_name': 'relocation_packer', - 'toolsets': ['host'], - 'type': 'executable', - 'defines': [ - '<(target_define)', - ], - 'dependencies': [ - '../../third_party/elfutils/elfutils.gyp:libelf', - 'lib_relocation_packer', - ], - 'sources': [ - 'src/main.cc', - ], - }, - { - # GN: //tools/relocation_packer:relocation_packer_unittests - 'target_name': 'relocation_packer_unittests', - 'toolsets': ['host'], - 'type': 'executable', - 'defines': [ - '<(target_define)', - ], - 'cflags': [ - '-DINTERMEDIATE_DIR="<(INTERMEDIATE_DIR)"', - ], - 'dependencies': [ - '../../testing/gtest.gyp:gtest', - 'lib_relocation_packer', - ], - 'include_dirs': [ - '../..', - ], - 'sources': [ - 'src/debug_unittest.cc', - 'src/delta_encoder_unittest.cc', - 'src/elf_file_unittest.cc', - 'src/leb128_unittest.cc', - 'src/packer_unittest.cc', - 'src/sleb128_unittest.cc', - 'src/run_length_encoder_unittest.cc', - 'src/run_all_unittests.cc', - ], - 'copies': [ - { - 'destination': '<(INTERMEDIATE_DIR)', - 'files': [ - 'test_data/elf_file_unittest_relocs_arm32.so', - 'test_data/elf_file_unittest_relocs_arm32_packed.so', - 'test_data/elf_file_unittest_relocs_arm64.so', - 'test_data/elf_file_unittest_relocs_arm64_packed.so', - ], - }, - ], - }, - - # Targets to build test data. These participate only in building test - # data for use with elf_file_unittest.cc, and are not part of the main - # relocation packer build. Unit test data files are checked in to the - # source tree as 'golden' data, and are not generated 'on the fly' by - # the build. - # - # See test_data/generate_elf_file_unittest_relocs.sh for instructions. - { - # GN: //tools/relocation_packer:relocation_packer_test_data - 'target_name': 'relocation_packer_test_data', - 'toolsets': ['target'], - 'type': 'shared_library', - 'cflags': [ - '-O0', - '-g0', - ], - 'sources': [ - 'test_data/elf_file_unittest_relocs.cc', - ], - }, - { - # GN: //tools/relocation_packer:relocation_packer_unittests_test_data - 'target_name': 'relocation_packer_unittests_test_data', - 'toolsets': ['target'], - 'type': 'none', - 'actions': [ - { - 'variables': { - 'test_file': '<(SHARED_LIB_DIR)/librelocation_packer_test_data.so', - 'conditions': [ - [ 'target_arch == "arm"', { - 'added_section': '.android.rel.dyn', - 'unpacked_output': 'elf_file_unittest_relocs_arm32.so', - 'packed_output': 'elf_file_unittest_relocs_arm32_packed.so', - }], - [ 'target_arch == "arm64"', { - 'added_section': '.android.rela.dyn', - 'unpacked_output': 'elf_file_unittest_relocs_arm64.so', - 'packed_output': 'elf_file_unittest_relocs_arm64_packed.so', - }], - ], - }, - 'action_name': 'generate_relocation_packer_test_data', - 'inputs': [ - 'test_data/generate_elf_file_unittest_relocs.py', - '<(PRODUCT_DIR)/relocation_packer', - '<(test_file)', - ], - 'outputs': [ - '<(INTERMEDIATE_DIR)/<(unpacked_output)', - '<(INTERMEDIATE_DIR)/<(packed_output)', - ], - 'action': [ - 'python', 'test_data/generate_elf_file_unittest_relocs.py', - '--android-pack-relocations=<(PRODUCT_DIR)/relocation_packer', - '--android-objcopy=<(android_objcopy)', - '--added-section=<(added_section)', - '--test-file=<(test_file)', - '--unpacked-output=<(INTERMEDIATE_DIR)/<(unpacked_output)', - '--packed-output=<(INTERMEDIATE_DIR)/<(packed_output)', - ], - }, - ], - }, - ], -} diff --git a/tools/relocation_packer/src/debug_unittest.cc b/tools/relocation_packer/src/debug_unittest.cc index 1b65cd16e..b31e2ae7e 100644 --- a/tools/relocation_packer/src/debug_unittest.cc +++ b/tools/relocation_packer/src/debug_unittest.cc @@ -5,7 +5,7 @@ #include "debug.h" #include -#include "testing/gtest/include/gtest/gtest.h" +#include "gtest/gtest.h" namespace relocation_packer { diff --git a/tools/relocation_packer/src/delta_encoder.cc b/tools/relocation_packer/src/delta_encoder.cc index 69cc91a51..8349d7c64 100644 --- a/tools/relocation_packer/src/delta_encoder.cc +++ b/tools/relocation_packer/src/delta_encoder.cc @@ -7,66 +7,301 @@ #include #include "debug.h" -#include "elf_traits.h" + +static constexpr uint32_t RELOCATION_GROUPED_BY_INFO_FLAG = 1; +static constexpr uint32_t RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG = 2; +static constexpr uint32_t RELOCATION_GROUPED_BY_ADDEND_FLAG = 4; +static constexpr uint32_t RELOCATION_GROUP_HAS_ADDEND_FLAG = 8; + +static bool is_relocation_grouped_by_info(uint64_t flags) { + return (flags & RELOCATION_GROUPED_BY_INFO_FLAG) != 0; +} + +static bool is_relocation_grouped_by_offset_delta(uint64_t flags) { + return (flags & RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG) != 0; +} + +static bool is_relocation_grouped_by_addend(uint64_t flags) { + return (flags & RELOCATION_GROUPED_BY_ADDEND_FLAG) != 0; +} + +static bool is_relocation_group_has_addend(uint64_t flags) { + return (flags & RELOCATION_GROUP_HAS_ADDEND_FLAG) != 0; +} namespace relocation_packer { -// Encode relative relocations with addends into a delta encoded (packed) -// representation. Represented as simple r_offset and r_addend delta pairs, -// with an implicit neutral element at the start. -void RelocationDeltaCodec::Encode(const std::vector& relocations, - std::vector* packed) { - // One relocation is sufficient for delta encoding. - if (relocations.size() < 1) +// Encode relocations into a delta encoded (packed) representation. +template +void RelocationDeltaCodec::Encode(const std::vector& relocations, + std::vector* packed) { + if (relocations.size() == 0) return; - // Start with the element count, then append the delta pairs. - packed->push_back(relocations.size()); + // Start with the relocation count, then append groups + // TODO(dimitry): we might want to move it to DT_ANDROID_RELCOUNT section + packed->push_back(static_cast(relocations.size())); - ELF::Addr offset = 0; - ELF::Sxword addend = 0; + // lets write starting offset (offset of the first reloc - first delta) + ElfAddr start_offset = relocations.size() > 1 ? + relocations[0].r_offset - (relocations[1].r_offset - relocations[0].r_offset) : + relocations[0].r_offset; - for (size_t i = 0; i < relocations.size(); ++i) { - const ELF::Rela* relocation = &relocations[i]; - CHECK(ELF_R_TYPE(relocation->r_info) == ELF::kRelativeRelocationCode); + packed->push_back(start_offset); - packed->push_back(relocation->r_offset - offset); - offset = relocation->r_offset; - packed->push_back(relocation->r_addend - addend); - addend = relocation->r_addend; + // this one is used to calculate delta + ElfAddr previous_addend = 0; + ElfAddr previous_offset = start_offset; + + for (size_t group_start = 0; group_start < relocations.size(); ) { + ElfAddr group_flags = 0; + ElfAddr group_offset_delta = 0; + ElfAddr group_addend = 0; + ElfAddr group_info = 0; + + ElfAddr group_size = 0; + + DetectGroup(relocations, group_start, previous_offset, &group_size, &group_flags, + &group_offset_delta, &group_info, &group_addend); + + // write the group header + packed->push_back(group_size); + packed->push_back(group_flags); + + if (is_relocation_grouped_by_offset_delta(group_flags)) { + packed->push_back(group_offset_delta); + } + + if (is_relocation_grouped_by_info(group_flags)) { + packed->push_back(group_info); + } + + if (is_relocation_group_has_addend(group_flags) && + is_relocation_grouped_by_addend(group_flags)) { + packed->push_back(group_addend - previous_addend); + previous_addend = group_addend; + } + + for (size_t i = 0; i < static_cast(group_size); ++i) { + CHECK((group_start + i) < relocations.size()); + const ElfRela* relocation = &relocations[group_start + i]; + + if (!is_relocation_grouped_by_offset_delta(group_flags)) { + packed->push_back(relocation->r_offset - previous_offset); + } + previous_offset = relocation->r_offset; + + if (!is_relocation_grouped_by_info(group_flags)) { + packed->push_back(relocation->r_info); + } + + if (is_relocation_group_has_addend(group_flags) && + !is_relocation_grouped_by_addend(group_flags)) { + packed->push_back(relocation->r_addend - previous_addend); + previous_addend = relocation->r_addend; + } + } + + // If the relocation group does not have an addend - reset it to 0 + // to simplify addend computation for the group following this one. + if (!is_relocation_group_has_addend(group_flags)) { + previous_addend = 0; + } + + group_start += group_size; } } -// Decode relative relocations with addends from a delta encoded (packed) -// representation. -void RelocationDeltaCodec::Decode(const std::vector& packed, - std::vector* relocations) { - // We need at least one packed pair after the packed pair count to be - // able to unpack. - if (packed.size() < 3) +// Decode relocations from a delta encoded (packed) representation. +template +void RelocationDeltaCodec::Decode(const std::vector& packed, + std::vector* relocations) { + if (packed.size() < 5) { return; + } - // Ensure that the packed data offers enough pairs. There may be zero - // padding on it that we ignore. - CHECK(static_cast(packed[0]) <= (packed.size() - 1) >> 1); + size_t ndx = 0; + ElfAddr current_count = 0; + ElfAddr total_count = packed[ndx++]; - ELF::Addr offset = 0; - ELF::Sxword addend = 0; + ElfAddr offset = packed[ndx++]; + ElfAddr info = 0; + ElfAddr addend = 0; - // The first packed vector element is the pairs count. Start uncondensing - // pairs at the second, and finish at the end of the pairs data. - const size_t pairs_count = packed[0]; - for (size_t i = 1; i < 1 + (pairs_count << 1); i += 2) { - offset += packed[i]; - addend += packed[i + 1]; + while(current_count < total_count) { + // read group + ElfAddr group_size = packed[ndx++]; + ElfAddr group_flags = packed[ndx++]; + ElfAddr group_offset_delta = 0; - // Generate a relocation for this offset and addend pair. - ELF::Rela relocation; - relocation.r_offset = offset; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); - relocation.r_addend = addend; - relocations->push_back(relocation); + if (is_relocation_grouped_by_offset_delta(group_flags)) { + group_offset_delta = packed[ndx++]; + } + + if (is_relocation_grouped_by_info(group_flags)) { + info = packed[ndx++]; + } + + if (is_relocation_group_has_addend(group_flags) && + is_relocation_grouped_by_addend(group_flags)) { + addend += packed[ndx++]; + } + + // now read not grouped info + for (ElfAddr i = 0; ipush_back(reloc); + } + + if (!is_relocation_group_has_addend(group_flags)) { + addend = 0; + } + + current_count += group_size; } } +// This function detects a way to group reloc_one and reloc_two, sets up group_flags +// and initializes values for corresponding group_ fields. For example if relocations +// can be grouped by r_info the function will set group_info variable. +template +void RelocationDeltaCodec::DetectGroupFields(const ElfRela& reloc_one, + const ElfRela& reloc_two, + ElfAddr current_offset_delta, + ElfAddr* group_flags, + ElfAddr* group_offset_delta, + ElfAddr* group_info, + ElfAddr* group_addend) { + *group_flags = 0; + + const ElfAddr offset_delta = static_cast(reloc_two.r_offset) - + static_cast(reloc_one.r_offset); + + if (offset_delta == current_offset_delta) { + *group_flags |= RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG; + if (group_offset_delta != nullptr) { + *group_offset_delta = current_offset_delta; + } + } + + if (reloc_one.r_info == reloc_two.r_info) { + *group_flags |= RELOCATION_GROUPED_BY_INFO_FLAG; + if (group_info != nullptr) { + *group_info = reloc_one.r_info; + } + } + + if (reloc_one.r_addend != 0 || reloc_two.r_addend != 0) { + *group_flags |= RELOCATION_GROUP_HAS_ADDEND_FLAG; + if (reloc_one.r_addend == reloc_two.r_addend) { + *group_flags |= RELOCATION_GROUPED_BY_ADDEND_FLAG; + if (group_addend != nullptr) { + *group_addend = reloc_one.r_addend; + } + } + } +} + +// This function is used to detect if there is better group available +// during RelocationDeltaCodec::DetectGroup processing. +// Current implementation prefers having groups without addend (== zero addend) +// to any other groups field with the ratio 3:1. This is because addend tends +// to be more unevenly distributed than other fields. +static uint32_t group_weight(uint64_t flags) { + uint32_t weight = 0; + if (!is_relocation_group_has_addend(flags)) { + weight += 3; + } else if (is_relocation_grouped_by_addend(flags)) { + weight += 1; + } + + if (is_relocation_grouped_by_offset_delta(flags)) { + weight += 1; + } + + if (is_relocation_grouped_by_info(flags)) { + weight += 1; + } + + return weight; +} + +template +void RelocationDeltaCodec::DetectGroup(const std::vector& relocations, + size_t group_starts_with, ElfAddr previous_offset, + ElfAddr* group_size, ElfAddr* group_flags, + ElfAddr* group_offset_delta, ElfAddr* group_info, + ElfAddr* group_addend) { + CHECK(group_starts_with < relocations.size()); + CHECK(group_flags != nullptr); + + const ElfRela& reloc_one = relocations[group_starts_with++]; + if (group_starts_with == relocations.size()) { + *group_flags = reloc_one.r_addend == 0 ? 0 : RELOCATION_GROUP_HAS_ADDEND_FLAG; + *group_size = 1; + return; + } + + const ElfAddr offset_delta = reloc_one.r_offset - previous_offset; + + // detect group_flags + DetectGroupFields(reloc_one, relocations[group_starts_with], offset_delta, group_flags, + group_offset_delta, group_info, group_addend); + + if (group_starts_with + 1 == relocations.size()) { + *group_size = 2; + return; + } + + ElfAddr cnt = 1; + for (size_t i = group_starts_with; i < relocations.size() - 1; ++i) { + ElfAddr candidate_flags; + // check if next group (reloc_current; reloc_next) has better grouped_by flags + DetectGroupFields(relocations[i], relocations[i+1], offset_delta, &candidate_flags, + nullptr, nullptr, nullptr); + + if (group_weight(*group_flags) < group_weight(candidate_flags)) { + break; + } + cnt++; + + if (candidate_flags != *group_flags) { + break; + } + + if (i + 1 == relocations.size() - 1) { // last one + cnt++; + } + } + + // if as a result of checking candidates we ended up with cnt == 1 + // reset flags to the default state + if (cnt == 1) { + *group_flags = reloc_one.r_addend == 0 ? 0 : RELOCATION_GROUP_HAS_ADDEND_FLAG; + } + + *group_size = cnt; +} + +template class RelocationDeltaCodec; +template class RelocationDeltaCodec; + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/delta_encoder.h b/tools/relocation_packer/src/delta_encoder.h index 498b6d1af..46c324c49 100644 --- a/tools/relocation_packer/src/delta_encoder.h +++ b/tools/relocation_packer/src/delta_encoder.h @@ -2,50 +2,86 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Delta encode and decode relative relocations with addends. +// Delta encode and decode REL/RELA section of elf file. // -// Relative relocations are the bulk of dynamic relocations (the -// .rel.dyn or .rela.dyn sections) in libchrome..so, and the ELF -// standard representation of them is wasteful. .rel.dyn contains -// relocations without addends, .rela.dyn relocations with addends. +// The encoded data format is sequence of elements of ElfAddr type (unsigned long): // -// A relocation with an addend is 12 bytes on 32 bit platforms and 24 bytes -// on 64 bit plaforms. It is split into offset, info, and addend fields. -// Offsets strictly increase, and each is commonly a few bytes different -// from its predecessor. Addends are less well behaved. The info field is -// constant. Example, from 'readelf -x4 libchrome..so' 64 bit: +// [00] relocation_count - the total count of relocations +// [01] initial r_offset - this is initial r_offset for the +// relocation table. +// followed by group structures: +// [02] group +// ... +// [nn] group + +// the generalized format of the group is (! - always present ? - depends on group_flags): +// -------------- +// ! group_size +// ! group_flags +// ? group_r_offset_delta when RELOCATION_GROUPED_BY_OFFSET_DELTA flag is set +// ? group_r_info when RELOCATION_GROUPED_BY_INFO flag is set +// ? group_r_addend_group_delta when RELOCATION_GROUP_HAS_ADDEND and RELOCATION_GROUPED_BY_ADDEND +// flag is set // -// offset info -// 80949303 00000000 03040000 00000000 ................ -// addend offset -// fc015b00 00000000 88949303 00000000 ..[............. -// info addend -// 03040000 00000000 24025b00 00000000 ........$.[..... -// offset info -// 90949303 00000000 03040000 00000000 ................ -// addend offset -// 3c025b00 00000000 98949303 00000000 <.[............. -// info addend -// 03040000 00000000 50025b00 00000000 ........P.[..... +// The group description is followed by individual relocations. +// please note that there is a case when individual relocation +// section could be empty - that is if every field ends up grouped. // -// The offset strictly increases, but the addend is unpredictable, so run -// length encoding will not work well with this data. We can however pack -// with delta encoding. The upper four bytes of the eight byte offset and -// addend are invariably zeroes. The difference between adjacent offsets -// is almost always small, and between adjacent addends is often small. And -// info is constant and can be eliminated. +// The format for individual relocations section is: +// ? r_offset_delta - when RELOCATION_GROUPED_BY_OFFSET_DELTA is not set +// ? r_info - when RELOCATION_GROUPED_BY_INFO flag is not set +// ? r_addend_delta - RELOCATION_GROUP_HAS_ADDEND is set and RELOCATION_GROUPED_BY_ADDEND is not set // -// Delta encoding reduces the size of the data modestly, so that the first -// three relocations above can be represented as: +// For example lets pack the following relocations: // -// initial offset initial addend offset delta addend delta -// 00000000 03939480 00000000 005b01fc 00000000 00000008 00000000 00000028 -// offset delta addend delta ... -// 00000000 00000008 00000000 0000009f +// Relocation section '.rela.dyn' at offset 0xbf58 contains 939 entries: +// Offset Info Type Symbol's Value Symbol's Name + Addend +// 00000000000a2178 0000000000000403 R_AARCH64_RELATIVE 177a8 +// 00000000000a2180 0000000000000403 R_AARCH64_RELATIVE 177cc +// 00000000000a2188 0000000000000403 R_AARCH64_RELATIVE 177e0 +// 00000000000a2190 0000000000000403 R_AARCH64_RELATIVE 177f4 +// 00000000000a2198 0000000000000403 R_AARCH64_RELATIVE 17804 +// 00000000000a21a0 0000000000000403 R_AARCH64_RELATIVE 17818 +// 00000000000a21a8 0000000000000403 R_AARCH64_RELATIVE 1782c +// 00000000000a21b0 0000000000000403 R_AARCH64_RELATIVE 17840 +// 00000000000a21b8 0000000000000403 R_AARCH64_RELATIVE 17854 +// 00000000000a21c0 0000000000000403 R_AARCH64_RELATIVE 17868 +// 00000000000a21c8 0000000000000403 R_AARCH64_RELATIVE 1787c +// 00000000000a21d0 0000000000000403 R_AARCH64_RELATIVE 17890 +// 00000000000a21d8 0000000000000403 R_AARCH64_RELATIVE 178a4 +// 00000000000a21e8 0000000000000403 R_AARCH64_RELATIVE 178b8 // -// The addend delta can be negative as well as positive, but overall the -// deltas have a much smaller range than the input data. When encoded as -// signed LEB128 the total data reduction becomes useful. +// The header is going to be +// [00] 14 <- count +// [01] 0x00000000000a2170 <- initial relocation (first relocation - delta, +// the delta is 8 in this case) +// -- starting the first and only group +// [03] 14 <- group size +// [03] 0xb <- flags RELOCATION_GROUP_HAS_ADDEND | RELOCATION_GROUPED_BY_OFFSET_DELTA +// | RELOCATION_GROUPED_BY_INFO +// [04] 8 <- offset delta +// [05] 0x403 <- r_info +// -- end of group definition, starting list of r_addend deltas +// [06] 0x177a8 +// [07] 0x24 = 177cc - 177a8 +// [08] 0x14 = 177e0 - 177cc +// [09] 0x14 = 177f4 - 177e0 +// [10] 0x10 = 17804 - 177f4 +// [11] 0x14 = 17818 - 17804 +// [12] 0x14 = 1782c - 17818 +// [13] 0x14 = 17840 - 1782c +// [14] 0x14 = 17854 - 17840 +// [15] 0x14 = 17868 - 17854 +// [16] 0x14 = 1787c - 17868 +// [17] 0x14 = 17890 - 1787c +// [18] 0x14 = 178a4 - 17890 +// [19] 0x14 = 178b8 - 178a4 +// -- the end. + +// TODO (dimitry): consider using r_addend_group_delta in the way we use group offset delta, it can +// save us more bytes... + +// The input ends when sum(group_size) == relocation_count #ifndef TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_ #define TOOLS_RELOCATION_PACKER_SRC_DELTA_ENCODER_H_ @@ -60,19 +96,35 @@ namespace relocation_packer { // A RelocationDeltaCodec packs vectors of relative relocations with // addends into more compact forms, and unpacks them to reproduce the // pre-packed data. +template class RelocationDeltaCodec { public: - // Encode relative relocations with addends into a more compact form. + typedef typename ELF::Addr ElfAddr; + typedef typename ELF::Rela ElfRela; + + // Encode relocations with addends into a more compact form. // |relocations| is a vector of relative relocation with addend structs. // |packed| is the vector of packed words into which relocations are packed. - static void Encode(const std::vector& relocations, - std::vector* packed); + static void Encode(const std::vector& relocations, + std::vector* packed); // Decode relative relocations with addends from their more compact form. // |packed| is the vector of packed relocations. // |relocations| is a vector of unpacked relative relocations. - static void Decode(const std::vector& packed, - std::vector* relocations); + static void Decode(const std::vector& packed, + std::vector* relocations); + + private: + static void DetectGroup(const std::vector& relocations, + size_t group_starts_with, ElfAddr previous_offset, + ElfAddr* group_size, ElfAddr* group_flags, + ElfAddr* group_offset_delta, ElfAddr* group_info, + ElfAddr* group_addend); + + static void DetectGroupFields(const ElfRela& reloc_one, const ElfRela& reloc_two, + ElfAddr current_offset_delta, ElfAddr* group_flags, + ElfAddr* group_offset_delta, ElfAddr* group_info, + ElfAddr* group_addend); }; } // namespace relocation_packer diff --git a/tools/relocation_packer/src/delta_encoder_unittest.cc b/tools/relocation_packer/src/delta_encoder_unittest.cc index b9bf39adb..06d9c9673 100644 --- a/tools/relocation_packer/src/delta_encoder_unittest.cc +++ b/tools/relocation_packer/src/delta_encoder_unittest.cc @@ -6,27 +6,29 @@ #include #include "elf.h" -#include "elf_traits.h" -#include "testing/gtest/include/gtest/gtest.h" +#include "gtest/gtest.h" namespace { -void AddRelocation(ELF::Addr addr, - ELF::Sxword addend, - std::vector* relocations) { - ELF::Rela relocation; +template +void AddRelocation(uint32_t addr, + uint32_t info, + int32_t addend, + std::vector* relocations) { + T relocation; relocation.r_offset = addr; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocation.r_info = info; relocation.r_addend = addend; relocations->push_back(relocation); } -bool CheckRelocation(ELF::Addr addr, - ELF::Sxword addend, - const ELF::Rela& relocation) { +template +bool CheckRelocation(uint32_t addr, + uint32_t info, + int32_t addend, + const T& relocation) { return relocation.r_offset == addr && - ELF_R_SYM(relocation.r_info) == 0 && - ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode && + relocation.r_info == info && relocation.r_addend == addend; } @@ -34,117 +36,188 @@ bool CheckRelocation(ELF::Addr addr, namespace relocation_packer { -TEST(Delta, Encode) { - std::vector relocations; - std::vector packed; +template +static void encode() { + std::vector relocations; + std::vector packed; - RelocationDeltaCodec codec; + RelocationDeltaCodec codec; - packed.clear(); codec.Encode(relocations, &packed); - EXPECT_EQ(0, packed.size()); + ASSERT_EQ(0U, packed.size()); // Initial relocation. - AddRelocation(0xf00d0000, 10000, &relocations); + AddRelocation(0xf00d0000, 11U, 10000, &relocations); - packed.clear(); codec.Encode(relocations, &packed); - EXPECT_EQ(3, packed.size()); + // size of reloc table, size of group, flags, 3 fields, zero + EXPECT_EQ(7U, packed.size()); // One pair present. - EXPECT_EQ(1, packed[0]); - // Delta from the neutral element is the initial relocation. - EXPECT_EQ(0xf00d0000, packed[1]); - EXPECT_EQ(10000, packed[2]); + size_t ndx = 0; + EXPECT_EQ(1U, packed[ndx++]); + EXPECT_EQ(0xf00d0000, packed[ndx++]); + EXPECT_EQ(1U, packed[ndx++]); // group_size + EXPECT_EQ(8U, packed[ndx++]); // flags + // Delta from the neutral element is zero + EXPECT_EQ(0U, packed[ndx++]); // offset_delta + EXPECT_EQ(11U, packed[ndx++]); // info + EXPECT_EQ(10000U, packed[ndx++]); // addend_delta // Add a second relocation, 4 byte offset delta, 12 byte addend delta. - AddRelocation(0xf00d0004, 10012, &relocations); + // same info + AddRelocation(0xf00d0004, 11U, 10012, &relocations); packed.clear(); codec.Encode(relocations, &packed); - EXPECT_EQ(5, packed.size()); - // Two pairs present. - EXPECT_EQ(2, packed[0]); - // Delta from the neutral element is the initial relocation. - EXPECT_EQ(0xf00d0000, packed[1]); - EXPECT_EQ(10000, packed[2]); - // 4 byte offset delta, 12 byte addend delta. - EXPECT_EQ(4, packed[3]); - EXPECT_EQ(12, packed[4]); + ndx = 0; + EXPECT_EQ(8U, packed.size()); + + EXPECT_EQ(2U, packed[ndx++]); // relocs count + EXPECT_EQ(0xf00cfffc, packed[ndx++]); // initial offset + EXPECT_EQ(2U, packed[ndx++]); // group count + EXPECT_EQ(11U, packed[ndx++]); // flags + EXPECT_EQ(4U, packed[ndx++]); // group offset delta + EXPECT_EQ(11U, packed[ndx++]); // info + + EXPECT_EQ(10000U, packed[ndx++]); // addend delta + EXPECT_EQ(12U, packed[ndx++]); // addend delta // Add a third relocation, 4 byte offset delta, 12 byte addend delta. - AddRelocation(0xf00d0008, 10024, &relocations); + // different info + AddRelocation(0xf00d0008, 41U, 10024, &relocations); // Add three more relocations, 8 byte offset deltas, -24 byte addend deltas. - AddRelocation(0xf00d0010, 10000, &relocations); - AddRelocation(0xf00d0018, 9976, &relocations); - AddRelocation(0xf00d0020, 9952, &relocations); + AddRelocation(0xf00d0010, 42U, 10000, &relocations); + AddRelocation(0xf00d0018, 42U, 9976, &relocations); + AddRelocation(0xf00d0020, 42U, 9952, &relocations); + + AddRelocation(0xf00d2028, 1042U, 0, &relocations); + AddRelocation(0xf00d2030, 3442U, 0, &relocations); packed.clear(); codec.Encode(relocations, &packed); - EXPECT_EQ(13, packed.size()); - // Six pairs present. - EXPECT_EQ(6, packed[0]); + ndx = 0; + EXPECT_EQ(26U, packed.size()); + // Total number of relocs + EXPECT_EQ(8U, packed[ndx++]); + EXPECT_EQ(0xf00cfffc, packed[ndx++]); + // 2 in first group + EXPECT_EQ(2U, packed[ndx++]); + EXPECT_EQ(11U, packed[ndx++]); //flags + EXPECT_EQ(4U, packed[ndx++]); // group offset delta + EXPECT_EQ(11U, packed[ndx++]); // info + // Initial relocation. - EXPECT_EQ(0xf00d0000, packed[1]); - EXPECT_EQ(10000, packed[2]); + EXPECT_EQ(10000U, packed[ndx++]); // addend delta // Two relocations, 4 byte offset deltas, 12 byte addend deltas. - EXPECT_EQ(4, packed[3]); - EXPECT_EQ(12, packed[4]); - EXPECT_EQ(4, packed[5]); - EXPECT_EQ(12, packed[6]); + EXPECT_EQ(12U, packed[ndx++]); // addend delta + + // second group has only one reloc + EXPECT_EQ(1U, packed[ndx++]); // count + EXPECT_EQ(8U, packed[ndx++]); // flags + + EXPECT_EQ(4U, packed[ndx++]); // offset delta + EXPECT_EQ(41U, packed[ndx++]); // info + EXPECT_EQ(12U, packed[ndx++]); // addend delta + + // next - 3 relocs grouped by info + EXPECT_EQ(3U, packed[ndx++]); // count + EXPECT_EQ(11U, packed[ndx++]); // flags + EXPECT_EQ(8U, packed[ndx++]); // group offset delta + EXPECT_EQ(42U, packed[ndx++]); // info // Three relocations, 8 byte offset deltas, -24 byte addend deltas. - EXPECT_EQ(8, packed[7]); - EXPECT_EQ(-24, packed[8]); - EXPECT_EQ(8, packed[9]); - EXPECT_EQ(-24, packed[10]); - EXPECT_EQ(8, packed[11]); - EXPECT_EQ(-24, packed[12]); + EXPECT_EQ(static_cast(-24), packed[ndx++]); + EXPECT_EQ(static_cast(-24), packed[ndx++]); + EXPECT_EQ(static_cast(-24), packed[ndx++]); + + // and last - 2 relocations without addend + EXPECT_EQ(2U, packed[ndx++]); + EXPECT_EQ(0U, packed[ndx++]); // flags + // offset_deltas and r_infos for next 2 relocations + EXPECT_EQ(0x2008U, packed[ndx++]); // offset delta + EXPECT_EQ(1042U, packed[ndx++]); // r_info + EXPECT_EQ(0x8U, packed[ndx++]); // offset delta + EXPECT_EQ(3442U, packed[ndx++]); // r_info + + EXPECT_EQ(packed.size(), ndx); } -TEST(Delta, Decode) { - std::vector packed; - std::vector relocations; +TEST(Delta, Encode32) { + encode(); +} - RelocationDeltaCodec codec; +TEST(Delta, Encode64) { + encode(); +} + +template +static void decode() { + std::vector packed; + std::vector relocations; + + RelocationDeltaCodec codec; codec.Decode(packed, &relocations); - EXPECT_EQ(0, relocations.size()); + EXPECT_EQ(0U, relocations.size()); // Six pairs. - packed.push_back(6); + packed.push_back(6U); // count + packed.push_back(0xc0ddfffc); // base offset + packed.push_back(3U); // group count + packed.push_back(11U); // flags + packed.push_back(4U); // offset delta + packed.push_back(11U); // info // Initial relocation. - packed.push_back(0xc0de0000); - packed.push_back(10000); + packed.push_back(10000U); // Two relocations, 4 byte offset deltas, 12 byte addend deltas. - packed.push_back(4); - packed.push_back(12); - packed.push_back(4); - packed.push_back(12); + packed.push_back(12U); // addend + packed.push_back(12U); // addend + // Three relocations, 8 byte offset deltas, -24 byte addend deltas. - packed.push_back(8); - packed.push_back(-24); - packed.push_back(8); - packed.push_back(-24); - packed.push_back(8); - packed.push_back(-24); + packed.push_back(1U); // group count + packed.push_back(9U); // flags + packed.push_back(11U); // info + + packed.push_back(8U); + packed.push_back(static_cast(-24)); + // next group with 2 relocs + packed.push_back(2U); // group count + packed.push_back(11U); // flags + packed.push_back(8U); // offset + packed.push_back(42U); // info + + packed.push_back(static_cast(-24)); // addend + packed.push_back(static_cast(-24)); // addend relocations.clear(); codec.Decode(packed, &relocations); - EXPECT_EQ(6, relocations.size()); + EXPECT_EQ(6U, relocations.size()); // Initial relocation. - EXPECT_TRUE(CheckRelocation(0xc0de0000, 10000, relocations[0])); + EXPECT_TRUE(CheckRelocation(0xc0de0000, 11U, 10000, relocations[0])); // Two relocations, 4 byte offset deltas, 12 byte addend deltas. - EXPECT_TRUE(CheckRelocation(0xc0de0004, 10012, relocations[1])); - EXPECT_TRUE(CheckRelocation(0xc0de0008, 10024, relocations[2])); + EXPECT_TRUE(CheckRelocation(0xc0de0004, 11U, 10012, relocations[1])); + EXPECT_TRUE(CheckRelocation(0xc0de0008, 11U, 10024, relocations[2])); // Three relocations, 8 byte offset deltas, -24 byte addend deltas. - EXPECT_TRUE(CheckRelocation(0xc0de0010, 10000, relocations[3])); - EXPECT_TRUE(CheckRelocation(0xc0de0018, 9976, relocations[4])); - EXPECT_TRUE(CheckRelocation(0xc0de0020, 9952, relocations[5])); + EXPECT_TRUE(CheckRelocation(0xc0de0010, 11U, 10000, relocations[3])); + EXPECT_TRUE(CheckRelocation(0xc0de0018, 42U, 9976, relocations[4])); + EXPECT_TRUE(CheckRelocation(0xc0de0020, 42U, 9952, relocations[5])); } +TEST(Delta, Decode32) { + decode(); +} + +TEST(Delta, Decode64) { + decode(); +} + +// TODO (dimitry): add more tests (fix by 19 January 2038 03:14:07 UTC) +// TODO (dimtiry): 1. Incorrect packed array for decode +// TODO (dimtiry): 2. Try to catch situation where it is likely to get series of groups with size 1 + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_file.cc b/tools/relocation_packer/src/elf_file.cc index 3ffccecd7..20b25ef82 100644 --- a/tools/relocation_packer/src/elf_file.cc +++ b/tools/relocation_packer/src/elf_file.cc @@ -5,26 +5,10 @@ // Implementation notes: // // We need to remove a piece from the ELF shared library. However, we also -// want to ensure that code and data loads at the same addresses as before -// packing, so that tools like breakpad can still match up addresses found -// in any crash dumps with data extracted from the pre-packed version of -// the shared library. -// -// Arranging this means that we have to split one of the LOAD segments into -// two. Unfortunately, the program headers are located at the very start -// of the shared library file, so expanding the program header section -// would cause a lot of consequent changes to files offsets that we don't -// really want to have to handle. -// -// Luckily, though, there is a segment that is always present and always -// unused on Android; the GNU_STACK segment. What we do is to steal that -// and repurpose it to be one of the split LOAD segments. We then have to -// sort LOAD segments by offset to keep the crazy linker happy. -// -// All of this takes place in SplitProgramHeadersForHole(), used on packing, -// and is unraveled on unpacking in CoalesceProgramHeadersForHole(). See -// commentary on those functions for an example of this segment stealing -// in action. +// want to avoid fixing DWARF cfi data and relative relocation addresses. +// So after packing we shift offets and starting address of the RX segment +// while preserving code/data vaddrs location. +// This requires some fixups for symtab/hash/gnu_hash dynamic section addresses. #include "elf_file.h" @@ -42,28 +26,29 @@ namespace relocation_packer { -// Stub identifier written to 'null out' packed data, "NULL". -static const uint32_t kStubIdentifier = 0x4c4c554eu; - // Out-of-band dynamic tags used to indicate the offset and size of the // android packed relocations section. -static const ELF::Sword DT_ANDROID_REL_OFFSET = DT_LOOS; -static const ELF::Sword DT_ANDROID_REL_SIZE = DT_LOOS + 1; +static constexpr int32_t DT_ANDROID_REL = DT_LOOS + 2; +static constexpr int32_t DT_ANDROID_RELSZ = DT_LOOS + 3; + +static constexpr int32_t DT_ANDROID_RELA = DT_LOOS + 4; +static constexpr int32_t DT_ANDROID_RELASZ = DT_LOOS + 5; + +static constexpr uint32_t SHT_ANDROID_REL = SHT_LOOS + 1; +static constexpr uint32_t SHT_ANDROID_RELA = SHT_LOOS + 2; // Alignment to preserve, in bytes. This must be at least as large as the // largest d_align and sh_addralign values found in the loaded file. // Out of caution for RELRO page alignment, we preserve to a complete target // page. See http://www.airs.com/blog/archives/189. -static const size_t kPreserveAlignment = 4096; - -namespace { +static constexpr size_t kPreserveAlignment = 4096; // Get section data. Checks that the section has exactly one data entry, // so that the section size and the data size are the same. True in // practice for all sections we resize when packing or unpacking. Done // by ensuring that a call to elf_getdata(section, data) returns NULL as // the next data entry. -Elf_Data* GetSectionData(Elf_Scn* section) { +static Elf_Data* GetSectionData(Elf_Scn* section) { Elf_Data* data = elf_getdata(section, NULL); CHECK(data && elf_getdata(section, data) == NULL); return data; @@ -71,9 +56,9 @@ Elf_Data* GetSectionData(Elf_Scn* section) { // Rewrite section data. Allocates new data and makes it the data element's // buffer. Relies on program exit to free allocated data. -void RewriteSectionData(Elf_Scn* section, - const void* section_data, - size_t size) { +static void RewriteSectionData(Elf_Scn* section, + const void* section_data, + size_t size) { Elf_Data* data = GetSectionData(section); CHECK(size == data->d_size); uint8_t* area = new uint8_t[size]; @@ -82,7 +67,8 @@ void RewriteSectionData(Elf_Scn* section, } // Verbose ELF header logging. -void VerboseLogElfHeader(const ELF::Ehdr* elf_header) { +template +static void VerboseLogElfHeader(const Ehdr* elf_header) { VLOG(1) << "e_phoff = " << elf_header->e_phoff; VLOG(1) << "e_shoff = " << elf_header->e_shoff; VLOG(1) << "e_ehsize = " << elf_header->e_ehsize; @@ -93,8 +79,9 @@ void VerboseLogElfHeader(const ELF::Ehdr* elf_header) { } // Verbose ELF program header logging. -void VerboseLogProgramHeader(size_t program_header_index, - const ELF::Phdr* program_header) { +template +static void VerboseLogProgramHeader(size_t program_header_index, + const Phdr* program_header) { std::string type; switch (program_header->p_type) { case PT_NULL: type = "NULL"; break; @@ -118,17 +105,19 @@ void VerboseLogProgramHeader(size_t program_header_index, } // Verbose ELF section header logging. -void VerboseLogSectionHeader(const std::string& section_name, - const ELF::Shdr* section_header) { +template +static void VerboseLogSectionHeader(const std::string& section_name, + const Shdr* section_header) { VLOG(1) << "section " << section_name; VLOG(1) << " sh_addr = " << section_header->sh_addr; VLOG(1) << " sh_offset = " << section_header->sh_offset; VLOG(1) << " sh_size = " << section_header->sh_size; + VLOG(1) << " sh_entsize = " << section_header->sh_entsize; VLOG(1) << " sh_addralign = " << section_header->sh_addralign; } // Verbose ELF section data logging. -void VerboseLogSectionData(const Elf_Data* data) { +static void VerboseLogSectionData(const Elf_Data* data) { VLOG(1) << " data"; VLOG(1) << " d_buf = " << data->d_buf; VLOG(1) << " d_off = " << data->d_off; @@ -136,12 +125,11 @@ void VerboseLogSectionData(const Elf_Data* data) { VLOG(1) << " d_align = " << data->d_align; } -} // namespace - // Load the complete ELF file into a memory image in libelf, and identify // the .rel.dyn or .rela.dyn, .dynamic, and .android.rel.dyn or // .android.rela.dyn sections. No-op if the ELF file has already been loaded. -bool ElfFile::Load() { +template +bool ElfFile::Load() { if (elf_) return true; @@ -153,15 +141,12 @@ bool ElfFile::Load() { return false; } - ELF::Ehdr* elf_header = ELF::getehdr(elf); + auto elf_header = ELF::getehdr(elf); if (!elf_header) { LOG(ERROR) << "Failed to load ELF header: " << elf_errmsg(elf_errno()); return false; } - if (elf_header->e_machine != ELF::kMachine) { - LOG(ERROR) << "ELF file architecture is not " << ELF::Machine(); - return false; - } + if (elf_header->e_type != ET_DYN) { LOG(ERROR) << "ELF file is not a shared object"; return false; @@ -173,19 +158,16 @@ bool ElfFile::Load() { CHECK(endian == ELFDATA2LSB); CHECK(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__); - // Also require that the file class is as expected. const int file_class = elf_header->e_ident[EI_CLASS]; - CHECK(file_class == ELF::kFileClass); - VLOG(1) << "endian = " << endian << ", file class = " << file_class; VerboseLogElfHeader(elf_header); - const ELF::Phdr* elf_program_header = ELF::getphdr(elf); - CHECK(elf_program_header); + auto elf_program_header = ELF::getphdr(elf); + CHECK(elf_program_header != nullptr); - const ELF::Phdr* dynamic_program_header = NULL; + const typename ELF::Phdr* dynamic_program_header = NULL; for (size_t i = 0; i < elf_header->e_phnum; ++i) { - const ELF::Phdr* program_header = &elf_program_header[i]; + auto program_header = &elf_program_header[i]; VerboseLogProgramHeader(i, program_header); if (program_header->p_type == PT_DYNAMIC) { @@ -193,7 +175,7 @@ bool ElfFile::Load() { dynamic_program_header = program_header; } } - CHECK(dynamic_program_header != NULL); + CHECK(dynamic_program_header != nullptr); size_t string_index; elf_getshdrstrndx(elf, &string_index); @@ -201,9 +183,8 @@ bool ElfFile::Load() { // Notes of the dynamic relocations, packed relocations, and .dynamic // sections. Found while iterating sections, and later stored in class // attributes. - Elf_Scn* found_relocations_section = NULL; - Elf_Scn* found_android_relocations_section = NULL; - Elf_Scn* found_dynamic_section = NULL; + Elf_Scn* found_relocations_section = nullptr; + Elf_Scn* found_dynamic_section = nullptr; // Notes of relocation section types seen. We require one or the other of // these; both is unsupported. @@ -211,16 +192,16 @@ bool ElfFile::Load() { bool has_rela_relocations = false; Elf_Scn* section = NULL; - while ((section = elf_nextscn(elf, section)) != NULL) { - const ELF::Shdr* section_header = ELF::getshdr(section); + while ((section = elf_nextscn(elf, section)) != nullptr) { + auto section_header = ELF::getshdr(section); std::string name = elf_strptr(elf, string_index, section_header->sh_name); VerboseLogSectionHeader(name, section_header); // Note relocation section types. - if (section_header->sh_type == SHT_REL) { + if (section_header->sh_type == SHT_REL || section_header->sh_type == SHT_ANDROID_REL) { has_rel_relocations = true; } - if (section_header->sh_type == SHT_RELA) { + if (section_header->sh_type == SHT_RELA || section_header->sh_type == SHT_ANDROID_RELA) { has_rela_relocations = true; } @@ -229,10 +210,7 @@ bool ElfFile::Load() { section_header->sh_size > 0) { found_relocations_section = section; } - if ((name == ".android.rel.dyn" || name == ".android.rela.dyn") && - section_header->sh_size > 0) { - found_android_relocations_section = section; - } + if (section_header->sh_offset == dynamic_program_header->p_offset) { found_dynamic_section = section; } @@ -252,12 +230,6 @@ bool ElfFile::Load() { LOG(ERROR) << "Missing or empty .rel.dyn or .rela.dyn section"; return false; } - if (!found_android_relocations_section) { - LOG(ERROR) << "Missing or empty .android.rel.dyn or .android.rela.dyn " - << "section (to fix, run with --help and follow the " - << "pre-packing instructions)"; - return false; - } if (!found_dynamic_section) { LOG(ERROR) << "Missing .dynamic section"; return false; @@ -277,17 +249,15 @@ bool ElfFile::Load() { elf_ = elf; relocations_section_ = found_relocations_section; dynamic_section_ = found_dynamic_section; - android_relocations_section_ = found_android_relocations_section; relocations_type_ = has_rel_relocations ? REL : RELA; return true; } -namespace { - // Helper for ResizeSection(). Adjust the main ELF header for the hole. -void AdjustElfHeaderForHole(ELF::Ehdr* elf_header, - ELF::Off hole_start, - ssize_t hole_size) { +template +static void AdjustElfHeaderForHole(typename ELF::Ehdr* elf_header, + typename ELF::Off hole_start, + ssize_t hole_size) { if (elf_header->e_phoff > hole_start) { elf_header->e_phoff += hole_size; VLOG(1) << "e_phoff adjusted to " << elf_header->e_phoff; @@ -299,437 +269,119 @@ void AdjustElfHeaderForHole(ELF::Ehdr* elf_header, } // Helper for ResizeSection(). Adjust all section headers for the hole. -void AdjustSectionHeadersForHole(Elf* elf, - ELF::Off hole_start, - ssize_t hole_size) { +template +static void AdjustSectionHeadersForHole(Elf* elf, + typename ELF::Off hole_start, + ssize_t hole_size) { size_t string_index; elf_getshdrstrndx(elf, &string_index); Elf_Scn* section = NULL; while ((section = elf_nextscn(elf, section)) != NULL) { - ELF::Shdr* section_header = ELF::getshdr(section); + auto section_header = ELF::getshdr(section); std::string name = elf_strptr(elf, string_index, section_header->sh_name); if (section_header->sh_offset > hole_start) { section_header->sh_offset += hole_size; VLOG(1) << "section " << name << " sh_offset adjusted to " << section_header->sh_offset; + } else { + section_header->sh_addr -= hole_size; + VLOG(1) << "section " << name + << " sh_addr adjusted to " << section_header->sh_addr; } } } // Helper for ResizeSection(). Adjust the offsets of any program headers // that have offsets currently beyond the hole start. -void AdjustProgramHeaderOffsets(ELF::Phdr* program_headers, - size_t count, - ELF::Phdr* ignored_1, - ELF::Phdr* ignored_2, - ELF::Off hole_start, - ssize_t hole_size) { +template +static void AdjustProgramHeaderOffsets(typename ELF::Phdr* program_headers, + size_t count, + typename ELF::Off hole_start, + ssize_t hole_size) { for (size_t i = 0; i < count; ++i) { - ELF::Phdr* program_header = &program_headers[i]; - - if (program_header == ignored_1 || program_header == ignored_2) - continue; + typename ELF::Phdr* program_header = &program_headers[i]; if (program_header->p_offset > hole_start) { // The hole start is past this segment, so adjust offset. program_header->p_offset += hole_size; VLOG(1) << "phdr[" << i << "] p_offset adjusted to "<< program_header->p_offset; + } else { + program_header->p_vaddr -= hole_size; + program_header->p_paddr -= hole_size; + VLOG(1) << "phdr[" << i + << "] p_vaddr adjusted to "<< program_header->p_vaddr + << "; p_paddr adjusted to "<< program_header->p_paddr; } } } // Helper for ResizeSection(). Find the first loadable segment in the // file. We expect it to map from file offset zero. -ELF::Phdr* FindFirstLoadSegment(ELF::Phdr* program_headers, - size_t count) { - ELF::Phdr* first_loadable_segment = NULL; - +template +static typename ELF::Phdr* FindLoadSegmentForHole(typename ELF::Phdr* program_headers, + size_t count, + typename ELF::Off hole_start) { for (size_t i = 0; i < count; ++i) { - ELF::Phdr* program_header = &program_headers[i]; + typename ELF::Phdr* program_header = &program_headers[i]; if (program_header->p_type == PT_LOAD && - program_header->p_offset == 0 && - program_header->p_vaddr == 0 && - program_header->p_paddr == 0) { - first_loadable_segment = program_header; + program_header->p_offset <= hole_start && + (program_header->p_offset + program_header->p_filesz) >= hole_start ) { + return program_header; } } - LOG_IF(FATAL, !first_loadable_segment) - << "Cannot locate a LOAD segment with address and offset zero"; + LOG(FATAL) << "Cannot locate a LOAD segment with hole_start=0x" << std::hex << hole_start; + NOTREACHED(); - return first_loadable_segment; + return nullptr; } -// Helper for ResizeSection(). Find the PT_GNU_STACK segment, and check -// that it contains what we expect so we can restore it on unpack if needed. -ELF::Phdr* FindUnusedGnuStackSegment(ELF::Phdr* program_headers, - size_t count) { - ELF::Phdr* unused_segment = NULL; - - for (size_t i = 0; i < count; ++i) { - ELF::Phdr* program_header = &program_headers[i]; - - if (program_header->p_type == PT_GNU_STACK && - program_header->p_offset == 0 && - program_header->p_vaddr == 0 && - program_header->p_paddr == 0 && - program_header->p_filesz == 0 && - program_header->p_memsz == 0 && - program_header->p_flags == (PF_R | PF_W) && - program_header->p_align == ELF::kGnuStackSegmentAlignment) { - unused_segment = program_header; - } - } - LOG_IF(FATAL, !unused_segment) - << "Cannot locate the expected GNU_STACK segment"; - - return unused_segment; -} - -// Helper for ResizeSection(). Find the segment that was the first loadable -// one before we split it into two. This is the one into which we coalesce -// the split segments on unpacking. -ELF::Phdr* FindOriginalFirstLoadSegment(ELF::Phdr* program_headers, - size_t count) { - const ELF::Phdr* first_loadable_segment = - FindFirstLoadSegment(program_headers, count); - - ELF::Phdr* original_first_loadable_segment = NULL; - - for (size_t i = 0; i < count; ++i) { - ELF::Phdr* program_header = &program_headers[i]; - - // The original first loadable segment is the one that follows on from - // the one we wrote on split to be the current first loadable segment. - if (program_header->p_type == PT_LOAD && - program_header->p_offset == first_loadable_segment->p_filesz) { - original_first_loadable_segment = program_header; - } - } - LOG_IF(FATAL, !original_first_loadable_segment) - << "Cannot locate the LOAD segment that follows a LOAD at offset zero"; - - return original_first_loadable_segment; -} - -// Helper for ResizeSection(). Find the segment that contains the hole. -Elf_Scn* FindSectionContainingHole(Elf* elf, - ELF::Off hole_start, - ssize_t hole_size) { - Elf_Scn* section = NULL; - Elf_Scn* last_unholed_section = NULL; - - while ((section = elf_nextscn(elf, section)) != NULL) { - const ELF::Shdr* section_header = ELF::getshdr(section); - - // Because we get here after section headers have been adjusted for the - // hole, we need to 'undo' that adjustment to give a view of the original - // sections layout. - ELF::Off offset = section_header->sh_offset; - if (section_header->sh_offset >= hole_start) { - offset -= hole_size; - } - - if (offset <= hole_start) { - last_unholed_section = section; - } - } - LOG_IF(FATAL, !last_unholed_section) - << "Cannot identify the section before the one containing the hole"; - - // The section containing the hole is the one after the last one found - // by the loop above. - Elf_Scn* holed_section = elf_nextscn(elf, last_unholed_section); - LOG_IF(FATAL, !holed_section) - << "Cannot identify the section containing the hole"; - - return holed_section; -} - -// Helper for ResizeSection(). Find the last section contained in a segment. -Elf_Scn* FindLastSectionInSegment(Elf* elf, - ELF::Phdr* program_header, - ELF::Off hole_start, - ssize_t hole_size) { - const ELF::Off segment_end = - program_header->p_offset + program_header->p_filesz; - - Elf_Scn* section = NULL; - Elf_Scn* last_section = NULL; - - while ((section = elf_nextscn(elf, section)) != NULL) { - const ELF::Shdr* section_header = ELF::getshdr(section); - - // As above, 'undo' any section offset adjustment to give a view of the - // original sections layout. - ELF::Off offset = section_header->sh_offset; - if (section_header->sh_offset >= hole_start) { - offset -= hole_size; - } - - if (offset < segment_end) { - last_section = section; - } - } - LOG_IF(FATAL, !last_section) - << "Cannot identify the last section in the given segment"; - - return last_section; -} - -// Helper for ResizeSection(). Order loadable segments by their offsets. -// The crazy linker contains assumptions about loadable segment ordering, -// and it is better if we do not break them. -void SortOrderSensitiveProgramHeaders(ELF::Phdr* program_headers, - size_t count) { - std::vector orderable; - - // Collect together orderable program headers. These are all the LOAD - // segments, and any GNU_STACK that may be present (removed on packing, - // but replaced on unpacking). - for (size_t i = 0; i < count; ++i) { - ELF::Phdr* program_header = &program_headers[i]; - - if (program_header->p_type == PT_LOAD || - program_header->p_type == PT_GNU_STACK) { - orderable.push_back(program_header); - } - } - - // Order these program headers so that any PT_GNU_STACK is last, and - // the LOAD segments that precede it appear in offset order. Uses - // insertion sort. - for (size_t i = 1; i < orderable.size(); ++i) { - for (size_t j = i; j > 0; --j) { - ELF::Phdr* first = orderable[j - 1]; - ELF::Phdr* second = orderable[j]; - - if (!(first->p_type == PT_GNU_STACK || - first->p_offset > second->p_offset)) { - break; - } - std::swap(*first, *second); - } - } -} - -// Helper for ResizeSection(). The GNU_STACK program header is unused in -// Android, so we can repurpose it here. Before packing, the program header -// table contains something like: -// -// Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -// LOAD 0x000000 0x00000000 0x00000000 0x1efc818 0x1efc818 R E 0x1000 -// LOAD 0x1efd008 0x01efe008 0x01efe008 0x17ec3c 0x1a0324 RW 0x1000 -// DYNAMIC 0x205ec50 0x0205fc50 0x0205fc50 0x00108 0x00108 RW 0x4 -// GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0 -// -// The hole in the file is in the first of these. In order to preserve all -// load addresses, what we do is to turn the GNU_STACK into a new LOAD entry -// that maps segments up to where we created the hole, adjust the first LOAD -// entry so that it maps segments after that, adjust any other program -// headers whose offset is after the hole start, and finally order the LOAD -// segments by offset, to give: -// -// Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align -// LOAD 0x000000 0x00000000 0x00000000 0x14ea4 0x14ea4 R E 0x1000 -// LOAD 0x014ea4 0x00212ea4 0x00212ea4 0x1cea164 0x1cea164 R E 0x1000 -// DYNAMIC 0x1e60c50 0x0205fc50 0x0205fc50 0x00108 0x00108 RW 0x4 -// LOAD 0x1cff008 0x01efe008 0x01efe008 0x17ec3c 0x1a0324 RW 0x1000 -// -// We work out the split points by finding the .rel.dyn or .rela.dyn section -// that contains the hole, and by finding the last section in a given segment. -// -// To unpack, we reverse the above to leave the file as it was originally. -void SplitProgramHeadersForHole(Elf* elf, - ELF::Off hole_start, - ssize_t hole_size) { - CHECK(hole_size < 0); - const ELF::Ehdr* elf_header = ELF::getehdr(elf); +// Helper for ResizeSection(). Rewrite program headers. +template +static void RewriteProgramHeadersForHole(Elf* elf, + typename ELF::Off hole_start, + ssize_t hole_size) { + const typename ELF::Ehdr* elf_header = ELF::getehdr(elf); CHECK(elf_header); - ELF::Phdr* elf_program_header = ELF::getphdr(elf); + typename ELF::Phdr* elf_program_header = ELF::getphdr(elf); CHECK(elf_program_header); const size_t program_header_count = elf_header->e_phnum; // Locate the segment that we can overwrite to form the new LOAD entry, // and the segment that we are going to split into two parts. - ELF::Phdr* spliced_header = - FindUnusedGnuStackSegment(elf_program_header, program_header_count); - ELF::Phdr* split_header = - FindFirstLoadSegment(elf_program_header, program_header_count); + typename ELF::Phdr* target_load_header = + FindLoadSegmentForHole(elf_program_header, program_header_count, hole_start); - VLOG(1) << "phdr[" << split_header - elf_program_header << "] split"; - VLOG(1) << "phdr[" << spliced_header - elf_program_header << "] new LOAD"; + VLOG(1) << "phdr[" << target_load_header - elf_program_header << "] adjust"; + // Adjust PT_LOAD program header memsz and filesz + target_load_header->p_filesz += hole_size; + target_load_header->p_memsz += hole_size; - // Find the section that contains the hole. We split on the section that - // follows it. - Elf_Scn* holed_section = - FindSectionContainingHole(elf, hole_start, hole_size); - - size_t string_index; - elf_getshdrstrndx(elf, &string_index); - - ELF::Shdr* section_header = ELF::getshdr(holed_section); - std::string name = elf_strptr(elf, string_index, section_header->sh_name); - VLOG(1) << "section " << name << " split after"; - - // Find the last section in the segment we are splitting. - Elf_Scn* last_section = - FindLastSectionInSegment(elf, split_header, hole_start, hole_size); - - section_header = ELF::getshdr(last_section); - name = elf_strptr(elf, string_index, section_header->sh_name); - VLOG(1) << "section " << name << " split end"; - - // Split on the section following the holed one, and up to (but not - // including) the section following the last one in the split segment. - Elf_Scn* split_section = elf_nextscn(elf, holed_section); - LOG_IF(FATAL, !split_section) - << "No section follows the section that contains the hole"; - Elf_Scn* end_section = elf_nextscn(elf, last_section); - LOG_IF(FATAL, !end_section) - << "No section follows the last section in the segment being split"; - - // Split the first portion of split_header into spliced_header. - const ELF::Shdr* split_section_header = ELF::getshdr(split_section); - spliced_header->p_type = split_header->p_type; - spliced_header->p_offset = split_header->p_offset; - spliced_header->p_vaddr = split_header->p_vaddr; - spliced_header->p_paddr = split_header->p_paddr; - CHECK(split_header->p_filesz == split_header->p_memsz); - spliced_header->p_filesz = split_section_header->sh_offset; - spliced_header->p_memsz = split_section_header->sh_offset; - spliced_header->p_flags = split_header->p_flags; - spliced_header->p_align = split_header->p_align; - - // Now rewrite split_header to remove the part we spliced from it. - const ELF::Shdr* end_section_header = ELF::getshdr(end_section); - split_header->p_offset = spliced_header->p_filesz; - CHECK(split_header->p_vaddr == split_header->p_paddr); - split_header->p_vaddr = split_section_header->sh_addr; - split_header->p_paddr = split_section_header->sh_addr; - CHECK(split_header->p_filesz == split_header->p_memsz); - split_header->p_filesz = - end_section_header->sh_offset - spliced_header->p_filesz; - split_header->p_memsz = - end_section_header->sh_offset - spliced_header->p_filesz; - - // Adjust the offsets of all program headers that are not one of the pair - // we just created by splitting. - AdjustProgramHeaderOffsets(elf_program_header, - program_header_count, - spliced_header, - split_header, - hole_start, - hole_size); - - // Finally, order loadable segments by offset/address. The crazy linker - // contains assumptions about loadable segment ordering. - SortOrderSensitiveProgramHeaders(elf_program_header, - program_header_count); -} - -// Helper for ResizeSection(). Undo the work of SplitProgramHeadersForHole(). -void CoalesceProgramHeadersForHole(Elf* elf, - ELF::Off hole_start, - ssize_t hole_size) { - CHECK(hole_size > 0); - const ELF::Ehdr* elf_header = ELF::getehdr(elf); - CHECK(elf_header); - - ELF::Phdr* elf_program_header = ELF::getphdr(elf); - CHECK(elf_program_header); - - const size_t program_header_count = elf_header->e_phnum; - - // Locate the segment that we overwrote to form the new LOAD entry, and - // the segment that we split into two parts on packing. - ELF::Phdr* spliced_header = - FindFirstLoadSegment(elf_program_header, program_header_count); - ELF::Phdr* split_header = - FindOriginalFirstLoadSegment(elf_program_header, program_header_count); - - VLOG(1) << "phdr[" << spliced_header - elf_program_header << "] stack"; - VLOG(1) << "phdr[" << split_header - elf_program_header << "] coalesce"; - - // Find the last section in the second segment we are coalescing. - Elf_Scn* last_section = - FindLastSectionInSegment(elf, split_header, hole_start, hole_size); - - size_t string_index; - elf_getshdrstrndx(elf, &string_index); - - const ELF::Shdr* section_header = ELF::getshdr(last_section); - std::string name = elf_strptr(elf, string_index, section_header->sh_name); - VLOG(1) << "section " << name << " coalesced"; - - // Rewrite the coalesced segment into split_header. - const ELF::Shdr* last_section_header = ELF::getshdr(last_section); - split_header->p_offset = spliced_header->p_offset; - CHECK(split_header->p_vaddr == split_header->p_paddr); - split_header->p_vaddr = spliced_header->p_vaddr; - split_header->p_paddr = spliced_header->p_vaddr; - CHECK(split_header->p_filesz == split_header->p_memsz); - split_header->p_filesz = - last_section_header->sh_offset + last_section_header->sh_size; - split_header->p_memsz = - last_section_header->sh_offset + last_section_header->sh_size; - - // Reconstruct the original GNU_STACK segment into spliced_header. - spliced_header->p_type = PT_GNU_STACK; - spliced_header->p_offset = 0; - spliced_header->p_vaddr = 0; - spliced_header->p_paddr = 0; - spliced_header->p_filesz = 0; - spliced_header->p_memsz = 0; - spliced_header->p_flags = PF_R | PF_W; - spliced_header->p_align = ELF::kGnuStackSegmentAlignment; - - // Adjust the offsets of all program headers that are not one of the pair - // we just coalesced. - AdjustProgramHeaderOffsets(elf_program_header, - program_header_count, - spliced_header, - split_header, - hole_start, - hole_size); - - // Finally, order loadable segments by offset/address. The crazy linker - // contains assumptions about loadable segment ordering. - SortOrderSensitiveProgramHeaders(elf_program_header, - program_header_count); -} - -// Helper for ResizeSection(). Rewrite program headers. -void RewriteProgramHeadersForHole(Elf* elf, - ELF::Off hole_start, - ssize_t hole_size) { - // If hole_size is negative then we are removing a piece of the file, and - // we want to split program headers so that we keep the same addresses - // for text and data. If positive, then we are putting that piece of the - // file back in, so we coalesce the previously split program headers. - if (hole_size < 0) - SplitProgramHeadersForHole(elf, hole_start, hole_size); - else if (hole_size > 0) - CoalesceProgramHeadersForHole(elf, hole_start, hole_size); + // Adjust the offsets and p_vaddrs + AdjustProgramHeaderOffsets(elf_program_header, + program_header_count, + hole_start, + hole_size); } // Helper for ResizeSection(). Locate and return the dynamic section. -Elf_Scn* GetDynamicSection(Elf* elf) { - const ELF::Ehdr* elf_header = ELF::getehdr(elf); +template +static Elf_Scn* GetDynamicSection(Elf* elf) { + const typename ELF::Ehdr* elf_header = ELF::getehdr(elf); CHECK(elf_header); - const ELF::Phdr* elf_program_header = ELF::getphdr(elf); + const typename ELF::Phdr* elf_program_header = ELF::getphdr(elf); CHECK(elf_program_header); // Find the program header that describes the dynamic section. - const ELF::Phdr* dynamic_program_header = NULL; + const typename ELF::Phdr* dynamic_program_header = NULL; for (size_t i = 0; i < elf_header->e_phnum; ++i) { - const ELF::Phdr* program_header = &elf_program_header[i]; + const typename ELF::Phdr* program_header = &elf_program_header[i]; if (program_header->p_type == PT_DYNAMIC) { dynamic_program_header = program_header; @@ -741,7 +393,7 @@ Elf_Scn* GetDynamicSection(Elf* elf) { Elf_Scn* dynamic_section = NULL; Elf_Scn* section = NULL; while ((section = elf_nextscn(elf, section)) != NULL) { - ELF::Shdr* section_header = ELF::getshdr(section); + typename ELF::Shdr* section_header = ELF::getshdr(section); if (section_header->sh_offset == dynamic_program_header->p_offset) { dynamic_section = section; @@ -753,47 +405,61 @@ Elf_Scn* GetDynamicSection(Elf* elf) { } // Helper for ResizeSection(). Adjust the .dynamic section for the hole. -template -void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section, - ELF::Off hole_start, - ssize_t hole_size) { +template +void ElfFile::AdjustDynamicSectionForHole(Elf_Scn* dynamic_section, + typename ELF::Off hole_start, + ssize_t hole_size, + relocations_type_t relocations_type) { + CHECK(relocations_type != NONE); Elf_Data* data = GetSectionData(dynamic_section); - const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); - std::vector dynamics( + auto dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( dynamic_base, dynamic_base + data->d_size / sizeof(dynamics[0])); + if (hole_size > 0) { // expanding + hole_start += hole_size; + } + for (size_t i = 0; i < dynamics.size(); ++i) { - ELF::Dyn* dynamic = &dynamics[i]; - const ELF::Sword tag = dynamic->d_tag; + typename ELF::Dyn* dynamic = &dynamics[i]; + const typename ELF::Sword tag = dynamic->d_tag; + + // Any tags that hold offsets are adjustment candidates. + const bool is_adjustable = (tag == DT_PLTGOT || + tag == DT_HASH || + tag == DT_GNU_HASH || + tag == DT_STRTAB || + tag == DT_SYMTAB || + tag == DT_RELA || + tag == DT_INIT || + tag == DT_FINI || + tag == DT_REL || + tag == DT_JMPREL || + tag == DT_INIT_ARRAY || + tag == DT_FINI_ARRAY || + tag == DT_ANDROID_REL|| + tag == DT_ANDROID_RELA); + + if (is_adjustable && dynamic->d_un.d_ptr <= hole_start) { + dynamic->d_un.d_ptr -= hole_size; + VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag + << " d_ptr adjusted to " << dynamic->d_un.d_ptr; + } // DT_RELSZ or DT_RELASZ indicate the overall size of relocations. // Only one will be present. Adjust by hole size. - if (tag == DT_RELSZ || tag == DT_RELASZ) { + if (tag == DT_RELSZ || tag == DT_RELASZ || tag == DT_ANDROID_RELSZ || tag == DT_ANDROID_RELASZ) { dynamic->d_un.d_val += hole_size; VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag << " d_val adjusted to " << dynamic->d_un.d_val; } - // DT_RELCOUNT or DT_RELACOUNT hold the count of relative relocations. - // Only one will be present. Packing reduces it to the alignment - // padding, if any; unpacking restores it to its former value. The - // crazy linker does not use it, but we update it anyway. - if (tag == DT_RELCOUNT || tag == DT_RELACOUNT) { - // Cast sizeof to a signed type to avoid the division result being - // promoted into an unsigned size_t. - const ssize_t sizeof_rel = static_cast(sizeof(Rel)); - dynamic->d_un.d_val += hole_size / sizeof_rel; - VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag - << " d_val adjusted to " << dynamic->d_un.d_val; - } + // Ignore DT_RELCOUNT and DT_RELACOUNT: (1) nobody uses them and + // technically (2) the relative relocation count is not changed. - // DT_RELENT and DT_RELAENT do not change, but make sure they are what - // we expect. Only one will be present. - if (tag == DT_RELENT || tag == DT_RELAENT) { - CHECK(dynamic->d_un.d_val == sizeof(Rel)); - } + // DT_RELENT and DT_RELAENT don't change, ignore them as well. } void* section_data = &dynamics[0]; @@ -804,19 +470,19 @@ void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section, // Resize a section. If the new size is larger than the current size, open // up a hole by increasing file offsets that come after the hole. If smaller // than the current size, remove the hole by decreasing those offsets. -template -void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size) { - ELF::Shdr* section_header = ELF::getshdr(section); - if (section_header->sh_size == new_size) - return; +template +void ElfFile::ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size, + typename ELF::Word new_sh_type, + relocations_type_t relocations_type) { - // Note if we are resizing the real dyn relocations. size_t string_index; elf_getshdrstrndx(elf, &string_index); - const std::string section_name = - elf_strptr(elf, string_index, section_header->sh_name); - const bool is_relocations_resize = - (section_name == ".rel.dyn" || section_name == ".rela.dyn"); + auto section_header = ELF::getshdr(section); + std::string name = elf_strptr(elf, string_index, section_header->sh_name); + + if (section_header->sh_size == new_size) { + return; + } // Require that the section size and the data size are the same. True // in practice for all sections we resize when packing or unpacking. @@ -827,61 +493,72 @@ void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size) { // data that we can validly expand). CHECK(data->d_size && data->d_buf); - const ELF::Off hole_start = section_header->sh_offset; + const auto hole_start = section_header->sh_offset; const ssize_t hole_size = new_size - data->d_size; - VLOG_IF(1, (hole_size > 0)) << "expand section size = " << data->d_size; - VLOG_IF(1, (hole_size < 0)) << "shrink section size = " << data->d_size; + VLOG_IF(1, (hole_size > 0)) << "expand section (" << name << ") size: " << + data->d_size << " -> " << (data->d_size + hole_size); + VLOG_IF(1, (hole_size < 0)) << "shrink section (" << name << ") size: " << + data->d_size << " -> " << (data->d_size + hole_size); + + // libelf overrides sh_entsize for known sh_types, so it does not matter what we set + // for SHT_REL/SHT_RELA. + typename ELF::Xword new_entsize = + (new_sh_type == SHT_ANDROID_REL || new_sh_type == SHT_ANDROID_RELA) ? 1 : 0; + + VLOG(1) << "Update section (" << name << ") entry size: " << + section_header->sh_entsize << " -> " << new_entsize; // Resize the data and the section header. data->d_size += hole_size; section_header->sh_size += hole_size; + section_header->sh_entsize = new_entsize; + section_header->sh_type = new_sh_type; // Add the hole size to all offsets in the ELF file that are after the // start of the hole. If the hole size is positive we are expanding the // section to create a new hole; if negative, we are closing up a hole. // Start with the main ELF header. - ELF::Ehdr* elf_header = ELF::getehdr(elf); - AdjustElfHeaderForHole(elf_header, hole_start, hole_size); + typename ELF::Ehdr* elf_header = ELF::getehdr(elf); + AdjustElfHeaderForHole(elf_header, hole_start, hole_size); // Adjust all section headers. - AdjustSectionHeadersForHole(elf, hole_start, hole_size); + AdjustSectionHeadersForHole(elf, hole_start, hole_size); - // If resizing the dynamic relocations, rewrite the program headers to - // either split or coalesce segments, and adjust dynamic entries to match. - if (is_relocations_resize) { - RewriteProgramHeadersForHole(elf, hole_start, hole_size); + // Rewrite the program headers to either split or coalesce segments, + // and adjust dynamic entries to match. + RewriteProgramHeadersForHole(elf, hole_start, hole_size); - Elf_Scn* dynamic_section = GetDynamicSection(elf); - AdjustDynamicSectionForHole(dynamic_section, hole_start, hole_size); - } + Elf_Scn* dynamic_section = GetDynamicSection(elf); + AdjustDynamicSectionForHole(dynamic_section, hole_start, hole_size, relocations_type); } // Find the first slot in a dynamics array with the given tag. The array // always ends with a free (unused) element, and which we exclude from the // search. Returns dynamics->size() if not found. -size_t FindDynamicEntry(ELF::Sword tag, - std::vector* dynamics) { +template +static size_t FindDynamicEntry(typename ELF::Sword tag, + std::vector* dynamics) { // Loop until the penultimate entry. We exclude the end sentinel. for (size_t i = 0; i < dynamics->size() - 1; ++i) { - if (dynamics->at(i).d_tag == tag) + if (dynamics->at(i).d_tag == tag) { return i; + } } // The tag was not found. return dynamics->size(); } -// Replace the first free (unused) slot in a dynamics vector with the given -// value. The vector always ends with a free (unused) element, so the slot -// found cannot be the last one in the vector. -void AddDynamicEntry(const ELF::Dyn& dyn, - std::vector* dynamics) { - const size_t slot = FindDynamicEntry(DT_NULL, dynamics); +// Replace dynamic entry. +template +static void ReplaceDynamicEntry(typename ELF::Sword tag, + const typename ELF::Dyn& dyn, + std::vector* dynamics) { + const size_t slot = FindDynamicEntry(tag, dynamics); if (slot == dynamics->size()) { - LOG(FATAL) << "No spare dynamic array slots found " - << "(to fix, increase gold's --spare-dynamic-tags value)"; + LOG(FATAL) << "Dynamic slot is not found for tag=" << tag; } // Replace this entry with the one supplied. @@ -889,53 +566,10 @@ void AddDynamicEntry(const ELF::Dyn& dyn, VLOG(1) << "dynamic[" << slot << "] overwritten with " << dyn.d_tag; } -// Remove the element in the dynamics vector that matches the given tag with -// unused slot data. Shuffle the following elements up, and ensure that the -// last is the null sentinel. -void RemoveDynamicEntry(ELF::Sword tag, - std::vector* dynamics) { - const size_t slot = FindDynamicEntry(tag, dynamics); - CHECK(slot != dynamics->size()); - - // Remove this entry by shuffling up everything that follows. - for (size_t i = slot; i < dynamics->size() - 1; ++i) { - dynamics->at(i) = dynamics->at(i + 1); - VLOG(1) << "dynamic[" << i - << "] overwritten with dynamic[" << i + 1 << "]"; - } - - // Ensure that the end sentinel is still present. - CHECK(dynamics->at(dynamics->size() - 1).d_tag == DT_NULL); -} - -// Construct a null relocation without addend. -void NullRelocation(ELF::Rel* relocation) { - relocation->r_offset = 0; - relocation->r_info = ELF_R_INFO(0, ELF::kNoRelocationCode); -} - -// Construct a null relocation with addend. -void NullRelocation(ELF::Rela* relocation) { - relocation->r_offset = 0; - relocation->r_info = ELF_R_INFO(0, ELF::kNoRelocationCode); - relocation->r_addend = 0; -} - -// Pad relocations with the given number of null entries. Generates its -// null entry with the appropriate NullRelocation() invocation. -template -void PadRelocations(size_t count, std::vector* relocations) { - Rel null_relocation; - NullRelocation(&null_relocation); - std::vector padding(count, null_relocation); - relocations->insert(relocations->end(), padding.begin(), padding.end()); -} - -} // namespace - // Remove relative entries from dynamic relocations and write as packed // data into android packed relocations. -bool ElfFile::PackRelocations() { +template +bool ElfFile::PackRelocations() { // Load the ELF file into libelf. if (!Load()) { LOG(ERROR) << "Failed to load as ELF"; @@ -944,175 +578,129 @@ bool ElfFile::PackRelocations() { // Retrieve the current dynamic relocations section data. Elf_Data* data = GetSectionData(relocations_section_); + // we always pack rela, because packed format is pretty much the same + std::vector relocations; if (relocations_type_ == REL) { // Convert data to a vector of relocations. - const ELF::Rel* relocations_base = reinterpret_cast(data->d_buf); - std::vector relocations( - relocations_base, - relocations_base + data->d_size / sizeof(relocations[0])); - + const typename ELF::Rel* relocations_base = reinterpret_cast(data->d_buf); + ConvertRelArrayToRelaVector(relocations_base, + data->d_size / sizeof(typename ELF::Rel), &relocations); LOG(INFO) << "Relocations : REL"; - return PackTypedRelocations(relocations); - } - - if (relocations_type_ == RELA) { + } else if (relocations_type_ == RELA) { // Convert data to a vector of relocations with addends. - const ELF::Rela* relocations_base = - reinterpret_cast(data->d_buf); - std::vector relocations( + const typename ELF::Rela* relocations_base = reinterpret_cast(data->d_buf); + relocations = std::vector( relocations_base, relocations_base + data->d_size / sizeof(relocations[0])); LOG(INFO) << "Relocations : RELA"; - return PackTypedRelocations(relocations); + } else { + NOTREACHED(); } - NOTREACHED(); - return false; + return PackTypedRelocations(&relocations); } // Helper for PackRelocations(). Rel type is one of ELF::Rel or ELF::Rela. -template -bool ElfFile::PackTypedRelocations(const std::vector& relocations) { - // Filter relocations into those that are relative and others. - std::vector relative_relocations; - std::vector other_relocations; +template +bool ElfFile::PackTypedRelocations(std::vector* relocations) { + typedef typename ELF::Rela Rela; - for (size_t i = 0; i < relocations.size(); ++i) { - const Rel& relocation = relocations[i]; - if (ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode) { - CHECK(ELF_R_SYM(relocation.r_info) == 0); - relative_relocations.push_back(relocation); - } else { - other_relocations.push_back(relocation); - } - } - LOG(INFO) << "Relative : " << relative_relocations.size() << " entries"; - LOG(INFO) << "Other : " << other_relocations.size() << " entries"; - LOG(INFO) << "Total : " << relocations.size() << " entries"; - - // If no relative relocations then we have nothing packable. Perhaps + // If no relocations then we have nothing packable. Perhaps // the shared object has already been packed? - if (relative_relocations.empty()) { - LOG(ERROR) << "No relative relocations found (already packed?)"; + if (relocations->empty()) { + LOG(ERROR) << "No relocations found (already packed?)"; return false; } - // If not padding fully, apply only enough padding to preserve alignment. - // Otherwise, pad so that we do not shrink the relocations section at all. - if (!is_padding_relocations_) { - // Calculate the size of the hole we will close up when we rewrite - // dynamic relocations. - ssize_t hole_size = - relative_relocations.size() * sizeof(relative_relocations[0]); - const ssize_t unaligned_hole_size = hole_size; + const size_t rel_size = + relocations_type_ == RELA ? sizeof(typename ELF::Rela) : sizeof(typename ELF::Rel); + const size_t initial_bytes = relocations->size() * rel_size; - // Adjust the actual hole size to preserve alignment. We always adjust - // by a whole number of NONE-type relocations. - while (hole_size % kPreserveAlignment) - hole_size -= sizeof(relative_relocations[0]); - LOG(INFO) << "Compaction : " << hole_size << " bytes"; - - // Adjusting for alignment may have removed any packing benefit. - if (hole_size == 0) { - LOG(INFO) << "Too few relative relocations to pack after alignment"; - return false; - } - - // Find the padding needed in other_relocations to preserve alignment. - // Ensure that we never completely empty the real relocations section. - size_t padding_bytes = unaligned_hole_size - hole_size; - if (padding_bytes == 0 && other_relocations.size() == 0) { - do { - padding_bytes += sizeof(relative_relocations[0]); - } while (padding_bytes % kPreserveAlignment); - } - CHECK(padding_bytes % sizeof(other_relocations[0]) == 0); - const size_t padding = padding_bytes / sizeof(other_relocations[0]); - - // Padding may have removed any packing benefit. - if (padding >= relative_relocations.size()) { - LOG(INFO) << "Too few relative relocations to pack after padding"; - return false; - } - - // Add null relocations to other_relocations to preserve alignment. - PadRelocations(padding, &other_relocations); - LOG(INFO) << "Alignment pad : " << padding << " relocations"; - } else { - // If padding, add NONE-type relocations to other_relocations to make it - // the same size as the the original relocations we read in. This makes - // the ResizeSection() below a no-op. - const size_t padding = relocations.size() - other_relocations.size(); - PadRelocations(padding, &other_relocations); - } - - // Pack relative relocations. - const size_t initial_bytes = - relative_relocations.size() * sizeof(relative_relocations[0]); - LOG(INFO) << "Unpacked relative: " << initial_bytes << " bytes"; + LOG(INFO) << "Unpacked : " << initial_bytes << " bytes"; std::vector packed; - RelocationPacker packer; - packer.PackRelativeRelocations(relative_relocations, &packed); - const void* packed_data = &packed[0]; - const size_t packed_bytes = packed.size() * sizeof(packed[0]); - LOG(INFO) << "Packed relative: " << packed_bytes << " bytes"; + RelocationPacker packer; + + // Pack relocations: dry run to estimate memory savings. + packer.PackRelocations(*relocations, &packed); + const size_t packed_bytes_estimate = packed.size() * sizeof(packed[0]); + LOG(INFO) << "Packed (no padding): " << packed_bytes_estimate << " bytes"; - // If we have insufficient relative relocations to form a run then - // packing fails. if (packed.empty()) { - LOG(INFO) << "Too few relative relocations to pack"; + LOG(INFO) << "Too few relocations to pack"; return false; } + // Pre-calculate the size of the hole we will close up when we rewrite + // dynamic relocations. We have to adjust relocation addresses to + // account for this. + typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_); + ssize_t hole_size = initial_bytes - packed_bytes_estimate; + + // hole_size needs to be page_aligned. + hole_size -= hole_size % kPreserveAlignment; + + LOG(INFO) << "Compaction : " << hole_size << " bytes"; + + // Adjusting for alignment may have removed any packing benefit. + if (hole_size == 0) { + LOG(INFO) << "Too few relocations to pack after alignment"; + return false; + } + + if (hole_size <= 0) { + LOG(INFO) << "Packing relocations saves no space"; + return false; + } + + size_t data_padding_bytes = is_padding_relocations_ ? + initial_bytes - packed_bytes_estimate : + initial_bytes - hole_size - packed_bytes_estimate; + + // pad data + std::vector padding(data_padding_bytes, 0); + packed.insert(packed.end(), padding.begin(), padding.end()); + + const void* packed_data = &packed[0]; + // Run a loopback self-test as a check that packing is lossless. - std::vector unpacked; - packer.UnpackRelativeRelocations(packed, &unpacked); - CHECK(unpacked.size() == relative_relocations.size()); + std::vector unpacked; + packer.UnpackRelocations(packed, &unpacked); + CHECK(unpacked.size() == relocations->size()); CHECK(!memcmp(&unpacked[0], - &relative_relocations[0], + &relocations->at(0), unpacked.size() * sizeof(unpacked[0]))); - // Make sure packing saved some space. - if (packed_bytes >= initial_bytes) { - LOG(INFO) << "Packing relative relocations saves no space"; - return false; - } + // Rewrite the current dynamic relocations section with packed one then shrink it to size. + const size_t bytes = packed.size() * sizeof(packed[0]); + ResizeSection(elf_, relocations_section_, bytes, + relocations_type_ == REL ? SHT_ANDROID_REL : SHT_ANDROID_RELA, relocations_type_); + RewriteSectionData(relocations_section_, packed_data, bytes); - // Rewrite the current dynamic relocations section to be only the ARM - // non-relative relocations, then shrink it to size. - const void* section_data = &other_relocations[0]; - const size_t bytes = other_relocations.size() * sizeof(other_relocations[0]); - ResizeSection(elf_, relocations_section_, bytes); - RewriteSectionData(relocations_section_, section_data, bytes); + // TODO (dimitry): fix string table and replace .rel.dyn/plt with .android.rel.dyn/plt - // Rewrite the current packed android relocations section to hold the packed - // relative relocations. - ResizeSection(elf_, android_relocations_section_, packed_bytes); - RewriteSectionData(android_relocations_section_, packed_data, packed_bytes); - - // Rewrite .dynamic to include two new tags describing the packed android + // Rewrite .dynamic and rename relocation tags describing the packed android // relocations. Elf_Data* data = GetSectionData(dynamic_section_); - const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); - std::vector dynamics( + const typename ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( dynamic_base, dynamic_base + data->d_size / sizeof(dynamics[0])); - // Use two of the spare slots to describe the packed section. - ELF::Shdr* section_header = ELF::getshdr(android_relocations_section_); + section_header = ELF::getshdr(relocations_section_); { - ELF::Dyn dyn; - dyn.d_tag = DT_ANDROID_REL_OFFSET; - dyn.d_un.d_ptr = section_header->sh_offset; - AddDynamicEntry(dyn, &dynamics); + typename ELF::Dyn dyn; + dyn.d_tag = relocations_type_ == REL ? DT_ANDROID_REL : DT_ANDROID_RELA; + dyn.d_un.d_ptr = section_header->sh_addr; + ReplaceDynamicEntry(relocations_type_ == REL ? DT_REL : DT_RELA, dyn, &dynamics); } { - ELF::Dyn dyn; - dyn.d_tag = DT_ANDROID_REL_SIZE; + typename ELF::Dyn dyn; + dyn.d_tag = relocations_type_ == REL ? DT_ANDROID_RELSZ : DT_ANDROID_RELASZ; dyn.d_un.d_val = section_header->sh_size; - AddDynamicEntry(dyn, &dynamics); + ReplaceDynamicEntry(relocations_type_ == REL ? DT_RELSZ : DT_RELASZ, dyn, &dynamics); } + const void* dynamics_data = &dynamics[0]; const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]); RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes); @@ -1124,15 +712,17 @@ bool ElfFile::PackTypedRelocations(const std::vector& relocations) { // Find packed relative relocations in the packed android relocations // section, unpack them, and rewrite the dynamic relocations section to // contain unpacked data. -bool ElfFile::UnpackRelocations() { +template +bool ElfFile::UnpackRelocations() { // Load the ELF file into libelf. if (!Load()) { LOG(ERROR) << "Failed to load as ELF"; return false; } + typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_); // Retrieve the current packed android relocations section data. - Elf_Data* data = GetSectionData(android_relocations_section_); + Elf_Data* data = GetSectionData(relocations_section_); // Convert data to a vector of bytes. const uint8_t* packed_base = reinterpret_cast(data->d_buf); @@ -1140,118 +730,94 @@ bool ElfFile::UnpackRelocations() { packed_base, packed_base + data->d_size / sizeof(packed[0])); - if (packed.size() > 3 && + if ((section_header->sh_type == SHT_ANDROID_RELA || section_header->sh_type == SHT_ANDROID_REL) && + packed.size() > 3 && packed[0] == 'A' && packed[1] == 'P' && - packed[2] == 'R' && - packed[3] == '1') { - // Signature is APR1, unpack relocations. - CHECK(relocations_type_ == REL); - LOG(INFO) << "Relocations : REL"; - return UnpackTypedRelocations(packed); + (packed[2] == 'U' || packed[2] == 'S') && + packed[3] == '2') { + LOG(INFO) << "Relocations : " << (relocations_type_ == REL ? "REL" : "RELA"); + } else { + LOG(ERROR) << "Packed relocations not found (not packed?)"; + return false; } - if (packed.size() > 3 && - packed[0] == 'A' && - packed[1] == 'P' && - packed[2] == 'A' && - packed[3] == '1') { - // Signature is APA1, unpack relocations with addends. - CHECK(relocations_type_ == RELA); - LOG(INFO) << "Relocations : RELA"; - return UnpackTypedRelocations(packed); - } - - LOG(ERROR) << "Packed relative relocations not found (not packed?)"; - return false; + return UnpackTypedRelocations(packed); } // Helper for UnpackRelocations(). Rel type is one of ELF::Rel or ELF::Rela. -template -bool ElfFile::UnpackTypedRelocations(const std::vector& packed) { +template +bool ElfFile::UnpackTypedRelocations(const std::vector& packed) { // Unpack the data to re-materialize the relative relocations. const size_t packed_bytes = packed.size() * sizeof(packed[0]); - LOG(INFO) << "Packed relative: " << packed_bytes << " bytes"; - std::vector relative_relocations; - RelocationPacker packer; - packer.UnpackRelativeRelocations(packed, &relative_relocations); - const size_t unpacked_bytes = - relative_relocations.size() * sizeof(relative_relocations[0]); - LOG(INFO) << "Unpacked relative: " << unpacked_bytes << " bytes"; + LOG(INFO) << "Packed : " << packed_bytes << " bytes"; + std::vector unpacked_relocations; + RelocationPacker packer; + packer.UnpackRelocations(packed, &unpacked_relocations); + + const size_t relocation_entry_size = + relocations_type_ == REL ? sizeof(typename ELF::Rel) : sizeof(typename ELF::Rela); + const size_t unpacked_bytes = unpacked_relocations.size() * relocation_entry_size; + LOG(INFO) << "Unpacked : " << unpacked_bytes << " bytes"; // Retrieve the current dynamic relocations section data. Elf_Data* data = GetSectionData(relocations_section_); - // Interpret data as relocations. - const Rel* relocations_base = reinterpret_cast(data->d_buf); - std::vector relocations( - relocations_base, - relocations_base + data->d_size / sizeof(relocations[0])); - - std::vector other_relocations; - size_t padding = 0; - - // Filter relocations to locate any that are NONE-type. These will occur - // if padding was turned on for packing. - for (size_t i = 0; i < relocations.size(); ++i) { - const Rel& relocation = relocations[i]; - if (ELF_R_TYPE(relocation.r_info) != ELF::kNoRelocationCode) { - other_relocations.push_back(relocation); - } else { - ++padding; - } - } - LOG(INFO) << "Relative : " << relative_relocations.size() << " entries"; - LOG(INFO) << "Other : " << other_relocations.size() << " entries"; + LOG(INFO) << "Relocations : " << unpacked_relocations.size() << " entries"; // If we found the same number of null relocation entries in the dynamic // relocations section as we hold as unpacked relative relocations, then // this is a padded file. - const bool is_padded = padding == relative_relocations.size(); - // Unless padded, report by how much we expand the file. + const bool is_padded = packed_bytes == unpacked_bytes; + + // Unless padded, pre-apply relative relocations to account for the + // hole, and pre-adjust all relocation offsets accordingly. + typename ELF::Shdr* section_header = ELF::getshdr(relocations_section_); + if (!is_padded) { - // Calculate the size of the hole we will open up when we rewrite - // dynamic relocations. - ssize_t hole_size = - relative_relocations.size() * sizeof(relative_relocations[0]); - - // Adjust the hole size for the padding added to preserve alignment. - hole_size -= padding * sizeof(other_relocations[0]); - LOG(INFO) << "Expansion : " << hole_size << " bytes"; + LOG(INFO) << "Expansion : " << unpacked_bytes - packed_bytes << " bytes"; } - // Rewrite the current dynamic relocations section to be the relative - // relocations followed by other relocations. This is the usual order in - // which we find them after linking, so this action will normally put the - // entire dynamic relocations section back to its pre-split-and-packed state. - relocations.assign(relative_relocations.begin(), relative_relocations.end()); - relocations.insert(relocations.end(), - other_relocations.begin(), other_relocations.end()); - const void* section_data = &relocations[0]; - const size_t bytes = relocations.size() * sizeof(relocations[0]); - LOG(INFO) << "Total : " << relocations.size() << " entries"; - ResizeSection(elf_, relocations_section_, bytes); - RewriteSectionData(relocations_section_, section_data, bytes); + // Rewrite the current dynamic relocations section with unpacked version of + // relocations. + const void* section_data = nullptr; + std::vector unpacked_rel_relocations; + if (relocations_type_ == RELA) { + section_data = &unpacked_relocations[0]; + } else if (relocations_type_ == REL) { + ConvertRelaVectorToRelVector(unpacked_relocations, &unpacked_rel_relocations); + section_data = &unpacked_rel_relocations[0]; + } else { + NOTREACHED(); + } - // Nearly empty the current packed android relocations section. Leaves a - // four-byte stub so that some data remains allocated to the section. - // This is a convenience which allows us to re-pack this file again without - // having to remove the section and then add a new small one with objcopy. - // The way we resize sections relies on there being some data in a section. - ResizeSection( - elf_, android_relocations_section_, sizeof(kStubIdentifier)); - RewriteSectionData( - android_relocations_section_, &kStubIdentifier, sizeof(kStubIdentifier)); + ResizeSection(elf_, relocations_section_, unpacked_bytes, + relocations_type_ == REL ? SHT_REL : SHT_RELA, relocations_type_); + RewriteSectionData(relocations_section_, section_data, unpacked_bytes); // Rewrite .dynamic to remove two tags describing packed android relocations. data = GetSectionData(dynamic_section_); - const ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); - std::vector dynamics( + const typename ELF::Dyn* dynamic_base = reinterpret_cast(data->d_buf); + std::vector dynamics( dynamic_base, dynamic_base + data->d_size / sizeof(dynamics[0])); - RemoveDynamicEntry(DT_ANDROID_REL_OFFSET, &dynamics); - RemoveDynamicEntry(DT_ANDROID_REL_SIZE, &dynamics); + { + typename ELF::Dyn dyn; + dyn.d_tag = relocations_type_ == REL ? DT_REL : DT_RELA; + dyn.d_un.d_ptr = section_header->sh_addr; + ReplaceDynamicEntry(relocations_type_ == REL ? DT_ANDROID_REL : DT_ANDROID_RELA, + dyn, &dynamics); + } + + { + typename ELF::Dyn dyn; + dyn.d_tag = relocations_type_ == REL ? DT_RELSZ : DT_RELASZ; + dyn.d_un.d_val = section_header->sh_size; + ReplaceDynamicEntry(relocations_type_ == REL ? DT_ANDROID_RELSZ : DT_ANDROID_RELASZ, + dyn, &dynamics); + } + const void* dynamics_data = &dynamics[0]; const size_t dynamics_bytes = dynamics.size() * sizeof(dynamics[0]); RewriteSectionData(dynamic_section_, dynamics_data, dynamics_bytes); @@ -1261,7 +827,8 @@ bool ElfFile::UnpackTypedRelocations(const std::vector& packed) { } // Flush rewritten shared object file data. -void ElfFile::Flush() { +template +void ElfFile::Flush() { // Flag all ELF data held in memory as needing to be written back to the // file, and tell libelf that we have controlled the file layout. elf_flagelf(elf_, ELF_C_SET, ELF_F_DIRTY); @@ -1269,6 +836,10 @@ void ElfFile::Flush() { // Write ELF data back to disk. const off_t file_bytes = elf_update(elf_, ELF_C_WRITE); + if (file_bytes == -1) { + LOG(ERROR) << "elf_update failed: " << elf_errmsg(elf_errno()); + } + CHECK(file_bytes > 0); VLOG(1) << "elf_update returned: " << file_bytes; @@ -1280,4 +851,32 @@ void ElfFile::Flush() { CHECK(truncate == 0); } +template +void ElfFile::ConvertRelArrayToRelaVector(const typename ELF::Rel* rel_array, + size_t rel_array_size, + std::vector* rela_vector) { + for (size_t i = 0; ipush_back(rela); + } +} + +template +void ElfFile::ConvertRelaVectorToRelVector(const std::vector& rela_vector, + std::vector* rel_vector) { + for (auto rela : rela_vector) { + typename ELF::Rel rel; + rel.r_offset = rela.r_offset; + rel.r_info = rela.r_info; + CHECK(rela.r_addend == 0); + rel_vector->push_back(rel); + } +} + +template class ElfFile; +template class ElfFile; + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_file.h b/tools/relocation_packer/src/elf_file.h index 655027497..73c31923f 100644 --- a/tools/relocation_packer/src/elf_file.h +++ b/tools/relocation_packer/src/elf_file.h @@ -67,12 +67,13 @@ namespace relocation_packer { // An ElfFile reads shared objects, and shuttles relative relocations // between .rel.dyn or .rela.dyn and .android.rel.dyn or .android.rela.dyn // sections. +template class ElfFile { public: explicit ElfFile(int fd) : fd_(fd), is_padding_relocations_(false), elf_(NULL), relocations_section_(NULL), dynamic_section_(NULL), - android_relocations_section_(NULL), relocations_type_(NONE) {} + relocations_type_(NONE) {} ~ElfFile() {} // Set padding mode. When padding, PackRelocations() will not shrink @@ -92,6 +93,10 @@ class ElfFile { bool UnpackRelocations(); private: + enum relocations_type_t { + NONE = 0, REL, RELA + }; + // Load a new ElfFile from a filedescriptor. If flushing, the file must // be open for read/write. Returns true on successful ELF file load. // |fd| is an open file descriptor for the shared object. @@ -99,17 +104,34 @@ class ElfFile { // Templated packer, helper for PackRelocations(). Rel type is one of // ELF::Rel or ELF::Rela. - template - bool PackTypedRelocations(const std::vector& relocations); + bool PackTypedRelocations(std::vector* relocations); // Templated unpacker, helper for UnpackRelocations(). Rel type is one of // ELF::Rel or ELF::Rela. - template bool UnpackTypedRelocations(const std::vector& packed); // Write ELF file changes. void Flush(); + void AdjustRelativeRelocationTargets(typename ELF::Off hole_start, + ssize_t hole_size, + std::vector* relocations); + + static void ResizeSection(Elf* elf, Elf_Scn* section, size_t new_size, + typename ELF::Word new_sh_type, relocations_type_t relocations_type); + + static void AdjustDynamicSectionForHole(Elf_Scn* dynamic_section, + typename ELF::Off hole_start, + ssize_t hole_size, + relocations_type_t relocations_type); + + static void ConvertRelArrayToRelaVector(const typename ELF::Rel* rel_array, size_t rel_array_size, + std::vector* rela_vector); + + static void ConvertRelaVectorToRelVector(const std::vector& rela_vector, + std::vector* rel_vector); + + // File descriptor opened on the shared object. int fd_; @@ -123,10 +145,9 @@ class ElfFile { // Sections that we manipulate, assigned by Load(). Elf_Scn* relocations_section_; Elf_Scn* dynamic_section_; - Elf_Scn* android_relocations_section_; // Relocation type found, assigned by Load(). - enum { NONE = 0, REL, RELA } relocations_type_; + relocations_type_t relocations_type_; }; } // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_file_unittest.cc b/tools/relocation_packer/src/elf_file_unittest.cc index 37abd0d95..434f10102 100644 --- a/tools/relocation_packer/src/elf_file_unittest.cc +++ b/tools/relocation_packer/src/elf_file_unittest.cc @@ -11,12 +11,7 @@ #include #include "debug.h" #include "elf_traits.h" -#include "testing/gtest/include/gtest/gtest.h" - -// Macro stringification. -// https://gcc.gnu.org/onlinedocs/cpp/Stringification.html -#define XSTR(S) STR(S) -#define STR(S) #S +#include "gtest/gtest.h" namespace { @@ -27,8 +22,6 @@ void GetDataFilePath(const char* name, std::string* path) { if (bindir) { data_dir = std::string(bindir); } else { - // Test data is in the gyp INTERMEDIATE_DIR subdirectory of the directory - // that contains the current binary. char path[PATH_MAX]; memset(path, 0, sizeof(path)); ASSERT_NE(-1, readlink("/proc/self/exe", path, sizeof(path) - 1)); @@ -37,8 +30,7 @@ void GetDataFilePath(const char* name, std::string* path) { size_t pos = data_dir.rfind('/'); ASSERT_NE(std::string::npos, pos); - data_dir.erase(pos + 1); - data_dir += std::string(XSTR(INTERMEDIATE_DIR)); + data_dir.erase(pos); } *path = data_dir + "/" + name; @@ -49,7 +41,7 @@ void OpenRelocsTestFile(const char* name, FILE** stream) { GetDataFilePath(name, &path); FILE* testfile = fopen(path.c_str(), "rb"); - ASSERT_FALSE(testfile == NULL); + ASSERT_FALSE(testfile == NULL) << "Error opening '" << path << "'"; FILE* temporary = tmpfile(); ASSERT_FALSE(temporary == NULL); @@ -70,15 +62,7 @@ void OpenRelocsTestFile(const char* name, FILE** stream) { *stream = temporary; } -void OpenRelocsTestFiles(FILE** relocs_so, FILE** packed_relocs_so) { - const char* arch = NULL; - if (ELF::kMachine == EM_ARM) { - arch = "arm32"; - } else if (ELF::kMachine == EM_AARCH64) { - arch = "arm64"; - } - ASSERT_FALSE(arch == NULL); - +void OpenRelocsTestFiles(const std::string& arch, FILE** relocs_so, FILE** packed_relocs_so) { const std::string base = std::string("elf_file_unittest_relocs_") + arch; const std::string relocs = base + ".so"; const std::string packed_relocs = base + "_packed.so"; @@ -115,41 +99,9 @@ void CheckFileContentsEqual(FILE* first, FILE* second) { EXPECT_TRUE(feof(first) && feof(second)); } -} // namespace - -namespace relocation_packer { - -TEST(ElfFile, PackRelocations) { - ASSERT_NE(EV_NONE, elf_version(EV_CURRENT)); - - FILE* relocs_so = NULL; - FILE* packed_relocs_so = NULL; - OpenRelocsTestFiles(&relocs_so, &packed_relocs_so); - if (HasFatalFailure()) - return; - - ElfFile elf_file(fileno(relocs_so)); - - // Ensure unpacking fails (not packed). - EXPECT_FALSE(elf_file.UnpackRelocations()); - - // Pack relocations, and check files are now identical. - EXPECT_TRUE(elf_file.PackRelocations()); - CheckFileContentsEqual(relocs_so, packed_relocs_so); - - CloseRelocsTestFiles(relocs_so, packed_relocs_so); -} - -TEST(ElfFile, UnpackRelocations) { - ASSERT_NE(EV_NONE, elf_version(EV_CURRENT)); - - FILE* relocs_so = NULL; - FILE* packed_relocs_so = NULL; - OpenRelocsTestFiles(&relocs_so, &packed_relocs_so); - if (HasFatalFailure()) - return; - - ElfFile elf_file(fileno(packed_relocs_so)); +template +static void ProcessUnpack(FILE* relocs_so, FILE* packed_relocs_so) { + relocation_packer::ElfFile elf_file(fileno(packed_relocs_so)); // Ensure packing fails (already packed). EXPECT_FALSE(elf_file.PackRelocations()); @@ -161,4 +113,76 @@ TEST(ElfFile, UnpackRelocations) { CloseRelocsTestFiles(relocs_so, packed_relocs_so); } +static void RunUnpackRelocationsTestFor(const std::string& arch) { + ASSERT_NE(static_cast(EV_NONE), elf_version(EV_CURRENT)); + + FILE* relocs_so = NULL; + FILE* packed_relocs_so = NULL; + OpenRelocsTestFiles(arch, &relocs_so, &packed_relocs_so); + + if (relocs_so != NULL && packed_relocs_so != NULL) { + // lets detect elf class + ASSERT_EQ(0, fseek(relocs_so, EI_CLASS, SEEK_SET)) + << "Invalid file length: " << strerror(errno); + uint8_t elf_class = 0; + ASSERT_EQ(1U, fread(&elf_class, 1, 1, relocs_so)); + ASSERT_EQ(0, fseek(relocs_so, 0, SEEK_SET)); + if (elf_class == ELFCLASS32) { + ProcessUnpack(relocs_so, packed_relocs_so); + } else { + ProcessUnpack(relocs_so, packed_relocs_so); + } + } +} + +template +static void ProcessPack(FILE* relocs_so, FILE* packed_relocs_so) { + relocation_packer::ElfFile elf_file(fileno(relocs_so)); + + // Ensure unpacking fails (not packed). + EXPECT_FALSE(elf_file.UnpackRelocations()); + + // Pack relocations, and check files are now identical. + EXPECT_TRUE(elf_file.PackRelocations()); + CheckFileContentsEqual(relocs_so, packed_relocs_so); + + CloseRelocsTestFiles(relocs_so, packed_relocs_so); +} + +static void RunPackRelocationsTestFor(const std::string& arch) { + ASSERT_NE(static_cast(EV_NONE), elf_version(EV_CURRENT)); + + FILE* relocs_so = NULL; + FILE* packed_relocs_so = NULL; + OpenRelocsTestFiles(arch, &relocs_so, &packed_relocs_so); + + if (relocs_so != NULL && packed_relocs_so != NULL) { + // lets detect elf class + ASSERT_EQ(0, fseek(packed_relocs_so, EI_CLASS, SEEK_SET)) + << "Invalid file length: " << strerror(errno); + uint8_t elf_class = 0; + ASSERT_EQ(1U, fread(&elf_class, 1, 1, packed_relocs_so)); + fseek(packed_relocs_so, 0, SEEK_SET); + if (elf_class == ELFCLASS32) { + ProcessPack(relocs_so, packed_relocs_so); + } else { + ProcessPack(relocs_so, packed_relocs_so); + } + } +} + +} // namespace + +namespace relocation_packer { + +TEST(ElfFile, PackRelocations) { + RunPackRelocationsTestFor("arm32"); + RunPackRelocationsTestFor("arm64"); +} + +TEST(ElfFile, UnpackRelocations) { + RunUnpackRelocationsTestFor("arm32"); + RunUnpackRelocationsTestFor("arm64"); +} + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/elf_traits.h b/tools/relocation_packer/src/elf_traits.h index f099bab60..41b06c857 100644 --- a/tools/relocation_packer/src/elf_traits.h +++ b/tools/relocation_packer/src/elf_traits.h @@ -10,31 +10,10 @@ #include "elf.h" #include "libelf.h" -// The TARGET_ macro controls which Elf types we expect and handle. -// Either TARGET_ARM or TARGET_ARM64 must be defined, but not both. - -#if !defined(TARGET_ARM) && !defined(TARGET_ARM64) -# error "Unsupported target, define one of TARGET_ARM or TARGET_ARM64" -#elif defined(TARGET_ARM) && defined(TARGET_ARM64) -# error "Define one of TARGET_ARM or TARGET_ARM64, but not both" -#endif - -// TODO(simonb): Eliminate these once AARCH64 appears reliably in elf.h. -#ifndef EM_AARCH64 -#define EM_AARCH64 183 -#endif -#ifndef R_AARCH64_RELATIVE -#define R_AARCH64_RELATIVE 1027 -#endif -#ifndef R_AARCH64_NONE -#define R_AARCH64_NONE 0 -#endif - // ELF is a traits structure used to provide convenient aliases for -// 32/64 bit Elf types and functions, depending on the target specified. +// 32/64 bit Elf types and functions, depending on the target file. -#if defined(TARGET_ARM) -struct ELF { +struct ELF32_traits { typedef Elf32_Addr Addr; typedef Elf32_Dyn Dyn; typedef Elf32_Ehdr Ehdr; @@ -48,27 +27,17 @@ struct ELF { typedef Elf32_Sym Sym; typedef Elf32_Word Word; typedef Elf32_Xword Xword; + typedef Elf32_Half Half; static inline Ehdr* getehdr(Elf* elf) { return elf32_getehdr(elf); } static inline Phdr* getphdr(Elf* elf) { return elf32_getphdr(elf); } static inline Shdr* getshdr(Elf_Scn* scn) { return elf32_getshdr(scn); } - - enum { kMachine = EM_ARM }; - enum { kFileClass = ELFCLASS32 }; - enum { kRelativeRelocationCode = R_ARM_RELATIVE }; - enum { kNoRelocationCode = R_ARM_NONE }; - enum { kGnuStackSegmentAlignment = 0 }; - - static inline const char* Machine() { return "ARM"; } - -# define ELF_R_SYM(val) ELF32_R_SYM(val) -# define ELF_R_TYPE(val) ELF32_R_TYPE(val) -# define ELF_R_INFO(sym, type) ELF32_R_INFO(sym, type) -# define ELF_ST_TYPE(val) ELF32_ST_TYPE(val) + static inline Word elf_r_type(Word info) { return ELF32_R_TYPE(info); } + static inline int elf_st_type(uint8_t info) { return ELF32_ST_TYPE(info); } + static inline Word elf_r_sym(Word info) { return ELF32_R_SYM(info); } }; -#elif defined(TARGET_ARM64) -struct ELF { +struct ELF64_traits { typedef Elf64_Addr Addr; typedef Elf64_Dyn Dyn; typedef Elf64_Ehdr Ehdr; @@ -82,24 +51,14 @@ struct ELF { typedef Elf64_Sym Sym; typedef Elf64_Word Word; typedef Elf64_Xword Xword; + typedef Elf64_Half Half; static inline Ehdr* getehdr(Elf* elf) { return elf64_getehdr(elf); } static inline Phdr* getphdr(Elf* elf) { return elf64_getphdr(elf); } static inline Shdr* getshdr(Elf_Scn* scn) { return elf64_getshdr(scn); } - - enum { kMachine = EM_AARCH64 }; - enum { kFileClass = ELFCLASS64 }; - enum { kRelativeRelocationCode = R_AARCH64_RELATIVE }; - enum { kNoRelocationCode = R_AARCH64_NONE }; - enum { kGnuStackSegmentAlignment = 16 }; - - static inline const char* Machine() { return "ARM64"; } - -# define ELF_R_SYM(val) ELF64_R_SYM(val) -# define ELF_R_TYPE(val) ELF64_R_TYPE(val) -# define ELF_R_INFO(sym, type) ELF64_R_INFO(sym, type) -# define ELF_ST_TYPE(val) ELF64_ST_TYPE(val) + static inline Xword elf_r_type(Xword info) { return ELF64_R_TYPE(info); } + static inline int elf_st_type(uint8_t info) { return ELF64_ST_TYPE(info); } + static inline Word elf_r_sym(Xword info) { return ELF64_R_SYM(info); } }; -#endif #endif // TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ diff --git a/tools/relocation_packer/src/leb128.cc b/tools/relocation_packer/src/leb128.cc index b48739c32..101c55778 100644 --- a/tools/relocation_packer/src/leb128.cc +++ b/tools/relocation_packer/src/leb128.cc @@ -12,40 +12,50 @@ namespace relocation_packer { // Empty constructor and destructor to silence chromium-style. -Leb128Encoder::Leb128Encoder() { } -Leb128Encoder::~Leb128Encoder() { } +template +Leb128Encoder::Leb128Encoder() { } + +template +Leb128Encoder::~Leb128Encoder() { } // Add a single value to the encoding. Values are encoded with variable // length. The least significant 7 bits of each byte hold 7 bits of data, // and the most significant bit is set on each byte except the last. -void Leb128Encoder::Enqueue(ELF::Xword value) { +template +void Leb128Encoder::Enqueue(uint_t value) { + uint_t uvalue = static_cast(value); do { - const uint8_t byte = value & 127; - value >>= 7; - encoding_.push_back((value ? 128 : 0) | byte); - } while (value); + const uint8_t byte = uvalue & 127; + uvalue >>= 7; + encoding_.push_back((uvalue ? 128 : 0) | byte); + } while (uvalue); } // Add a vector of values to the encoding. -void Leb128Encoder::EnqueueAll(const std::vector& values) { - for (size_t i = 0; i < values.size(); ++i) +template +void Leb128Encoder::EnqueueAll(const std::vector& values) { + for (size_t i = 0; i < values.size(); ++i) { Enqueue(values[i]); + } } // Create a new decoder for the given encoded stream. -Leb128Decoder::Leb128Decoder(const std::vector& encoding) { +template +Leb128Decoder::Leb128Decoder(const std::vector& encoding, size_t start_with) { encoding_ = encoding; - cursor_ = 0; + cursor_ = start_with; } // Empty destructor to silence chromium-style. -Leb128Decoder::~Leb128Decoder() { } +template +Leb128Decoder::~Leb128Decoder() { } // Decode and retrieve a single value from the encoding. Read forwards until // a byte without its most significant bit is found, then read the 7 bit // fields of the bytes spanned to re-form the value. -ELF::Xword Leb128Decoder::Dequeue() { - ELF::Xword value = 0; +template +uint_t Leb128Decoder::Dequeue() { + uint_t value = 0; size_t shift = 0; uint8_t byte; @@ -53,7 +63,7 @@ ELF::Xword Leb128Decoder::Dequeue() { // Loop until we reach a byte with its high order bit clear. do { byte = encoding_[cursor_++]; - value |= static_cast(byte & 127) << shift; + value |= static_cast(byte & 127) << shift; shift += 7; } while (byte & 128); @@ -61,9 +71,17 @@ ELF::Xword Leb128Decoder::Dequeue() { } // Decode and retrieve all remaining values from the encoding. -void Leb128Decoder::DequeueAll(std::vector* values) { - while (cursor_ < encoding_.size()) +template +void Leb128Decoder::DequeueAll(std::vector* values) { + while (cursor_ < encoding_.size()) { values->push_back(Dequeue()); + } } +template class Leb128Encoder; +template class Leb128Encoder; + +template class Leb128Decoder; +template class Leb128Decoder; + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/leb128.h b/tools/relocation_packer/src/leb128.h index 6cc2d7caf..2c5b5d079 100644 --- a/tools/relocation_packer/src/leb128.h +++ b/tools/relocation_packer/src/leb128.h @@ -21,6 +21,7 @@ namespace relocation_packer { // Encode packed words as a LEB128 byte stream. +template class Leb128Encoder { public: // Explicit (but empty) constructor and destructor, for chromium-style. @@ -29,11 +30,11 @@ class Leb128Encoder { // Add a value to the encoding stream. // |value| is the unsigned int to add. - void Enqueue(ELF::Xword value); + void Enqueue(uint_t value); // Add a vector of values to the encoding stream. // |values| is the vector of unsigned ints to add. - void EnqueueAll(const std::vector& values); + void EnqueueAll(const std::vector& values); // Retrieve the encoded representation of the values. // |encoding| is the returned vector of encoded data. @@ -45,21 +46,22 @@ class Leb128Encoder { }; // Decode a LEB128 byte stream to produce packed words. +template class Leb128Decoder { public: // Create a new decoder for the given encoded stream. // |encoding| is the vector of encoded data. - explicit Leb128Decoder(const std::vector& encoding); + explicit Leb128Decoder(const std::vector& encoding, size_t start_with); // Explicit (but empty) destructor, for chromium-style. ~Leb128Decoder(); // Retrieve the next value from the encoded stream. - ELF::Xword Dequeue(); + uint_t Dequeue(); // Retrieve all remaining values from the encoded stream. // |values| is the vector of decoded data. - void DequeueAll(std::vector* values); + void DequeueAll(std::vector* values); private: // Encoded LEB128 stream. diff --git a/tools/relocation_packer/src/leb128_unittest.cc b/tools/relocation_packer/src/leb128_unittest.cc index bd607b717..8a7028cbc 100644 --- a/tools/relocation_packer/src/leb128_unittest.cc +++ b/tools/relocation_packer/src/leb128_unittest.cc @@ -5,19 +5,19 @@ #include "leb128.h" #include -#include "testing/gtest/include/gtest/gtest.h" +#include "gtest/gtest.h" namespace relocation_packer { -TEST(Leb128, Encoder) { - std::vector values; +TEST(Leb128, Encoder64) { + std::vector values; values.push_back(624485); values.push_back(0); values.push_back(1); values.push_back(127); values.push_back(128); - Leb128Encoder encoder; + Leb128Encoder encoder; encoder.EnqueueAll(values); encoder.Enqueue(4294967295); @@ -26,7 +26,7 @@ TEST(Leb128, Encoder) { std::vector encoding; encoder.GetEncoding(&encoding); - EXPECT_EQ(23, encoding.size()); + EXPECT_EQ(23U, encoding.size()); // 624485 EXPECT_EQ(0xe5, encoding[0]); EXPECT_EQ(0x8e, encoding[1]); @@ -59,7 +59,7 @@ TEST(Leb128, Encoder) { EXPECT_EQ(0x01, encoding[22]); } -TEST(Leb128, Decoder) { +TEST(Leb128, Decoder64) { std::vector encoding; // 624485 encoding.push_back(0xe5); @@ -92,20 +92,20 @@ TEST(Leb128, Decoder) { encoding.push_back(0xff); encoding.push_back(0x01); - Leb128Decoder decoder(encoding); + Leb128Decoder decoder(encoding, 0); - EXPECT_EQ(624485, decoder.Dequeue()); + EXPECT_EQ(624485U, decoder.Dequeue()); - std::vector dequeued; + std::vector dequeued; decoder.DequeueAll(&dequeued); - EXPECT_EQ(6, dequeued.size()); - EXPECT_EQ(0, dequeued[0]); - EXPECT_EQ(1, dequeued[1]); - EXPECT_EQ(127, dequeued[2]); - EXPECT_EQ(128, dequeued[3]); - EXPECT_EQ(4294967295, dequeued[4]); - EXPECT_EQ(18446744073709551615ul, dequeued[5]); + EXPECT_EQ(6U, dequeued.size()); + EXPECT_EQ(0U, dequeued[0]); + EXPECT_EQ(1U, dequeued[1]); + EXPECT_EQ(127U, dequeued[2]); + EXPECT_EQ(128U, dequeued[3]); + EXPECT_EQ(4294967295U, dequeued[4]); + EXPECT_EQ(18446744073709551615UL, dequeued[5]); } } // namespace relocation_packer diff --git a/tools/relocation_packer/src/main.cc b/tools/relocation_packer/src/main.cc index 28f5b0469..3f784e4f3 100644 --- a/tools/relocation_packer/src/main.cc +++ b/tools/relocation_packer/src/main.cc @@ -25,11 +25,12 @@ #include "debug.h" #include "elf_file.h" +#include "elf_traits.h" #include "libelf.h" -namespace { +#include "nativehelper/ScopedFd.h" -void PrintUsage(const char* argv0) { +static void PrintUsage(const char* argv0) { std::string temporary = argv0; const size_t last_slash = temporary.find_last_of("/"); if (last_slash != temporary.npos) { @@ -45,59 +46,11 @@ void PrintUsage(const char* argv0) { " -p, --pad do not shrink relocations, but pad (for debugging)\n\n", basename); - if (ELF::kMachine == EM_ARM) { - printf( - "Extracts relative relocations from the .rel.dyn section, packs them\n" - "into a more compact format, and stores the packed relocations in\n" - ".android.rel.dyn. Expands .android.rel.dyn to hold the packed\n" - "data, and shrinks .rel.dyn by the amount of unpacked data removed\n" - "from it.\n\n" - "Before being packed, a shared library needs to be prepared by adding\n" - "a null .android.rel.dyn section.\n\n" - "To pack relocations in a shared library:\n\n" - " echo -n 'NULL' >/tmp/small\n" - " arm-linux-androideabi-objcopy \\\n" - " --add-section .android.rel.dyn=/tmp/small \\\n" - " libchrome..so\n" - " rm /tmp/small\n" - " %s libchrome..so\n\n" - "To unpack and restore the shared library to its original state:\n\n" - " %s -u libchrome..so\n" - " arm-linux-androideabi-objcopy \\\n" - " --remove-section=.android.rel.dyn libchrome..so\n\n", - basename, basename); - } else if (ELF::kMachine == EM_AARCH64) { - printf( - "Extracts relative relocations from the .rela.dyn section, packs them\n" - "into a more compact format, and stores the packed relocations in\n" - ".android.rela.dyn. Expands .android.rela.dyn to hold the packed\n" - "data, and shrinks .rela.dyn by the amount of unpacked data removed\n" - "from it.\n\n" - "Before being packed, a shared library needs to be prepared by adding\n" - "a null .android.rela.dyn section.\n\n" - "To pack relocations in a shared library:\n\n" - " echo -n 'NULL' >/tmp/small\n" - " aarch64-linux-android-objcopy \\\n" - " --add-section .android.rela.dyn=/tmp/small \\\n" - " libchrome..so\n" - " rm /tmp/small\n" - " %s libchrome..so\n\n" - "To unpack and restore the shared library to its original state:\n\n" - " %s -u libchrome..so\n" - " aarch64-linux-android-objcopy \\\n" - " --remove-section=.android.rela.dyn libchrome..so\n\n", - basename, basename); - } else { - NOTREACHED(); - } - printf( "Debug sections are not handled, so packing should not be used on\n" "shared libraries compiled for debugging or otherwise unstripped.\n"); } -} // namespace - int main(int argc, char* argv[]) { bool is_unpacking = false; bool is_verbose = false; @@ -143,11 +96,9 @@ int main(int argc, char* argv[]) { LOG(WARNING) << "Elf Library is out of date!"; } - LOG(INFO) << "Configured for " << ELF::Machine(); - const char* file = argv[argc - 1]; - const int fd = open(file, O_RDWR); - if (fd == -1) { + ScopedFd fd(open(file, O_RDWR)); + if (fd.get() == -1) { LOG(ERROR) << file << ": " << strerror(errno); return 1; } @@ -155,16 +106,43 @@ int main(int argc, char* argv[]) { if (is_verbose) relocation_packer::Logger::SetVerbose(1); - relocation_packer::ElfFile elf_file(fd); - elf_file.SetPadding(is_padding); + // We need to detect elf class in order to create + // correct implementation + uint8_t e_ident[EI_NIDENT]; + if (TEMP_FAILURE_RETRY(read(fd.get(), e_ident, EI_NIDENT) != EI_NIDENT)) { + LOG(ERROR) << file << ": failed to read elf header:" << strerror(errno); + return 1; + } - bool status; - if (is_unpacking) - status = elf_file.UnpackRelocations(); - else - status = elf_file.PackRelocations(); + if (TEMP_FAILURE_RETRY(lseek(fd.get(), 0, SEEK_SET)) != 0) { + LOG(ERROR) << file << ": lseek to 0 failed:" << strerror(errno); + return 1; + } - close(fd); + bool status = false; + + if (e_ident[EI_CLASS] == ELFCLASS32) { + relocation_packer::ElfFile elf_file(fd.get()); + elf_file.SetPadding(is_padding); + + if (is_unpacking) { + status = elf_file.UnpackRelocations(); + } else { + status = elf_file.PackRelocations(); + } + } else if (e_ident[EI_CLASS] == ELFCLASS64) { + relocation_packer::ElfFile elf_file(fd.get()); + elf_file.SetPadding(is_padding); + + if (is_unpacking) { + status = elf_file.UnpackRelocations(); + } else { + status = elf_file.PackRelocations(); + } + } else { + LOG(ERROR) << file << ": unknown ELFCLASS: " << e_ident[EI_CLASS]; + return 1; + } if (!status) { LOG(ERROR) << file << ": failed to pack/unpack file"; diff --git a/tools/relocation_packer/src/packer.cc b/tools/relocation_packer/src/packer.cc index 29bec1e3c..8e30612e5 100644 --- a/tools/relocation_packer/src/packer.cc +++ b/tools/relocation_packer/src/packer.cc @@ -10,115 +10,79 @@ #include "delta_encoder.h" #include "elf_traits.h" #include "leb128.h" -#include "run_length_encoder.h" #include "sleb128.h" namespace relocation_packer { -// Pack relative relocations into a run-length encoded packed -// representation. -void RelocationPacker::PackRelativeRelocations( - const std::vector& relocations, - std::vector* packed) { +// Pack relocations into a group encoded packed representation. +template +void RelocationPacker::PackRelocations(const std::vector& relocations, + std::vector* packed) { // Run-length encode. - std::vector packed_words; - RelocationRunLengthCodec codec; + std::vector packed_words; + RelocationDeltaCodec codec; codec.Encode(relocations, &packed_words); - // If insufficient data to run-length encode, do nothing. + // If insufficient data do nothing. if (packed_words.empty()) return; - // LEB128 encode, with "APR1" prefix. - Leb128Encoder encoder; - encoder.Enqueue('A'); - encoder.Enqueue('P'); - encoder.Enqueue('R'); - encoder.Enqueue('1'); - encoder.EnqueueAll(packed_words); + Sleb128Encoder sleb128_encoder; + Leb128Encoder leb128_encoder; - encoder.GetEncoding(packed); + std::vector leb128_packed; + std::vector sleb128_packed; - // Pad packed to a whole number of words. This padding will decode as - // LEB128 zeroes. Run-length decoding ignores it because encoding - // embeds the pairs count in the stream itself. - while (packed->size() % sizeof(ELF::Word)) - packed->push_back(0); + leb128_encoder.EnqueueAll(packed_words); + leb128_encoder.GetEncoding(&leb128_packed); + + sleb128_encoder.EnqueueAll(packed_words); + sleb128_encoder.GetEncoding(&sleb128_packed); + + // TODO (simonb): Estimate savings on current android system image and consider using + // one encoder for all packed relocations to reduce complexity. + if (leb128_packed.size() <= sleb128_packed.size()) { + packed->push_back('A'); + packed->push_back('P'); + packed->push_back('U'); + packed->push_back('2'); + packed->insert(packed->end(), leb128_packed.begin(), leb128_packed.end()); + } else { + packed->push_back('A'); + packed->push_back('P'); + packed->push_back('S'); + packed->push_back('2'); + packed->insert(packed->end(), sleb128_packed.begin(), sleb128_packed.end()); + } } // Unpack relative relocations from a run-length encoded packed // representation. -void RelocationPacker::UnpackRelativeRelocations( +template +void RelocationPacker::UnpackRelocations( const std::vector& packed, - std::vector* relocations) { - // LEB128 decode, after checking and stripping "APR1" prefix. - std::vector packed_words; - Leb128Decoder decoder(packed); - CHECK(decoder.Dequeue() == 'A' && - decoder.Dequeue() == 'P' && - decoder.Dequeue() == 'R' && - decoder.Dequeue() == '1'); - decoder.DequeueAll(&packed_words); + std::vector* relocations) { - // Run-length decode. - RelocationRunLengthCodec codec; + std::vector packed_words; + CHECK(packed.size() > 4 && + packed[0] == 'A' && + packed[1] == 'P' && + (packed[2] == 'U' || packed[2] == 'S') && + packed[3] == '2'); + + if (packed[2] == 'U') { + Leb128Decoder decoder(packed, 4); + decoder.DequeueAll(&packed_words); + } else { + Sleb128Decoder decoder(packed, 4); + decoder.DequeueAll(&packed_words); + } + + RelocationDeltaCodec codec; codec.Decode(packed_words, relocations); } -// Pack relative relocations with addends into a delta encoded packed -// representation. -void RelocationPacker::PackRelativeRelocations( - const std::vector& relocations, - std::vector* packed) { - // Delta encode. - std::vector packed_words; - RelocationDeltaCodec codec; - codec.Encode(relocations, &packed_words); - - // If insufficient data to delta encode, do nothing. - if (packed_words.empty()) - return; - - // Signed LEB128 encode, with "APA1" prefix. ASCII does not encode as - // itself under signed LEB128, so we have to treat it specially. - Sleb128Encoder encoder; - encoder.EnqueueAll(packed_words); - std::vector encoded; - encoder.GetEncoding(&encoded); - - packed->push_back('A'); - packed->push_back('P'); - packed->push_back('A'); - packed->push_back('1'); - packed->insert(packed->end(), encoded.begin(), encoded.end()); - - // Pad packed to a whole number of words. This padding will decode as - // signed LEB128 zeroes. Delta decoding ignores it because encoding - // embeds the pairs count in the stream itself. - while (packed->size() % sizeof(ELF::Word)) - packed->push_back(0); -} - -// Unpack relative relocations with addends from a delta encoded -// packed representation. -void RelocationPacker::UnpackRelativeRelocations( - const std::vector& packed, - std::vector* relocations) { - // Check "APA1" prefix. - CHECK(packed.at(0) == 'A' && - packed.at(1) == 'P' && - packed.at(2) == 'A' && - packed.at(3) == '1'); - - // Signed LEB128 decode, after stripping "APA1" prefix. - std::vector packed_words; - std::vector stripped(packed.begin() + 4, packed.end()); - Sleb128Decoder decoder(stripped); - decoder.DequeueAll(&packed_words); - - // Delta decode. - RelocationDeltaCodec codec; - codec.Decode(packed_words, relocations); -} +template class RelocationPacker; +template class RelocationPacker; } // namespace relocation_packer diff --git a/tools/relocation_packer/src/packer.h b/tools/relocation_packer/src/packer.h index db09ce8cc..8a57e623b 100644 --- a/tools/relocation_packer/src/packer.h +++ b/tools/relocation_packer/src/packer.h @@ -48,29 +48,25 @@ #include #include "elf.h" -#include "elf_traits.h" namespace relocation_packer { -// A RelocationPacker packs vectors of relative relocations into more +// A RelocationPacker packs vectors of relocations into more // compact forms, and unpacks them to reproduce the pre-packed data. +template class RelocationPacker { public: - // Pack relative relocations into a more compact form. - // |relocations| is a vector of relative relocation structs. + // Pack relocations into a more compact form. + // |relocations| is a vector of relocation structs. // |packed| is the vector of packed bytes into which relocations are packed. - static void PackRelativeRelocations(const std::vector& relocations, - std::vector* packed); - static void PackRelativeRelocations(const std::vector& relocations, - std::vector* packed); + static void PackRelocations(const std::vector& relocations, + std::vector* packed); - // Unpack relative relocations from their more compact form. + // Unpack relocations from their more compact form. // |packed| is the vector of packed relocations. - // |relocations| is a vector of unpacked relative relocation structs. - static void UnpackRelativeRelocations(const std::vector& packed, - std::vector* relocations); - static void UnpackRelativeRelocations(const std::vector& packed, - std::vector* relocations); + // |relocations| is a vector of unpacked relocation structs. + static void UnpackRelocations(const std::vector& packed, + std::vector* relocations); }; } // namespace relocation_packer diff --git a/tools/relocation_packer/src/packer_unittest.cc b/tools/relocation_packer/src/packer_unittest.cc index de5be7979..8dddd8b41 100644 --- a/tools/relocation_packer/src/packer_unittest.cc +++ b/tools/relocation_packer/src/packer_unittest.cc @@ -7,244 +7,286 @@ #include #include "elf.h" #include "elf_traits.h" -#include "testing/gtest/include/gtest/gtest.h" +#include "gtest/gtest.h" -namespace { -void AddRelocation(ELF::Addr addr, std::vector* relocations) { - ELF::Rel relocation; +template +static void AddRelocation(typename ELF::Addr addr, + typename ELF::Xword info, + typename ELF::Sxword addend, + std::vector* relocations) { + typename ELF::Rela relocation; relocation.r_offset = addr; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); - relocations->push_back(relocation); -} - -bool CheckRelocation(ELF::Addr addr, const ELF::Rel& relocation) { - return relocation.r_offset == addr && - ELF_R_SYM(relocation.r_info) == 0 && - ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode; -} - -void AddRelocation(ELF::Addr addr, - ELF::Sxword addend, - std::vector* relocations) { - ELF::Rela relocation; - relocation.r_offset = addr; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); + relocation.r_info = info; relocation.r_addend = addend; + relocations->push_back(relocation); } -bool CheckRelocation(ELF::Addr addr, - ELF::Sxword addend, - const ELF::Rela& relocation) { +template +static bool CheckRelocation(typename ELF::Addr addr, + typename ELF::Xword info, + typename ELF::Sxword addend, + const typename ELF::Rela& relocation) { return relocation.r_offset == addr && - ELF_R_SYM(relocation.r_info) == 0 && - ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode && + relocation.r_info == info && relocation.r_addend == addend; } -} // namespace - namespace relocation_packer { -TEST(Packer, PackRel) { - std::vector relocations; +template +static void DoPackNoAddend() { + std::vector relocations; std::vector packed; - - RelocationPacker packer; - // Initial relocation. - AddRelocation(0xd1ce0000, &relocations); + AddRelocation(0xd1ce0000, 0x11, 0, &relocations); // Two more relocations, 4 byte deltas. - AddRelocation(0xd1ce0004, &relocations); - AddRelocation(0xd1ce0008, &relocations); + AddRelocation(0xd1ce0004, 0x11, 0, &relocations); + AddRelocation(0xd1ce0008, 0x11, 0, &relocations); // Three more relocations, 8 byte deltas. - AddRelocation(0xd1ce0010, &relocations); - AddRelocation(0xd1ce0018, &relocations); - AddRelocation(0xd1ce0020, &relocations); + AddRelocation(0xd1ce0010, 0x11, 0, &relocations); + AddRelocation(0xd1ce0018, 0x11, 0, &relocations); + AddRelocation(0xd1ce0020, 0x11, 0, &relocations); + + RelocationPacker packer; packed.clear(); - packer.PackRelativeRelocations(relocations, &packed); + packer.PackRelocations(relocations, &packed); - EXPECT_EQ(16, packed.size()); + ASSERT_EQ(18U, packed.size()); // Identifier. - EXPECT_EQ('A', packed[0]); - EXPECT_EQ('P', packed[1]); - EXPECT_EQ('R', packed[2]); - EXPECT_EQ('1', packed[3]); - // Count-delta pairs count. - EXPECT_EQ(2, packed[4]); - // 0xd1ce0000 - EXPECT_EQ(128, packed[5]); - EXPECT_EQ(128, packed[6]); - EXPECT_EQ(184, packed[7]); - EXPECT_EQ(142, packed[8]); - EXPECT_EQ(13, packed[9]); - // Run of two relocations, 4 byte deltas. - EXPECT_EQ(2, packed[10]); - EXPECT_EQ(4, packed[11]); - // Run of three relocations, 8 byte deltas. - EXPECT_EQ(3, packed[12]); - EXPECT_EQ(8, packed[13]); - // Padding. - EXPECT_EQ(0, packed[14]); - EXPECT_EQ(0, packed[15]); + size_t ndx = 0; + EXPECT_EQ('A', packed[ndx++]); + EXPECT_EQ('P', packed[ndx++]); + EXPECT_EQ('U', packed[ndx++]); + EXPECT_EQ('2', packed[ndx++]); + // relocation count + EXPECT_EQ(6, packed[ndx++]); + // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d + EXPECT_EQ(0xfc, packed[ndx++]); + EXPECT_EQ(0xff, packed[ndx++]); + EXPECT_EQ(0xb7, packed[ndx++]); + EXPECT_EQ(0x8e, packed[ndx++]); + EXPECT_EQ(0x0d, packed[ndx++]); + // first group + EXPECT_EQ(3, packed[ndx++]); // size + EXPECT_EQ(3, packed[ndx++]); // flags + EXPECT_EQ(4, packed[ndx++]); // r_offset_delta + EXPECT_EQ(0x11, packed[ndx++]); // r_info + // second group + EXPECT_EQ(3, packed[ndx++]); // size + EXPECT_EQ(3, packed[ndx++]); // flags + EXPECT_EQ(8, packed[ndx++]); // r_offset_delta + EXPECT_EQ(0x11, packed[ndx++]); // r_info + + EXPECT_EQ(ndx, packed.size()); } -TEST(Packer, UnpackRel) { +TEST(Packer, PackNoAddend) { + DoPackNoAddend(); + DoPackNoAddend(); +} + +template +static void DoUnpackNoAddend() { + std::vector relocations; std::vector packed; - std::vector relocations; - - RelocationPacker packer; - - // Identifier. packed.push_back('A'); packed.push_back('P'); - packed.push_back('R'); - packed.push_back('1'); - // Count-delta pairs count. - packed.push_back(2); - // 0xd1ce0000 - packed.push_back(128); - packed.push_back(128); - packed.push_back(184); - packed.push_back(142); - packed.push_back(13); - // Run of two relocations, 4 byte deltas. - packed.push_back(2); - packed.push_back(4); - // Run of three relocations, 8 byte deltas. - packed.push_back(3); - packed.push_back(8); - // Padding. - packed.push_back(0); - packed.push_back(0); - - relocations.clear(); - packer.UnpackRelativeRelocations(packed, &relocations); - - EXPECT_EQ(6, relocations.size()); - // Initial relocation. - EXPECT_TRUE(CheckRelocation(0xd1ce0000, relocations[0])); - // Two relocations, 4 byte deltas. - EXPECT_TRUE(CheckRelocation(0xd1ce0004, relocations[1])); - EXPECT_TRUE(CheckRelocation(0xd1ce0008, relocations[2])); - // Three relocations, 8 byte deltas. - EXPECT_TRUE(CheckRelocation(0xd1ce0010, relocations[3])); - EXPECT_TRUE(CheckRelocation(0xd1ce0018, relocations[4])); - EXPECT_TRUE(CheckRelocation(0xd1ce0020, relocations[5])); -} - -TEST(Packer, PackRela) { - std::vector relocations; - std::vector packed; - - RelocationPacker packer; - - // Initial relocation. - AddRelocation(0xd1ce0000, 10000, &relocations); - // Two more relocations, 4 byte offset deltas, 12 byte addend deltas. - AddRelocation(0xd1ce0004, 10012, &relocations); - AddRelocation(0xd1ce0008, 10024, &relocations); - // Three more relocations, 8 byte deltas, -24 byte addend deltas. - AddRelocation(0xd1ce0010, 10000, &relocations); - AddRelocation(0xd1ce0018, 9976, &relocations); - AddRelocation(0xd1ce0020, 9952, &relocations); - - packed.clear(); - packer.PackRelativeRelocations(relocations, &packed); - - EXPECT_EQ(24, packed.size()); - // Identifier. - EXPECT_EQ('A', packed[0]); - EXPECT_EQ('P', packed[1]); - EXPECT_EQ('A', packed[2]); - EXPECT_EQ('1', packed[3]); - // Delta pairs count. - EXPECT_EQ(6, packed[4]); - // 0xd1ce0000 - EXPECT_EQ(128, packed[5]); - EXPECT_EQ(128, packed[6]); - EXPECT_EQ(184, packed[7]); - EXPECT_EQ(142, packed[8]); - EXPECT_EQ(13, packed[9]); - // 10000 - EXPECT_EQ(144, packed[10]); - EXPECT_EQ(206, packed[11]); - EXPECT_EQ(0, packed[12]); - // 4, 12 - EXPECT_EQ(4, packed[13]); - EXPECT_EQ(12, packed[14]); - // 4, 12 - EXPECT_EQ(4, packed[15]); - EXPECT_EQ(12, packed[16]); - // 8, -24 - EXPECT_EQ(8, packed[17]); - EXPECT_EQ(104, packed[18]); - // 8, -24 - EXPECT_EQ(8, packed[19]); - EXPECT_EQ(104, packed[20]); - // 8, -24 - EXPECT_EQ(8, packed[21]); - EXPECT_EQ(104, packed[22]); - // Padding. - EXPECT_EQ(0, packed[23]); -} - -TEST(Packer, UnpackRela) { - std::vector packed; - std::vector relocations; - - RelocationPacker packer; - - // Identifier. - packed.push_back('A'); - packed.push_back('P'); - packed.push_back('A'); - packed.push_back('1'); - // Delta pairs count. + packed.push_back('U'); + packed.push_back('2'); + // relocation count packed.push_back(6); - // 0xd1ce0000 - packed.push_back(128); - packed.push_back(128); - packed.push_back(184); - packed.push_back(142); - packed.push_back(13); - // 10000 - packed.push_back(144); - packed.push_back(206); - packed.push_back(0); - // 4, 12 - packed.push_back(4); - packed.push_back(12); - // 4, 12 - packed.push_back(4); - packed.push_back(12); - // 8, -24 - packed.push_back(8); - packed.push_back(104); - // 8, -24 - packed.push_back(8); - packed.push_back(104); - // 8, -24 - packed.push_back(8); - packed.push_back(104); - // Padding. - packed.push_back(0); + // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d + packed.push_back(0xfc); + packed.push_back(0xff); + packed.push_back(0xb7); + packed.push_back(0x8e); + packed.push_back(0x0d); + // first group + packed.push_back(3); // size + packed.push_back(3); // flags + packed.push_back(4); // r_offset_delta + packed.push_back(0x11); // r_info + // second group + packed.push_back(3); // size + packed.push_back(3); // flags + packed.push_back(8); // r_offset_delta + packed.push_back(0x11); // r_info + + RelocationPacker packer; + packer.UnpackRelocations(packed, &relocations); + + size_t ndx = 0; + EXPECT_EQ(6U, relocations.size()); + EXPECT_TRUE(CheckRelocation(0xd1ce0000, 0x11, 0, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0004, 0x11, 0, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0008, 0x11, 0, relocations[ndx++])); + + EXPECT_TRUE(CheckRelocation(0xd1ce0010, 0x11, 0, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0018, 0x11, 0, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0020, 0x11, 0, relocations[ndx++])); + + EXPECT_EQ(ndx, relocations.size()); +} + +TEST(Packer, UnpackNoAddend) { + DoUnpackNoAddend(); + DoUnpackNoAddend(); +} + +template +static void DoPackWithAddend() { + std::vector relocations; + + // Initial relocation. + AddRelocation(0xd1ce0000, 0x01, 10024, &relocations); + // Two more relocations, 4 byte offset deltas, 12 byte addend deltas. + AddRelocation(0xd1ce0004, 0x01, 10012, &relocations); + AddRelocation(0xd1ce0008, 0x01, 10024, &relocations); + // Three more relocations, 8 byte deltas, -24 byte addend deltas. + AddRelocation(0xd1ce0010, 0x01, 10000, &relocations); + AddRelocation(0xd1ce0018, 0x01, 9976, &relocations); + AddRelocation(0xd1ce0020, 0x01, 9952, &relocations); + + std::vector packed; + + RelocationPacker packer; + + packed.clear(); + packer.PackRelocations(relocations, &packed); + + EXPECT_EQ(26U, packed.size()); + size_t ndx = 0; + // Identifier. + EXPECT_EQ('A', packed[ndx++]); + EXPECT_EQ('P', packed[ndx++]); + EXPECT_EQ('S', packed[ndx++]); + EXPECT_EQ('2', packed[ndx++]); + // Relocation count + EXPECT_EQ(6U, packed[ndx++]); + // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d/7d (depending on ELF::Addr) + EXPECT_EQ(0xfc, packed[ndx++]); + EXPECT_EQ(0xff, packed[ndx++]); + EXPECT_EQ(0xb7, packed[ndx++]); + EXPECT_EQ(0x8e, packed[ndx++]); + if (sizeof(typename ELF::Addr) == 8) { + // positive for uint64_t + EXPECT_EQ(0x0d, packed[ndx++]); + } else { + // negative for uint32_t + EXPECT_EQ(0x7d, packed[ndx++]); + } + // group 1 + EXPECT_EQ(0x03, packed[ndx++]); // size + EXPECT_EQ(0x0b, packed[ndx++]); // flags + EXPECT_EQ(0x04, packed[ndx++]); // r_offset_delta + EXPECT_EQ(0x01, packed[ndx++]); // r_info + // group 1 - addend 1: 10024 = 0xa8, 0xce, 0x80 + EXPECT_EQ(0xa8, packed[ndx++]); + EXPECT_EQ(0xce, packed[ndx++]); + EXPECT_EQ(0x00, packed[ndx++]); + // group 1 - addend 2: -12 = 0x74 + EXPECT_EQ(0x74, packed[ndx++]); + // group 1 - addend 3: +12 = 0x0c + EXPECT_EQ(0x0c, packed[ndx++]); + + // group 2 + EXPECT_EQ(0x03, packed[ndx++]); // size + EXPECT_EQ(0x0b, packed[ndx++]); // flags + EXPECT_EQ(0x08, packed[ndx++]); // r_offset_delta + EXPECT_EQ(0x01, packed[ndx++]); // r_info + + // group 2 - addend 1: -24 = 0x68 + EXPECT_EQ(0x68, packed[ndx++]); + // group 2 - addend 2: -24 = 0x68 + EXPECT_EQ(0x68, packed[ndx++]); + // group 2 - addend 3: -24 = 0x68 + EXPECT_EQ(0x68, packed[ndx++]); + + EXPECT_EQ(ndx, packed.size()); +} + +TEST(Packer, PackWithAddend) { + DoPackWithAddend(); + DoPackWithAddend(); +} + +template +static void DoUnpackWithAddend() { + std::vector packed; + // Identifier. + packed.push_back('A'); + packed.push_back('P'); + packed.push_back('S'); + packed.push_back('2'); + // Relocation count + packed.push_back(6U); + // base relocation = 0xd1cdfffc -> fc, ff, b7, 8e, 0d + packed.push_back(0xfc); + packed.push_back(0xff); + packed.push_back(0xb7); + packed.push_back(0x8e); + if (sizeof(typename ELF::Addr) == 8) { + // positive for uint64_t + packed.push_back(0x0d); + } else { + // negative for uint32_t + packed.push_back(0x7d); + } + // group 1 + packed.push_back(0x03); // size + packed.push_back(0x0b); // flags + packed.push_back(0x04); // r_offset_delta + packed.push_back(0x01); // r_info + // group 1 - addend 1: 10024 = 0xa8, 0xce, 0x80 + packed.push_back(0xa8); + packed.push_back(0xce); + packed.push_back(0x00); + // group 1 - addend 2: -12 = 0x74 + packed.push_back(0x74); + // group 1 - addend 3: +12 = 0x0c + packed.push_back(0x0c); + + // group 2 + packed.push_back(0x03); // size + packed.push_back(0x0b); // flags + packed.push_back(0x08); // r_offset_delta + packed.push_back(0x01); // r_info + + // group 2 - addend 1: -24 = 0x68 + packed.push_back(0x68); + // group 2 - addend 2: -24 = 0x68 + packed.push_back(0x68); + // group 2 - addend 3: -24 = 0x68 + packed.push_back(0x68); + + std::vector relocations; + + RelocationPacker packer; relocations.clear(); - packer.UnpackRelativeRelocations(packed, &relocations); + packer.UnpackRelocations(packed, &relocations); - EXPECT_EQ(6, relocations.size()); + EXPECT_EQ(6U, relocations.size()); + size_t ndx = 0; // Initial relocation. - EXPECT_TRUE(CheckRelocation(0xd1ce0000, 10000, relocations[0])); + EXPECT_TRUE(CheckRelocation(0xd1ce0000, 0x01, 10024, relocations[ndx++])); // Two more relocations, 4 byte offset deltas, 12 byte addend deltas. - EXPECT_TRUE(CheckRelocation(0xd1ce0004, 10012, relocations[1])); - EXPECT_TRUE(CheckRelocation(0xd1ce0008, 10024, relocations[2])); + EXPECT_TRUE(CheckRelocation(0xd1ce0004, 0x01, 10012, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0008, 0x01, 10024, relocations[ndx++])); // Three more relocations, 8 byte offset deltas, -24 byte addend deltas. - EXPECT_TRUE(CheckRelocation(0xd1ce0010, 10000, relocations[3])); - EXPECT_TRUE(CheckRelocation(0xd1ce0018, 9976, relocations[4])); - EXPECT_TRUE(CheckRelocation(0xd1ce0020, 9952, relocations[5])); + EXPECT_TRUE(CheckRelocation(0xd1ce0010, 0x01, 10000, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0018, 0x01, 9976, relocations[ndx++])); + EXPECT_TRUE(CheckRelocation(0xd1ce0020, 0x01, 9952, relocations[ndx++])); + + EXPECT_EQ(ndx, relocations.size()); +} + +TEST(Packer, UnpackWithAddend) { + DoUnpackWithAddend(); + DoUnpackWithAddend(); } } // namespace relocation_packer diff --git a/tools/relocation_packer/src/run_all_unittests.cc b/tools/relocation_packer/src/run_all_unittests.cc deleted file mode 100644 index 4122be18c..000000000 --- a/tools/relocation_packer/src/run_all_unittests.cc +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "testing/gtest/include/gtest/gtest.h" - -int main(int argc, char** argv) { - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/tools/relocation_packer/src/run_length_encoder.cc b/tools/relocation_packer/src/run_length_encoder.cc deleted file mode 100644 index 2f2e1c315..000000000 --- a/tools/relocation_packer/src/run_length_encoder.cc +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "run_length_encoder.h" - -#include - -#include "debug.h" -#include "elf_traits.h" - -namespace relocation_packer { - -namespace { - -// Generate a vector of deltas between the r_offset fields of adjacent -// relative relocations. -void GetDeltas(const std::vector& relocations, - std::vector* deltas) { - CHECK(relocations.size() >= 2); - - for (size_t i = 0; i < relocations.size() - 1; ++i) { - const ELF::Rel* first = &relocations[i]; - CHECK(ELF_R_TYPE(first->r_info) == ELF::kRelativeRelocationCode); - - const ELF::Rel* second = &relocations[i + 1]; - CHECK(ELF_R_TYPE(second->r_info) == ELF::kRelativeRelocationCode); - - // Requires that offsets are 'strictly increasing'. The packing - // algorithm fails if this does not hold. - CHECK(second->r_offset > first->r_offset); - deltas->push_back(second->r_offset - first->r_offset); - } -} - -// Condense a set of r_offset deltas into a run-length encoded packing. -// Represented as count-delta pairs, where count is the run length and -// delta the common difference between adjacent r_offsets. -void Condense(const std::vector& deltas, - std::vector* packed) { - CHECK(!deltas.empty()); - size_t count = 0; - ELF::Addr current = deltas[0]; - - // Identify spans of identically valued deltas. - for (size_t i = 0; i < deltas.size(); ++i) { - const ELF::Addr delta = deltas[i]; - if (delta == current) { - count++; - } else { - // We reached the end of a span of identically valued deltas. - packed->push_back(count); - packed->push_back(current); - current = delta; - count = 1; - } - } - - // Write the final span. - packed->push_back(count); - packed->push_back(current); -} - -// Uncondense a set of r_offset deltas from a run-length encoded packing. -// The initial address for uncondensing, the start index for the first -// condensed slot in packed, and the count of pairs are provided. -void Uncondense(ELF::Addr addr, - const std::vector& packed, - size_t start_index, - size_t end_index, - std::vector* relocations) { - // The first relocation is just one created from the initial address. - ELF::Rel initial; - initial.r_offset = addr; - initial.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); - relocations->push_back(initial); - - // Read each count and delta pair, beginning at the start index and - // finishing at the end index. - for (size_t i = start_index; i < end_index; i += 2) { - size_t count = packed[i]; - const ELF::Addr delta = packed[i + 1]; - CHECK(count > 0 && delta > 0); - - // Generate relocations for this count and delta pair. - while (count) { - addr += delta; - ELF::Rel relocation; - relocation.r_offset = addr; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); - relocations->push_back(relocation); - count--; - } - } -} - -} // namespace - -// Encode relative relocations into a run-length encoded (packed) -// representation. -void RelocationRunLengthCodec::Encode(const std::vector& relocations, - std::vector* packed) { - // If we have zero or one relocation only then there is no packing - // possible; a run-length encoding needs a run. - if (relocations.size() < 2) - return; - - std::vector deltas; - GetDeltas(relocations, &deltas); - - // Reserve space for the element count. - packed->push_back(0); - - // Initialize the packed data with the first offset, then follow up with - // the condensed deltas vector. - packed->push_back(relocations[0].r_offset); - Condense(deltas, packed); - - // Fill in the packed pair count. - packed->at(0) = (packed->size() - 2) >> 1; -} - -// Decode relative relocations from a run-length encoded (packed) -// representation. -void RelocationRunLengthCodec::Decode(const std::vector& packed, - std::vector* relocations) { - // We need at least one packed pair after the packed pair count and start - // address to be able to unpack. - if (packed.size() < 4) - return; - - // Ensure that the packed data offers enough pairs. There may be zero - // padding on it that we ignore. - CHECK(packed[0] <= (packed.size() - 2) >> 1); - - // The first packed vector element is the pairs count and the second the - // initial address. Start uncondensing pairs at the third, and finish - // at the end of the pairs data. - const size_t pairs_count = packed[0]; - const ELF::Addr addr = packed[1]; - Uncondense(addr, packed, 2, 2 + (pairs_count << 1), relocations); -} - -} // namespace relocation_packer diff --git a/tools/relocation_packer/src/run_length_encoder_unittest.cc b/tools/relocation_packer/src/run_length_encoder_unittest.cc deleted file mode 100644 index 83370f2a9..000000000 --- a/tools/relocation_packer/src/run_length_encoder_unittest.cc +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "run_length_encoder.h" - -#include -#include "elf.h" -#include "elf_traits.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -void AddRelocation(ELF::Addr addr, std::vector* relocations) { - ELF::Rel relocation; - relocation.r_offset = addr; - relocation.r_info = ELF_R_INFO(0, ELF::kRelativeRelocationCode); - relocations->push_back(relocation); -} - -bool CheckRelocation(ELF::Addr addr, const ELF::Rel& relocation) { - return relocation.r_offset == addr && - ELF_R_SYM(relocation.r_info) == 0 && - ELF_R_TYPE(relocation.r_info) == ELF::kRelativeRelocationCode; -} - -} // namespace - -namespace relocation_packer { - -TEST(RunLength, Encode) { - std::vector relocations; - std::vector packed; - - RelocationRunLengthCodec codec; - - packed.clear(); - codec.Encode(relocations, &packed); - - EXPECT_EQ(0, packed.size()); - - // Add one relocation (insufficient data to encode). - AddRelocation(0xf00d0000, &relocations); - - packed.clear(); - codec.Encode(relocations, &packed); - - EXPECT_EQ(0, packed.size()); - - // Add a second relocation, 4 byte delta (minimum data to encode). - AddRelocation(0xf00d0004, &relocations); - - packed.clear(); - codec.Encode(relocations, &packed); - - EXPECT_EQ(4, packed.size()); - // One count-delta pair present. - EXPECT_EQ(1, packed[0]); - // Initial relocation. - EXPECT_EQ(0xf00d0000, packed[1]); - // Run of a single relocation, 4 byte delta. - EXPECT_EQ(1, packed[2]); - EXPECT_EQ(4, packed[3]); - - // Add a third relocation, 4 byte delta. - AddRelocation(0xf00d0008, &relocations); - - // Add three more relocations, 8 byte deltas. - AddRelocation(0xf00d0010, &relocations); - AddRelocation(0xf00d0018, &relocations); - AddRelocation(0xf00d0020, &relocations); - - packed.clear(); - codec.Encode(relocations, &packed); - - EXPECT_EQ(6, packed.size()); - // Two count-delta pairs present. - EXPECT_EQ(2, packed[0]); - // Initial relocation. - EXPECT_EQ(0xf00d0000, packed[1]); - // Run of two relocations, 4 byte deltas. - EXPECT_EQ(2, packed[2]); - EXPECT_EQ(4, packed[3]); - // Run of three relocations, 8 byte deltas. - EXPECT_EQ(3, packed[4]); - EXPECT_EQ(8, packed[5]); -} - -TEST(RunLength, Decode) { - std::vector packed; - std::vector relocations; - - RelocationRunLengthCodec codec; - codec.Decode(packed, &relocations); - - EXPECT_EQ(0, relocations.size()); - - // Two count-delta pairs. - packed.push_back(2); - // Initial relocation. - packed.push_back(0xc0de0000); - // Run of two relocations, 4 byte deltas. - packed.push_back(2); - packed.push_back(4); - // Run of three relocations, 8 byte deltas. - packed.push_back(3); - packed.push_back(8); - - relocations.clear(); - codec.Decode(packed, &relocations); - - EXPECT_EQ(6, relocations.size()); - // Initial relocation. - EXPECT_TRUE(CheckRelocation(0xc0de0000, relocations[0])); - // Two relocations, 4 byte deltas. - EXPECT_TRUE(CheckRelocation(0xc0de0004, relocations[1])); - EXPECT_TRUE(CheckRelocation(0xc0de0008, relocations[2])); - // Three relocations, 8 byte deltas. - EXPECT_TRUE(CheckRelocation(0xc0de0010, relocations[3])); - EXPECT_TRUE(CheckRelocation(0xc0de0018, relocations[4])); - EXPECT_TRUE(CheckRelocation(0xc0de0020, relocations[5])); -} - -} // namespace relocation_packer diff --git a/tools/relocation_packer/src/sleb128.cc b/tools/relocation_packer/src/sleb128.cc index a10bd79a7..12c21e364 100644 --- a/tools/relocation_packer/src/sleb128.cc +++ b/tools/relocation_packer/src/sleb128.cc @@ -10,11 +10,33 @@ #include "elf_traits.h" +namespace { + +template +class uint_traits {}; + +template <> +class uint_traits { + public: + typedef int64_t int_t; +}; + +template <> +class uint_traits { + public: + typedef int32_t int_t; +}; + +} + namespace relocation_packer { // Empty constructor and destructor to silence chromium-style. -Sleb128Encoder::Sleb128Encoder() { } -Sleb128Encoder::~Sleb128Encoder() { } +template +Sleb128Encoder::Sleb128Encoder() { } + +template +Sleb128Encoder::~Sleb128Encoder() { } // Add a single value to the encoding. Values are encoded with variable // length. The least significant 7 bits of each byte hold 7 bits of data, @@ -22,11 +44,13 @@ Sleb128Encoder::~Sleb128Encoder() { } // value is sign extended up to a multiple of 7 bits (ensuring that the // most significant bit is zero for a positive number and one for a // negative number). -void Sleb128Encoder::Enqueue(ELF::Sxword value) { +template +void Sleb128Encoder::Enqueue(uint_t value) { + typedef typename uint_traits::int_t int_t; static const size_t size = CHAR_BIT * sizeof(value); bool more = true; - const bool negative = value < 0; + const bool negative = static_cast(value) < 0; while (more) { uint8_t byte = value & 127; @@ -34,11 +58,11 @@ void Sleb128Encoder::Enqueue(ELF::Sxword value) { // Sign extend if encoding a -ve value. if (negative) - value |= -(static_cast(1) << (size - 7)); + value |= -(static_cast(1) << (size - 7)); // The sign bit of byte is second high order bit. const bool sign_bit = byte & 64; - if ((value == 0 && !sign_bit) || (value == -1 && sign_bit)) + if ((value == 0 && !sign_bit) || (value == static_cast(-1) && sign_bit)) more = false; else byte |= 128; @@ -47,25 +71,30 @@ void Sleb128Encoder::Enqueue(ELF::Sxword value) { } // Add a vector of values to the encoding. -void Sleb128Encoder::EnqueueAll(const std::vector& values) { - for (size_t i = 0; i < values.size(); ++i) +template +void Sleb128Encoder::EnqueueAll(const std::vector& values) { + for (size_t i = 0; i < values.size(); ++i) { Enqueue(values[i]); + } } // Create a new decoder for the given encoded stream. -Sleb128Decoder::Sleb128Decoder(const std::vector& encoding) { +template +Sleb128Decoder::Sleb128Decoder(const std::vector& encoding, size_t start_with) { encoding_ = encoding; - cursor_ = 0; + cursor_ = start_with; } // Empty destructor to silence chromium-style. -Sleb128Decoder::~Sleb128Decoder() { } +template +Sleb128Decoder::~Sleb128Decoder() { } // Decode and retrieve a single value from the encoding. Consume bytes // until one without its most significant bit is found, and re-form the // value from the 7 bit fields of the bytes consumed. -ELF::Sxword Sleb128Decoder::Dequeue() { - ELF::Sxword value = 0; +template +uint_t Sleb128Decoder::Dequeue() { + uint_t value = 0; static const size_t size = CHAR_BIT * sizeof(value); size_t shift = 0; @@ -74,22 +103,29 @@ ELF::Sxword Sleb128Decoder::Dequeue() { // Loop until we reach a byte with its high order bit clear. do { byte = encoding_[cursor_++]; - value |= (static_cast(byte & 127) << shift); + value |= (static_cast(byte & 127) << shift); shift += 7; } while (byte & 128); // The sign bit is second high order bit of the final byte decoded. // Sign extend if value is -ve and we did not shift all of it. if (shift < size && (byte & 64)) - value |= -(static_cast(1) << shift); + value |= -(static_cast(1) << shift); - return value; + return static_cast(value); } // Decode and retrieve all remaining values from the encoding. -void Sleb128Decoder::DequeueAll(std::vector* values) { - while (cursor_ < encoding_.size()) +template +void Sleb128Decoder::DequeueAll(std::vector* values) { + while (cursor_ < encoding_.size()) { values->push_back(Dequeue()); + } } +template class Sleb128Encoder; +template class Sleb128Encoder; +template class Sleb128Decoder; +template class Sleb128Decoder; + } // namespace relocation_packer diff --git a/tools/relocation_packer/src/sleb128.h b/tools/relocation_packer/src/sleb128.h index 3544543c0..fa0a24610 100644 --- a/tools/relocation_packer/src/sleb128.h +++ b/tools/relocation_packer/src/sleb128.h @@ -22,6 +22,7 @@ namespace relocation_packer { // Encode packed words as a signed LEB128 byte stream. +template class Sleb128Encoder { public: // Explicit (but empty) constructor and destructor, for chromium-style. @@ -30,11 +31,11 @@ class Sleb128Encoder { // Add a value to the encoding stream. // |value| is the signed int to add. - void Enqueue(ELF::Sxword value); + void Enqueue(int_t value); // Add a vector of values to the encoding stream. // |values| is the vector of signed ints to add. - void EnqueueAll(const std::vector& values); + void EnqueueAll(const std::vector& values); // Retrieve the encoded representation of the values. // |encoding| is the returned vector of encoded data. @@ -46,21 +47,22 @@ class Sleb128Encoder { }; // Decode a LEB128 byte stream to produce packed words. +template class Sleb128Decoder { public: // Create a new decoder for the given encoded stream. // |encoding| is the vector of encoded data. - explicit Sleb128Decoder(const std::vector& encoding); + explicit Sleb128Decoder(const std::vector& encoding, size_t start_with); // Explicit (but empty) destructor, for chromium-style. ~Sleb128Decoder(); // Retrieve the next value from the encoded stream. - ELF::Sxword Dequeue(); + int_t Dequeue(); // Retrieve all remaining values from the encoded stream. // |values| is the vector of decoded data. - void DequeueAll(std::vector* values); + void DequeueAll(std::vector* values); private: // Encoded LEB128 stream. diff --git a/tools/relocation_packer/src/sleb128_unittest.cc b/tools/relocation_packer/src/sleb128_unittest.cc index 60a5d0de7..49a553c2f 100644 --- a/tools/relocation_packer/src/sleb128_unittest.cc +++ b/tools/relocation_packer/src/sleb128_unittest.cc @@ -6,27 +6,27 @@ #include #include "elf_traits.h" -#include "testing/gtest/include/gtest/gtest.h" +#include "gtest/gtest.h" namespace relocation_packer { -TEST(Sleb128, Encoder) { - std::vector values; - values.push_back(624485); - values.push_back(0); - values.push_back(1); - values.push_back(63); - values.push_back(64); - values.push_back(-1); - values.push_back(-624485); +TEST(Sleb128, Encoder64) { + std::vector values; + values.push_back(624485U); + values.push_back(0U); + values.push_back(1U); + values.push_back(63U); + values.push_back(64U); + values.push_back(static_cast(-1)); + values.push_back(static_cast(-624485)); - Sleb128Encoder encoder; + Sleb128Encoder encoder; encoder.EnqueueAll(values); - encoder.Enqueue(2147483647); - encoder.Enqueue(-2147483648); - encoder.Enqueue(9223372036854775807ll); - encoder.Enqueue(-9223372036854775807ll - 1); + encoder.Enqueue(2147483647U); + encoder.Enqueue(static_cast(-2147483648)); + encoder.Enqueue(9223372036854775807ULL); + encoder.Enqueue(static_cast(-9223372036854775807LL - 1)); std::vector encoding; encoder.GetEncoding(&encoding); @@ -143,24 +143,24 @@ TEST(Sleb128, Decoder) { encoding.push_back(0x80); encoding.push_back(0x7f); - Sleb128Decoder decoder(encoding); + Sleb128Decoder decoder(encoding, 0); - EXPECT_EQ(624485, decoder.Dequeue()); + EXPECT_EQ(624485U, decoder.Dequeue()); - std::vector dequeued; + std::vector dequeued; decoder.DequeueAll(&dequeued); - EXPECT_EQ(10u, dequeued.size()); - EXPECT_EQ(0, dequeued[0]); - EXPECT_EQ(1, dequeued[1]); - EXPECT_EQ(63, dequeued[2]); - EXPECT_EQ(64, dequeued[3]); - EXPECT_EQ(-1, dequeued[4]); - EXPECT_EQ(-624485, dequeued[5]); - EXPECT_EQ(2147483647, dequeued[6]); - EXPECT_EQ(-2147483648, dequeued[7]); - EXPECT_EQ(9223372036854775807ll, dequeued[8]); - EXPECT_EQ(-9223372036854775807ll - 1, dequeued[9]); + EXPECT_EQ(10U, dequeued.size()); + EXPECT_EQ(0U, dequeued[0]); + EXPECT_EQ(1U, dequeued[1]); + EXPECT_EQ(63U, dequeued[2]); + EXPECT_EQ(64U, dequeued[3]); + EXPECT_EQ(static_cast(-1), dequeued[4]); + EXPECT_EQ(static_cast(-624485), dequeued[5]); + EXPECT_EQ(2147483647U, dequeued[6]); + EXPECT_EQ(static_cast(-2147483648), dequeued[7]); + EXPECT_EQ(9223372036854775807ULL, dequeued[8]); + EXPECT_EQ(static_cast(-9223372036854775807LL - 1), dequeued[9]); } } // namespace relocation_packer diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm32_packed.so index 7cfdd609451d207f835362b2262be27e69206d8e..d97ef825260d3a5dfec58d42b477693dc6220532 100755 GIT binary patch delta 351 zcmZ3sgLT#p)(HxXOC~DHgbFY)m;mtu1_)*W(jd$X#3GD9EC|8EKt2eAZd zJAiyHARQ0HAjiHCoLnUDHCcqoX7dmEW$i3}p*}vF*DW_^WE7nIY=t_Ib zN;yTK_Y#souaBQ|=QsAHLz@)G_ zM(_f!8_+xk5ui#TAnm~qaR3L9{pqwUUc5l-6Xq>vVBiDN0+S7y^f&*IU)C<*7!YL0)KJIR!t|USqrixjFWGz zPzRDsD?y~zN_7XIp)Y_~2dD((au5J12jQPU%n8IGagbv{801)FbsU=~u6)kKC@}fq c3gO8;YXlhAO`f|(9mqclBtL9^yGD0C0ED7LOaK4? diff --git a/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so b/tools/relocation_packer/test_data/elf_file_unittest_relocs_arm64_packed.so index 532beac0bf22c653e9ff7489dd1ac339aa1ffed1..e44e4597b30e56d749a748ae7df6c8756e4cd1db 100755 GIT binary patch delta 464 zcmX|+JxIeq6vuOyejG~Bb_m$vOedv7p#>L_1V^Eiq*BMwK^zMOhwfb+TAqSaH=(P< zsVE9kT?CyZQ#MgSO>GJ~`Ys~}RCY%#BzZ~})xGjY><4%dx>B_d*tiESY-85bN zm3!>wmTbLdmspQE9r;>u%*u{Zw4$@=c*L|370GQ+7L4_SLQaxe!szZsHoiU7t^%8e zL1gI2ZRgGSI7`)=wVHGBStP`Q=Pv`P`UYvho?qR-PqoCyL?n~Ca->})%8Ab+DG|8x zHIf4lr{sW71?`YSBnK}f{}#24T!kT00}p8cp9$I_hsa~_kSD+cK^r-N_EZH;XK)#4 V)SZAA=ydb|e6G{}kz>z0{vUDbbT|M2 delta 2590 zcmezTo$dT__6ZtHE$=33sZZX^$R8D8$N&Z~nt_24%m0<&4vjMS!-NapbTp&|GJPx~wO?q5GPfJo*z`V^`jDAd;ITh^XHw!4t2_T6pPa)EL zQ2qn<$rG9VHouU6v$WnZz|rs}`-D5J2M#m-V7B34pf9YauXPx<)zjI(=nfe5|G-AT zX#At6Nc!?e)BkAtAIK0GQTZR#3eYRA%q>Yw0@5W#Kzj3wqk@c#jFW#Ivj>t^$L$%J zCRZIdG6l6zpiK{WBLmjhxS*505J_8ct?9VGksoz+@AcJaodI!w#Z} zW3r%}_+*8Xii~!Xole>V$tECaKlu=lbePO^%AO-0qEHpAFyWLUOh5rFu;7#;WBlYp zKy_On>JlLao>t`83K2+wXgsaRxOH;VX?sp+;|JL2Id$5MbIV(ZstXWpXB3!PzD#yH OW5<-UWpmS+!uJ5^4xoSl From fa26eee77685e8dee7986e62a7d263003f5bd25a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 3 Feb 2015 16:06:47 -0800 Subject: [PATCH 166/194] Refactoring: introduce reloc_iterators Replace rel/rela array with reloc_iterators. Change-Id: I6165d062e0390b6bc60da2e8279aabbedf828ec9 --- linker/linker.cpp | 18 +++++++------ linker/linker.h | 4 +-- linker/linker_mips.cpp | 11 +++++--- linker/linker_reloc_iterators.h | 47 +++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 linker/linker_reloc_iterators.h diff --git a/linker/linker.cpp b/linker/linker.cpp index 5d2425f52..ae9df52aa 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -50,11 +50,12 @@ #include "private/UniquePtr.h" #include "linker.h" +#include "linker_allocator.h" #include "linker_debug.h" #include "linker_environ.h" #include "linker_phdr.h" #include "linker_relocs.h" -#include "linker_allocator.h" +#include "linker_reloc_iterators.h" /* >>> IMPORTANT NOTE - READ ME BEFORE MODIFYING <<< * @@ -1297,9 +1298,10 @@ static ElfW(Addr) get_addend(ElfW(Rel)* rel, ElfW(Addr) reloc_addr) { } #endif -template -bool soinfo::relocate(ElfRelT* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { - for (size_t idx = 0; idx < count; ++idx, ++rel) { +template +bool soinfo::relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { + for (size_t idx = 0; rel_iterator.has_next(); ++idx) { + const auto rel = rel_iterator.next(); ElfW(Word) type = ELFW(R_TYPE)(rel->r_info); ElfW(Word) sym = ELFW(R_SYM)(rel->r_info); @@ -2273,26 +2275,26 @@ bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& #if defined(USE_RELA) if (rela_ != nullptr) { DEBUG("[ relocating %s ]", name); - if (!relocate(rela_, rela_count_, global_group, local_group)) { + if (!relocate(plain_reloc_iterator(rela_, rela_count_), global_group, local_group)) { return false; } } if (plt_rela_ != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (!relocate(plt_rela_, plt_rela_count_, global_group, local_group)) { + if (!relocate(plain_reloc_iterator(plt_rela_, plt_rela_count_), global_group, local_group)) { return false; } } #else if (rel_ != nullptr) { DEBUG("[ relocating %s ]", name); - if (!relocate(rel_, rel_count_, global_group, local_group)) { + if (!relocate(plain_reloc_iterator(rel_, rel_count_), global_group, local_group)) { return false; } } if (plt_rel_ != nullptr) { DEBUG("[ relocating %s plt ]", name); - if (!relocate(plt_rel_, plt_rel_count_, global_group, local_group)) { + if (!relocate(plain_reloc_iterator(plt_rel_, plt_rel_count_), global_group, local_group)) { return false; } } diff --git a/linker/linker.h b/linker/linker.h index 2afbaf62f..222ddbf73 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -286,8 +286,8 @@ struct soinfo { void call_array(const char* array_name, linker_function_t* functions, size_t count, bool reverse); void call_function(const char* function_name, linker_function_t function); - template - bool relocate(ElfRelT* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group); + template + bool relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group); private: // This part of the structure is only available diff --git a/linker/linker_mips.cpp b/linker/linker_mips.cpp index 7fbde3d35..d71659e9a 100644 --- a/linker/linker_mips.cpp +++ b/linker/linker_mips.cpp @@ -29,10 +29,15 @@ #include "linker.h" #include "linker_debug.h" #include "linker_relocs.h" +#include "linker_reloc_iterators.h" + +template bool soinfo::relocate(plain_reloc_iterator&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group); + +template +bool soinfo::relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { + for (size_t idx = 0; rel_iterator.has_next(); ++idx) { + const auto rel = rel_iterator.next(); -template<> -bool soinfo::relocate(ElfW(Rel)* rel, unsigned count, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { - for (size_t idx = 0; idx < count; ++idx, ++rel) { ElfW(Word) type = ELFW(R_TYPE)(rel->r_info); ElfW(Word) sym = ELFW(R_SYM)(rel->r_info); diff --git a/linker/linker_reloc_iterators.h b/linker/linker_reloc_iterators.h new file mode 100644 index 000000000..6388bb0d7 --- /dev/null +++ b/linker/linker_reloc_iterators.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LINKER_RELOC_ITERATORS_H +#define __LINKER_RELOC_ITERATORS_H + +#include "linker.h" + +class plain_reloc_iterator { +#if defined(USE_RELA) + typedef ElfW(Rela) rel_t; +#else + typedef ElfW(Rel) rel_t; +#endif + public: + plain_reloc_iterator(rel_t* rel_array, size_t count) + : begin_(rel_array), end_(begin_ + count), current_(begin_) {} + + bool has_next() { + return current_ < end_; + } + + rel_t* next() { + return current_++; + } + private: + rel_t* const begin_; + rel_t* const end_; + rel_t* current_; + + DISALLOW_COPY_AND_ASSIGN(plain_reloc_iterator); +}; + +#endif // __LINKER_RELOC_ITERATORS_H From 9d0c79304d2413028aa5c213f7a567f00feccde5 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Fri, 6 Mar 2015 13:48:58 -0800 Subject: [PATCH 167/194] Remove PTHREAD_ATTR_FLAG_MAIN_THREAD. Make this change because I think it is more reasonable to check stack info in pthread_getattr_np. I believe pthread_attr_t is not tied with any thread, and can't have a flag saying who using it is the main thread. This change also helps refactor of g_thread_list_lock. Bug: 19636317 Change-Id: Iedbb85a391ac3e1849dd036d01445dac4bc63db9 --- libc/bionic/libc_init_common.cpp | 1 - libc/bionic/pthread_attr.cpp | 11 +++++++---- libc/bionic/pthread_internal.h | 3 --- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp index f82ec739a..52ca0f228 100644 --- a/libc/bionic/libc_init_common.cpp +++ b/libc/bionic/libc_init_common.cpp @@ -88,7 +88,6 @@ void __libc_init_tls(KernelArgumentBlock& args) { // The main thread has no mmap allocated space for stack or pthread_internal_t. main_thread.mmap_size = 0; pthread_attr_init(&main_thread.attr); - main_thread.attr.flags = PTHREAD_ATTR_FLAG_MAIN_THREAD; main_thread.attr.guard_size = 0; // The main thread has no guard page. main_thread.attr.stack_size = 0; // User code should never see this; we'll compute it when asked. // TODO: the main thread's sched_policy and sched_priority need to be queried. diff --git a/libc/bionic/pthread_attr.cpp b/libc/bionic/pthread_attr.cpp index c65ccc132..be1c25228 100644 --- a/libc/bionic/pthread_attr.cpp +++ b/libc/bionic/pthread_attr.cpp @@ -152,9 +152,6 @@ static int __pthread_attr_getstack_main_thread(void** stack_base, size_t* stack_ } int pthread_attr_getstack(const pthread_attr_t* attr, void** stack_base, size_t* stack_size) { - if ((attr->flags & PTHREAD_ATTR_FLAG_MAIN_THREAD) != 0) { - return __pthread_attr_getstack_main_thread(stack_base, stack_size); - } *stack_base = attr->stack_base; *stack_size = attr->stack_size; return 0; @@ -171,7 +168,13 @@ int pthread_attr_getguardsize(const pthread_attr_t* attr, size_t* guard_size) { } int pthread_getattr_np(pthread_t t, pthread_attr_t* attr) { - *attr = reinterpret_cast(t)->attr; + pthread_internal_t* thread = reinterpret_cast(t); + *attr = thread->attr; + // The main thread's stack information is not stored in thread->attr, and we need to + // collect that at runtime. + if (thread->tid == getpid()) { + return __pthread_attr_getstack_main_thread(&attr->stack_base, &attr->stack_size); + } return 0; } diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h index f131d7aaa..6ace30180 100644 --- a/libc/bionic/pthread_internal.h +++ b/libc/bionic/pthread_internal.h @@ -41,9 +41,6 @@ /* Did the thread exit without freeing pthread_internal_t? */ #define PTHREAD_ATTR_FLAG_ZOMBIE 0x00000004 -/* Is this the main thread? */ -#define PTHREAD_ATTR_FLAG_MAIN_THREAD 0x80000000 - struct pthread_key_data_t { uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below. void* data; From 45789b63db5c186f1ccac23093c198ae8b0dd921 Mon Sep 17 00:00:00 2001 From: James Rose Date: Wed, 12 Nov 2014 12:05:54 -0700 Subject: [PATCH 168/194] libm: Add hardware sqrt, ceil, floor and trunc for x86 & x86_64 Add hardware implementations for sqrt, ceil, floor and trunc for x86 and x86_64. These routines, and in particular sqrt are much faster than the BSD C language versions of these functions. Fixed whitespace errors. Revised x86 versions with respect to alignment. Rebased for Android 5.0 Change-Id: I86bdb520ce5e589b0cf63778f353fbd3263c8f0e Author: James Rose Signed-off-by: James Rose --- libm/Android.mk | 52 ++++++++++++++++++++++++++++++++++---------- libm/x86/ceil.S | 44 +++++++++++++++++++++++++++++++++++++ libm/x86/ceilf.S | 39 +++++++++++++++++++++++++++++++++ libm/x86/floor.S | 44 +++++++++++++++++++++++++++++++++++++ libm/x86/floorf.S | 39 +++++++++++++++++++++++++++++++++ libm/x86/sqrt.S | 44 +++++++++++++++++++++++++++++++++++++ libm/x86/sqrtf.S | 39 +++++++++++++++++++++++++++++++++ libm/x86/trunc.S | 44 +++++++++++++++++++++++++++++++++++++ libm/x86/truncf.S | 39 +++++++++++++++++++++++++++++++++ libm/x86_64/ceil.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/ceilf.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/floor.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/floorf.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/sqrt.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/sqrtf.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/trunc.S | 36 ++++++++++++++++++++++++++++++ libm/x86_64/truncf.S | 36 ++++++++++++++++++++++++++++++ 17 files changed, 660 insertions(+), 12 deletions(-) create mode 100644 libm/x86/ceil.S create mode 100644 libm/x86/ceilf.S create mode 100644 libm/x86/floor.S create mode 100644 libm/x86/floorf.S create mode 100644 libm/x86/sqrt.S create mode 100644 libm/x86/sqrtf.S create mode 100644 libm/x86/trunc.S create mode 100644 libm/x86/truncf.S create mode 100644 libm/x86_64/ceil.S create mode 100644 libm/x86_64/ceilf.S create mode 100644 libm/x86_64/floor.S create mode 100644 libm/x86_64/floorf.S create mode 100644 libm/x86_64/sqrt.S create mode 100644 libm/x86_64/sqrtf.S create mode 100644 libm/x86_64/trunc.S create mode 100644 libm/x86_64/truncf.S diff --git a/libm/Android.mk b/libm/Android.mk index 15c390cb0..418ec5973 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -331,45 +331,73 @@ LOCAL_SRC_FILES_mips64 += $(libm_mips_arch_files) # ----------------------------------------------------------------------------- LOCAL_SRC_FILES_x86 += \ i387/fenv.c \ - upstream-freebsd/lib/msun/src/e_sqrt.c \ - upstream-freebsd/lib/msun/src/e_sqrtf.c \ - upstream-freebsd/lib/msun/src/s_ceil.c \ - upstream-freebsd/lib/msun/src/s_ceilf.c \ upstream-freebsd/lib/msun/src/s_fma.c \ upstream-freebsd/lib/msun/src/s_fmaf.c \ - upstream-freebsd/lib/msun/src/s_floor.c \ - upstream-freebsd/lib/msun/src/s_floorf.c \ upstream-freebsd/lib/msun/src/s_llrint.c \ upstream-freebsd/lib/msun/src/s_llrintf.c \ upstream-freebsd/lib/msun/src/s_lrint.c \ upstream-freebsd/lib/msun/src/s_lrintf.c \ upstream-freebsd/lib/msun/src/s_rint.c \ upstream-freebsd/lib/msun/src/s_rintf.c \ + x86/sqrt.S \ + x86/sqrtf.S \ + +ifeq ($(ARCH_X86_HAVE_SSE4_1),true) +LOCAL_SRC_FILES_x86 += \ + x86/ceil.S \ + x86/ceilf.S \ + x86/floor.S \ + x86/floorf.S \ + x86/trunc.S \ + x86/truncf.S \ + +else +LOCAL_SRC_FILES_x86 += \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ upstream-freebsd/lib/msun/src/s_trunc.c \ upstream-freebsd/lib/msun/src/s_truncf.c \ +endif + # ----------------------------------------------------------------------------- # x86_64 # ----------------------------------------------------------------------------- LOCAL_SRC_FILES_x86_64 += \ amd64/fenv.c \ - upstream-freebsd/lib/msun/src/e_sqrt.c \ - upstream-freebsd/lib/msun/src/e_sqrtf.c \ - upstream-freebsd/lib/msun/src/s_ceil.c \ - upstream-freebsd/lib/msun/src/s_ceilf.c \ upstream-freebsd/lib/msun/src/s_fma.c \ upstream-freebsd/lib/msun/src/s_fmaf.c \ - upstream-freebsd/lib/msun/src/s_floor.c \ - upstream-freebsd/lib/msun/src/s_floorf.c \ upstream-freebsd/lib/msun/src/s_llrint.c \ upstream-freebsd/lib/msun/src/s_llrintf.c \ upstream-freebsd/lib/msun/src/s_lrint.c \ upstream-freebsd/lib/msun/src/s_lrintf.c \ upstream-freebsd/lib/msun/src/s_rint.c \ upstream-freebsd/lib/msun/src/s_rintf.c \ + x86_64/sqrt.S \ + x86_64/sqrtf.S \ + +ifeq ($(ARCH_X86_HAVE_SSE4_1),true) +LOCAL_SRC_FILES_x86_64 += \ + x86_64/ceil.S \ + x86_64/ceilf.S \ + x86_64/floor.S \ + x86_64/floorf.S \ + x86_64/trunc.S \ + x86_64/truncf.S \ + +else +LOCAL_SRC_FILES_x86_64 += \ + upstream-freebsd/lib/msun/src/s_ceil.c \ + upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_floor.c \ + upstream-freebsd/lib/msun/src/s_floorf.c \ upstream-freebsd/lib/msun/src/s_trunc.c \ upstream-freebsd/lib/msun/src/s_truncf.c \ +endif + LOCAL_C_INCLUDES_x86 += $(LOCAL_PATH)/i387 LOCAL_C_INCLUDES += $(LOCAL_PATH)/upstream-freebsd/lib/msun/src/ diff --git a/libm/x86/ceil.S b/libm/x86/ceil.S new file mode 100644 index 000000000..b992057cc --- /dev/null +++ b/libm/x86/ceil.S @@ -0,0 +1,44 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(ceil) + mov %esp,%eax + and $0xfffffff8,%eax + movsd 0x4(%esp),%xmm0 + roundsd $0x2,%xmm0,%xmm0 + movlpd %xmm0,-0x8(%eax) + fldl -0x8(%eax) + ret +END(ceil) + +.globl ceill; +.equ ceill, ceil; diff --git a/libm/x86/ceilf.S b/libm/x86/ceilf.S new file mode 100644 index 000000000..51eb44056 --- /dev/null +++ b/libm/x86/ceilf.S @@ -0,0 +1,39 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(ceilf) + movss 0x4(%esp),%xmm0 + roundss $0x2,%xmm0,%xmm0 + movss %xmm0,-0x4(%esp) + flds -0x4(%esp) + ret +END(ceilf) diff --git a/libm/x86/floor.S b/libm/x86/floor.S new file mode 100644 index 000000000..2b815f346 --- /dev/null +++ b/libm/x86/floor.S @@ -0,0 +1,44 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(floor) + mov %esp,%eax + and $0xfffffff8,%eax + movsd 0x4(%esp),%xmm0 + roundsd $0x1,%xmm0,%xmm0 + movlpd %xmm0,-0x8(%eax) + fldl -0x8(%eax) + ret +END(floor) + +.globl floorl; +.equ floorl, floor; diff --git a/libm/x86/floorf.S b/libm/x86/floorf.S new file mode 100644 index 000000000..79b90731b --- /dev/null +++ b/libm/x86/floorf.S @@ -0,0 +1,39 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(floorf) + movss 0x4(%esp),%xmm0 + roundss $0x1,%xmm0,%xmm0 + movss %xmm0,-0x4(%esp) + flds -0x4(%esp) + ret +END(floorf) diff --git a/libm/x86/sqrt.S b/libm/x86/sqrt.S new file mode 100644 index 000000000..3e459ceaf --- /dev/null +++ b/libm/x86/sqrt.S @@ -0,0 +1,44 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(sqrt) + mov %esp,%eax + and $0xfffffff8,%eax + movsd 0x4(%esp),%xmm0 + sqrtsd %xmm0,%xmm0 + movlpd %xmm0,-0x8(%eax) + fldl -0x8(%eax) + ret +END(sqrt) + +.globl sqrtl; +.equ sqrtl, sqrt; diff --git a/libm/x86/sqrtf.S b/libm/x86/sqrtf.S new file mode 100644 index 000000000..78c183b03 --- /dev/null +++ b/libm/x86/sqrtf.S @@ -0,0 +1,39 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(sqrtf) + movss 0x4(%esp),%xmm0 + sqrtss %xmm0,%xmm0 + movss %xmm0,-0x4(%esp) + flds -0x4(%esp) + ret +END(sqrtf) diff --git a/libm/x86/trunc.S b/libm/x86/trunc.S new file mode 100644 index 000000000..2f21e88db --- /dev/null +++ b/libm/x86/trunc.S @@ -0,0 +1,44 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(trunc) + mov %esp,%eax + and $0xfffffff8,%eax + movsd 0x4(%esp),%xmm0 + roundsd $0x3,%xmm0,%xmm0 + movlpd %xmm0,-0x8(%eax) + fldl -0x8(%eax) + ret +END(trunc) + +.globl truncl; +.equ truncl, trunc; diff --git a/libm/x86/truncf.S b/libm/x86/truncf.S new file mode 100644 index 000000000..d3e3f4a7a --- /dev/null +++ b/libm/x86/truncf.S @@ -0,0 +1,39 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(truncf) + movss 0x4(%esp),%xmm0 + roundss $0x3,%xmm0,%xmm0 + movss %xmm0,-0x4(%esp) + flds -0x4(%esp) + ret +END(truncf) diff --git a/libm/x86_64/ceil.S b/libm/x86_64/ceil.S new file mode 100644 index 000000000..d4492c404 --- /dev/null +++ b/libm/x86_64/ceil.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(ceil) +roundsd $0x2,%xmm0,%xmm0 +retq +END(ceil) diff --git a/libm/x86_64/ceilf.S b/libm/x86_64/ceilf.S new file mode 100644 index 000000000..0e1ca95dc --- /dev/null +++ b/libm/x86_64/ceilf.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(ceilf) +roundss $0x2,%xmm0,%xmm0 +retq +END(ceilf) diff --git a/libm/x86_64/floor.S b/libm/x86_64/floor.S new file mode 100644 index 000000000..dc80e88b7 --- /dev/null +++ b/libm/x86_64/floor.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(floor) +roundsd $0x1,%xmm0,%xmm0 +retq +END(floor) diff --git a/libm/x86_64/floorf.S b/libm/x86_64/floorf.S new file mode 100644 index 000000000..832f9c5fc --- /dev/null +++ b/libm/x86_64/floorf.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(floorf) +roundss $0x1,%xmm0,%xmm0 +retq +END(floorf) diff --git a/libm/x86_64/sqrt.S b/libm/x86_64/sqrt.S new file mode 100644 index 000000000..ee9702655 --- /dev/null +++ b/libm/x86_64/sqrt.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(sqrt) +sqrtsd %xmm0,%xmm0 +retq +END(sqrt) diff --git a/libm/x86_64/sqrtf.S b/libm/x86_64/sqrtf.S new file mode 100644 index 000000000..910407f56 --- /dev/null +++ b/libm/x86_64/sqrtf.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(sqrtf) +sqrtss %xmm0,%xmm0 +retq +END(sqrtf) diff --git a/libm/x86_64/trunc.S b/libm/x86_64/trunc.S new file mode 100644 index 000000000..fe18b40a6 --- /dev/null +++ b/libm/x86_64/trunc.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(trunc) +roundsd $0x3,%xmm0,%xmm0 +retq +END(trunc) diff --git a/libm/x86_64/truncf.S b/libm/x86_64/truncf.S new file mode 100644 index 000000000..eeee1d776 --- /dev/null +++ b/libm/x86_64/truncf.S @@ -0,0 +1,36 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include + +ENTRY(truncf) +roundss $0x3,%xmm0,%xmm0 +retq +END(truncf) From 18a6956b76a071097fc658c5fe13ef010e31864a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Wed, 4 Feb 2015 16:05:30 -0800 Subject: [PATCH 169/194] Add support for packed relocations. Change-Id: I796a4ce86d3fccb8361c19889419c96147ee3c9f --- libc/include/elf.h | 7 +++ linker/linker.cpp | 89 +++++++++++++++++++++++++-- linker/linker.h | 3 + linker/linker_leb128.h | 87 ++++++++++++++++++++++++++ linker/linker_mips.cpp | 19 +++++- linker/linker_phdr.cpp | 2 +- linker/linker_reloc_iterators.h | 105 ++++++++++++++++++++++++++++++++ 7 files changed, 305 insertions(+), 7 deletions(-) create mode 100644 linker/linker_leb128.h diff --git a/libc/include/elf.h b/libc/include/elf.h index a41a2441a..41680a521 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -94,6 +94,13 @@ typedef struct { #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 +/* Android compressed rel/rela sections */ +#define DT_ANDROID_REL (DT_LOOS + 2) +#define DT_ANDROID_RELSZ (DT_LOOS + 3) + +#define DT_ANDROID_RELA (DT_LOOS + 4) +#define DT_ANDROID_RELASZ (DT_LOOS + 5) + /* gnu hash entry */ #define DT_GNU_HASH 0x6ffffef5 diff --git a/linker/linker.cpp b/linker/linker.cpp index ae9df52aa..87fce95c2 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -53,6 +53,7 @@ #include "linker_allocator.h" #include "linker_debug.h" #include "linker_environ.h" +#include "linker_leb128.h" #include "linker_phdr.h" #include "linker_relocs.h" #include "linker_reloc_iterators.h" @@ -1302,6 +1303,10 @@ template bool soinfo::relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; rel_iterator.has_next(); ++idx) { const auto rel = rel_iterator.next(); + if (rel == nullptr) { + return false; + } + ElfW(Word) type = ELFW(R_TYPE)(rel->r_info); ElfW(Word) sym = ELFW(R_SYM)(rel->r_info); @@ -1407,16 +1412,16 @@ bool soinfo::relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& globa MARK(rel->r_offset); TRACE_TYPE(RELO, "RELO RELATIVE %16p <- %16p\n", reinterpret_cast(reloc), - reinterpret_cast(base + addend)); - *reinterpret_cast(reloc) = (base + addend); + reinterpret_cast(load_bias + addend)); + *reinterpret_cast(reloc) = (load_bias + addend); break; case R_GENERIC_IRELATIVE: count_relocation(kRelocRelative); MARK(rel->r_offset); TRACE_TYPE(RELO, "RELO IRELATIVE %16p <- %16p\n", reinterpret_cast(reloc), - reinterpret_cast(base + addend)); - *reinterpret_cast(reloc) = call_ifunc_resolver(base + addend); + reinterpret_cast(load_bias + addend)); + *reinterpret_cast(reloc) = call_ifunc_resolver(load_bias + addend); break; #if defined(__aarch64__) @@ -2053,6 +2058,22 @@ bool soinfo::prelink_image() { rela_count_ = d->d_un.d_val / sizeof(ElfW(Rela)); break; + case DT_ANDROID_RELA: + android_relocs_ = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; + + case DT_ANDROID_RELASZ: + android_relocs_size_ = d->d_un.d_val; + break; + + case DT_ANDROID_REL: + DL_ERR("unsupported DT_ANDROID_REL in \"%s\"", name); + return false; + + case DT_ANDROID_RELSZ: + DL_ERR("unsupported DT_ANDROID_RELSZ in \"%s\"", name); + return false; + case DT_RELAENT: if (d->d_un.d_val != sizeof(ElfW(Rela))) { DL_ERR("invalid DT_RELAENT: %zd", static_cast(d->d_un.d_val)); @@ -2071,6 +2092,7 @@ bool soinfo::prelink_image() { case DT_RELSZ: DL_ERR("unsupported DT_RELSZ in \"%s\"", name); return false; + #else case DT_REL: rel_ = reinterpret_cast(load_bias + d->d_un.d_ptr); @@ -2087,6 +2109,22 @@ bool soinfo::prelink_image() { } break; + case DT_ANDROID_REL: + android_relocs_ = reinterpret_cast(load_bias + d->d_un.d_ptr); + break; + + case DT_ANDROID_RELSZ: + android_relocs_size_ = d->d_un.d_val; + break; + + case DT_ANDROID_RELA: + DL_ERR("unsupported DT_ANDROID_RELA in \"%s\"", name); + return false; + + case DT_ANDROID_RELASZ: + DL_ERR("unsupported DT_ANDROID_RELASZ in \"%s\"", name); + return false; + // "Indicates that all RELATIVE relocations have been concatenated together, // and specifies the RELATIVE relocation count." // @@ -2094,9 +2132,15 @@ bool soinfo::prelink_image() { // Not currently used by bionic linker - ignored. case DT_RELCOUNT: break; + case DT_RELA: DL_ERR("unsupported DT_RELA in \"%s\"", name); return false; + + case DT_RELASZ: + DL_ERR("unsupported DT_RELASZ in \"%s\"", name); + return false; + #endif case DT_INIT: init_func_ = reinterpret_cast(load_bias + d->d_un.d_ptr); @@ -2251,7 +2295,8 @@ bool soinfo::prelink_image() { return true; } -bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& local_group, const android_dlextinfo* extinfo) { +bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& local_group, + const android_dlextinfo* extinfo) { local_group_root_ = local_group.front(); if (local_group_root_ == nullptr) { @@ -2272,6 +2317,40 @@ bool soinfo::link_image(const soinfo_list_t& global_group, const soinfo_list_t& } #endif + if (android_relocs_ != nullptr) { + // check signature + if (android_relocs_size_ > 3 && + android_relocs_[0] == 'A' && + android_relocs_[1] == 'P' && + (android_relocs_[2] == 'U' || android_relocs_[2] == 'S') && + android_relocs_[3] == '2') { + DEBUG("[ android relocating %s ]", name); + + bool relocated = false; + const uint8_t* packed_relocs = android_relocs_ + 4; + const size_t packed_relocs_size = android_relocs_size_ - 4; + + if (android_relocs_[2] == 'U') { + relocated = relocate( + packed_reloc_iterator( + leb128_decoder(packed_relocs, packed_relocs_size)), + global_group, local_group); + } else { // android_relocs_[2] == 'S' + relocated = relocate( + packed_reloc_iterator( + sleb128_decoder(packed_relocs, packed_relocs_size)), + global_group, local_group); + } + + if (!relocated) { + return false; + } + } else { + DL_ERR("bad android relocation header."); + return false; + } + } + #if defined(USE_RELA) if (rela_ != nullptr) { DEBUG("[ relocating %s ]", name); diff --git a/linker/linker.h b/linker/linker.h index 222ddbf73..f8640a0e5 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -315,6 +315,9 @@ struct soinfo { soinfo* local_group_root_; + uint8_t* android_relocs_; + size_t android_relocs_size_; + friend soinfo* get_libdl_info(); }; diff --git a/linker/linker_leb128.h b/linker/linker_leb128.h new file mode 100644 index 000000000..d5c6488c0 --- /dev/null +++ b/linker/linker_leb128.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LINKER_LEB128_H +#define _LINKER_LEB128_H + +#include + +// Helper classes for decoding LEB128, used in packed relocation data. +// http://en.wikipedia.org/wiki/LEB128 + +class leb128_decoder { + public: + leb128_decoder(const uint8_t* buffer, size_t count) + : current_(buffer), end_(buffer + count) { } + + size_t pop_front() { + size_t value = 0; + + size_t shift = 0; + uint8_t byte; + + do { + if (current_ >= end_) { + __libc_fatal("leb128_decoder ran out of bounds"); + } + byte = *current_++; + value |= static_cast(byte & 127) << shift; + shift += 7; + } while (byte & 128); + + return value; + } + + private: + const uint8_t* current_; + const uint8_t* const end_; +}; + +class sleb128_decoder { + public: + sleb128_decoder(const uint8_t* buffer, size_t count) + : current_(buffer), end_(buffer+count) { } + + size_t pop_front() { + size_t value = 0; + static const size_t size = CHAR_BIT * sizeof(value); + + size_t shift = 0; + uint8_t byte; + + do { + if (current_ >= end_) { + __libc_fatal("leb128_decoder ran out of bounds"); + } + byte = *current_++; + value |= (static_cast(byte & 127) << shift); + shift += 7; + } while (byte & 128); + + if (shift < size && (byte & 64)) { + value |= -(static_cast(1) << shift); + } + + return value; + } + + private: + const uint8_t* current_; + const uint8_t* const end_; +}; + +#endif // __LINKER_LEB128_H + diff --git a/linker/linker_mips.cpp b/linker/linker_mips.cpp index d71659e9a..f0bde55cd 100644 --- a/linker/linker_mips.cpp +++ b/linker/linker_mips.cpp @@ -30,14 +30,31 @@ #include "linker_debug.h" #include "linker_relocs.h" #include "linker_reloc_iterators.h" +#include "linker_leb128.h" -template bool soinfo::relocate(plain_reloc_iterator&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group); +template bool soinfo::relocate(plain_reloc_iterator&& rel_iterator, + const soinfo_list_t& global_group, + const soinfo_list_t& local_group); + +template bool soinfo::relocate>( + packed_reloc_iterator&& rel_iterator, + const soinfo_list_t& global_group, + const soinfo_list_t& local_group); + +template bool soinfo::relocate>( + packed_reloc_iterator&& rel_iterator, + const soinfo_list_t& global_group, + const soinfo_list_t& local_group); template bool soinfo::relocate(ElfRelIteratorT&& rel_iterator, const soinfo_list_t& global_group, const soinfo_list_t& local_group) { for (size_t idx = 0; rel_iterator.has_next(); ++idx) { const auto rel = rel_iterator.next(); + if (rel == nullptr) { + return false; + } + ElfW(Word) type = ELFW(R_TYPE)(rel->r_info); ElfW(Word) sym = ELFW(R_SYM)(rel->r_info); diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp index 91a2fb80d..38e62627a 100644 --- a/linker/linker_phdr.cpp +++ b/linker/linker_phdr.cpp @@ -332,7 +332,7 @@ bool ElfReader::ReserveAddressSpace(const android_dlextinfo* extinfo) { return false; } int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS; - start = mmap(addr, load_size_, PROT_NONE, mmap_flags, -1, 0); + start = mmap(nullptr, load_size_, PROT_NONE, mmap_flags, -1, 0); if (start == MAP_FAILED) { DL_ERR("couldn't reserve %zd bytes of address space for \"%s\"", load_size_, name_); return false; diff --git a/linker/linker_reloc_iterators.h b/linker/linker_reloc_iterators.h index 6388bb0d7..5db31f9f6 100644 --- a/linker/linker_reloc_iterators.h +++ b/linker/linker_reloc_iterators.h @@ -19,6 +19,18 @@ #include "linker.h" +#include + +#define RELOCATION_GROUPED_BY_INFO_FLAG 1 +#define RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG 2 +#define RELOCATION_GROUPED_BY_ADDEND_FLAG 4 +#define RELOCATION_GROUP_HAS_ADDEND_FLAG 8 + +#define RELOCATION_GROUPED_BY_INFO(flags) (((flags) & RELOCATION_GROUPED_BY_INFO_FLAG) != 0) +#define RELOCATION_GROUPED_BY_OFFSET_DELTA(flags) (((flags) & RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG) != 0) +#define RELOCATION_GROUPED_BY_ADDEND(flags) (((flags) & RELOCATION_GROUPED_BY_ADDEND_FLAG) != 0) +#define RELOCATION_GROUP_HAS_ADDEND(flags) (((flags) & RELOCATION_GROUP_HAS_ADDEND_FLAG) != 0) + class plain_reloc_iterator { #if defined(USE_RELA) typedef ElfW(Rela) rel_t; @@ -44,4 +56,97 @@ class plain_reloc_iterator { DISALLOW_COPY_AND_ASSIGN(plain_reloc_iterator); }; +template +class packed_reloc_iterator { +#if defined(USE_RELA) + typedef ElfW(Rela) rel_t; +#else + typedef ElfW(Rel) rel_t; +#endif + public: + explicit packed_reloc_iterator(decoder_t&& decoder) + : decoder_(decoder) { + // initialize fields + memset(&reloc_, 0, sizeof(reloc_)); + relocation_count_ = decoder_.pop_front(); + reloc_.r_offset = decoder_.pop_front(); + relocation_index_ = 0; + relocation_group_index_ = 0; + group_size_ = 0; + } + + bool has_next() const { + return relocation_index_ < relocation_count_; + } + + rel_t* next() { + if (relocation_group_index_ == group_size_) { + if (!read_group_fields()) { + // Iterator is inconsistent state; it should not be called again + // but in case it is let's make sure has_next() returns false. + relocation_index_ = relocation_count_ = 0; + return nullptr; + } + } + + if (RELOCATION_GROUPED_BY_OFFSET_DELTA(group_flags_)) { + reloc_.r_offset += group_r_offset_delta_; + } else { + reloc_.r_offset += decoder_.pop_front(); + } + + if (!RELOCATION_GROUPED_BY_INFO(group_flags_)) { + reloc_.r_info = decoder_.pop_front(); + } + +#if defined(USE_RELA) + if (RELOCATION_GROUP_HAS_ADDEND(group_flags_) && !RELOCATION_GROUPED_BY_ADDEND(group_flags_)) { + reloc_.r_addend += decoder_.pop_front(); + } +#endif + + relocation_index_++; + relocation_group_index_++; + + return &reloc_; + } + private: + bool read_group_fields() { + group_size_ = decoder_.pop_front(); + group_flags_ = decoder_.pop_front(); + + if (RELOCATION_GROUPED_BY_OFFSET_DELTA(group_flags_)) { + group_r_offset_delta_ = decoder_.pop_front(); + } + + if (RELOCATION_GROUPED_BY_INFO(group_flags_)) { + reloc_.r_info = decoder_.pop_front(); + } + + if (RELOCATION_GROUP_HAS_ADDEND(group_flags_) && RELOCATION_GROUPED_BY_ADDEND(group_flags_)) { +#if !defined(USE_RELA) + // This platform does not support rela, and yet we have it encoded in android_rel section. + DL_ERR("unexpected r_addend in android.rel section"); + return false; +#else + reloc_.r_addend += decoder_.pop_front(); + } else if (!RELOCATION_GROUP_HAS_ADDEND(group_flags_)) { + reloc_.r_addend = 0; +#endif + } + + relocation_group_index_ = 0; + return true; + } + + decoder_t decoder_; + size_t relocation_count_; + size_t group_size_; + size_t group_flags_; + size_t group_r_offset_delta_; + size_t relocation_index_; + size_t relocation_group_index_; + rel_t reloc_; +}; + #endif // __LINKER_RELOC_ITERATORS_H From 6bb01b6e6365ced7ca23c9ebecfaf1ea159d5ae2 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Sat, 7 Mar 2015 13:37:05 -0800 Subject: [PATCH 170/194] linker: Allow an app to update it's own LD_LIBRARY_PATH When the kernel executes a program which is setuid, setgid, has file capabilities, or causes an SELinux domain transition, the AT_SECURE flag is set. This flag instructs the dynamic linker to prune any dangerous environment variables passed across security boundaries. For SELinux in particular, whether this flag is set depends on the the "noatsecure" process permission. If that permission does not exist, then AT_SECURE=1 whenever a domain transition occurs. In https://android-review.googlesource.com/129971 , Android stopped using noatsecure when executing init services. In https://android-review.googlesource.com/130610 , init was flipped back into SELinux enforcing mode, making ag/129971 active. The combination of those two changes ensured that AT_SECURE=1 was set when executing init spawned services. In particular, AT_SECURE=1 is set when init executes zygote. Due to the forking nature of zygote, AT_SECURE remains untouched when executing zygote's children. This causes problems for the code added in https://android-review.googlesource.com/48409 . Specifically, if AT_SECURE=1, an attempt to call android_update_LD_LIBRARY_PATH() is silently ignored. This causes problems when art tries to adjust the LD_LIBRARY_PATH for Android apps. Ultimately, apps are unable to find shared libraries they depend on. As discussed in bug 7896159, there's no security reason for preventing an application from updating it's own LD_LIBRARY_PATH. We only need to prune LD_LIBRARY_PATH when transitioning across security boundaries, but not when we're entirely within a security boundary. Remove the AT_SECURE check within do_android_update_LD_LIBRARY_PATH(). It's unneeded and prevents an application from modifying it's own LD_LIBRARY_PATH. This allows an application to specify a location where it's dlopen()ed shared libraries should be loaded from. There is no change to AT_SECURE handling in __sanitize_environment_variables(). We continue to honor it there to prevent using security sensitive environment variables across an exec boundary. Bug: 19559835 Change-Id: If4af2ee8e84265aaa0c93de8b281208b20d7942a --- linker/linker.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 87fce95c2..9ba83ecc2 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1241,9 +1241,7 @@ void do_android_get_LD_LIBRARY_PATH(char* buffer, size_t buffer_size) { } void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) { - if (!get_AT_SECURE()) { - parse_LD_LIBRARY_PATH(ld_library_path); - } + parse_LD_LIBRARY_PATH(ld_library_path); } soinfo* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo) { From 5d4f0e6a26b66f1dab8d20a65af4469c6dd7370d Mon Sep 17 00:00:00 2001 From: Jingwei Zhang Date: Fri, 31 Oct 2014 18:29:18 +0800 Subject: [PATCH 171/194] Add the optimized implementation of 18 math functions for x86 and x86_64 respectively Change-Id: I31bf601448a9427f825517f3a0ff24de47f49bfa Signed-off-by: Jingwei Zhang Signed-off-by: Mingwei Shi --- libm/Android.mk | 111 +- libm/x86/e_acos.S | 1930 +++++++++++++++ libm/x86/e_asin.S | 2004 ++++++++++++++++ libm/x86/e_atan2.S | 1222 ++++++++++ libm/x86/e_cosh.S | 1350 +++++++++++ libm/x86/e_exp.S | 577 +++++ libm/x86/e_hypot.S | 221 ++ libm/x86/e_log.S | 781 +++++++ libm/x86/e_log10.S | 796 +++++++ libm/x86/e_pow.S | 4277 +++++++++++++++++++++++++++++++++ libm/x86/e_sinh.S | 1408 +++++++++++ libm/x86/libm_reduce_pi04l.S | 3718 +++++++++++++++++++++++++++++ libm/x86/libm_sincos_huge.S | 668 ++++++ libm/x86/libm_tancot_huge.S | 750 ++++++ libm/x86/s_atan.S | 935 ++++++++ libm/x86/s_cbrt.S | 739 ++++++ libm/x86/s_cos.S | 893 +++++++ libm/x86/s_expm1.S | 703 ++++++ libm/x86/s_log1p.S | 828 +++++++ libm/x86/s_sin.S | 908 +++++++ libm/x86/s_tan.S | 1767 ++++++++++++++ libm/x86/s_tanh.S | 1362 +++++++++++ libm/x86_64/e_acos.S | 1957 ++++++++++++++++ libm/x86_64/e_asin.S | 2036 ++++++++++++++++ libm/x86_64/e_atan2.S | 1242 ++++++++++ libm/x86_64/e_cosh.S | 1372 +++++++++++ libm/x86_64/e_exp.S | 636 +++++ libm/x86_64/e_hypot.S | 210 ++ libm/x86_64/e_log.S | 779 +++++++ libm/x86_64/e_log10.S | 807 +++++++ libm/x86_64/e_pow.S | 4282 ++++++++++++++++++++++++++++++++++ libm/x86_64/e_sinh.S | 1430 ++++++++++++ libm/x86_64/s_atan.S | 927 ++++++++ libm/x86_64/s_cbrt.S | 754 ++++++ libm/x86_64/s_cos.S | 1275 ++++++++++ libm/x86_64/s_expm1.S | 727 ++++++ libm/x86_64/s_log1p.S | 829 +++++++ libm/x86_64/s_sin.S | 1300 +++++++++++ libm/x86_64/s_tan.S | 2239 ++++++++++++++++++ libm/x86_64/s_tanh.S | 1392 +++++++++++ 40 files changed, 52124 insertions(+), 18 deletions(-) create mode 100644 libm/x86/e_acos.S create mode 100644 libm/x86/e_asin.S create mode 100644 libm/x86/e_atan2.S create mode 100644 libm/x86/e_cosh.S create mode 100644 libm/x86/e_exp.S create mode 100644 libm/x86/e_hypot.S create mode 100644 libm/x86/e_log.S create mode 100644 libm/x86/e_log10.S create mode 100644 libm/x86/e_pow.S create mode 100644 libm/x86/e_sinh.S create mode 100644 libm/x86/libm_reduce_pi04l.S create mode 100644 libm/x86/libm_sincos_huge.S create mode 100644 libm/x86/libm_tancot_huge.S create mode 100644 libm/x86/s_atan.S create mode 100644 libm/x86/s_cbrt.S create mode 100644 libm/x86/s_cos.S create mode 100644 libm/x86/s_expm1.S create mode 100644 libm/x86/s_log1p.S create mode 100644 libm/x86/s_sin.S create mode 100644 libm/x86/s_tan.S create mode 100644 libm/x86/s_tanh.S create mode 100644 libm/x86_64/e_acos.S create mode 100644 libm/x86_64/e_asin.S create mode 100644 libm/x86_64/e_atan2.S create mode 100644 libm/x86_64/e_cosh.S create mode 100644 libm/x86_64/e_exp.S create mode 100644 libm/x86_64/e_hypot.S create mode 100644 libm/x86_64/e_log.S create mode 100644 libm/x86_64/e_log10.S create mode 100644 libm/x86_64/e_pow.S create mode 100644 libm/x86_64/e_sinh.S create mode 100644 libm/x86_64/s_atan.S create mode 100644 libm/x86_64/s_cbrt.S create mode 100644 libm/x86_64/s_cos.S create mode 100644 libm/x86_64/s_expm1.S create mode 100644 libm/x86_64/s_log1p.S create mode 100644 libm/x86_64/s_sin.S create mode 100644 libm/x86_64/s_tan.S create mode 100644 libm/x86_64/s_tanh.S diff --git a/libm/Android.mk b/libm/Android.mk index 418ec5973..565d3fd5c 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -21,19 +21,14 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/bsdsrc/b_tgamma.c \ upstream-freebsd/lib/msun/src/catrig.c \ upstream-freebsd/lib/msun/src/catrigf.c \ - upstream-freebsd/lib/msun/src/e_acos.c \ upstream-freebsd/lib/msun/src/e_acosf.c \ upstream-freebsd/lib/msun/src/e_acosh.c \ upstream-freebsd/lib/msun/src/e_acoshf.c \ - upstream-freebsd/lib/msun/src/e_asin.c \ upstream-freebsd/lib/msun/src/e_asinf.c \ - upstream-freebsd/lib/msun/src/e_atan2.c \ upstream-freebsd/lib/msun/src/e_atan2f.c \ upstream-freebsd/lib/msun/src/e_atanh.c \ upstream-freebsd/lib/msun/src/e_atanhf.c \ - upstream-freebsd/lib/msun/src/e_cosh.c \ upstream-freebsd/lib/msun/src/e_coshf.c \ - upstream-freebsd/lib/msun/src/e_exp.c \ upstream-freebsd/lib/msun/src/e_expf.c \ upstream-freebsd/lib/msun/src/e_fmod.c \ upstream-freebsd/lib/msun/src/e_fmodf.c \ @@ -41,7 +36,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/e_gammaf.c \ upstream-freebsd/lib/msun/src/e_gammaf_r.c \ upstream-freebsd/lib/msun/src/e_gamma_r.c \ - upstream-freebsd/lib/msun/src/e_hypot.c \ upstream-freebsd/lib/msun/src/e_hypotf.c \ upstream-freebsd/lib/msun/src/e_j0.c \ upstream-freebsd/lib/msun/src/e_j0f.c \ @@ -53,13 +47,10 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/e_lgammaf.c \ upstream-freebsd/lib/msun/src/e_lgammaf_r.c \ upstream-freebsd/lib/msun/src/e_lgamma_r.c \ - upstream-freebsd/lib/msun/src/e_log10.c \ upstream-freebsd/lib/msun/src/e_log10f.c \ upstream-freebsd/lib/msun/src/e_log2.c \ upstream-freebsd/lib/msun/src/e_log2f.c \ - upstream-freebsd/lib/msun/src/e_log.c \ upstream-freebsd/lib/msun/src/e_logf.c \ - upstream-freebsd/lib/msun/src/e_pow.c \ upstream-freebsd/lib/msun/src/e_powf.c \ upstream-freebsd/lib/msun/src/e_remainder.c \ upstream-freebsd/lib/msun/src/e_remainderf.c \ @@ -67,7 +58,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/e_rem_pio2f.c \ upstream-freebsd/lib/msun/src/e_scalb.c \ upstream-freebsd/lib/msun/src/e_scalbf.c \ - upstream-freebsd/lib/msun/src/e_sinh.c \ upstream-freebsd/lib/msun/src/e_sinhf.c \ upstream-freebsd/lib/msun/src/imprecise.c \ upstream-freebsd/lib/msun/src/k_cos.c \ @@ -81,12 +71,10 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/k_tanf.c \ upstream-freebsd/lib/msun/src/s_asinh.c \ upstream-freebsd/lib/msun/src/s_asinhf.c \ - upstream-freebsd/lib/msun/src/s_atan.c \ upstream-freebsd/lib/msun/src/s_atanf.c \ upstream-freebsd/lib/msun/src/s_carg.c \ upstream-freebsd/lib/msun/src/s_cargf.c \ upstream-freebsd/lib/msun/src/s_cargl.c \ - upstream-freebsd/lib/msun/src/s_cbrt.c \ upstream-freebsd/lib/msun/src/s_cbrtf.c \ upstream-freebsd/lib/msun/src/s_ccosh.c \ upstream-freebsd/lib/msun/src/s_ccoshf.c \ @@ -100,7 +88,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_conjl.c \ upstream-freebsd/lib/msun/src/s_copysign.c \ upstream-freebsd/lib/msun/src/s_copysignf.c \ - upstream-freebsd/lib/msun/src/s_cos.c \ upstream-freebsd/lib/msun/src/s_cosf.c \ upstream-freebsd/lib/msun/src/s_cproj.c \ upstream-freebsd/lib/msun/src/s_cprojf.c \ @@ -119,7 +106,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_erff.c \ upstream-freebsd/lib/msun/src/s_exp2.c \ upstream-freebsd/lib/msun/src/s_exp2f.c \ - upstream-freebsd/lib/msun/src/s_expm1.c \ upstream-freebsd/lib/msun/src/s_expm1f.c \ upstream-freebsd/lib/msun/src/s_fabs.c \ upstream-freebsd/lib/msun/src/s_fabsf.c \ @@ -136,7 +122,6 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_ilogbf.c \ upstream-freebsd/lib/msun/src/s_llround.c \ upstream-freebsd/lib/msun/src/s_llroundf.c \ - upstream-freebsd/lib/msun/src/s_log1p.c \ upstream-freebsd/lib/msun/src/s_log1pf.c \ upstream-freebsd/lib/msun/src/s_logb.c \ upstream-freebsd/lib/msun/src/s_logbf.c \ @@ -158,11 +143,8 @@ LOCAL_SRC_FILES := \ upstream-freebsd/lib/msun/src/s_signgam.c \ upstream-freebsd/lib/msun/src/s_significand.c \ upstream-freebsd/lib/msun/src/s_significandf.c \ - upstream-freebsd/lib/msun/src/s_sin.c \ upstream-freebsd/lib/msun/src/s_sinf.c \ - upstream-freebsd/lib/msun/src/s_tan.c \ upstream-freebsd/lib/msun/src/s_tanf.c \ - upstream-freebsd/lib/msun/src/s_tanh.c \ upstream-freebsd/lib/msun/src/s_tanhf.c \ upstream-freebsd/lib/msun/src/s_tgammaf.c \ upstream-freebsd/lib/msun/src/w_cabs.c \ @@ -252,17 +234,35 @@ LOCAL_SRC_FILES += \ # ----------------------------------------------------------------------------- LOCAL_SRC_FILES_arm += \ arm/fenv.c \ + upstream-freebsd/lib/msun/src/e_acos.c \ + upstream-freebsd/lib/msun/src/e_asin.c \ + upstream-freebsd/lib/msun/src/e_atan2.c \ + upstream-freebsd/lib/msun/src/e_cosh.c \ + upstream-freebsd/lib/msun/src/e_exp.c \ + upstream-freebsd/lib/msun/src/e_hypot.c \ + upstream-freebsd/lib/msun/src/e_log.c \ + upstream-freebsd/lib/msun/src/e_log10.c \ + upstream-freebsd/lib/msun/src/e_pow.c \ + upstream-freebsd/lib/msun/src/e_sinh.c \ + upstream-freebsd/lib/msun/src/s_atan.c \ + upstream-freebsd/lib/msun/src/s_cbrt.c \ upstream-freebsd/lib/msun/src/s_ceil.c \ upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_cos.c \ upstream-freebsd/lib/msun/src/s_fma.c \ upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_expm1.c \ upstream-freebsd/lib/msun/src/s_llrint.c \ upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_log1p.c \ upstream-freebsd/lib/msun/src/s_lrint.c \ upstream-freebsd/lib/msun/src/s_lrintf.c \ upstream-freebsd/lib/msun/src/s_rint.c \ upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_sin.c \ + upstream-freebsd/lib/msun/src/s_tan.c \ + upstream-freebsd/lib/msun/src/s_tanh.c \ upstream-freebsd/lib/msun/src/s_trunc.c \ upstream-freebsd/lib/msun/src/s_truncf.c \ @@ -300,26 +300,62 @@ LOCAL_SRC_FILES_arm64 += \ arm64/rint.S \ arm64/sqrt.S \ arm64/trunc.S \ + upstream-freebsd/lib/msun/src/e_acos.c \ + upstream-freebsd/lib/msun/src/e_asin.c \ + upstream-freebsd/lib/msun/src/e_atan2.c \ + upstream-freebsd/lib/msun/src/e_cosh.c \ + upstream-freebsd/lib/msun/src/e_exp.c \ + upstream-freebsd/lib/msun/src/e_hypot.c \ + upstream-freebsd/lib/msun/src/e_log.c \ + upstream-freebsd/lib/msun/src/e_log10.c \ + upstream-freebsd/lib/msun/src/e_pow.c \ + upstream-freebsd/lib/msun/src/e_sinh.c \ + upstream-freebsd/lib/msun/src/s_atan.c \ + upstream-freebsd/lib/msun/src/s_cbrt.c \ + upstream-freebsd/lib/msun/src/s_cos.c \ + upstream-freebsd/lib/msun/src/s_expm1.c \ + upstream-freebsd/lib/msun/src/s_log1p.c \ + upstream-freebsd/lib/msun/src/s_sin.c \ + upstream-freebsd/lib/msun/src/s_tan.c \ + upstream-freebsd/lib/msun/src/s_tanh.c \ # ----------------------------------------------------------------------------- # mips # ----------------------------------------------------------------------------- libm_mips_arch_files := \ mips/fenv.c \ + upstream-freebsd/lib/msun/src/e_acos.c \ + upstream-freebsd/lib/msun/src/e_asin.c \ + upstream-freebsd/lib/msun/src/e_atan2.c \ + upstream-freebsd/lib/msun/src/e_cosh.c \ + upstream-freebsd/lib/msun/src/e_exp.c \ + upstream-freebsd/lib/msun/src/e_hypot.c \ + upstream-freebsd/lib/msun/src/e_log.c \ + upstream-freebsd/lib/msun/src/e_log10.c \ + upstream-freebsd/lib/msun/src/e_pow.c \ + upstream-freebsd/lib/msun/src/e_sinh.c \ upstream-freebsd/lib/msun/src/e_sqrt.c \ upstream-freebsd/lib/msun/src/e_sqrtf.c \ + upstream-freebsd/lib/msun/src/s_atan.c \ + upstream-freebsd/lib/msun/src/s_cbrt.c \ upstream-freebsd/lib/msun/src/s_ceil.c \ upstream-freebsd/lib/msun/src/s_ceilf.c \ + upstream-freebsd/lib/msun/src/s_cos.c \ upstream-freebsd/lib/msun/src/s_fma.c \ upstream-freebsd/lib/msun/src/s_fmaf.c \ upstream-freebsd/lib/msun/src/s_floor.c \ upstream-freebsd/lib/msun/src/s_floorf.c \ + upstream-freebsd/lib/msun/src/s_expm1.c \ upstream-freebsd/lib/msun/src/s_llrint.c \ upstream-freebsd/lib/msun/src/s_llrintf.c \ + upstream-freebsd/lib/msun/src/s_log1p.c \ upstream-freebsd/lib/msun/src/s_lrint.c \ upstream-freebsd/lib/msun/src/s_lrintf.c \ upstream-freebsd/lib/msun/src/s_rint.c \ upstream-freebsd/lib/msun/src/s_rintf.c \ + upstream-freebsd/lib/msun/src/s_sin.c \ + upstream-freebsd/lib/msun/src/s_tan.c \ + upstream-freebsd/lib/msun/src/s_tanh.c \ upstream-freebsd/lib/msun/src/s_trunc.c \ upstream-freebsd/lib/msun/src/s_truncf.c \ @@ -341,6 +377,27 @@ LOCAL_SRC_FILES_x86 += \ upstream-freebsd/lib/msun/src/s_rintf.c \ x86/sqrt.S \ x86/sqrtf.S \ + x86/e_acos.S \ + x86/e_asin.S \ + x86/e_atan2.S \ + x86/e_cosh.S \ + x86/e_exp.S \ + x86/e_hypot.S \ + x86/e_log10.S \ + x86/e_log.S \ + x86/e_pow.S \ + x86/e_sinh.S \ + x86/libm_reduce_pi04l.S \ + x86/libm_sincos_huge.S \ + x86/libm_tancot_huge.S \ + x86/s_atan.S \ + x86/s_cbrt.S \ + x86/s_cos.S \ + x86/s_expm1.S \ + x86/s_log1p.S \ + x86/s_sin.S \ + x86/s_tanh.S \ + x86/s_tan.S \ ifeq ($(ARCH_X86_HAVE_SSE4_1),true) LOCAL_SRC_FILES_x86 += \ @@ -377,6 +434,24 @@ LOCAL_SRC_FILES_x86_64 += \ upstream-freebsd/lib/msun/src/s_rintf.c \ x86_64/sqrt.S \ x86_64/sqrtf.S \ + x86_64/e_acos.S \ + x86_64/e_asin.S \ + x86_64/e_atan2.S \ + x86_64/e_cosh.S \ + x86_64/e_exp.S \ + x86_64/e_hypot.S \ + x86_64/e_log10.S \ + x86_64/e_log.S \ + x86_64/e_pow.S \ + x86_64/e_sinh.S \ + x86_64/s_atan.S \ + x86_64/s_cbrt.S \ + x86_64/s_cos.S \ + x86_64/s_expm1.S \ + x86_64/s_log1p.S \ + x86_64/s_sin.S \ + x86_64/s_tanh.S \ + x86_64/s_tan.S \ ifeq ($(ARCH_X86_HAVE_SSE4_1),true) LOCAL_SRC_FILES_x86_64 += \ diff --git a/libm/x86/e_acos.S b/libm/x86/e_acos.S new file mode 100644 index 000000000..a42948185 --- /dev/null +++ b/libm/x86/e_acos.S @@ -0,0 +1,1930 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// To compute acos(s), separate schemes are used when s is in different +// intervals. +// +// |s| in [2^{-4}, sqrt(3)/2): +// Let t=2^k*1.b1 b2..b6 1, where s=2^k*1.b1 b2 .. b52 +// acos(s)=pi/2-asin(t)-asin(r), where r=s*sqrt(1-t^2)-t*sqrt(1-s^2) +// asin(r)-r evaluated as 7-degree polynomial (c3*r^3+c5*r^5+c7*r^7) +// For the first degree term, r is evaluated as +// R=(s^2-t^2)/(sqrt(1-t^2)*s+sqrt(1-s^2)*t) +// (sqrt(1-t^2) read from table) +// The main source of error is still R (may still be affected by up to 3 ulps +// of rounding error). The table size must be sufficiently large, to minimize +// this effect. +// +// |s| in [sqrt(3)/2, 255/256): +// Let t=2^k*1.b1 b2..b6 1, where sqrt(1-s^2)=2^k*1.b1 b2 .. b52 (rounded) +// acos(|s|)=asin(t)-asin(r), r=s*t-sqrt(1-s^2)*sqrt(1-t^2) +// acos(-|s|)=pi-acos(|s|) +// (The -PI constant, or 0, is added to the result. The sign is set at +// the end) +// asin(r) evaluated as a polynomial (same as above) +// The first degree term is evaluated as +// r=(s^2+t^2-1)/(s*t+sqrt(1-s^2)*sqrt(1-t^2)) +// +// |s|<2^{-4}: acos(s)=pi/2-asin(s) +// evaluate asin(s) as 13-degree polynomial +// +// |s| in [255/256,1): acos(|s|)=2*asin(q), where q=sqrt((1-|s|)/2) +// asin(q) is evaluated as 13-degree polynomial +// q^2=(1-|s|)/2 is obtained in advance +// 2*q*eps ~ ((1-|s|)/2-q^2)/q used for first term +// acos(-|s|)=pi-acos(|s|) +// (The -PI constant, or 0, is added to the result. The sign is set at +// the end) +// +// Special cases: +// acos(NaN) = quiet NaN, and raise invalid exception +// acos(INF) = QNaN and raise invalid exception +// acos(x) = QNaN and raise invalid exception, for |x|>1.0 +// acos(1) = +0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin acos +ENTRY(acos) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 48(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + movsd 6048(%ebx), %xmm4 + movsd 6080(%ebx), %xmm3 + xorpd %xmm5, %xmm5 + movsd 6064(%ebx), %xmm2 + movapd %xmm0, %xmm1 + movsd %xmm0, 8(%esp) + psrlq $44, %xmm0 + movd %xmm0, %edx + movapd %xmm1, %xmm7 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movapd %xmm1, %xmm0 + movl $524287, %eax + andl %edx, %eax + subl $260864, %eax + cmpl $955, %eax + jae .L_2TAG_PACKET_0.0.2 + mulsd %xmm1, %xmm1 + andl $65535, %edx + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + andpd %xmm7, %xmm2 + andl $-4, %edx + subl $64256, %edx + movsd 3840(%ebx,%edx,2), %xmm1 + orpd %xmm5, %xmm2 + movapd (%ebx,%edx,4), %xmm4 + movapd %xmm7, %xmm6 + addsd %xmm2, %xmm7 + subsd %xmm2, %xmm0 + mulsd %xmm0, %xmm7 + mulsd %xmm1, %xmm6 + mulsd %xmm2, %xmm3 + movapd %xmm6, %xmm1 + addsd %xmm3, %xmm6 + divsd %xmm6, %xmm7 + movsd 5976(%ebx), %xmm0 + movsd 5960(%ebx), %xmm5 + subsd %xmm3, %xmm1 + psrlq $63, %xmm2 + movapd %xmm1, %xmm3 + psllq $63, %xmm2 + mulsd %xmm1, %xmm1 + pshufd $68, %xmm2, %xmm2 + movsd 5968(%ebx), %xmm6 + mulsd %xmm1, %xmm3 + mulsd %xmm1, %xmm0 + xorpd %xmm2, %xmm4 + mulsd %xmm3, %xmm5 + subpd 5888(%ebx), %xmm4 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulsd %xmm3, %xmm0 + subsd %xmm4, %xmm5 + pshufd $238, %xmm4, %xmm4 + addsd %xmm5, %xmm0 + subsd %xmm7, %xmm0 + subsd %xmm4, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + subl $955, %eax + cmpl $65, %eax + jae .L_2TAG_PACKET_2.0.2 + psrlq $38, %xmm7 + psllq $38, %xmm7 + pmovmskb %xmm0, %eax + andnpd %xmm0, %xmm4 + subsd %xmm7, %xmm1 + movapd %xmm7, %xmm6 + mulsd %xmm7, %xmm7 + addsd %xmm6, %xmm0 + orpd %xmm4, %xmm5 + subsd %xmm7, %xmm3 + mulsd %xmm1, %xmm0 + movapd %xmm3, %xmm4 + subsd %xmm0, %xmm3 + sqrtsd %xmm3, %xmm3 + andl $128, %eax + shrl $7, %eax + negl %eax + movapd %xmm3, %xmm7 + andpd %xmm3, %xmm2 + psllq $2, %xmm3 + pextrw $3, %xmm3, %edx + orpd %xmm5, %xmm2 + movd %eax, %xmm3 + pshufd $0, %xmm3, %xmm3 + subl $65216, %edx + addl %edx, %edx + mulsd 3840(%ebx,%edx,4), %xmm7 + mulsd %xmm2, %xmm6 + mulsd %xmm2, %xmm1 + mulsd %xmm2, %xmm2 + subsd %xmm7, %xmm6 + andpd 5904(%ebx), %xmm3 + addsd %xmm1, %xmm6 + subsd %xmm2, %xmm4 + addsd %xmm7, %xmm7 + movsd 5960(%ebx), %xmm5 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm7 + movsd 5976(%ebx), %xmm0 + divsd %xmm7, %xmm4 + movsd 5968(%ebx), %xmm2 + addpd (%ebx,%edx,8), %xmm3 + movapd %xmm6, %xmm1 + mulsd %xmm6, %xmm6 + mulsd %xmm6, %xmm0 + mulsd %xmm6, %xmm1 + mulsd %xmm1, %xmm5 + mulsd %xmm6, %xmm1 + addsd %xmm2, %xmm0 + pxor %xmm6, %xmm6 + mulsd %xmm1, %xmm0 + addsd %xmm3, %xmm5 + addsd %xmm5, %xmm0 + andl $32768, %eax + pinsrw $3, %eax, %xmm6 + movapd %xmm4, %xmm5 + pshufd $238, %xmm3, %xmm3 + addsd %xmm3, %xmm4 + subsd %xmm4, %xmm3 + addsd %xmm3, %xmm5 + addsd %xmm5, %xmm0 + addsd %xmm4, %xmm0 + xorpd %xmm6, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + addl $15291, %eax + cmpl $14336, %eax + jae .L_2TAG_PACKET_3.0.2 + unpcklpd %xmm0, %xmm0 + movapd 5984(%ebx), %xmm6 + unpcklpd %xmm0, %xmm1 + movapd 6000(%ebx), %xmm2 + movapd 6016(%ebx), %xmm4 + mulpd %xmm0, %xmm0 + movapd 5888(%ebx), %xmm5 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm6 + mulpd %xmm0, %xmm0 + movapd %xmm1, %xmm3 + mulsd %xmm1, %xmm1 + addpd %xmm2, %xmm6 + mulpd %xmm0, %xmm4 + mulsd %xmm3, %xmm1 + addpd %xmm4, %xmm6 + pshufd $238, %xmm5, %xmm0 + mulpd %xmm6, %xmm1 + pshufd $238, %xmm5, %xmm6 + subsd %xmm7, %xmm0 + pshufd $238, %xmm1, %xmm2 + subsd %xmm1, %xmm5 + subsd %xmm0, %xmm6 + subsd %xmm2, %xmm5 + subsd %xmm6, %xmm7 + subsd %xmm7, %xmm5 + addsd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_3.0.2: + subl $15356, %eax + cmpl $4, %eax + jae .L_2TAG_PACKET_4.0.2 + xorpd %xmm6, %xmm6 + andpd 6048(%ebx), %xmm7 + movsd 6096(%ebx), %xmm4 + movapd 5984(%ebx), %xmm1 + mulsd %xmm4, %xmm7 + movapd 6000(%ebx), %xmm2 + subsd %xmm7, %xmm4 + movapd 6016(%ebx), %xmm3 + pshufd $68, %xmm4, %xmm7 + sqrtsd %xmm4, %xmm4 + mulpd %xmm7, %xmm1 + pshufd $68, %xmm7, %xmm5 + pextrw $3, %xmm0, %eax + mulpd %xmm7, %xmm7 + addpd %xmm1, %xmm2 + movsd 5936(%ebx), %xmm1 + mulpd %xmm7, %xmm3 + cmpsd $1, %xmm6, %xmm0 + mulsd %xmm5, %xmm7 + addpd %xmm3, %xmm2 + pshufd $68, %xmm0, %xmm0 + mulsd %xmm7, %xmm2 + andpd 5904(%ebx), %xmm0 + mulpd %xmm5, %xmm2 + andpd %xmm4, %xmm1 + pshufd $68, %xmm4, %xmm3 + subsd %xmm1, %xmm4 + addsd %xmm3, %xmm3 + mulsd %xmm1, %xmm1 + subsd %xmm4, %xmm3 + subsd %xmm1, %xmm5 + mulsd %xmm3, %xmm4 + pshufd $238, %xmm3, %xmm3 + subsd %xmm4, %xmm5 + divsd %xmm3, %xmm5 + addpd %xmm3, %xmm3 + mulpd %xmm3, %xmm2 + pshufd $238, %xmm2, %xmm4 + addsd %xmm0, %xmm2 + andl $32768, %eax + pinsrw $3, %eax, %xmm6 + pshufd $238, %xmm0, %xmm0 + addsd %xmm4, %xmm2 + addsd %xmm5, %xmm2 + addsd %xmm3, %xmm2 + addsd %xmm2, %xmm0 + xorpd %xmm6, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_4.0.2: + addl $261884, %eax + cmpl $261888, %eax + jb .L_2TAG_PACKET_5.0.2 + movd %xmm7, %ecx + psrlq $32, %xmm7 + movd %xmm7, %edx + andl $2147483647, %edx + movl $1072693248, %eax + subl %edx, %eax + orl %ecx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_6.0.2 + movq 8(%esp), %xmm2 + movd %xmm2, %edx + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $2147483647, %ecx + subl $1, %edx + sbbl $2146435072, %ecx + cmpl $0, %ecx + jge .L_2TAG_PACKET_7.0.2 + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %edx + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_6.0.2: + pextrw $1, %xmm7, %edx + shrl $15, %edx + negl %edx + movd %edx, %xmm7 + pshufd $0, %xmm7, %xmm7 + movsd 5920(%ebx), %xmm2 + movsd 5928(%ebx), %xmm0 + andpd %xmm7, %xmm2 + andpd %xmm7, %xmm0 + addsd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_5.0.2: + movsd 5888(%ebx), %xmm2 + movsd 5896(%ebx), %xmm0 + addsd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm6, %xmm6 + addsd %xmm6, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) +.L_2TAG_PACKET_1.0.2: + movl 48(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(acos) +# -- End acos + +# Start file scope ASM +.weak acosl +.equ acosl, acos +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 3822952792 + .long 1021639372 + .long 182792448 + .long 1068507836 + .long 2264213271 + .long 1019558908 + .long 649052928 + .long 1068524253 + .long 1797139609 + .long 1022295143 + .long 1243095296 + .long 1068540671 + .long 1415938756 + .long 1021439537 + .long 2033294592 + .long 1068557090 + .long 2356809978 + .long 1021777916 + .long 3088063744 + .long 1068573510 + .long 2669055318 + .long 1022124482 + .long 180888576 + .long 1068589932 + .long 3566445325 + .long 1021358712 + .long 1970196992 + .long 1068606354 + .long 896980323 + .long 1021319659 + .long 4229555456 + .long 1068622777 + .long 436049712 + .long 1021319758 + .long 2732572160 + .long 1068639202 + .long 583123209 + .long 1020797960 + .long 1842831872 + .long 1068655628 + .long 1370449804 + .long 1021429270 + .long 1628994560 + .long 1068672055 + .long 2411391464 + .long 1021057980 + .long 2159763712 + .long 1068688483 + .long 1208692749 + .long 1021943903 + .long 3503886336 + .long 1068704912 + .long 538793309 + .long 1019744063 + .long 1435187200 + .long 1068721343 + .long 4085087612 + .long 1020608419 + .long 317469952 + .long 1068737775 + .long 144386942 + .long 1021440732 + .long 219617280 + .long 1068754208 + .long 2940088361 + .long 1019981122 + .long 1210558208 + .long 1068770642 + .long 2176850347 + .long 1018373705 + .long 3359268352 + .long 1068787077 + .long 2395611454 + .long 1021889042 + .long 2439803648 + .long 1068803514 + .long 1650705253 + .long 1020227966 + .long 2816203520 + .long 1068819952 + .long 3702166386 + .long 1019379914 + .long 262620672 + .long 1068836392 + .long 1855649370 + .long 1020453124 + .long 3438159616 + .long 1068852832 + .long 923063860 + .long 1019273834 + .long 3822105856 + .long 1068869274 + .long 4289947947 + .long 1019434249 + .long 1483729920 + .long 1068885718 + .long 787455814 + .long 1020738379 + .long 787321088 + .long 1068902163 + .long 3321653337 + .long 1021842569 + .long 1802253312 + .long 1068918609 + .long 2653633526 + .long 1021821525 + .long 302985984 + .long 1068935057 + .long 161272028 + .long 1021655149 + .long 653966080 + .long 1068951506 + .long 2566098667 + .long 1020066219 + .long 2924727296 + .long 1068967956 + .long 3646493722 + .long 1014292285 + .long 2889890304 + .long 1068984408 + .long 1081009196 + .long 1022189620 + .long 619098112 + .long 1069000862 + .long 4011643355 + .long 1021773297 + .long 477017600 + .long 1069017317 + .long 4030305534 + .long 1021292252 + .long 2533403904 + .long 1069033773 + .long 2645187591 + .long 1019527099 + .long 2563102208 + .long 1069050231 + .long 3857293792 + .long 1022311697 + .long 635982336 + .long 1069066691 + .long 3625936637 + .long 1017511744 + .long 1116940800 + .long 1069083152 + .long 3653872993 + .long 1022016631 + .long 4075964160 + .long 1069099614 + .long 2468900271 + .long 1021769532 + .long 993165568 + .long 1069116079 + .long 1358104224 + .long 1021199776 + .long 528586752 + .long 1069132545 + .long 2200950332 + .long 1022024872 + .long 2752395776 + .long 1069149012 + .long 3197072454 + .long 1017751319 + .long 3439855616 + .long 1069165481 + .long 1651081806 + .long 1020809338 + .long 2661257728 + .long 1069181952 + .long 539032752 + .long 1021728805 + .long 486957312 + .long 1069198425 + .long 3136045149 + .long 1016888671 + .long 1282340352 + .long 1069214899 + .long 2593963259 + .long 1018956103 + .long 822921728 + .long 1069231375 + .long 2146032737 + .long 1022306465 + .long 3474216192 + .long 1069247852 + .long 3976811625 + .long 1021350207 + .long 716902656 + .long 1069264332 + .long 718267222 + .long 1018624727 + .long 1211594496 + .long 1069280813 + .long 1485641389 + .long 1018447451 + .long 734070272 + .long 1069297296 + .long 354455128 + .long 1021341291 + .long 3650110720 + .long 1069313780 + .long 682185947 + .long 1021651853 + .long 1440663040 + .long 1069330267 + .long 3558574550 + .long 1021615110 + .long 2766612224 + .long 1069346755 + .long 874607978 + .long 1017746872 + .long 3404011008 + .long 1069363245 + .long 4154988502 + .long 1021439906 + .long 3423949056 + .long 1069379737 + .long 2263202309 + .long 1021479615 + .long 2897587712 + .long 1069396231 + .long 2562065031 + .long 1022090363 + .long 1896159232 + .long 1069412727 + .long 3836237663 + .long 1019867288 + .long 490968576 + .long 1069429225 + .long 3322056743 + .long 1006752762 + .long 3048360192 + .long 1069445724 + .long 1152314833 + .long 1013122252 + .long 1049850624 + .long 1069462226 + .long 3601590727 + .long 1022214610 + .long 3156899584 + .long 1069478729 + .long 1855169970 + .long 1019487271 + .long 851173376 + .long 1069495235 + .long 312649594 + .long 1020868604 + .long 2794281728 + .long 1069511742 + .long 1093490181 + .long 1020777577 + .long 468042496 + .long 1069528252 + .long 1152540679 + .long 1021403732 + .long 2534219264 + .long 1069544763 + .long 2292126035 + .long 1021872430 + .long 1376146432 + .long 1069558527 + .long 3293753641 + .long 1020500454 + .long 4175442432 + .long 1069575044 + .long 3626347564 + .long 1021610969 + .long 3523113472 + .long 1069591566 + .long 339956500 + .long 1021119039 + .long 4003350528 + .long 1069608092 + .long 3429333082 + .long 1022813542 + .long 1611067392 + .long 1069624623 + .long 2298017544 + .long 1021977587 + .long 931782144 + .long 1069641158 + .long 2164684743 + .long 1021250988 + .long 2256725504 + .long 1069657697 + .long 1138762335 + .long 1021443776 + .long 1582853120 + .long 1069674241 + .long 1084010382 + .long 1022994693 + .long 3497758720 + .long 1069690789 + .long 406366244 + .long 1022713586 + .long 3999816960 + .long 1069707342 + .long 1488723042 + .long 1023381290 + .long 3383096064 + .long 1069723900 + .long 2541558953 + .long 1019137887 + .long 1942403584 + .long 1069740463 + .long 1879620343 + .long 1022653642 + .long 4268263680 + .long 1069757030 + .long 3039077047 + .long 1022252545 + .long 2067062272 + .long 1069773603 + .long 4190670677 + .long 1020725863 + .long 4225828096 + .long 1069790180 + .long 1998567321 + .long 1022014385 + .long 2452507136 + .long 1069806763 + .long 1511628873 + .long 1021900300 + .long 1340746240 + .long 1069823351 + .long 788367341 + .long 1022726208 + .long 1190035456 + .long 1069839944 + .long 3856337230 + .long 1021834118 + .long 2300688384 + .long 1069856542 + .long 3211396579 + .long 1022621365 + .long 678886400 + .long 1069873146 + .long 4001011887 + .long 1022042646 + .long 921594112 + .long 1069889755 + .long 557811968 + .long 1023065533 + .long 3331668992 + .long 1069906369 + .long 1877060679 + .long 1022419742 + .long 3917875200 + .long 1069922989 + .long 1181055171 + .long 1022752712 + .long 2984829696 + .long 1069939615 + .long 4294526932 + .long 1021499988 + .long 838049024 + .long 1069956247 + .long 3658081878 + .long 1022957952 + .long 2078928384 + .long 1069972884 + .long 820353701 + .long 1019391107 + .long 2719854336 + .long 1069989527 + .long 1644022489 + .long 1023378240 + .long 3069117696 + .long 1070006176 + .long 2771393702 + .long 1019319954 + .long 3435962368 + .long 1070022831 + .long 3876394145 + .long 1023024433 + .long 4130595328 + .long 1070039492 + .long 1630447748 + .long 1021465882 + .long 1169236224 + .long 1070056160 + .long 2828355997 + .long 1020458120 + .long 3453997312 + .long 1070072833 + .long 164091641 + .long 1020388279 + .long 2708127744 + .long 1070089513 + .long 3036550223 + .long 1023328684 + .long 3540797696 + .long 1070106199 + .long 3710949463 + .long 1022568805 + .long 1972276736 + .long 1070122892 + .long 3885277950 + .long 1019761674 + .long 2613815552 + .long 1070139591 + .long 2764165077 + .long 1022921023 + .long 1487791616 + .long 1070156297 + .long 1330644769 + .long 1023162679 + .long 3207593472 + .long 1070173009 + .long 3911007221 + .long 1022993496 + .long 3797764608 + .long 1070189728 + .long 979712598 + .long 1022554580 + .long 3578920448 + .long 1070206454 + .long 2825738223 + .long 1020223708 + .long 2872795648 + .long 1070223187 + .long 392451124 + .long 1022666279 + .long 2002258432 + .long 1070239927 + .long 3730407632 + .long 1023148291 + .long 1291326464 + .long 1070256674 + .long 3723802980 + .long 1022514089 + .long 1065180928 + .long 1070273428 + .long 2635617463 + .long 1022654470 + .long 1650181632 + .long 1070290189 + .long 2061982883 + .long 1022853411 + .long 3373882880 + .long 1070306957 + .long 319732785 + .long 1022017175 + .long 2270081280 + .long 1070323733 + .long 2237757411 + .long 1023064087 + .long 2963732736 + .long 1070340516 + .long 468839165 + .long 1023293774 + .long 1491099904 + .long 1070357307 + .long 1502657946 + .long 1021533479 + .long 2479636480 + .long 1070374105 + .long 482913562 + .long 1021986286 + .long 1968133632 + .long 1070390911 + .long 3281474337 + .long 1022646400 + .long 291639040 + .long 1070407725 + .long 2453320259 + .long 1022812423 + .long 2081472512 + .long 1070424546 + .long 2939989570 + .long 1023091888 + .long 3380340480 + .long 1070441375 + .long 2850707499 + .long 1021921109 + .long 232287488 + .long 1070458213 + .long 3674625342 + .long 1020725130 + .long 1567614208 + .long 1070475058 + .long 9347334 + .long 1022024009 + .long 3433091072 + .long 1070491911 + .long 282524999 + .long 1021433523 + .long 1876877312 + .long 1070508773 + .long 3470449440 + .long 1019309721 + .long 1538472192 + .long 1070525643 + .long 2089486825 + .long 1019698916 + .long 2763830784 + .long 1070542521 + .long 443498115 + .long 1020505194 + .long 1605381632 + .long 1070559408 + .long 3018871601 + .long 1022869913 + .long 2706946048 + .long 1070576303 + .long 3936260892 + .long 1023175875 + .long 2123887360 + .long 1070593207 + .long 2994220655 + .long 1022825948 + .long 104015104 + .long 1070603108 + .long 335054493 + .long 1023441853 + .long 2904568832 + .long 1070615800 + .long 1451215633 + .long 1023853857 + .long 3456197120 + .long 1070632739 + .long 436334733 + .long 1024026432 + .long 252452352 + .long 1070649697 + .long 34596167 + .long 1024031396 + .long 3328018432 + .long 1070666672 + .long 2644547073 + .long 1024296758 + .long 1255829248 + .long 1070683667 + .long 552832586 + .long 1023763122 + .long 4097058560 + .long 1070700680 + .long 1955640623 + .long 1021394654 + .long 451770112 + .long 1070717714 + .long 3428903777 + .long 1022941142 + .long 408920832 + .long 1070734767 + .long 165503263 + .long 1023894958 + .long 1186960640 + .long 1070751840 + .long 435826450 + .long 1024026134 + .long 19078656 + .long 1070768934 + .long 1834169749 + .long 1022899284 + .long 2743490304 + .long 1070786048 + .long 494581074 + .long 1018818479 + .long 2328961024 + .long 1070803184 + .long 2987908834 + .long 1022581110 + .long 350011392 + .long 1070820342 + .long 240771184 + .long 1024143083 + .long 2692326912 + .long 1070837521 + .long 666056837 + .long 1022394776 + .long 2373274368 + .long 1070854723 + .long 2484337770 + .long 1024228156 + .long 1017131520 + .long 1070871948 + .long 3285648279 + .long 1024025789 + .long 265558272 + .long 1070889196 + .long 392241896 + .long 1024252809 + .long 1778008064 + .long 1070906467 + .long 1536107943 + .long 1023949300 + .long 2937184768 + .long 1070923762 + .long 3541062251 + .long 1019448646 + .long 1144442880 + .long 1070941082 + .long 3691683781 + .long 1022123948 + .long 2410165504 + .long 1070958426 + .long 1804181960 + .long 1023945221 + .long 4174350848 + .long 1070975795 + .long 2016094861 + .long 1021716585 + .long 3897012480 + .long 1070993190 + .long 175294410 + .long 1023703404 + .long 3353623040 + .long 1071010611 + .long 167973242 + .long 1023240839 + .long 45671168 + .long 1071028059 + .long 2166856113 + .long 1021565413 + .long 86063872 + .long 1071045533 + .long 2676254727 + .long 1023985299 + .long 1019772672 + .long 1071063034 + .long 989043593 + .long 1021549587 + .long 414297344 + .long 1071080563 + .long 3960972046 + .long 1024307251 + .long 155173120 + .long 1071098120 + .long 1830919291 + .long 1021592251 + .long 2151562240 + .long 1071115705 + .long 405408666 + .long 1023423128 + .long 4041854720 + .long 1071133319 + .long 2043497827 + .long 1024411503 + .long 3489224192 + .long 1071150963 + .long 3072215864 + .long 1022698635 + .long 2477196288 + .long 1071168637 + .long 1812195139 + .long 1022689192 + .long 3015298816 + .long 1071186341 + .long 764841969 + .long 1021027331 + .long 2844731136 + .long 1071204076 + .long 2878117321 + .long 1019116513 + .long 4028950528 + .long 1071221842 + .long 698911452 + .long 1023265602 + .long 69441536 + .long 1071239641 + .long 3253467847 + .long 1020795075 + .long 1676209920 + .long 1071257471 + .long 4272431167 + .long 1022873982 + .long 2408752384 + .long 1071275334 + .long 648519100 + .long 1024385717 + .long 151623680 + .long 1071293231 + .long 345257017 + .long 1019561408 + .long 1410154240 + .long 1071311161 + .long 197863993 + .long 1023224207 + .long 4131351552 + .long 1071329125 + .long 2620801789 + .long 1024411169 + .long 1999664384 + .long 1071347125 + .long 3952692616 + .long 1024168086 + .long 1617668864 + .long 1071365160 + .long 3019889809 + .long 1021907692 + .long 1032074240 + .long 1071383231 + .long 59469899 + .long 1023656194 + .long 2619492096 + .long 1071401338 + .long 1417526820 + .long 1021457783 + .long 202429440 + .long 1071419483 + .long 2927667935 + .long 1019175447 + .long 525044224 + .long 1071437665 + .long 38166811 + .long 1023981879 + .long 1779258880 + .long 1071455885 + .long 481252500 + .long 1023310234 + .long 2195673600 + .long 1071474144 + .long 3962395981 + .long 1021339088 + .long 44573696 + .long 1071492443 + .long 3936281395 + .long 1023014829 + .long 2226905344 + .long 1071510781 + .long 1515320476 + .long 1024320623 + .long 2800512512 + .long 1071529160 + .long 1225403697 + .long 1021081846 + .long 161113600 + .long 1071547581 + .long 3064809733 + .long 1024173917 + .long 1338410240 + .long 1071566043 + .long 2027604973 + .long 1024362526 + .long 522433280 + .long 1071584548 + .long 2055171723 + .long 1023858825 + .long 539595776 + .long 1071603096 + .long 3868820135 + .long 1022936424 + .long 4264017664 + .long 1071621687 + .long 3228065145 + .long 1023479578 + .long 1733924096 + .long 1071640324 + .long 3511934475 + .long 1022496355 + .long 108880384 + .long 1071651839 + .long 615880967 + .long 1023519706 + .long 3517856512 + .long 1071661202 + .long 3113108559 + .long 1025190289 + .long 4043153152 + .long 1071670589 + .long 1571836218 + .long 1023106116 + .long 3251299072 + .long 1071680000 + .long 3444076102 + .long 1022187841 + .long 2736921600 + .long 1071689435 + .long 272771483 + .long 1025095280 + .long 3897698560 + .long 1071703633 + .long 2075390188 + .long 1022489022 + .long 3209485056 + .long 1071722652 + .long 1438094065 + .long 1021844944 + .long 3781432064 + .long 1071741774 + .long 1675017145 + .long 1024143828 + .long 2684184064 + .long 1071761003 + .long 2259963753 + .long 1024731393 + .long 1840489728 + .long 1071780342 + .long 3372883597 + .long 1023431408 + .long 3764087808 + .long 1071799794 + .long 3307523102 + .long 1024485788 + .long 3006232320 + .long 1071819364 + .long 3088971966 + .long 1025213251 + .long 3374881280 + .long 1071839055 + .long 834437749 + .long 1025236452 + .long 797284864 + .long 1071858872 + .long 3122663941 + .long 1025320473 + .long 545765120 + .long 1071878818 + .long 826539625 + .long 1022450955 + .long 107562240 + .long 1071898898 + .long 339584600 + .long 1022481255 + .long 2123649024 + .long 1071919116 + .long 3912959833 + .long 1024321009 + .long 1562385664 + .long 1071939478 + .long 2846067230 + .long 1023343981 + .long 2963085824 + .long 1071959988 + .long 954548627 + .long 1021475211 + .long 3325550592 + .long 1071980652 + .long 3459651155 + .long 1025305573 + .long 775752448 + .long 1072001476 + .long 3582746667 + .long 1023859460 + .long 3238590720 + .long 1072022464 + .long 634636162 + .long 1024472353 + .long 2758801920 + .long 1072043624 + .long 3078216319 + .long 1025304516 + .long 1370319104 + .long 1072064962 + .long 2570569078 + .long 1025099442 + .long 2615805184 + .long 1072086484 + .long 3729933412 + .long 1024605112 + .long 3077336576 + .long 1072108198 + .long 1948916066 + .long 1024781603 + .long 1099528192 + .long 1072130112 + .long 3139143157 + .long 1023729360 + .long 1231903232 + .long 1072152233 + .long 1349513477 + .long 1024737515 + .long 1507504128 + .long 1072174570 + .long 3484516322 + .long 1024000959 + .long 2214659840 + .long 1072197132 + .long 2563820917 + .long 1025225535 + .long 1804739840 + .long 1072219929 + .long 760038746 + .long 1024482855 + .long 1413746688 + .long 1072242971 + .long 3401734714 + .long 1025129838 + .long 821409536 + .long 1072266269 + .long 3729772551 + .long 1025484796 + .long 3031825664 + .long 1072289834 + .long 122256749 + .long 1024752594 + .long 1710784256 + .long 1072313680 + .long 1518205483 + .long 1024724809 + .long 3025265152 + .long 1072337819 + .long 409951989 + .long 1022835555 + .long 287769088 + .long 1072362267 + .long 800355594 + .long 1022484850 + .long 198179840 + .long 1072387038 + .long 3502926213 + .long 1024209373 + .long 1909130496 + .long 1072412149 + .long 3064694319 + .long 1025380823 + .long 1941732096 + .long 1072437619 + .long 4112930390 + .long 1024294679 + .long 3492010496 + .long 1072463467 + .long 2684918107 + .long 1023220233 + .long 81959680 + .long 1072489716 + .long 220021366 + .long 1020635131 + .long 2297837056 + .long 1072516387 + .long 4027683826 + .long 1021041185 + .long 270404096 + .long 1072543508 + .long 2012766065 + .long 1021780753 + .long 3667376896 + .long 1072571105 + .long 2727981522 + .long 1023009874 + .long 330400256 + .long 1072599212 + .long 2940017003 + .long 1025393439 + .long 1119293952 + .long 1072627861 + .long 1608550416 + .long 1022675612 + .long 3536155904 + .long 1072657091 + .long 349665778 + .long 1025156751 + .long 3078046720 + .long 1072686946 + .long 2016159996 + .long 1022193169 + .long 455228416 + .long 1072705361 + .long 1908539328 + .long 1026126332 + .long 1871505664 + .long 1072720988 + .long 2784700894 + .long 1025922277 + .long 1630994432 + .long 1072737010 + .long 361107678 + .long 1022887244 + .long 2084558336 + .long 1072753462 + .long 2642784509 + .long 1072689083 + .long 1514442531 + .long 1072688953 + .long 333108933 + .long 1072688821 + .long 3392112024 + .long 1072688686 + .long 2099852862 + .long 1072688550 + .long 749609004 + .long 1072688412 + .long 3634632596 + .long 1072688271 + .long 2163248461 + .long 1072688129 + .long 628657846 + .long 1072687985 + .long 3324036511 + .long 1072687838 + .long 1657632815 + .long 1072687690 + .long 4217538760 + .long 1072687539 + .long 2411951597 + .long 1072687387 + .long 533944872 + .long 1072687233 + .long 2876566508 + .long 1072687076 + .long 847936891 + .long 1072686918 + .long 3036019913 + .long 1072686757 + .long 848884575 + .long 1072686595 + .long 2874443326 + .long 1072686430 + .long 520713666 + .long 1072686264 + .long 2375556481 + .long 1072686095 + .long 4141904948 + .long 1072685924 + .long 1522666382 + .long 1072685752 + .long 3105624104 + .long 1072685577 + .long 298666327 + .long 1072685401 + .long 1689524500 + .long 1072685222 + .long 2981002200 + .long 1072685041 + .long 4170844284 + .long 1072684858 + .long 961802263 + .long 1072684674 + .long 1941503454 + .long 1072684487 + .long 2812647170 + .long 1072684298 + .long 3572873869 + .long 1072684107 + .long 4219797823 + .long 1072683914 + .long 456039788 + .long 1072683720 + .long 869096151 + .long 1072683523 + .long 1161535119 + .long 1072683324 + .long 1330865866 + .long 1072683123 + .long 1374571204 + .long 1072682920 + .long 1290107538 + .long 1072682715 + .long 1074904836 + .long 1072682508 + .long 726366587 + .long 1072682299 + .long 241869763 + .long 1072682088 + .long 3913732079 + .long 1072681874 + .long 3149342765 + .long 1072681659 + .long 2240966306 + .long 1072681442 + .long 1185873216 + .long 1072681223 + .long 4276274591 + .long 1072681001 + .long 2919452883 + .long 1072680778 + .long 1407565635 + .long 1072680553 + .long 4032743551 + .long 1072680325 + .long 2202188565 + .long 1072680096 + .long 207977577 + .long 1072679865 + .long 2342160518 + .long 1072679631 + .long 11858423 + .long 1072679396 + .long 1804034453 + .long 1072679158 + .long 3420722787 + .long 1072678918 + .long 563930456 + .long 1072678677 + .long 1820539192 + .long 1072678433 + .long 2892501606 + .long 1072678187 + .long 3776710320 + .long 1072677939 + .long 175063337 + .long 1072677690 + .long 674333171 + .long 1072677438 + .long 976363026 + .long 1072677184 + .long 1077935934 + .long 1072676928 + .long 1921075490 + .long 1072676540 + .long 881493302 + .long 1072676016 + .long 3275752439 + .long 1072675483 + .long 486855588 + .long 1072674943 + .long 1077229111 + .long 1072674394 + .long 723950308 + .long 1072673837 + .long 3693582199 + .long 1072673271 + .long 1367335316 + .long 1072672698 + .long 2305837020 + .long 1072672116 + .long 2184358641 + .long 1072671526 + .long 972682840 + .long 1072670928 + .long 2935101762 + .long 1072670321 + .long 3745513263 + .long 1072669706 + .long 3372320886 + .long 1072669083 + .long 1783464620 + .long 1072668452 + .long 3241386215 + .long 1072667812 + .long 3418125284 + .long 1072667164 + .long 2280219148 + .long 1072666508 + .long 4088700758 + .long 1072665843 + .long 219227400 + .long 1072665171 + .long 3521816918 + .long 1072664489 + .long 1076205279 + .long 1072663800 + .long 1436484616 + .long 1072663102 + .long 271362610 + .long 1072662396 + .long 1838996688 + .long 1072661681 + .long 1807122518 + .long 1072660958 + .long 137953542 + .long 1072660227 + .long 1088178584 + .long 1072659487 + .long 324057537 + .long 1072658739 + .long 2101288076 + .long 1072657982 + .long 2085133974 + .long 1072657217 + .long 235324451 + .long 1072656444 + .long 806051592 + .long 1072655662 + .long 3756033140 + .long 1072654871 + .long 453542543 + .long 1072654073 + .long 3741177327 + .long 1072653265 + .long 691216109 + .long 1072652450 + .long 4145223372 + .long 1072651625 + .long 1174439091 + .long 1072650793 + .long 324416139 + .long 1072649952 + .long 1550246310 + .long 1072649102 + .long 511524674 + .long 1072648244 + .long 1457248482 + .long 1072647377 + .long 45944955 + .long 1072646502 + .long 525537397 + .long 1072645618 + .long 2848440188 + .long 1072644725 + .long 2671555633 + .long 1072643824 + .long 4241172637 + .long 1072642914 + .long 3213094278 + .long 1072641996 + .long 3832503688 + .long 1072641069 + .long 1754091534 + .long 1072640134 + .long 1221921804 + .long 1072639190 + .long 2184526489 + .long 1072638237 + .long 294902089 + .long 1072637276 + .long 4090375270 + .long 1072636305 + .long 632860906 + .long 1072635327 + .long 2753498702 + .long 1072634339 + .long 1808009252 + .long 1072633343 + .long 2036428672 + .long 1072632338 + .long 3383235626 + .long 1072631324 + .long 1497347484 + .long 1072630302 + .long 617018317 + .long 1072629271 + .long 684933058 + .long 1072628231 + .long 1643170798 + .long 1072627182 + .long 3011066360 + .long 1072625592 + .long 957158713 + .long 1072623442 + .long 1390907941 + .long 1072621256 + .long 3819155270 + .long 1072619034 + .long 3443571196 + .long 1072616777 + .long 4045412458 + .long 1072614484 + .long 805503923 + .long 1072612156 + .long 1778922015 + .long 1072609791 + .long 2125033665 + .long 1072607390 + .long 1287203863 + .long 1072604953 + .long 2992629568 + .long 1072602479 + .long 2367267127 + .long 1072599969 + .long 3115526047 + .long 1072597422 + .long 340219539 + .long 1072594839 + .long 2017215719 + .long 1072592218 + .long 3225443424 + .long 1072589560 + .long 3326565673 + .long 1072586865 + .long 1669811211 + .long 1072584133 + .long 1886735022 + .long 1072581363 + .long 3301071171 + .long 1072578555 + .long 928514283 + .long 1072575710 + .long 2656364059 + .long 1072572826 + .long 3473490507 + .long 1072569904 + .long 2649965606 + .long 1072566944 + .long 3736819052 + .long 1072563945 + .long 1680885175 + .long 1072560908 + .long 4413771 + .long 1072557832 + .long 2214869753 + .long 1072554716 + .long 3214725184 + .long 1072551561 + .long 2186079903 + .long 1072548367 + .long 2590372131 + .long 1072545133 + .long 3578146079 + .long 1072541859 + .long 4283712755 + .long 1072538545 + .long 3824834510 + .long 1072535191 + .long 1302400298 + .long 1072531797 + .long 95058636 + .long 1072528362 + .long 3563906063 + .long 1072524885 + .long 2167230730 + .long 1072521368 + .long 3524918334 + .long 1072517809 + .long 2353304918 + .long 1072514209 + .long 1939625839 + .long 1072510567 + .long 1256714581 + .long 1072506883 + .long 3552525848 + .long 1072503156 + .long 3464809522 + .long 1072499387 + .long 4200542593 + .long 1072495575 + .long 355609124 + .long 1072491721 + .long 3684139099 + .long 1072487822 + .long 148355918 + .long 1072483881 + .long 1457689242 + .long 1072479895 + .long 2118591596 + .long 1072475865 + .long 908848089 + .long 1072471791 + .long 877032689 + .long 1072467672 + .long 752012304 + .long 1072463508 + .long 3532301749 + .long 1072459298 + .long 3600563221 + .long 1072455043 + .long 3902857084 + .long 1072450742 + .long 3063101036 + .long 1072446395 + .long 3972344374 + .long 1072442001 + .long 903183549 + .long 1072437561 + .long 983892938 + .long 1072433073 + .long 2722858568 + .long 1072428537 + .long 302790515 + .long 1072423954 + .long 759811057 + .long 1072419322 + .long 2507809922 + .long 1072414641 + .long 2388408813 + .long 1072407528 + .long 2084492942 + .long 1072397870 + .long 2435703301 + .long 1072388010 + .long 1935433360 + .long 1072377945 + .long 2742047290 + .long 1072367671 + .long 2053284205 + .long 1072357185 + .long 657783367 + .long 1072346483 + .long 2893664841 + .long 1072335560 + .long 3718906405 + .long 1072324413 + .long 1547896303 + .long 1072313038 + .long 2494058440 + .long 1072301429 + .long 3133238742 + .long 1072289582 + .long 3327000086 + .long 1072277492 + .long 1860667274 + .long 1072265154 + .long 665340747 + .long 1072252562 + .long 443347841 + .long 1072239710 + .long 581282618 + .long 1072226592 + .long 3349780465 + .long 1072213201 + .long 914217606 + .long 1072199532 + .long 989797661 + .long 1072185576 + .long 945436416 + .long 1072171326 + .long 549291300 + .long 1072156774 + .long 1814636389 + .long 1072141911 + .long 239092858 + .long 1072126729 + .long 1794680724 + .long 1072111217 + .long 1241534678 + .long 1072095366 + .long 3366566214 + .long 1072079164 + .long 1244090828 + .long 1072062601 + .long 1708448120 + .long 1072045663 + .long 3544260650 + .long 1072028337 + .long 1402741403 + .long 1072010610 + .long 2551936888 + .long 1071992465 + .long 617669739 + .long 1071973887 + .long 794002186 + .long 1071954857 + .long 2021237693 + .long 1071935356 + .long 540450384 + .long 1071915364 + .long 1920555537 + .long 1071894857 + .long 2879585206 + .long 1071873811 + .long 3000237455 + .long 1071852199 + .long 3352974346 + .long 1071829991 + .long 569629937 + .long 1071807155 + .long 2077237208 + .long 1071783653 + .long 2284891805 + .long 1071759446 + .long 1226651784 + .long 1071734489 + .long 1102047405 + .long 1071708731 + .long 2009896384 + .long 1071682115 + .long 927419082 + .long 1071654577 + .long 85010366 + .long 1071607413 + .long 696431025 + .long 1071548180 + .long 2611410541 + .long 1071486585 + .long 2612593658 + .long 1071422396 + .long 3548155306 + .long 1071355336 + .long 3887997484 + .long 1071285073 + .long 244854763 + .long 1071211202 + .long 4214445648 + .long 1071133216 + .long 2303966727 + .long 1071050478 + .long 3991040013 + .long 1070962152 + .long 3126952278 + .long 1070867118 + .long 1817448378 + .long 1070763804 + .long 1793814864 + .long 1070649884 + .long 3507224072 + .long 1070447193 + .long 4027609105 + .long 1070148772 + .long 577507993 + .long 1069779414 + .long 2310232419 + .long 1068931829 + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 3164710438 + .long 1413754136 + .long 3221823995 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 1074340347 + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .long 0 + .long 0 + .long 1431655765 + .long 3217380693 + .long 858993459 + .long 3216192307 + .long 3067833783 + .long 3215383405 + .long 780903145 + .long 1066854586 + .long 858993459 + .long 1068708659 + .long 3340530119 + .long 1067392113 + .long 1431655765 + .long 1069897045 + .long 1321528399 + .long 1066517740 + .long 3067833783 + .long 1067899757 + .long 2021159460 + .long 1065855096 + .long 2576980378 + .long 1066178969 + .long 4294967295 + .long 2147483647 + .long 0 + .long 0 + .long 0 + .long 4294950912 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 1071644672 + .long 0 + .long 0 + .type static_const_table,@object + .size static_const_table,6112 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_asin.S b/libm/x86/e_asin.S new file mode 100644 index 000000000..99dfb68d3 --- /dev/null +++ b/libm/x86/e_asin.S @@ -0,0 +1,2004 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// To compute asin(s), separate schemes are used when s is in different +// intervals. +// +// |s| in [2^{-4}, sqrt(3)/2): +// Let t=2^k*1.b1 b2..b6 1, where s=2^k*1.b1 b2 .. b52 +// asin(s)=asin(t)+asin(r), where r=s*sqrt(1-t^2)-t*sqrt(1-s^2) +// asin(r)-r evaluated as 7-degree polynomial (c3*r^3+c5*r^5+c7*r^7) +// For the first degree term, r is evaluated as +// R=(s^2-t^2)/(sqrt(1-t^2)*s+sqrt(1-s^2)*t) +// (sqrt(1-t^2) read from table) +// The main source of error is still R (may still be affected by up to 3 ulps +// of rounding error). The table size must be sufficiently large, to minimize +// this effect. +// +// |s| in [sqrt(3)/2, 255/256): +// Let t=2^k*1.b1 b2..b6 1, where sqrt(1-s^2)=2^k*1.b1 b2 .. b52 (rounded) +// asin(|s|)=pi/2-asin(t)+asin(r), r=s*t-sqrt(1-s^2)*sqrt(1-t^2) +// asin(r) evaluated as polynomial (same as above) +// The first degree term is evaluated as +// r=(s^2+t^2-1)/(s*t+sqrt(1-s^2)*sqrt(1-t^2)) +// +// |s|<2^{-4}: evaluate as 13-degree polynomial +// +// |s| in [255/256,1): asin(|s|)=pi/2-asin(sqrt(1-s^2)) +// use 17-degree polynomial, get error term +// Q*eps ~ (1-s^2-Q^2)/(2*Q) for first term +// ( Q(1+eps)=sqrt(1-s^2) ) +// +// Special cases: +// asin(NaN) = quiet NaN, and raise invalid exception +// asin(INF) = QNaN and raise invalid exception +// asin(x) = QNaN and raise invalid exception, for |x|>1.0 +// asin(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin asin +ENTRY(asin) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 64(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + stmxcsr 16(%esp) + movl 16(%esp), %edx + andl $-24577, %edx + cmpl %edx, 16(%esp) + jne .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + movsd 5984(%ebx), %xmm4 + movsd 6016(%ebx), %xmm3 + xorpd %xmm5, %xmm5 + movsd 6000(%ebx), %xmm2 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movapd %xmm0, %xmm1 + movsd %xmm0, 8(%esp) + psrlq $44, %xmm0 + movd %xmm0, %edx + movapd %xmm1, %xmm7 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movapd %xmm1, %xmm0 + movl $524287, %eax + andl %edx, %eax + subl $260864, %eax + cmpl $955, %eax + jae .L_2TAG_PACKET_2.0.2 + mulsd %xmm1, %xmm1 + andl $65535, %edx + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + andpd %xmm7, %xmm2 + andl $-4, %edx + subl $64256, %edx + movsd 3936(%ebx,%edx,2), %xmm1 + orpd %xmm5, %xmm2 + movapd 96(%ebx,%edx,4), %xmm4 + movapd %xmm7, %xmm6 + addsd %xmm2, %xmm7 + subsd %xmm2, %xmm0 + mulsd %xmm7, %xmm0 + mulsd %xmm1, %xmm6 + mulsd %xmm2, %xmm3 + movapd %xmm6, %xmm1 + addsd %xmm3, %xmm6 + divsd %xmm6, %xmm0 + movsd 80(%ebx), %xmm7 + movsd 64(%ebx), %xmm5 + subsd %xmm3, %xmm1 + andpd 6064(%ebx), %xmm2 + movapd %xmm1, %xmm3 + mulsd %xmm1, %xmm1 + movsd 72(%ebx), %xmm6 + mulsd %xmm1, %xmm3 + mulsd %xmm1, %xmm7 + mulsd %xmm3, %xmm5 + xorpd %xmm2, %xmm4 + mulsd %xmm1, %xmm3 + addsd %xmm7, %xmm6 + mulsd %xmm3, %xmm6 + addsd %xmm4, %xmm5 + pshufd $238, %xmm4, %xmm4 + addsd %xmm5, %xmm6 + orpd %xmm2, %xmm4 + addsd %xmm6, %xmm0 + movl 16(%esp), %eax + andl $-24577, %eax + cmpl 16(%esp), %eax + je .L_2TAG_PACKET_3.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %eax + andl $24576, %eax + orl %eax, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_3.0.2: + addsd %xmm4, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_2.0.2: + subl $955, %eax + cmpl $67, %eax + jae .L_2TAG_PACKET_5.0.2 + mulsd %xmm1, %xmm1 + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + movl %edx, %eax + andpd 5984(%ebx), %xmm0 + andpd 6048(%ebx), %xmm7 + movapd %xmm0, %xmm1 + movsd 6016(%ebx), %xmm4 + movapd %xmm7, %xmm6 + subsd %xmm7, %xmm1 + mulsd %xmm7, %xmm7 + addsd %xmm6, %xmm0 + subsd %xmm7, %xmm4 + mulsd %xmm1, %xmm0 + movapd %xmm3, %xmm7 + andpd %xmm3, %xmm2 + psllq $2, %xmm3 + pextrw $3, %xmm3, %edx + orpd %xmm5, %xmm2 + subl $65216, %edx + addl %edx, %edx + mulsd 3936(%ebx,%edx,4), %xmm7 + mulsd %xmm2, %xmm6 + movapd 6080(%ebx), %xmm3 + mulsd %xmm2, %xmm1 + mulsd %xmm2, %xmm2 + subsd %xmm7, %xmm6 + addsd %xmm1, %xmm6 + subsd %xmm2, %xmm4 + addsd %xmm7, %xmm7 + movsd 64(%ebx), %xmm5 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm7 + movsd 80(%ebx), %xmm0 + divsd %xmm7, %xmm4 + movsd 72(%ebx), %xmm2 + subpd 96(%ebx,%edx,8), %xmm3 + movapd %xmm6, %xmm1 + mulsd %xmm6, %xmm6 + andl $524288, %eax + shrl $4, %eax + mulsd %xmm6, %xmm0 + mulsd %xmm6, %xmm1 + mulsd %xmm1, %xmm5 + mulsd %xmm6, %xmm1 + addsd %xmm2, %xmm0 + pxor %xmm6, %xmm6 + mulsd %xmm1, %xmm0 + addsd %xmm3, %xmm5 + pinsrw $3, %eax, %xmm6 + addsd %xmm5, %xmm0 + movapd %xmm4, %xmm5 + pshufd $238, %xmm3, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm3 + subsd %xmm3, %xmm5 + subsd %xmm5, %xmm0 + movl 16(%esp), %eax + andl $-24577, %eax + cmpl 16(%esp), %eax + je .L_2TAG_PACKET_6.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %eax + andl $24576, %eax + orl %eax, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_6.0.2: + xorpd %xmm6, %xmm0 + xorpd %xmm6, %xmm4 + subsd %xmm4, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + addl $15291, %eax + cmpl $14336, %eax + jae .L_2TAG_PACKET_7.0.2 + unpcklpd %xmm7, %xmm7 + movapd (%ebx), %xmm1 + movapd %xmm7, %xmm6 + movapd 16(%ebx), %xmm2 + movapd 32(%ebx), %xmm4 + mulpd %xmm7, %xmm7 + mulpd %xmm7, %xmm6 + mulpd %xmm7, %xmm1 + mulpd %xmm7, %xmm7 + movapd %xmm6, %xmm3 + mulsd %xmm6, %xmm6 + addpd %xmm2, %xmm1 + mulpd %xmm7, %xmm4 + mulsd %xmm3, %xmm6 + addpd %xmm4, %xmm1 + mulpd %xmm6, %xmm1 + pshufd $238, %xmm1, %xmm2 + addsd %xmm2, %xmm1 + movl 16(%esp), %eax + andl $-24577, %eax + cmpl 16(%esp), %eax + je .L_2TAG_PACKET_8.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %eax + andl $24576, %eax + orl %eax, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_8.0.2: + addsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_7.0.2: + subl $15358, %eax + cmpl $2, %eax + jae .L_2TAG_PACKET_9.0.2 + mulsd %xmm1, %xmm1 + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + movl %edx, %eax + andpd 6032(%ebx), %xmm7 + pshufd $68, %xmm3, %xmm5 + andpd 6032(%ebx), %xmm3 + movapd %xmm7, %xmm1 + movsd 6016(%ebx), %xmm4 + movapd %xmm7, %xmm6 + subsd %xmm7, %xmm0 + mulsd %xmm7, %xmm7 + addsd %xmm1, %xmm1 + mulsd %xmm0, %xmm1 + subsd %xmm7, %xmm4 + movapd %xmm3, %xmm6 + mulsd %xmm3, %xmm3 + mulsd %xmm0, %xmm0 + subsd %xmm1, %xmm4 + subsd %xmm5, %xmm6 + addsd %xmm5, %xmm5 + subsd %xmm3, %xmm4 + movapd (%ebx), %xmm2 + pshufd $238, %xmm5, %xmm3 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm5 + pshufd $238, %xmm3, %xmm7 + addsd %xmm3, %xmm3 + mulsd %xmm6, %xmm5 + addsd %xmm5, %xmm4 + pshufd $238, %xmm7, %xmm6 + divsd %xmm3, %xmm4 + movapd 48(%ebx), %xmm1 + movapd 16(%ebx), %xmm5 + movapd 32(%ebx), %xmm0 + mulpd %xmm7, %xmm7 + movapd %xmm6, %xmm3 + mulpd %xmm7, %xmm2 + mulpd %xmm7, %xmm6 + shrl $4, %eax + andl $32768, %eax + mulsd %xmm7, %xmm1 + mulpd %xmm7, %xmm7 + addpd %xmm2, %xmm5 + movapd %xmm6, %xmm2 + mulsd %xmm6, %xmm6 + mulpd %xmm0, %xmm7 + movapd 6080(%ebx), %xmm0 + mulsd %xmm6, %xmm2 + addpd %xmm5, %xmm7 + pshufd $238, %xmm1, %xmm5 + mulsd %xmm2, %xmm6 + mulpd %xmm2, %xmm7 + addsd %xmm5, %xmm1 + xorpd %xmm5, %xmm5 + pshufd $238, %xmm7, %xmm2 + mulsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm6 + addsd %xmm2, %xmm7 + movapd %xmm3, %xmm2 + pinsrw $3, %eax, %xmm5 + subsd %xmm6, %xmm3 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm6 + addsd %xmm4, %xmm7 + subsd %xmm6, %xmm2 + subsd %xmm7, %xmm0 + subsd %xmm2, %xmm0 + movl 16(%esp), %eax + andl $-24577, %eax + cmpl 16(%esp), %eax + je .L_2TAG_PACKET_10.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %eax + andl $24576, %eax + orl %eax, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_10.0.2: + xorpd %xmm5, %xmm0 + xorpd %xmm5, %xmm3 + subsd %xmm3, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_9.0.2: + addl $261886, %eax + cmpl $261888, %eax + jb .L_2TAG_PACKET_11.0.2 + movd %xmm0, %ecx + psrlq $32, %xmm0 + movd %xmm0, %edx + andl $2147483647, %edx + movl $1072693248, %eax + subl %edx, %eax + orl %ecx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_12.0.2 + movq 8(%esp), %xmm2 + movd %xmm2, %edx + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $2147483647, %ecx + subl $1, %edx + sbbl $2146435072, %ecx + cmpl $0, %ecx + jge .L_2TAG_PACKET_11.0.2 + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %edx + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_13.0.2 +.L_2TAG_PACKET_12.0.2: + movsd 5984(%ebx), %xmm1 + movsd 6080(%ebx), %xmm2 + movsd 6088(%ebx), %xmm0 + movl 16(%esp), %eax + andl $-24577, %eax + cmpl 16(%esp), %eax + je .L_2TAG_PACKET_14.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %eax + andl $24576, %eax + orl %eax, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_14.0.2: + andnpd %xmm7, %xmm1 + orpd %xmm1, %xmm0 + orpd %xmm1, %xmm2 + addsd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_0.0.2: + movl 16(%esp), %edx + andl $-24577, %edx + movl %edx, 24(%esp) + ldmxcsr 24(%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_11.0.2: + movsd 8(%esp), %xmm0 + xorpd %xmm6, %xmm6 + movapd %xmm0, %xmm7 + pextrw $3, %xmm0, %edx + andl $32752, %edx + subl $16, %edx + cmpl $32736, %edx + jb .L_2TAG_PACKET_15.0.2 + addsd %xmm0, %xmm6 + orpd %xmm6, %xmm0 + mulsd %xmm0, %xmm7 +.L_2TAG_PACKET_15.0.2: + movsd %xmm0, (%esp) + fldl (%esp) +.L_2TAG_PACKET_13.0.2: + movl 16(%esp), %edx + andl $-24577, %edx + cmpl 16(%esp), %edx + je .L_2TAG_PACKET_4.0.2 + stmxcsr 24(%esp) + movl 16(%esp), %edx + andl $24576, %edx + orl %edx, 24(%esp) + ldmxcsr 24(%esp) +.L_2TAG_PACKET_4.0.2: + movl 64(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(asin) +# -- End asin + +# Start file scope ASM +.weak asinl +.equ asinl, asin +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 780903145 + .long 1066854586 + .long 858993459 + .long 1068708659 + .long 3340530119 + .long 1067392113 + .long 1431655765 + .long 1069897045 + .long 1321528399 + .long 1066517740 + .long 3067833783 + .long 1067899757 + .long 2021159460 + .long 1065855096 + .long 2576980378 + .long 1066178969 + .long 1431655765 + .long 1069897045 + .long 858993459 + .long 1068708659 + .long 3067833783 + .long 1067899757 + .long 0 + .long 0 + .long 3822952792 + .long 1021639372 + .long 182792448 + .long 1068507836 + .long 2264213271 + .long 1019558908 + .long 649052928 + .long 1068524253 + .long 1797139609 + .long 1022295143 + .long 1243095296 + .long 1068540671 + .long 1415938756 + .long 1021439537 + .long 2033294592 + .long 1068557090 + .long 2356809978 + .long 1021777916 + .long 3088063744 + .long 1068573510 + .long 2669055318 + .long 1022124482 + .long 180888576 + .long 1068589932 + .long 3566445325 + .long 1021358712 + .long 1970196992 + .long 1068606354 + .long 896980323 + .long 1021319659 + .long 4229555456 + .long 1068622777 + .long 436049712 + .long 1021319758 + .long 2732572160 + .long 1068639202 + .long 583123209 + .long 1020797960 + .long 1842831872 + .long 1068655628 + .long 1370449804 + .long 1021429270 + .long 1628994560 + .long 1068672055 + .long 2411391464 + .long 1021057980 + .long 2159763712 + .long 1068688483 + .long 1208692749 + .long 1021943903 + .long 3503886336 + .long 1068704912 + .long 538793309 + .long 1019744063 + .long 1435187200 + .long 1068721343 + .long 4085087612 + .long 1020608419 + .long 317469952 + .long 1068737775 + .long 144386942 + .long 1021440732 + .long 219617280 + .long 1068754208 + .long 2940088361 + .long 1019981122 + .long 1210558208 + .long 1068770642 + .long 2176850347 + .long 1018373705 + .long 3359268352 + .long 1068787077 + .long 2395611454 + .long 1021889042 + .long 2439803648 + .long 1068803514 + .long 1650705253 + .long 1020227966 + .long 2816203520 + .long 1068819952 + .long 3702166386 + .long 1019379914 + .long 262620672 + .long 1068836392 + .long 1855649370 + .long 1020453124 + .long 3438159616 + .long 1068852832 + .long 923063860 + .long 1019273834 + .long 3822105856 + .long 1068869274 + .long 4289947947 + .long 1019434249 + .long 1483729920 + .long 1068885718 + .long 787455814 + .long 1020738379 + .long 787321088 + .long 1068902163 + .long 3321653337 + .long 1021842569 + .long 1802253312 + .long 1068918609 + .long 2653633526 + .long 1021821525 + .long 302985984 + .long 1068935057 + .long 161272028 + .long 1021655149 + .long 653966080 + .long 1068951506 + .long 2566098667 + .long 1020066219 + .long 2924727296 + .long 1068967956 + .long 3646493722 + .long 1014292285 + .long 2889890304 + .long 1068984408 + .long 1081009196 + .long 1022189620 + .long 619098112 + .long 1069000862 + .long 4011643355 + .long 1021773297 + .long 477017600 + .long 1069017317 + .long 4030305534 + .long 1021292252 + .long 2533403904 + .long 1069033773 + .long 2645187591 + .long 1019527099 + .long 2563102208 + .long 1069050231 + .long 3857293792 + .long 1022311697 + .long 635982336 + .long 1069066691 + .long 3625936637 + .long 1017511744 + .long 1116940800 + .long 1069083152 + .long 3653872993 + .long 1022016631 + .long 4075964160 + .long 1069099614 + .long 2468900271 + .long 1021769532 + .long 993165568 + .long 1069116079 + .long 1358104224 + .long 1021199776 + .long 528586752 + .long 1069132545 + .long 2200950332 + .long 1022024872 + .long 2752395776 + .long 1069149012 + .long 3197072454 + .long 1017751319 + .long 3439855616 + .long 1069165481 + .long 1651081806 + .long 1020809338 + .long 2661257728 + .long 1069181952 + .long 539032752 + .long 1021728805 + .long 486957312 + .long 1069198425 + .long 3136045149 + .long 1016888671 + .long 1282340352 + .long 1069214899 + .long 2593963259 + .long 1018956103 + .long 822921728 + .long 1069231375 + .long 2146032737 + .long 1022306465 + .long 3474216192 + .long 1069247852 + .long 3976811625 + .long 1021350207 + .long 716902656 + .long 1069264332 + .long 718267222 + .long 1018624727 + .long 1211594496 + .long 1069280813 + .long 1485641389 + .long 1018447451 + .long 734070272 + .long 1069297296 + .long 354455128 + .long 1021341291 + .long 3650110720 + .long 1069313780 + .long 682185947 + .long 1021651853 + .long 1440663040 + .long 1069330267 + .long 3558574550 + .long 1021615110 + .long 2766612224 + .long 1069346755 + .long 874607978 + .long 1017746872 + .long 3404011008 + .long 1069363245 + .long 4154988502 + .long 1021439906 + .long 3423949056 + .long 1069379737 + .long 2263202309 + .long 1021479615 + .long 2897587712 + .long 1069396231 + .long 2562065031 + .long 1022090363 + .long 1896159232 + .long 1069412727 + .long 3836237663 + .long 1019867288 + .long 490968576 + .long 1069429225 + .long 3322056743 + .long 1006752762 + .long 3048360192 + .long 1069445724 + .long 1152314833 + .long 1013122252 + .long 1049850624 + .long 1069462226 + .long 3601590727 + .long 1022214610 + .long 3156899584 + .long 1069478729 + .long 1855169970 + .long 1019487271 + .long 851173376 + .long 1069495235 + .long 312649594 + .long 1020868604 + .long 2794281728 + .long 1069511742 + .long 1093490181 + .long 1020777577 + .long 468042496 + .long 1069528252 + .long 1152540679 + .long 1021403732 + .long 2534219264 + .long 1069544763 + .long 2292126035 + .long 1021872430 + .long 1376146432 + .long 1069558527 + .long 3293753641 + .long 1020500454 + .long 4175442432 + .long 1069575044 + .long 3626347564 + .long 1021610969 + .long 3523113472 + .long 1069591566 + .long 339956500 + .long 1021119039 + .long 4003350528 + .long 1069608092 + .long 3429333082 + .long 1022813542 + .long 1611067392 + .long 1069624623 + .long 2298017544 + .long 1021977587 + .long 931782144 + .long 1069641158 + .long 2164684743 + .long 1021250988 + .long 2256725504 + .long 1069657697 + .long 1138762335 + .long 1021443776 + .long 1582853120 + .long 1069674241 + .long 1084010382 + .long 1022994693 + .long 3497758720 + .long 1069690789 + .long 406366244 + .long 1022713586 + .long 3999816960 + .long 1069707342 + .long 1488723042 + .long 1023381290 + .long 3383096064 + .long 1069723900 + .long 2541558953 + .long 1019137887 + .long 1942403584 + .long 1069740463 + .long 1879620343 + .long 1022653642 + .long 4268263680 + .long 1069757030 + .long 3039077047 + .long 1022252545 + .long 2067062272 + .long 1069773603 + .long 4190670677 + .long 1020725863 + .long 4225828096 + .long 1069790180 + .long 1998567321 + .long 1022014385 + .long 2452507136 + .long 1069806763 + .long 1511628873 + .long 1021900300 + .long 1340746240 + .long 1069823351 + .long 788367341 + .long 1022726208 + .long 1190035456 + .long 1069839944 + .long 3856337230 + .long 1021834118 + .long 2300688384 + .long 1069856542 + .long 3211396579 + .long 1022621365 + .long 678886400 + .long 1069873146 + .long 4001011887 + .long 1022042646 + .long 921594112 + .long 1069889755 + .long 557811968 + .long 1023065533 + .long 3331668992 + .long 1069906369 + .long 1877060679 + .long 1022419742 + .long 3917875200 + .long 1069922989 + .long 1181055171 + .long 1022752712 + .long 2984829696 + .long 1069939615 + .long 4294526932 + .long 1021499988 + .long 838049024 + .long 1069956247 + .long 3658081878 + .long 1022957952 + .long 2078928384 + .long 1069972884 + .long 820353701 + .long 1019391107 + .long 2719854336 + .long 1069989527 + .long 1644022489 + .long 1023378240 + .long 3069117696 + .long 1070006176 + .long 2771393702 + .long 1019319954 + .long 3435962368 + .long 1070022831 + .long 3876394145 + .long 1023024433 + .long 4130595328 + .long 1070039492 + .long 1630447748 + .long 1021465882 + .long 1169236224 + .long 1070056160 + .long 2828355997 + .long 1020458120 + .long 3453997312 + .long 1070072833 + .long 164091641 + .long 1020388279 + .long 2708127744 + .long 1070089513 + .long 3036550223 + .long 1023328684 + .long 3540797696 + .long 1070106199 + .long 3710949463 + .long 1022568805 + .long 1972276736 + .long 1070122892 + .long 3885277950 + .long 1019761674 + .long 2613815552 + .long 1070139591 + .long 2764165077 + .long 1022921023 + .long 1487791616 + .long 1070156297 + .long 1330644769 + .long 1023162679 + .long 3207593472 + .long 1070173009 + .long 3911007221 + .long 1022993496 + .long 3797764608 + .long 1070189728 + .long 979712598 + .long 1022554580 + .long 3578920448 + .long 1070206454 + .long 2825738223 + .long 1020223708 + .long 2872795648 + .long 1070223187 + .long 392451124 + .long 1022666279 + .long 2002258432 + .long 1070239927 + .long 3730407632 + .long 1023148291 + .long 1291326464 + .long 1070256674 + .long 3723802980 + .long 1022514089 + .long 1065180928 + .long 1070273428 + .long 2635617463 + .long 1022654470 + .long 1650181632 + .long 1070290189 + .long 2061982883 + .long 1022853411 + .long 3373882880 + .long 1070306957 + .long 319732785 + .long 1022017175 + .long 2270081280 + .long 1070323733 + .long 2237757411 + .long 1023064087 + .long 2963732736 + .long 1070340516 + .long 468839165 + .long 1023293774 + .long 1491099904 + .long 1070357307 + .long 1502657946 + .long 1021533479 + .long 2479636480 + .long 1070374105 + .long 482913562 + .long 1021986286 + .long 1968133632 + .long 1070390911 + .long 3281474337 + .long 1022646400 + .long 291639040 + .long 1070407725 + .long 2453320259 + .long 1022812423 + .long 2081472512 + .long 1070424546 + .long 2939989570 + .long 1023091888 + .long 3380340480 + .long 1070441375 + .long 2850707499 + .long 1021921109 + .long 232287488 + .long 1070458213 + .long 3674625342 + .long 1020725130 + .long 1567614208 + .long 1070475058 + .long 9347334 + .long 1022024009 + .long 3433091072 + .long 1070491911 + .long 282524999 + .long 1021433523 + .long 1876877312 + .long 1070508773 + .long 3470449440 + .long 1019309721 + .long 1538472192 + .long 1070525643 + .long 2089486825 + .long 1019698916 + .long 2763830784 + .long 1070542521 + .long 443498115 + .long 1020505194 + .long 1605381632 + .long 1070559408 + .long 3018871601 + .long 1022869913 + .long 2706946048 + .long 1070576303 + .long 3936260892 + .long 1023175875 + .long 2123887360 + .long 1070593207 + .long 2994220655 + .long 1022825948 + .long 104015104 + .long 1070603108 + .long 335054493 + .long 1023441853 + .long 2904568832 + .long 1070615800 + .long 1451215633 + .long 1023853857 + .long 3456197120 + .long 1070632739 + .long 436334733 + .long 1024026432 + .long 252452352 + .long 1070649697 + .long 34596167 + .long 1024031396 + .long 3328018432 + .long 1070666672 + .long 2644547073 + .long 1024296758 + .long 1255829248 + .long 1070683667 + .long 552832586 + .long 1023763122 + .long 4097058560 + .long 1070700680 + .long 1955640623 + .long 1021394654 + .long 451770112 + .long 1070717714 + .long 3428903777 + .long 1022941142 + .long 408920832 + .long 1070734767 + .long 165503263 + .long 1023894958 + .long 1186960640 + .long 1070751840 + .long 435826450 + .long 1024026134 + .long 19078656 + .long 1070768934 + .long 1834169749 + .long 1022899284 + .long 2743490304 + .long 1070786048 + .long 494581074 + .long 1018818479 + .long 2328961024 + .long 1070803184 + .long 2987908834 + .long 1022581110 + .long 350011392 + .long 1070820342 + .long 240771184 + .long 1024143083 + .long 2692326912 + .long 1070837521 + .long 666056837 + .long 1022394776 + .long 2373274368 + .long 1070854723 + .long 2484337770 + .long 1024228156 + .long 1017131520 + .long 1070871948 + .long 3285648279 + .long 1024025789 + .long 265558272 + .long 1070889196 + .long 392241896 + .long 1024252809 + .long 1778008064 + .long 1070906467 + .long 1536107943 + .long 1023949300 + .long 2937184768 + .long 1070923762 + .long 3541062251 + .long 1019448646 + .long 1144442880 + .long 1070941082 + .long 3691683781 + .long 1022123948 + .long 2410165504 + .long 1070958426 + .long 1804181960 + .long 1023945221 + .long 4174350848 + .long 1070975795 + .long 2016094861 + .long 1021716585 + .long 3897012480 + .long 1070993190 + .long 175294410 + .long 1023703404 + .long 3353623040 + .long 1071010611 + .long 167973242 + .long 1023240839 + .long 45671168 + .long 1071028059 + .long 2166856113 + .long 1021565413 + .long 86063872 + .long 1071045533 + .long 2676254727 + .long 1023985299 + .long 1019772672 + .long 1071063034 + .long 989043593 + .long 1021549587 + .long 414297344 + .long 1071080563 + .long 3960972046 + .long 1024307251 + .long 155173120 + .long 1071098120 + .long 1830919291 + .long 1021592251 + .long 2151562240 + .long 1071115705 + .long 405408666 + .long 1023423128 + .long 4041854720 + .long 1071133319 + .long 2043497827 + .long 1024411503 + .long 3489224192 + .long 1071150963 + .long 3072215864 + .long 1022698635 + .long 2477196288 + .long 1071168637 + .long 1812195139 + .long 1022689192 + .long 3015298816 + .long 1071186341 + .long 764841969 + .long 1021027331 + .long 2844731136 + .long 1071204076 + .long 2878117321 + .long 1019116513 + .long 4028950528 + .long 1071221842 + .long 698911452 + .long 1023265602 + .long 69441536 + .long 1071239641 + .long 3253467847 + .long 1020795075 + .long 1676209920 + .long 1071257471 + .long 4272431167 + .long 1022873982 + .long 2408752384 + .long 1071275334 + .long 648519100 + .long 1024385717 + .long 151623680 + .long 1071293231 + .long 345257017 + .long 1019561408 + .long 1410154240 + .long 1071311161 + .long 197863993 + .long 1023224207 + .long 4131351552 + .long 1071329125 + .long 2620801789 + .long 1024411169 + .long 1999664384 + .long 1071347125 + .long 3952692616 + .long 1024168086 + .long 1617668864 + .long 1071365160 + .long 3019889809 + .long 1021907692 + .long 1032074240 + .long 1071383231 + .long 59469899 + .long 1023656194 + .long 2619492096 + .long 1071401338 + .long 1417526820 + .long 1021457783 + .long 202429440 + .long 1071419483 + .long 2927667935 + .long 1019175447 + .long 525044224 + .long 1071437665 + .long 38166811 + .long 1023981879 + .long 1779258880 + .long 1071455885 + .long 481252500 + .long 1023310234 + .long 2195673600 + .long 1071474144 + .long 3962395981 + .long 1021339088 + .long 44573696 + .long 1071492443 + .long 3936281395 + .long 1023014829 + .long 2226905344 + .long 1071510781 + .long 1515320476 + .long 1024320623 + .long 2800512512 + .long 1071529160 + .long 1225403697 + .long 1021081846 + .long 161113600 + .long 1071547581 + .long 3064809733 + .long 1024173917 + .long 1338410240 + .long 1071566043 + .long 2027604973 + .long 1024362526 + .long 522433280 + .long 1071584548 + .long 2055171723 + .long 1023858825 + .long 539595776 + .long 1071603096 + .long 3868820135 + .long 1022936424 + .long 4264017664 + .long 1071621687 + .long 3228065145 + .long 1023479578 + .long 1733924096 + .long 1071640324 + .long 3511934475 + .long 1022496355 + .long 108880384 + .long 1071651839 + .long 615880967 + .long 1023519706 + .long 3517856512 + .long 1071661202 + .long 3113108559 + .long 1025190289 + .long 4043153152 + .long 1071670589 + .long 1571836218 + .long 1023106116 + .long 3251299072 + .long 1071680000 + .long 3444076102 + .long 1022187841 + .long 2736921600 + .long 1071689435 + .long 272771483 + .long 1025095280 + .long 3897698560 + .long 1071703633 + .long 2075390188 + .long 1022489022 + .long 3209485056 + .long 1071722652 + .long 1438094065 + .long 1021844944 + .long 3781432064 + .long 1071741774 + .long 1675017145 + .long 1024143828 + .long 2684184064 + .long 1071761003 + .long 2259963753 + .long 1024731393 + .long 1840489728 + .long 1071780342 + .long 3372883597 + .long 1023431408 + .long 3764087808 + .long 1071799794 + .long 3307523102 + .long 1024485788 + .long 3006232320 + .long 1071819364 + .long 3088971966 + .long 1025213251 + .long 3374881280 + .long 1071839055 + .long 834437749 + .long 1025236452 + .long 797284864 + .long 1071858872 + .long 3122663941 + .long 1025320473 + .long 545765120 + .long 1071878818 + .long 826539625 + .long 1022450955 + .long 107562240 + .long 1071898898 + .long 339584600 + .long 1022481255 + .long 2123649024 + .long 1071919116 + .long 3912959833 + .long 1024321009 + .long 1562385664 + .long 1071939478 + .long 2846067230 + .long 1023343981 + .long 2963085824 + .long 1071959988 + .long 954548627 + .long 1021475211 + .long 3325550592 + .long 1071980652 + .long 3459651155 + .long 1025305573 + .long 775752448 + .long 1072001476 + .long 3582746667 + .long 1023859460 + .long 3238590720 + .long 1072022464 + .long 634636162 + .long 1024472353 + .long 2758801920 + .long 1072043624 + .long 3078216319 + .long 1025304516 + .long 1370319104 + .long 1072064962 + .long 2570569078 + .long 1025099442 + .long 2615805184 + .long 1072086484 + .long 3729933412 + .long 1024605112 + .long 3077336576 + .long 1072108198 + .long 1948916066 + .long 1024781603 + .long 1099528192 + .long 1072130112 + .long 3139143157 + .long 1023729360 + .long 1231903232 + .long 1072152233 + .long 1349513477 + .long 1024737515 + .long 1507504128 + .long 1072174570 + .long 3484516322 + .long 1024000959 + .long 2214659840 + .long 1072197132 + .long 2563820917 + .long 1025225535 + .long 1804739840 + .long 1072219929 + .long 760038746 + .long 1024482855 + .long 1413746688 + .long 1072242971 + .long 3401734714 + .long 1025129838 + .long 821409536 + .long 1072266269 + .long 3729772551 + .long 1025484796 + .long 3031825664 + .long 1072289834 + .long 122256749 + .long 1024752594 + .long 1710784256 + .long 1072313680 + .long 1518205483 + .long 1024724809 + .long 3025265152 + .long 1072337819 + .long 409951989 + .long 1022835555 + .long 287769088 + .long 1072362267 + .long 800355594 + .long 1022484850 + .long 198179840 + .long 1072387038 + .long 3502926213 + .long 1024209373 + .long 1909130496 + .long 1072412149 + .long 3064694319 + .long 1025380823 + .long 1941732096 + .long 1072437619 + .long 4112930390 + .long 1024294679 + .long 3492010496 + .long 1072463467 + .long 2684918107 + .long 1023220233 + .long 81959680 + .long 1072489716 + .long 220021366 + .long 1020635131 + .long 2297837056 + .long 1072516387 + .long 4027683826 + .long 1021041185 + .long 270404096 + .long 1072543508 + .long 2012766065 + .long 1021780753 + .long 3667376896 + .long 1072571105 + .long 2727981522 + .long 1023009874 + .long 330400256 + .long 1072599212 + .long 2940017003 + .long 1025393439 + .long 1119293952 + .long 1072627861 + .long 1608550416 + .long 1022675612 + .long 3536155904 + .long 1072657091 + .long 349665778 + .long 1025156751 + .long 3078046720 + .long 1072686946 + .long 2016159996 + .long 1022193169 + .long 455228416 + .long 1072705361 + .long 1908539328 + .long 1026126332 + .long 1871505664 + .long 1072720988 + .long 2784700894 + .long 1025922277 + .long 1630994432 + .long 1072737010 + .long 361107678 + .long 1022887244 + .long 2084558336 + .long 1072753462 + .long 2642784509 + .long 1072689083 + .long 1514442531 + .long 1072688953 + .long 333108933 + .long 1072688821 + .long 3392112024 + .long 1072688686 + .long 2099852862 + .long 1072688550 + .long 749609004 + .long 1072688412 + .long 3634632596 + .long 1072688271 + .long 2163248461 + .long 1072688129 + .long 628657846 + .long 1072687985 + .long 3324036511 + .long 1072687838 + .long 1657632815 + .long 1072687690 + .long 4217538760 + .long 1072687539 + .long 2411951597 + .long 1072687387 + .long 533944872 + .long 1072687233 + .long 2876566508 + .long 1072687076 + .long 847936891 + .long 1072686918 + .long 3036019913 + .long 1072686757 + .long 848884575 + .long 1072686595 + .long 2874443326 + .long 1072686430 + .long 520713666 + .long 1072686264 + .long 2375556481 + .long 1072686095 + .long 4141904948 + .long 1072685924 + .long 1522666382 + .long 1072685752 + .long 3105624104 + .long 1072685577 + .long 298666327 + .long 1072685401 + .long 1689524500 + .long 1072685222 + .long 2981002200 + .long 1072685041 + .long 4170844284 + .long 1072684858 + .long 961802263 + .long 1072684674 + .long 1941503454 + .long 1072684487 + .long 2812647170 + .long 1072684298 + .long 3572873869 + .long 1072684107 + .long 4219797823 + .long 1072683914 + .long 456039788 + .long 1072683720 + .long 869096151 + .long 1072683523 + .long 1161535119 + .long 1072683324 + .long 1330865866 + .long 1072683123 + .long 1374571204 + .long 1072682920 + .long 1290107538 + .long 1072682715 + .long 1074904836 + .long 1072682508 + .long 726366587 + .long 1072682299 + .long 241869763 + .long 1072682088 + .long 3913732079 + .long 1072681874 + .long 3149342765 + .long 1072681659 + .long 2240966306 + .long 1072681442 + .long 1185873216 + .long 1072681223 + .long 4276274591 + .long 1072681001 + .long 2919452883 + .long 1072680778 + .long 1407565635 + .long 1072680553 + .long 4032743551 + .long 1072680325 + .long 2202188565 + .long 1072680096 + .long 207977577 + .long 1072679865 + .long 2342160518 + .long 1072679631 + .long 11858423 + .long 1072679396 + .long 1804034453 + .long 1072679158 + .long 3420722787 + .long 1072678918 + .long 563930456 + .long 1072678677 + .long 1820539192 + .long 1072678433 + .long 2892501606 + .long 1072678187 + .long 3776710320 + .long 1072677939 + .long 175063337 + .long 1072677690 + .long 674333171 + .long 1072677438 + .long 976363026 + .long 1072677184 + .long 1077935934 + .long 1072676928 + .long 1921075490 + .long 1072676540 + .long 881493302 + .long 1072676016 + .long 3275752439 + .long 1072675483 + .long 486855588 + .long 1072674943 + .long 1077229111 + .long 1072674394 + .long 723950308 + .long 1072673837 + .long 3693582199 + .long 1072673271 + .long 1367335316 + .long 1072672698 + .long 2305837020 + .long 1072672116 + .long 2184358641 + .long 1072671526 + .long 972682840 + .long 1072670928 + .long 2935101762 + .long 1072670321 + .long 3745513263 + .long 1072669706 + .long 3372320886 + .long 1072669083 + .long 1783464620 + .long 1072668452 + .long 3241386215 + .long 1072667812 + .long 3418125284 + .long 1072667164 + .long 2280219148 + .long 1072666508 + .long 4088700758 + .long 1072665843 + .long 219227400 + .long 1072665171 + .long 3521816918 + .long 1072664489 + .long 1076205279 + .long 1072663800 + .long 1436484616 + .long 1072663102 + .long 271362610 + .long 1072662396 + .long 1838996688 + .long 1072661681 + .long 1807122518 + .long 1072660958 + .long 137953542 + .long 1072660227 + .long 1088178584 + .long 1072659487 + .long 324057537 + .long 1072658739 + .long 2101288076 + .long 1072657982 + .long 2085133974 + .long 1072657217 + .long 235324451 + .long 1072656444 + .long 806051592 + .long 1072655662 + .long 3756033140 + .long 1072654871 + .long 453542543 + .long 1072654073 + .long 3741177327 + .long 1072653265 + .long 691216109 + .long 1072652450 + .long 4145223372 + .long 1072651625 + .long 1174439091 + .long 1072650793 + .long 324416139 + .long 1072649952 + .long 1550246310 + .long 1072649102 + .long 511524674 + .long 1072648244 + .long 1457248482 + .long 1072647377 + .long 45944955 + .long 1072646502 + .long 525537397 + .long 1072645618 + .long 2848440188 + .long 1072644725 + .long 2671555633 + .long 1072643824 + .long 4241172637 + .long 1072642914 + .long 3213094278 + .long 1072641996 + .long 3832503688 + .long 1072641069 + .long 1754091534 + .long 1072640134 + .long 1221921804 + .long 1072639190 + .long 2184526489 + .long 1072638237 + .long 294902089 + .long 1072637276 + .long 4090375270 + .long 1072636305 + .long 632860906 + .long 1072635327 + .long 2753498702 + .long 1072634339 + .long 1808009252 + .long 1072633343 + .long 2036428672 + .long 1072632338 + .long 3383235626 + .long 1072631324 + .long 1497347484 + .long 1072630302 + .long 617018317 + .long 1072629271 + .long 684933058 + .long 1072628231 + .long 1643170798 + .long 1072627182 + .long 3011066360 + .long 1072625592 + .long 957158713 + .long 1072623442 + .long 1390907941 + .long 1072621256 + .long 3819155270 + .long 1072619034 + .long 3443571196 + .long 1072616777 + .long 4045412458 + .long 1072614484 + .long 805503923 + .long 1072612156 + .long 1778922015 + .long 1072609791 + .long 2125033665 + .long 1072607390 + .long 1287203863 + .long 1072604953 + .long 2992629568 + .long 1072602479 + .long 2367267127 + .long 1072599969 + .long 3115526047 + .long 1072597422 + .long 340219539 + .long 1072594839 + .long 2017215719 + .long 1072592218 + .long 3225443424 + .long 1072589560 + .long 3326565673 + .long 1072586865 + .long 1669811211 + .long 1072584133 + .long 1886735022 + .long 1072581363 + .long 3301071171 + .long 1072578555 + .long 928514283 + .long 1072575710 + .long 2656364059 + .long 1072572826 + .long 3473490507 + .long 1072569904 + .long 2649965606 + .long 1072566944 + .long 3736819052 + .long 1072563945 + .long 1680885175 + .long 1072560908 + .long 4413771 + .long 1072557832 + .long 2214869753 + .long 1072554716 + .long 3214725184 + .long 1072551561 + .long 2186079903 + .long 1072548367 + .long 2590372131 + .long 1072545133 + .long 3578146079 + .long 1072541859 + .long 4283712755 + .long 1072538545 + .long 3824834510 + .long 1072535191 + .long 1302400298 + .long 1072531797 + .long 95058636 + .long 1072528362 + .long 3563906063 + .long 1072524885 + .long 2167230730 + .long 1072521368 + .long 3524918334 + .long 1072517809 + .long 2353304918 + .long 1072514209 + .long 1939625839 + .long 1072510567 + .long 1256714581 + .long 1072506883 + .long 3552525848 + .long 1072503156 + .long 3464809522 + .long 1072499387 + .long 4200542593 + .long 1072495575 + .long 355609124 + .long 1072491721 + .long 3684139099 + .long 1072487822 + .long 148355918 + .long 1072483881 + .long 1457689242 + .long 1072479895 + .long 2118591596 + .long 1072475865 + .long 908848089 + .long 1072471791 + .long 877032689 + .long 1072467672 + .long 752012304 + .long 1072463508 + .long 3532301749 + .long 1072459298 + .long 3600563221 + .long 1072455043 + .long 3902857084 + .long 1072450742 + .long 3063101036 + .long 1072446395 + .long 3972344374 + .long 1072442001 + .long 903183549 + .long 1072437561 + .long 983892938 + .long 1072433073 + .long 2722858568 + .long 1072428537 + .long 302790515 + .long 1072423954 + .long 759811057 + .long 1072419322 + .long 2507809922 + .long 1072414641 + .long 2388408813 + .long 1072407528 + .long 2084492942 + .long 1072397870 + .long 2435703301 + .long 1072388010 + .long 1935433360 + .long 1072377945 + .long 2742047290 + .long 1072367671 + .long 2053284205 + .long 1072357185 + .long 657783367 + .long 1072346483 + .long 2893664841 + .long 1072335560 + .long 3718906405 + .long 1072324413 + .long 1547896303 + .long 1072313038 + .long 2494058440 + .long 1072301429 + .long 3133238742 + .long 1072289582 + .long 3327000086 + .long 1072277492 + .long 1860667274 + .long 1072265154 + .long 665340747 + .long 1072252562 + .long 443347841 + .long 1072239710 + .long 581282618 + .long 1072226592 + .long 3349780465 + .long 1072213201 + .long 914217606 + .long 1072199532 + .long 989797661 + .long 1072185576 + .long 945436416 + .long 1072171326 + .long 549291300 + .long 1072156774 + .long 1814636389 + .long 1072141911 + .long 239092858 + .long 1072126729 + .long 1794680724 + .long 1072111217 + .long 1241534678 + .long 1072095366 + .long 3366566214 + .long 1072079164 + .long 1244090828 + .long 1072062601 + .long 1708448120 + .long 1072045663 + .long 3544260650 + .long 1072028337 + .long 1402741403 + .long 1072010610 + .long 2551936888 + .long 1071992465 + .long 617669739 + .long 1071973887 + .long 794002186 + .long 1071954857 + .long 2021237693 + .long 1071935356 + .long 540450384 + .long 1071915364 + .long 1920555537 + .long 1071894857 + .long 2879585206 + .long 1071873811 + .long 3000237455 + .long 1071852199 + .long 3352974346 + .long 1071829991 + .long 569629937 + .long 1071807155 + .long 2077237208 + .long 1071783653 + .long 2284891805 + .long 1071759446 + .long 1226651784 + .long 1071734489 + .long 1102047405 + .long 1071708731 + .long 2009896384 + .long 1071682115 + .long 927419082 + .long 1071654577 + .long 85010366 + .long 1071607413 + .long 696431025 + .long 1071548180 + .long 2611410541 + .long 1071486585 + .long 2612593658 + .long 1071422396 + .long 3548155306 + .long 1071355336 + .long 3887997484 + .long 1071285073 + .long 244854763 + .long 1071211202 + .long 4214445648 + .long 1071133216 + .long 2303966727 + .long 1071050478 + .long 3991040013 + .long 1070962152 + .long 3126952278 + .long 1070867118 + .long 1817448378 + .long 1070763804 + .long 1793814864 + .long 1070649884 + .long 3507224072 + .long 1070447193 + .long 4027609105 + .long 1070148772 + .long 577507993 + .long 1069779414 + .long 2310232419 + .long 1068931829 + .long 4294967295 + .long 2147483647 + .long 0 + .long 0 + .long 0 + .long 4294950912 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .long 0 + .long 2147483584 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .type static_const_table,@object + .size static_const_table,6096 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_atan2.S b/libm/x86/e_atan2.S new file mode 100644 index 000000000..a6ad390e0 --- /dev/null +++ b/libm/x86/e_atan2.S @@ -0,0 +1,1222 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// +//1. The method is based on the relationship of atan2(Y,X) to atan(|Y/X|) +// as follows. +// / sign(Y) atan(|Y/X|) if X > 0 +// atan2(Y,X) = +// \ sign(Y)*pi - sign(Y)*atan(|Y/X|) if X < 0 +// +// Thus, atan2(Y,X) is of the form atan2(Y,X) = PI + sgn*atan(|Y/X|) +// where PI and sgn can be determined by the four possible combinations of +// of the pair (sign(X),sign(Y)). We concentrate on the numerical method +// for atan(|Y/X|). +// +//2. For |Y/X| < 2^(-64), atan(|Y/X|) ~=~ |Y/X|. Hence, atan2(Y,X) is Y/X +// if X > 0, and sign(Y)*pi otherwise. +//3. For |Y/X| >= 2^(65), atan(|Y/X|) ~=~ pi/2. Hence atan2(Y,X) is sign(Y)pi/2. +//4. For 2^(-64) <= |Y/X| < 2^(-5), atan(|Y/X|) is approximated by a polynomial +// of the form Z + Z*E*polynomial(E), where Z = |Y/X| and E = Z*Z. +//5. For |Y/X| > 2^(5), atan(|Y/X|) = pi/2 + atan(-|X/Y|), and atan(-|X/Y|) is +// calculated using the polynomial in 4 above. +//6. For 2^(-5) <= |Y/X| <= 2^(5), we employ a table lookup method. First, +// we obtain B = 2^k * 1.b1 b2 b3 b4 = 2^k * (1+k/16) that approximate +// |Y/X| to approximately 5 significant bits. Hence, atan(|Y/X|) is +// +// atan(|Y/X|) = atan(B) + atan(Z), where Z = (|Y|-B|X|)/(|X|+B|Y|). +// ~=~ tau + Z + Z*E*polynomial(E), where E = Z*Z. +// +// B has the range from 2^(-6)*(1+14/16) to 2^5 = 2^(5)*(1+0/16), totally +// 163 possible values. These values are calculated beforehand and stored +// in a table. The polynomial is the one used in 4. +// +// Special cases: +// atan2(+-0, +0) = +-0 +// atan2(+-0, -0) = +-pi +// atan2(+-0, x) = +-0, for x > 0, and +-pi, for x < 0 +// atan2(y, +-0) = +pi/2 for y > 0, and -pi/2 for y < 0 +// atan2(+-y, +INF) = +-0, for finite y > 0 +// atan2(+-y, -INF) = +-pi, for finite y > 0 +// atan2(+-INF, x) = +-pi/2, for finite x +// atan2(+-INF, +INF) = +-pi/4 +// atan2(+-INF, -INF) = +-3*pi/4 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin atan2 +ENTRY(atan2) +# parameter 1: 8 + %ebp +# parameter 2: 16 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 64(%esp) + call static_func + movl %eax, %ebx + movsd 136(%esp), %xmm1 + movsd 128(%esp), %xmm0 + pextrw $3, %xmm0, %eax + movq %xmm0, 8(%esp) + andl $32752, %eax + movq %xmm1, 16(%esp) + subl $14448, %eax + cmpl $3840, %eax + ja .L_2TAG_PACKET_0.0.2 + pextrw $3, %xmm1, %eax + andl $32752, %eax + subl $14448, %eax + cmpl $3840, %eax + ja .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + unpcklpd %xmm1, %xmm0 + xorpd %xmm5, %xmm5 + xorpd %xmm3, %xmm3 + movl $2048, %eax + pinsrw $3, %eax, %xmm5 + paddw %xmm1, %xmm5 + psrlq $29, %xmm5 + rcpss %xmm5, %xmm3 + xorpd %xmm4, %xmm4 + movl $14336, %ecx + pinsrw $3, %ecx, %xmm4 + psllq $29, %xmm3 + paddw %xmm4, %xmm3 + mulsd %xmm0, %xmm3 + xorpd %xmm2, %xmm2 + xorpd %xmm6, %xmm6 + xorpd %xmm7, %xmm7 + movl $32768, %eax + pinsrw $2, %eax, %xmm6 + movl $32767, %ecx + pinsrw $3, %ecx, %xmm7 + paddd %xmm6, %xmm3 + andpd %xmm7, %xmm3 + movapd %xmm3, %xmm5 + pextrw $3, %xmm3, %eax + movl $16448, %ecx + pinsrw $3, %ecx, %xmm2 + minsd %xmm2, %xmm3 + movmskpd %xmm0, %edx + psllq $1, %xmm0 + psrlq $1, %xmm0 + cmpsd $2, %xmm2, %xmm5 + psllq $1, %xmm1 + psrlq $1, %xmm1 + movapd %xmm1, %xmm6 + movapd %xmm1, %xmm7 + movapd %xmm0, %xmm2 + movl $0, %ecx + pinsrw $0, %ecx, %xmm6 + subsd %xmm6, %xmm7 + movapd %xmm0, %xmm4 + mulsd %xmm3, %xmm6 + mulsd %xmm3, %xmm4 + mulsd %xmm3, %xmm7 + andpd %xmm5, %xmm0 + subsd %xmm6, %xmm0 + andpd %xmm5, %xmm1 + addsd %xmm1, %xmm4 + subsd %xmm7, %xmm0 + andl $32752, %eax + subl $16286, %eax + cmpl $1121, %eax + ja .L_2TAG_PACKET_3.0.2 + divsd %xmm4, %xmm0 + pextrw $3, %xmm3, %ecx + movsd 2944(%ebx), %xmm2 + movsd 2960(%ebx), %xmm3 + pextrw $0, %xmm5, %eax + addl %edx, %edx + movapd 2688(%ebx,%edx,8), %xmm6 + movapd 2752(%ebx,%edx,8), %xmm1 + subl $16286, %ecx + notl %eax + andl $1, %eax + addl %eax, %ecx + addl %ecx, %ecx + movapd (%ebx,%ecx,8), %xmm5 + xorpd %xmm1, %xmm5 + addpd %xmm6, %xmm5 + movapd %xmm5, %xmm6 + unpckhpd %xmm5, %xmm5 + xorpd %xmm0, %xmm1 + movapd %xmm1, %xmm4 + mulsd %xmm0, %xmm0 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm3 + addsd %xmm6, %xmm1 + subsd %xmm1, %xmm6 + addsd %xmm4, %xmm6 + addsd 2952(%ebx), %xmm2 + mulsd %xmm0, %xmm3 + mulsd %xmm0, %xmm4 + addsd %xmm5, %xmm6 + mulsd %xmm4, %xmm2 + addsd 2968(%ebx), %xmm3 + mulsd %xmm3, %xmm2 + addsd %xmm6, %xmm2 + addsd %xmm2, %xmm1 + movsd %xmm1, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_3.0.2: + addl $942, %eax + cmpl $942, %eax + ja .L_2TAG_PACKET_5.0.2 + xorpd %xmm4, %xmm4 + movl $16368, %ecx + pinsrw $3, %ecx, %xmm4 + divsd %xmm1, %xmm4 + addl %edx, %edx + movapd 2752(%ebx,%edx,8), %xmm6 + unpcklpd %xmm3, %xmm3 + xorpd %xmm6, %xmm0 + xorpd %xmm6, %xmm2 + xorpd %xmm6, %xmm3 + movapd 2816(%ebx,%edx,8), %xmm7 + movsd 2944(%ebx), %xmm1 + movsd 2960(%ebx), %xmm5 + andpd 2880(%ebx,%edx,8), %xmm3 + mulsd %xmm4, %xmm2 + mulsd %xmm4, %xmm0 + movapd %xmm2, %xmm6 + mulsd %xmm2, %xmm2 + mulsd %xmm2, %xmm1 + addsd %xmm2, %xmm5 + mulsd %xmm2, %xmm6 + addsd 2952(%ebx), %xmm1 + mulsd %xmm2, %xmm5 + addsd %xmm0, %xmm7 + addpd %xmm3, %xmm7 + mulsd %xmm6, %xmm1 + addsd 2968(%ebx), %xmm5 + mulsd %xmm1, %xmm5 + addsd %xmm7, %xmm5 + unpckhpd %xmm7, %xmm7 + addsd %xmm7, %xmm5 + movsd %xmm5, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + movsd 16(%esp), %xmm1 + movsd 8(%esp), %xmm0 + pextrw $3, %xmm1, %eax + andl $32752, %eax + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl %eax, %ecx + jg .L_2TAG_PACKET_6.0.2 + pextrw $3, %xmm1, %ecx + cmpl $32767, %ecx + jg .L_2TAG_PACKET_7.0.2 + divsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_7.0.2: + andpd 2672(%ebx), %xmm0 + movsd 2640(%ebx), %xmm2 + xorpd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_6.0.2: + andpd 2672(%ebx), %xmm0 + movsd 2624(%ebx), %xmm2 + xorpd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_0.0.2: +.L_2TAG_PACKET_1.0.2: + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $32752, %ecx + je .L_2TAG_PACKET_8.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_9.0.2 + movsd 2992(%ebx), %xmm3 + movl $1024, %edx + movsd 2976(%ebx), %xmm4 + xorpd %xmm6, %xmm6 + movsd 3008(%ebx), %xmm7 + cmpl $0, %ecx + je .L_2TAG_PACKET_10.0.2 +.L_2TAG_PACKET_11.0.2: + cmpl $0, %eax + je .L_2TAG_PACKET_12.0.2 +.L_2TAG_PACKET_13.0.2: + addl %ecx, %edx + subl %eax, %edx + cmpl $2048, %edx + ja .L_2TAG_PACKET_5.0.2 + addl $15344, %edx + pinsrw $3, %edx, %xmm6 + andpd %xmm4, %xmm0 + andpd %xmm4, %xmm1 + orpd %xmm6, %xmm0 + orpd %xmm7, %xmm1 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_10.0.2: + subl $880, %edx + mulsd %xmm3, %xmm0 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $0, %ecx + je .L_2TAG_PACKET_14.0.2 + jmp .L_2TAG_PACKET_11.0.2 +.L_2TAG_PACKET_12.0.2: + addl $880, %edx + mulsd %xmm3, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_15.0.2 + jmp .L_2TAG_PACKET_13.0.2 +.L_2TAG_PACKET_8.0.2: + movd %xmm0, %edx + movapd %xmm0, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $1048575, %ecx + orl %edx, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_16.0.2 + psrlq $63, %xmm0 + psllq $63, %xmm0 + cmpl $32752, %eax + jae .L_2TAG_PACKET_17.0.2 + movapd 2624(%ebx), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 +.L_2TAG_PACKET_18.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_16.0.2: + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_17.0.2: + movd %xmm1, %eax + movapd %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + movl $-2147483648, %edx + andl %ecx, %edx + andl $1048575, %ecx + orl %eax, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_19.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_20.0.2 + movapd 2656(%ebx), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_19.0.2: + movapd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_20.0.2: + movapd 2656(%ebx), %xmm5 + movapd 2624(%ebx), %xmm6 + addpd %xmm6, %xmm5 + pshufd $238, %xmm5, %xmm6 + addpd %xmm6, %xmm5 + orpd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_9.0.2: + movd %xmm1, %eax + movapd %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + movl $-2147483648, %edx + andl %ecx, %edx + andl $1048575, %ecx + orl %eax, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_19.0.2 + psrlq $63, %xmm0 + psllq $63, %xmm0 + cmpl $0, %edx + jne .L_2TAG_PACKET_21.0.2 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_21.0.2: + movapd 2640(%ebx), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_14.0.2: + pextrw $3, %xmm1, %edx + andl $32768, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_22.0.2 + movapd 2640(%ebx), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + comisd %xmm0, %xmm1 + orpd %xmm5, %xmm0 + jne .L_2TAG_PACKET_23.0.2 +.L_2TAG_PACKET_24.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_23.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_22.0.2: + comisd %xmm0, %xmm1 + jne .L_2TAG_PACKET_23.0.2 + je .L_2TAG_PACKET_24.0.2 +.L_2TAG_PACKET_15.0.2: + movapd 2624(%ebx), %xmm5 + psrlq $63, %xmm0 + psllq $63, %xmm0 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) +.L_2TAG_PACKET_4.0.2: + movl 64(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(atan2) +# -- End atan2 + +# Start file scope ASM +.weak atan2l +.equ atan2l, atan2 +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 3390881280 + .long 1067318733 + .long 1411116779 + .long 1018950063 + .long 2985987840 + .long 1067384211 + .long 2088903695 + .long 1018086027 + .long 3148445184 + .long 1067449685 + .long 2044163806 + .long 1017271335 + .long 3667629184 + .long 1067515494 + .long 2353092775 + .long 1019967309 + .long 1546568832 + .long 1067580954 + .long 611991315 + .long 1017602584 + .long 3815996800 + .long 1067646404 + .long 466038598 + .long 1019686426 + .long 4050241920 + .long 1067711845 + .long 3265026328 + .long 1019626952 + .long 120454912 + .long 1067777277 + .long 1542207696 + .long 1020155608 + .long 2784639744 + .long 1067842697 + .long 3883834623 + .long 1018602870 + .long 1328010624 + .long 1067908107 + .long 1791097456 + .long 1019053126 + .long 2217794048 + .long 1067973505 + .long 551619938 + .long 1018494194 + .long 3333520000 + .long 1068038891 + .long 2390331823 + .long 1019033022 + .long 2557052032 + .long 1068104265 + .long 2423976108 + .long 1019728674 + .long 2067649536 + .long 1068169626 + .long 3757397745 + .long 1018672362 + .long 4047094784 + .long 1068234973 + .long 481613184 + .long 1019275104 + .long 2089853184 + .long 1068300307 + .long 1733914374 + .long 1020124677 + .long 2678003840 + .long 1068365626 + .long 1373600282 + .long 1013935474 + .long 3706496128 + .long 1068430930 + .long 1000610902 + .long 1019673285 + .long 3073179008 + .long 1068496219 + .long 1497143008 + .long 1019900342 + .long 2803716736 + .long 1068562846 + .long 1476677416 + .long 1019444094 + .long 3204984128 + .long 1068628077 + .long 1192335905 + .long 1018748628 + .long 831146624 + .long 1068693273 + .long 2733586224 + .long 1018823295 + .long 243029376 + .long 1068758431 + .long 950106081 + .long 1019046675 + .long 1735561920 + .long 1068823549 + .long 3546440856 + .long 1020104712 + .long 1339217792 + .long 1068888626 + .long 3028812387 + .long 1019818321 + .long 3706342144 + .long 1068953659 + .long 3814564029 + .long 1017763871 + .long 637726976 + .long 1069018648 + .long 3584007699 + .long 1017976868 + .long 1148779264 + .long 1069083589 + .long 2282532133 + .long 1019483954 + .long 1406131392 + .long 1069148481 + .long 1547359113 + .long 1019786342 + .long 1908875904 + .long 1069213322 + .long 1315508410 + .long 1020009473 + .long 3194947520 + .long 1069278110 + .long 3845393201 + .long 1015803761 + .long 1547487744 + .long 1069342844 + .long 3863107865 + .long 1019810104 + .long 1881061952 + .long 1069407521 + .long 4288343548 + .long 1019687581 + .long 563086336 + .long 1069472140 + .long 2582230241 + .long 1020099350 + .long 2594975552 + .long 1069536698 + .long 2306443764 + .long 1019667244 + .long 3438545024 + .long 1069606573 + .long 957455549 + .long 1015587735 + .long 4211357472 + .long 1069670906 + .long 2611778754 + .long 1017877214 + .long 3002835424 + .long 1069735101 + .long 235580458 + .long 1020211685 + .long 3905315424 + .long 1069799150 + .long 3630647617 + .long 1018736849 + .long 2849656576 + .long 1069863047 + .long 2412165062 + .long 1019693004 + .long 507429472 + .long 1069926785 + .long 1397750723 + .long 1018412717 + .long 2307470272 + .long 1069990356 + .long 1796470904 + .long 1019796181 + .long 1271814912 + .long 1070053755 + .long 189761565 + .long 1016149115 + .long 3800538144 + .long 1070116974 + .long 2524871582 + .long 1018263353 + .long 3916203552 + .long 1070180008 + .long 127848658 + .long 1017672664 + .long 457192032 + .long 1070242851 + .long 4020400938 + .long 1019823010 + .long 1385324704 + .long 1070305495 + .long 564511179 + .long 1016079094 + .long 2322869856 + .long 1070367935 + .long 2347103319 + .long 1018927760 + .long 3743438624 + .long 1070430165 + .long 877973862 + .long 1019638162 + .long 2392255552 + .long 1070492180 + .long 2432782267 + .long 1018872629 + .long 4180443328 + .long 1070553973 + .long 3102990015 + .long 1020093101 + .long 2547540832 + .long 1070636485 + .long 3877738253 + .long 1017300424 + .long 2735468912 + .long 1070697461 + .long 2446470256 + .long 1019235378 + .long 542633792 + .long 1070757943 + .long 583606328 + .long 1018624131 + .long 923265984 + .long 1070817911 + .long 1793926708 + .long 1019714161 + .long 918728448 + .long 1070877348 + .long 3726463586 + .long 1019433296 + .long 2572275008 + .long 1070936237 + .long 1845354238 + .long 1019459238 + .long 50974688 + .long 1070994564 + .long 983808064 + .long 1016685418 + .long 1105518320 + .long 1071052313 + .long 2357496692 + .long 1015139882 + .long 1264825328 + .long 1071109472 + .long 2244129354 + .long 1019046344 + .long 961157920 + .long 1071166029 + .long 3124185339 + .long 1018541776 + .long 1162701584 + .long 1071221973 + .long 1279780948 + .long 1019268918 + .long 3284935664 + .long 1071277294 + .long 2670033472 + .long 1019833744 + .long 497441888 + .long 1071331985 + .long 1032737410 + .long 1019795212 + .long 3377383904 + .long 1071386036 + .long 2356897182 + .long 1020205553 + .long 1126962000 + .long 1071439443 + .long 3723724586 + .long 1015212418 + .long 90291008 + .long 1071492199 + .long 4178672431 + .long 1020186971 + .long 190059536 + .long 1071595741 + .long 1763589807 + .long 1019162163 + .long 2497392840 + .long 1071670654 + .long 3036997041 + .long 1020204325 + .long 2616971944 + .long 1071719773 + .long 300151069 + .long 1017041957 + .long 2883518128 + .long 1071767563 + .long 2203981414 + .long 1019190108 + .long 1496354352 + .long 1071814030 + .long 332287966 + .long 1016846435 + .long 483276728 + .long 1071859184 + .long 653845024 + .long 1018830914 + .long 3097401072 + .long 1071903039 + .long 1514746408 + .long 1019278972 + .long 2737217248 + .long 1071945615 + .long 1358845067 + .long 1017268275 + .long 2072577560 + .long 1071986933 + .long 3041024735 + .long 1019929672 + .long 2266405656 + .long 1072027017 + .long 1271261130 + .long 1012925070 + .long 958652544 + .long 1072065894 + .long 2158017058 + .long 1019955372 + .long 3312993840 + .long 1072103591 + .long 765809169 + .long 1019114443 + .long 3177001304 + .long 1072140139 + .long 144180084 + .long 1019822186 + .long 3071642184 + .long 1072175568 + .long 4004602424 + .long 1019420740 + .long 4283953648 + .long 1072209909 + .long 1511950430 + .long 1020176966 + .long 1413754136 + .long 1072243195 + .long 856972295 + .long 1015129638 + .long 4073202944 + .long 1072306725 + .long 4068194804 + .long 1019714860 + .long 946117760 + .long 1072366415 + .long 694980733 + .long 1020150135 + .long 3980632032 + .long 1072422512 + .long 1313251280 + .long 1019948709 + .long 1468297112 + .long 1072475260 + .long 330111143 + .long 1019809198 + .long 3478063816 + .long 1072524887 + .long 2930067044 + .long 1017784081 + .long 1153979856 + .long 1072571613 + .long 2225786102 + .long 1017634481 + .long 2089828808 + .long 1072615641 + .long 474621367 + .long 1017043414 + .long 3531732632 + .long 1072657163 + .long 2276396220 + .long 1018757240 + .long 775214612 + .long 1072694803 + .long 3209744818 + .long 1019963015 + .long 662307284 + .long 1072713319 + .long 1381696763 + .long 1019763781 + .long 1192776652 + .long 1072730830 + .long 3017932994 + .long 1015179769 + .long 744202396 + .long 1072747407 + .long 2073854034 + .long 1019512292 + .long 8337908 + .long 1072763115 + .long 16004448 + .long 1019599514 + .long 3589868768 + .long 1072778013 + .long 1374369804 + .long 1018019237 + .long 121647320 + .long 1072792159 + .long 128481634 + .long 1018115438 + .long 2464923204 + .long 1072805601 + .long 1787331214 + .long 1016798022 + .long 4093304372 + .long 1072830562 + .long 3306868969 + .long 1019384078 + .long 1436891684 + .long 1072853231 + .long 676347266 + .long 1017302183 + .long 1104571840 + .long 1072873890 + .long 2870400285 + .long 1019938149 + .long 2037009832 + .long 1072892781 + .long 2956702105 + .long 1016472908 + .long 3139037960 + .long 1072910111 + .long 916057147 + .long 1018364335 + .long 1826698064 + .long 1072926058 + .long 2171961098 + .long 1019669816 + .long 1353941060 + .long 1072940774 + .long 1722928782 + .long 1019926215 + .long 1803191644 + .long 1072954391 + .long 1547878639 + .long 1020259262 + .long 1092591296 + .long 1072967024 + .long 3070107923 + .long 1018320401 + .long 2205372832 + .long 1072978772 + .long 787328196 + .long 1014621351 + .long 1291577100 + .long 1072989723 + .long 2964757301 + .long 1020242528 + .long 4234512804 + .long 1072999952 + .long 3136030038 + .long 1017522144 + .long 3248069132 + .long 1073009528 + .long 1506192355 + .long 1018050472 + .long 3932628500 + .long 1073018509 + .long 1045823554 + .long 1019946655 + .long 4195697848 + .long 1073026948 + .long 233443322 + .long 1018917447 + .long 2501811452 + .long 1073034892 + .long 901427976 + .long 1017333852 + .long 866379428 + .long 1073049455 + .long 2437443742 + .long 1019678792 + .long 1376865888 + .long 1073062480 + .long 3365790232 + .long 1014547152 + .long 3290094268 + .long 1073074195 + .long 3898947415 + .long 1018683566 + .long 354764884 + .long 1073084787 + .long 3854322404 + .long 1019662058 + .long 3332975496 + .long 1073094406 + .long 3171701655 + .long 1017830922 + .long 1141460088 + .long 1073103181 + .long 3946082701 + .long 1020032019 + .long 745761284 + .long 1073111216 + .long 1347210591 + .long 1019106121 + .long 1673304508 + .long 1073118600 + .long 1760606642 + .long 1017324577 + .long 983388240 + .long 1073125409 + .long 3740651204 + .long 1019514104 + .long 3895509100 + .long 1073131706 + .long 2409629983 + .long 1020069322 + .long 2128523668 + .long 1073137548 + .long 3045605368 + .long 1018579174 + .long 2075485692 + .long 1073142981 + .long 3720571789 + .long 1017557436 + .long 121855976 + .long 1073148047 + .long 2391744767 + .long 1020160645 + .long 4181733780 + .long 1073152780 + .long 995028816 + .long 1019681295 + .long 2887813280 + .long 1073157214 + .long 218733247 + .long 1020003509 + .long 2862180896 + .long 1073161375 + .long 2043806490 + .long 1018602288 + .long 3909375184 + .long 1073168973 + .long 1559903412 + .long 1020103444 + .long 3533966292 + .long 1073175738 + .long 734884149 + .long 1018462962 + .long 3815044608 + .long 1073181799 + .long 3630523428 + .long 1017250093 + .long 739639376 + .long 1073187261 + .long 4167476661 + .long 1020008277 + .long 1068309648 + .long 1073192207 + .long 2110061437 + .long 1019295858 + .long 2350566352 + .long 1073196707 + .long 582596516 + .long 1018568821 + .long 2529520024 + .long 1073200819 + .long 745552787 + .long 1019053165 + .long 1841667508 + .long 1073204591 + .long 3982568700 + .long 1016503327 + .long 2242261080 + .long 1073208063 + .long 3433582258 + .long 1016196763 + .long 715134328 + .long 1073211270 + .long 355901358 + .long 1020087916 + .long 2700735876 + .long 1073214240 + .long 3640957736 + .long 1019780205 + .long 141607580 + .long 1073217000 + .long 2488245051 + .long 1020262395 + .long 287934404 + .long 1073219570 + .long 2392691085 + .long 1019883292 + .long 2363373988 + .long 1073221969 + .long 4194561737 + .long 1019237447 + .long 3829340424 + .long 1073224214 + .long 429455526 + .long 1019490975 + .long 1988805928 + .long 1073226320 + .long 3029848706 + .long 1018104889 + .long 1647572320 + .long 1073230161 + .long 10289938 + .long 1017394880 + .long 3988000624 + .long 1073233576 + .long 1957559169 + .long 1019434816 + .long 4263843944 + .long 1073236633 + .long 204710264 + .long 1019908761 + .long 663197724 + .long 1073239386 + .long 1921757578 + .long 1019778948 + .long 3560800700 + .long 1073241876 + .long 3994348896 + .long 1019230192 + .long 2441785656 + .long 1073244141 + .long 871468611 + .long 1014800505 + .long 3277400272 + .long 1073246209 + .long 4092218139 + .long 1020040842 + .long 3951990120 + .long 1073248105 + .long 4276546478 + .long 1019763677 + .long 2737338540 + .long 1073249850 + .long 252776012 + .long 1018794951 + .long 1511361316 + .long 1073251461 + .long 3119653999 + .long 1018514803 + .long 3969162516 + .long 1073252952 + .long 1037069016 + .long 1016792900 + .long 413985240 + .long 1073254338 + .long 4110171432 + .long 1020001345 + .long 3681283576 + .long 1073255627 + .long 1463092818 + .long 1020260354 + .long 3146455488 + .long 1073256831 + .long 1031209123 + .long 1016554799 + .long 95214512 + .long 1073257958 + .long 1373808632 + .long 1019493031 + .long 4250240828 + .long 1073259013 + .long 3891047882 + .long 1020108730 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 1072243195 + .long 856972295 + .long 1015129638 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 3221823995 + .long 856972295 + .long 3164710438 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 3164710438 + .long 1413754136 + .long 3221823995 + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .long 2006262985 + .long 1069310863 + .long 2358449471 + .long 3217342131 + .long 3845454352 + .long 1069952297 + .long 2829679149 + .long 1073771565 + .long 4294967295 + .long 2148532223 + .long 0 + .long 0 + .long 0 + .long 1130364928 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .type static_const_table,@object + .size static_const_table,3024 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_cosh.S b/libm/x86/e_cosh.S new file mode 100644 index 000000000..694202870 --- /dev/null +++ b/libm/x86/e_cosh.S @@ -0,0 +1,1350 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// cosh(x)=(exp(x)+exp(-x))/2 +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^7=int(xH*L2EH*2^7), +// f=0.b1 b2 ... b7, k integer +// 2^f is approximated as Tp[f]+Dp[f], and 2^{-f} as Tn[f]+Dn[f] +// Tp stores higher 53 bits, Dp stores (2^f-Tp[f]) rounded to double precision +// +// e^|x|=2^{k+f}*2^r, r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-8}+2^{-14}, +// for |x| in [1/8,3*2^8) +// e^{-|x|}=2^{-k-f}*2^{-r} +// +// e^|x| is approximated as 2^k*Tp+2^k*Tp*c1*r(1+c2*r+..+c5*r^4)+2^k*Dp= +// =2^k*Tp+2^k*Tp*P15+2^k*Dp +// e^{-|x|} approximated as 2^{-k}*Tn-2^{-k}*Tn*c1*r(1-c2*r+..+c5*r^4) +// +// For |x| in [1/8, 3*2^7), cosh(x) is formed as +// RN(2^k*Tp+2^{-k}*Tn)+2^k*Tp*P15+2^{-k}*Tn*P`15+2^{-k}*TnL+2^{-k}*Dn+2^k*Dp +// +// For |x| in [3*2^7, 3*2^8), (e^|x|)/2 is returned, and +// the result is checked for overflow. +// +// For |x|<1/8, a Taylor polynomial expansion is used (degree 10) +// (error bound for polynomial expansion is below 0.501 ulp) +// +// Special cases: +// cosh(NaN) = quiet NaN, and raise invalid exception +// cosh(INF) = that INF +// cosh(0)=1 +// for finite argument, only cosh(0)=1 is exact +// For IEEE double +// cosh(x) overflows +// for x > 710.47586007394386342639336362481117248535156250 = MAXLOG+log(2) +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin cosh +ENTRY(cosh) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + movsd 4240(%ebx), %xmm3 + xorpd %xmm4, %xmm4 + movsd 4192(%ebx), %xmm1 + movsd 4200(%ebx), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd 4096(%ebx), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + andl $32767, %ecx + subl $16320, %ecx + cmpl $200, %ecx + jae .L_2TAG_PACKET_0.0.2 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + movapd %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + xorpd %xmm5, %xmm5 + subsd %xmm6, %xmm3 + movapd 4112(%ebx), %xmm4 + addsd %xmm1, %xmm2 + movapd 4128(%ebx), %xmm6 + subsd %xmm3, %xmm7 + movl $32704, %edx + pinsrw $3, %edx, %xmm5 + movapd 4144(%ebx), %xmm1 + addsd %xmm7, %xmm2 + movl $127, %edx + andl %eax, %edx + addl %edx, %edx + shrl $3, %eax + andl $65520, %eax + addl $16352, %eax + xorpd %xmm0, %xmm0 + cmpl $184, %ecx + jae .L_2TAG_PACKET_1.0.2 + pshufd $68, %xmm5, %xmm5 + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + psubw %xmm0, %xmm5 + mulpd (%ebx,%edx,8), %xmm0 + mulpd 2048(%ebx,%edx,8), %xmm5 + pshufd $68, %xmm2, %xmm3 + movapd 4160(%ebx), %xmm7 + pshufd $68, %xmm2, %xmm2 + mulpd %xmm3, %xmm3 + mulpd %xmm2, %xmm4 + mulpd %xmm2, %xmm6 + mulpd 4176(%ebx), %xmm2 + mulpd %xmm3, %xmm1 + mulpd %xmm3, %xmm7 + mulpd %xmm3, %xmm4 + mulpd %xmm3, %xmm1 + addpd %xmm7, %xmm6 + movapd %xmm0, %xmm7 + addpd %xmm1, %xmm4 + shufpd $0, %xmm5, %xmm7 + addpd %xmm5, %xmm0 + mulpd %xmm7, %xmm2 + addpd %xmm6, %xmm4 + subsd %xmm0, %xmm7 + mulpd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm5, %xmm7 + addpd %xmm2, %xmm4 + addsd %xmm6, %xmm7 + pshufd $238, %xmm4, %xmm2 + addsd %xmm7, %xmm2 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + addl $16320, %ecx + cmpl $16320, %ecx + ja .L_2TAG_PACKET_3.0.2 + cmpl $15952, %ecx + jae .L_2TAG_PACKET_4.0.2 + addsd %xmm2, %xmm6 + movsd 4248(%ebx), %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_1.0.2: + subl $16352, %eax + movl %eax, %ecx + andl $32752, %eax + shrl $1, %eax + andl $65520, %eax + subl %eax, %ecx + addl $16352, %eax + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + mulpd (%ebx,%edx,8), %xmm0 + pshufd $68, %xmm2, %xmm3 + movsd 4160(%ebx), %xmm7 + mulsd %xmm3, %xmm3 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm6 + mulsd 4176(%ebx), %xmm2 + mulsd %xmm3, %xmm1 + mulsd %xmm3, %xmm7 + mulsd %xmm3, %xmm4 + addl $16368, %ecx + pinsrw $3, %ecx, %xmm5 + mulsd %xmm3, %xmm1 + addsd %xmm7, %xmm6 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + addsd %xmm6, %xmm4 + mulsd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm6, %xmm4 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm5, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + movl $64, %edx + cmpl $32752, %eax + je .L_2TAG_PACKET_5.0.2 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_4.0.2: + movapd 4208(%ebx), %xmm1 + mulpd %xmm5, %xmm5 + movapd 4224(%ebx), %xmm2 + xorpd %xmm3, %xmm3 + movapd %xmm5, %xmm0 + mulpd %xmm5, %xmm1 + movsd 4248(%ebx), %xmm6 + mulpd %xmm5, %xmm5 + movl $16352, %eax + pinsrw $3, %eax, %xmm3 + addpd %xmm2, %xmm1 + mulpd %xmm5, %xmm1 + pshufd $238, %xmm1, %xmm2 + mulsd %xmm1, %xmm5 + mulsd %xmm3, %xmm0 + addsd %xmm5, %xmm2 + addsd %xmm2, %xmm0 + addsd %xmm6, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_3.0.2: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_6.0.2 + xorpd %xmm0, %xmm0 + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + mulsd %xmm0, %xmm0 + movl $64, %edx +.L_2TAG_PACKET_5.0.2: + movsd %xmm0, (%esp) + movsd 112(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_6.0.2: + mulsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_2.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_7.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(cosh) +# -- End cosh + +# Start file scope ASM +.weak coshl +.equ coshl, cosh +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 3706687593 + .long 1073526560 + .long 3521726940 + .long 1014301643 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .long 3607404736 + .long 1044146952 + .long 3607404736 + .long 3191630600 + .long 4277811695 + .long 1063661122 + .long 4277811695 + .long 3211144770 + .long 2140175755 + .long 1033864261 + .long 2140175755 + .long 1033864261 + .long 4289495988 + .long 1054113747 + .long 4289495988 + .long 1054113747 + .long 4277811695 + .long 1064709698 + .long 4277811695 + .long 3212193346 + .long 1610612736 + .long 1080497479 + .long 4166901572 + .long 1053077003 + .long 3078135644 + .long 1049787983 + .long 381774870 + .long 1062650220 + .long 436314137 + .long 1056571808 + .long 1431655765 + .long 1067799893 + .long 4160749568 + .long 2147483647 + .long 0 + .long 1072693248 + .type static_const_table,@object + .size static_const_table,4256 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_exp.S b/libm/x86/e_exp.S new file mode 100644 index 000000000..c4fbe4744 --- /dev/null +++ b/libm/x86/e_exp.S @@ -0,0 +1,577 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Description: +// Let K = 64 (table size). +// x x/log(2) n +// e = 2 = 2 * T[j] * (1 + P(y)) +// where +// x = m*log(2)/K + y, y in [-log(2)/K..log(2)/K] +// m = n*K + j, m,n,j - signed integer, j in [-K/2..K/2] +// j/K +// values of 2 are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]). +// +// P(y) is a minimax polynomial approximation of exp(x)-1 +// on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V). +// +// To avoid problems with arithmetic overflow and underflow, +// n n1 n2 +// value of 2 is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2] +// where BIAS is a value of exponent bias. +// +// Special cases: +// exp(NaN) = NaN +// exp(+INF) = +INF +// exp(-INF) = 0 +// exp(x) = 1 for subnormals +// for finite argument, only exp(0)=1 is exact +// For IEEE double +// if x > 709.782712893383973096 then exp(x) overflow +// if x < -745.133219101941108420 then exp(x) underflow +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin exp +ENTRY(exp) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 64(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + unpcklpd %xmm0, %xmm0 + movapd 64(%ebx), %xmm1 + movapd 48(%ebx), %xmm6 + movapd 80(%ebx), %xmm2 + movapd 96(%ebx), %xmm3 + pextrw $3, %xmm0, %eax + andl $32767, %eax + movl $16527, %edx + subl %eax, %edx + subl $15504, %eax + orl %eax, %edx + cmpl $-2147483648, %edx + jae .L_2TAG_PACKET_0.0.2 + mulpd %xmm0, %xmm1 + addpd %xmm6, %xmm1 + movapd %xmm1, %xmm7 + subpd %xmm6, %xmm1 + mulpd %xmm1, %xmm2 + movapd 128(%ebx), %xmm4 + mulpd %xmm1, %xmm3 + movapd 144(%ebx), %xmm5 + subpd %xmm2, %xmm0 + movd %xmm7, %eax + movl %eax, %ecx + andl $63, %ecx + shll $4, %ecx + sarl $6, %eax + movl %eax, %edx + movdqa 16(%ebx), %xmm6 + pand %xmm6, %xmm7 + movdqa 32(%ebx), %xmm6 + paddq %xmm6, %xmm7 + psllq $46, %xmm7 + subpd %xmm3, %xmm0 + movapd 160(%ebx,%ecx), %xmm2 + mulpd %xmm0, %xmm4 + movapd %xmm0, %xmm6 + movapd %xmm0, %xmm1 + mulpd %xmm6, %xmm6 + mulpd %xmm6, %xmm0 + addpd %xmm4, %xmm5 + mulsd %xmm6, %xmm0 + mulpd 112(%ebx), %xmm6 + addsd %xmm2, %xmm1 + unpckhpd %xmm2, %xmm2 + mulpd %xmm5, %xmm0 + addsd %xmm0, %xmm1 + orpd %xmm7, %xmm2 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + addsd %xmm6, %xmm0 + addl $894, %edx + cmpl $1916, %edx + ja .L_2TAG_PACKET_1.0.2 + mulsd %xmm2, %xmm0 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_1.0.2: + fstcw 24(%esp) + movzwl 24(%esp), %edx + orl $768, %edx + movw %dx, 28(%esp) + fldcw 28(%esp) + movl %eax, %edx + sarl $1, %eax + subl %eax, %edx + movdqa (%ebx), %xmm6 + pandn %xmm2, %xmm6 + addl $1023, %eax + movd %eax, %xmm3 + psllq $52, %xmm3 + orpd %xmm3, %xmm6 + addl $1023, %edx + movd %edx, %xmm4 + psllq $52, %xmm4 + movsd %xmm0, 8(%esp) + fldl 8(%esp) + movsd %xmm6, 16(%esp) + fldl 16(%esp) + fmul %st, %st(1) + faddp %st, %st(1) + movsd %xmm4, 8(%esp) + fldl 8(%esp) + fmulp %st, %st(1) + fstpl 8(%esp) + movsd 8(%esp), %xmm0 + fldcw 24(%esp) + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $32752, %ecx + jae .L_2TAG_PACKET_3.0.2 + cmpl $0, %ecx + je .L_2TAG_PACKET_4.0.2 + jmp .L_2TAG_PACKET_2.0.2 + cmpl $-2147483648, %ecx + jb .L_2TAG_PACKET_3.0.2 + cmpl $-1064950997, %ecx + jb .L_2TAG_PACKET_2.0.2 + ja .L_2TAG_PACKET_4.0.2 + movl 128(%esp), %edx + cmpl $-17155601, %edx + jb .L_2TAG_PACKET_2.0.2 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_3.0.2: + movl $14, %edx + jmp .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_4.0.2: + movl $15, %edx +.L_2TAG_PACKET_5.0.2: + movsd %xmm0, (%esp) + movsd 128(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_7.0.2: + cmpl $2146435072, %eax + jae .L_2TAG_PACKET_8.0.2 + movl 132(%esp), %eax + cmpl $-2147483648, %eax + jae .L_2TAG_PACKET_9.0.2 + movsd 1208(%ebx), %xmm0 + mulsd %xmm0, %xmm0 + movl $14, %edx + jmp .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_9.0.2: + movsd 1216(%ebx), %xmm0 + mulsd %xmm0, %xmm0 + movl $15, %edx + jmp .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_8.0.2: + movl 128(%esp), %edx + cmpl $2146435072, %eax + ja .L_2TAG_PACKET_10.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_10.0.2 + movl 132(%esp), %eax + cmpl $2146435072, %eax + jne .L_2TAG_PACKET_11.0.2 + movsd 1192(%ebx), %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_11.0.2: + movsd 1200(%ebx), %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_10.0.2: + movsd 128(%esp), %xmm0 + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + movl 132(%esp), %eax + andl $2147483647, %eax + cmpl $1083179008, %eax + jae .L_2TAG_PACKET_7.0.2 + movsd 128(%esp), %xmm0 + addsd 1184(%ebx), %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_2.0.2: + movsd %xmm0, 48(%esp) + fldl 48(%esp) +.L_2TAG_PACKET_6.0.2: + movl 64(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(exp) +# -- End exp + +# Start file scope ASM +.weak expl +.equ expl, exp +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 4293918720 + .long 0 + .long 4293918720 + .long 4294967232 + .long 0 + .long 4294967232 + .long 0 + .long 65472 + .long 0 + .long 65472 + .long 0 + .long 0 + .long 1127743488 + .long 0 + .long 1127743488 + .long 1697350398 + .long 1079448903 + .long 1697350398 + .long 1079448903 + .long 4277796864 + .long 1065758274 + .long 4277796864 + .long 1065758274 + .long 3164486458 + .long 1025308570 + .long 3164486458 + .long 1025308570 + .long 4294967294 + .long 1071644671 + .long 4294967294 + .long 1071644671 + .long 3811088480 + .long 1062650204 + .long 1432067621 + .long 1067799893 + .long 3230715663 + .long 1065423125 + .long 1431604129 + .long 1069897045 + .long 0 + .long 0 + .long 0 + .long 0 + .long 235107661 + .long 1018002367 + .long 1048019040 + .long 11418 + .long 896005651 + .long 1015861842 + .long 3541402996 + .long 22960 + .long 1642514529 + .long 1012987726 + .long 410360776 + .long 34629 + .long 1568897900 + .long 1016568486 + .long 1828292879 + .long 46424 + .long 1882168529 + .long 1010744893 + .long 852742562 + .long 58348 + .long 509852888 + .long 1017336174 + .long 3490863952 + .long 70401 + .long 653277307 + .long 1017431380 + .long 2930322911 + .long 82586 + .long 1649557430 + .long 1017729363 + .long 1014845818 + .long 94904 + .long 1058231231 + .long 1015777676 + .long 3949972341 + .long 107355 + .long 1044000607 + .long 1016786167 + .long 828946858 + .long 119943 + .long 1151779725 + .long 1015705409 + .long 2288159958 + .long 132667 + .long 3819481236 + .long 1016499965 + .long 1853186616 + .long 145530 + .long 2552227826 + .long 1015039787 + .long 1709341917 + .long 158533 + .long 1829350193 + .long 1015216097 + .long 4112506593 + .long 171677 + .long 1913391795 + .long 1015756674 + .long 2799960843 + .long 184965 + .long 1303423926 + .long 1015238005 + .long 171030293 + .long 198398 + .long 1574172746 + .long 1016061241 + .long 2992903935 + .long 211976 + .long 3424156969 + .long 1017196428 + .long 926591434 + .long 225703 + .long 1938513547 + .long 1017631273 + .long 887463926 + .long 239579 + .long 2804567149 + .long 1015390024 + .long 1276261410 + .long 253606 + .long 631083525 + .long 1017690182 + .long 569847337 + .long 267786 + .long 1623370770 + .long 1011049453 + .long 1617004845 + .long 282120 + .long 3667985273 + .long 1013894369 + .long 3049340112 + .long 296610 + .long 3145379760 + .long 1014403278 + .long 3577096743 + .long 311258 + .long 2603100681 + .long 1017152460 + .long 1990012070 + .long 326066 + .long 3249202951 + .long 1017448880 + .long 1453150081 + .long 341035 + .long 419288974 + .long 1016280325 + .long 917841882 + .long 356167 + .long 3793507337 + .long 1016095713 + .long 3712504873 + .long 371463 + .long 728023093 + .long 1016345318 + .long 363667784 + .long 386927 + .long 2582678538 + .long 1017123460 + .long 2956612996 + .long 402558 + .long 7592966 + .long 1016721543 + .long 2186617380 + .long 418360 + .long 228611441 + .long 1016696141 + .long 1719614412 + .long 434334 + .long 2261665670 + .long 1017457593 + .long 1013258798 + .long 450482 + .long 544148907 + .long 1017323666 + .long 3907805043 + .long 466805 + .long 2383914918 + .long 1017143586 + .long 1447192520 + .long 483307 + .long 1176412038 + .long 1017267372 + .long 1944781190 + .long 499988 + .long 2882956373 + .long 1013312481 + .long 919555682 + .long 516851 + .long 3154077648 + .long 1016528543 + .long 2571947538 + .long 533897 + .long 348651999 + .long 1016405780 + .long 2604962540 + .long 551129 + .long 3253791412 + .long 1015920431 + .long 1110089947 + .long 568549 + .long 1509121860 + .long 1014756995 + .long 2568320822 + .long 586158 + .long 2617649212 + .long 1017340090 + .long 2966275556 + .long 603959 + .long 553214634 + .long 1016457425 + .long 2682146383 + .long 621954 + .long 730975783 + .long 1014083580 + .long 2191782032 + .long 640145 + .long 1486499517 + .long 1016818996 + .long 2069751140 + .long 658534 + .long 2595788928 + .long 1016407932 + .long 2990417244 + .long 677123 + .long 1853053619 + .long 1015310724 + .long 1434058175 + .long 695915 + .long 2462790535 + .long 1015814775 + .long 2572866477 + .long 714911 + .long 3693944214 + .long 1017259110 + .long 3092190714 + .long 734114 + .long 2979333550 + .long 1017188654 + .long 4076559942 + .long 753526 + .long 174054861 + .long 1014300631 + .long 2420883922 + .long 773150 + .long 816778419 + .long 1014197934 + .long 3716502172 + .long 792987 + .long 3507050924 + .long 1015341199 + .long 777507147 + .long 813041 + .long 1821514088 + .long 1013410604 + .long 3706687593 + .long 833312 + .long 920623539 + .long 1016295433 + .long 1242007931 + .long 853805 + .long 2789017511 + .long 1014276997 + .long 3707479175 + .long 874520 + .long 3586233004 + .long 1015962192 + .long 64696965 + .long 895462 + .long 474650514 + .long 1016642419 + .long 863738718 + .long 916631 + .long 1614448851 + .long 1014281732 + .long 3884662774 + .long 938030 + .long 2450082086 + .long 1016164135 + .long 2728693977 + .long 959663 + .long 1101668360 + .long 1015989180 + .long 3999357479 + .long 981531 + .long 835814894 + .long 1015702697 + .long 1533953344 + .long 1003638 + .long 1301400989 + .long 1014466875 + .long 2174652632 + .long 1025985 + .long 0 + .long 1072693248 + .long 0 + .long 2146435072 + .long 0 + .long 0 + .long 4294967295 + .long 2146435071 + .long 0 + .long 1048576 + .type static_const_table,@object + .size static_const_table,1224 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_hypot.S b/libm/x86/e_hypot.S new file mode 100644 index 000000000..aa6ab64b8 --- /dev/null +++ b/libm/x86/e_hypot.S @@ -0,0 +1,221 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// X87 version: +// Use 80-bit FPU precision fmul, fsqrt to compute square and sqrt. +// +// SSE version: +// Swap x, y if |x|<|y| +// For x=2^k*x, get y=y*2^(-k) +// Get S ~ sqrt(x^2+y^2) (leading 1 + leading 25 mantissa bits) +// +// Get D = ( RN(x^2+y^2) - S^2 ) + ( x^2 - RN(x^2) ) + +// + ( y^2 - ((RN(x^2+y^2)-RN(x^2)) ) +// +// Result is 2^k*(S + Se), where Se = S*e +// S*e is approximated as (D/2S)*( 1 - (D/2S)^2*1.0/S ) +// +// Return 2^k*(S+Se) +// +// For |y/x|<2^(-64), return x +// +// For cases where maximum biased exponent is either greater than 7fdh or +// below 32, take a special path to check for special cases (0, NaN, Inf), +// possible overflow, and more accurate computation for denormal results +// +// Special cases: +// hypot(x,y), hypot(y,x), and hypot(x,-y) are equivalent +// hypot(x,+-0) is equivalent to fabs(x) +// hypot(x,y) = y if (x==NaN or x==INF) and y==INF +// hypot(x,y) = x if (x==NaN or x==INF) and y!=INF (even if y==NaN!) +// hypot(x,y) = y if (x!=NaN and x!=INF) and (y==NaN or y==INF) +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin hypot +ENTRY(hypot) +# parameter 1: 8 + %ebp +# parameter 2: 16 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $152, %esp + movl %ebx, 96(%esp) + call static_func + movl %eax, %ebx + movapd (%ebx), %xmm3 + movsd 160(%esp), %xmm0 + movsd 168(%esp), %xmm1 + andpd %xmm3, %xmm0 + andpd %xmm3, %xmm1 + pextrw $3, %xmm0, %eax + pextrw $3, %xmm1, %edx + cmpl $24528, %eax + ja .L_2TAG_PACKET_0.0.2 + cmpl $24528, %edx + ja .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + fldl 160(%esp) + fldl 168(%esp) + fxch %st(1) + fmul %st(0), %st + fxch %st(1) + nop + fmul %st(0), %st + faddp %st, %st(1) + fsqrt + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + cmpl $32752, %eax + movl %eax, %ecx + jae .L_2TAG_PACKET_3.0.2 + subl %edx, %ecx + cmpl $32752, %edx + jae .L_2TAG_PACKET_3.0.2 + addl $928, %ecx + addl %edx, %eax + cmpl $1856, %ecx + ja .L_2TAG_PACKET_4.0.2 + cmpl $49056, %eax + jb .L_2TAG_PACKET_1.0.2 + fldl 160(%esp) + fldl 168(%esp) + fxch %st(1) + fmul %st(0), %st + fxch %st(1) + nop + fmul %st(0), %st + faddp %st, %st(1) + fsqrt +.L_2TAG_PACKET_5.0.2: + fstl (%esp) + fstpt 16(%esp) + xorl %eax, %eax + movw 24(%esp), %ax + cmpl $17407, %eax + jae .L_2TAG_PACKET_6.0.2 + fldl (%esp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_4.0.2: + movsd %xmm0, 32(%esp) + movsd %xmm1, 40(%esp) + fldl 32(%esp) + faddl 40(%esp) + jmp .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_6.0.2: + movl $46, %edx +.L_2TAG_PACKET_8.0.2: + movsd 160(%esp), %xmm0 + movsd 168(%esp), %xmm1 + fldl (%esp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_3.0.2: + shufpd $0, %xmm1, %xmm0 + movdqa %xmm0, %xmm2 + movdqa 16(%ebx), %xmm3 + movsd %xmm0, 32(%esp) + movsd %xmm1, 40(%esp) + cmppd $3, %xmm0, %xmm2 + cmppd $0, %xmm0, %xmm3 + movmskpd %xmm2, %edx + movmskpd %xmm3, %eax + testl %edx, %edx + je .L_2TAG_PACKET_9.0.2 + fldl 32(%esp) + fmull 40(%esp) + testl $1, %eax + jne .L_2TAG_PACKET_10.0.2 + testl $2, %eax + jne .L_2TAG_PACKET_11.0.2 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_9.0.2: + fldl 32(%esp) + faddl 40(%esp) + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_10.0.2: + fstpl 40(%esp) + fldl 32(%esp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_11.0.2: + fstpl 32(%esp) + fldl 40(%esp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_2.0.2: +.L_2TAG_PACKET_7.0.2: + movl 96(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(hypot) +# -- End hypot + +# Start file scope ASM +.weak hypotl +.equ hypotl, hypot +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 4294967295 + .long 2147483647 + .long 4294967295 + .long 2147483647 + .long 0 + .long 2146435072 + .long 0 + .long 2146435072 + .type static_const_table,@object + .size static_const_table,32 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_log.S b/libm/x86/e_log.S new file mode 100644 index 000000000..b5df1eaa3 --- /dev/null +++ b/libm/x86/e_log.S @@ -0,0 +1,781 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpss instruction (B0) +// B = int((B0*2^7+0.5))/2^7 +// +// Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts) +// +// Result: k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6) and +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log(NaN) = quiet NaN, and raise invalid exception +// log(+INF) = that INF +// log(0) = -INF with divide-by-zero exception raised +// log(1) = +0 +// log(x) = NaN with invalid exception raised if x < -0, including -INF +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin log +ENTRY(log) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + xorpd %xmm3, %xmm3 + movl $30704, %edx + pinsrw $3, %edx, %xmm3 + movsd 112(%esp), %xmm0 + movapd %xmm0, %xmm1 + movl $32768, %ecx + movd %ecx, %xmm4 + movsd 2128(%ebx), %xmm5 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + psllq $5, %xmm0 + movl $16352, %ecx + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + paddd %xmm4, %xmm0 + orpd %xmm3, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm1, %xmm5 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm1 + mulpd %xmm0, %xmm5 + andl $32752, %eax + subl %ecx, %eax + cvtsi2sdl %eax, %xmm7 + mulsd %xmm0, %xmm1 + movsd 2064(%ebx), %xmm6 + movapd 2080(%ebx), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd (%ebx,%edx), %xmm0 + movapd 2096(%ebx), %xmm4 + addsd %xmm5, %xmm1 + movapd 2112(%ebx), %xmm2 + mulsd %xmm7, %xmm6 + pshufd $68, %xmm1, %xmm5 + mulsd 2072(%ebx), %xmm7 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm4 + mulpd %xmm5, %xmm5 + pshufd $228, %xmm0, %xmm6 + addsd %xmm1, %xmm0 + addpd %xmm2, %xmm4 + mulpd %xmm5, %xmm3 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm4 + pshufd $238, %xmm0, %xmm2 + addsd %xmm6, %xmm1 + mulsd %xmm5, %xmm5 + addsd %xmm2, %xmm7 + addpd %xmm3, %xmm4 + addsd %xmm7, %xmm1 + mulpd %xmm5, %xmm4 + addsd %xmm4, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + movsd 112(%esp), %xmm0 + movapd %xmm0, %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_3.0.2 + cmpl $16, %eax + jb .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_6.0.2: + ja .L_2TAG_PACKET_5.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_5.0.2 + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_3.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_6.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + movl $3, %edx + mulsd %xmm1, %xmm0 +.L_2TAG_PACKET_9.0.2: + movsd %xmm0, (%esp) + movsd 112(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_10.0.2 +.L_2TAG_PACKET_8.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $2, %edx + jmp .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_4.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_8.0.2 + xorpd %xmm1, %xmm1 + movl $18416, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + movapd %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + psllq $5, %xmm0 + movl $18416, %ecx + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_10.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(log) +# -- End log + +# Start file scope ASM +.weak logl +.equ logl, log +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 4277811200 + .long 1072049730 + .long 2479318832 + .long 1026487127 + .long 2854492160 + .long 1072033410 + .long 215631550 + .long 1025638968 + .long 1547061248 + .long 1072017216 + .long 2886781435 + .long 1026423395 + .long 649825280 + .long 1072001146 + .long 4281533405 + .long 1024038923 + .long 646346752 + .long 1071985198 + .long 1562735921 + .long 1023790276 + .long 2203734016 + .long 1071969370 + .long 1838397691 + .long 3173936209 + .long 1872169984 + .long 1071953661 + .long 3981202460 + .long 1022325013 + .long 669557760 + .long 1071938069 + .long 4182597802 + .long 3173174122 + .long 4076413952 + .long 1071922591 + .long 1209029111 + .long 3170736207 + .long 556125184 + .long 1071907228 + .long 821086028 + .long 3173437049 + .long 204914688 + .long 1071891976 + .long 2097025986 + .long 3171071798 + .long 387545088 + .long 1071876834 + .long 3142936996 + .long 3173092218 + .long 2912783360 + .long 1071861800 + .long 2502420140 + .long 1024505919 + .long 1144260608 + .long 1071846874 + .long 3315658140 + .long 3173469843 + .long 1471209472 + .long 1071832053 + .long 129621009 + .long 3172443877 + .long 1829683200 + .long 1071817336 + .long 3885467693 + .long 1025535275 + .long 288676864 + .long 1071802722 + .long 86139472 + .long 3171639793 + .long 3636378624 + .long 1071788208 + .long 1850238587 + .long 1024654342 + .long 1606817792 + .long 1071773795 + .long 3388899795 + .long 3173675586 + .long 1236164608 + .long 1071759480 + .long 3983599207 + .long 1020046558 + .long 1089616896 + .long 1071745262 + .long 4171974224 + .long 1024773198 + .long 4143093760 + .long 1071731139 + .long 2727587401 + .long 3173965207 + .long 600267776 + .long 1071717112 + .long 3147685042 + .long 3173353031 + .long 2249313280 + .long 1071703177 + .long 125835074 + .long 1025255832 + .long 3805303808 + .long 1071689334 + .long 2289991207 + .long 1025460331 + .long 87278592 + .long 1071675583 + .long 1106114045 + .long 1025933602 + .long 3195405312 + .long 1071661920 + .long 3885316576 + .long 3171206239 + .long 3853649920 + .long 1071648346 + .long 2977069852 + .long 3171236771 + .long 2944026624 + .long 1071625048 + .long 1008093493 + .long 1023444474 + .long 3993180160 + .long 1071598247 + .long 1862355595 + .long 1024642533 + .long 1454641152 + .long 1071571617 + .long 1514603089 + .long 1026500596 + .long 3286085632 + .long 1071545154 + .long 1400028424 + .long 3173279056 + .long 438773760 + .long 1071518858 + .long 120727864 + .long 3172148914 + .long 1212979200 + .long 1071492725 + .long 1625055594 + .long 3172901933 + .long 1189017600 + .long 1071466754 + .long 3920062376 + .long 1025727407 + .long 403064832 + .long 1071440943 + .long 1053271728 + .long 3171391427 + .long 3343210496 + .long 1071415289 + .long 3243395502 + .long 3173627613 + .long 1765777408 + .long 1071389792 + .long 2145968512 + .long 1026354304 + .long 461430784 + .long 1071364449 + .long 4094322285 + .long 1026021467 + .long 71706624 + .long 1071339258 + .long 763632021 + .long 1024496933 + .long 1380503552 + .long 1071314217 + .long 1383547992 + .long 3173088453 + .long 1015732224 + .long 1071289325 + .long 3198646877 + .long 1025390322 + .long 35977216 + .long 1071264580 + .long 2141026805 + .long 1025754693 + .long 3927306240 + .long 1071239979 + .long 282116272 + .long 3173394334 + .long 1125341184 + .long 1071215523 + .long 2768427504 + .long 3172279059 + .long 1666971648 + .long 1071191208 + .long 786837629 + .long 3172427445 + .long 2827694080 + .long 1071167033 + .long 3857122416 + .long 3173014241 + .long 2003683328 + .long 1071142997 + .long 859010954 + .long 1026545007 + .long 1004017664 + .long 1071119098 + .long 3356644970 + .long 3173458064 + .long 1753020416 + .long 1071095334 + .long 788338552 + .long 1026157693 + .long 1992718336 + .long 1071071704 + .long 1239179443 + .long 1026394889 + .long 3870234624 + .long 1071048206 + .long 2082614663 + .long 1024926053 + .long 1050437632 + .long 1071024840 + .long 660007840 + .long 1025548499 + .long 188395520 + .long 1071001603 + .long 3878792704 + .long 3173889571 + .long 3747176448 + .long 1070978493 + .long 144991708 + .long 3171552042 + .long 1405669376 + .long 1070955511 + .long 3999088879 + .long 1025486317 + .long 121151488 + .long 1070932654 + .long 2170865497 + .long 1026473584 + .long 2652319744 + .long 1070909920 + .long 453695652 + .long 3173916809 + .long 3262236672 + .long 1070887309 + .long 157800053 + .long 3173984206 + .long 601221120 + .long 1070864820 + .long 3968917661 + .long 1023992886 + .long 1999843328 + .long 1070842450 + .long 3053895004 + .long 1024998228 + .long 1992167424 + .long 1070820199 + .long 2968614856 + .long 1024552653 + .long 3788726272 + .long 1070798065 + .long 3542170808 + .long 3173573242 + .long 2094829568 + .long 1070776048 + .long 1246758132 + .long 1026202874 + .long 288675840 + .long 1070754146 + .long 3747328950 + .long 1026331585 + .long 1829681152 + .long 1070732357 + .long 3125197546 + .long 1024100318 + .long 1666869248 + .long 1070710681 + .long 1363656119 + .long 1026336493 + .long 3417110528 + .long 1070689116 + .long 4154791553 + .long 1026267853 + .long 2183653376 + .long 1070667662 + .long 1671819292 + .long 3173785870 + .long 1734434816 + .long 1070646317 + .long 373091049 + .long 1025972363 + .long 1615681536 + .long 1070625080 + .long 384650897 + .long 1022926043 + .long 1445382144 + .long 1070603950 + .long 344320330 + .long 3172397196 + .long 1823715328 + .long 1070569756 + .long 3389841200 + .long 1025231852 + .long 3839688704 + .long 1070527917 + .long 1706790417 + .long 3167363349 + .long 4293332992 + .long 1070486286 + .long 1614935088 + .long 1019351591 + .long 2966720512 + .long 1070444861 + .long 4145393717 + .long 3173711658 + .long 4066729984 + .long 1070403639 + .long 1974925028 + .long 3171437182 + .long 3337621504 + .long 1070362619 + .long 3314953170 + .long 3169971314 + .long 943448064 + .long 1070321799 + .long 1498682038 + .long 3173862340 + .long 1465634816 + .long 1070281176 + .long 1319952810 + .long 3171693965 + .long 1015734272 + .long 1070240749 + .long 1347821929 + .long 3173544515 + .long 118001664 + .long 1070200516 + .long 1751482746 + .long 1026134093 + .long 3707174912 + .long 1070160474 + .long 1486946159 + .long 1023930920 + .long 3946381312 + .long 1070120623 + .long 2867408081 + .long 3171368276 + .long 1699848192 + .long 1070080961 + .long 2590187139 + .long 1025379803 + .long 2235846656 + .long 1070041485 + .long 1888568069 + .long 3172754960 + .long 2339729408 + .long 1070002194 + .long 3852214753 + .long 3173323149 + .long 3196850176 + .long 1069963086 + .long 742141560 + .long 1025101707 + .long 1800683520 + .long 1069924160 + .long 3949500444 + .long 3172102179 + .long 3835801600 + .long 1069885413 + .long 3848895943 + .long 1025913832 + .long 2201202688 + .long 1069846845 + .long 1425913464 + .long 1025868665 + .long 2778279936 + .long 1069808453 + .long 2120889677 + .long 3173831128 + .long 2954203136 + .long 1069770236 + .long 592147081 + .long 1019621288 + .long 210141184 + .long 1069732193 + .long 3414275233 + .long 1023647084 + .long 709476352 + .long 1069694321 + .long 2413027164 + .long 1024462115 + .long 2116284416 + .long 1069656619 + .long 1144559924 + .long 1026336654 + .long 2183651328 + .long 1069619086 + .long 3459057650 + .long 1025634168 + .long 3047047168 + .long 1069581720 + .long 1879674924 + .long 3173508573 + .long 970711040 + .long 1069541521 + .long 1335954173 + .long 3173332182 + .long 2198478848 + .long 1069467449 + .long 2951103968 + .long 3173892200 + .long 1669611520 + .long 1069393703 + .long 531044147 + .long 1025149248 + .long 29114368 + .long 1069320280 + .long 3327831251 + .long 1025918673 + .long 2376949760 + .long 1069247176 + .long 737634533 + .long 3172176000 + .long 1085390848 + .long 1069174390 + .long 3108243400 + .long 3171828406 + .long 1566130176 + .long 1069101918 + .long 985483226 + .long 1025708380 + .long 792780800 + .long 1069029758 + .long 4184866295 + .long 1024426204 + .long 183156736 + .long 1068957907 + .long 2845699378 + .long 1022107277 + .long 1301782528 + .long 1068886362 + .long 1012735262 + .long 3173804294 + .long 1562411008 + .long 1068815121 + .long 2197086703 + .long 3170187813 + .long 2815549440 + .long 1068744181 + .long 2782613207 + .long 1026345054 + .long 2756124672 + .long 1068673540 + .long 2929486205 + .long 3173037800 + .long 3511050240 + .long 1068603195 + .long 1443733147 + .long 3173331549 + .long 3047047168 + .long 1068533144 + .long 1879674924 + .long 3172459997 + .long 3221667840 + .long 1068427825 + .long 1338588027 + .long 3171815742 + .long 3453861888 + .long 1068288883 + .long 1205348359 + .long 3172624626 + .long 3506110464 + .long 1068150514 + .long 893105198 + .long 1025571866 + .long 346013696 + .long 1068012714 + .long 3495569021 + .long 3172563349 + .long 4074029056 + .long 1067875476 + .long 3961106338 + .long 3171065595 + .long 3559784448 + .long 1067738798 + .long 1975385384 + .long 3173783155 + .long 797769728 + .long 1067602675 + .long 3760305787 + .long 1026047642 + .long 2313633792 + .long 1067467101 + .long 1559353171 + .long 1023480256 + .long 3960766464 + .long 1067213778 + .long 1067365107 + .long 1025865926 + .long 684261376 + .long 1066944805 + .long 844762164 + .long 3173687482 + .long 630718464 + .long 1066676905 + .long 2458269694 + .long 1024033081 + .long 1486061568 + .long 1066410070 + .long 115537874 + .long 3173243995 + .long 2743664640 + .long 1065886792 + .long 3665098304 + .long 3173471607 + .long 1971912704 + .long 1065357333 + .long 2577214440 + .long 3171993451 + .long 1498939392 + .long 1064306693 + .long 3409036923 + .long 1025599151 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 4277811200 + .long 1067855426 + .long 2479318832 + .long 1022292823 + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1030730101 + .long 3217380702 + .long 1431655765 + .long 1070945621 + .long 2576980378 + .long 1070176665 + .long 0 + .long 3219128320 + .long 0 + .long 4294959104 + .long 0 + .long 4294959104 + .type static_const_table,@object + .size static_const_table,2144 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_log10.S b/libm/x86/e_log10.S new file mode 100644 index 000000000..d34829cd4 --- /dev/null +++ b/libm/x86/e_log10.S @@ -0,0 +1,796 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpss instruction (B0) +// B = int((B0*LH*2^7+0.5))/2^7 +// LH is a short approximation for log10(e) +// +// Reduced argument: r=B*mx-LH (computed accurately in high and low parts) +// +// Result: k*log10(2) - log(B) + p(r) +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log10(0) = -INF with divide-by-zero exception raised +// log10(1) = +0 +// log10(x) = NaN with invalid exception raised if x < -0, including -INF +// log10(+INF) = +INF +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin log10 +ENTRY(log10) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movl $1054736384, %ecx + movd %ecx, %xmm7 + xorpd %xmm3, %xmm3 + movl $30704, %edx + pinsrw $3, %edx, %xmm3 + movsd 112(%esp), %xmm0 + movapd %xmm0, %xmm1 + movl $32768, %edx + movd %edx, %xmm4 + movapd 2128(%ebx), %xmm5 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $16352, %ecx + psllq $5, %xmm0 + movsd 2144(%ebx), %xmm2 + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $78, %xmm5, %xmm6 + psrlq $12, %xmm1 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + mulss %xmm7, %xmm0 + orpd %xmm3, %xmm1 + andpd %xmm1, %xmm5 + paddd %xmm4, %xmm0 + subsd %xmm5, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm6, %xmm0 + andl $32752, %eax + subl %ecx, %eax + cvtsi2sdl %eax, %xmm7 + mulpd %xmm0, %xmm5 + mulsd %xmm0, %xmm1 + movsd 2064(%ebx), %xmm6 + movapd 2080(%ebx), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd -1504(%ebx,%edx), %xmm0 + movapd 2096(%ebx), %xmm4 + addsd %xmm5, %xmm1 + movapd 2112(%ebx), %xmm2 + mulsd %xmm7, %xmm6 + pshufd $68, %xmm1, %xmm5 + mulsd 2072(%ebx), %xmm7 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm4 + movsd 2152(%ebx), %xmm6 + mulpd %xmm5, %xmm5 + addpd %xmm2, %xmm4 + mulpd %xmm5, %xmm3 + pshufd $228, %xmm0, %xmm2 + addsd %xmm1, %xmm0 + mulsd %xmm1, %xmm4 + subsd %xmm0, %xmm2 + mulsd %xmm1, %xmm6 + addsd %xmm2, %xmm1 + pshufd $238, %xmm0, %xmm2 + mulsd %xmm5, %xmm5 + addsd %xmm2, %xmm7 + addsd %xmm6, %xmm1 + addpd %xmm3, %xmm4 + addsd %xmm7, %xmm1 + mulpd %xmm5, %xmm4 + addsd %xmm4, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + movsd 112(%esp), %xmm0 + movapd %xmm0, %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_3.0.2 + cmpl $16, %eax + jb .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_6.0.2: + ja .L_2TAG_PACKET_5.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_5.0.2 + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_3.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_6.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + movl $9, %edx + mulsd %xmm1, %xmm0 +.L_2TAG_PACKET_9.0.2: + movsd %xmm0, (%esp) + movsd 112(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_10.0.2 +.L_2TAG_PACKET_8.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $8, %edx + jmp .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_4.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_8.0.2 + xorpd %xmm1, %xmm1 + movl $18416, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movapd %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psllq $5, %xmm0 + movsd 2144(%ebx), %xmm2 + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $78, %xmm5, %xmm6 + psrlq $12, %xmm1 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_10.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(log10) +# -- End log10 + +# Start file scope ASM +.weak log10l +.equ log10l, log10 +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 1352628224 + .long 1070810131 + .long 521319256 + .long 1025503025 + .long 2150839296 + .long 1070801944 + .long 3329350096 + .long 3170190015 + .long 1360613376 + .long 1070793794 + .long 2024059075 + .long 1024991594 + .long 1875350528 + .long 1070785680 + .long 2163882141 + .long 3163564137 + .long 2312126464 + .long 1070777602 + .long 1975711076 + .long 1023674196 + .long 1306336256 + .long 1070769560 + .long 3524899523 + .long 3170508164 + .long 1806334976 + .long 1070761553 + .long 4254777025 + .long 1025238739 + .long 2483193856 + .long 1070753581 + .long 3800671317 + .long 3172916830 + .long 2025350144 + .long 1070745644 + .long 1731514745 + .long 1025501083 + .long 3433285632 + .long 1070737741 + .long 2551857336 + .long 3169662186 + .long 1134317568 + .long 1070729873 + .long 3426297655 + .long 3172637891 + .long 2457152512 + .long 1070722038 + .long 63549415 + .long 1025415416 + .long 1861803008 + .long 1070714237 + .long 1910171636 + .long 1023977580 + .long 2414140416 + .long 1070706469 + .long 4002514337 + .long 3170841618 + .long 2900726784 + .long 1070698734 + .long 3268064083 + .long 1022459609 + .long 2123517952 + .long 1070691032 + .long 1767031218 + .long 1022448156 + .long 3194569728 + .long 1070683362 + .long 3402332618 + .long 3171671160 + .long 650882048 + .long 1070675725 + .long 4146023905 + .long 3171023038 + .long 1928988672 + .long 1070668119 + .long 1438617867 + .long 1016360491 + .long 1594908672 + .long 1070660545 + .long 971389377 + .long 1024763979 + .long 2818746368 + .long 1070653002 + .long 3555925341 + .long 3172434821 + .long 194584576 + .long 1070645491 + .long 943919215 + .long 3172950063 + .long 1215096832 + .long 1070638010 + .long 2283358588 + .long 1022335098 + .long 501519360 + .long 1070630560 + .long 480904295 + .long 1024437959 + .long 1278266368 + .long 1070623140 + .long 2755806066 + .long 3172342012 + .long 2487812096 + .long 1070615750 + .long 2489653202 + .long 3172481099 + .long 3085451264 + .long 1070608390 + .long 3759184951 + .long 3172574892 + .long 2039090176 + .long 1070601060 + .long 1361176676 + .long 3172355319 + .long 953057280 + .long 1070591423 + .long 1176587546 + .long 3166422018 + .long 3370524672 + .long 1070576879 + .long 3669570051 + .long 1025376630 + .long 749742080 + .long 1070562394 + .long 707700964 + .long 3170814058 + .long 4008353792 + .long 1070547965 + .long 3247327652 + .long 1022431400 + .long 2612455424 + .long 1070533594 + .long 2453457344 + .long 3172322969 + .long 3230920704 + .long 1070519279 + .long 1296781801 + .long 1025115335 + .long 3965253632 + .long 1070505020 + .long 373075289 + .long 1017938528 + .long 2593157120 + .long 1070476669 + .long 1068054086 + .long 1021616576 + .long 925962240 + .long 1070448537 + .long 850121213 + .long 1023928989 + .long 1732556800 + .long 1070420620 + .long 1305206740 + .long 3172665570 + .long 3815630848 + .long 1070392915 + .long 192642943 + .long 3172699907 + .long 2001758208 + .long 1070365420 + .long 2820786683 + .long 1024704867 + .long 16746496 + .long 1070338131 + .long 1399573110 + .long 3171372773 + .long 1886492672 + .long 1070311044 + .long 3621428075 + .long 3172974358 + .long 3338196992 + .long 1070284157 + .long 3793882035 + .long 1025124701 + .long 381769728 + .long 1070257468 + .long 3877933342 + .long 3170195490 + .long 2186491904 + .long 1070230972 + .long 1838687089 + .long 1017927292 + .long 1008330752 + .long 1070204668 + .long 2228321664 + .long 1025352196 + .long 2247065600 + .long 1070178552 + .long 1413900906 + .long 3170902532 + .long 2964070400 + .long 1070152622 + .long 3590454629 + .long 1025016844 + .long 465154048 + .long 1070126876 + .long 2079688550 + .long 3172268183 + .long 883615744 + .long 1070101310 + .long 989244452 + .long 3171900485 + .long 1993768960 + .long 1070075922 + .long 1124327841 + .long 3172964992 + .long 1794471936 + .long 1070050710 + .long 1140575046 + .long 1022673726 + .long 2797932544 + .long 1070025671 + .long 1894836933 + .long 3172544059 + .long 3433797632 + .long 1070000803 + .long 3221831166 + .long 3171921685 + .long 2338371584 + .long 1069976104 + .long 3732461053 + .long 3164513518 + .long 2644013056 + .long 1069951571 + .long 2519460462 + .long 3172548740 + .long 3383814144 + .long 1069927202 + .long 2290997657 + .long 1025499649 + .long 3781380096 + .long 1069902995 + .long 380479405 + .long 1025184136 + .long 3245785088 + .long 1069878948 + .long 1096398261 + .long 3169885192 + .long 1366712320 + .long 1069855059 + .long 2218343715 + .long 3170281628 + .long 2204717056 + .long 1069831325 + .long 2668334011 + .long 1025264524 + .long 1401772032 + .long 1069807745 + .long 4103993159 + .long 1022925721 + .long 3356721152 + .long 1069784316 + .long 3573790772 + .long 3172186527 + .long 4041148416 + .long 1069761037 + .long 4027691910 + .long 3171276990 + .long 3880151040 + .long 1069737906 + .long 4087118786 + .long 3172710734 + .long 3453364224 + .long 1069714921 + .long 99014299 + .long 3172003077 + .long 3491092480 + .long 1069692080 + .long 3801836701 + .long 3172989287 + .long 575580160 + .long 1069669382 + .long 1920406012 + .long 3170874125 + .long 22282240 + .long 1069646824 + .long 964193370 + .long 1019363159 + .long 2991429632 + .long 1069624404 + .long 3372589890 + .long 1023425053 + .long 2189645824 + .long 1069602122 + .long 2610503872 + .long 1023652442 + .long 3341467648 + .long 1069579975 + .long 1190292004 + .long 1022425665 + .long 3711293440 + .long 1069557962 + .long 1104795356 + .long 1023625829 + .long 1380401152 + .long 1069524644 + .long 1156998217 + .long 1025100499 + .long 765710336 + .long 1069481144 + .long 1736649113 + .long 1024999439 + .long 849412096 + .long 1069437902 + .long 2618178330 + .long 3170853629 + .long 1433104384 + .long 1069394915 + .long 43477267 + .long 3170378811 + .long 2548596736 + .long 1069352180 + .long 3967367063 + .long 1025246584 + .long 157577216 + .long 1069309695 + .long 100402533 + .long 3172825502 + .long 3326238720 + .long 1069267455 + .long 1176892909 + .long 1025464099 + .long 4155494400 + .long 1069225459 + .long 3713707617 + .long 3172630046 + .long 3545804800 + .long 1069183704 + .long 857007315 + .long 1024965777 + .long 2602520576 + .long 1069142187 + .long 2588758347 + .long 1022463131 + .long 2631196672 + .long 1069100905 + .long 2118424235 + .long 1022490989 + .long 838135808 + .long 1069059856 + .long 4117002727 + .long 1024874520 + .long 3210903552 + .long 1069019036 + .long 650070125 + .long 3172012966 + .long 3039211520 + .long 1068978444 + .long 438055812 + .long 1017743757 + .long 2385633280 + .long 1068938077 + .long 3011990369 + .long 3171312044 + .long 3491618816 + .long 1068897932 + .long 712813818 + .long 3172720400 + .long 183644160 + .long 1068858008 + .long 4287006742 + .long 1022379728 + .long 3639214080 + .long 1068818300 + .long 353762279 + .long 3172980009 + .long 3728416768 + .long 1068778808 + .long 1851367730 + .long 1025486574 + .long 3370094592 + .long 1068739529 + .long 4046594913 + .long 3172567047 + .long 1348407296 + .long 1068700461 + .long 143189675 + .long 1025397632 + .long 899403776 + .long 1068661601 + .long 3753687842 + .long 3170772772 + .long 1117708288 + .long 1068622947 + .long 1857340812 + .long 3170782678 + .long 1248276480 + .long 1068584497 + .long 1289858203 + .long 1025222289 + .long 683237376 + .long 1068546249 + .long 2356679608 + .long 3171629170 + .long 3253764096 + .long 1068508200 + .long 3267136556 + .long 1018554987 + .long 94478336 + .long 1068441756 + .long 1927868814 + .long 3169378180 + .long 3233144832 + .long 1068366445 + .long 2682188854 + .long 1023964004 + .long 2940297216 + .long 1068291522 + .long 275301289 + .long 1023944679 + .long 3677708288 + .long 1068216982 + .long 302658771 + .long 1024465567 + .long 1576968192 + .long 1068142822 + .long 3672035940 + .long 3172254610 + .long 1614069760 + .long 1068069037 + .long 480052905 + .long 3172692062 + .long 424435712 + .long 1067995624 + .long 2207869657 + .long 3170965436 + .long 3477782528 + .long 1067922578 + .long 2980661858 + .long 3164990018 + .long 3598401536 + .long 1067849897 + .long 1974393034 + .long 3171357083 + .long 2435235840 + .long 1067777577 + .long 1385289011 + .long 1024615823 + .long 1867333632 + .long 1067705614 + .long 3442236633 + .long 1025334384 + .long 3999301632 + .long 1067634004 + .long 3506472073 + .long 1025132546 + .long 2566971392 + .long 1067562745 + .long 1425757592 + .long 3172358463 + .long 112943104 + .long 1067491833 + .long 1693407156 + .long 3172426603 + .long 3079929856 + .long 1067392159 + .long 3999942455 + .long 1018549369 + .long 2443837440 + .long 1067251701 + .long 974534460 + .long 1023963412 + .long 359366656 + .long 1067111917 + .long 2204915018 + .long 1013514416 + .long 3564519424 + .long 1066972799 + .long 3977441659 + .long 3170879860 + .long 2011086848 + .long 1066834343 + .long 590145514 + .long 1025390011 + .long 3216982016 + .long 1066696541 + .long 3629120110 + .long 1024330313 + .long 2194128896 + .long 1066559388 + .long 2367098512 + .long 3172260338 + .long 2916220928 + .long 1066422877 + .long 2262431886 + .long 1021229446 + .long 2263941120 + .long 1066172214 + .long 3118507287 + .long 1021484970 + .long 3076292608 + .long 1065901726 + .long 1411737803 + .long 3172957147 + .long 1186136064 + .long 1065632488 + .long 3109349337 + .long 1025397383 + .long 3085303808 + .long 1065364487 + .long 584715031 + .long 3172596519 + .long 1821048832 + .long 1064842211 + .long 2182246895 + .long 3172536214 + .long 697368576 + .long 1064311094 + .long 3157561765 + .long 3172716357 + .long 894042112 + .long 1063260131 + .long 3237958154 + .long 3172587292 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1352628224 + .long 1066615827 + .long 521319256 + .long 1021308721 + .long 3248877870 + .long 1077250164 + .long 1691676429 + .long 3221787401 + .long 945132465 + .long 3223701783 + .long 3700831335 + .long 1073506818 + .long 2141010593 + .long 1075227551 + .long 3698831637 + .long 3220339442 + .long 4160749568 + .long 4294967295 + .long 0 + .long 4294959104 + .long 0 + .long 1071366144 + .long 3207479560 + .long 1062894188 + .type static_const_table,@object + .size static_const_table,2160 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_pow.S b/libm/x86/e_pow.S new file mode 100644 index 000000000..43e30d84b --- /dev/null +++ b/libm/x86/e_pow.S @@ -0,0 +1,4277 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// log2(x) calculation: +// +// Get B~1/mx based on the output of rcpps instruction (B0) +// B = int((B0*LH*2^9+0.5))/2^9 +// LH is a short approximation for log2(e) +// +// Reduced argument, scaled by LH: +// r=B*mx-LH (computed accurately in high and low parts) +// +// log2(x) result: k - log2(B) + p(r) +// p(r) is a degree 8 polynomial +// -log2(B) read from data table (high, low parts) +// log2(x) is formed from high and low parts +// For |x| in [1-1/32, 1+1/16), a slower but more accurate computation +// based om the same table design is performed. +// +// Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8, +// to filter out all potential OF/UF cases. +// exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5 +// polynomial +// +// Special cases: +// pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd +// integer < 0. +// pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and +// not an odd integer. +// pow(-0,y) = -0 for y an odd integer > 0. +// pow(-0,y) = +0 for y > 0 and not an odd integer. +// pow(-1,-INF) = 1. +// pow(+1,y) = 1 for any y, even a NaN. +// pow(x,-0) = 1 for any x, even a NaN. +// pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and +// finite non-integer y. +// pow(x,-INF) = +INF for |x|<1. +// pow(x,-INF) = +0 for |x|>1. +// pow(x,+INF) = +0 for |x|<1. +// pow(x,+INF) = +INF for |x|>1. +// pow(-INF,y) = -0 for y an odd integer < 0. +// pow(-INF,y) = +0 for y < 0 and not an odd integer. +// pow(-INF,y) = -INF for y an odd integer > 0. +// pow(-INF,y) = +INF for y > 0 and not an odd integer. +// pow(+INF,y) = +0 for y <0. +// pow(+INF,y) = +INF for y >0. +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin pow +ENTRY(pow) +# parameter 1: 8 + %ebp +# parameter 2: 16 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 64(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + movsd 136(%esp), %xmm1 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movl $1069088768, %ecx + movd %ecx, %xmm7 + movsd %xmm1, 16(%esp) + xorpd %xmm1, %xmm1 + movl $30704, %edx + pinsrw $3, %edx, %xmm1 + movsd %xmm0, 8(%esp) + movapd %xmm0, %xmm3 + movl $8192, %edx + movd %edx, %xmm4 + movapd 8240(%ebx), %xmm6 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + psllq $5, %xmm0 + movsd 8256(%ebx), %xmm2 + psrlq $34, %xmm0 + movl %eax, %edx + andl $32752, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + rcpss %xmm0, %xmm0 + psllq $12, %xmm3 + addl $16, %ecx + bsr %ecx, %ecx + psrlq $12, %xmm3 + movl %esi, 24(%esp) + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 + movl $0, %esi +.L_2TAG_PACKET_1.0.2: + mulss %xmm7, %xmm0 + movl $-1, %edx + subl $4, %ecx + shll %cl, %edx + movd %edx, %xmm5 + orpd %xmm1, %xmm3 + subl $16351, %eax + cmpl $1, %eax + jbe .L_2TAG_PACKET_2.0.2 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm3, %xmm5 +.L_2TAG_PACKET_3.0.2: + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + subl $1, %eax + sarl $4, %eax + cvtsi2sdl %eax, %xmm7 + mulpd %xmm0, %xmm5 +.L_2TAG_PACKET_4.0.2: + mulsd %xmm0, %xmm3 + movapd 8272(%ebx), %xmm1 + subsd %xmm2, %xmm5 + movapd 8288(%ebx), %xmm4 + movl %eax, %ecx + sarl $31, %eax + addl %eax, %ecx + xorl %ecx, %eax + addl $1, %eax + bsr %eax, %eax + unpcklpd %xmm3, %xmm5 + movapd 8304(%ebx), %xmm6 + addsd %xmm5, %xmm3 + andl $16760832, %edx + shrl $10, %edx + addpd -3616(%ebx,%edx), %xmm5 + movapd 8320(%ebx), %xmm0 + pshufd $68, %xmm3, %xmm2 + mulsd %xmm3, %xmm3 + mulpd %xmm2, %xmm1 + mulpd %xmm2, %xmm4 + addsd %xmm7, %xmm5 + mulsd %xmm3, %xmm2 + addpd %xmm1, %xmm6 + mulsd %xmm3, %xmm3 + addpd %xmm4, %xmm0 + movsd 16(%esp), %xmm1 + movzwl 22(%esp), %ecx + pshufd $238, %xmm5, %xmm7 + movsd 8368(%ebx), %xmm4 + mulpd %xmm2, %xmm6 + pshufd $68, %xmm3, %xmm3 + mulpd %xmm2, %xmm0 + shll $4, %eax + subl $15872, %eax + andl $32752, %ecx + addl %ecx, %eax + mulpd %xmm6, %xmm3 + cmpl $624, %eax + jae .L_2TAG_PACKET_5.0.2 + xorpd %xmm6, %xmm6 + movl $17080, %edx + pinsrw $3, %edx, %xmm6 + movapd %xmm1, %xmm2 + andpd %xmm1, %xmm4 + subsd %xmm4, %xmm1 + mulsd %xmm5, %xmm4 + addsd %xmm7, %xmm0 + mulsd %xmm5, %xmm1 + movapd %xmm6, %xmm7 + addsd %xmm4, %xmm6 + addpd %xmm0, %xmm3 + movd %xmm6, %edx + subsd %xmm7, %xmm6 + pshufd $238, %xmm3, %xmm0 + subsd %xmm6, %xmm4 + addsd %xmm3, %xmm0 + movl %edx, %ecx + andl $255, %edx + addl %edx, %edx + movapd 8384(%ebx,%edx,8), %xmm5 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + movapd 12480(%ebx), %xmm7 + movapd 12496(%ebx), %xmm3 + shll $12, %ecx + xorl %esi, %ecx + andl $-1048576, %ecx + movd %ecx, %xmm6 + addsd %xmm4, %xmm2 + movsd 12512(%ebx), %xmm1 + pshufd $68, %xmm2, %xmm0 + pshufd $68, %xmm2, %xmm4 + mulpd %xmm0, %xmm0 + movl 24(%esp), %esi + mulpd %xmm4, %xmm7 + pshufd $17, %xmm6, %xmm6 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm0 + paddd %xmm6, %xmm5 + addpd %xmm7, %xmm3 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm5, %xmm6 + mulpd %xmm3, %xmm0 + addsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm3 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm0 + addsd %xmm5, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_7.0.2: + movsd 128(%esp), %xmm0 + movsd 136(%esp), %xmm1 + mulsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_0.0.2: + addl $16, %eax + movl $32752, %edx + andl %eax, %edx + cmpl $32752, %edx + je .L_2TAG_PACKET_8.0.2 + testl $32768, %eax + jne .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_10.0.2: + movl 16(%esp), %ecx + xorl %edx, %edx + testl %ecx, %ecx + movl $1, %ecx + cmovne %ecx, %edx + orl 20(%esp), %edx + cmpl $1072693248, %edx + je .L_2TAG_PACKET_7.0.2 + movsd 8(%esp), %xmm0 + movsd 8(%esp), %xmm3 + movd %xmm3, %edx + psrlq $32, %xmm3 + movd %xmm3, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_11.0.2 + xorpd %xmm3, %xmm3 + movl $18416, %eax + pinsrw $3, %eax, %xmm3 + mulsd %xmm3, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movapd %xmm0, %xmm3 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psllq $5, %xmm0 + movsd 8256(%ebx), %xmm2 + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm3 + movapd 8240(%ebx), %xmm6 + psrlq $12, %xmm3 + mulss %xmm7, %xmm0 + movl $-1024, %edx + movd %edx, %xmm5 + orpd %xmm1, %xmm3 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm3, %xmm5 + movl $0, %esi + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + andl $32752, %eax + subl $18416, %eax + sarl $4, %eax + cvtsi2sdl %eax, %xmm7 + mulpd %xmm0, %xmm5 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_12.0.2: + movl 16(%esp), %ecx + xorl %edx, %edx + testl %ecx, %ecx + movl $1, %ecx + cmovne %ecx, %edx + orl 20(%esp), %edx + cmpl $1072693248, %edx + je .L_2TAG_PACKET_7.0.2 + movsd 8(%esp), %xmm0 + movsd 8(%esp), %xmm3 + movd %xmm3, %edx + psrlq $32, %xmm3 + movd %xmm3, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_11.0.2 + xorpd %xmm3, %xmm3 + movl $18416, %eax + pinsrw $3, %eax, %xmm3 + mulsd %xmm3, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movapd %xmm0, %xmm3 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psllq $5, %xmm0 + movsd 8256(%ebx), %xmm2 + psrlq $34, %xmm0 + rcpss %xmm0, %xmm0 + psllq $12, %xmm3 + movapd 8240(%ebx), %xmm6 + psrlq $12, %xmm3 + mulss %xmm7, %xmm0 + movl $-1024, %edx + movd %edx, %xmm5 + orpd %xmm1, %xmm3 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm3, %xmm5 + movl $-2147483648, %esi + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + andl $32752, %eax + subl $18416, %eax + sarl $4, %eax + cvtsi2sdl %eax, %xmm7 + mulpd %xmm0, %xmm5 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + cmpl $0, %eax + jl .L_2TAG_PACKET_13.0.2 + cmpl $736, %eax + jae .L_2TAG_PACKET_14.0.2 +.L_2TAG_PACKET_15.0.2: + addsd %xmm7, %xmm0 + movsd 12544(%ebx), %xmm2 + addpd %xmm0, %xmm3 + xorpd %xmm6, %xmm6 + movl $17080, %eax + pinsrw $3, %eax, %xmm6 + pshufd $238, %xmm3, %xmm0 + addsd %xmm3, %xmm0 + movapd %xmm5, %xmm3 + addsd %xmm0, %xmm5 + movapd %xmm2, %xmm4 + subsd %xmm5, %xmm3 + movapd %xmm5, %xmm7 + andpd %xmm2, %xmm5 + movapd %xmm1, %xmm2 + andpd %xmm1, %xmm4 + subsd %xmm5, %xmm7 + addsd %xmm3, %xmm0 + subsd %xmm4, %xmm1 + mulsd %xmm5, %xmm4 + addsd %xmm7, %xmm0 + mulsd %xmm0, %xmm2 + movapd %xmm6, %xmm7 + mulsd %xmm5, %xmm1 + addsd %xmm4, %xmm6 + movd %xmm6, %eax + subsd %xmm7, %xmm6 + addsd %xmm1, %xmm2 + movapd 12480(%ebx), %xmm7 + movapd 12496(%ebx), %xmm3 + subsd %xmm6, %xmm4 + pextrw $3, %xmm6, %edx + movl %eax, %ecx + andl $255, %eax + addl %eax, %eax + movapd 8384(%ebx,%eax,8), %xmm5 + addsd %xmm4, %xmm2 + sarl $8, %ecx + movl %ecx, %eax + sarl $1, %ecx + subl %ecx, %eax + shll $20, %ecx + xorl %esi, %ecx + movd %ecx, %xmm6 + movsd 12512(%ebx), %xmm1 + andl $32767, %edx + cmpl $16529, %edx + ja .L_2TAG_PACKET_14.0.2 + pshufd $68, %xmm2, %xmm0 + pshufd $68, %xmm2, %xmm4 + mulpd %xmm0, %xmm0 + mulpd %xmm4, %xmm7 + pshufd $17, %xmm6, %xmm6 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm0 + paddd %xmm6, %xmm5 + addpd %xmm7, %xmm3 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm5, %xmm6 + mulpd %xmm3, %xmm0 + addsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm3 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + shll $4, %eax + xorpd %xmm4, %xmm4 + addl $16368, %eax + pinsrw $3, %eax, %xmm4 + addsd %xmm1, %xmm0 + movl 24(%esp), %esi + addsd %xmm3, %xmm0 + movapd %xmm0, %xmm1 + addsd %xmm5, %xmm0 + mulsd %xmm4, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + je .L_2TAG_PACKET_16.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_18.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_8.0.2: + movsd 16(%esp), %xmm1 + movsd 8(%esp), %xmm0 + movapd %xmm0, %xmm2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + je .L_2TAG_PACKET_19.0.2 + addsd %xmm0, %xmm0 + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_20.0.2 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_20.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + movl $29, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_22.0.2: + movsd 16(%esp), %xmm0 + addpd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_19.0.2: + movd %xmm1, %eax + movapd %xmm1, %xmm2 + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_23.0.2 + pextrw $3, %xmm2, %eax + andl $32752, %eax + cmpl $32752, %eax + jne .L_2TAG_PACKET_24.0.2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + jne .L_2TAG_PACKET_22.0.2 +.L_2TAG_PACKET_24.0.2: + pextrw $3, %xmm0, %eax + testl $32768, %eax + jne .L_2TAG_PACKET_25.0.2 + testl $-2147483648, %ecx + jne .L_2TAG_PACKET_26.0.2 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_27.0.2: + movsd 16(%esp), %xmm1 + movd %xmm1, %eax + testl $1, %eax + jne .L_2TAG_PACKET_28.0.2 + testl $2, %eax + jne .L_2TAG_PACKET_29.0.2 + jmp .L_2TAG_PACKET_28.0.2 +.L_2TAG_PACKET_25.0.2: + shrl $20, %ecx + andl $2047, %ecx + cmpl $1075, %ecx + ja .L_2TAG_PACKET_28.0.2 + je .L_2TAG_PACKET_30.0.2 + cmpl $1074, %ecx + ja .L_2TAG_PACKET_27.0.2 + cmpl $1023, %ecx + jb .L_2TAG_PACKET_28.0.2 + movsd 16(%esp), %xmm1 + movl $17208, %eax + xorpd %xmm3, %xmm3 + pinsrw $3, %eax, %xmm3 + movapd %xmm3, %xmm4 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + jne .L_2TAG_PACKET_28.0.2 + movd %xmm3, %eax + andl $1, %eax + je .L_2TAG_PACKET_28.0.2 +.L_2TAG_PACKET_29.0.2: + movsd 16(%esp), %xmm1 + pextrw $3, %xmm1, %eax + andl $32768, %eax + je .L_2TAG_PACKET_18.0.2 + xorpd %xmm0, %xmm0 + movl $32768, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_28.0.2: + movsd 16(%esp), %xmm1 + pextrw $3, %xmm1, %eax + andl $32768, %eax + jne .L_2TAG_PACKET_26.0.2 +.L_2TAG_PACKET_31.0.2: + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_30.0.2: + movsd 16(%esp), %xmm1 + movd %xmm1, %eax + andl $1, %eax + je .L_2TAG_PACKET_28.0.2 + jmp .L_2TAG_PACKET_29.0.2 +.L_2TAG_PACKET_32.0.2: + movd %xmm1, %eax + psrlq $20, %xmm1 + movd %xmm1, %edx + orl %edx, %eax + je .L_2TAG_PACKET_33.0.2 + movsd 16(%esp), %xmm0 + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_33.0.2: + movsd 8(%esp), %xmm0 + pextrw $3, %xmm0, %eax + cmpl $49136, %eax + jne .L_2TAG_PACKET_34.0.2 + movd %xmm0, %ecx + psrlq $20, %xmm0 + movd %xmm0, %edx + orl %edx, %ecx + jne .L_2TAG_PACKET_34.0.2 + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_34.0.2: + movsd 16(%esp), %xmm1 + andl $32752, %eax + subl $16368, %eax + pextrw $3, %xmm1, %edx + xorpd %xmm0, %xmm0 + xorl %edx, %eax + andl $32768, %eax + jne .L_2TAG_PACKET_18.0.2 + movl $32752, %ecx + pinsrw $3, %ecx, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_35.0.2: + movd %xmm1, %eax + cmpl $17184, %edx + ja .L_2TAG_PACKET_36.0.2 + testl $1, %eax + jne .L_2TAG_PACKET_37.0.2 + testl $2, %eax + je .L_2TAG_PACKET_38.0.2 + jmp .L_2TAG_PACKET_39.0.2 +.L_2TAG_PACKET_36.0.2: + testl $1, %eax + je .L_2TAG_PACKET_38.0.2 + jmp .L_2TAG_PACKET_39.0.2 +.L_2TAG_PACKET_9.0.2: + movsd 8(%esp), %xmm2 + movd %xmm2, %eax + psrlq $31, %xmm2 + movd %xmm2, %ecx + orl %ecx, %eax + je .L_2TAG_PACKET_11.0.2 + movsd 16(%esp), %xmm1 + pextrw $3, %xmm1, %edx + movd %xmm1, %eax + movapd %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + addl %ecx, %ecx + orl %eax, %ecx + je .L_2TAG_PACKET_40.0.2 + andl $32752, %edx + cmpl $32752, %edx + je .L_2TAG_PACKET_32.0.2 + cmpl $17200, %edx + ja .L_2TAG_PACKET_38.0.2 + cmpl $17184, %edx + jae .L_2TAG_PACKET_35.0.2 + cmpl $16368, %edx + jb .L_2TAG_PACKET_37.0.2 + movl $17208, %eax + xorpd %xmm2, %xmm2 + pinsrw $3, %eax, %xmm2 + movapd %xmm2, %xmm4 + addsd %xmm1, %xmm2 + subsd %xmm2, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32767, %eax + jne .L_2TAG_PACKET_37.0.2 + movd %xmm2, %eax + andl $1, %eax + je .L_2TAG_PACKET_38.0.2 +.L_2TAG_PACKET_39.0.2: + xorpd %xmm1, %xmm1 + movl $30704, %edx + pinsrw $3, %edx, %xmm1 + movsd 8256(%ebx), %xmm2 + movsd 8(%esp), %xmm4 + pextrw $3, %xmm4, %eax + movl $8192, %edx + movd %edx, %xmm4 + andl $32767, %eax + subl $16, %eax + jl .L_2TAG_PACKET_12.0.2 + movl %eax, %edx + andl $32752, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + addl $16, %ecx + bsr %ecx, %ecx + movl $-2147483648, %esi + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_37.0.2: + xorpd %xmm1, %xmm1 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + xorpd %xmm0, %xmm0 + mulsd %xmm1, %xmm0 + movl $28, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_38.0.2: + xorpd %xmm1, %xmm1 + movl $30704, %edx + pinsrw $3, %edx, %xmm1 + movsd 8256(%ebx), %xmm2 + movsd 8(%esp), %xmm4 + pextrw $3, %xmm4, %eax + movl $8192, %edx + movd %edx, %xmm4 + andl $32767, %eax + subl $16, %eax + jl .L_2TAG_PACKET_10.0.2 + movl %eax, %edx + andl $32752, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + addl $16, %ecx + bsr %ecx, %ecx + movl $0, %esi + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_23.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_26.0.2: + xorpd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_13.0.2: + addl $384, %eax + cmpl $0, %eax + jl .L_2TAG_PACKET_41.0.2 + mulsd %xmm1, %xmm5 + addsd %xmm7, %xmm0 + shrl $31, %esi + addpd %xmm0, %xmm3 + pshufd $238, %xmm3, %xmm0 + addsd %xmm0, %xmm3 + movsd 12528(%ebx,%esi,8), %xmm4 + mulsd %xmm3, %xmm1 + xorpd %xmm0, %xmm0 + movl $16368, %eax + shll $15, %esi + orl %esi, %eax + pinsrw $3, %eax, %xmm0 + addsd %xmm1, %xmm5 + movl 24(%esp), %esi + mulsd %xmm4, %xmm5 + addsd %xmm5, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_41.0.2: + movl 24(%esp), %esi + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_40.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_42.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + movl $26, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_11.0.2: + movsd 16(%esp), %xmm1 + movapd %xmm1, %xmm2 + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $32752, %eax + jne .L_2TAG_PACKET_43.0.2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + jne .L_2TAG_PACKET_22.0.2 +.L_2TAG_PACKET_43.0.2: + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_42.0.2 + shrl $21, %edx + cmpl $1075, %edx + ja .L_2TAG_PACKET_44.0.2 + je .L_2TAG_PACKET_45.0.2 + cmpl $1023, %edx + jb .L_2TAG_PACKET_44.0.2 + movsd 16(%esp), %xmm1 + movl $17208, %eax + xorpd %xmm3, %xmm3 + pinsrw $3, %eax, %xmm3 + movapd %xmm3, %xmm4 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + jne .L_2TAG_PACKET_44.0.2 + movd %xmm3, %eax + andl $1, %eax + je .L_2TAG_PACKET_44.0.2 +.L_2TAG_PACKET_46.0.2: + movsd 8(%esp), %xmm0 + testl $-2147483648, %ecx + jne .L_2TAG_PACKET_47.0.2 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_45.0.2: + movsd 16(%esp), %xmm1 + movd %xmm1, %eax + testl $1, %eax + jne .L_2TAG_PACKET_46.0.2 +.L_2TAG_PACKET_44.0.2: + testl $-2147483648, %ecx + je .L_2TAG_PACKET_26.0.2 + xorpd %xmm0, %xmm0 +.L_2TAG_PACKET_47.0.2: + movl $16368, %eax + xorpd %xmm1, %xmm1 + pinsrw $3, %eax, %xmm1 + divsd %xmm0, %xmm1 + movapd %xmm1, %xmm0 + movl $27, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_14.0.2: + movsd 8(%esp), %xmm2 + movsd 16(%esp), %xmm6 + pextrw $3, %xmm2, %eax + pextrw $3, %xmm6, %edx + movl $32752, %ecx + andl %edx, %ecx + cmpl $32752, %ecx + je .L_2TAG_PACKET_48.0.2 + andl $32752, %eax + subl $16368, %eax + xorl %eax, %edx + testl $32768, %edx + jne .L_2TAG_PACKET_49.0.2 +.L_2TAG_PACKET_50.0.2: + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + shrl $16, %esi + orl %esi, %eax + pinsrw $3, %eax, %xmm1 + movl 24(%esp), %esi + mulsd %xmm1, %xmm0 +.L_2TAG_PACKET_17.0.2: + movl $24, %edx +.L_2TAG_PACKET_21.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_49.0.2: + movl $16, %eax + pinsrw $3, %eax, %xmm0 + mulsd %xmm0, %xmm0 + testl $-2147483648, %esi + je .L_2TAG_PACKET_51.0.2 + movsd 12560(%ebx), %xmm2 + xorpd %xmm2, %xmm0 +.L_2TAG_PACKET_51.0.2: + movl 24(%esp), %esi + movl $25, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_16.0.2: + pextrw $3, %xmm5, %ecx + pextrw $3, %xmm4, %edx + movl $-1, %eax + andl $32752, %ecx + subl $16368, %ecx + andl $32752, %edx + addl %ecx, %edx + movl $-31, %ecx + sarl $4, %edx + subl %edx, %ecx + jle .L_2TAG_PACKET_52.0.2 + cmpl $20, %ecx + ja .L_2TAG_PACKET_53.0.2 + shll %cl, %eax +.L_2TAG_PACKET_52.0.2: + movd %eax, %xmm0 + psllq $32, %xmm0 + andpd %xmm5, %xmm0 + subsd %xmm0, %xmm5 + addsd %xmm1, %xmm5 + mulsd %xmm4, %xmm0 + mulsd %xmm4, %xmm5 + addsd %xmm5, %xmm0 +.L_2TAG_PACKET_53.0.2: + movl $25, %edx + jmp .L_2TAG_PACKET_21.0.2 +.L_2TAG_PACKET_2.0.2: + movzwl 22(%esp), %ecx + movl $-2147483648, %edx + movd %edx, %xmm1 + xorpd %xmm7, %xmm7 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + paddq %xmm3, %xmm1 + andpd %xmm1, %xmm5 + andl $32752, %ecx + cmpl $16560, %ecx + jb .L_2TAG_PACKET_3.0.2 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + addl $16351, %eax + shrl $4, %eax + subl $1022, %eax + cvtsi2sdl %eax, %xmm7 + mulpd %xmm0, %xmm5 + movsd (%ebx), %xmm4 + mulsd %xmm0, %xmm3 + movsd (%ebx), %xmm6 + subsd %xmm2, %xmm5 + movsd 8(%ebx), %xmm1 + pshufd $68, %xmm3, %xmm2 + unpcklpd %xmm3, %xmm5 + addsd %xmm5, %xmm3 + movsd 8(%ebx), %xmm0 + andl $16760832, %edx + shrl $10, %edx + addpd -3616(%ebx,%edx), %xmm7 + mulsd %xmm5, %xmm4 + mulsd %xmm5, %xmm0 + mulsd %xmm2, %xmm6 + mulsd %xmm2, %xmm1 + movapd %xmm5, %xmm2 + mulsd %xmm5, %xmm4 + addsd %xmm0, %xmm5 + movapd %xmm7, %xmm0 + addsd %xmm3, %xmm2 + addsd %xmm5, %xmm7 + mulsd %xmm2, %xmm6 + subsd %xmm7, %xmm0 + movapd %xmm7, %xmm2 + addsd %xmm4, %xmm7 + addsd %xmm5, %xmm0 + subsd %xmm7, %xmm2 + addsd %xmm2, %xmm4 + pshufd $238, %xmm5, %xmm2 + movapd %xmm7, %xmm5 + addsd %xmm2, %xmm7 + addsd %xmm0, %xmm4 + movapd 8272(%ebx), %xmm0 + subsd %xmm7, %xmm5 + addsd %xmm4, %xmm6 + movapd %xmm7, %xmm4 + addsd %xmm2, %xmm5 + addsd %xmm1, %xmm7 + movapd 8336(%ebx), %xmm2 + subsd %xmm7, %xmm4 + addsd %xmm5, %xmm6 + addsd %xmm1, %xmm4 + pshufd $238, %xmm7, %xmm5 + movapd %xmm7, %xmm1 + addsd %xmm5, %xmm7 + subsd %xmm7, %xmm1 + addsd %xmm5, %xmm1 + movapd 8352(%ebx), %xmm5 + pshufd $68, %xmm3, %xmm3 + addsd %xmm4, %xmm6 + addsd %xmm1, %xmm6 + movapd 8304(%ebx), %xmm1 + mulpd %xmm3, %xmm0 + mulpd %xmm3, %xmm2 + pshufd $68, %xmm3, %xmm4 + mulpd %xmm3, %xmm3 + addpd %xmm1, %xmm0 + addpd %xmm2, %xmm5 + mulsd %xmm3, %xmm4 + movsd 16(%ebx), %xmm2 + mulpd %xmm3, %xmm3 + movsd 16(%esp), %xmm1 + movzwl 22(%esp), %ecx + mulpd %xmm4, %xmm0 + pextrw $3, %xmm7, %eax + mulpd %xmm4, %xmm5 + mulpd %xmm3, %xmm0 + movsd 8376(%ebx), %xmm4 + andpd %xmm7, %xmm2 + addsd %xmm6, %xmm5 + subsd %xmm2, %xmm7 + addpd %xmm0, %xmm5 + andl $32752, %eax + subl $16368, %eax + andl $32752, %ecx + cmpl $32752, %ecx + je .L_2TAG_PACKET_48.0.2 + addl %eax, %ecx + cmpl $16576, %ecx + jae .L_2TAG_PACKET_54.0.2 + pshufd $238, %xmm5, %xmm0 + andpd %xmm1, %xmm4 + movapd %xmm1, %xmm3 + addsd %xmm0, %xmm5 + subsd %xmm4, %xmm1 + xorpd %xmm6, %xmm6 + movl $17080, %edx + pinsrw $3, %edx, %xmm6 + addsd %xmm5, %xmm7 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm1 + movapd %xmm6, %xmm5 + mulsd %xmm7, %xmm3 + addsd %xmm4, %xmm6 + addsd %xmm3, %xmm1 + movapd 12480(%ebx), %xmm7 + movd %xmm6, %edx + subsd %xmm5, %xmm6 + movapd 12496(%ebx), %xmm3 + movsd 12512(%ebx), %xmm2 + subsd %xmm6, %xmm4 + movl %edx, %ecx + andl $255, %edx + addl %edx, %edx + movapd 8384(%ebx,%edx,8), %xmm5 + addsd %xmm1, %xmm4 + pextrw $3, %xmm6, %edx + shrl $8, %ecx + movl %ecx, %eax + shrl $1, %ecx + subl %ecx, %eax + shll $20, %ecx + movd %ecx, %xmm6 + pshufd $68, %xmm4, %xmm0 + pshufd $68, %xmm4, %xmm1 + mulpd %xmm0, %xmm0 + mulpd %xmm1, %xmm7 + pshufd $17, %xmm6, %xmm6 + mulsd %xmm4, %xmm2 + andl $32767, %edx + cmpl $16529, %edx + ja .L_2TAG_PACKET_14.0.2 + mulsd %xmm0, %xmm0 + paddd %xmm6, %xmm5 + addpd %xmm7, %xmm3 + mulsd %xmm5, %xmm2 + pshufd $238, %xmm5, %xmm6 + mulpd %xmm3, %xmm0 + addsd %xmm6, %xmm2 + pshufd $238, %xmm0, %xmm3 + addl $1023, %eax + shll $20, %eax + orl %esi, %eax + movd %eax, %xmm4 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + addsd %xmm2, %xmm0 + psllq $32, %xmm4 + addsd %xmm3, %xmm0 + movapd %xmm0, %xmm1 + addsd %xmm5, %xmm0 + movl 24(%esp), %esi + mulsd %xmm4, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + je .L_2TAG_PACKET_16.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_55.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_48.0.2: + movl 24(%esp), %esi +.L_2TAG_PACKET_56.0.2: + movsd 8(%esp), %xmm0 + movsd 16(%esp), %xmm1 + addsd %xmm1, %xmm1 + xorpd %xmm2, %xmm2 + movl $49136, %eax + pinsrw $3, %eax, %xmm2 + addsd %xmm0, %xmm2 + pextrw $3, %xmm2, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_18.0.2 + movd %xmm1, %edx + movapd %xmm1, %xmm3 + psrlq $20, %xmm3 + movd %xmm3, %ecx + orl %edx, %ecx + je .L_2TAG_PACKET_57.0.2 + addsd %xmm1, %xmm1 + movapd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_57.0.2: + pextrw $3, %xmm0, %eax + andl $32752, %eax + pextrw $3, %xmm1, %edx + xorpd %xmm0, %xmm0 + subl $16368, %eax + xorl %edx, %eax + testl $32768, %eax + jne .L_2TAG_PACKET_18.0.2 + movl $32752, %edx + pinsrw $3, %edx, %xmm0 + jmp .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_54.0.2: + pextrw $3, %xmm1, %eax + pextrw $3, %xmm2, %ecx + xorl %ecx, %eax + testl $32768, %eax + je .L_2TAG_PACKET_50.0.2 + jmp .L_2TAG_PACKET_49.0.2 +.L_2TAG_PACKET_6.0.2: + movl 64(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(pow) +# -- End pow + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 3218479616 + .long 0 + .long 3210587105 + .long 4160749568 + .long 4294967295 + .long 0 + .long 4294965248 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 536870912 + .long 1072689162 + .long 2523013013 + .long 1046157398 + .long 3758096384 + .long 1072685081 + .long 3851513758 + .long 3190968952 + .long 0 + .long 1072681007 + .long 2241466466 + .long 1046044599 + .long 3221225472 + .long 1072676937 + .long 2990928271 + .long 3193084984 + .long 3758096384 + .long 1072672873 + .long 2905112743 + .long 3192918576 + .long 1610612736 + .long 1072668815 + .long 3370591264 + .long 1046051793 + .long 2147483648 + .long 1072664762 + .long 3272361216 + .long 3193793653 + .long 3758096384 + .long 1072660714 + .long 46546755 + .long 1043206936 + .long 3221225472 + .long 1072656672 + .long 3017067724 + .long 3192177962 + .long 0 + .long 1072652636 + .long 3688436631 + .long 3192814956 + .long 2684354560 + .long 1072648604 + .long 1707461992 + .long 3193056712 + .long 2684354560 + .long 1072644578 + .long 1188114540 + .long 3193603086 + .long 3758096384 + .long 1072640557 + .long 3533180564 + .long 1045459375 + .long 2684354560 + .long 1072636542 + .long 2000337630 + .long 3193475557 + .long 2684354560 + .long 1072632532 + .long 3698062443 + .long 3193752766 + .long 3758096384 + .long 1072628527 + .long 3161606138 + .long 3190532995 + .long 2147483648 + .long 1072624528 + .long 3165265478 + .long 3193158459 + .long 1610612736 + .long 1072620534 + .long 1600940077 + .long 3193226777 + .long 2147483648 + .long 1072616545 + .long 1363272552 + .long 3192614278 + .long 3758096384 + .long 1072612561 + .long 3966209910 + .long 3191249654 + .long 2147483648 + .long 1072608583 + .long 1093672789 + .long 3190637330 + .long 1610612736 + .long 1072604610 + .long 1735239357 + .long 3192753616 + .long 1610612736 + .long 1072600642 + .long 1470665156 + .long 1045559697 + .long 2684354560 + .long 1072596679 + .long 3840624926 + .long 1045928953 + .long 536870912 + .long 1072592722 + .long 4259072556 + .long 3191035622 + .long 3221225472 + .long 1072588769 + .long 3613088753 + .long 3192165681 + .long 2147483648 + .long 1072584822 + .long 3175234446 + .long 1039486948 + .long 1610612736 + .long 1072580880 + .long 856576441 + .long 1045702812 + .long 2147483648 + .long 1072576943 + .long 2253498719 + .long 3193285334 + .long 2684354560 + .long 1072573011 + .long 1587070728 + .long 3190801577 + .long 3758096384 + .long 1072569084 + .long 159986317 + .long 1042519436 + .long 1073741824 + .long 1072565163 + .long 3999541949 + .long 3192020440 + .long 2684354560 + .long 1072561246 + .long 3281310262 + .long 1045586786 + .long 536870912 + .long 1072557335 + .long 3775179406 + .long 1045226055 + .long 3221225472 + .long 1072553428 + .long 643472356 + .long 3193681786 + .long 1073741824 + .long 1072549527 + .long 248169775 + .long 1045068977 + .long 3758096384 + .long 1072545630 + .long 307016632 + .long 1042640932 + .long 2147483648 + .long 1072541739 + .long 3872718526 + .long 3189781486 + .long 536870912 + .long 1072537853 + .long 969711630 + .long 3191724732 + .long 3221225472 + .long 1072533971 + .long 4018820394 + .long 3193189264 + .long 1073741824 + .long 1072530095 + .long 3102233092 + .long 1045510224 + .long 3758096384 + .long 1072526223 + .long 1029307912 + .long 3193812776 + .long 1073741824 + .long 1072522357 + .long 984083153 + .long 1045987403 + .long 3221225472 + .long 1072518495 + .long 4171455401 + .long 3193084080 + .long 0 + .long 1072514639 + .long 2592660757 + .long 1046121691 + .long 1073741824 + .long 1072510787 + .long 2964365712 + .long 1046054453 + .long 2147483648 + .long 1072506940 + .long 3792777877 + .long 3193704729 + .long 2147483648 + .long 1072503098 + .long 2948536104 + .long 3192467100 + .long 1610612736 + .long 1072499261 + .long 3836005619 + .long 1041873166 + .long 536870912 + .long 1072495429 + .long 3124543160 + .long 1044409168 + .long 3221225472 + .long 1072491601 + .long 286227933 + .long 1041065990 + .long 1073741824 + .long 1072487779 + .long 2111296776 + .long 3193604419 + .long 2147483648 + .long 1072483961 + .long 2606822001 + .long 3192940394 + .long 2147483648 + .long 1072480148 + .long 194696800 + .long 1046026063 + .long 1610612736 + .long 1072476340 + .long 8535452 + .long 1046200178 + .long 536870912 + .long 1072472537 + .long 950463625 + .long 3192731897 + .long 2147483648 + .long 1072468738 + .long 973831566 + .long 1045683197 + .long 3221225472 + .long 1072464944 + .long 3330435892 + .long 3190277577 + .long 3221225472 + .long 1072461155 + .long 208692097 + .long 3193517651 + .long 1610612736 + .long 1072457371 + .long 2113097415 + .long 1044781749 + .long 3758096384 + .long 1072453591 + .long 1088808936 + .long 3193716142 + .long 0 + .long 1072449817 + .long 1443002127 + .long 3193250205 + .long 3221225472 + .long 1072446046 + .long 3967357419 + .long 1046109477 + .long 1610612736 + .long 1072442281 + .long 3013517861 + .long 3193159691 + .long 2147483648 + .long 1072438520 + .long 2524586286 + .long 1046121951 + .long 1610612736 + .long 1072434764 + .long 1476892861 + .long 1046434731 + .long 0 + .long 1072431013 + .long 3089640950 + .long 3192305780 + .long 536870912 + .long 1072427266 + .long 3812255529 + .long 1045730879 + .long 0 + .long 1072423524 + .long 995354762 + .long 3191528673 + .long 1610612736 + .long 1072419786 + .long 3260567684 + .long 1046273695 + .long 2147483648 + .long 1072416053 + .long 2738210286 + .long 3191471516 + .long 536870912 + .long 1072412325 + .long 1931849805 + .long 1044560405 + .long 1610612736 + .long 1072408601 + .long 358896655 + .long 1044029237 + .long 1073741824 + .long 1072404882 + .long 2214589842 + .long 3193202126 + .long 2684354560 + .long 1072401167 + .long 3118097363 + .long 3192592906 + .long 2147483648 + .long 1072397457 + .long 1835998884 + .long 1045788247 + .long 0 + .long 1072393752 + .long 1585488319 + .long 1045289910 + .long 0 + .long 1072390051 + .long 480160949 + .long 1046030455 + .long 2684354560 + .long 1072386354 + .long 1832959667 + .long 3193013644 + .long 2684354560 + .long 1072382662 + .long 3611346555 + .long 1044544210 + .long 1073741824 + .long 1072378975 + .long 2749418734 + .long 3193712580 + .long 1073741824 + .long 1072375292 + .long 2390043472 + .long 3191710658 + .long 3221225472 + .long 1072371613 + .long 2828199902 + .long 1042265217 + .long 3221225472 + .long 1072367939 + .long 569209321 + .long 3191230982 + .long 536870912 + .long 1072364270 + .long 236159139 + .long 1046240123 + .long 536870912 + .long 1072360605 + .long 1010656270 + .long 3193813968 + .long 1610612736 + .long 1072356944 + .long 2409080597 + .long 1044025029 + .long 536870912 + .long 1072353288 + .long 598419513 + .long 1043327370 + .long 1073741824 + .long 1072349636 + .long 4105950479 + .long 1045747958 + .long 3758096384 + .long 1072345988 + .long 343243853 + .long 3192420172 + .long 3221225472 + .long 1072342345 + .long 2088439530 + .long 1046172091 + .long 536870912 + .long 1072338707 + .long 4117721107 + .long 1043882496 + .long 3758096384 + .long 1072335072 + .long 3192032958 + .long 3192998645 + .long 3758096384 + .long 1072331442 + .long 2366522518 + .long 1045401957 + .long 1610612736 + .long 1072327817 + .long 3685533141 + .long 3193701947 + .long 536870912 + .long 1072324196 + .long 1058658672 + .long 3193572492 + .long 536870912 + .long 1072320579 + .long 166346347 + .long 1045456348 + .long 2147483648 + .long 1072316966 + .long 2027889772 + .long 1046349302 + .long 1073741824 + .long 1072313358 + .long 1079497888 + .long 1044585259 + .long 1073741824 + .long 1072309754 + .long 2189851573 + .long 1045132990 + .long 2684354560 + .long 1072306154 + .long 2486629386 + .long 3193613625 + .long 536870912 + .long 1072302559 + .long 1263686579 + .long 1044789259 + .long 0 + .long 1072298968 + .long 2412061798 + .long 3191369627 + .long 536870912 + .long 1072295381 + .long 584315716 + .long 3193144135 + .long 1610612736 + .long 1072291798 + .long 449000738 + .long 1046330451 + .long 0 + .long 1072288220 + .long 3938320157 + .long 1044446220 + .long 3758096384 + .long 1072284645 + .long 2949844595 + .long 3193462371 + .long 3758096384 + .long 1072281075 + .long 2771329642 + .long 3192121593 + .long 536870912 + .long 1072277510 + .long 3971508621 + .long 3193002806 + .long 2147483648 + .long 1072273948 + .long 4071942301 + .long 1044952619 + .long 536870912 + .long 1072270391 + .long 2090502395 + .long 1044660556 + .long 0 + .long 1072266838 + .long 3657520961 + .long 3193770938 + .long 3758096384 + .long 1072263288 + .long 1608175110 + .long 1045543239 + .long 0 + .long 1072259744 + .long 2506924180 + .long 1045530501 + .long 1073741824 + .long 1072256203 + .long 18238493 + .long 1046305623 + .long 3221225472 + .long 1072252666 + .long 3862640487 + .long 3192882407 + .long 1073741824 + .long 1072249134 + .long 3850158761 + .long 1043656099 + .long 3758096384 + .long 1072245605 + .long 2356524356 + .long 1045915296 + .long 3221225472 + .long 1072242081 + .long 936497287 + .long 3193842353 + .long 2147483648 + .long 1072238561 + .long 2840845344 + .long 1046454771 + .long 2147483648 + .long 1072235045 + .long 3688100713 + .long 1044895451 + .long 2684354560 + .long 1072231533 + .long 479979913 + .long 3193842442 + .long 2684354560 + .long 1072228025 + .long 1016321898 + .long 1046251032 + .long 3758096384 + .long 1072224521 + .long 562232474 + .long 3191974558 + .long 536870912 + .long 1072221022 + .long 3870512029 + .long 3193113881 + .long 1610612736 + .long 1072217526 + .long 1239780547 + .long 3191583604 + .long 2684354560 + .long 1072214034 + .long 2815421327 + .long 1045873682 + .long 0 + .long 1072210547 + .long 2371009561 + .long 1041508792 + .long 1610612736 + .long 1072207063 + .long 1304636524 + .long 3192414284 + .long 3221225472 + .long 1072203583 + .long 210144854 + .long 3193327333 + .long 0 + .long 1072200108 + .long 1454303272 + .long 1046360024 + .long 1610612736 + .long 1072196636 + .long 2095757548 + .long 1044984677 + .long 3221225472 + .long 1072193168 + .long 2027215580 + .long 3192880933 + .long 0 + .long 1072189705 + .long 214794880 + .long 1043457954 + .long 1073741824 + .long 1072186245 + .long 884624917 + .long 1043497079 + .long 2147483648 + .long 1072182789 + .long 2792396634 + .long 3193171685 + .long 2684354560 + .long 1072179337 + .long 4128995250 + .long 3192103434 + .long 2684354560 + .long 1072175889 + .long 333866043 + .long 1046372325 + .long 3221225472 + .long 1072172445 + .long 2194445544 + .long 3193958905 + .long 2684354560 + .long 1072169005 + .long 2316082269 + .long 3192041703 + .long 1610612736 + .long 1072165569 + .long 581005057 + .long 1046322848 + .long 536870912 + .long 1072162137 + .long 3280786513 + .long 1045457251 + .long 3221225472 + .long 1072158708 + .long 2567093361 + .long 1044710359 + .long 1073741824 + .long 1072155284 + .long 3740443584 + .long 1044224237 + .long 2684354560 + .long 1072151863 + .long 3981028272 + .long 1042596351 + .long 3758096384 + .long 1072148446 + .long 3820011120 + .long 3191915623 + .long 0 + .long 1072145034 + .long 2946439484 + .long 3193831276 + .long 3758096384 + .long 1072141624 + .long 3075274422 + .long 3190132432 + .long 2684354560 + .long 1072138219 + .long 496052167 + .long 1043619760 + .long 1073741824 + .long 1072134818 + .long 271106589 + .long 3192265149 + .long 2684354560 + .long 1072131420 + .long 2091955684 + .long 1044443554 + .long 3758096384 + .long 1072128026 + .long 723240109 + .long 3191007419 + .long 3758096384 + .long 1072124636 + .long 1748629070 + .long 1044510075 + .long 3221225472 + .long 1072121250 + .long 3289522046 + .long 3193095178 + .long 1610612736 + .long 1072117868 + .long 3599052146 + .long 3193720427 + .long 3221225472 + .long 1072114489 + .long 2446758135 + .long 3193436303 + .long 3758096384 + .long 1072111114 + .long 1652171097 + .long 3192137173 + .long 3221225472 + .long 1072107743 + .long 1353007155 + .long 1044523902 + .long 1610612736 + .long 1072104376 + .long 990601105 + .long 1046296663 + .long 3758096384 + .long 1072101012 + .long 2228627618 + .long 3193041040 + .long 0 + .long 1072097653 + .long 812484756 + .long 3191950723 + .long 3758096384 + .long 1072094296 + .long 817833130 + .long 3192279242 + .long 2147483648 + .long 1072090944 + .long 3563228521 + .long 3193810951 + .long 3221225472 + .long 1072087595 + .long 2729108859 + .long 3190936185 + .long 3221225472 + .long 1072084250 + .long 2249121662 + .long 3190639690 + .long 2147483648 + .long 1072080909 + .long 4082471745 + .long 3193929368 + .long 3758096384 + .long 1072077571 + .long 2827323806 + .long 3193708561 + .long 3758096384 + .long 1072074237 + .long 735866167 + .long 1042434690 + .long 2684354560 + .long 1072070907 + .long 3240808889 + .long 3191918422 + .long 0 + .long 1072067581 + .long 466482777 + .long 3186962221 + .long 0 + .long 1072064258 + .long 1576076296 + .long 1045849056 + .long 3221225472 + .long 1072060938 + .long 2751923560 + .long 3191910703 + .long 0 + .long 1072057623 + .long 1908755527 + .long 1046437515 + .long 0 + .long 1072054311 + .long 3175841411 + .long 1044572886 + .long 2684354560 + .long 1072051002 + .long 1633258450 + .long 3192670420 + .long 3221225472 + .long 1072047697 + .long 1867746657 + .long 1045726209 + .long 2684354560 + .long 1072044396 + .long 338968864 + .long 3193084662 + .long 0 + .long 1072041099 + .long 1501742471 + .long 3191742031 + .long 0 + .long 1072037805 + .long 4266775786 + .long 3192686970 + .long 2147483648 + .long 1072034514 + .long 4249283553 + .long 1045769728 + .long 2684354560 + .long 1072031227 + .long 2758366873 + .long 1046402161 + .long 1610612736 + .long 1072027944 + .long 2161186990 + .long 1044736865 + .long 2684354560 + .long 1072024664 + .long 810300171 + .long 1045748777 + .long 2147483648 + .long 1072021388 + .long 183688927 + .long 3191515581 + .long 3758096384 + .long 1072018115 + .long 368874072 + .long 3192363575 + .long 3221225472 + .long 1072014846 + .long 2459092970 + .long 1041794640 + .long 536870912 + .long 1072011581 + .long 867488640 + .long 1046310291 + .long 536870912 + .long 1072008319 + .long 50140871 + .long 1043327329 + .long 2684354560 + .long 1072005060 + .long 1241902518 + .long 3192739252 + .long 2684354560 + .long 1072001805 + .long 1027881659 + .long 3193858388 + .long 0 + .long 1071998554 + .long 38457322 + .long 1045489179 + .long 0 + .long 1071995306 + .long 3432963337 + .long 3190969347 + .long 1610612736 + .long 1071992061 + .long 534931792 + .long 1046302734 + .long 1610612736 + .long 1071988820 + .long 1817895268 + .long 3192551860 + .long 3221225472 + .long 1071985582 + .long 357237383 + .long 3191870833 + .long 2684354560 + .long 1071982348 + .long 108262401 + .long 3193365867 + .long 3758096384 + .long 1071979117 + .long 1964729244 + .long 1042502249 + .long 2684354560 + .long 1071975890 + .long 2088446957 + .long 1038010503 + .long 3221225472 + .long 1071972666 + .long 2947239447 + .long 1046377845 + .long 1610612736 + .long 1071969446 + .long 774932072 + .long 1046064854 + .long 2147483648 + .long 1071966229 + .long 4080937590 + .long 3193041284 + .long 3758096384 + .long 1071963015 + .long 2208251454 + .long 1045945089 + .long 3221225472 + .long 1071959805 + .long 2850924475 + .long 1045650959 + .long 0 + .long 1071956599 + .long 714040997 + .long 1046275153 + .long 3221225472 + .long 1071953395 + .long 85533782 + .long 3192816920 + .long 3221225472 + .long 1071950195 + .long 1252511005 + .long 1044805706 + .long 1073741824 + .long 1071946999 + .long 2384659038 + .long 3193391602 + .long 0 + .long 1071943806 + .long 416481813 + .long 1043730233 + .long 536870912 + .long 1071940616 + .long 1675424499 + .long 1046348030 + .long 3221225472 + .long 1071937429 + .long 1175989513 + .long 3193009113 + .long 2684354560 + .long 1071934246 + .long 2400084650 + .long 3192451713 + .long 3758096384 + .long 1071931066 + .long 1467335692 + .long 3193350868 + .long 1610612736 + .long 1071927890 + .long 266493801 + .long 1044954481 + .long 1073741824 + .long 1071924717 + .long 3919093445 + .long 1046023575 + .long 2147483648 + .long 1071921547 + .long 3017408483 + .long 1044880828 + .long 536870912 + .long 1071918381 + .long 948849966 + .long 3193892224 + .long 3758096384 + .long 1071915217 + .long 1870232600 + .long 1045777228 + .long 536870912 + .long 1071912058 + .long 822381492 + .long 3193639186 + .long 2147483648 + .long 1071908901 + .long 788243705 + .long 1044966343 + .long 1073741824 + .long 1071905748 + .long 1344278809 + .long 1044428545 + .long 1073741824 + .long 1071902598 + .long 172864300 + .long 1045765608 + .long 2684354560 + .long 1071899451 + .long 211555467 + .long 3192963574 + .long 536870912 + .long 1071896308 + .long 3373438023 + .long 1045643168 + .long 0 + .long 1071893168 + .long 2867180960 + .long 3189945998 + .long 536870912 + .long 1071890031 + .long 36724362 + .long 3193240584 + .long 1610612736 + .long 1071886897 + .long 2140176984 + .long 1045945349 + .long 0 + .long 1071883767 + .long 436842360 + .long 1040712587 + .long 3758096384 + .long 1071880639 + .long 1225147329 + .long 3193814594 + .long 3758096384 + .long 1071877515 + .long 1586157348 + .long 3191614322 + .long 536870912 + .long 1071874395 + .long 3329332918 + .long 1041699791 + .long 2684354560 + .long 1071871277 + .long 1635968041 + .long 3191783756 + .long 1073741824 + .long 1071868163 + .long 2876158382 + .long 1046097093 + .long 1073741824 + .long 1071865052 + .long 4267556964 + .long 3193723000 + .long 1073741824 + .long 1071861944 + .long 195475940 + .long 1045520795 + .long 2147483648 + .long 1071858839 + .long 2239193514 + .long 1046478675 + .long 0 + .long 1071855738 + .long 4168275596 + .long 1044926285 + .long 2684354560 + .long 1071852639 + .long 142514114 + .long 1045595182 + .long 2147483648 + .long 1071849544 + .long 1943457984 + .long 3192930015 + .long 2147483648 + .long 1071846452 + .long 202659489 + .long 3193926317 + .long 2684354560 + .long 1071843363 + .long 2208408789 + .long 3193857484 + .long 3758096384 + .long 1071840277 + .long 2237297552 + .long 3192939576 + .long 1073741824 + .long 1071837195 + .long 2726920839 + .long 1044193954 + .long 3758096384 + .long 1071834115 + .long 2337732207 + .long 3193611773 + .long 2147483648 + .long 1071831039 + .long 1390088602 + .long 1044000317 + .long 1610612736 + .long 1071827966 + .long 3806188736 + .long 3193463913 + .long 1073741824 + .long 1071824896 + .long 1795276560 + .long 1043671965 + .long 1073741824 + .long 1071821829 + .long 2960792799 + .long 1046240474 + .long 2147483648 + .long 1071818765 + .long 3350591592 + .long 3193333939 + .long 3221225472 + .long 1071815704 + .long 408870754 + .long 3193322854 + .long 0 + .long 1071812647 + .long 4146717132 + .long 1046063520 + .long 2147483648 + .long 1071809592 + .long 1681114919 + .long 3192114313 + .long 0 + .long 1071806541 + .long 1098393137 + .long 3190846732 + .long 2684354560 + .long 1071803492 + .long 2437484983 + .long 3193448718 + .long 1073741824 + .long 1071800447 + .long 1036809185 + .long 3192023501 + .long 0 + .long 1071797405 + .long 659668848 + .long 3193596312 + .long 3221225472 + .long 1071794365 + .long 1112062459 + .long 3192773376 + .long 2147483648 + .long 1071791329 + .long 4082956335 + .long 1045830513 + .long 1610612736 + .long 1071788296 + .long 2387089965 + .long 1045532601 + .long 1610612736 + .long 1071785266 + .long 1522101980 + .long 3193941957 + .long 1073741824 + .long 1071782239 + .long 2157197585 + .long 3188193305 + .long 1073741824 + .long 1071779215 + .long 946810220 + .long 3193223819 + .long 1073741824 + .long 1071776194 + .long 4069942444 + .long 3193878549 + .long 536870912 + .long 1071773176 + .long 1693463440 + .long 1046360588 + .long 536870912 + .long 1071770161 + .long 1954543254 + .long 1046409381 + .long 1073741824 + .long 1071767149 + .long 1050471249 + .long 3193933095 + .long 536870912 + .long 1071764140 + .long 1256240478 + .long 1046456865 + .long 536870912 + .long 1071761134 + .long 676764254 + .long 1046055503 + .long 536870912 + .long 1071758131 + .long 1421032967 + .long 1044779786 + .long 536870912 + .long 1071755131 + .long 38735992 + .long 3192766355 + .long 0 + .long 1071752134 + .long 2960669690 + .long 1044484680 + .long 3758096384 + .long 1071749139 + .long 788707382 + .long 1045299895 + .long 3221225472 + .long 1071746148 + .long 685689300 + .long 1040778831 + .long 2147483648 + .long 1071743160 + .long 1170994182 + .long 1046159174 + .long 1073741824 + .long 1071740175 + .long 64591436 + .long 1046153849 + .long 0 + .long 1071737193 + .long 2338031659 + .long 3189997702 + .long 2684354560 + .long 1071734213 + .long 1941624568 + .long 3186752676 + .long 536870912 + .long 1071731237 + .long 1401255580 + .long 1046383990 + .long 2684354560 + .long 1071728263 + .long 376888427 + .long 1045896456 + .long 536870912 + .long 1071725293 + .long 2831424639 + .long 3193539109 + .long 1610612736 + .long 1071722325 + .long 3303123696 + .long 1044599415 + .long 2684354560 + .long 1071719360 + .long 1077295329 + .long 3189877372 + .long 3221225472 + .long 1071716398 + .long 1434061099 + .long 3184529771 + .long 3221225472 + .long 1071713439 + .long 2104991590 + .long 1045062074 + .long 3221225472 + .long 1071710483 + .long 722060869 + .long 3193788526 + .long 536870912 + .long 1071704580 + .long 3928796486 + .long 1046129020 + .long 536870912 + .long 1071698688 + .long 588844628 + .long 1045492135 + .long 2684354560 + .long 1071692807 + .long 326739366 + .long 3193004445 + .long 1610612736 + .long 1071686938 + .long 2456436042 + .long 1046278169 + .long 2684354560 + .long 1071681080 + .long 2831303512 + .long 1043670046 + .long 536870912 + .long 1071675234 + .long 607223418 + .long 1045507322 + .long 0 + .long 1071669399 + .long 4254921332 + .long 3193290483 + .long 0 + .long 1071663575 + .long 914994333 + .long 3191263853 + .long 1073741824 + .long 1071657762 + .long 4147050180 + .long 3193228552 + .long 2684354560 + .long 1071651960 + .long 594554157 + .long 3193503935 + .long 0 + .long 1071646170 + .long 1062846796 + .long 1045944331 + .long 1073741824 + .long 1071636109 + .long 2909238893 + .long 3193436884 + .long 1073741824 + .long 1071624572 + .long 1682918119 + .long 1042211899 + .long 1073741824 + .long 1071613057 + .long 2419209426 + .long 1045437062 + .long 1073741824 + .long 1071601564 + .long 2951341321 + .long 3190193214 + .long 0 + .long 1071590093 + .long 3084900875 + .long 3192394907 + .long 1073741824 + .long 1071578643 + .long 999567454 + .long 1046433447 + .long 2147483648 + .long 1071567215 + .long 1570101857 + .long 3193291160 + .long 0 + .long 1071555809 + .long 1080647881 + .long 3185154585 + .long 0 + .long 1071544424 + .long 3526309177 + .long 1044843640 + .long 2147483648 + .long 1071533060 + .long 2213463349 + .long 3191738930 + .long 1073741824 + .long 1071521718 + .long 1039925195 + .long 3192618353 + .long 1073741824 + .long 1071510397 + .long 2115757280 + .long 3193671567 + .long 1073741824 + .long 1071499097 + .long 1188751495 + .long 3191145560 + .long 2147483648 + .long 1071487818 + .long 3983461449 + .long 3193897029 + .long 2147483648 + .long 1071476560 + .long 782141500 + .long 1042879962 + .long 2147483648 + .long 1071465323 + .long 4038904626 + .long 1045063881 + .long 2147483648 + .long 1071454107 + .long 2613036921 + .long 3193217642 + .long 0 + .long 1071442912 + .long 2095723435 + .long 1044629175 + .long 1073741824 + .long 1071431737 + .long 3879795974 + .long 1045767874 + .long 1073741824 + .long 1071420583 + .long 2662198042 + .long 3191434637 + .long 3221225472 + .long 1071409449 + .long 4037605722 + .long 3193703090 + .long 2147483648 + .long 1071398336 + .long 1860331835 + .long 1040814822 + .long 3221225472 + .long 1071387243 + .long 1522972033 + .long 3190305974 + .long 1073741824 + .long 1071376171 + .long 2361534207 + .long 1043699366 + .long 0 + .long 1071365119 + .long 4180309179 + .long 1044142099 + .long 0 + .long 1071354087 + .long 1201038528 + .long 3192968772 + .long 0 + .long 1071343075 + .long 1342478171 + .long 3193251215 + .long 0 + .long 1071332083 + .long 3836883348 + .long 3193472007 + .long 3221225472 + .long 1071321110 + .long 3864874250 + .long 1045593126 + .long 2147483648 + .long 1071310158 + .long 2169494998 + .long 1046045346 + .long 1073741824 + .long 1071299226 + .long 3785165075 + .long 3193319246 + .long 2147483648 + .long 1071288313 + .long 1137692678 + .long 3192716779 + .long 1073741824 + .long 1071277420 + .long 1752107598 + .long 1046366120 + .long 3221225472 + .long 1071266546 + .long 1912656912 + .long 1046352281 + .long 3221225472 + .long 1071255692 + .long 2882676334 + .long 1046406353 + .long 1073741824 + .long 1071244858 + .long 963612460 + .long 1045282811 + .long 0 + .long 1071234043 + .long 3811255773 + .long 1046231636 + .long 1073741824 + .long 1071223247 + .long 1126055989 + .long 3192224037 + .long 2147483648 + .long 1071212470 + .long 2079145427 + .long 1044432413 + .long 0 + .long 1071201713 + .long 3611595621 + .long 1043358745 + .long 2147483648 + .long 1071190974 + .long 390522769 + .long 1045888252 + .long 1073741824 + .long 1071180255 + .long 4087939723 + .long 3192930745 + .long 3221225472 + .long 1071169554 + .long 1451494480 + .long 3190219274 + .long 1073741824 + .long 1071158873 + .long 427176194 + .long 3193042022 + .long 2147483648 + .long 1071148210 + .long 1882381948 + .long 3192727946 + .long 2147483648 + .long 1071137566 + .long 3736313771 + .long 3192087019 + .long 1073741824 + .long 1071126941 + .long 1560398816 + .long 3193185715 + .long 2147483648 + .long 1071116334 + .long 1021942441 + .long 1041526696 + .long 2147483648 + .long 1071105746 + .long 3517080249 + .long 3193576041 + .long 3221225472 + .long 1071095176 + .long 2248589878 + .long 1044527624 + .long 2147483648 + .long 1071084625 + .long 2412896695 + .long 1046112867 + .long 3221225472 + .long 1071074092 + .long 3834725738 + .long 1044562378 + .long 1073741824 + .long 1071063578 + .long 1150920407 + .long 1043768986 + .long 0 + .long 1071053082 + .long 1379393428 + .long 3188690690 + .long 0 + .long 1071042604 + .long 3058183278 + .long 3193617655 + .long 0 + .long 1071032144 + .long 421133665 + .long 3193417186 + .long 0 + .long 1071021702 + .long 2860161357 + .long 3191816125 + .long 0 + .long 1071011278 + .long 1742405964 + .long 1043580240 + .long 0 + .long 1071000872 + .long 2821215927 + .long 3188984273 + .long 3221225472 + .long 1070990483 + .long 510275597 + .long 1045813401 + .long 2147483648 + .long 1070980113 + .long 304266588 + .long 3191193536 + .long 3221225472 + .long 1070969760 + .long 1854784211 + .long 1046302073 + .long 0 + .long 1070959426 + .long 3773082854 + .long 3193008899 + .long 2147483648 + .long 1070949108 + .long 3003572392 + .long 1046404879 + .long 3221225472 + .long 1070938808 + .long 1702149204 + .long 1046407257 + .long 2147483648 + .long 1070928526 + .long 3935314439 + .long 1046438280 + .long 3221225472 + .long 1070918261 + .long 2677087609 + .long 1045501749 + .long 2147483648 + .long 1070908014 + .long 4190598039 + .long 3193640515 + .long 1073741824 + .long 1070897784 + .long 368874072 + .long 1044879927 + .long 2147483648 + .long 1070887571 + .long 3584052697 + .long 3192024662 + .long 3221225472 + .long 1070877375 + .long 3762307829 + .long 1045886918 + .long 1073741824 + .long 1070867197 + .long 495710920 + .long 1046317072 + .long 0 + .long 1070857036 + .long 2292768238 + .long 3190887508 + .long 3221225472 + .long 1070846891 + .long 1044078151 + .long 3193772914 + .long 1073741824 + .long 1070836764 + .long 3266010457 + .long 1043443755 + .long 3221225472 + .long 1070826653 + .long 3571665822 + .long 1045547823 + .long 1073741824 + .long 1070816560 + .long 393348347 + .long 3190525143 + .long 2147483648 + .long 1070806483 + .long 4241722498 + .long 3192084193 + .long 2147483648 + .long 1070796423 + .long 1693797068 + .long 3192807972 + .long 0 + .long 1070786380 + .long 2860086745 + .long 1046331646 + .long 2147483648 + .long 1070776353 + .long 1366141759 + .long 3192979363 + .long 1073741824 + .long 1070766343 + .long 737899283 + .long 1045853346 + .long 3221225472 + .long 1070756349 + .long 88734873 + .long 1043881257 + .long 3221225472 + .long 1070746372 + .long 1438003315 + .long 3192917101 + .long 0 + .long 1070736412 + .long 1066505530 + .long 1043896695 + .long 3221225472 + .long 1070726467 + .long 2706653041 + .long 3191113643 + .long 3221225472 + .long 1070716539 + .long 1321764476 + .long 1039573724 + .long 0 + .long 1070706628 + .long 1126753211 + .long 1044502976 + .long 2147483648 + .long 1070696732 + .long 773642884 + .long 1044110727 + .long 1073741824 + .long 1070686853 + .long 1263743406 + .long 3193115278 + .long 0 + .long 1070676990 + .long 3115237732 + .long 3193089176 + .long 3221225472 + .long 1070667142 + .long 3642626838 + .long 3191146032 + .long 2147483648 + .long 1070657311 + .long 2091696428 + .long 1044337177 + .long 1073741824 + .long 1070647496 + .long 3168958391 + .long 1044197568 + .long 0 + .long 1070637697 + .long 711148669 + .long 3193181047 + .long 2147483648 + .long 1070627913 + .long 4207182773 + .long 3193402092 + .long 3221225472 + .long 1070618145 + .long 918070640 + .long 3192902845 + .long 3221225472 + .long 1070608393 + .long 3135571447 + .long 3192193928 + .long 2147483648 + .long 1070598657 + .long 1043705517 + .long 3193188604 + .long 2147483648 + .long 1070581777 + .long 1886680492 + .long 1043890286 + .long 2147483648 + .long 1070562367 + .long 3373799420 + .long 3191917802 + .long 2147483648 + .long 1070542988 + .long 2919618025 + .long 3192461752 + .long 2147483648 + .long 1070523640 + .long 2926365158 + .long 3193113492 + .long 0 + .long 1070504323 + .long 519978638 + .long 1045918846 + .long 0 + .long 1070485037 + .long 3665353151 + .long 3193546248 + .long 0 + .long 1070465781 + .long 2327718958 + .long 1045050797 + .long 0 + .long 1070446556 + .long 345326861 + .long 3188224716 + .long 2147483648 + .long 1070427361 + .long 2263747488 + .long 3192871328 + .long 0 + .long 1070408197 + .long 3894192264 + .long 1045693123 + .long 0 + .long 1070389063 + .long 994321593 + .long 1046347203 + .long 2147483648 + .long 1070369959 + .long 3540366700 + .long 1042296230 + .long 0 + .long 1070350886 + .long 966420752 + .long 3192400412 + .long 2147483648 + .long 1070331842 + .long 1954511160 + .long 3193467762 + .long 2147483648 + .long 1070312828 + .long 1875003040 + .long 1045485629 + .long 0 + .long 1070293845 + .long 4003372005 + .long 3193714109 + .long 2147483648 + .long 1070274890 + .long 2216083644 + .long 1045720399 + .long 0 + .long 1070255966 + .long 1240985743 + .long 1045879414 + .long 0 + .long 1070237071 + .long 1573064162 + .long 1046427916 + .long 0 + .long 1070218206 + .long 2500166582 + .long 3193848169 + .long 2147483648 + .long 1070199369 + .long 862131539 + .long 1045606065 + .long 0 + .long 1070180563 + .long 3733427622 + .long 3193545988 + .long 0 + .long 1070161785 + .long 124515358 + .long 1045504766 + .long 2147483648 + .long 1070143036 + .long 689228007 + .long 1044238436 + .long 0 + .long 1070124317 + .long 976284835 + .long 3189879978 + .long 2147483648 + .long 1070105626 + .long 2997446224 + .long 3193394244 + .long 2147483648 + .long 1070086964 + .long 594985163 + .long 3190453447 + .long 2147483648 + .long 1070068331 + .long 3634411091 + .long 3193012662 + .long 0 + .long 1070049727 + .long 841316482 + .long 3192551604 + .long 0 + .long 1070031151 + .long 518949849 + .long 3189505693 + .long 2147483648 + .long 1070012603 + .long 207633604 + .long 1043791305 + .long 2147483648 + .long 1069994084 + .long 925415631 + .long 3189658670 + .long 2147483648 + .long 1069975593 + .long 3348775015 + .long 1046231055 + .long 0 + .long 1069957131 + .long 4137593961 + .long 1045760644 + .long 2147483648 + .long 1069938696 + .long 3081207972 + .long 1046319652 + .long 2147483648 + .long 1069920290 + .long 2912811806 + .long 3193250863 + .long 0 + .long 1069901912 + .long 1704663230 + .long 3192651171 + .long 2147483648 + .long 1069883561 + .long 1726887473 + .long 3193427817 + .long 2147483648 + .long 1069865238 + .long 516302873 + .long 1042556919 + .long 2147483648 + .long 1069846943 + .long 3737277289 + .long 3192083505 + .long 0 + .long 1069828676 + .long 2829909067 + .long 3191628520 + .long 0 + .long 1069810436 + .long 3474800299 + .long 3187384991 + .long 2147483648 + .long 1069792223 + .long 2041291754 + .long 3186735048 + .long 2147483648 + .long 1069774038 + .long 3100739290 + .long 3192991951 + .long 2147483648 + .long 1069755880 + .long 2641686866 + .long 1042449846 + .long 0 + .long 1069737750 + .long 1353612457 + .long 3192928544 + .long 2147483648 + .long 1069719646 + .long 1823398190 + .long 3193125156 + .long 0 + .long 1069701570 + .long 2629108558 + .long 3192983089 + .long 2147483648 + .long 1069683520 + .long 314889080 + .long 3193178947 + .long 2147483648 + .long 1069665497 + .long 3426846470 + .long 1046055034 + .long 0 + .long 1069647502 + .long 2451521798 + .long 3193081447 + .long 2147483648 + .long 1069629532 + .long 963200030 + .long 1046315089 + .long 0 + .long 1069611590 + .long 3644976987 + .long 1046450297 + .long 2147483648 + .long 1069593674 + .long 1514045874 + .long 3193337489 + .long 0 + .long 1069575785 + .long 2640752615 + .long 3192734715 + .long 0 + .long 1069557922 + .long 177381730 + .long 3193107348 + .long 0 + .long 1069532650 + .long 546871269 + .long 1045601847 + .long 0 + .long 1069497029 + .long 2220408187 + .long 1045964849 + .long 0 + .long 1069461461 + .long 3101209784 + .long 3192417098 + .long 0 + .long 1069425944 + .long 3768825782 + .long 1046196178 + .long 0 + .long 1069390480 + .long 737308942 + .long 1043872555 + .long 0 + .long 1069355068 + .long 1944808119 + .long 3193362317 + .long 0 + .long 1069319707 + .long 852406261 + .long 3191004250 + .long 0 + .long 1069284398 + .long 3202370743 + .long 3192549796 + .long 0 + .long 1069249140 + .long 900633975 + .long 1043862575 + .long 0 + .long 1069213934 + .long 3417168564 + .long 3193213168 + .long 0 + .long 1069178778 + .long 2513309972 + .long 1046051953 + .long 0 + .long 1069143674 + .long 1836846968 + .long 1044036653 + .long 0 + .long 1069108621 + .long 675391362 + .long 3193334972 + .long 0 + .long 1069073618 + .long 1859398086 + .long 3191668729 + .long 0 + .long 1069038666 + .long 3835994043 + .long 3193252196 + .long 0 + .long 1069003764 + .long 563337246 + .long 3192060530 + .long 0 + .long 1068968912 + .long 3715154210 + .long 1045592716 + .long 0 + .long 1068934111 + .long 51415636 + .long 3192193939 + .long 0 + .long 1068899359 + .long 822049108 + .long 1045846080 + .long 0 + .long 1068864658 + .long 3739043340 + .long 3193184949 + .long 0 + .long 1068830006 + .long 2500828997 + .long 3193115638 + .long 0 + .long 1068795403 + .long 1479335089 + .long 1045458233 + .long 0 + .long 1068760850 + .long 1914098598 + .long 1045079833 + .long 0 + .long 1068726346 + .long 1470374909 + .long 1046125471 + .long 0 + .long 1068691892 + .long 2048101185 + .long 3192960024 + .long 0 + .long 1068657486 + .long 801101802 + .long 1042523454 + .long 0 + .long 1068623129 + .long 412171467 + .long 1044799425 + .long 0 + .long 1068588821 + .long 2124566049 + .long 1040459843 + .long 0 + .long 1068554561 + .long 2087558263 + .long 1046083102 + .long 0 + .long 1068520350 + .long 290389316 + .long 1045220023 + .long 0 + .long 1068473430 + .long 393737815 + .long 1045770085 + .long 0 + .long 1068405202 + .long 3273111658 + .long 3193594336 + .long 0 + .long 1068337068 + .long 3076935419 + .long 3191993934 + .long 0 + .long 1068269030 + .long 1564279721 + .long 1040713632 + .long 0 + .long 1068201088 + .long 1950103787 + .long 3191285473 + .long 0 + .long 1068133240 + .long 111301617 + .long 1046140470 + .long 0 + .long 1068065488 + .long 2740933659 + .long 1046091898 + .long 0 + .long 1067997832 + .long 1267131462 + .long 3192947024 + .long 0 + .long 1067930268 + .long 629787343 + .long 1045599114 + .long 0 + .long 1067862800 + .long 2943029746 + .long 3191100621 + .long 0 + .long 1067795426 + .long 2538631151 + .long 3193953989 + .long 0 + .long 1067728144 + .long 3881795033 + .long 3191377363 + .long 0 + .long 1067660956 + .long 2752747058 + .long 3186250103 + .long 0 + .long 1067593862 + .long 892170014 + .long 3193330390 + .long 0 + .long 1067526860 + .long 2000985783 + .long 3192968647 + .long 0 + .long 1067459950 + .long 1954077304 + .long 1044399908 + .long 0 + .long 1067335900 + .long 4120702847 + .long 3193150730 + .long 0 + .long 1067202448 + .long 353489980 + .long 1045676744 + .long 0 + .long 1067069184 + .long 2609643324 + .long 3192108001 + .long 0 + .long 1066936100 + .long 2904433317 + .long 1044836541 + .long 0 + .long 1066803200 + .long 319656790 + .long 1044863904 + .long 0 + .long 1066670484 + .long 2407987331 + .long 3192995083 + .long 0 + .long 1066537948 + .long 2437746120 + .long 3193127733 + .long 0 + .long 1066405592 + .long 762570215 + .long 3189946997 + .long 0 + .long 1066145040 + .long 3317159694 + .long 1046060125 + .long 0 + .long 1065881056 + .long 2317845886 + .long 3191679176 + .long 0 + .long 1065617424 + .long 3665195816 + .long 1045633853 + .long 0 + .long 1065354160 + .long 2008730355 + .long 3193898211 + .long 0 + .long 1064829264 + .long 3746236192 + .long 1046121471 + .long 0 + .long 1064303680 + .long 885296753 + .long 3191852441 + .long 0 + .long 1063253696 + .long 449976495 + .long 3192682663 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 4294965248 + .long 0 + .long 4294965248 + .long 0 + .long 1073160192 + .long 370913857 + .long 3210587105 + .long 1841914130 + .long 3213059448 + .long 3995341938 + .long 3214607105 + .long 2677381210 + .long 3216320731 + .long 3011779882 + .long 3218479542 + .long 1367832035 + .long 1066403058 + .long 2894285243 + .long 1067936923 + .long 1215221452 + .long 1069835102 + .long 370913857 + .long 3210587105 + .long 2677381210 + .long 3216320731 + .long 4172642429 + .long 1056068382 + .long 1215221451 + .long 1069835102 + .long 1092638156 + .long 3184925618 + .long 0 + .long 4294967288 + .long 0 + .long 4294967295 + .long 0 + .long 1072693248 + .long 0 + .long 997195776 + .long 4200250559 + .long 1072696090 + .long 2808127345 + .long 3162830514 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 339411585 + .long 1072701800 + .long 264588982 + .long 3162685233 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 772914124 + .long 1072707540 + .long 4004372762 + .long 1013278737 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 1928746161 + .long 1072713311 + .long 983617676 + .long 1015333753 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 238821257 + .long 1072719114 + .long 1469694871 + .long 3163933563 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 728934454 + .long 1072724948 + .long 1413842688 + .long 1015227188 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 4133881824 + .long 1072730813 + .long 2148155345 + .long 3163979875 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 2602514713 + .long 1072736711 + .long 2268929336 + .long 1015402860 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 1172597893 + .long 1072742641 + .long 114433263 + .long 1016396169 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 590962156 + .long 1072748603 + .long 3829346666 + .long 3164324173 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 1608493509 + .long 1072754597 + .long 3159622171 + .long 3163856313 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 685187902 + .long 1072760624 + .long 378731989 + .long 1015891691 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 2875075254 + .long 1072766683 + .long 4144233330 + .long 3164382292 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 351405227 + .long 1072772776 + .long 3125337328 + .long 3160871055 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 2471440686 + .long 1072778901 + .long 968836267 + .long 3163263464 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1416741826 + .long 1072785060 + .long 2196380210 + .long 1012462139 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 2257959872 + .long 1072791252 + .long 3802946148 + .long 1014013503 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 1480023343 + .long 1072797478 + .long 2247196168 + .long 1016376029 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 4162030108 + .long 1072803737 + .long 2763428480 + .long 1016577925 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 2502433899 + .long 1072810031 + .long 2148595913 + .long 1016072567 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 1588871207 + .long 1072816359 + .long 143439582 + .long 3164011992 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2218315341 + .long 1072822721 + .long 2694295388 + .long 3164337444 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 897099801 + .long 1072829118 + .long 754756297 + .long 1016289581 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 2725843665 + .long 1072835549 + .long 1433917087 + .long 1015887099 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 4219606026 + .long 1072842015 + .long 2434574742 + .long 1015730124 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1897844341 + .long 1072848517 + .long 1254300460 + .long 1016324514 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 874372905 + .long 1072855054 + .long 100263788 + .long 1016989308 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 1972484976 + .long 1072861626 + .long 675290301 + .long 3162688626 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 1724976915 + .long 1072868234 + .long 420909223 + .long 3164165955 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 964107055 + .long 1072874878 + .long 2800439588 + .long 3163881797 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 526652809 + .long 1072881558 + .long 4223459736 + .long 1016927951 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 1253935211 + .long 1072888274 + .long 1395382931 + .long 3160751189 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 3991843581 + .long 1072895026 + .long 4092853457 + .long 1015634339 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 1000925746 + .long 1072901816 + .long 1018491672 + .long 3164358120 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1726216749 + .long 1072908642 + .long 2466808228 + .long 3162724981 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 2732492859 + .long 1072915505 + .long 2691479646 + .long 3163304260 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 589198666 + .long 1072922406 + .long 2664346172 + .long 3164206538 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 460407023 + .long 1072929344 + .long 4237175092 + .long 3164187045 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3219942644 + .long 1072936319 + .long 3798990616 + .long 1016417382 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1156440435 + .long 1072943333 + .long 2351451249 + .long 1015015632 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 3743175029 + .long 1072950384 + .long 2072812490 + .long 3163223651 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 3278348324 + .long 1072957474 + .long 3069497416 + .long 1015799288 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 654919306 + .long 1072964603 + .long 3232961757 + .long 3164096045 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1065662932 + .long 1072971770 + .long 2533670915 + .long 1015578814 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 1118294578 + .long 1072978976 + .long 2197495694 + .long 3160957977 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 1720398391 + .long 1072986221 + .long 3980678963 + .long 3164348656 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 3784486610 + .long 1072993505 + .long 1581883040 + .long 3162747529 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3933059031 + .long 1073000829 + .long 2133366768 + .long 3162580408 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 3088564500 + .long 1073008193 + .long 1762311517 + .long 1016094249 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 2178460671 + .long 1073015597 + .long 777878098 + .long 3163891069 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2135241198 + .long 1073023041 + .long 1236747871 + .long 1014637723 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 3896463087 + .long 1073030525 + .long 1139797873 + .long 3162282381 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 4109806887 + .long 1073038050 + .long 422403966 + .long 1015517805 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 3723038930 + .long 1073045616 + .long 378465264 + .long 3163618158 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3689071823 + .long 1073053223 + .long 2321004996 + .long 3163601292 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 671025100 + .long 1073060872 + .long 3832014351 + .long 3164070606 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 4222122499 + .long 1073068561 + .long 1277378074 + .long 3164305313 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 2425981843 + .long 1073076293 + .long 2830390851 + .long 3164395175 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 551349105 + .long 1073084067 + .long 3821916050 + .long 3163155165 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 3872257780 + .long 1073091882 + .long 1253592103 + .long 1017006910 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 488188413 + .long 1073099741 + .long 3199821029 + .long 1016612624 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 4273770423 + .long 1073107641 + .long 3383180809 + .long 3164267477 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3339203574 + .long 1073115585 + .long 1483497780 + .long 3163457330 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 2979960120 + .long 1073123572 + .long 2599109725 + .long 1015547069 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 4201977662 + .long 1073131602 + .long 748330254 + .long 1014642933 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 3721688645 + .long 1073139676 + .long 3069276937 + .long 1016887977 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 2555984613 + .long 1073147794 + .long 2652555442 + .long 3163601268 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 1727278727 + .long 1073155956 + .long 3562710623 + .long 1012520516 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 2263535754 + .long 1073164162 + .long 752233586 + .long 3163687584 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 903334909 + .long 1073172413 + .long 1636462108 + .long 1016088573 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 2980802057 + .long 1073180708 + .long 378619896 + .long 1016821879 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 950803702 + .long 1073189049 + .long 1655364926 + .long 1016285608 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 158781403 + .long 1073197435 + .long 2221464712 + .long 3164335029 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 1660913392 + .long 1073205866 + .long 4218599604 + .long 1016184283 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 2224145553 + .long 1073214343 + .long 3482522030 + .long 3162537745 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2916157145 + .long 1073222866 + .long 219487565 + .long 1016357943 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 515457527 + .long 1073231436 + .long 836709333 + .long 1016699802 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 396319521 + .long 1073240052 + .long 4172420816 + .long 3160123208 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3643909174 + .long 1073248714 + .long 3537586109 + .long 1015403223 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 2759350287 + .long 1073257424 + .long 1148526634 + .long 1016943509 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 3134592888 + .long 1073266181 + .long 4232266862 + .long 1017039710 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 1577608921 + .long 1073274986 + .long 1875489510 + .long 3164016970 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 3492293770 + .long 1073283838 + .long 2248032210 + .long 1016435402 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 1403662306 + .long 1073292739 + .long 2788809599 + .long 3162719583 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 727685349 + .long 1073301688 + .long 2038246809 + .long 3163407318 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2591453363 + .long 1073310685 + .long 2132396182 + .long 3160122774 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 3833209506 + .long 1073319731 + .long 2722920684 + .long 1014803418 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 1297350157 + .long 1073328827 + .long 1308022040 + .long 3164461134 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 424392917 + .long 1073337972 + .long 2749202995 + .long 3163887294 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2366108318 + .long 1073347166 + .long 2867985102 + .long 3162810830 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3985553595 + .long 1073356410 + .long 4002146062 + .long 1016882712 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2152073944 + .long 1073365705 + .long 1486860576 + .long 3164252032 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 2331271250 + .long 1073375050 + .long 812057446 + .long 1013256022 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1405169241 + .long 1073384446 + .long 2998539689 + .long 3163879527 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 557149882 + .long 1073393893 + .long 3672720709 + .long 1015585841 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 977020788 + .long 1073403391 + .long 3065100517 + .long 1016590139 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 3861050111 + .long 1073412940 + .long 254893773 + .long 3163861756 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 1822067026 + .long 1073422542 + .long 1241994956 + .long 1016388866 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 364333489 + .long 1073432196 + .long 3923737744 + .long 3162469949 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 703710506 + .long 1073441902 + .long 1384660846 + .long 1016244467 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 4062661092 + .long 1073451660 + .long 1422616006 + .long 3164303894 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 3080351519 + .long 1073461472 + .long 3379126789 + .long 3158266577 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 3287523847 + .long 1073471337 + .long 1625971539 + .long 3158058531 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 1631695677 + .long 1073481256 + .long 2717633076 + .long 3163392602 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 3657065772 + .long 1073491228 + .long 399025623 + .long 3164005654 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 2029714210 + .long 1073501255 + .long 613660079 + .long 1016147719 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2307442995 + .long 1073511336 + .long 3190117721 + .long 3163453115 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 1464976603 + .long 1073521472 + .long 3507292405 + .long 3163026110 + .long 3706687593 + .long 1073526560 + .long 3521726939 + .long 1014301643 + .long 778901109 + .long 1073531663 + .long 2248183954 + .long 3162317327 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1532734324 + .long 1073541909 + .long 3094216535 + .long 3164211433 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 721996136 + .long 1073552211 + .long 563754734 + .long 1016419894 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3939148246 + .long 1073562568 + .long 3210352148 + .long 1016322899 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 3898795731 + .long 1073572982 + .long 1249994144 + .long 1012918394 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 1912561781 + .long 1073583453 + .long 3147495102 + .long 1016726829 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 3594158869 + .long 1073593980 + .long 2456521700 + .long 3164305137 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 1679558232 + .long 1073604565 + .long 2390342287 + .long 3164382546 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 1796832535 + .long 1073615207 + .long 3176955716 + .long 3161634089 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 991358482 + .long 1073625907 + .long 838715019 + .long 3164206244 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 610758006 + .long 1073636665 + .long 1965209397 + .long 3162914808 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2009970496 + .long 1073647481 + .long 2159039665 + .long 3163621524 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 2256325230 + .long 1073658356 + .long 580117746 + .long 1016365871 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 2719515920 + .long 1073669290 + .long 2760332941 + .long 1016186509 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 481706282 + .long 1073680284 + .long 1696079173 + .long 3163759104 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1222472308 + .long 1073691337 + .long 1054357470 + .long 3162069594 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2038973688 + .long 1073702450 + .long 892941374 + .long 1017095035 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 35929225 + .long 1073713624 + .long 2809788041 + .long 3160485544 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 915592468 + .long 1073724858 + .long 352947894 + .long 3162072947 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .long 1797923801 + .long 1073736153 + .long 1950547427 + .long 1014277635 + .long 3884607281 + .long 1062590591 + .long 3607404736 + .long 1068264200 + .long 1874480759 + .long 1065595563 + .long 4286760335 + .long 1070514109 + .long 4277811695 + .long 1072049730 + .long 0 + .long 0 + .long 4277811695 + .long 1072049730 + .long 4277811695 + .long 3219533378 + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .type static_const_table,@object + .size static_const_table,12576 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/e_sinh.S b/libm/x86/e_sinh.S new file mode 100644 index 000000000..9d28a317b --- /dev/null +++ b/libm/x86/e_sinh.S @@ -0,0 +1,1408 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// sinh(x)=(exp(x)-exp(-x))/2 +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^7=int(xH*L2EH*2^7), +// f=0.b1 b2 ... b7, k integer +// 2^f is approximated as Tp[f]+Dp[f], and 2^{-f} as Tn[f]+Dn[f] +// Tp stores the high 53 bits, Dp stores (2^f-Tp[f]) rounded to double precision +// +// e^|x|=2^{k+f}*2^r, r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-8}+2^{-14}, +// for |x| in [23/64,3*2^7) +// e^{-|x|}=2^{-k-f}*2^{-r} +// +// e^|x| is approximated as 2^k*Tp+2^k*Tp*c1*r(1+c2*r+..+c5*r^4)+2^k*Dp= +// =2^k*Tp+2^k*Tp*P15+2^k*Dp +// e^{-|x|} approximated as 2^{-k}*Tn-2^{-k}*Tn*c1*r(1-c2*r+..+c5*r^4)+2^{-k}*Dn +// +// For |x| in [1/8, 3*2^7), sinh(x) is formed as +// RN(2^k*Tp-2^{-k}*Tn)+2^k*Tp*P15-2^{-k}*Tn*P`15-2^{-k}*TnL-2^{-k}*Dn+2^k*Dp +// +// For x in (3*2^7, 3*2^8), sign(x)*(e^|x|)/2 is returned, and +// the result is checked for overflow. +// +// For |x|<23/64, a Taylor polynomial expansion is used (degree 13) +// To reduce rounding errors, the p3*x^3 term is computed as +// (p3*xh^3)_high+[(p3*xl*(3*x*xh+xl^2))+(p3*xh^3)_low], +// where x=xh+xl, (xh are the leading 17 bits of x), and +// (p3*xh^3)_high=RN(x+p3*xh^3)-x +// (error bound for polynomial expansion is below 0.51 ulp) +// +// Special cases: +// sinh(NaN) = quiet NaN, and raise invalid exception +// sinh(+/-INF) = +/-INF +// sinh(x) = x for subnormals +// for finite argument, only sinh(0)=0 is exact +// For IEEE double +// sinh(x) overflows for x > +// 710.47586007394386342639336362481117248535156250 = MAXLOG+log(2) +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin sinh +ENTRY(sinh) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + movsd 4272(%ebx), %xmm3 + xorpd %xmm4, %xmm4 + movsd 4192(%ebx), %xmm1 + movsd 4200(%ebx), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd 4096(%ebx), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + movl $32768, %edx + andl %ecx, %edx + andl $32767, %ecx + subl $16343, %ecx + cmpl $177, %ecx + jae .L_2TAG_PACKET_0.0.2 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + shll $3, %edx + orl %edx, %eax + movapd %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + xorpd %xmm5, %xmm5 + subsd %xmm6, %xmm3 + movapd 4112(%ebx), %xmm4 + addsd %xmm1, %xmm2 + movapd 4128(%ebx), %xmm6 + subsd %xmm3, %xmm7 + movl $32704, %edx + pinsrw $3, %edx, %xmm5 + movapd 4144(%ebx), %xmm1 + addsd %xmm7, %xmm2 + movl $127, %edx + andl %eax, %edx + addl %edx, %edx + shrl $3, %eax + andl $65520, %eax + addl $16352, %eax + xorpd %xmm0, %xmm0 + cmpl $161, %ecx + jae .L_2TAG_PACKET_1.0.2 + pshufd $68, %xmm5, %xmm5 + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + psubw %xmm0, %xmm5 + mulpd (%ebx,%edx,8), %xmm0 + mulpd 2048(%ebx,%edx,8), %xmm5 + pshufd $68, %xmm2, %xmm3 + movapd 4160(%ebx), %xmm7 + pshufd $68, %xmm2, %xmm2 + mulpd %xmm3, %xmm3 + mulpd %xmm2, %xmm4 + mulpd %xmm2, %xmm6 + mulpd 4176(%ebx), %xmm2 + mulpd %xmm3, %xmm1 + mulpd %xmm3, %xmm7 + mulpd %xmm3, %xmm4 + mulpd %xmm3, %xmm1 + addpd %xmm7, %xmm6 + movapd %xmm0, %xmm7 + addpd %xmm1, %xmm4 + shufpd $0, %xmm5, %xmm7 + subpd %xmm5, %xmm0 + mulpd %xmm7, %xmm2 + addpd %xmm6, %xmm4 + subsd %xmm0, %xmm7 + mulpd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + subsd %xmm5, %xmm7 + addpd %xmm2, %xmm4 + addsd %xmm6, %xmm7 + pshufd $238, %xmm4, %xmm2 + addsd %xmm7, %xmm2 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_1.0.2: + subl $16352, %eax + movl %eax, %ecx + andl $32752, %eax + shrl $1, %eax + andl $65520, %eax + subl %eax, %ecx + addl $16352, %eax + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + mulpd (%ebx,%edx,8), %xmm0 + pshufd $68, %xmm2, %xmm3 + movsd 4160(%ebx), %xmm7 + mulsd %xmm3, %xmm3 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm6 + mulsd 4176(%ebx), %xmm2 + mulsd %xmm3, %xmm1 + mulsd %xmm3, %xmm7 + mulsd %xmm3, %xmm4 + addl $16368, %ecx + pinsrw $3, %ecx, %xmm5 + mulsd %xmm3, %xmm1 + addsd %xmm7, %xmm6 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + addsd %xmm6, %xmm4 + mulsd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm6, %xmm4 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm5, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + movl $127, %edx + cmpl $32752, %eax + je .L_2TAG_PACKET_3.0.2 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_0.0.2: + addl $16343, %ecx + cmpl $16343, %ecx + ja .L_2TAG_PACKET_4.0.2 + cmpl $15856, %ecx + jb .L_2TAG_PACKET_5.0.2 + movapd 4208(%ebx), %xmm1 + pshufd $68, %xmm0, %xmm6 + mulpd %xmm5, %xmm5 + movapd 4224(%ebx), %xmm2 + pshufd $68, %xmm0, %xmm7 + movapd 4240(%ebx), %xmm3 + pshufd $68, %xmm0, %xmm4 + andpd 4256(%ebx), %xmm6 + mulpd %xmm5, %xmm1 + mulsd %xmm5, %xmm2 + subpd %xmm6, %xmm4 + mulpd %xmm5, %xmm7 + addpd %xmm3, %xmm1 + pshufd $68, %xmm6, %xmm3 + mulpd %xmm5, %xmm5 + mulsd %xmm7, %xmm2 + mulpd %xmm7, %xmm1 + pshufd $68, %xmm0, %xmm7 + mulsd %xmm6, %xmm6 + addsd %xmm7, %xmm7 + mulsd %xmm4, %xmm4 + mulpd %xmm5, %xmm1 + addsd %xmm0, %xmm7 + mulsd %xmm3, %xmm6 + mulsd %xmm3, %xmm7 + pshufd $238, %xmm1, %xmm3 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm2, %xmm3 + pshufd $238, %xmm2, %xmm2 + addsd %xmm4, %xmm7 + movapd %xmm0, %xmm4 + mulsd %xmm2, %xmm6 + mulsd %xmm5, %xmm7 + addsd %xmm6, %xmm0 + mulsd %xmm2, %xmm7 + subsd %xmm0, %xmm4 + addsd %xmm7, %xmm1 + addsd %xmm4, %xmm6 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_5.0.2: + cmpl $16, %ecx + jae .L_2TAG_PACKET_6.0.2 + movapd %xmm0, %xmm1 + mulsd %xmm1, %xmm1 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm2, %xmm2 + movl $17392, %ecx + pinsrw $3, %ecx, %xmm2 + xorpd %xmm3, %xmm3 + movl $15344, %edx + pinsrw $3, %edx, %xmm3 + mulsd %xmm0, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm3, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_4.0.2: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_7.0.2 + xorpd %xmm0, %xmm0 + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + orl %edx, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + movl $127, %edx +.L_2TAG_PACKET_3.0.2: + movsd %xmm0, (%esp) + movsd 112(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + movl $32768, %eax + pinsrw $3, %eax, %xmm1 + andnpd %xmm0, %xmm1 + mulsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_2.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_8.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(sinh) +# -- End sinh + +# Start file scope ASM +.weak sinhl +.equ sinhl, sinh +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 3706687593 + .long 1073526560 + .long 3521726940 + .long 1014301643 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .long 3607404736 + .long 1044146952 + .long 3607404736 + .long 3191630600 + .long 4277811695 + .long 1063661122 + .long 4277811695 + .long 3211144770 + .long 2140175755 + .long 1033864261 + .long 2140175755 + .long 1033864261 + .long 4289495988 + .long 1054113747 + .long 4289495988 + .long 1054113747 + .long 4277811695 + .long 1064709698 + .long 4277811695 + .long 1064709698 + .long 1610612736 + .long 1080497479 + .long 4166901572 + .long 1053077003 + .long 329805064 + .long 1038488134 + .long 2773927730 + .long 1053236707 + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1069897045 + .long 1744127201 + .long 1046144581 + .long 436314137 + .long 1059717536 + .long 0 + .long 4294967280 + .long 0 + .long 4294967280 + .long 4160749568 + .long 2147483647 + .type static_const_table,@object + .size static_const_table,4280 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/libm_reduce_pi04l.S b/libm/x86/libm_reduce_pi04l.S new file mode 100644 index 000000000..af6a7d05b --- /dev/null +++ b/libm/x86/libm_reduce_pi04l.S @@ -0,0 +1,3718 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +# -- Begin __libm_reduce_pi04l + .text + .align 16,0x90 + .hidden __libm_reduce_pi04l + .globl __libm_reduce_pi04l +__libm_reduce_pi04l: +# parameter 1: 8 + %ebp +# parameter 2: 20 + %ebp +# parameter 3: 24 + %ebp +..B1.1: + pushl %ebp + movl %esp, %ebp + andl $-16, %esp + pushl %esi + pushl %edi + pushl %ebx + subl $20, %esp + movzwl 16(%ebp), %ebx + andl $32767, %ebx + movl 20(%ebp), %eax + cmpl $16413, %ebx + movl 24(%ebp), %esi + call ..L2 +..L2: + popl %edi + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%edi), %edi + movl %eax, 4(%esp) + jge ..B1.8 +..B1.2: + fldt 8(%ebp) + fldl __4onpi_d@GOTOFF(%edi) + fmul %st(1), %st + fstpt 8(%esp) + movzwl 16(%esp), %ecx + negl %ecx + addl $30, %ecx + movl 12(%esp), %eax + shrl %cl, %eax + cmpl $0, 4(%esp) + jne ..B1.4 +..B1.3: + lea 1(%eax), %ecx + andl $-2, %ecx + jmp ..B1.5 +..B1.4: + movl %eax, %ecx + addl 4(%esp), %eax + movl %eax, %edx + andl $1, %edx + addl %edx, %ecx +..B1.5: + fldl _TWO_32H@GOTOFF(%edi) + cmpl $16400, %ebx + movl %ecx, (%esp) + fildl (%esp) + jge ..B1.7 +..B1.6: + fldl _pi04_3d@GOTOFF(%edi) + fmul %st(1), %st + fsubrp %st, %st(3) + fxch %st(1) + fmul %st(2), %st + fld %st(2) + fadd %st(1), %st + fsubp %st, %st(1) + fld %st(0) + fxch %st(1) + fsubr %st, %st(3) + fldl 8+_pi04_3d@GOTOFF(%edi) + fmul %st(3), %st + fsubr %st, %st(2) + fxch %st(1) + fsub %st(2), %st + fsubp %st, %st(1) + faddp %st, %st(3) + fldl 16+_pi04_3d@GOTOFF(%edi) + fmulp %st, %st(2) + fld %st(1) + fsubr %st(1), %st + fsubr %st, %st(1) + fxch %st(2) + fsubrp %st, %st(1) + faddp %st, %st(2) + fxch %st(1) + jmp ..B1.15 +..B1.7: + fldl _pi04_5d@GOTOFF(%edi) + fmul %st(1), %st + fsubrp %st, %st(3) + fxch %st(1) + fmul %st(2), %st + fld %st(2) + fadd %st(1), %st + fsubp %st, %st(1) + fld %st(0) + fxch %st(1) + fsubr %st, %st(3) + fldl 8+_pi04_5d@GOTOFF(%edi) + fmul %st(3), %st + fsubr %st, %st(2) + fxch %st(1) + fsub %st(2), %st + fsubp %st, %st(1) + faddp %st, %st(3) + fldl 16+_pi04_5d@GOTOFF(%edi) + fmul %st(2), %st + fld %st(0) + fsubr %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + fsubrp %st, %st(2) + fxch %st(1) + faddp %st, %st(3) + fldl 24+_pi04_5d@GOTOFF(%edi) + fmul %st(2), %st + fld %st(0) + fsubr %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + fsubrp %st, %st(2) + fxch %st(1) + faddp %st, %st(3) + fldl 32+_pi04_5d@GOTOFF(%edi) + fmulp %st, %st(2) + fld %st(1) + fsubr %st(1), %st + fsubr %st, %st(1) + fxch %st(2) + fsubrp %st, %st(1) + faddp %st, %st(2) + fxch %st(1) + jmp ..B1.15 +..B1.8: + fldt 8(%ebp) + addl $-16417, %ebx + fmull _SCALE@GOTOFF(%edi) + movl $-2078209981, %eax + imull %ebx + addl %ebx, %edx + movl %ebx, %ecx + sarl $4, %edx + sarl $31, %ecx + subl %ecx, %edx + movl %edx, %eax + shll $5, %eax + fstpt 8(%ebp) + fldt 8(%ebp) + subl %edx, %eax + movl $0, 8(%ebp) + subl %eax, %ebx + fldt 8(%ebp) + cmpl $17, %ebx + fsubr %st, %st(1) + jl ..B1.10 +..B1.9: + lea (,%edx,8), %eax + lea (%eax,%edx,4), %ecx + incl %edx + fldt __4onpi_31l@GOTOFF(%ecx,%edi) + fmul %st(2), %st + fldt 12+__4onpi_31l@GOTOFF(%edi,%ecx) + fmul %st(2), %st + fld %st(0) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fld %st(1) + fadd %st(1), %st + fstpt 8(%esp) + andl $-16777216, 8(%esp) + fldt 8(%esp) + fsubrp %st, %st(1) + jmp ..B1.11 +..B1.10: + fldl _zeros@GOTOFF(%edi) + fld %st(0) +..B1.11: + fld %st(0) + lea (,%edx,8), %eax + fld %st(3) + lea (%eax,%edx,4), %edx + fldt __4onpi_31l@GOTOFF(%edx,%edi) + fmul %st(6), %st + movl %edx, (%esp) + fadd %st, %st(2) + fxch %st(2) + fsubr %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fldt 12+__4onpi_31l@GOTOFF(%edx,%edi) + fmul %st, %st(2) + fld %st(2) + fadd %st(2), %st + fld %st(0) + fxch %st(1) + fsub %st, %st(3) + fxch %st(3) + fchs + faddp %st, %st(4) + fxch %st(3) + faddp %st, %st(4) + fxch %st(2) + fadd %st(3), %st + fxch %st(2) + fmul %st(5), %st + fadd %st, %st(2) + fld %st(4) + fldt 24+__4onpi_31l@GOTOFF(%edx,%edi) + fmul %st, %st(1) + fxch %st(1) + fadd %st, %st(4) + fxch %st(4) + fstpt 8(%esp) + movzwl 16(%esp), %ebx + andl $32767, %ebx + cmpl $16415, %ebx + jge ..B1.13 +..B1.12: + negl %ebx + addl $30, %ebx + movl %ebx, %ecx + movl 12(%esp), %eax + shrl %cl, %eax + shll %cl, %eax + movl %eax, 12(%esp) + movl $0, 8(%esp) + shrl %cl, %eax + jmp ..B1.14 +..B1.13: + negl %ebx + addl $30, %ebx + movl %ebx, %ecx + movl 8(%esp), %edx + shrl %cl, %edx + shll %cl, %edx + negl %ecx + movl 12(%esp), %eax + shll %cl, %eax + movl %ebx, %ecx + movl %edx, 8(%esp) + shrl %cl, %edx + orl %edx, %eax +..B1.14: + fldt 8(%esp) + addl 4(%esp), %eax + fsubrp %st, %st(3) + fmul %st(6), %st + fld %st(4) + movl %eax, %edx + andl $1, %edx + fadd %st(3), %st + movl (%esp), %ecx + fsubr %st, %st(3) + fxch %st(3) + faddp %st, %st(5) + fld %st(1) + fxch %st(3) + faddl zero_none@GOTOFF(%edi,%edx,8) + fadd %st, %st(3) + fsub %st(3), %st + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(4) + fld %st(2) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(3) + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(3) + fld %st(0) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fld %st(2) + fldt 36+__4onpi_31l@GOTOFF(%ecx,%edi) + fmul %st, %st(1) + fld %st(1) + fadd %st(3), %st + fsubr %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fxch %st(1) + fmul %st(4), %st + fld %st(0) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fld %st(2) + fldt 48+__4onpi_31l@GOTOFF(%ecx,%edi) + fmul %st, %st(1) + fld %st(1) + fadd %st(3), %st + fsubr %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fld %st(3) + fxch %st(2) + fmul %st(5), %st + fldt 60+__4onpi_31l@GOTOFF(%ecx,%edi) + fmul %st, %st(3) + fxch %st(3) + faddp %st, %st(1) + fld %st(0) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(3) + fld %st(3) + fxch %st(2) + fmul %st(5), %st + fldt 72+__4onpi_31l@GOTOFF(%ecx,%edi) + fmul %st, %st(3) + fxch %st(3) + faddp %st, %st(1) + fld %st(0) + fadd %st(2), %st + fsubr %st, %st(2) + fxch %st(1) + faddp %st, %st(2) + fxch %st(1) + faddp %st, %st(3) + fxch %st(1) + fmulp %st, %st(4) + fldt 84+__4onpi_31l@GOTOFF(%edi,%ecx) + fmulp %st, %st(3) + fxch %st(2) + faddp %st, %st(3) + fld %st(2) + fadd %st(2), %st + fldl _TWO_32H@GOTOFF(%edi) + fmul %st(1), %st + fadd %st, %st(1) + fsubrp %st, %st(1) + fsubr %st, %st(2) + fxch %st(3) + faddp %st, %st(2) + faddp %st, %st(1) + fldl _pi04_2d@GOTOFF(%edi) + fld %st(0) + fmul %st(2), %st + fxch %st(2) + fadd %st(3), %st + fxch %st(1) + fmulp %st, %st(3) + fmull 8+_pi04_2d@GOTOFF(%edi) + faddp %st, %st(1) +..B1.15: + fldl _TWO_12H@GOTOFF(%edi) + fld %st(2) + fadd %st(2), %st + fmul %st, %st(1) + fstpt 8(%esp) + fldt 8(%esp) + fadd %st(1), %st + fsubp %st, %st(1) + fstl (%esi) + fsubrp %st, %st(2) + faddp %st, %st(1) + fstpl 8(%esi) + addl $20, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret + .align 16,0x90 + .type __libm_reduce_pi04l,@function + .size __libm_reduce_pi04l,.-__libm_reduce_pi04l + .data +# -- End __libm_reduce_pi04l + .section .rodata, "a" + .align 8 + .align 8 +zero_none: + .long 0x00000000,0x00000000 + .long 0x00000000,0xbff00000 + .type zero_none,@object + .size zero_none,16 + .align 4 +__4onpi_d: + .long 1841940611 + .long 1072979760 + .type __4onpi_d,@object + .size __4onpi_d,8 + .align 4 +_TWO_32H: + .long 0 + .long 1106771968 + .type _TWO_32H,@object + .size _TWO_32H,8 + .align 4 +_pi04_3d: + .long 1413754112 + .long 1072243195 + .long 2563527040 + .long 1021855384 + .long 3417685868 + .long 3118450936 + .type _pi04_3d,@object + .size _pi04_3d,24 + .align 4 +_pi04_5d: + .long 1413480448 + .long 1072243195 + .long 442499072 + .long 1036039265 + .long 771751936 + .long 999496074 + .long 622854144 + .long 963347354 + .long 1396597664 + .long 922906692 + .type _pi04_5d,@object + .size _pi04_5d,40 + .align 4 +_SCALE: + .long 0 + .long 845152256 + .type _SCALE,@object + .size _SCALE,8 + .align 4 +_zeros: + .long 0 + .long 0 + .long 0 + .long 2147483648 + .type _zeros,@object + .size _zeros,16 + .align 4 +_pi04_2d: + .long 1413480448 + .long 1072243195 + .long 442655537 + .long 1036039265 + .type _pi04_2d,@object + .size _pi04_2d,16 + .align 4 +_TWO_12H: + .long 0 + .long 1085800448 + .type _TWO_12H,@object + .size _TWO_12H,8 + .align 2 +__4onpi_31l: + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 33646 + .word 41721 + .word 16600 + .word 0 + .word 0 + .word 0 + .word 10832 + .word 40072 + .word 16567 + .word 0 + .word 0 + .word 0 + .word 44008 + .word 65043 + .word 16537 + .word 0 + .word 0 + .word 0 + .word 28384 + .word 64154 + .word 16505 + .word 0 + .word 0 + .word 0 + .word 38272 + .word 56162 + .word 16472 + .word 0 + .word 0 + .word 0 + .word 7298 + .word 51682 + .word 16445 + .word 0 + .word 0 + .word 0 + .word 45504 + .word 65320 + .word 16409 + .word 0 + .word 0 + .word 0 + .word 61204 + .word 44922 + .word 16382 + .word 0 + .word 0 + .word 0 + .word 18652 + .word 50030 + .word 16351 + .word 0 + .word 0 + .word 0 + .word 14144 + .word 59657 + .word 16318 + .word 0 + .word 0 + .word 0 + .word 37450 + .word 47105 + .word 16290 + .word 0 + .word 0 + .word 0 + .word 14898 + .word 56641 + .word 16259 + .word 0 + .word 0 + .word 0 + .word 34680 + .word 34623 + .word 16226 + .word 0 + .word 0 + .word 0 + .word 4760 + .word 45515 + .word 16196 + .word 0 + .word 0 + .word 0 + .word 41480 + .word 40187 + .word 16166 + .word 0 + .word 0 + .word 0 + .word 47852 + .word 55252 + .word 16134 + .word 0 + .word 0 + .word 0 + .word 54072 + .word 35081 + .word 16103 + .word 0 + .word 0 + .word 0 + .word 26808 + .word 57421 + .word 16071 + .word 0 + .word 0 + .word 0 + .word 20068 + .word 57232 + .word 16042 + .word 0 + .word 0 + .word 0 + .word 49576 + .word 60188 + .word 16009 + .word 0 + .word 0 + .word 0 + .word 10016 + .word 52861 + .word 15978 + .word 0 + .word 0 + .word 0 + .word 30648 + .word 35825 + .word 15947 + .word 0 + .word 0 + .word 0 + .word 60542 + .word 58528 + .word 15918 + .word 0 + .word 0 + .word 0 + .word 65468 + .word 61743 + .word 15887 + .word 0 + .word 0 + .word 0 + .word 64960 + .word 45825 + .word 15851 + .word 0 + .word 0 + .word 0 + .word 50604 + .word 38792 + .word 15825 + .word 0 + .word 0 + .word 0 + .word 18394 + .word 33435 + .word 15794 + .word 0 + .word 0 + .word 0 + .word 55780 + .word 42703 + .word 15763 + .word 0 + .word 0 + .word 0 + .word 14056 + .word 63841 + .word 15731 + .word 0 + .word 0 + .word 0 + .word 63080 + .word 62563 + .word 15700 + .word 0 + .word 0 + .word 0 + .word 20840 + .word 62207 + .word 15669 + .word 0 + .word 0 + .word 0 + .word 30094 + .word 59983 + .word 15639 + .word 0 + .word 0 + .word 0 + .word 61818 + .word 60389 + .word 15608 + .word 0 + .word 0 + .word 0 + .word 40186 + .word 40579 + .word 15577 + .word 0 + .word 0 + .word 0 + .word 42170 + .word 58004 + .word 15546 + .word 0 + .word 0 + .word 0 + .word 55276 + .word 39678 + .word 15514 + .word 0 + .word 0 + .word 0 + .word 44672 + .word 36806 + .word 15481 + .word 0 + .word 0 + .word 0 + .word 13060 + .word 34144 + .word 15452 + .word 0 + .word 0 + .word 0 + .word 28016 + .word 57231 + .word 15419 + .word 0 + .word 0 + .word 0 + .word 16112 + .word 44995 + .word 15390 + .word 0 + .word 0 + .word 0 + .word 53464 + .word 33387 + .word 15358 + .word 0 + .word 0 + .word 0 + .word 7296 + .word 60751 + .word 15325 + .word 0 + .word 0 + .word 0 + .word 29452 + .word 45231 + .word 15297 + .word 0 + .word 0 + .word 0 + .word 26208 + .word 49689 + .word 15266 + .word 0 + .word 0 + .word 0 + .word 37900 + .word 44002 + .word 15235 + .word 0 + .word 0 + .word 0 + .word 57340 + .word 33800 + .word 15204 + .word 0 + .word 0 + .word 0 + .word 27544 + .word 50178 + .word 15173 + .word 0 + .word 0 + .word 0 + .word 6168 + .word 40132 + .word 15142 + .word 0 + .word 0 + .word 0 + .word 21392 + .word 43702 + .word 15109 + .word 0 + .word 0 + .word 0 + .word 45168 + .word 54372 + .word 15081 + .word 0 + .word 0 + .word 0 + .word 8986 + .word 40688 + .word 15050 + .word 0 + .word 0 + .word 0 + .word 1648 + .word 53745 + .word 15018 + .word 0 + .word 0 + .word 0 + .word 30520 + .word 55795 + .word 14986 + .word 0 + .word 0 + .word 0 + .word 43060 + .word 32914 + .word 14956 + .word 0 + .word 0 + .word 0 + .word 46172 + .word 52771 + .word 14925 + .word 0 + .word 0 + .word 0 + .word 14056 + .word 45285 + .word 14893 + .word 0 + .word 0 + .word 0 + .word 53590 + .word 44868 + .word 14864 + .word 0 + .word 0 + .word 0 + .word 40786 + .word 35970 + .word 14833 + .word 0 + .word 0 + .word 0 + .word 33436 + .word 65411 + .word 14801 + .word 0 + .word 0 + .word 0 + .word 32006 + .word 61382 + .word 14771 + .word 0 + .word 0 + .word 0 + .word 37856 + .word 45239 + .word 14738 + .word 0 + .word 0 + .word 0 + .word 60894 + .word 49555 + .word 14709 + .word 0 + .word 0 + .word 0 + .word 48064 + .word 53065 + .word 14674 + .word 0 + .word 0 + .word 0 + .word 48624 + .word 54844 + .word 14647 + .word 0 + .word 0 + .word 0 + .word 7988 + .word 40762 + .word 14616 + .word 0 + .word 0 + .word 0 + .word 16270 + .word 58745 + .word 14585 + .word 0 + .word 0 + .word 0 + .word 37064 + .word 50168 + .word 14553 + .word 0 + .word 0 + .word 0 + .word 18624 + .word 63736 + .word 14519 + .word 0 + .word 0 + .word 0 + .word 60758 + .word 44966 + .word 14492 + .word 0 + .word 0 + .word 0 + .word 33304 + .word 47465 + .word 14461 + .word 0 + .word 0 + .word 0 + .word 6226 + .word 60503 + .word 14430 + .word 0 + .word 0 + .word 0 + .word 26380 + .word 54900 + .word 14398 + .word 0 + .word 0 + .word 0 + .word 44352 + .word 49860 + .word 14368 + .word 0 + .word 0 + .word 0 + .word 11904 + .word 42646 + .word 14337 + .word 0 + .word 0 + .word 0 + .word 55296 + .word 50279 + .word 14300 + .word 0 + .word 0 + .word 0 + .word 15474 + .word 50606 + .word 14275 + .word 0 + .word 0 + .word 0 + .word 45062 + .word 44137 + .word 14244 + .word 0 + .word 0 + .word 0 + .word 13472 + .word 36063 + .word 14210 + .word 0 + .word 0 + .word 0 + .word 40658 + .word 53854 + .word 14182 + .word 0 + .word 0 + .word 0 + .word 28652 + .word 43690 + .word 14151 + .word 0 + .word 0 + .word 0 + .word 24640 + .word 64348 + .word 14118 + .word 0 + .word 0 + .word 0 + .word 30284 + .word 41980 + .word 14088 + .word 0 + .word 0 + .word 0 + .word 45652 + .word 38222 + .word 14057 + .word 0 + .word 0 + .word 0 + .word 15900 + .word 62940 + .word 14026 + .word 0 + .word 0 + .word 0 + .word 31494 + .word 50741 + .word 13996 + .word 0 + .word 0 + .word 0 + .word 43194 + .word 55096 + .word 13965 + .word 0 + .word 0 + .word 0 + .word 1740 + .word 45646 + .word 13933 + .word 0 + .word 0 + .word 0 + .word 28936 + .word 44150 + .word 13903 + .word 0 + .word 0 + .word 0 + .word 8996 + .word 42955 + .word 13872 + .word 0 + .word 0 + .word 0 + .word 44096 + .word 61205 + .word 13839 + .word 0 + .word 0 + .word 0 + .word 44614 + .word 54550 + .word 13810 + .word 0 + .word 0 + .word 0 + .word 24926 + .word 57347 + .word 13779 + .word 0 + .word 0 + .word 0 + .word 3312 + .word 61415 + .word 13745 + .word 0 + .word 0 + .word 0 + .word 64336 + .word 63884 + .word 13717 + .word 0 + .word 0 + .word 0 + .word 2748 + .word 62259 + .word 13685 + .word 0 + .word 0 + .word 0 + .word 56672 + .word 51775 + .word 13653 + .word 0 + .word 0 + .word 0 + .word 32438 + .word 55423 + .word 13624 + .word 0 + .word 0 + .word 0 + .word 17652 + .word 45713 + .word 13593 + .word 0 + .word 0 + .word 0 + .word 65408 + .word 51586 + .word 13558 + .word 0 + .word 0 + .word 0 + .word 40416 + .word 55736 + .word 13531 + .word 0 + .word 0 + .word 0 + .word 52546 + .word 37734 + .word 13500 + .word 0 + .word 0 + .word 0 + .word 48880 + .word 64238 + .word 13469 + .word 0 + .word 0 + .word 0 + .word 56004 + .word 46833 + .word 13437 + .word 0 + .word 0 + .word 0 + .word 61760 + .word 38110 + .word 13405 + .word 0 + .word 0 + .word 0 + .word 41496 + .word 35659 + .word 13374 + .word 0 + .word 0 + .word 0 + .word 25472 + .word 41269 + .word 13342 + .word 0 + .word 0 + .word 0 + .word 45444 + .word 36018 + .word 13314 + .word 0 + .word 0 + .word 0 + .word 6510 + .word 56417 + .word 13283 + .word 0 + .word 0 + .word 0 + .word 3072 + .word 56837 + .word 13252 + .word 0 + .word 0 + .word 0 + .word 61338 + .word 48440 + .word 13221 + .word 0 + .word 0 + .word 0 + .word 49568 + .word 57088 + .word 13189 + .word 0 + .word 0 + .word 0 + .word 4240 + .word 39283 + .word 13157 + .word 0 + .word 0 + .word 0 + .word 18562 + .word 33537 + .word 13128 + .word 0 + .word 0 + .word 0 + .word 31422 + .word 44487 + .word 13097 + .word 0 + .word 0 + .word 0 + .word 31930 + .word 60459 + .word 13066 + .word 0 + .word 0 + .word 0 + .word 42272 + .word 36641 + .word 13033 + .word 0 + .word 0 + .word 0 + .word 28940 + .word 36150 + .word 13004 + .word 0 + .word 0 + .word 0 + .word 21010 + .word 50925 + .word 12973 + .word 0 + .word 0 + .word 0 + .word 29448 + .word 64886 + .word 12941 + .word 0 + .word 0 + .word 0 + .word 20500 + .word 54600 + .word 12911 + .word 0 + .word 0 + .word 0 + .word 54258 + .word 46233 + .word 12880 + .word 0 + .word 0 + .word 0 + .word 32628 + .word 42502 + .word 12848 + .word 0 + .word 0 + .word 0 + .word 61608 + .word 55072 + .word 12818 + .word 0 + .word 0 + .word 0 + .word 6236 + .word 57871 + .word 12786 + .word 0 + .word 0 + .word 0 + .word 42408 + .word 34616 + .word 12756 + .word 0 + .word 0 + .word 0 + .word 56692 + .word 51963 + .word 12724 + .word 0 + .word 0 + .word 0 + .word 39094 + .word 48526 + .word 12694 + .word 0 + .word 0 + .word 0 + .word 59870 + .word 38783 + .word 12663 + .word 0 + .word 0 + .word 0 + .word 26560 + .word 33165 + .word 12632 + .word 0 + .word 0 + .word 0 + .word 58666 + .word 37666 + .word 12601 + .word 0 + .word 0 + .word 0 + .word 58728 + .word 39788 + .word 12569 + .word 0 + .word 0 + .word 0 + .word 9048 + .word 43530 + .word 12538 + .word 0 + .word 0 + .word 0 + .word 58496 + .word 57659 + .word 12505 + .word 0 + .word 0 + .word 0 + .word 12324 + .word 37025 + .word 12477 + .word 0 + .word 0 + .word 0 + .word 38432 + .word 55856 + .word 12445 + .word 0 + .word 0 + .word 0 + .word 35210 + .word 45960 + .word 12415 + .word 0 + .word 0 + .word 0 + .word 45644 + .word 51345 + .word 12384 + .word 0 + .word 0 + .word 0 + .word 32854 + .word 63883 + .word 12353 + .word 0 + .word 0 + .word 0 + .word 29348 + .word 41450 + .word 12321 + .word 0 + .word 0 + .word 0 + .word 27384 + .word 38024 + .word 12289 + .word 0 + .word 0 + .word 0 + .word 57356 + .word 57291 + .word 12260 + .word 0 + .word 0 + .word 0 + .word 61164 + .word 51521 + .word 12228 + .word 0 + .word 0 + .word 0 + .word 21472 + .word 59151 + .word 12196 + .word 0 + .word 0 + .word 0 + .word 36704 + .word 39943 + .word 12165 + .word 0 + .word 0 + .word 0 + .word 45864 + .word 50151 + .word 12136 + .word 0 + .word 0 + .word 0 + .word 37892 + .word 63687 + .word 12104 + .word 0 + .word 0 + .word 0 + .word 14560 + .word 51615 + .word 12073 + .word 0 + .word 0 + .word 0 + .word 38776 + .word 55684 + .word 12041 + .word 0 + .word 0 + .word 0 + .word 59136 + .word 53570 + .word 12010 + .word 0 + .word 0 + .word 0 + .word 55556 + .word 37955 + .word 11981 + .word 0 + .word 0 + .word 0 + .word 54458 + .word 44670 + .word 11950 + .word 0 + .word 0 + .word 0 + .word 36446 + .word 34084 + .word 11919 + .word 0 + .word 0 + .word 0 + .word 46416 + .word 51693 + .word 11886 + .word 0 + .word 0 + .word 0 + .word 21432 + .word 34376 + .word 11857 + .word 0 + .word 0 + .word 0 + .word 56036 + .word 34809 + .word 11826 + .word 0 + .word 0 + .word 0 + .word 10562 + .word 55654 + .word 11795 + .word 0 + .word 0 + .word 0 + .word 20264 + .word 53052 + .word 11763 + .word 0 + .word 0 + .word 0 + .word 64064 + .word 50415 + .word 11729 + .word 0 + .word 0 + .word 0 + .word 17444 + .word 48295 + .word 11701 + .word 0 + .word 0 + .word 0 + .word 11874 + .word 52677 + .word 11671 + .word 0 + .word 0 + .word 0 + .word 60808 + .word 39275 + .word 11640 + .word 0 + .word 0 + .word 0 + .word 31792 + .word 55677 + .word 11606 + .word 0 + .word 0 + .word 0 + .word 60710 + .word 49006 + .word 11578 + .word 0 + .word 0 + .word 0 + .word 10520 + .word 37403 + .word 11546 + .word 0 + .word 0 + .word 0 + .word 20004 + .word 59470 + .word 11515 + .word 0 + .word 0 + .word 0 + .word 28096 + .word 37612 + .word 11485 + .word 0 + .word 0 + .word 0 + .word 20268 + .word 44280 + .word 11453 + .word 0 + .word 0 + .word 0 + .word 50740 + .word 61588 + .word 11422 + .word 0 + .word 0 + .word 0 + .word 56432 + .word 58835 + .word 11390 + .word 0 + .word 0 + .word 0 + .word 8576 + .word 42496 + .word 11355 + .word 0 + .word 0 + .word 0 + .word 33920 + .word 54912 + .word 11324 + .word 0 + .word 0 + .word 0 + .word 35620 + .word 54843 + .word 11298 + .word 0 + .word 0 + .word 0 + .word 736 + .word 43591 + .word 11264 + .word 0 + .word 0 + .word 0 + .word 39632 + .word 61060 + .word 11235 + .word 0 + .word 0 + .word 0 + .word 63452 + .word 63129 + .word 11206 + .word 0 + .word 0 + .word 0 + .word 56798 + .word 58512 + .word 11175 + .word 0 + .word 0 + .word 0 + .word 13472 + .word 46333 + .word 11141 + .word 0 + .word 0 + .word 0 + .word 37300 + .word 36598 + .word 11112 + .word 0 + .word 0 + .word 0 + .word 41952 + .word 41639 + .word 11079 + .word 0 + .word 0 + .word 0 + .word 52452 + .word 33459 + .word 11050 + .word 0 + .word 0 + .word 0 + .word 58558 + .word 33287 + .word 11020 + .word 0 + .word 0 + .word 0 + .word 7570 + .word 43843 + .word 10989 + .word 0 + .word 0 + .word 0 + .word 59416 + .word 63990 + .word 10957 + .word 0 + .word 0 + .word 0 + .word 65298 + .word 47744 + .word 10927 + .word 0 + .word 0 + .word 0 + .word 21076 + .word 34089 + .word 10896 + .word 0 + .word 0 + .word 0 + .word 7048 + .word 57394 + .word 10865 + .word 0 + .word 0 + .word 0 + .word 12872 + .word 55405 + .word 10832 + .word 0 + .word 0 + .word 0 + .word 12608 + .word 51669 + .word 10798 + .word 0 + .word 0 + .word 0 + .word 5350 + .word 48455 + .word 10772 + .word 0 + .word 0 + .word 0 + .word 23568 + .word 58692 + .word 10740 + .word 0 + .word 0 + .word 0 + .word 40784 + .word 37046 + .word 10708 + .word 0 + .word 0 + .word 0 + .word 38992 + .word 43861 + .word 10678 + .word 0 + .word 0 + .word 0 + .word 10064 + .word 40199 + .word 10648 + .word 0 + .word 0 + .word 0 + .word 26368 + .word 35771 + .word 10611 + .word 0 + .word 0 + .word 0 + .word 23994 + .word 60721 + .word 10586 + .word 0 + .word 0 + .word 0 + .word 25052 + .word 34302 + .word 10554 + .word 0 + .word 0 + .word 0 + .word 39842 + .word 54964 + .word 10524 + .word 0 + .word 0 + .word 0 + .word 11568 + .word 58277 + .word 10491 + .word 0 + .word 0 + .word 0 + .word 26160 + .word 46438 + .word 10461 + .word 0 + .word 0 + .word 0 + .word 23252 + .word 43049 + .word 10431 + .word 0 + .word 0 + .word 0 + .word 35288 + .word 58000 + .word 10400 + .word 0 + .word 0 + .word 0 + .word 14614 + .word 50216 + .word 10369 + .word 0 + .word 0 + .word 0 + .word 1168 + .word 48804 + .word 10336 + .word 0 + .word 0 + .word 0 + .word 60934 + .word 33006 + .word 10307 + .word 0 + .word 0 + .word 0 + .word 64512 + .word 62247 + .word 10272 + .word 0 + .word 0 + .word 0 + .word 59968 + .word 43121 + .word 10240 + .word 0 + .word 0 + .word 0 + .word 25560 + .word 39974 + .word 10212 + .word 0 + .word 0 + .word 0 + .word 1978 + .word 49353 + .word 10183 + .word 0 + .word 0 + .word 0 + .word 16290 + .word 38807 + .word 10152 + .word 0 + .word 0 + .word 0 + .word 8646 + .word 65226 + .word 10121 + .word 0 + .word 0 + .word 0 + .word 56896 + .word 34317 + .word 10088 + .word 0 + .word 0 + .word 0 + .word 40136 + .word 39118 + .word 10057 + .word 0 + .word 0 + .word 0 + .word 14200 + .word 41756 + .word 10026 + .word 0 + .word 0 + .word 0 + .word 59256 + .word 63202 + .word 9995 + .word 0 + .word 0 + .word 0 + .word 22968 + .word 63553 + .word 9965 + .word 0 + .word 0 + .word 0 + .word 736 + .word 44292 + .word 9933 + .word 0 + .word 0 + .word 0 + .word 23186 + .word 37760 + .word 9904 + .word 0 + .word 0 + .word 0 + .word 51008 + .word 34950 + .word 9869 + .word 0 + .word 0 + .word 0 + .word 1664 + .word 64248 + .word 9836 + .word 0 + .word 0 + .word 0 + .word 64352 + .word 35199 + .word 9811 + .word 0 + .word 0 + .word 0 + .word 34656 + .word 63747 + .word 9780 + .word 0 + .word 0 + .word 0 + .word 44330 + .word 49864 + .word 9749 + .word 0 + .word 0 + .word 0 + .word 11654 + .word 35567 + .word 9718 + .word 0 + .word 0 + .word 0 + .word 7924 + .word 58919 + .word 9686 + .word 0 + .word 0 + .word 0 + .word 2532 + .word 32800 + .word 9655 + .word 0 + .word 0 + .word 0 + .word 30024 + .word 53799 + .word 9624 + .word 0 + .word 0 + .word 0 + .word 30172 + .word 64347 + .word 9593 + .word 0 + .word 0 + .word 0 + .word 60036 + .word 51382 + .word 9562 + .word 0 + .word 0 + .word 0 + .word 58576 + .word 33093 + .word 9531 + .word 0 + .word 0 + .word 0 + .word 13888 + .word 38760 + .word 9500 + .word 0 + .word 0 + .word 0 + .word 9322 + .word 52460 + .word 9470 + .word 0 + .word 0 + .word 0 + .word 20944 + .word 41077 + .word 9437 + .word 0 + .word 0 + .word 0 + .word 17976 + .word 41861 + .word 9407 + .word 0 + .word 0 + .word 0 + .word 55176 + .word 55158 + .word 9377 + .word 0 + .word 0 + .word 0 + .word 4976 + .word 35223 + .word 9346 + .word 0 + .word 0 + .word 0 + .word 7816 + .word 39783 + .word 9314 + .word 0 + .word 0 + .word 0 + .word 27656 + .word 55669 + .word 9284 + .word 0 + .word 0 + .word 0 + .word 64944 + .word 53184 + .word 9250 + .word 0 + .word 0 + .word 0 + .word 12544 + .word 49190 + .word 9222 + .word 0 + .word 0 + .word 0 + .word 50612 + .word 44644 + .word 9190 + .word 0 + .word 0 + .word 0 + .word 8832 + .word 63111 + .word 9155 + .word 0 + .word 0 + .word 0 + .word 11744 + .word 36870 + .word 9129 + .word 0 + .word 0 + .word 0 + .word 9404 + .word 63025 + .word 9098 + .word 0 + .word 0 + .word 0 + .word 47316 + .word 43381 + .word 9067 + .word 0 + .word 0 + .word 0 + .word 55716 + .word 47433 + .word 9035 + .word 0 + .word 0 + .word 0 + .word 46414 + .word 48441 + .word 9005 + .word 0 + .word 0 + .word 0 + .word 19116 + .word 39506 + .word 8974 + .word 0 + .word 0 + .word 0 + .word 48060 + .word 53381 + .word 8943 + .word 0 + .word 0 + .word 0 + .word 57112 + .word 50739 + .word 8911 + .word 0 + .word 0 + .word 0 + .word 5840 + .word 60581 + .word 8879 + .word 0 + .word 0 + .word 0 + .word 62112 + .word 57199 + .word 8846 + .word 0 + .word 0 + .word 0 + .word 35908 + .word 59499 + .word 8818 + .word 0 + .word 0 + .word 0 + .word 13760 + .word 48116 + .word 8787 + .word 0 + .word 0 + .word 0 + .word 3136 + .word 56059 + .word 8752 + .word 0 + .word 0 + .word 0 + .word 37596 + .word 39221 + .word 8726 + .word 0 + .word 0 + .word 0 + .word 3232 + .word 48550 + .word 8691 + .word 0 + .word 0 + .word 0 + .word 22872 + .word 42749 + .word 8662 + .word 0 + .word 0 + .word 0 + .word 41948 + .word 40319 + .word 8633 + .word 0 + .word 0 + .word 0 + .word 31196 + .word 64693 + .word 8601 + .word 0 + .word 0 + .word 0 + .word 62052 + .word 52923 + .word 8571 + .word 0 + .word 0 + .word 0 + .word 2750 + .word 33544 + .word 8540 + .word 0 + .word 0 + .word 0 + .word 12462 + .word 46179 + .word 8509 + .word 0 + .word 0 + .word 0 + .word 25128 + .word 45120 + .word 8476 + .word 0 + .word 0 + .word 0 + .word 51634 + .word 62523 + .word 8447 + .word 0 + .word 0 + .word 0 + .word 15758 + .word 42163 + .word 8416 + .word 0 + .word 0 + .word 0 + .word 34022 + .word 36267 + .word 8385 + .word 0 + .word 0 + .word 0 + .word 41252 + .word 39796 + .word 8353 + .word 0 + .word 0 + .word 0 + .word 49782 + .word 54423 + .word 8323 + .word 0 + .word 0 + .word 0 + .word 25428 + .word 42086 + .word 8291 + .word 0 + .word 0 + .word 0 + .word 34388 + .word 44810 + .word 8260 + .word 0 + .word 0 + .word 0 + .word 7456 + .word 64092 + .word 8228 + .word 0 + .word 0 + .word 0 + .word 48336 + .word 62448 + .word 8196 + .word 0 + .word 0 + .word 0 + .word 60912 + .word 61622 + .word 8167 + .word 0 + .word 0 + .word 0 + .word 17852 + .word 37250 + .word 8137 + .word 0 + .word 0 + .word 0 + .word 57940 + .word 56453 + .word 8106 + .word 0 + .word 0 + .word 0 + .word 47256 + .word 59825 + .word 8074 + .word 0 + .word 0 + .word 0 + .word 3774 + .word 59120 + .word 8044 + .word 0 + .word 0 + .word 0 + .word 43448 + .word 62852 + .word 8012 + .word 0 + .word 0 + .word 0 + .word 4840 + .word 57195 + .word 7982 + .word 0 + .word 0 + .word 0 + .word 40862 + .word 52565 + .word 7951 + .word 0 + .word 0 + .word 0 + .word 1440 + .word 60474 + .word 7919 + .word 0 + .word 0 + .word 0 + .word 55520 + .word 38648 + .word 7889 + .word 0 + .word 0 + .word 0 + .word 15316 + .word 52422 + .word 7857 + .word 0 + .word 0 + .word 0 + .word 18704 + .word 47227 + .word 7827 + .word 0 + .word 0 + .word 0 + .word 48892 + .word 54283 + .word 7795 + .word 0 + .word 0 + .word 0 + .word 12670 + .word 41990 + .word 7765 + .word 0 + .word 0 + .word 0 + .word 27570 + .word 49842 + .word 7734 + .word 0 + .word 0 + .word 0 + .word 47230 + .word 47992 + .word 7703 + .word 0 + .word 0 + .word 0 + .word 41020 + .word 56253 + .word 7671 + .word 0 + .word 0 + .word 0 + .word 23404 + .word 58312 + .word 7641 + .word 0 + .word 0 + .word 0 + .word 35176 + .word 51854 + .word 7610 + .word 0 + .word 0 + .word 0 + .word 49188 + .word 59051 + .word 7578 + .word 0 + .word 0 + .word 0 + .word 16656 + .word 54507 + .word 7546 + .word 0 + .word 0 + .word 0 + .word 41320 + .word 48565 + .word 7517 + .word 0 + .word 0 + .word 0 + .word 302 + .word 42490 + .word 7486 + .word 0 + .word 0 + .word 0 + .word 26680 + .word 39967 + .word 7454 + .word 0 + .word 0 + .word 0 + .word 41304 + .word 43638 + .word 7424 + .word 0 + .word 0 + .word 0 + .word 2314 + .word 48533 + .word 7393 + .word 0 + .word 0 + .word 0 + .word 63294 + .word 35693 + .word 7362 + .word 0 + .word 0 + .word 0 + .word 24538 + .word 48319 + .word 7331 + .word 0 + .word 0 + .word 0 + .word 56296 + .word 47263 + .word 7300 + .word 0 + .word 0 + .word 0 + .word 28236 + .word 38599 + .word 7268 + .word 0 + .word 0 + .word 0 + .word 6594 + .word 62116 + .word 7238 + .word 0 + .word 0 + .word 0 + .word 47104 + .word 63573 + .word 7198 + .word 0 + .word 0 + .word 0 + .word 34812 + .word 34303 + .word 7176 + .word 0 + .word 0 + .word 0 + .word 5144 + .word 33695 + .word 7145 + .word 0 + .word 0 + .word 0 + .word 24966 + .word 55768 + .word 7114 + .word 0 + .word 0 + .word 0 + .word 62720 + .word 43946 + .word 7078 + .word 0 + .word 0 + .word 0 + .word 31542 + .word 56062 + .word 7052 + .word 0 + .word 0 + .word 0 + .word 62356 + .word 59096 + .word 7020 + .word 0 + .word 0 + .word 0 + .word 28412 + .word 40533 + .word 6990 + .word 0 + .word 0 + .word 0 + .word 24080 + .word 50467 + .word 6958 + .word 0 + .word 0 + .word 0 + .word 33296 + .word 46841 + .word 6925 + .word 0 + .word 0 + .word 0 + .word 39600 + .word 38627 + .word 6897 + .word 0 + .word 0 + .word 0 + .word 14436 + .word 37607 + .word 6865 + .word 0 + .word 0 + .word 0 + .word 39032 + .word 56421 + .word 6833 + .word 0 + .word 0 + .word 0 + .word 64032 + .word 54987 + .word 6804 + .word 0 + .word 0 + .word 0 + .word 27648 + .word 42212 + .word 6768 + .word 0 + .word 0 + .word 0 + .word 43840 + .word 46107 + .word 6739 + .word 0 + .word 0 + .word 0 + .word 17316 + .word 36574 + .word 6711 + .word 0 + .word 0 + .word 0 + .word 8928 + .word 37652 + .word 6677 + .word 0 + .word 0 + .word 0 + .word 24944 + .word 47433 + .word 6648 + .word 0 + .word 0 + .word 0 + .word 27392 + .word 57430 + .word 6616 + .word 0 + .word 0 + .word 0 + .word 39848 + .word 43340 + .word 6585 + .word 0 + .word 0 + .word 0 + .word 64160 + .word 43542 + .word 6555 + .word 0 + .word 0 + .word 0 + .word 35226 + .word 63015 + .word 6525 + .word 0 + .word 0 + .word 0 + .word 40736 + .word 64368 + .word 6493 + .word 0 + .word 0 + .word 0 + .word 42168 + .word 49526 + .word 6462 + .word 0 + .word 0 + .word 0 + .word 45596 + .word 34243 + .word 6432 + .word 0 + .word 0 + .word 0 + .word 20690 + .word 39705 + .word 6401 + .word 0 + .word 0 + .word 0 + .word 54448 + .word 46856 + .word 6368 + .word 0 + .word 0 + .word 0 + .word 64392 + .word 62736 + .word 6337 + .word 0 + .word 0 + .word 0 + .word 12780 + .word 56461 + .word 6307 + .word 0 + .word 0 + .word 0 + .word 15360 + .word 49145 + .word 6277 + .word 0 + .word 0 + .word 0 + .word 20512 + .word 49931 + .word 6242 + .word 0 + .word 0 + .word 0 + .word 54512 + .word 55820 + .word 6212 + .word 0 + .word 0 + .word 0 + .word 8402 + .word 39333 + .word 6184 + .word 0 + .word 0 + .word 0 + .word 34094 + .word 53593 + .word 6153 + .word 0 + .word 0 + .word 0 + .word 31960 + .word 38817 + .word 6121 + .word 0 + .word 0 + .word 0 + .word 16954 + .word 39291 + .word 6091 + .word 0 + .word 0 + .word 0 + .word 49600 + .word 48765 + .word 6056 + .word 0 + .word 0 + .word 0 + .word 59580 + .word 56541 + .word 6029 + .word 0 + .word 0 + .word 0 + .word 35624 + .word 44550 + .word 5998 + .word 0 + .word 0 + .word 0 + .word 4142 + .word 47316 + .word 5967 + .word 0 + .word 0 + .word 0 + .word 43520 + .word 43612 + .word 5935 + .word 0 + .word 0 + .word 0 + .word 20976 + .word 40896 + .word 5902 + .word 0 + .word 0 + .word 0 + .word 63576 + .word 57729 + .word 5874 + .word 0 + .word 0 + .word 0 + .word 37288 + .word 33122 + .word 5843 + .word 0 + .word 0 + .word 0 + .word 24384 + .word 52079 + .word 5809 + .word 0 + .word 0 + .word 0 + .word 47952 + .word 58719 + .word 5779 + .word 0 + .word 0 + .word 0 + .word 44242 + .word 55445 + .word 5750 + .word 0 + .word 0 + .word 0 + .word 61232 + .word 38847 + .word 5716 + .word 0 + .word 0 + .word 0 + .word 63232 + .word 46039 + .word 5683 + .word 0 + .word 0 + .word 0 + .word 13396 + .word 42933 + .word 5657 + .word 0 + .word 0 + .word 0 + .word 27392 + .word 43305 + .word 5622 + .word 0 + .word 0 + .word 0 + .word 40708 + .word 35319 + .word 5595 + .word 0 + .word 0 + .word 0 + .word 44408 + .word 55685 + .word 5564 + .word 0 + .word 0 + .word 0 + .word 42090 + .word 44607 + .word 5533 + .word 0 + .word 0 + .word 0 + .word 25504 + .word 53466 + .word 5500 + .word 0 + .word 0 + .word 0 + .word 24208 + .word 33149 + .word 5470 + .word 0 + .word 0 + .word 0 + .word 5268 + .word 45375 + .word 5440 + .word 0 + .word 0 + .word 0 + .word 144 + .word 40000 + .word 5409 + .word 0 + .word 0 + .word 0 + .word 56688 + .word 52358 + .word 5376 + .word 0 + .word 0 + .word 0 + .word 25848 + .word 56175 + .word 5345 + .word 0 + .word 0 + .word 0 + .word 57900 + .word 44055 + .word 5315 + .word 0 + .word 0 + .word 0 + .word 24800 + .word 43437 + .word 5283 + .word 0 + .word 0 + .word 0 + .word 17984 + .word 54872 + .word 5249 + .word 0 + .word 0 + .word 0 + .word 25744 + .word 41345 + .word 5223 + .word 0 + .word 0 + .word 0 + .word 7668 + .word 43682 + .word 5191 + .word 0 + .word 0 + .word 0 + .word 47434 + .word 36705 + .word 5161 + .word 0 + .word 0 + .word 0 + .word 20888 + .word 40323 + .word 5129 + .word 0 + .word 0 + .word 0 + .word 3962 + .word 43032 + .word 5099 + .word 0 + .word 0 + .word 0 + .word 50270 + .word 49260 + .word 5068 + .word 0 + .word 0 + .word 0 + .word 20160 + .word 64041 + .word 5032 + .word 0 + .word 0 + .word 0 + .word 25624 + .word 36013 + .word 5004 + .word 0 + .word 0 + .word 0 + .word 48328 + .word 59345 + .word 4975 + .word 0 + .word 0 + .word 0 + .word 51508 + .word 63920 + .word 4943 + .word 0 + .word 0 + .word 0 + .word 27872 + .word 39135 + .word 4913 + .word 0 + .word 0 + .word 0 + .word 13590 + .word 58857 + .word 4882 + .word 0 + .word 0 + .word 0 + .word 50880 + .word 61323 + .word 4847 + .word 0 + .word 0 + .word 0 + .word 44802 + .word 37181 + .word 4820 + .word 0 + .word 0 + .word 0 + .word 53808 + .word 57813 + .word 4789 + .word 0 + .word 0 + .word 0 + .word 64424 + .word 49714 + .word 4757 + .word 0 + .word 0 + .word 0 + .word 31652 + .word 44011 + .word 4727 + .word 0 + .word 0 + .word 0 + .word 28252 + .word 50834 + .word 4696 + .word 0 + .word 0 + .word 0 + .word 30370 + .word 38742 + .word 4665 + .word 0 + .word 0 + .word 0 + .word 57728 + .word 58403 + .word 4628 + .word 0 + .word 0 + .word 0 + .word 35900 + .word 37112 + .word 4603 + .word 0 + .word 0 + .word 0 + .word 40764 + .word 40914 + .word 4572 + .word 0 + .word 0 + .word 0 + .word 21472 + .word 46910 + .word 4541 + .word 0 + .word 0 + .word 0 + .word 17854 + .word 35030 + .word 4510 + .word 0 + .word 0 + .word 0 + .word 4378 + .word 35776 + .word 4479 + .word 0 + .word 0 + .word 0 + .word 57962 + .word 55295 + .word 4448 + .word 0 + .word 0 + .word 0 + .word 64352 + .word 56717 + .word 4415 + .word 0 + .word 0 + .word 0 + .word 37744 + .word 49416 + .word 4384 + .word 0 + .word 0 + .word 0 + .word 38484 + .word 35759 + .word 4355 + .word 0 + .word 0 + .word 0 + .word 55020 + .word 54969 + .word 4324 + .word 0 + .word 0 + .word 0 + .word 9188 + .word 55223 + .word 4292 + .word 0 + .word 0 + .word 0 + .word 6822 + .word 43079 + .word 4262 + .word 0 + .word 0 + .word 0 + .word 48870 + .word 40943 + .word 4231 + .word 0 + .word 0 + .word 0 + .word 9936 + .word 42731 + .word 4198 + .word 0 + .word 0 + .word 0 + .word 23430 + .word 43136 + .word 4169 + .word 0 + .word 0 + .word 0 + .word 4700 + .word 55665 + .word 4137 + .word 0 + .word 0 + .word 0 + .word 8056 + .word 40216 + .word 4106 + .word 0 + .word 0 + .word 0 + .word 3716 + .word 45403 + .word 4075 + .word 0 + .word 0 + .word 0 + .word 53440 + .word 49488 + .word 4044 + .word 0 + .word 0 + .word 0 + .word 41776 + .word 50188 + .word 4013 + .word 0 + .word 0 + .word 0 + .word 20994 + .word 64556 + .word 3983 + .word 0 + .word 0 + .word 0 + .word 16252 + .word 60661 + .word 3951 + .word 0 + .word 0 + .word 0 + .word 61252 + .word 65021 + .word 3920 + .word 0 + .word 0 + .word 0 + .word 16236 + .word 43803 + .word 3889 + .word 0 + .word 0 + .word 0 + .word 63064 + .word 35308 + .word 3857 + .word 0 + .word 0 + .word 0 + .word 49096 + .word 39848 + .word 3828 + .word 0 + .word 0 + .word 0 + .word 15680 + .word 48673 + .word 3797 + .word 0 + .word 0 + .word 0 + .word 48068 + .word 50957 + .word 3766 + .word 0 + .word 0 + .word 0 + .word 20824 + .word 56086 + .word 3734 + .word 0 + .word 0 + .word 0 + .word 46504 + .word 43224 + .word 3704 + .word 0 + .word 0 + .word 0 + .word 52428 + .word 46094 + .word 3672 + .word 0 + .word 0 + .word 0 + .word 17548 + .word 52066 + .word 3642 + .word 0 + .word 0 + .word 0 + .word 61738 + .word 35565 + .word 3611 + .word 0 + .word 0 + .word 0 + .word 31184 + .word 50588 + .word 3579 + .word 0 + .word 0 + .word 0 + .word 1716 + .word 52681 + .word 3549 + .word 0 + .word 0 + .word 0 + .word 44656 + .word 43385 + .word 3518 + .word 0 + .word 0 + .word 0 + .word 12668 + .word 43259 + .word 3486 + .word 0 + .word 0 + .word 0 + .word 24544 + .word 35408 + .word 3453 + .word 0 + .word 0 + .word 0 + .word 28854 + .word 65018 + .word 3425 + .word 0 + .word 0 + .word 0 + .word 5696 + .word 40391 + .word 3393 + .word 0 + .word 0 + .word 0 + .word 39580 + .word 56400 + .word 3363 + .word 0 + .word 0 + .word 0 + .word 20428 + .word 39579 + .word 3332 + .word 0 + .word 0 + .word 0 + .word 32328 + .word 36727 + .word 3301 + .word 0 + .word 0 + .word 0 + .word 34020 + .word 54457 + .word 3270 + .word 0 + .word 0 + .word 0 + .word 34016 + .word 48400 + .word 3238 + .word 0 + .word 0 + .word 0 + .word 6922 + .word 51417 + .word 3208 + .word 0 + .word 0 + .word 0 + .word 27208 + .word 64641 + .word 3176 + .word 0 + .word 0 + .word 0 + .word 1802 + .word 48886 + .word 3146 + .word 0 + .word 0 + .word 0 + .word 35440 + .word 61590 + .word 3115 + .word 0 + .word 0 + .word 0 + .word 60610 + .word 51604 + .word 3084 + .word 0 + .word 0 + .word 0 + .word 5440 + .word 38199 + .word 3050 + .word 0 + .word 0 + .word 0 + .word 6914 + .word 43867 + .word 3022 + .word 0 + .word 0 + .word 0 + .word 24000 + .word 45256 + .word 2989 + .word 0 + .word 0 + .word 0 + .word 51496 + .word 57396 + .word 2959 + .word 0 + .word 0 + .word 0 + .word 11538 + .word 46256 + .word 2929 + .word 0 + .word 0 + .word 0 + .word 36802 + .word 48020 + .word 2898 + .word 0 + .word 0 + .word 0 + .word 57910 + .word 57903 + .word 2867 + .word 0 + .word 0 + .word 0 + .word 47484 + .word 48798 + .word 2835 + .word 0 + .word 0 + .word 0 + .word 57766 + .word 57709 + .word 2805 + .word 0 + .word 0 + .word 0 + .word 54064 + .word 47856 + .word 2774 + .word 0 + .word 0 + .word 0 + .word 49340 + .word 48080 + .word 2743 + .word 0 + .word 0 + .word 0 + .word 36454 + .word 56731 + .word 2712 + .word 0 + .word 0 + .word 0 + .word 51548 + .word 63385 + .word 2681 + .word 0 + .word 0 + .word 0 + .word 56000 + .word 48716 + .word 2645 + .word 0 + .word 0 + .word 0 + .word 44992 + .word 50040 + .word 2615 + .word 0 + .word 0 + .word 0 + .word 43136 + .word 58177 + .word 2585 + .word 0 + .word 0 + .word 0 + .word 49730 + .word 33270 + .word 2557 + .word 0 + .word 0 + .word 0 + .word 29808 + .word 51063 + .word 2526 + .word 0 + .word 0 + .word 0 + .word 25276 + .word 46724 + .word 2494 + .word 0 + .word 0 + .word 0 + .word 17324 + .word 35928 + .word 2463 + .word 0 + .word 0 + .word 0 + .word 52284 + .word 63916 + .word 2433 + .word 0 + .word 0 + .word 0 + .word 5414 + .word 46704 + .word 2402 + .word 0 + .word 0 + .word 0 + .word 51710 + .word 57168 + .word 2371 + .word 0 + .word 0 + .word 0 + .word 27366 + .word 49253 + .word 2340 + .word 0 + .word 0 + .word 0 + .word 45332 + .word 53033 + .word 2309 + .word 0 + .word 0 + .word 0 + .word 54152 + .word 37418 + .word 2276 + .word 0 + .word 0 + .word 0 + .word 53076 + .word 47398 + .word 2247 + .word 0 + .word 0 + .word 0 + .word 14374 + .word 59477 + .word 2216 + .word 0 + .word 0 + .word 0 + .word 59336 + .word 33435 + .word 2184 + .word 0 + .word 0 + .word 0 + .word 21612 + .word 43267 + .word 2154 + .word 0 + .word 0 + .word 0 + .word 34664 + .word 39372 + .word 2121 + .word 0 + .word 0 + .word 0 + .word 172 + .word 62761 + .word 2091 + .word 0 + .word 0 + .word 0 + .word 9816 + .word 40715 + .word 2060 + .word 0 + .word 0 + .word 0 + .word 65116 + .word 40481 + .word 2030 + .word 0 + .word 0 + .word 0 + .word 28066 + .word 39184 + .word 1999 + .word 0 + .word 0 + .word 0 + .word 37408 + .word 63923 + .word 1968 + .word 0 + .word 0 + .word 0 + .word 15760 + .word 42305 + .word 1937 + .word 0 + .word 0 + .word 0 + .word 28236 + .word 59340 + .word 1905 + .word 0 + .word 0 + .word 0 + .word 43258 + .word 59402 + .word 1875 + .word 0 + .word 0 + .word 0 + .word 19988 + .word 50087 + .word 1844 + .word 0 + .word 0 + .word 0 + .word 63456 + .word 47833 + .word 1810 + .word 0 + .word 0 + .word 0 + .word 65184 + .word 61426 + .word 1781 + .word 0 + .word 0 + .word 0 + .word 52982 + .word 48456 + .word 1751 + .word 0 + .word 0 + .word 0 + .word 30020 + .word 62809 + .word 1719 + .word 0 + .word 0 + .word 0 + .word 9096 + .word 63061 + .word 1688 + .word 0 + .word 0 + .word 0 + .word 59648 + .word 44374 + .word 1654 + .word 0 + .word 0 + .word 0 + .word 11456 + .word 33847 + .word 1625 + .word 0 + .word 0 + .word 0 + .word 12392 + .word 50500 + .word 1595 + .word 0 + .word 0 + .word 0 + .word 56432 + .word 59196 + .word 1563 + .word 0 + .word 0 + .word 0 + .word 61008 + .word 40265 + .word 1532 + .word 0 + .word 0 + .word 0 + .word 37842 + .word 33270 + .word 1503 + .word 0 + .word 0 + .word 0 + .word 37916 + .word 44543 + .word 1471 + .word 0 + .word 0 + .word 0 + .word 11490 + .word 36421 + .word 1441 + .word 0 + .word 0 + .word 0 + .word 19040 + .word 38397 + .word 1409 + .word 0 + .word 0 + .word 0 + .word 31224 + .word 47162 + .word 1379 + .word 0 + .word 0 + .word 0 + .word 52056 + .word 41461 + .word 1347 + .word 0 + .word 0 + .word 0 + .word 10810 + .word 56374 + .word 1317 + .word 0 + .word 0 + .word 0 + .word 5358 + .word 35086 + .word 1286 + .word 0 + .word 0 + .word 0 + .word 36640 + .word 50226 + .word 1251 + .word 0 + .word 0 + .word 0 + .word 33856 + .word 45597 + .word 1222 + .word 0 + .word 0 + .word 0 + .word 21552 + .word 63128 + .word 1191 + .word 0 + .word 0 + .word 0 + .word 1198 + .word 35616 + .word 1162 + .word 0 + .word 0 + .word 0 + .word 1232 + .word 59506 + .word 1131 + .word 0 + .word 0 + .word 0 + .word 51086 + .word 34963 + .word 1100 + .word 0 + .word 0 + .word 0 + .word 3960 + .word 39061 + .word 1067 + .word 0 + .word 0 + .word 0 + .word 4564 + .word 57134 + .word 1037 + .word 0 + .word 0 + .word 0 + .word 59468 + .word 35285 + .word 1007 + .word 0 + .word 0 + .word 0 + .word 63422 + .word 35431 + .word 976 + .word 0 + .word 0 + .word 0 + .word 38352 + .word 51462 + .word 945 + .word 0 + .word 0 + .word 0 + .word 25806 + .word 55660 + .word 914 + .word 0 + .word 0 + .word 0 + .word 38842 + .word 41327 + .word 883 + .word 0 + .word 0 + .word 0 + .word 17980 + .word 50458 + .word 852 + .word 0 + .word 0 + .word 0 + .word 61194 + .word 59710 + .word 821 + .word 0 + .word 0 + .word 0 + .word 21098 + .word 42086 + .word 790 + .word 0 + .word 0 + .word 0 + .word 16704 + .word 43341 + .word 757 + .word 0 + .word 0 + .word 0 + .word 46316 + .word 52840 + .word 728 + .word 0 + .word 0 + .word 0 + .word 20386 + .word 33936 + .word 697 + .word 0 + .word 0 + .word 0 + .word 20064 + .word 51864 + .word 664 + .word 0 + .word 0 + .word 0 + .word 2268 + .word 57500 + .word 634 + .word 0 + .word 0 + .word 0 + .word 11152 + .word 51171 + .word 604 + .word 0 + .word 0 + .word 0 + .word 23164 + .word 63727 + .word 572 + .word 0 + .word 0 + .word 0 + .word 20514 + .word 40280 + .word 542 + .word 0 + .word 0 + .word 0 + .word 21818 + .word 57922 + .word 511 + .word 0 + .word 0 + .word 0 + .word 32366 + .word 46413 + .word 480 + .word 0 + .word 0 + .word 0 + .word 53972 + .word 43148 + .word 449 + .word 0 + .word 0 + .word 0 + .word 30134 + .word 65133 + .word 418 + .word 0 + .word 0 + .word 0 + .word 15282 + .word 61516 + .word 387 + .word 0 + .word 0 + .word 0 + .word 49872 + .word 49222 + .word 355 + .word 0 + .word 0 + .word 0 + .word 9484 + .word 63958 + .word 325 + .word 0 + .word 0 + .word 0 + .word 47028 + .word 35341 + .word 294 + .word 0 + .word 0 + .word 0 + .word 6770 + .word 58613 + .word 263 + .word 0 + .word 0 + .word 0 + .word 33372 + .word 43448 + .word 232 + .word 0 + .word 0 + .word 0 + .word 27792 + .word 51629 + .word 198 + .word 0 + .word 0 + .word 0 + .word 19712 + .word 53691 + .word 170 + .word 0 + .word 0 + .word 0 + .word 42144 + .word 60929 + .word 135 + .word 0 + .word 0 + .word 0 + .word 35240 + .word 48799 + .word 107 + .word 0 + .word 0 + .word 0 + .word 910 + .word 51212 + .word 77 + .word 0 + .word 0 + .word 0 + .word 65062 + .word 33668 + .word 46 + .word 0 + .word 0 + .word 0 + .word 52624 + .word 51799 + .word 14 + .word 0 + .type __4onpi_31l,@object + .size __4onpi_31l,6444 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/libm_sincos_huge.S b/libm/x86/libm_sincos_huge.S new file mode 100644 index 000000000..b43d193e5 --- /dev/null +++ b/libm/x86/libm_sincos_huge.S @@ -0,0 +1,668 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +# -- Begin __libm_sincos_huge + .text + .align 16,0x90 + .hidden __libm_sincos_huge + .globl __libm_sincos_huge +__libm_sincos_huge: +# parameter 1: 8 + %ebp +# parameter 2: 16 + %ebp +# parameter 3: 20 + %ebp +..B1.1: + pushl %ebp + movl %esp, %ebp + andl $-64, %esp + pushl %esi + pushl %edi + pushl %ebx + subl $52, %esp + movl 16(%ebp), %eax + movl 20(%ebp), %edx + movl %eax, 32(%esp) + movl %edx, 36(%esp) +..B1.2: + fnstcw 30(%esp) +..B1.3: + call ..L2 +..L2: + popl %edi + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%edi), %edi + movsd 8(%ebp), %xmm1 + movl 12(%ebp), %esi + movl %esi, %eax + andl $2147483647, %eax + andps .L_2il0floatpacket.0@GOTOFF(%edi), %xmm1 + shrl $31, %esi + movl %eax, 40(%esp) + cmpl $1104150528, %eax + movsd %xmm1, 8(%ebp) + jae ..B1.11 +..B1.4: + movsd _Pi4Inv@GOTOFF(%edi), %xmm0 + mulsd %xmm1, %xmm0 + movzwl 30(%esp), %edx + movl %edx, %eax + andl $768, %eax + movsd %xmm0, (%esp) + cmpl $768, %eax + je ..B1.42 +..B1.5: + orl $-64768, %edx + movw %dx, 28(%esp) +..B1.6: + fldcw 28(%esp) +..B1.7: + movsd 8(%ebp), %xmm1 + movl $1, %ebx +..B1.8: + movl %ebx, 12(%esp) + movl 4(%esp), %ebx + movl %ebx, %eax + movl %esi, 8(%esp) + movl %ebx, %esi + shrl $20, %esi + andl $1048575, %eax + movl %esi, %ecx + orl $1048576, %eax + negl %ecx + movl %eax, %edx + addl $19, %ecx + addl $13, %esi + movl %ecx, 24(%esp) + shrl %cl, %edx + movl %esi, %ecx + shll %cl, %eax + movl 24(%esp), %ecx + movl (%esp), %esi + shrl %cl, %esi + orl %esi, %eax + cmpl $1094713344, %ebx + movsd %xmm1, 16(%esp) + fldl 16(%esp) + cmovb %edx, %eax + movl 8(%esp), %esi + lea 1(%eax), %edx + movl %edx, %ebx + andl $-2, %ebx + movl %ebx, 16(%esp) + fildl 16(%esp) + movl 12(%esp), %ebx + cmpl $1094713344, 40(%esp) + jae ..B1.10 +..B1.9: + fldl _Pi4x3@GOTOFF(%edi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 8+_Pi4x3@GOTOFF(%edi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 16+_Pi4x3@GOTOFF(%edi) + fmulp %st, %st(1) + faddp %st, %st(1) + jmp ..B1.17 +..B1.10: + fldl _Pi4x4@GOTOFF(%edi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 8+_Pi4x4@GOTOFF(%edi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 16+_Pi4x4@GOTOFF(%edi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 24+_Pi4x4@GOTOFF(%edi) + fmulp %st, %st(1) + faddp %st, %st(1) + jmp ..B1.17 +..B1.11: + movzwl 30(%esp), %edx + movl %edx, %eax + andl $768, %eax + cmpl $768, %eax + je ..B1.43 +..B1.12: + orl $-64768, %edx + movw %dx, 28(%esp) +..B1.13: + fldcw 28(%esp) +..B1.14: + movsd 8(%ebp), %xmm1 + movl $1, %ebx +..B1.15: + movsd %xmm1, 16(%esp) + fldl 16(%esp) + addl $-32, %esp + lea 32(%esp), %eax + fstpt (%esp) + movl $0, 12(%esp) + movl %eax, 16(%esp) + call __libm_reduce_pi04l +..B1.46: + addl $32, %esp +..B1.16: + fldl (%esp) + lea 1(%eax), %edx + fldl 8(%esp) + faddp %st, %st(1) +..B1.17: + movl %edx, %ecx + addl $3, %eax + shrl $2, %ecx + andl $1, %ecx + shrl $2, %eax + xorl %ecx, %esi + movl 36(%esp), %ecx + andl $1, %eax + andl $3, %ecx + cmpl $3, %ecx + jne ..B1.25 +..B1.18: + fldt 84+_SP@GOTOFF(%edi) + fld %st(1) + fmul %st(2), %st + testb $2, %dl + fmul %st, %st(1) + fldt 72+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 60+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 48+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 36+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 24+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 12+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt _SP@GOTOFF(%edi) + faddp %st, %st(2) + fmul %st, %st(1) + fldt 84+_CP@GOTOFF(%edi) + fmul %st(1), %st + fldt 72+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt 60+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt 48+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt 36+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt 24+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt 12+_CP@GOTOFF(%edi) + faddp %st, %st(1) + fmul %st(1), %st + fldt _CP@GOTOFF(%edi) + faddp %st, %st(1) + fmulp %st, %st(1) + fldl _ones@GOTOFF(%edi,%esi,8) + fldl _ones@GOTOFF(%edi,%eax,8) + je ..B1.22 +..B1.19: + fmulp %st, %st(4) + testl %ebx, %ebx + fxch %st(2) + fmul %st(3), %st + movl 32(%esp), %eax + faddp %st, %st(3) + fxch %st(2) + fstpl (%eax) + fmul %st, %st(1) + faddp %st, %st(1) + fstpl 8(%eax) + je ..B1.21 +..B1.20: + fldcw 30(%esp) +..B1.21: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.22: + fxch %st(1) + fmulp %st, %st(4) + testl %ebx, %ebx + fxch %st(2) + fmul %st(3), %st + movl 32(%esp), %eax + faddp %st, %st(3) + fxch %st(2) + fstpl 8(%eax) + fmul %st, %st(1) + faddp %st, %st(1) + fstpl (%eax) + je ..B1.24 +..B1.23: + fldcw 30(%esp) +..B1.24: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.25: + testb $2, 36(%esp) + je ..B1.33 +..B1.26: + fld %st(0) + testb $2, %dl + fmul %st(1), %st + fld %st(0) + fmul %st(1), %st + je ..B1.30 +..B1.27: + fstp %st(2) + fldt 84+_CP@GOTOFF(%edi) + testl %ebx, %ebx + fmul %st(2), %st + fldt 72+_CP@GOTOFF(%edi) + fmul %st(3), %st + fldt 60+_CP@GOTOFF(%edi) + movl 32(%esp), %eax + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 48+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 36+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 24+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 12+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(3) + fldt _CP@GOTOFF(%edi) + faddp %st, %st(1) + fmulp %st, %st(1) + faddp %st, %st(1) + fldl _ones@GOTOFF(%edi,%esi,8) + fmul %st, %st(1) + faddp %st, %st(1) + fstpl 8(%eax) + je ..B1.29 +..B1.28: + fldcw 30(%esp) +..B1.29: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.30: + fldt 84+_SP@GOTOFF(%edi) + testl %ebx, %ebx + fmul %st(1), %st + fldt 72+_SP@GOTOFF(%edi) + fmul %st(2), %st + fldt 60+_SP@GOTOFF(%edi) + movl 32(%esp), %eax + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 48+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 36+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 24+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 12+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(2) + fldt _SP@GOTOFF(%edi) + faddp %st, %st(1) + fmulp %st, %st(2) + faddp %st, %st(1) + fldl _ones@GOTOFF(%edi,%esi,8) + fmulp %st, %st(2) + fmul %st(1), %st + faddp %st, %st(1) + fstpl 8(%eax) + je ..B1.32 +..B1.31: + fldcw 30(%esp) +..B1.32: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.33: + testb $1, 36(%esp) + je ..B1.41 +..B1.34: + fld %st(0) + testb $2, %dl + fmul %st(1), %st + fld %st(0) + fmul %st(1), %st + je ..B1.38 +..B1.35: + fldt 84+_SP@GOTOFF(%edi) + testl %ebx, %ebx + fmul %st(1), %st + fldt 72+_SP@GOTOFF(%edi) + fmul %st(2), %st + fldt 60+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 48+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 36+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 24+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 12+_SP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(2) + fldt _SP@GOTOFF(%edi) + faddp %st, %st(1) + fmulp %st, %st(2) + faddp %st, %st(1) + fldl _ones@GOTOFF(%edi,%eax,8) + fmulp %st, %st(2) + fmul %st(1), %st + movl 32(%esp), %eax + faddp %st, %st(1) + fstpl (%eax) + je ..B1.37 +..B1.36: + fldcw 30(%esp) +..B1.37: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.38: + fstp %st(2) + fldt 84+_CP@GOTOFF(%edi) + testl %ebx, %ebx + fmul %st(2), %st + fldt 72+_CP@GOTOFF(%edi) + fmul %st(3), %st + fldt 60+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 48+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 36+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 24+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(3), %st + fldt 12+_CP@GOTOFF(%edi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(3) + fldt _CP@GOTOFF(%edi) + faddp %st, %st(1) + fmulp %st, %st(1) + faddp %st, %st(1) + fldl _ones@GOTOFF(%edi,%eax,8) + fmul %st, %st(1) + movl 32(%esp), %eax + faddp %st, %st(1) + fstpl (%eax) + je ..B1.40 +..B1.39: + fldcw 30(%esp) +..B1.40: + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.41: + fstp %st(0) + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.42: + xorl %ebx, %ebx + jmp ..B1.8 +..B1.43: + xorl %ebx, %ebx + jmp ..B1.15 + .align 16,0x90 + .type __libm_sincos_huge,@function + .size __libm_sincos_huge,.-__libm_sincos_huge + .data +# -- End __libm_sincos_huge + .section .rodata, "a" + .align 16 + .align 16 +.L_2il0floatpacket.0: + .long 0xffffffff,0x7fffffff,0x00000000,0x00000000 + .type .L_2il0floatpacket.0,@object + .size .L_2il0floatpacket.0,16 + .align 16 +_Pi4Inv: + .long 1841940611 + .long 1072979760 + .type _Pi4Inv,@object + .size _Pi4Inv,8 + .space 8, 0x00 # pad + .align 16 +_Pi4x3: + .long 1413754880 + .long 3219726843 + .long 993632256 + .long 1027030475 + .long 3773204808 + .long 3129236486 + .type _Pi4x3,@object + .size _Pi4x3,24 + .space 8, 0x00 # pad + .align 16 +_Pi4x4: + .long 1413480448 + .long 3219726843 + .long 442499072 + .long 3183522913 + .long 771751936 + .long 3146979722 + .long 622873025 + .long 3110831002 + .type _Pi4x4,@object + .size _Pi4x4,32 + .align 16 +_SP: + .word 43691 + .word 43690 + .word 43690 + .word 43690 + .word 49148 + .word 0 + .word 34951 + .word 34952 + .word 34952 + .word 34952 + .word 16376 + .word 0 + .word 50471 + .word 3328 + .word 208 + .word 53261 + .word 49138 + .word 0 + .word 17910 + .word 46614 + .word 7466 + .word 47343 + .word 16364 + .word 0 + .word 33371 + .word 14743 + .word 11071 + .word 55090 + .word 49125 + .word 0 + .word 48947 + .word 35764 + .word 12250 + .word 45202 + .word 16350 + .word 0 + .word 17574 + .word 60698 + .word 10735 + .word 55102 + .word 49110 + .word 0 + .word 34320 + .word 12415 + .word 25249 + .word 51489 + .word 16334 + .word 0 + .type _SP,@object + .size _SP,96 + .align 16 +_CP: + .word 0 + .word 0 + .word 0 + .word 32768 + .word 49150 + .word 0 + .word 43685 + .word 43690 + .word 43690 + .word 43690 + .word 16378 + .word 0 + .word 39983 + .word 2912 + .word 24758 + .word 46603 + .word 49141 + .word 0 + .word 61476 + .word 3244 + .word 208 + .word 53261 + .word 16367 + .word 0 + .word 1022 + .word 16229 + .word 32187 + .word 37874 + .word 49129 + .word 0 + .word 55373 + .word 44526 + .word 50840 + .word 36726 + .word 16354 + .word 0 + .word 55994 + .word 65145 + .word 59958 + .word 51657 + .word 49114 + .word 0 + .word 15046 + .word 2976 + .word 1998 + .word 54661 + .word 16338 + .word 0 + .type _CP,@object + .size _CP,96 + .align 16 +_ones: + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .type _ones,@object + .size _ones,16 + .data + .hidden __libm_reduce_pi04l + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/libm_tancot_huge.S b/libm/x86/libm_tancot_huge.S new file mode 100644 index 000000000..80f16d5ba --- /dev/null +++ b/libm/x86/libm_tancot_huge.S @@ -0,0 +1,750 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +# -- Begin __libm_tancot_huge + .text + .align 16,0x90 + .hidden __libm_tancot_huge + .globl __libm_tancot_huge +__libm_tancot_huge: +# parameter 1: 8 + %ebp +# parameter 2: 16 + %ebp +# parameter 3: 20 + %ebp +..B1.1: + pushl %ebp + movl %esp, %ebp + andl $-64, %esp + pushl %esi + pushl %edi + pushl %ebx + subl $52, %esp + movl 16(%ebp), %eax + movl 20(%ebp), %ebx + movl %eax, 40(%esp) +..B1.2: + fnstcw 38(%esp) +..B1.3: + movl 12(%ebp), %edx + movl %edx, %eax + andl $2147483647, %eax + shrl $31, %edx + movl %edx, 44(%esp) + cmpl $1104150528, %eax + call ..L2 +..L2: + popl %esi + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%esi), %esi + jae ..B1.11 +..B1.4: + movsd 8(%ebp), %xmm1 + movzwl 38(%esp), %ecx + movl %ecx, %edx + andl $768, %edx + andps .L_2il0floatpacket.0@GOTOFF(%esi), %xmm1 + cmpl $768, %edx + movsd _Pi4Inv@GOTOFF(%esi), %xmm0 + mulsd %xmm1, %xmm0 + movsd %xmm1, 8(%ebp) + movsd %xmm0, (%esp) + je ..B1.39 +..B1.5: + orl $-64768, %ecx + movw %cx, 36(%esp) +..B1.6: + fldcw 36(%esp) +..B1.7: + movsd 8(%ebp), %xmm1 + movl $1, %edi +..B1.8: + movl %esi, 12(%esp) + movl 4(%esp), %esi + movl %esi, %edx + movl %edi, 24(%esp) + movl %esi, %edi + shrl $20, %edi + andl $1048575, %edx + movl %edi, %ecx + orl $1048576, %edx + negl %ecx + addl $13, %edi + movl %ebx, 8(%esp) + addl $19, %ecx + movl %edx, %ebx + movl %ecx, 28(%esp) + shrl %cl, %ebx + movl %edi, %ecx + shll %cl, %edx + movl 28(%esp), %ecx + movl (%esp), %edi + shrl %cl, %edi + orl %edi, %edx + cmpl $1094713344, %esi + movsd %xmm1, 16(%esp) + fldl 16(%esp) + cmovb %ebx, %edx + movl 24(%esp), %edi + movl 12(%esp), %esi + lea 1(%edx), %ebx + andl $-2, %ebx + movl %ebx, 16(%esp) + cmpl $1094713344, %eax + fildl 16(%esp) + movl 8(%esp), %ebx + jae ..B1.10 +..B1.9: + fldl _Pi4x3@GOTOFF(%esi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 8+_Pi4x3@GOTOFF(%esi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 16+_Pi4x3@GOTOFF(%esi) + fmulp %st, %st(1) + faddp %st, %st(1) + jmp ..B1.17 +..B1.10: + fldl _Pi4x4@GOTOFF(%esi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 8+_Pi4x4@GOTOFF(%esi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 16+_Pi4x4@GOTOFF(%esi) + fmul %st(1), %st + faddp %st, %st(2) + fldl 24+_Pi4x4@GOTOFF(%esi) + fmulp %st, %st(1) + faddp %st, %st(1) + jmp ..B1.17 +..B1.11: + movzwl 38(%esp), %edx + movl %edx, %eax + andl $768, %eax + cmpl $768, %eax + je ..B1.40 +..B1.12: + orl $-64768, %edx + movw %dx, 36(%esp) +..B1.13: + fldcw 36(%esp) +..B1.14: + movl $1, %edi +..B1.15: + movsd 8(%ebp), %xmm0 + addl $-32, %esp + andps .L_2il0floatpacket.0@GOTOFF(%esi), %xmm0 + lea 32(%esp), %eax + movsd %xmm0, 16(%eax) + fldl 16(%eax) + fstpt (%esp) + movl $0, 12(%esp) + movl %eax, 16(%esp) + call __libm_reduce_pi04l +..B1.43: + movl %eax, %edx + addl $32, %esp +..B1.16: + fldl (%esp) + fldl 8(%esp) + faddp %st, %st(1) +..B1.17: + movl %ebx, %eax + andl $3, %eax + cmpl $3, %eax + jne ..B1.24 +..B1.18: + fldl _ones@GOTOFF(%esi) + incl %edx + fdiv %st(1), %st + testb $2, %dl + fstpt 24(%esp) + fld %st(0) + fmul %st(1), %st + fld %st(0) + fmul %st(1), %st + fldt 36+_TP@GOTOFF(%esi) + fmul %st(2), %st + fldt 24+_TP@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt 12+_TP@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt 36+_TQ@GOTOFF(%esi) + fmul %st(3), %st + fldt 24+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(3), %st + fldt 12+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(3), %st + fldt _TQ@GOTOFF(%esi) + faddp %st, %st(1) + fldt _TP@GOTOFF(%esi) + faddp %st, %st(2) + fldt 132+_GP@GOTOFF(%esi) + fmul %st(3), %st + fldt 120+_GP@GOTOFF(%esi) + fmul %st(4), %st + fldt 108+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 96+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 84+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 72+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 60+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 48+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 36+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(4), %st + fldt 24+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(4) + fldt 12+_GP@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(4), %st + fmul %st(5), %st + fldt _GP@GOTOFF(%esi) + faddp %st, %st(4) + fxch %st(3) + fmul %st(5), %st + faddp %st, %st(3) + je ..B1.20 +..B1.19: + fldt 24(%esp) + fxch %st(1) + fdivrp %st, %st(2) + fxch %st(1) + fmulp %st, %st(3) + movl 44(%esp), %eax + xorl $1, %eax + fxch %st(2) + fmul %st(3), %st + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(2) + fmul %st, %st(3) + fxch %st(3) + faddp %st, %st(2) + fxch %st(1) + fstpl 16(%esp) + fmul %st(1), %st + fxch %st(1) + fmulp %st, %st(2) + movsd 16(%esp), %xmm0 + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm1 + jmp ..B1.21 +..B1.20: + fdivrp %st, %st(1) + fmulp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + movl 44(%esp), %eax + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(1) + fmul %st, %st(3) + fxch %st(3) + faddp %st, %st(1) + fstpl 16(%esp) + fmul %st(1), %st + fldt 24(%esp) + fmulp %st, %st(2) + movsd 16(%esp), %xmm0 + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm1 +..B1.21: + testl %edi, %edi + je ..B1.23 +..B1.22: + fldcw 38(%esp) +..B1.23: + movl 40(%esp), %eax + movsd %xmm0, (%eax) + movsd %xmm1, 8(%eax) + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.24: + testb $2, %bl + je ..B1.31 +..B1.25: + incl %edx + fld %st(0) + fmul %st(1), %st + testb $2, %dl + je ..B1.27 +..B1.26: + fldl _ones@GOTOFF(%esi) + fdiv %st(2), %st + fld %st(1) + fmul %st(2), %st + fldt 132+_GP@GOTOFF(%esi) + fmul %st(1), %st + fldt 120+_GP@GOTOFF(%esi) + fmul %st(2), %st + fldt 108+_GP@GOTOFF(%esi) + movl 44(%esp), %eax + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + xorl $1, %eax + fldt 96+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 84+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 72+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 60+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 48+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 36+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 24+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(2) + fldt 12+_GP@GOTOFF(%esi) + faddp %st, %st(1) + fmulp %st, %st(3) + fldt _GP@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(3), %st + fxch %st(2) + fmulp %st, %st(3) + fxch %st(1) + faddp %st, %st(2) + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(2) + fmulp %st, %st(1) + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm0 + jmp ..B1.28 +..B1.27: + fldt 36+_TP@GOTOFF(%esi) + fmul %st(1), %st + fldt 24+_TP@GOTOFF(%esi) + movl 44(%esp), %eax + faddp %st, %st(1) + fmul %st(1), %st + fldt 36+_TQ@GOTOFF(%esi) + fmul %st(2), %st + fldt 24+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt 12+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt _TQ@GOTOFF(%esi) + faddp %st, %st(1) + fldt 12+_TP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt _TP@GOTOFF(%esi) + faddp %st, %st(1) + fdivp %st, %st(1) + fmulp %st, %st(1) + fmul %st(1), %st + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(1) + fmulp %st, %st(2) + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm0 +..B1.28: + testl %edi, %edi + je ..B1.30 +..B1.29: + fldcw 38(%esp) +..B1.30: + movl 40(%esp), %eax + movsd %xmm0, (%eax) + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.31: + testb $1, %bl + je ..B1.38 +..B1.32: + incl %edx + fld %st(0) + fmul %st(1), %st + testb $2, %dl + je ..B1.34 +..B1.33: + fldt 36+_TP@GOTOFF(%esi) + fmul %st(1), %st + fldt 24+_TP@GOTOFF(%esi) + movl 44(%esp), %eax + faddp %st, %st(1) + fmul %st(1), %st + xorl $1, %eax + fldt 36+_TQ@GOTOFF(%esi) + fmul %st(2), %st + fldt 24+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt 12+_TQ@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(2), %st + fldt _TQ@GOTOFF(%esi) + faddp %st, %st(1) + fldt 12+_TP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt _TP@GOTOFF(%esi) + faddp %st, %st(1) + fdivp %st, %st(1) + fmulp %st, %st(1) + fmul %st(1), %st + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(1) + fmulp %st, %st(2) + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm0 + jmp ..B1.35 +..B1.34: + fldl _ones@GOTOFF(%esi) + fdiv %st(2), %st + fld %st(1) + fmul %st(2), %st + fldt 132+_GP@GOTOFF(%esi) + fmul %st(1), %st + fldt 120+_GP@GOTOFF(%esi) + fmul %st(2), %st + fldt 108+_GP@GOTOFF(%esi) + movl 44(%esp), %eax + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 96+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 84+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 72+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 60+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 48+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 36+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmul %st(2), %st + fldt 24+_GP@GOTOFF(%esi) + faddp %st, %st(2) + fxch %st(1) + fmulp %st, %st(2) + fldt 12+_GP@GOTOFF(%esi) + faddp %st, %st(1) + fmulp %st, %st(3) + fldt _GP@GOTOFF(%esi) + faddp %st, %st(1) + fmul %st(3), %st + fxch %st(2) + fmulp %st, %st(3) + fxch %st(1) + faddp %st, %st(2) + fldl _ones@GOTOFF(%esi,%eax,8) + fmul %st, %st(2) + fmulp %st, %st(1) + faddp %st, %st(1) + fstpl 16(%esp) + movsd 16(%esp), %xmm0 +..B1.35: + testl %edi, %edi + je ..B1.37 +..B1.36: + fldcw 38(%esp) +..B1.37: + movl 40(%esp), %eax + movsd %xmm0, 8(%eax) + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.38: + fstp %st(0) + addl $52, %esp + popl %ebx + popl %edi + popl %esi + movl %ebp, %esp + popl %ebp + ret +..B1.39: + xorl %edi, %edi + jmp ..B1.8 +..B1.40: + xorl %edi, %edi + jmp ..B1.15 + .align 16,0x90 + .type __libm_tancot_huge,@function + .size __libm_tancot_huge,.-__libm_tancot_huge + .data +# -- End __libm_tancot_huge + .section .rodata, "a" + .align 16 + .align 16 +.L_2il0floatpacket.0: + .long 0xffffffff,0x7fffffff,0x00000000,0x00000000 + .type .L_2il0floatpacket.0,@object + .size .L_2il0floatpacket.0,16 + .align 16 +_Pi4Inv: + .long 1841940611 + .long 1072979760 + .type _Pi4Inv,@object + .size _Pi4Inv,8 + .space 8, 0x00 # pad + .align 16 +_Pi4x3: + .long 1413754880 + .long 3219726843 + .long 993632256 + .long 1027030475 + .long 3773204808 + .long 3129236486 + .type _Pi4x3,@object + .size _Pi4x3,24 + .space 8, 0x00 # pad + .align 16 +_Pi4x4: + .long 1413480448 + .long 3219726843 + .long 442499072 + .long 3183522913 + .long 771751936 + .long 3146979722 + .long 622873025 + .long 3110831002 + .type _Pi4x4,@object + .size _Pi4x4,32 + .align 16 +_ones: + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .type _ones,@object + .size _ones,16 + .align 16 +_TP: + .word 19670 + .word 44908 + .word 50960 + .word 50786 + .word 49149 + .word 0 + .word 19206 + .word 45228 + .word 54194 + .word 52268 + .word 16377 + .word 0 + .word 227 + .word 51280 + .word 43560 + .word 38195 + .word 49139 + .word 0 + .word 12272 + .word 18029 + .word 6715 + .word 45670 + .word 16357 + .word 0 + .type _TP,@object + .size _TP,48 + .align 16 +_TQ: + .word 14748 + .word 33681 + .word 5452 + .word 38090 + .word 49151 + .word 0 + .word 46755 + .word 50026 + .word 17634 + .word 35372 + .word 16382 + .word 0 + .word 46863 + .word 53352 + .word 42702 + .word 59869 + .word 49145 + .word 0 + .word 33295 + .word 20942 + .word 32118 + .word 39935 + .word 16371 + .word 0 + .type _TQ,@object + .size _TQ,48 + .align 16 +_GP: + .word 43691 + .word 43690 + .word 43690 + .word 43690 + .word 49149 + .word 0 + .word 46639 + .word 2912 + .word 24758 + .word 46603 + .word 49145 + .word 0 + .word 57255 + .word 2218 + .word 21984 + .word 35507 + .word 49142 + .word 0 + .word 34208 + .word 43033 + .word 48281 + .word 56811 + .word 49138 + .word 0 + .word 28773 + .word 27191 + .word 31071 + .word 45908 + .word 49135 + .word 0 + .word 43257 + .word 33777 + .word 11976 + .word 37184 + .word 49132 + .word 0 + .word 62410 + .word 35990 + .word 36363 + .word 60269 + .word 49128 + .word 0 + .word 13659 + .word 55568 + .word 26569 + .word 48851 + .word 49125 + .word 0 + .word 10347 + .word 46238 + .word 47188 + .word 39576 + .word 49122 + .word 0 + .word 2161 + .word 6703 + .word 25719 + .word 64708 + .word 49118 + .word 0 + .word 42329 + .word 7593 + .word 44754 + .word 47734 + .word 49115 + .word 0 + .word 163 + .word 32746 + .word 39875 + .word 61957 + .word 49112 + .word 0 + .type _GP,@object + .size _GP,144 + .data + .hidden __libm_reduce_pi04l + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_atan.S b/libm/x86/s_atan.S new file mode 100644 index 000000000..67d8c020f --- /dev/null +++ b/libm/x86/s_atan.S @@ -0,0 +1,935 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// This implementation uses the main path for |x| in [2^{-5},2^65). +// For |x| in [2^{-64},2^{-5}), a secondary path is used. +// For the biased exponent of X within 3FFH-64 and 3FF+64, we use one branch. +// We use the following definition of B and X` so that the formula +// atan(X) = Tau + atan( (X`-B) / (One + BX) ) is correct +// +// X = (-1)^s * 2^k * 1. x1 x2 ... x52 +// +// Define X` = 0 if k >= 5; and X` = |X| otherwise +// Define One = 0 if k >= 5; and One = 1 otherwise +// Define B = 0 if k <= -6; B = 2^k * 1.x1 x2 x3 x4 1 if -5 <= k <= 4 +// Define B = 2^5 * 1.0 0 ... 0 if k >= 5 +// +// Tau is 0 if k <= -6; +// Tau is atan( B ) if -5 <= k <= 4 +// Tau is pi/2 if k >= 5 +// +// Special cases: +// atan(NaN) = quiet NaN +// atan(+/-INF) = +/-Pi/2 +// atan(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin atan +ENTRY(atan) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 48(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + movsd 2640(%ebx), %xmm3 + movsd 2624(%ebx), %xmm5 + movsd 2656(%ebx), %xmm4 + movsd %xmm0, 8(%esp) + pextrw $3, %xmm0, %edx + andpd %xmm0, %xmm3 + pshufd $68, %xmm0, %xmm1 + orpd %xmm4, %xmm3 + movl %edx, %eax + andl $32767, %edx + subl $16288, %edx + cmpl $159, %edx + ja .L_2TAG_PACKET_0.0.2 + mulsd %xmm3, %xmm1 + subsd %xmm3, %xmm0 + addsd %xmm5, %xmm1 + divsd %xmm1, %xmm0 + addl $1, %edx + movsd 2672(%ebx), %xmm2 + movsd 2688(%ebx), %xmm4 + andl $32768, %eax + xorpd %xmm7, %xmm7 + pinsrw $3, %eax, %xmm7 + addl %edx, %edx + movsd (%ebx,%edx,8), %xmm6 + movsd 8(%ebx,%edx,8), %xmm5 + xorpd %xmm7, %xmm5 + xorpd %xmm7, %xmm6 + movsd 2680(%ebx), %xmm7 + pshufd $68, %xmm0, %xmm1 + mulsd %xmm0, %xmm0 + pshufd $68, %xmm1, %xmm3 + addsd %xmm6, %xmm1 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm4 + subsd %xmm1, %xmm6 + mulsd %xmm0, %xmm4 + addsd %xmm7, %xmm2 + mulsd %xmm3, %xmm0 + addsd %xmm3, %xmm6 + mulsd %xmm2, %xmm0 + addsd 2696(%ebx), %xmm4 + addsd %xmm5, %xmm6 + mulsd %xmm4, %xmm0 + addsd %xmm6, %xmm0 + addsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + addl $944, %edx + cmpl $1103, %edx + ja .L_2TAG_PACKET_2.0.2 + movsd 2672(%ebx), %xmm4 + movsd 2688(%ebx), %xmm7 + movsd 8(%esp), %xmm0 + mulsd %xmm1, %xmm1 + movsd 2680(%ebx), %xmm2 + movsd 2696(%ebx), %xmm5 + mulsd %xmm1, %xmm4 + addsd %xmm1, %xmm7 + movapd %xmm1, %xmm6 + mulsd %xmm0, %xmm1 + addsd %xmm4, %xmm2 + mulsd %xmm6, %xmm7 + mulsd %xmm1, %xmm2 + addsd %xmm5, %xmm7 + mulsd %xmm7, %xmm2 + addsd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + addl $15344, %edx + cmpl $16368, %edx + ja .L_2TAG_PACKET_3.0.2 + movsd 8(%esp), %xmm0 + movsd 8(%esp), %xmm1 + cmpl $16, %edx + jae .L_2TAG_PACKET_4.0.2 + mulsd %xmm0, %xmm1 +.L_2TAG_PACKET_4.0.2: + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_3.0.2: + cmpl $17392, %edx + jae .L_2TAG_PACKET_5.0.2 + xorpd %xmm1, %xmm1 + movl $49136, %ecx + pinsrw $3, %ecx, %xmm1 + divsd %xmm0, %xmm1 + movsd 2672(%ebx), %xmm2 + movsd 2688(%ebx), %xmm4 + andl $32768, %eax + xorpd %xmm7, %xmm7 + pinsrw $3, %eax, %xmm7 + addl %edx, %edx + movsd 2592(%ebx), %xmm6 + movsd 2600(%ebx), %xmm5 + xorpd %xmm7, %xmm5 + xorpd %xmm7, %xmm6 + movsd 2680(%ebx), %xmm7 + pshufd $68, %xmm1, %xmm0 + mulsd %xmm1, %xmm1 + pshufd $68, %xmm0, %xmm3 + addsd %xmm6, %xmm0 + mulsd %xmm1, %xmm2 + addsd %xmm1, %xmm4 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm4 + addsd %xmm7, %xmm2 + mulsd %xmm3, %xmm1 + addsd %xmm3, %xmm6 + mulsd %xmm2, %xmm1 + addsd 2696(%ebx), %xmm4 + addsd %xmm5, %xmm6 + mulsd %xmm4, %xmm1 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_5.0.2: + movsd 8(%esp), %xmm4 + movsd 2608(%ebx), %xmm0 + movsd 2592(%ebx), %xmm2 + movsd 2600(%ebx), %xmm3 + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + andl $2147483647, %edx + cmpl $2146435072, %edx + jae .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_7.0.2: + andnpd %xmm4, %xmm0 + orpd %xmm0, %xmm2 + orpd %xmm3, %xmm0 + addsd %xmm2, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_6.0.2: + subl $2146435072, %edx + orl %edx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_7.0.2 + movapd %xmm4, %xmm0 + addsd %xmm0, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) +.L_2TAG_PACKET_1.0.2: + movl 48(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(atan) +# -- End atan + +# Start file scope ASM +.weak atanl +.equ atanl, atan +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 0 + .long 0 + .long 0 + .long 3819695742 + .long 1067482761 + .long 2398680355 + .long 3155462074 + .long 2998791009 + .long 1067548225 + .long 3868465248 + .long 3157182472 + .long 3339424991 + .long 1067613680 + .long 3296670360 + .long 1010752543 + .long 2710002256 + .long 1067679126 + .long 3403896007 + .long 1010910768 + .long 3275701428 + .long 1067744562 + .long 119959933 + .long 1011482843 + .long 2908636881 + .long 1067809988 + .long 2464489612 + .long 1011545526 + .long 3777889398 + .long 1067875403 + .long 3262682165 + .long 1009703919 + .long 3759667419 + .long 1067940807 + .long 1838130851 + .long 3157373556 + .long 732369940 + .long 1068006200 + .long 1203428313 + .long 1010055371 + .long 1166616461 + .long 1068071580 + .long 2901274051 + .long 3158549977 + .long 2945472892 + .long 1068136947 + .long 3726120658 + .long 1009762715 + .long 3954480976 + .long 1068202301 + .long 1289173457 + .long 1009429861 + .long 2081752829 + .long 1068267642 + .long 1836909874 + .long 1006212095 + .long 3807999788 + .long 1068332968 + .long 2172459940 + .long 3156162078 + .long 2731789884 + .long 1068398280 + .long 3450718392 + .long 3159216547 + .long 1044477961 + .long 1068463577 + .long 2230553229 + .long 1011424339 + .long 1486930287 + .long 1068530218 + .long 2861547474 + .long 1012041376 + .long 2293016881 + .long 1068595466 + .long 136843272 + .long 1012684797 + .long 201518157 + .long 1068660680 + .long 63231984 + .long 1012427198 + .long 4054234584 + .long 1068725856 + .long 3927006960 + .long 1011878955 + .long 1246477213 + .long 1068790995 + .long 1494265652 + .long 3155219350 + .long 678186699 + .long 1068856093 + .long 1264361424 + .long 3159256693 + .long 2690594995 + .long 1068921148 + .long 3906996379 + .long 1009288267 + .long 3362611517 + .long 1068986159 + .long 1650970041 + .long 3158331771 + .long 3102162111 + .long 1069051124 + .long 365917035 + .long 3160264153 + .long 2352611067 + .long 1069116041 + .long 4008970190 + .long 3159478182 + .long 1594134794 + .long 1069180908 + .long 466690178 + .long 1012526501 + .long 1345079306 + .long 1069245723 + .long 2268273568 + .long 3160164092 + .long 2163300970 + .long 1069310484 + .long 2750834800 + .long 3158113482 + .long 352522716 + .long 1069375190 + .long 1750411372 + .long 1011790845 + .long 848541647 + .long 1069439838 + .long 2164207573 + .long 1011698350 + .long 40647312 + .long 1069504427 + .long 2949165434 + .long 3159107267 + .long 2216766270 + .long 1069574357 + .long 2197920765 + .long 3161055954 + .long 1090914384 + .long 1069638757 + .long 2330454674 + .long 1013365998 + .long 387601244 + .long 1069703022 + .long 3185681168 + .long 1013434071 + .long 3991640484 + .long 1069767144 + .long 1313211590 + .long 3161087959 + .long 3322489502 + .long 1069831118 + .long 3013977995 + .long 1013053011 + .long 3121698570 + .long 1069894936 + .long 4069015667 + .long 1013023362 + .long 4289964660 + .long 1069958591 + .long 1736191156 + .long 3158266731 + .long 3903312386 + .long 1070022077 + .long 1833592413 + .long 3159731471 + .long 3818449864 + .long 1070085387 + .long 851036429 + .long 3159730451 + .long 2097480306 + .long 1070148515 + .long 3506390884 + .long 3160462302 + .long 1611694502 + .long 1070211454 + .long 2785735540 + .long 3160465144 + .long 1464694796 + .long 1070274198 + .long 4229277299 + .long 3159907000 + .long 1299612775 + .long 1070336741 + .long 4116653788 + .long 3160427739 + .long 1310544789 + .long 1070399077 + .long 1064430331 + .long 1013218202 + .long 2253168030 + .long 1070461200 + .long 1405044609 + .long 3157623179 + .long 1159567373 + .long 1070523105 + .long 2353445521 + .long 3159992176 + .long 1359373750 + .long 1070605818 + .long 1748171336 + .long 3161879263 + .long 908341706 + .long 1070667034 + .long 3372710815 + .long 3161775245 + .long 1743027350 + .long 1070727765 + .long 687089934 + .long 3160507171 + .long 2055355646 + .long 1070787992 + .long 2392855242 + .long 1013682469 + .long 690426164 + .long 1070847697 + .long 1103926666 + .long 1014052810 + .long 1483247847 + .long 1070906862 + .long 2082645847 + .long 3161345479 + .long 392040270 + .long 1070965472 + .long 2407720023 + .long 1014053754 + .long 2673846014 + .long 1071023511 + .long 1293605532 + .long 3158464385 + .long 1384215810 + .long 1071080967 + .long 2446095872 + .long 3159216407 + .long 3101660631 + .long 1071137826 + .long 698040758 + .long 1014855328 + .long 2094057058 + .long 1071194078 + .long 2282048339 + .long 1014040385 + .long 1712750594 + .long 1071249712 + .long 1204372378 + .long 3162276464 + .long 1411515787 + .long 1071304719 + .long 949080808 + .long 1015006403 + .long 931538085 + .long 1071359091 + .long 3027127039 + .long 1014307233 + .long 179139065 + .long 1071412821 + .long 4285547492 + .long 3161934731 + .long 3387721259 + .long 1071465902 + .long 373225773 + .long 1013486625 + .long 2132236852 + .long 1071544299 + .long 3250533429 + .long 1014031677 + .long 1942070284 + .long 1071645596 + .long 1237964179 + .long 3163239113 + .long 1532707802 + .long 1071695380 + .long 330645583 + .long 1012495610 + .long 2294184979 + .long 1071743834 + .long 3959472897 + .long 1015833116 + .long 3805060714 + .long 1071790961 + .long 2671256142 + .long 1013727772 + .long 2215037898 + .long 1071836770 + .long 2683359117 + .long 1015831902 + .long 483661594 + .long 1071881273 + .long 836288326 + .long 3162648643 + .long 1534679894 + .long 1071924486 + .long 373258696 + .long 3162470096 + .long 1538714628 + .long 1071966430 + .long 3199433068 + .long 1015325501 + .long 527642555 + .long 1072007128 + .long 3636832592 + .long 3161843145 + .long 291339150 + .long 1072046605 + .long 890169537 + .long 3160586117 + .long 2450210201 + .long 1072084888 + .long 1636353294 + .long 3163193400 + .long 2411367951 + .long 1072122007 + .long 374899873 + .long 1011331750 + .long 681549971 + .long 1072157992 + .long 506411689 + .long 1015373954 + .long 1466745541 + .long 1072192873 + .long 2143860931 + .long 1013364334 + .long 2845622366 + .long 1072226682 + .long 2869178209 + .long 3162423682 + .long 2838871438 + .long 1072275456 + .long 3742223599 + .long 1014338577 + .long 4200275274 + .long 1072337034 + .long 1566539915 + .long 3161839550 + .long 3034733530 + .long 1072394897 + .long 652621408 + .long 3162261964 + .long 3207412993 + .long 1072449290 + .long 3206124665 + .long 1014408733 + .long 624461478 + .long 1072500450 + .long 932437485 + .long 1015204343 + .long 767665908 + .long 1072548600 + .long 1037911952 + .long 3163527627 + .long 1110773639 + .long 1072593952 + .long 2371517912 + .long 3160465741 + .long 1940828530 + .long 1072636704 + .long 2731408428 + .long 3162895795 + .long 1911329388 + .long 1072677041 + .long 1773089615 + .long 3159569267 + .long 1764715788 + .long 1072704191 + .long 691346949 + .long 3164069946 + .long 3332979233 + .long 1072722195 + .long 3550733983 + .long 1014770628 + .long 1321870254 + .long 1072739231 + .long 1415315820 + .long 1016224052 + .long 3657429030 + .long 1072755365 + .long 3910539033 + .long 1015966402 + .long 4197624557 + .long 1072770661 + .long 2333399254 + .long 3164546480 + .long 1512059493 + .long 1072785177 + .long 2701510318 + .long 1016178092 + .long 453379037 + .long 1072798965 + .long 4046344253 + .long 3162814364 + .long 1942345162 + .long 1072818388 + .long 621134147 + .long 1016335195 + .long 4210176273 + .long 1072842164 + .long 2701013387 + .long 3164326619 + .long 4185644010 + .long 1072863795 + .long 4163699341 + .long 1016203112 + .long 679688788 + .long 1072883543 + .long 4147276762 + .long 1014066750 + .long 29432865 + .long 1072901630 + .long 970415797 + .long 1016902063 + .long 4070721092 + .long 1072918247 + .long 2539004411 + .long 3163736096 + .long 2252468843 + .long 1072933561 + .long 3424082887 + .long 3163407177 + .long 2929724825 + .long 1072947712 + .long 3661482235 + .long 3163846989 + .long 1377513368 + .long 1072960824 + .long 3987926680 + .long 1013647908 + .long 1031632908 + .long 1072973003 + .long 3672217151 + .long 1016614619 + .long 2516508130 + .long 1072984342 + .long 545855020 + .long 3162728930 + .long 3792452178 + .long 1072994923 + .long 3420119467 + .long 1016471430 + .long 3147791459 + .long 1073004818 + .long 1342204979 + .long 1013937254 + .long 999189752 + .long 1073014090 + .long 1006335472 + .long 3162850919 + .long 711011011 + .long 1073022794 + .long 4633488 + .long 3162966895 + .long 15640363 + .long 1073030980 + .long 1686389560 + .long 3164376226 + .long 1218463589 + .long 1073042382 + .long 1526837110 + .long 3163533985 + .long 2538470555 + .long 1073056144 + .long 2273304406 + .long 3163784996 + .long 1229720947 + .long 1073068489 + .long 2971628206 + .long 3162356540 + .long 3115427016 + .long 1073079621 + .long 4215132957 + .long 3164282762 + .long 4030612557 + .long 1073089709 + .long 1913251691 + .long 3163671292 + .long 2728521257 + .long 1073098892 + .long 2861089500 + .long 1015454459 + .long 1118696283 + .long 1073107285 + .long 1628948053 + .long 1016179658 + .long 2682711255 + .long 1073114984 + .long 2906306266 + .long 1014142643 + .long 2073898081 + .long 1073122072 + .long 1322740454 + .long 3164497217 + .long 1403700297 + .long 1073128618 + .long 416137895 + .long 3162781466 + .long 2502685617 + .long 1073134681 + .long 3242008732 + .long 1014593495 + .long 1531926851 + .long 1073140313 + .long 1362708094 + .long 1016517604 + .long 3572814411 + .long 1073145557 + .long 3709790527 + .long 1012646874 + .long 1695536111 + .long 1073150453 + .long 3980346340 + .long 1016705136 + .long 2363057203 + .long 1073155033 + .long 2551194792 + .long 1012569695 + .long 2873365682 + .long 1073159327 + .long 3181154748 + .long 1017041450 + .long 1053384691 + .long 1073165288 + .long 3074536879 + .long 1016965660 + .long 3270542712 + .long 1073172451 + .long 2535319415 + .long 3163051778 + .long 1353631484 + .long 1073178850 + .long 1173833755 + .long 1015534537 + .long 3511218460 + .long 1073184599 + .long 1243608109 + .long 3161592122 + .long 4121259284 + .long 1073189793 + .long 398584912 + .long 3163829923 + .long 1193862106 + .long 1073194509 + .long 1873745539 + .long 3163802819 + .long 3861949790 + .long 1073198808 + .long 3841261147 + .long 1015587248 + .long 1486904578 + .long 1073202745 + .long 1634726776 + .long 3163847886 + .long 2879153715 + .long 1073206362 + .long 200456242 + .long 3164138657 + .long 385353253 + .long 1073209698 + .long 1186355517 + .long 1014887155 + .long 1125865839 + .long 1073212783 + .long 203561262 + .long 3161244927 + .long 1221361475 + .long 1073215645 + .long 3382476563 + .long 1014936138 + .long 2077323573 + .long 1073218307 + .long 1005121005 + .long 3164430752 + .long 215611373 + .long 1073220790 + .long 353198764 + .long 3164485137 + .long 2347419265 + .long 1073223110 + .long 1103143360 + .long 1016542137 + .long 1379112765 + .long 1073225284 + .long 381583533 + .long 3162870833 + .long 3891198463 + .long 1073228298 + .long 1771275754 + .long 1014654681 + .long 3395914051 + .long 1073231917 + .long 2350900914 + .long 3164013978 + .long 2799919478 + .long 1073235146 + .long 2893950164 + .long 3163260901 + .long 1138673476 + .long 1073238045 + .long 2622204785 + .long 3164174388 + .long 3408855940 + .long 1073240661 + .long 2800881650 + .long 1016008624 + .long 2044858738 + .long 1073243035 + .long 604544785 + .long 1017022901 + .long 2578795176 + .long 1073245198 + .long 2557332925 + .long 1016135165 + .long 4196285314 + .long 1073247177 + .long 2032365307 + .long 1016194735 + .long 224877747 + .long 1073248996 + .long 497926916 + .long 1016947111 + .long 3271386490 + .long 1073250671 + .long 2689994846 + .long 1016631513 + .long 813635989 + .long 1073252221 + .long 747035277 + .long 3164530136 + .long 369829519 + .long 1073253658 + .long 2182033858 + .long 3163190340 + .long 1187679052 + .long 1073254994 + .long 673954443 + .long 1016149821 + .long 4232586098 + .long 1073256239 + .long 497775200 + .long 3162179015 + .long 426690558 + .long 1073257404 + .long 3063343247 + .long 1016865578 + .long 1624065902 + .long 1073258494 + .long 1354224996 + .long 3163503778 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .long 4294967295 + .long 2147483647 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 4294901760 + .long 0 + .long 0 + .long 0 + .long 32768 + .long 0 + .long 0 + .long 2006262985 + .long 1069310863 + .long 2358449471 + .long 3217342131 + .long 3845454352 + .long 1069952297 + .long 2829679149 + .long 1073771565 + .type static_const_table,@object + .size static_const_table,2704 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_cbrt.S b/libm/x86/s_cbrt.S new file mode 100644 index 000000000..d065de285 --- /dev/null +++ b/libm/x86/s_cbrt.S @@ -0,0 +1,739 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Assume x=2^{3*k+j} * 1.b1 b2 ... b5 b6 ... b52, where j = 0,1,2. +// Let r=(x*2^{-3k-j} - 1.b1 b2 ... b5 1)* rcp[b1 b2 ..b5], +// where rcp[b1 b2 .. b5]=1/(1.b1 b2 b3 b4 b5 1) in double precision +// cbrt(2^j * 1. b1 b2 .. b5 1) is approximated as T[j][b1..b5]+D[j][b1..b5] +// (T stores the high 53 bits, D stores the low order bits) +// Result=2^k*T+(2^k*T*r)*P+2^k*D +// where P=p1+p2*r+..+p8*r^7 +// +// Special cases: +// cbrt(NaN) = quiet NaN, and raise invalid exception +// cbrt(INF) = that INF +// cbrt(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin cbrt +ENTRY(cbrt) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %esi, 52(%esp) + call static_func + movl %eax, %esi + movsd 128(%esp), %xmm0 + movapd %xmm0, %xmm7 + movsd %xmm0, 8(%esp) + movl $524032, %edx + movsd 64(%esi), %xmm5 + movsd 80(%esi), %xmm3 + psrlq $44, %xmm7 + pextrw $0, %xmm7, %ecx + movd %xmm7, %eax + movsd 96(%esi), %xmm1 + movsd 112(%esi), %xmm2 + movl %ebx, 16(%esp) + andl $248, %ecx + movsd 128(%ecx,%esi), %xmm4 + movl %eax, %ebx + andl %eax, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_0.0.2 + cmpl $524032, %edx + je .L_2TAG_PACKET_1.0.2 + shrl $8, %edx + shrl $8, %ebx + andpd %xmm0, %xmm2 + andpd %xmm5, %xmm0 + orpd %xmm2, %xmm3 + orpd %xmm0, %xmm1 + movapd (%esi), %xmm5 + movl $5462, %eax + movapd 16(%esi), %xmm6 + mull %edx + movl %ebx, %edx + andl $2047, %ebx + shrl $14, %eax + andl $2048, %edx + subl %eax, %ebx + subl %eax, %ebx + subl %eax, %ebx + shll $8, %ebx + addl $682, %eax + orl %edx, %eax + movd %eax, %xmm7 + addl %ebx, %ecx + psllq $52, %xmm7 +.L_2TAG_PACKET_2.0.2: + movapd 32(%esi), %xmm2 + movapd 48(%esi), %xmm0 + subsd %xmm3, %xmm1 + movq %xmm7, %xmm3 + mulsd 384(%ecx,%esi), %xmm7 + mulsd %xmm4, %xmm1 + mulsd 1152(%ecx,%esi), %xmm3 + movapd %xmm1, %xmm4 + unpcklpd %xmm1, %xmm1 + mulpd %xmm1, %xmm5 + mulpd %xmm1, %xmm6 + mulpd %xmm1, %xmm1 + addpd %xmm5, %xmm2 + addpd %xmm6, %xmm0 + mulpd %xmm1, %xmm2 + mulpd %xmm1, %xmm1 + mulsd %xmm7, %xmm4 + addpd %xmm2, %xmm0 + movl 16(%esp), %ebx + mulsd %xmm0, %xmm1 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + mulsd %xmm4, %xmm0 + addsd %xmm3, %xmm0 + addsd %xmm7, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_0.0.2: + mulsd 1984(%esi), %xmm0 + movq %xmm0, %xmm7 + movl $524032, %edx + psrlq $44, %xmm7 + pextrw $0, %xmm7, %ecx + movd %xmm7, %eax + andl $248, %ecx + movsd 128(%ecx,%esi), %xmm4 + movl %eax, %ebx + andl %eax, %edx + shrl $8, %edx + shrl $8, %ebx + cmpl $0, %edx + je .L_2TAG_PACKET_4.0.2 + andpd %xmm0, %xmm2 + andpd %xmm5, %xmm0 + orpd %xmm2, %xmm3 + orpd %xmm0, %xmm1 + movapd (%esi), %xmm5 + movl $5462, %eax + movapd 16(%esi), %xmm6 + mull %edx + movl %ebx, %edx + andl $2047, %ebx + shrl $14, %eax + andl $2048, %edx + subl %eax, %ebx + subl %eax, %ebx + subl %eax, %ebx + shll $8, %ebx + addl $661, %eax + orl %edx, %eax + movd %eax, %xmm7 + addl %ebx, %ecx + psllq $52, %xmm7 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_4.0.2: + cmpl $0, %ebx + jne .L_2TAG_PACKET_5.0.2 + movl 16(%esp), %ebx + fldl 1952(%esi) + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_5.0.2: + movl 16(%esp), %ebx + fldl 1968(%esi) + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_1.0.2: + movl 16(%esp), %ebx + movl 132(%esp), %eax + movl 128(%esp), %edx + movl %eax, %ecx + andl $2147483647, %ecx + cmpl $2146435072, %ecx + ja .L_2TAG_PACKET_6.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_6.0.2 + cmpl $2146435072, %eax + jne .L_2TAG_PACKET_7.0.2 + fldl 1920(%esi) + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_7.0.2: + fldl 1936(%esi) + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_6.0.2: + movsd 8(%esp), %xmm0 + addsd %xmm0, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) +.L_2TAG_PACKET_3.0.2: + movl 52(%esp), %esi + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(cbrt) +# -- End cbrt + +# Start file scope ASM +.weak cbrtl +.equ cbrtl, cbrt +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 1553778919 + .long 3213899486 + .long 3534952507 + .long 3215266280 + .long 1646371399 + .long 3214412045 + .long 477218588 + .long 3216798151 + .long 3582521621 + .long 1066628362 + .long 1007461464 + .long 1068473053 + .long 889629714 + .long 1067378449 + .long 1431655765 + .long 1070945621 + .long 4294967295 + .long 1048575 + .long 0 + .long 0 + .long 0 + .long 3220193280 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 1032192 + .long 0 + .long 0 + .long 528611360 + .long 3220144632 + .long 2884679527 + .long 3220082993 + .long 1991868891 + .long 3220024928 + .long 2298714891 + .long 3219970134 + .long 58835168 + .long 3219918343 + .long 3035110223 + .long 3219869313 + .long 1617585086 + .long 3219822831 + .long 2500867033 + .long 3219778702 + .long 4241943008 + .long 3219736752 + .long 258732970 + .long 3219696825 + .long 404232216 + .long 3219658776 + .long 2172167368 + .long 3219622476 + .long 1544257904 + .long 3219587808 + .long 377579543 + .long 3219554664 + .long 1616385542 + .long 3219522945 + .long 813783277 + .long 3219492562 + .long 3940743189 + .long 3219463431 + .long 2689777499 + .long 3219435478 + .long 1700977147 + .long 3219408632 + .long 3169102082 + .long 3219382828 + .long 327235604 + .long 3219358008 + .long 1244336319 + .long 3219334115 + .long 1300311200 + .long 3219311099 + .long 3095471925 + .long 3219288912 + .long 2166487928 + .long 3219267511 + .long 2913108253 + .long 3219246854 + .long 293672978 + .long 3219226904 + .long 288737297 + .long 3219207624 + .long 1810275472 + .long 3219188981 + .long 174592167 + .long 3219170945 + .long 3539053052 + .long 3219153485 + .long 2164392968 + .long 3219136576 + .long 572345495 + .long 1072698681 + .long 1998204467 + .long 1072709382 + .long 3861501553 + .long 1072719872 + .long 2268192434 + .long 1072730162 + .long 2981979308 + .long 1072740260 + .long 270859143 + .long 1072750176 + .long 2958651392 + .long 1072759916 + .long 313113243 + .long 1072769490 + .long 919449400 + .long 1072778903 + .long 2809328903 + .long 1072788162 + .long 2222981587 + .long 1072797274 + .long 2352530781 + .long 1072806244 + .long 594152517 + .long 1072815078 + .long 1555767199 + .long 1072823780 + .long 4282421314 + .long 1072832355 + .long 2355578597 + .long 1072840809 + .long 1162590619 + .long 1072849145 + .long 797864051 + .long 1072857367 + .long 431273680 + .long 1072865479 + .long 2669831148 + .long 1072873484 + .long 733477752 + .long 1072881387 + .long 4280220604 + .long 1072889189 + .long 801961634 + .long 1072896896 + .long 2915370760 + .long 1072904508 + .long 1159613482 + .long 1072912030 + .long 2689944798 + .long 1072919463 + .long 1248687822 + .long 1072926811 + .long 2967951030 + .long 1072934075 + .long 630170432 + .long 1072941259 + .long 3760898254 + .long 1072948363 + .long 0 + .long 1072955392 + .long 2370273294 + .long 1072962345 + .long 1261754802 + .long 1072972640 + .long 546334065 + .long 1072986123 + .long 1054893830 + .long 1072999340 + .long 1571187597 + .long 1073012304 + .long 1107975175 + .long 1073025027 + .long 3606909377 + .long 1073037519 + .long 1113616747 + .long 1073049792 + .long 4154744632 + .long 1073061853 + .long 3358931423 + .long 1073073713 + .long 4060702372 + .long 1073085379 + .long 747576176 + .long 1073096860 + .long 3023138255 + .long 1073108161 + .long 1419988548 + .long 1073119291 + .long 1914185305 + .long 1073130255 + .long 294389948 + .long 1073141060 + .long 3761802570 + .long 1073151710 + .long 978281566 + .long 1073162213 + .long 823148820 + .long 1073172572 + .long 2420954441 + .long 1073182792 + .long 3815449908 + .long 1073192878 + .long 2046058587 + .long 1073202835 + .long 1807524753 + .long 1073212666 + .long 2628681401 + .long 1073222375 + .long 3225667357 + .long 1073231966 + .long 1555307421 + .long 1073241443 + .long 3454043099 + .long 1073250808 + .long 1208137896 + .long 1073260066 + .long 3659916772 + .long 1073269218 + .long 1886261264 + .long 1073278269 + .long 3593647839 + .long 1073287220 + .long 3086012205 + .long 1073296075 + .long 2769796922 + .long 1073304836 + .long 888716057 + .long 1073317807 + .long 2201465623 + .long 1073334794 + .long 164369365 + .long 1073351447 + .long 3462666733 + .long 1073367780 + .long 2773905457 + .long 1073383810 + .long 1342879088 + .long 1073399550 + .long 2543933975 + .long 1073415012 + .long 1684477781 + .long 1073430209 + .long 3532178543 + .long 1073445151 + .long 1147747300 + .long 1073459850 + .long 1928031793 + .long 1073474314 + .long 2079717015 + .long 1073488553 + .long 4016765315 + .long 1073502575 + .long 3670431139 + .long 1073516389 + .long 3549227225 + .long 1073530002 + .long 11637607 + .long 1073543422 + .long 588220169 + .long 1073556654 + .long 2635407503 + .long 1073569705 + .long 2042029317 + .long 1073582582 + .long 1925128962 + .long 1073595290 + .long 4136375664 + .long 1073607834 + .long 759964600 + .long 1073620221 + .long 4257606771 + .long 1073632453 + .long 297278907 + .long 1073644538 + .long 3655053093 + .long 1073656477 + .long 2442253172 + .long 1073668277 + .long 1111876799 + .long 1073679941 + .long 3330973139 + .long 1073691472 + .long 3438879452 + .long 1073702875 + .long 3671565478 + .long 1073714153 + .long 1317849547 + .long 1073725310 + .long 1642364115 + .long 1073736348 + .long 4050900474 + .long 1014427190 + .long 1157977860 + .long 1016444461 + .long 1374568199 + .long 1017271387 + .long 2809163288 + .long 1016882676 + .long 3742377377 + .long 1013168191 + .long 3101606597 + .long 1017541672 + .long 65224358 + .long 1017217597 + .long 2691591250 + .long 1017266643 + .long 4020758549 + .long 1017689313 + .long 1316310992 + .long 1018030788 + .long 1031537856 + .long 1014090882 + .long 3261395239 + .long 1016413641 + .long 886424999 + .long 1016313335 + .long 3114776834 + .long 1014195875 + .long 1681120620 + .long 1017825416 + .long 1329600273 + .long 1016625740 + .long 465474623 + .long 1017097119 + .long 4251633980 + .long 1017169077 + .long 1986990133 + .long 1017710645 + .long 752958613 + .long 1017159641 + .long 2216216792 + .long 1018020163 + .long 4282860129 + .long 1015924861 + .long 1557627859 + .long 1016039538 + .long 3889219754 + .long 1018086237 + .long 3684996408 + .long 1017353275 + .long 723532103 + .long 1017717141 + .long 2951149676 + .long 1012528470 + .long 831890937 + .long 1017830553 + .long 1031212645 + .long 1017387331 + .long 2741737450 + .long 1017604974 + .long 2863311531 + .long 1003776682 + .long 4276736099 + .long 1013153088 + .long 4111778382 + .long 1015673686 + .long 1728065769 + .long 1016413986 + .long 2708718031 + .long 1018078833 + .long 1069335005 + .long 1015291224 + .long 700037144 + .long 1016482032 + .long 2904566452 + .long 1017226861 + .long 4074156649 + .long 1017622651 + .long 25019565 + .long 1015245366 + .long 3601952608 + .long 1015771755 + .long 3267129373 + .long 1017904664 + .long 503203103 + .long 1014921629 + .long 2122011730 + .long 1018027866 + .long 3927295461 + .long 1014189456 + .long 2790625147 + .long 1016024251 + .long 1330460186 + .long 1016940346 + .long 4033568463 + .long 1015538390 + .long 3695818227 + .long 1017509621 + .long 257573361 + .long 1017208868 + .long 3227697852 + .long 1017337964 + .long 234118548 + .long 1017169577 + .long 4009025803 + .long 1017278524 + .long 1948343394 + .long 1017749310 + .long 678398162 + .long 1018144239 + .long 3083864863 + .long 1016669086 + .long 2415453452 + .long 1017890370 + .long 175467344 + .long 1017330033 + .long 3197359580 + .long 1010339928 + .long 2071276951 + .long 1015941358 + .long 268372543 + .long 1016737773 + .long 938132959 + .long 1017389108 + .long 1816750559 + .long 1017337448 + .long 4119203749 + .long 1017152174 + .long 2578653878 + .long 1013108497 + .long 2470331096 + .long 1014678606 + .long 123855735 + .long 1016553320 + .long 1265650889 + .long 1014782687 + .long 3414398172 + .long 1017182638 + .long 1040773369 + .long 1016158401 + .long 3483628886 + .long 1016886550 + .long 4140499405 + .long 1016191425 + .long 3893477850 + .long 1016964495 + .long 3935319771 + .long 1009634717 + .long 2978982660 + .long 1015027112 + .long 2452709923 + .long 1017990229 + .long 3190365712 + .long 1015835149 + .long 4237588139 + .long 1015832925 + .long 2610678389 + .long 1017962711 + .long 2127316774 + .long 1017405770 + .long 824267502 + .long 1017959463 + .long 2165924042 + .long 1017912225 + .long 2774007076 + .long 1013257418 + .long 4123916326 + .long 1017582284 + .long 1976417958 + .long 1016959909 + .long 4092806412 + .long 1017711279 + .long 119251817 + .long 1015363631 + .long 3475418768 + .long 1017675415 + .long 1972580503 + .long 1015470684 + .long 815541017 + .long 1017517969 + .long 2429917451 + .long 1017397776 + .long 4062888482 + .long 1016749897 + .long 68284153 + .long 1017925678 + .long 2207779246 + .long 1016320298 + .long 1183466520 + .long 1017408657 + .long 143326427 + .long 1017060403 + .long 0 + .long 2146435072 + .long 0 + .long 0 + .long 0 + .long 4293918720 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 1138753536 + .long 0 + .long 0 + .type static_const_table,@object + .size static_const_table,2000 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_cos.S b/libm/x86/s_cos.S new file mode 100644 index 000000000..0f5d57011 --- /dev/null +++ b/libm/x86/s_cos.S @@ -0,0 +1,893 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// 1. RANGE REDUCTION +// +// We perform an initial range reduction from X to r with +// +// X =~= N * pi/32 + r +// +// so that |r| <= pi/64 + epsilon. We restrict inputs to those +// where |N| <= 932560. Beyond this, the range reduction is +// insufficiently accurate. For extremely small inputs, +// denormalization can occur internally, impacting performance. +// This means that the main path is actually only taken for +// 2^-252 <= |X| < 90112. +// +// To avoid branches, we perform the range reduction to full +// accuracy each time. +// +// X - N * (P_1 + P_2 + P_3) +// +// where P_1 and P_2 are 32-bit numbers (so multiplication by N +// is exact) and P_3 is a 53-bit number. Together, these +// approximate pi well enough for all cases in the restricted +// range. +// +// The main reduction sequence is: +// +// y = 32/pi * x +// N = integer(y) +// (computed by adding and subtracting off SHIFTER) +// +// m_1 = N * P_1 +// m_2 = N * P_2 +// r_1 = x - m_1 +// r = r_1 - m_2 +// (this r can be used for most of the calculation) +// +// c_1 = r_1 - r +// m_3 = N * P_3 +// c_2 = c_1 - m_2 +// c = c_2 - m_3 +// +// 2. MAIN ALGORITHM +// +// The algorithm uses a table lookup based on B = M * pi / 32 +// where M = N mod 64. The stored values are: +// sigma closest power of 2 to cos(B) +// C_hl 53-bit cos(B) - sigma +// S_hi + S_lo 2 * 53-bit sin(B) +// +// The computation is organized as follows: +// +// sin(B + r + c) = [sin(B) + sigma * r] + +// r * (cos(B) - sigma) + +// sin(B) * [cos(r + c) - 1] + +// cos(B) * [sin(r + c) - r] +// +// which is approximately: +// +// [S_hi + sigma * r] + +// C_hl * r + +// S_lo + S_hi * [(cos(r) - 1) - r * c] + +// (C_hl + sigma) * [(sin(r) - r) + c] +// +// and this is what is actually computed. We separate this sum +// into four parts: +// +// hi + med + pols + corr +// +// where +// +// hi = S_hi + sigma r +// med = C_hl * r +// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r) +// corr = S_lo + c * ((C_hl + sigma) - S_hi * r) +// +// 3. POLYNOMIAL +// +// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) * +// (sin(r) - r) can be rearranged freely, since it is quite +// small, so we exploit parallelism to the fullest. +// +// psc4 = SC_4 * r_1 +// msc4 = psc4 * r +// r2 = r * r +// msc2 = SC_2 * r2 +// r4 = r2 * r2 +// psc3 = SC_3 + msc4 +// psc1 = SC_1 + msc2 +// msc3 = r4 * psc3 +// sincospols = psc1 + msc3 +// pols = sincospols * +// +// +// 4. CORRECTION TERM +// +// This is where the "c" component of the range reduction is +// taken into account; recall that just "r" is used for most of +// the calculation. +// +// -c = m_3 - c_2 +// -d = S_hi * r - (C_hl + sigma) +// corr = -c * -d + S_lo +// +// 5. COMPENSATED SUMMATIONS +// +// The two successive compensated summations add up the high +// and medium parts, leaving just the low parts to add up at +// the end. +// +// rs = sigma * r +// res_int = S_hi + rs +// k_0 = S_hi - res_int +// k_2 = k_0 + rs +// med = C_hl * r +// res_hi = res_int + med +// k_1 = res_int - res_hi +// k_3 = k_1 + med +// +// 6. FINAL SUMMATION +// +// We now add up all the small parts: +// +// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3 +// +// Now the overall result is just: +// +// res_hi + res_lo +// +// 7. SMALL ARGUMENTS +// +// Inputs with |X| < 2^-252 are treated specially as +// 1 - |x|. +// +// Special cases: +// cos(NaN) = quiet NaN, and raise invalid exception +// cos(INF) = NaN and raise invalid exception +// cos(0) = 1 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin cos +ENTRY(cos) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 56(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + pextrw $3, %xmm0, %eax + andl $32767, %eax + subl $12336, %eax + cmpl $4293, %eax + ja .L_2TAG_PACKET_0.0.2 + movsd 2160(%ebx), %xmm1 + mulsd %xmm0, %xmm1 + movapd 2240(%ebx), %xmm5 + movsd 2224(%ebx), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + movsd 2128(%ebx), %xmm3 + movapd 2112(%ebx), %xmm2 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %edx + cvtsi2sdl %edx, %xmm1 + mulsd %xmm1, %xmm3 + unpcklpd %xmm1, %xmm1 + addl $1865232, %edx + movapd %xmm0, %xmm4 + andl $63, %edx + movapd 2096(%ebx), %xmm5 + lea (%ebx), %eax + shll $5, %edx + addl %edx, %eax + mulpd %xmm1, %xmm2 + subsd %xmm3, %xmm0 + mulsd 2144(%ebx), %xmm1 + subsd %xmm3, %xmm4 + movsd 8(%eax), %xmm7 + unpcklpd %xmm0, %xmm0 + movapd %xmm4, %xmm3 + subsd %xmm2, %xmm4 + mulpd %xmm0, %xmm5 + subpd %xmm2, %xmm0 + movapd 2064(%ebx), %xmm6 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm2, %xmm3 + movapd (%eax), %xmm2 + subsd %xmm3, %xmm1 + movsd 24(%eax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd 2080(%ebx), %xmm5 + mulsd (%eax), %xmm4 + addpd 2048(%ebx), %xmm6 + mulpd %xmm0, %xmm5 + movapd %xmm3, %xmm0 + addsd 8(%eax), %xmm3 + mulpd %xmm7, %xmm1 + movapd %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movsd 8(%eax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%eax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm0, %xmm5 + addsd %xmm7, %xmm3 + addsd %xmm5, %xmm1 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + unpckhpd %xmm6, %xmm6 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm4 + movsd %xmm4, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + jg .L_2TAG_PACKET_2.0.2 + pextrw $3, %xmm0, %eax + andl $32767, %eax + pinsrw $3, %eax, %xmm0 + movsd 2192(%ebx), %xmm1 + subsd %xmm0, %xmm1 + movsd %xmm1, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movl 132(%esp), %eax + andl $2146435072, %eax + cmpl $2146435072, %eax + je .L_2TAG_PACKET_3.0.2 + subl $32, %esp + movsd %xmm0, (%esp) + lea 40(%esp), %eax + movl %eax, 8(%esp) + movl $1, %eax + movl %eax, 12(%esp) + call __libm_sincos_huge + addl $32, %esp + fldl 8(%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_3.0.2: + fldl 128(%esp) + fmull 2208(%ebx) +.L_2TAG_PACKET_1.0.2: + movl 56(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(cos) +# -- End cos + +# Start file scope ASM +.weak cosl +.equ cosl, cos +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 1072693248 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 1072693248 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 1071644672 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 1071644672 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 1070596096 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 1070596096 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 1069547520 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 3217031168 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 3218079744 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 3218079744 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 3219128320 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 3219128320 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 3220176896 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 3220176896 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 3219128320 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 3219128320 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 3218079744 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 3218079744 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 3217031168 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 1069547520 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 1070596096 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 1070596096 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 1071644672 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 1071644672 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 1072693248 + .long 1431655765 + .long 3217380693 + .long 0 + .long 3219128320 + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1067799893 + .long 436314138 + .long 3207201184 + .long 381774871 + .long 3210133868 + .long 2773927732 + .long 1053236707 + .long 436314138 + .long 1056571808 + .long 442499072 + .long 1032893537 + .long 442499072 + .long 1032893537 + .long 1413480448 + .long 1069097467 + .long 0 + .long 0 + .long 771977331 + .long 996350346 + .long 0 + .long 0 + .long 1841940611 + .long 1076125488 + .long 0 + .long 0 + .long 0 + .long 1127743488 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .type static_const_table,@object + .size static_const_table,2256 + .data + .hidden __libm_sincos_huge + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_expm1.S b/libm/x86/s_expm1.S new file mode 100644 index 000000000..58819efc4 --- /dev/null +++ b/libm/x86/s_expm1.S @@ -0,0 +1,703 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Description: +// Let K = 64 (table size). +// +// Four sub-domains: +// 1. |x| < 1/(2*K) +// expm1(x) ~ P(x) +// 2. 1/(2*K) <= |x| <= 56*log(2) +// x x/log(2) n +// e - 1 = 2 = 2 * T[j] * (1 + P(y)) - 1 +// 3. 56*log(2) < x < MAX_LOG +// x x x/log(2) n +// e - 1 ~ e = 2 = 2 * T[j] * (1 + P(y)) +// 4. x < -56*log(2) +// x x +// e - 1 = -1 + e ~ -1 +// where +// x = m*log(2)/K + y, y in [-log(2)/K..log(2)/K] +// m = n*K + j, m,n,j - signed integer, j in [-K/2..K/2] +// j/K +// values of 2 are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]). +// +// P(y) is a minimax polynomial approximation of exp(x)-1 +// on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V). +// +// In case 3, to avoid problems with arithmetic overflow and underflow, +// n n1 n2 +// value of 2 is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2] +// and BIAS is a value of exponent bias. +// +// Special cases: +// expm1(NaN) is NaN +// expm1(+INF) is +INF +// expm1(-INF) is -1 +// expm1(x) is x for subnormals +// for finite argument, only expm1(0)=0 is exact. +// For IEEE double +// if x > 709.782712893383973096 then expm1(x) overflow +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin expm1 +ENTRY(expm1) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 64(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + unpcklpd %xmm0, %xmm0 + movapd 64(%ebx), %xmm1 + movapd 48(%ebx), %xmm6 + movapd 80(%ebx), %xmm2 + movapd 96(%ebx), %xmm3 + pextrw $3, %xmm0, %eax + andl $32767, %eax + movl $16527, %edx + subl %eax, %edx + subl $16304, %eax + orl %eax, %edx + cmpl $-2147483648, %edx + jae .L_2TAG_PACKET_0.0.2 + mulpd %xmm0, %xmm1 + addpd %xmm6, %xmm1 + movapd %xmm1, %xmm7 + subpd %xmm6, %xmm1 + mulpd %xmm1, %xmm2 + movapd 112(%ebx), %xmm4 + mulpd %xmm1, %xmm3 + movapd 128(%ebx), %xmm5 + subpd %xmm2, %xmm0 + movd %xmm7, %eax + movl %eax, %ecx + andl $63, %ecx + shll $4, %ecx + sarl $6, %eax + movl %eax, %edx + subpd %xmm3, %xmm0 + movapd 160(%ebx,%ecx), %xmm2 + movsd 144(%ebx), %xmm3 + mulpd %xmm0, %xmm4 + movapd %xmm0, %xmm1 + mulpd %xmm0, %xmm0 + mulsd %xmm0, %xmm3 + addpd %xmm4, %xmm5 + mulsd %xmm0, %xmm0 + movapd %xmm2, %xmm4 + unpckhpd %xmm2, %xmm2 + movdqa 16(%ebx), %xmm6 + pand %xmm6, %xmm7 + movdqa 32(%ebx), %xmm6 + paddq %xmm6, %xmm7 + psllq $46, %xmm7 + mulsd %xmm0, %xmm3 + mulpd %xmm5, %xmm0 + addl $894, %edx + cmpl $1916, %edx + ja .L_2TAG_PACKET_1.0.2 + addsd %xmm3, %xmm0 + xorpd %xmm3, %xmm3 + movl $16368, %eax + pinsrw $3, %eax, %xmm3 + orpd %xmm7, %xmm2 + mulsd %xmm4, %xmm7 + movapd %xmm3, %xmm6 + addsd %xmm1, %xmm3 + pextrw $3, %xmm2, %edx + pshufd $238, %xmm0, %xmm5 + psrlq $38, %xmm3 + psllq $38, %xmm3 + movapd %xmm2, %xmm4 + subsd %xmm3, %xmm6 + addsd %xmm5, %xmm0 + addsd %xmm6, %xmm1 + addsd %xmm7, %xmm4 + mulsd %xmm3, %xmm7 + mulsd %xmm2, %xmm3 + xorpd %xmm5, %xmm5 + movl $16368, %eax + pinsrw $3, %eax, %xmm5 + addsd %xmm1, %xmm0 + movl $17184, %ecx + subl %edx, %ecx + subl $16256, %edx + orl %edx, %ecx + jl .L_2TAG_PACKET_2.0.2 + mulsd %xmm4, %xmm0 + subsd %xmm5, %xmm3 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 +.L_2TAG_PACKET_3.0.2: + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_2.0.2: + cmpl $0, %edx + jl .L_2TAG_PACKET_5.0.2 + mulsd %xmm4, %xmm0 + subsd %xmm5, %xmm7 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_5.0.2: + mulsd %xmm4, %xmm0 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + subsd %xmm5, %xmm0 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_1.0.2: + movl 132(%esp), %ecx + addsd %xmm0, %xmm1 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + cmpl $0, %ecx + jl .L_2TAG_PACKET_6.0.2 + fstcw 24(%esp) + movzwl 24(%esp), %edx + orl $768, %edx + movw %dx, 28(%esp) + fldcw 28(%esp) + movl %eax, %edx + sarl $1, %eax + subl %eax, %edx + movdqa (%ebx), %xmm6 + pandn %xmm2, %xmm6 + addl $1023, %eax + movd %eax, %xmm3 + psllq $52, %xmm3 + orpd %xmm3, %xmm6 + mulsd %xmm3, %xmm4 + movsd %xmm0, 8(%esp) + fldl 8(%esp) + movsd %xmm6, 16(%esp) + fldl 16(%esp) + movsd %xmm4, 16(%esp) + fldl 16(%esp) + addl $1023, %edx + movd %edx, %xmm4 + psllq $52, %xmm4 + faddp %st, %st(1) + fmul %st, %st(1) + faddp %st, %st(1) + movsd %xmm4, 8(%esp) + fldl 8(%esp) + fmulp %st, %st(1) + fstpl 8(%esp) + movsd 8(%esp), %xmm0 + fldcw 24(%esp) + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $32752, %ecx + jae .L_2TAG_PACKET_7.0.2 + jmp .L_2TAG_PACKET_4.0.2 + cmpl $-2147483648, %ecx + jb .L_2TAG_PACKET_7.0.2 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_7.0.2: + movl $41, %edx +.L_2TAG_PACKET_8.0.2: + movsd %xmm0, (%esp) + movsd 128(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_10.0.2: + cmpl $2146435072, %eax + jae .L_2TAG_PACKET_11.0.2 + movsd 1272(%ebx), %xmm0 + mulsd %xmm0, %xmm0 + movl $41, %edx + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_11.0.2: + movl 132(%esp), %eax + movl 128(%esp), %edx + movl %eax, %ecx + andl $2147483647, %eax + cmpl $2146435072, %eax + ja .L_2TAG_PACKET_12.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_12.0.2 + cmpl $0, %ecx + jl .L_2TAG_PACKET_13.0.2 + movsd 1256(%ebx), %xmm0 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_13.0.2: + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_12.0.2: + movsd 128(%esp), %xmm0 + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_14.0.2: + addl $16304, %eax + cmpl $15504, %eax + jb .L_2TAG_PACKET_15.0.2 + movapd 1184(%ebx), %xmm2 + pshufd $68, %xmm0, %xmm1 + movapd 1200(%ebx), %xmm3 + movapd 1216(%ebx), %xmm4 + movsd 1232(%ebx), %xmm5 + mulsd %xmm1, %xmm1 + xorpd %xmm6, %xmm6 + movl $16352, %eax + pinsrw $3, %eax, %xmm6 + mulpd %xmm0, %xmm2 + xorpd %xmm7, %xmm7 + movl $16368, %edx + pinsrw $3, %edx, %xmm7 + addpd %xmm3, %xmm2 + mulsd %xmm1, %xmm5 + pshufd $228, %xmm1, %xmm3 + mulpd %xmm1, %xmm1 + mulsd %xmm0, %xmm6 + mulpd %xmm0, %xmm2 + addpd %xmm4, %xmm2 + movapd %xmm7, %xmm4 + addsd %xmm6, %xmm7 + mulpd %xmm3, %xmm1 + psrlq $27, %xmm7 + psllq $27, %xmm7 + movsd 1288(%ebx), %xmm3 + subsd %xmm7, %xmm4 + mulpd %xmm1, %xmm2 + addsd %xmm4, %xmm6 + pshufd $238, %xmm2, %xmm1 + addsd %xmm2, %xmm6 + andpd %xmm0, %xmm3 + movapd %xmm0, %xmm4 + addsd %xmm6, %xmm1 + subsd %xmm3, %xmm0 + addsd %xmm5, %xmm1 + mulsd %xmm7, %xmm3 + mulsd %xmm7, %xmm0 + mulsd %xmm1, %xmm4 + addsd %xmm4, %xmm0 + addsd %xmm3, %xmm0 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_15.0.2: + cmpl $16, %eax + jae .L_2TAG_PACKET_3.0.2 + movapd %xmm0, %xmm2 + movd %xmm0, %eax + psrlq $31, %xmm2 + movd %xmm2, %ecx + orl %ecx, %eax + je .L_2TAG_PACKET_3.0.2 + movl $16, %edx + xorpd %xmm1, %xmm1 + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm1 + movl $42, %edx + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_0.0.2: + cmpl $0, %eax + jl .L_2TAG_PACKET_14.0.2 + movl 132(%esp), %eax + cmpl $1083179008, %eax + jge .L_2TAG_PACKET_10.0.2 + cmpl $-1048576, %eax + jae .L_2TAG_PACKET_11.0.2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_4.0.2: + movsd %xmm0, 48(%esp) + fldl 48(%esp) +.L_2TAG_PACKET_9.0.2: + movl 64(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(expm1) +# -- End expm1 + +# Start file scope ASM +.weak expm1l +.equ expm1l, expm1 +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 4293918720 + .long 0 + .long 4293918720 + .long 4294967232 + .long 0 + .long 4294967232 + .long 0 + .long 65472 + .long 0 + .long 65472 + .long 0 + .long 0 + .long 1127743488 + .long 0 + .long 1127743488 + .long 1697350398 + .long 1079448903 + .long 1697350398 + .long 1079448903 + .long 4277796864 + .long 1065758274 + .long 4277796864 + .long 1065758274 + .long 3164486458 + .long 1025308570 + .long 3164486458 + .long 1025308570 + .long 1963358694 + .long 1065423121 + .long 1431655765 + .long 1069897045 + .long 1431655765 + .long 1067799893 + .long 0 + .long 1071644672 + .long 381774871 + .long 1062650220 + .long 381774871 + .long 1062650220 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1000070955 + .long 1042145304 + .long 1040187392 + .long 11418 + .long 988267849 + .long 1039500660 + .long 3539992576 + .long 22960 + .long 36755401 + .long 1042114290 + .long 402653184 + .long 34629 + .long 3634769483 + .long 1042178627 + .long 1820327936 + .long 46424 + .long 2155991225 + .long 1041560680 + .long 847249408 + .long 58348 + .long 2766913307 + .long 1039293264 + .long 3489660928 + .long 70401 + .long 3651174602 + .long 1040488175 + .long 2927624192 + .long 82586 + .long 3073892131 + .long 1042240606 + .long 1006632960 + .long 94904 + .long 1328391742 + .long 1042019037 + .long 3942645760 + .long 107355 + .long 2650893825 + .long 1041903210 + .long 822083584 + .long 119943 + .long 2397289153 + .long 1041802037 + .long 2281701376 + .long 132667 + .long 430997175 + .long 1042110606 + .long 1845493760 + .long 145530 + .long 1230936525 + .long 1041801015 + .long 1702887424 + .long 158533 + .long 740675935 + .long 1040178913 + .long 4110417920 + .long 171677 + .long 3489810261 + .long 1041825986 + .long 2793406464 + .long 184965 + .long 2532600530 + .long 1040767882 + .long 167772160 + .long 198398 + .long 3542557060 + .long 1041827263 + .long 2986344448 + .long 211976 + .long 1401563777 + .long 1041061093 + .long 922746880 + .long 225703 + .long 3129406026 + .long 1041852413 + .long 880803840 + .long 239579 + .long 900993572 + .long 1039283234 + .long 1275068416 + .long 253606 + .long 2115029358 + .long 1042140042 + .long 562036736 + .long 267786 + .long 1086643152 + .long 1041785419 + .long 1610612736 + .long 282120 + .long 82864366 + .long 1041256244 + .long 3045064704 + .long 296610 + .long 2392968152 + .long 1040913683 + .long 3573547008 + .long 311258 + .long 2905856183 + .long 1040002214 + .long 1988100096 + .long 326066 + .long 3742008261 + .long 1040011137 + .long 1451229184 + .long 341035 + .long 863393794 + .long 1040880621 + .long 914358272 + .long 356167 + .long 1446136837 + .long 1041372426 + .long 3707764736 + .long 371463 + .long 927855201 + .long 1040617636 + .long 360710144 + .long 386927 + .long 1492679939 + .long 1041050306 + .long 2952790016 + .long 402558 + .long 608827001 + .long 1041582217 + .long 2181038080 + .long 418360 + .long 606260204 + .long 1042271987 + .long 1711276032 + .long 434334 + .long 3163044019 + .long 1041843851 + .long 1006632960 + .long 450482 + .long 4148747325 + .long 1041962972 + .long 3900702720 + .long 466805 + .long 802924201 + .long 1041275378 + .long 1442840576 + .long 483307 + .long 3052749833 + .long 1041940577 + .long 1937768448 + .long 499988 + .long 2216116399 + .long 1041486744 + .long 914358272 + .long 516851 + .long 2729697836 + .long 1041445764 + .long 2566914048 + .long 533897 + .long 540608356 + .long 1041310907 + .long 2600468480 + .long 551129 + .long 2916344493 + .long 1040535661 + .long 1107296256 + .long 568549 + .long 731391814 + .long 1039497014 + .long 2566914048 + .long 586158 + .long 1024722704 + .long 1041461625 + .long 2961178624 + .long 603959 + .long 3806831748 + .long 1041732499 + .long 2675965952 + .long 621954 + .long 238953304 + .long 1040316488 + .long 2189426688 + .long 640145 + .long 749123235 + .long 1041725785 + .long 2063597568 + .long 658534 + .long 1168187977 + .long 1041175214 + .long 2986344448 + .long 677123 + .long 3506096399 + .long 1042186095 + .long 1426063360 + .long 695915 + .long 1470221620 + .long 1041675499 + .long 2566914048 + .long 714911 + .long 3182425146 + .long 1041483134 + .long 3087007744 + .long 734114 + .long 3131698208 + .long 1042208657 + .long 4068474880 + .long 753526 + .long 2300504125 + .long 1041428596 + .long 2415919104 + .long 773150 + .long 2290297931 + .long 1037388400 + .long 3716153344 + .long 792987 + .long 3532148223 + .long 1041626194 + .long 771751936 + .long 813041 + .long 1161884404 + .long 1042015258 + .long 3699376128 + .long 833312 + .long 876383176 + .long 1037968878 + .long 1241513984 + .long 853805 + .long 3379986796 + .long 1042213153 + .long 3699376128 + .long 874520 + .long 1545797737 + .long 1041681569 + .long 58720256 + .long 895462 + .long 2925146801 + .long 1042212567 + .long 855638016 + .long 916631 + .long 1316627971 + .long 1038516204 + .long 3883925504 + .long 938030 + .long 3267869137 + .long 1040337004 + .long 2726297600 + .long 959663 + .long 3720868999 + .long 1041782409 + .long 3992977408 + .long 981531 + .long 433316142 + .long 1041994064 + .long 1526726656 + .long 1003638 + .long 781232103 + .long 1040093400 + .long 2172649472 + .long 1025985 + .long 2773927732 + .long 1053236707 + .long 381774871 + .long 1062650220 + .long 379653899 + .long 1056571845 + .long 286331153 + .long 1065423121 + .long 436314138 + .long 1059717536 + .long 1431655765 + .long 1067799893 + .long 1431655765 + .long 1069897045 + .long 0 + .long 1071644672 + .long 0 + .long 1072693248 + .long 0 + .long 2146435072 + .long 0 + .long 0 + .long 4294967295 + .long 2146435071 + .long 0 + .long 1048576 + .long 4227858432 + .long 4294967295 + .type static_const_table,@object + .size static_const_table,1296 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_log1p.S b/libm/x86/s_log1p.S new file mode 100644 index 000000000..76fb8265e --- /dev/null +++ b/libm/x86/s_log1p.S @@ -0,0 +1,828 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpps instruction (B0) +// B = int((B0*2^7+0.5))/2^7 +// +// Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts) +// +// Result: k*log(2) - log(B) + p(r) +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log1p(NaN) = quiet NaN, and raise invalid exception +// log1p(+INF) = that INF +// log1p(x) = NaN if x < -1 or x = -INF, and raises invalid exception +// log1p(-1) = -INF, and raises divide-by-zero exception +// log1p(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin log1p +ENTRY(log1p) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + xorpd %xmm3, %xmm3 + movl $32768, %ecx + movd %ecx, %xmm4 + movsd 2128(%ebx), %xmm5 + pshufd $68, %xmm0, %xmm7 + movapd %xmm2, %xmm6 + pextrw $3, %xmm0, %ecx + addsd %xmm2, %xmm0 + movapd %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + subsd %xmm0, %xmm6 + orpd %xmm2, %xmm0 + psllq $5, %xmm0 + psrlq $34, %xmm0 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 + addsd %xmm6, %xmm7 + rcpss %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + andl $32752, %ecx + cmpl $16256, %ecx + jb .L_2TAG_PACKET_1.0.2 + andl $32752, %eax + movl $32720, %ecx + subl %eax, %ecx + pinsrw $3, %ecx, %xmm3 +.L_2TAG_PACKET_2.0.2: + mulsd %xmm3, %xmm7 + paddd %xmm4, %xmm0 + xorpd %xmm4, %xmm4 + movl $14336, %ecx + pinsrw $3, %ecx, %xmm4 + orpd %xmm2, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm1, %xmm5 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm1 + paddd %xmm4, %xmm0 + mulsd %xmm0, %xmm5 + movl $16352, %ecx + subl %ecx, %eax + cvtsi2sdl %eax, %xmm4 + mulsd %xmm0, %xmm7 + mulsd %xmm0, %xmm1 + movsd 2064(%ebx), %xmm6 + movapd 2080(%ebx), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd (%ebx,%edx), %xmm0 + movapd 2096(%ebx), %xmm2 + addsd %xmm5, %xmm1 + movapd %xmm1, %xmm5 + addsd %xmm7, %xmm1 + subsd %xmm1, %xmm5 + addsd %xmm5, %xmm7 + mulsd %xmm4, %xmm6 + mulsd 2072(%ebx), %xmm4 + mulsd %xmm1, %xmm3 + pshufd $68, %xmm1, %xmm5 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm2 + mulpd %xmm5, %xmm5 + pshufd $228, %xmm0, %xmm6 + addsd %xmm1, %xmm0 + addpd 2112(%ebx), %xmm2 + mulpd %xmm5, %xmm3 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm2 + addsd %xmm7, %xmm4 + mulsd %xmm1, %xmm7 + addsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm6 + mulsd %xmm5, %xmm5 + addsd %xmm6, %xmm4 + subsd %xmm7, %xmm1 + addpd %xmm3, %xmm2 + addsd %xmm4, %xmm1 + mulpd %xmm5, %xmm2 + addsd %xmm2, %xmm1 + pshufd $238, %xmm2, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_0.0.2: + movsd 112(%esp), %xmm0 + movapd %xmm0, %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_4.0.2 + cmpl $0, %eax + je .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_6.0.2: + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_7.0.2: + ja .L_2TAG_PACKET_6.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_6.0.2 + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_4.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_7.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_8.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + movl $141, %edx + mulsd %xmm1, %xmm0 +.L_2TAG_PACKET_9.0.2: + movsd %xmm0, (%esp) + movsd 112(%esp), %xmm0 + fldl (%esp) + jmp .L_2TAG_PACKET_10.0.2 +.L_2TAG_PACKET_5.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $140, %edx + jmp .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_1.0.2: + movsd 112(%esp), %xmm0 + cmpl $15504, %ecx + jb .L_2TAG_PACKET_11.0.2 + movapd 2144(%ebx), %xmm1 + pshufd $68, %xmm0, %xmm0 + movapd 2160(%ebx), %xmm2 + pshufd $68, %xmm0, %xmm4 + movapd 2176(%ebx), %xmm3 + mulpd %xmm0, %xmm1 + xorpd %xmm6, %xmm6 + mulpd %xmm4, %xmm4 + addpd %xmm2, %xmm1 + pshufd $68, %xmm4, %xmm5 + mulpd %xmm0, %xmm4 + movl $49120, %eax + pinsrw $3, %eax, %xmm6 + mulpd %xmm0, %xmm1 + mulsd %xmm4, %xmm4 + addpd %xmm3, %xmm1 + mulsd %xmm6, %xmm5 + mulpd %xmm4, %xmm1 + pshufd $238, %xmm1, %xmm7 + addsd %xmm7, %xmm1 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_11.0.2: + cmpl $16, %ecx + jb .L_2TAG_PACKET_12.0.2 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_12.0.2: + movapd %xmm0, %xmm1 + mulsd %xmm1, %xmm1 + jmp .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_3.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_10.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(log1p) +# -- End log1p + +# Start file scope ASM +.weak log1pl +.equ log1pl, log1p +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 4277811200 + .long 1072049730 + .long 2479318832 + .long 1026487127 + .long 2854492160 + .long 1072033410 + .long 215631550 + .long 1025638968 + .long 1547061248 + .long 1072017216 + .long 2886781435 + .long 1026423395 + .long 649825280 + .long 1072001146 + .long 4281533405 + .long 1024038923 + .long 646346752 + .long 1071985198 + .long 1562735921 + .long 1023790276 + .long 2203734016 + .long 1071969370 + .long 1838397691 + .long 3173936209 + .long 1872169984 + .long 1071953661 + .long 3981202460 + .long 1022325013 + .long 669557760 + .long 1071938069 + .long 4182597802 + .long 3173174122 + .long 4076413952 + .long 1071922591 + .long 1209029111 + .long 3170736207 + .long 556125184 + .long 1071907228 + .long 821086028 + .long 3173437049 + .long 204914688 + .long 1071891976 + .long 2097025986 + .long 3171071798 + .long 387545088 + .long 1071876834 + .long 3142936996 + .long 3173092218 + .long 2912783360 + .long 1071861800 + .long 2502420140 + .long 1024505919 + .long 1144260608 + .long 1071846874 + .long 3315658140 + .long 3173469843 + .long 1471209472 + .long 1071832053 + .long 129621009 + .long 3172443877 + .long 1829683200 + .long 1071817336 + .long 3885467693 + .long 1025535275 + .long 288676864 + .long 1071802722 + .long 86139472 + .long 3171639793 + .long 3636378624 + .long 1071788208 + .long 1850238587 + .long 1024654342 + .long 1606817792 + .long 1071773795 + .long 3388899795 + .long 3173675586 + .long 1236164608 + .long 1071759480 + .long 3983599207 + .long 1020046558 + .long 1089616896 + .long 1071745262 + .long 4171974224 + .long 1024773198 + .long 4143093760 + .long 1071731139 + .long 2727587401 + .long 3173965207 + .long 600267776 + .long 1071717112 + .long 3147685042 + .long 3173353031 + .long 2249313280 + .long 1071703177 + .long 125835074 + .long 1025255832 + .long 3805303808 + .long 1071689334 + .long 2289991207 + .long 1025460331 + .long 87278592 + .long 1071675583 + .long 1106114045 + .long 1025933602 + .long 3195405312 + .long 1071661920 + .long 3885316576 + .long 3171206239 + .long 3853649920 + .long 1071648346 + .long 2977069852 + .long 3171236771 + .long 2944026624 + .long 1071625048 + .long 1008093493 + .long 1023444474 + .long 3993180160 + .long 1071598247 + .long 1862355595 + .long 1024642533 + .long 1454641152 + .long 1071571617 + .long 1514603089 + .long 1026500596 + .long 3286085632 + .long 1071545154 + .long 1400028424 + .long 3173279056 + .long 438773760 + .long 1071518858 + .long 120727864 + .long 3172148914 + .long 1212979200 + .long 1071492725 + .long 1625055594 + .long 3172901933 + .long 1189017600 + .long 1071466754 + .long 3920062376 + .long 1025727407 + .long 403064832 + .long 1071440943 + .long 1053271728 + .long 3171391427 + .long 3343210496 + .long 1071415289 + .long 3243395502 + .long 3173627613 + .long 1765777408 + .long 1071389792 + .long 2145968512 + .long 1026354304 + .long 461430784 + .long 1071364449 + .long 4094322285 + .long 1026021467 + .long 71706624 + .long 1071339258 + .long 763632021 + .long 1024496933 + .long 1380503552 + .long 1071314217 + .long 1383547992 + .long 3173088453 + .long 1015732224 + .long 1071289325 + .long 3198646877 + .long 1025390322 + .long 35977216 + .long 1071264580 + .long 2141026805 + .long 1025754693 + .long 3927306240 + .long 1071239979 + .long 282116272 + .long 3173394334 + .long 1125341184 + .long 1071215523 + .long 2768427504 + .long 3172279059 + .long 1666971648 + .long 1071191208 + .long 786837629 + .long 3172427445 + .long 2827694080 + .long 1071167033 + .long 3857122416 + .long 3173014241 + .long 2003683328 + .long 1071142997 + .long 859010954 + .long 1026545007 + .long 1004017664 + .long 1071119098 + .long 3356644970 + .long 3173458064 + .long 1753020416 + .long 1071095334 + .long 788338552 + .long 1026157693 + .long 1992718336 + .long 1071071704 + .long 1239179443 + .long 1026394889 + .long 3870234624 + .long 1071048206 + .long 2082614663 + .long 1024926053 + .long 1050437632 + .long 1071024840 + .long 660007840 + .long 1025548499 + .long 188395520 + .long 1071001603 + .long 3878792704 + .long 3173889571 + .long 3747176448 + .long 1070978493 + .long 144991708 + .long 3171552042 + .long 1405669376 + .long 1070955511 + .long 3999088879 + .long 1025486317 + .long 121151488 + .long 1070932654 + .long 2170865497 + .long 1026473584 + .long 2652319744 + .long 1070909920 + .long 453695652 + .long 3173916809 + .long 3262236672 + .long 1070887309 + .long 157800053 + .long 3173984206 + .long 601221120 + .long 1070864820 + .long 3968917661 + .long 1023992886 + .long 1999843328 + .long 1070842450 + .long 3053895004 + .long 1024998228 + .long 1992167424 + .long 1070820199 + .long 2968614856 + .long 1024552653 + .long 3788726272 + .long 1070798065 + .long 3542170808 + .long 3173573242 + .long 2094829568 + .long 1070776048 + .long 1246758132 + .long 1026202874 + .long 288675840 + .long 1070754146 + .long 3747328950 + .long 1026331585 + .long 1829681152 + .long 1070732357 + .long 3125197546 + .long 1024100318 + .long 1666869248 + .long 1070710681 + .long 1363656119 + .long 1026336493 + .long 3417110528 + .long 1070689116 + .long 4154791553 + .long 1026267853 + .long 2183653376 + .long 1070667662 + .long 1671819292 + .long 3173785870 + .long 1734434816 + .long 1070646317 + .long 373091049 + .long 1025972363 + .long 1615681536 + .long 1070625080 + .long 384650897 + .long 1022926043 + .long 1445382144 + .long 1070603950 + .long 344320330 + .long 3172397196 + .long 1823715328 + .long 1070569756 + .long 3389841200 + .long 1025231852 + .long 3839688704 + .long 1070527917 + .long 1706790417 + .long 3167363349 + .long 4293332992 + .long 1070486286 + .long 1614935088 + .long 1019351591 + .long 2966720512 + .long 1070444861 + .long 4145393717 + .long 3173711658 + .long 4066729984 + .long 1070403639 + .long 1974925028 + .long 3171437182 + .long 3337621504 + .long 1070362619 + .long 3314953170 + .long 3169971314 + .long 943448064 + .long 1070321799 + .long 1498682038 + .long 3173862340 + .long 1465634816 + .long 1070281176 + .long 1319952810 + .long 3171693965 + .long 1015734272 + .long 1070240749 + .long 1347821929 + .long 3173544515 + .long 118001664 + .long 1070200516 + .long 1751482746 + .long 1026134093 + .long 3707174912 + .long 1070160474 + .long 1486946159 + .long 1023930920 + .long 3946381312 + .long 1070120623 + .long 2867408081 + .long 3171368276 + .long 1699848192 + .long 1070080961 + .long 2590187139 + .long 1025379803 + .long 2235846656 + .long 1070041485 + .long 1888568069 + .long 3172754960 + .long 2339729408 + .long 1070002194 + .long 3852214753 + .long 3173323149 + .long 3196850176 + .long 1069963086 + .long 742141560 + .long 1025101707 + .long 1800683520 + .long 1069924160 + .long 3949500444 + .long 3172102179 + .long 3835801600 + .long 1069885413 + .long 3848895943 + .long 1025913832 + .long 2201202688 + .long 1069846845 + .long 1425913464 + .long 1025868665 + .long 2778279936 + .long 1069808453 + .long 2120889677 + .long 3173831128 + .long 2954203136 + .long 1069770236 + .long 592147081 + .long 1019621288 + .long 210141184 + .long 1069732193 + .long 3414275233 + .long 1023647084 + .long 709476352 + .long 1069694321 + .long 2413027164 + .long 1024462115 + .long 2116284416 + .long 1069656619 + .long 1144559924 + .long 1026336654 + .long 2183651328 + .long 1069619086 + .long 3459057650 + .long 1025634168 + .long 3047047168 + .long 1069581720 + .long 1879674924 + .long 3173508573 + .long 970711040 + .long 1069541521 + .long 1335954173 + .long 3173332182 + .long 2198478848 + .long 1069467449 + .long 2951103968 + .long 3173892200 + .long 1669611520 + .long 1069393703 + .long 531044147 + .long 1025149248 + .long 29114368 + .long 1069320280 + .long 3327831251 + .long 1025918673 + .long 2376949760 + .long 1069247176 + .long 737634533 + .long 3172176000 + .long 1085390848 + .long 1069174390 + .long 3108243400 + .long 3171828406 + .long 1566130176 + .long 1069101918 + .long 985483226 + .long 1025708380 + .long 792780800 + .long 1069029758 + .long 4184866295 + .long 1024426204 + .long 183156736 + .long 1068957907 + .long 2845699378 + .long 1022107277 + .long 1301782528 + .long 1068886362 + .long 1012735262 + .long 3173804294 + .long 1562411008 + .long 1068815121 + .long 2197086703 + .long 3170187813 + .long 2815549440 + .long 1068744181 + .long 2782613207 + .long 1026345054 + .long 2756124672 + .long 1068673540 + .long 2929486205 + .long 3173037800 + .long 3511050240 + .long 1068603195 + .long 1443733147 + .long 3173331549 + .long 3047047168 + .long 1068533144 + .long 1879674924 + .long 3172459997 + .long 3221667840 + .long 1068427825 + .long 1338588027 + .long 3171815742 + .long 3453861888 + .long 1068288883 + .long 1205348359 + .long 3172624626 + .long 3506110464 + .long 1068150514 + .long 893105198 + .long 1025571866 + .long 346013696 + .long 1068012714 + .long 3495569021 + .long 3172563349 + .long 4074029056 + .long 1067875476 + .long 3961106338 + .long 3171065595 + .long 3559784448 + .long 1067738798 + .long 1975385384 + .long 3173783155 + .long 797769728 + .long 1067602675 + .long 3760305787 + .long 1026047642 + .long 2313633792 + .long 1067467101 + .long 1559353171 + .long 1023480256 + .long 3960766464 + .long 1067213778 + .long 1067365107 + .long 1025865926 + .long 684261376 + .long 1066944805 + .long 844762164 + .long 3173687482 + .long 630718464 + .long 1066676905 + .long 2458269694 + .long 1024033081 + .long 1486061568 + .long 1066410070 + .long 115537874 + .long 3173243995 + .long 2743664640 + .long 1065886792 + .long 3665098304 + .long 3173471607 + .long 1971912704 + .long 1065357333 + .long 2577214440 + .long 3171993451 + .long 1498939392 + .long 1064306693 + .long 3409036923 + .long 1025599151 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 4277811200 + .long 1067855426 + .long 2479318832 + .long 1022292823 + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1030730101 + .long 3217380702 + .long 1431655765 + .long 1070945621 + .long 2576980378 + .long 1070176665 + .long 0 + .long 3219128320 + .long 0 + .long 4294959104 + .long 0 + .long 4294959104 + .long 0 + .long 3217031168 + .long 2576980378 + .long 1070176665 + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1431655765 + .long 3217380693 + .long 1431655765 + .long 1070945621 + .type static_const_table,@object + .size static_const_table,2192 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_sin.S b/libm/x86/s_sin.S new file mode 100644 index 000000000..a0578bebb --- /dev/null +++ b/libm/x86/s_sin.S @@ -0,0 +1,908 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// 1. RANGE REDUCTION +// +// We perform an initial range reduction from X to r with +// +// X =~= N * pi/32 + r +// +// so that |r| <= pi/64 + epsilon. We restrict inputs to those +// where |N| <= 932560. Beyond this, the range reduction is +// insufficiently accurate. For extremely small inputs, +// denormalization can occur internally, impacting performance. +// This means that the main path is actually only taken for +// 2^-252 <= |X| < 90112. +// +// To avoid branches, we perform the range reduction to full +// accuracy each time. +// +// X - N * (P_1 + P_2 + P_3) +// +// where P_1 and P_2 are 32-bit numbers (so multiplication by N +// is exact) and P_3 is a 53-bit number. Together, these +// approximate pi well enough for all cases in the restricted +// range. +// +// The main reduction sequence is: +// +// y = 32/pi * x +// N = integer(y) +// (computed by adding and subtracting off SHIFTER) +// +// m_1 = N * P_1 +// m_2 = N * P_2 +// r_1 = x - m_1 +// r = r_1 - m_2 +// (this r can be used for most of the calculation) +// +// c_1 = r_1 - r +// m_3 = N * P_3 +// c_2 = c_1 - m_2 +// c = c_2 - m_3 +// +// 2. MAIN ALGORITHM +// +// The algorithm uses a table lookup based on B = M * pi / 32 +// where M = N mod 64. The stored values are: +// sigma closest power of 2 to cos(B) +// C_hl 53-bit cos(B) - sigma +// S_hi + S_lo 2 * 53-bit sin(B) +// +// The computation is organized as follows: +// +// sin(B + r + c) = [sin(B) + sigma * r] + +// r * (cos(B) - sigma) + +// sin(B) * [cos(r + c) - 1] + +// cos(B) * [sin(r + c) - r] +// +// which is approximately: +// +// [S_hi + sigma * r] + +// C_hl * r + +// S_lo + S_hi * [(cos(r) - 1) - r * c] + +// (C_hl + sigma) * [(sin(r) - r) + c] +// +// and this is what is actually computed. We separate this sum +// into four parts: +// +// hi + med + pols + corr +// +// where +// +// hi = S_hi + sigma r +// med = C_hl * r +// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r) +// corr = S_lo + c * ((C_hl + sigma) - S_hi * r) +// +// 3. POLYNOMIAL +// +// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) * +// (sin(r) - r) can be rearranged freely, since it is quite +// small, so we exploit parallelism to the fullest. +// +// psc4 = SC_4 * r_1 +// msc4 = psc4 * r +// r2 = r * r +// msc2 = SC_2 * r2 +// r4 = r2 * r2 +// psc3 = SC_3 + msc4 +// psc1 = SC_1 + msc2 +// msc3 = r4 * psc3 +// sincospols = psc1 + msc3 +// pols = sincospols * +// +// +// 4. CORRECTION TERM +// +// This is where the "c" component of the range reduction is +// taken into account; recall that just "r" is used for most of +// the calculation. +// +// -c = m_3 - c_2 +// -d = S_hi * r - (C_hl + sigma) +// corr = -c * -d + S_lo +// +// 5. COMPENSATED SUMMATIONS +// +// The two successive compensated summations add up the high +// and medium parts, leaving just the low parts to add up at +// the end. +// +// rs = sigma * r +// res_int = S_hi + rs +// k_0 = S_hi - res_int +// k_2 = k_0 + rs +// med = C_hl * r +// res_hi = res_int + med +// k_1 = res_int - res_hi +// k_3 = k_1 + med +// +// 6. FINAL SUMMATION +// +// We now add up all the small parts: +// +// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3 +// +// Now the overall result is just: +// +// res_hi + res_lo +// +// 7. SMALL ARGUMENTS +// +// If |x| < SNN (SNN meaning the smallest normal number), we +// simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we +// do 2^-55 * (2^55 * x - x). +// +// Special cases: +// sin(NaN) = quiet NaN, and raise invalid exception +// sin(INF) = NaN and raise invalid exception +// sin(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin sin +ENTRY(sin) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 56(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + pextrw $3, %xmm0, %eax + andl $32767, %eax + subl $12336, %eax + cmpl $4293, %eax + ja .L_2TAG_PACKET_0.0.2 + movsd 2160(%ebx), %xmm1 + mulsd %xmm0, %xmm1 + movsd 2272(%ebx), %xmm5 + movapd 2256(%ebx), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + movsd 2128(%ebx), %xmm3 + movapd 2112(%ebx), %xmm2 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %edx + cvtsi2sdl %edx, %xmm1 + mulsd %xmm1, %xmm3 + unpcklpd %xmm1, %xmm1 + addl $1865216, %edx + movapd %xmm0, %xmm4 + andl $63, %edx + movapd 2096(%ebx), %xmm5 + lea (%ebx), %eax + shll $5, %edx + addl %edx, %eax + mulpd %xmm1, %xmm2 + subsd %xmm3, %xmm0 + mulsd 2144(%ebx), %xmm1 + subsd %xmm3, %xmm4 + movsd 8(%eax), %xmm7 + unpcklpd %xmm0, %xmm0 + movapd %xmm4, %xmm3 + subsd %xmm2, %xmm4 + mulpd %xmm0, %xmm5 + subpd %xmm2, %xmm0 + movapd 2064(%ebx), %xmm6 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm2, %xmm3 + movapd (%eax), %xmm2 + subsd %xmm3, %xmm1 + movsd 24(%eax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd 2080(%ebx), %xmm5 + mulsd (%eax), %xmm4 + addpd 2048(%ebx), %xmm6 + mulpd %xmm0, %xmm5 + movapd %xmm3, %xmm0 + addsd 8(%eax), %xmm3 + mulpd %xmm7, %xmm1 + movapd %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movsd 8(%eax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%eax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm0, %xmm5 + addsd %xmm7, %xmm3 + addsd %xmm5, %xmm1 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + unpckhpd %xmm6, %xmm6 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm4 + movsd %xmm4, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + jg .L_2TAG_PACKET_2.0.2 + shrl $4, %eax + cmpl $268434685, %eax + jne .L_2TAG_PACKET_3.0.2 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_3.0.2: + movsd 2192(%ebx), %xmm3 + mulsd %xmm0, %xmm3 + subsd %xmm0, %xmm3 + mulsd 2208(%ebx), %xmm3 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movl 132(%esp), %eax + andl $2146435072, %eax + cmpl $2146435072, %eax + je .L_2TAG_PACKET_4.0.2 + subl $32, %esp + movsd %xmm0, (%esp) + lea 40(%esp), %eax + movl %eax, 8(%esp) + movl $2, %eax + movl %eax, 12(%esp) + call __libm_sincos_huge + addl $32, %esp + fldl 16(%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_4.0.2: + fldl 128(%esp) + fmull 2240(%ebx) +.L_2TAG_PACKET_1.0.2: + movl 56(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(sin) +# -- End sin + +# Start file scope ASM +.weak sinl +.equ sinl, sin +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 1072693248 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 1072693248 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 1071644672 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 1071644672 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 1070596096 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 1070596096 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 1069547520 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 3217031168 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 3218079744 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 3218079744 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 3219128320 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 3219128320 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 3220176896 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 3220176896 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 3219128320 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 3219128320 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 3218079744 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 3218079744 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 3217031168 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 1069547520 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 1070596096 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 1070596096 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 1071644672 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 1071644672 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 1072693248 + .long 1431655765 + .long 3217380693 + .long 0 + .long 3219128320 + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1067799893 + .long 436314138 + .long 3207201184 + .long 381774871 + .long 3210133868 + .long 2773927732 + .long 1053236707 + .long 436314138 + .long 1056571808 + .long 442499072 + .long 1032893537 + .long 442499072 + .long 1032893537 + .long 1413480448 + .long 1069097467 + .long 0 + .long 0 + .long 771977331 + .long 996350346 + .long 0 + .long 0 + .long 1841940611 + .long 1076125488 + .long 0 + .long 0 + .long 0 + .long 1127743488 + .long 0 + .long 0 + .long 0 + .long 1130364928 + .long 0 + .long 0 + .long 0 + .long 1015021568 + .long 0 + .long 0 + .long 4294967295 + .long 1072693247 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .type static_const_table,@object + .size static_const_table,2288 + .data + .hidden __libm_sincos_huge + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_tan.S b/libm/x86/s_tan.S new file mode 100644 index 000000000..621c94a0f --- /dev/null +++ b/libm/x86/s_tan.S @@ -0,0 +1,1767 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Polynomials coefficients and other constants. +// +// Note that in this algorithm, there is a different polynomial for +// each breakpoint, so there are 32 sets of polynomial coefficients +// as well as 32 instances of the other constants. +// +// The polynomial coefficients and constants are offset from the start +// of the main block as follows: +// +// 0: c8 | c0 +// 16: c9 | c1 +// 32: c10 | c2 +// 48: c11 | c3 +// 64: c12 | c4 +// 80: c13 | c5 +// 96: c14 | c6 +// 112: c15 | c7 +// 128: T_hi +// 136: T_lo +// 144: Sigma +// 152: T_hl +// 160: Tau +// 168: Mask +// 176: (end of block) +// +// The total table size is therefore 5632 bytes. +// +// Note that c0 and c1 are always zero. We could try storing +// other constants here, and just loading the low part of the +// SIMD register in these cases, after ensuring the high part +// is zero. +// +// The higher terms of the polynomial are computed in the *low* +// part of the SIMD register. This is so we can overlap the +// multiplication by r^8 and the unpacking of the other part. +// +// The constants are: +// T_hi + T_lo = accurate constant term in power series +// Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit) +// Tau = multiplier for the reciprocal, always -1 or 0 +// +// The basic reconstruction formula using these constants is: +// +// High = tau * recip_hi + t_hi +// Med = (sgn * r + t_hl * r)_hi +// Low = (sgn * r + t_hl * r)_lo + +// tau * recip_lo + T_lo + (T_hl + sigma) * c + pol +// +// where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15 +// +// (c0 = c1 = 0, but using them keeps SIMD regularity) +// +// We then do a compensated sum High + Med, add the low parts together +// and then do the final sum. +// +// Here recip_hi + recip_lo is an accurate reciprocal of the remainder +// modulo pi/2 +// +// Special cases: +// tan(NaN) = quiet NaN, and raise invalid exception +// tan(INF) = NaN and raise invalid exception +// tan(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin tan +ENTRY(tan) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $120, %esp + movl %ebx, 56(%esp) + call static_func + movl %eax, %ebx + movsd 128(%esp), %xmm0 + pextrw $3, %xmm0, %eax + andl $32767, %eax + subl $14368, %eax + cmpl $2216, %eax + ja .L_2TAG_PACKET_0.0.2 + movapd 5840(%ebx), %xmm5 + movapd 5856(%ebx), %xmm6 + unpcklpd %xmm0, %xmm0 + movapd 5712(%ebx), %xmm4 + andpd %xmm0, %xmm4 + movapd 5632(%ebx), %xmm1 + mulpd %xmm0, %xmm1 + orpd %xmm4, %xmm5 + addpd %xmm5, %xmm1 + movapd %xmm1, %xmm7 + unpckhpd %xmm7, %xmm7 + cvttsd2si %xmm7, %edx + cvttpd2dq %xmm1, %xmm1 + cvtdq2pd %xmm1, %xmm1 + mulpd %xmm6, %xmm1 + movapd 5664(%ebx), %xmm3 + movsd 5728(%ebx), %xmm5 + addl $469248, %edx + movapd 5680(%ebx), %xmm4 + mulpd %xmm1, %xmm3 + andl $31, %edx + mulsd %xmm1, %xmm5 + movl %edx, %ecx + mulpd %xmm1, %xmm4 + shll $1, %ecx + subpd %xmm3, %xmm0 + mulpd 5696(%ebx), %xmm1 + addl %ecx, %edx + shll $2, %ecx + addl %ecx, %edx + addsd %xmm0, %xmm5 + movapd %xmm0, %xmm2 + subpd %xmm4, %xmm0 + movsd 5744(%ebx), %xmm6 + shll $4, %edx + lea (%ebx), %eax + andpd 5776(%ebx), %xmm5 + movapd %xmm0, %xmm3 + addl %edx, %eax + subpd %xmm0, %xmm2 + unpckhpd %xmm0, %xmm0 + divsd %xmm5, %xmm6 + subpd %xmm4, %xmm2 + movapd 16(%eax), %xmm7 + subsd %xmm5, %xmm3 + mulpd %xmm0, %xmm7 + subpd %xmm1, %xmm2 + movapd 48(%eax), %xmm1 + mulpd %xmm0, %xmm1 + movapd 96(%eax), %xmm4 + mulpd %xmm0, %xmm4 + addsd %xmm3, %xmm2 + movapd %xmm0, %xmm3 + mulpd %xmm0, %xmm0 + addpd (%eax), %xmm7 + addpd 32(%eax), %xmm1 + mulpd %xmm0, %xmm1 + addpd 80(%eax), %xmm4 + addpd %xmm1, %xmm7 + movapd 112(%eax), %xmm1 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm0 + addpd %xmm1, %xmm4 + movapd 64(%eax), %xmm1 + mulpd %xmm0, %xmm1 + addpd %xmm1, %xmm7 + movapd %xmm3, %xmm1 + mulpd %xmm0, %xmm3 + mulsd %xmm0, %xmm0 + mulpd 144(%eax), %xmm1 + mulpd %xmm3, %xmm4 + movapd %xmm1, %xmm3 + addpd %xmm4, %xmm7 + movapd %xmm1, %xmm4 + mulsd %xmm7, %xmm0 + unpckhpd %xmm7, %xmm7 + addsd %xmm7, %xmm0 + unpckhpd %xmm1, %xmm1 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + movapd %xmm2, %xmm4 + movsd 144(%eax), %xmm7 + unpckhpd %xmm2, %xmm2 + addsd 152(%eax), %xmm7 + mulsd %xmm2, %xmm7 + addsd 136(%eax), %xmm7 + addsd %xmm1, %xmm7 + addsd %xmm7, %xmm0 + movsd 5744(%ebx), %xmm7 + mulsd %xmm6, %xmm4 + movsd 168(%eax), %xmm2 + andpd %xmm6, %xmm2 + mulsd %xmm2, %xmm5 + mulsd 160(%eax), %xmm6 + subsd %xmm5, %xmm7 + subsd 128(%eax), %xmm2 + subsd %xmm4, %xmm7 + mulsd %xmm6, %xmm7 + movapd %xmm3, %xmm4 + subsd %xmm2, %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm4 + addsd %xmm4, %xmm0 + subsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + movsd %xmm0, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + jg .L_2TAG_PACKET_2.0.2 + shrl $4, %eax + cmpl $268434558, %eax + jne .L_2TAG_PACKET_3.0.2 + movapd %xmm0, %xmm3 + mulsd 5808(%ebx), %xmm3 +.L_2TAG_PACKET_3.0.2: + movsd 5792(%ebx), %xmm3 + mulsd %xmm0, %xmm3 + addsd %xmm0, %xmm3 + mulsd 5808(%ebx), %xmm3 + movsd %xmm3, (%esp) + fldl (%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movq 5712(%ebx), %xmm7 + andpd %xmm0, %xmm7 + xorpd %xmm0, %xmm7 + ucomisd 5760(%ebx), %xmm7 + je .L_2TAG_PACKET_4.0.2 + subl $32, %esp + movsd %xmm0, (%esp) + lea 40(%esp), %eax + movl %eax, 8(%esp) + movl $2, %eax + movl %eax, 12(%esp) + call __libm_tancot_huge + addl $32, %esp + fldl 8(%esp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_4.0.2: + movq %xmm0, (%esp) + fldl (%esp) + fsubl (%esp) +.L_2TAG_PACKET_1.0.2: + movl 56(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(tan) +# -- End tan + +# Start file scope ASM +.weak tanl +.equ tanl, tan +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 0 + .long 0 + .long 0 + .long 2284589306 + .long 1066820852 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1441186365 + .long 1065494243 + .long 1431655765 + .long 1070945621 + .long 0 + .long 0 + .long 0 + .long 0 + .long 236289504 + .long 1064135997 + .long 286331153 + .long 1069617425 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1160476131 + .long 1062722102 + .long 463583772 + .long 1068212666 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1313038235 + .long 1066745731 + .long 0 + .long 0 + .long 1013878342 + .long 1067152618 + .long 0 + .long 0 + .long 3663426833 + .long 1065725283 + .long 3693284251 + .long 1069118808 + .long 650852232 + .long 1065882376 + .long 1996245381 + .long 1071000265 + .long 2008746170 + .long 1064664197 + .long 3055842593 + .long 1068578846 + .long 1495406348 + .long 1064652437 + .long 2269530157 + .long 1069711235 + .long 285563696 + .long 1063576465 + .long 1046897440 + .long 1067705865 + .long 233429731 + .long 1063453151 + .long 522045958 + .long 1068476590 + .long 2354785698 + .long 1069102779 + .long 1317599141 + .long 1012432133 + .long 0 + .long 1072693248 + .long 2828230105 + .long 1065606626 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1512545955 + .long 1068119047 + .long 0 + .long 0 + .long 1127048698 + .long 1067909459 + .long 0 + .long 0 + .long 2300200450 + .long 1067254767 + .long 3593250296 + .long 1070233561 + .long 3009365544 + .long 1066902117 + .long 1127373050 + .long 1071173457 + .long 3046103305 + .long 1066371299 + .long 24583402 + .long 1069723988 + .long 4082511758 + .long 1065914199 + .long 3223889699 + .long 1070020367 + .long 548927984 + .long 1065415756 + .long 558065897 + .long 1068949418 + .long 680073315 + .long 1064940726 + .long 388873200 + .long 1068944270 + .long 3763679576 + .long 1070167541 + .long 1497360404 + .long 1009710547 + .long 0 + .long 1072693248 + .long 64931152 + .long 1067729411 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2467582782 + .long 1069256389 + .long 0 + .long 0 + .long 162150096 + .long 1068946420 + .long 0 + .long 0 + .long 3702794237 + .long 1068579152 + .long 3631919291 + .long 1070936926 + .long 3456821413 + .long 1068217218 + .long 2031366438 + .long 1071495745 + .long 1596664020 + .long 1067799281 + .long 1509038701 + .long 1070601643 + .long 583171477 + .long 1067510148 + .long 3785344682 + .long 1070618476 + .long 2402036048 + .long 1067075736 + .long 3233018412 + .long 1069913186 + .long 411280568 + .long 1066710556 + .long 1065584192 + .long 1069747896 + .long 895247324 + .long 1070819848 + .long 500078909 + .long 3161288781 + .long 0 + .long 1072693248 + .long 729983843 + .long 1068994194 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1458794562 + .long 1070398550 + .long 0 + .long 0 + .long 2857777489 + .long 1070137637 + .long 0 + .long 0 + .long 1024359517 + .long 1069876531 + .long 2616040238 + .long 1071582937 + .long 1609024636 + .long 1069675088 + .long 2529240549 + .long 1071836633 + .long 1510128600 + .long 1069440113 + .long 2251697184 + .long 1071253687 + .long 1262761453 + .long 1069142850 + .long 1263091857 + .long 1071190461 + .long 3043383486 + .long 1068885191 + .long 2476932470 + .long 1070842002 + .long 3659995028 + .long 1068669200 + .long 855891755 + .long 1070696894 + .long 2583490354 + .long 1071284857 + .long 3062633575 + .long 1014008623 + .long 0 + .long 1072693248 + .long 2550940471 + .long 1069938201 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3422807297 + .long 1071640847 + .long 0 + .long 0 + .long 1151658053 + .long 1071494715 + .long 0 + .long 0 + .long 929607071 + .long 1071346340 + .long 1037049034 + .long 1072037305 + .long 2786928657 + .long 1071215282 + .long 1447406859 + .long 1072265209 + .long 3490952107 + .long 1071090851 + .long 3205232916 + .long 1071968658 + .long 1297344304 + .long 1070977120 + .long 1066110976 + .long 1071946035 + .long 3803721480 + .long 1070871082 + .long 1496754229 + .long 1071807201 + .long 2982550683 + .long 1070773243 + .long 4014441989 + .long 1071736222 + .long 419968236 + .long 1071717047 + .long 3451266538 + .long 3163444811 + .long 0 + .long 1072693248 + .long 2960267235 + .long 1070745841 + .long 0 + .long 0 + .long 0 + .long 0 + .long 724322768 + .long 1072881308 + .long 0 + .long 0 + .long 643153048 + .long 1072905816 + .long 0 + .long 0 + .long 4285079458 + .long 1072928558 + .long 3912524733 + .long 1072622983 + .long 118362272 + .long 1072952754 + .long 4107767972 + .long 1072827408 + .long 2689502883 + .long 1072976922 + .long 946523347 + .long 1072772766 + .long 573204189 + .long 1073001761 + .long 581531518 + .long 1072826391 + .long 1386236526 + .long 1073026959 + .long 3718905905 + .long 1072832823 + .long 1145558140 + .long 1073052673 + .long 513572637 + .long 1072861969 + .long 716700048 + .long 1071997368 + .long 547126769 + .long 1015523525 + .long 0 + .long 1072693248 + .long 1097907398 + .long 1071420120 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3349892442 + .long 1074290212 + .long 0 + .long 0 + .long 3913197405 + .long 1074501181 + .long 0 + .long 0 + .long 2494034522 + .long 1074739170 + .long 1264738763 + .long 1073084804 + .long 1520293906 + .long 1074899632 + .long 1958936600 + .long 1073411493 + .long 2133649635 + .long 1075052171 + .long 4270740730 + .long 1073574708 + .long 1728930189 + .long 1075224844 + .long 1303998552 + .long 1073799186 + .long 618611933 + .long 1075420255 + .long 1769828046 + .long 1073938542 + .long 2200537986 + .long 1075641421 + .long 433361110 + .long 1074105369 + .long 719595600 + .long 1072317184 + .long 294527206 + .long 3162140088 + .long 0 + .long 1073741824 + .long 3811788216 + .long 3218400550 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1704352102 + .long 1075943001 + .long 0 + .long 0 + .long 2284589306 + .long 1076258036 + .long 0 + .long 0 + .long 2211264291 + .long 1076659010 + .long 0 + .long 1073741824 + .long 1441186365 + .long 1077028579 + .long 1431655765 + .long 1074091349 + .long 876943673 + .long 1077353622 + .long 2863311531 + .long 1074440874 + .long 236289504 + .long 1077767485 + .long 286331153 + .long 1074860305 + .long 2805473311 + .long 1078115278 + .long 95443718 + .long 1075163227 + .long 1160476131 + .long 1078450742 + .long 463583772 + .long 1075552698 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 1073741824 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1330165971 + .long 3207850745 + .long 0 + .long 0 + .long 217536623 + .long 1059109098 + .long 0 + .long 0 + .long 3492120849 + .long 3205151475 + .long 602185705 + .long 3215678092 + .long 760422958 + .long 1056312597 + .long 555127889 + .long 1067545266 + .long 3139784124 + .long 3202470837 + .long 3690544014 + .long 3213150171 + .long 95707915 + .long 1053635428 + .long 4003114407 + .long 1064581412 + .long 2034926231 + .long 3199711161 + .long 3759536023 + .long 3210559989 + .long 3826928214 + .long 1050893819 + .long 3837960785 + .long 1061790379 + .long 1526325248 + .long 3217967566 + .long 2356426521 + .long 1025423456 + .long 0 + .long 0 + .long 457728975 + .long 1071088276 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1398462608 + .long 3207303968 + .long 0 + .long 0 + .long 26205983 + .long 1058461213 + .long 0 + .long 0 + .long 56226238 + .long 3204528612 + .long 2754706541 + .long 3215359511 + .long 2187799823 + .long 1055634437 + .long 790323742 + .long 1067402587 + .long 1372385848 + .long 3201651479 + .long 4097292716 + .long 3212856302 + .long 3348210357 + .long 1052830099 + .long 2442796466 + .long 1064337602 + .long 862608142 + .long 3198830754 + .long 170296152 + .long 3210060867 + .long 3755571428 + .long 1049933343 + .long 3614866008 + .long 1061361670 + .long 719978496 + .long 3217669096 + .long 1998842465 + .long 3174703977 + .long 0 + .long 0 + .long 3749156607 + .long 1071048258 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3120498638 + .long 3206749304 + .long 0 + .long 0 + .long 2773578114 + .long 1058009312 + .long 0 + .long 0 + .long 2030783676 + .long 3203817873 + .long 2223654598 + .long 3215071936 + .long 2976134650 + .long 1054987244 + .long 706390066 + .long 1067217386 + .long 4258437615 + .long 3200900378 + .long 1066252975 + .long 3212391267 + .long 815777514 + .long 1051989462 + .long 3202745457 + .long 1064010682 + .long 2493556375 + .long 3198004753 + .long 1046243251 + .long 3209678971 + .long 2593078846 + .long 1049017717 + .long 2763962276 + .long 1060970161 + .long 701480960 + .long 3217377742 + .long 3205862232 + .long 3174660915 + .long 0 + .long 0 + .long 2267016812 + .long 1071015664 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 2107155798 + .long 3206166872 + .long 0 + .long 0 + .long 2642992129 + .long 1057424578 + .long 0 + .long 0 + .long 1936992811 + .long 3203204426 + .long 1485063559 + .long 3214682643 + .long 1432914553 + .long 1054319398 + .long 3996381654 + .long 1067075828 + .long 2833029256 + .long 3200223545 + .long 2866066872 + .long 3211982662 + .long 2432888737 + .long 1051234178 + .long 3669764559 + .long 1063748136 + .long 2458496952 + .long 3197170774 + .long 1948234989 + .long 3209098147 + .long 2843698787 + .long 1048163519 + .long 3398041407 + .long 1060559728 + .long 2829230080 + .long 3217092115 + .long 1034046433 + .long 3174271903 + .long 0 + .long 0 + .long 298675305 + .long 1070989821 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 437603223 + .long 3205589761 + .long 0 + .long 0 + .long 759330352 + .long 1057048511 + .long 0 + .long 0 + .long 3107463368 + .long 3202507988 + .long 3144465176 + .long 3214191500 + .long 2290961810 + .long 1053841035 + .long 1618153340 + .long 1066971547 + .long 3836869393 + .long 3199400272 + .long 584032116 + .long 3211469261 + .long 1245704358 + .long 1050626462 + .long 4247487438 + .long 1063561943 + .long 1669034927 + .long 3196274812 + .long 3844233498 + .long 3208626322 + .long 2706958524 + .long 1047411374 + .long 3857199098 + .long 1060281647 + .long 3593904128 + .long 3216590719 + .long 3267547836 + .long 3172163321 + .long 0 + .long 0 + .long 4076712227 + .long 1070970214 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3290090340 + .long 3204793485 + .long 0 + .long 0 + .long 3685760367 + .long 1056668370 + .long 0 + .long 0 + .long 2655163949 + .long 3201674917 + .long 628750575 + .long 3213566872 + .long 680140505 + .long 1053299777 + .long 2954464709 + .long 1066900026 + .long 803201619 + .long 3198516435 + .long 1466315631 + .long 3210837162 + .long 1611220163 + .long 1049972438 + .long 2766187256 + .long 1063437894 + .long 1804579484 + .long 3195331491 + .long 3695969289 + .long 3207854418 + .long 2617238373 + .long 1046675948 + .long 3095830084 + .long 1060095334 + .long 3789570048 + .long 3216034914 + .long 23826559 + .long 3172048060 + .long 0 + .long 0 + .long 3870939386 + .long 1070956467 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1571758758 + .long 3203672535 + .long 0 + .long 0 + .long 113026373 + .long 1056416381 + .long 0 + .long 0 + .long 1913766298 + .long 3200523326 + .long 2507068734 + .long 3212502004 + .long 4000648818 + .long 1053003803 + .long 2446607349 + .long 1066858259 + .long 912662124 + .long 3197333001 + .long 1349489537 + .long 3209765608 + .long 3412972607 + .long 1049641401 + .long 1721283327 + .long 1063366855 + .long 1466691883 + .long 3194116746 + .long 3852528092 + .long 3206760861 + .long 285443293 + .long 1046158380 + .long 1758739894 + .long 1059895449 + .long 1858781184 + .long 3214984212 + .long 3447575948 + .long 1024675855 + .long 0 + .long 0 + .long 2242038011 + .long 1070948320 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 0 + .long 0 + .long 0 + .long 0 + .long 737611454 + .long 1056336527 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3594790527 + .long 1052911621 + .long 381774871 + .long 1066844524 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3303051618 + .long 1049456050 + .long 3154187623 + .long 1063343722 + .long 0 + .long 0 + .long 0 + .long 0 + .long 528061788 + .long 1045944910 + .long 2469719819 + .long 1059831159 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1431655765 + .long 1070945621 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1571758758 + .long 1056188887 + .long 0 + .long 0 + .long 113026373 + .long 1056416381 + .long 0 + .long 0 + .long 1913766298 + .long 1053039678 + .long 2507068734 + .long 1065018356 + .long 4000648818 + .long 1053003803 + .long 2446607349 + .long 1066858259 + .long 912662124 + .long 1049849353 + .long 1349489537 + .long 1062281960 + .long 3412972607 + .long 1049641401 + .long 1721283327 + .long 1063366855 + .long 1466691883 + .long 1046633098 + .long 3852528092 + .long 1059277213 + .long 285443293 + .long 1046158380 + .long 1758739894 + .long 1059895449 + .long 1858781184 + .long 1067500564 + .long 3447575948 + .long 3172159503 + .long 0 + .long 0 + .long 2242038011 + .long 1070948320 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3290090340 + .long 1057309837 + .long 0 + .long 0 + .long 3685760367 + .long 1056668370 + .long 0 + .long 0 + .long 2655163949 + .long 1054191269 + .long 628750575 + .long 1066083224 + .long 680140505 + .long 1053299777 + .long 2954464709 + .long 1066900026 + .long 803201619 + .long 1051032787 + .long 1466315631 + .long 1063353514 + .long 1611220163 + .long 1049972438 + .long 2766187256 + .long 1063437894 + .long 1804579484 + .long 1047847843 + .long 3695969289 + .long 1060370770 + .long 2617238373 + .long 1046675948 + .long 3095830084 + .long 1060095334 + .long 3789570048 + .long 1068551266 + .long 23826559 + .long 1024564412 + .long 0 + .long 0 + .long 3870939386 + .long 1070956467 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 437603223 + .long 1058106113 + .long 0 + .long 0 + .long 759330352 + .long 1057048511 + .long 0 + .long 0 + .long 3107463368 + .long 1055024340 + .long 3144465176 + .long 1066707852 + .long 2290961810 + .long 1053841035 + .long 1618153340 + .long 1066971547 + .long 3836869393 + .long 1051916624 + .long 584032116 + .long 1063985613 + .long 1245704358 + .long 1050626462 + .long 4247487438 + .long 1063561943 + .long 1669034927 + .long 1048791164 + .long 3844233498 + .long 1061142674 + .long 2706958524 + .long 1047411374 + .long 3857199098 + .long 1060281647 + .long 3593904128 + .long 1069107071 + .long 3267547836 + .long 1024679673 + .long 0 + .long 0 + .long 4076712227 + .long 1070970214 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 2107155798 + .long 1058683224 + .long 0 + .long 0 + .long 2642992129 + .long 1057424578 + .long 0 + .long 0 + .long 1936992811 + .long 1055720778 + .long 1485063559 + .long 1067198995 + .long 1432914553 + .long 1054319398 + .long 3996381654 + .long 1067075828 + .long 2833029256 + .long 1052739897 + .long 2866066872 + .long 1064499014 + .long 2432888737 + .long 1051234178 + .long 3669764559 + .long 1063748136 + .long 2458496952 + .long 1049687126 + .long 1948234989 + .long 1061614499 + .long 2843698787 + .long 1048163519 + .long 3398041407 + .long 1060559728 + .long 2829230080 + .long 1069608467 + .long 1034046433 + .long 1026788255 + .long 0 + .long 0 + .long 298675305 + .long 1070989821 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3120498638 + .long 1059265656 + .long 0 + .long 0 + .long 2773578114 + .long 1058009312 + .long 0 + .long 0 + .long 2030783676 + .long 1056334225 + .long 2223654598 + .long 1067588288 + .long 2976134650 + .long 1054987244 + .long 706390066 + .long 1067217386 + .long 4258437615 + .long 1053416730 + .long 1066252975 + .long 1064907619 + .long 815777514 + .long 1051989462 + .long 3202745457 + .long 1064010682 + .long 2493556375 + .long 1050521105 + .long 1046243251 + .long 1062195323 + .long 2593078846 + .long 1049017717 + .long 2763962276 + .long 1060970161 + .long 701480960 + .long 1069894094 + .long 3205862232 + .long 1027177267 + .long 0 + .long 0 + .long 2267016812 + .long 1071015664 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1398462608 + .long 1059820320 + .long 0 + .long 0 + .long 26205983 + .long 1058461213 + .long 0 + .long 0 + .long 56226238 + .long 1057044964 + .long 2754706541 + .long 1067875863 + .long 2187799823 + .long 1055634437 + .long 790323742 + .long 1067402587 + .long 1372385848 + .long 1054167831 + .long 4097292716 + .long 1065372654 + .long 3348210357 + .long 1052830099 + .long 2442796466 + .long 1064337602 + .long 862608142 + .long 1051347106 + .long 170296152 + .long 1062577219 + .long 3755571428 + .long 1049933343 + .long 3614866008 + .long 1061361670 + .long 719978496 + .long 1070185448 + .long 1998842465 + .long 1027220329 + .long 0 + .long 0 + .long 3749156607 + .long 1071048258 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1330165971 + .long 1060367097 + .long 0 + .long 0 + .long 217536623 + .long 1059109098 + .long 0 + .long 0 + .long 3492120849 + .long 1057667827 + .long 602185705 + .long 1068194444 + .long 760422958 + .long 1056312597 + .long 555127889 + .long 1067545266 + .long 3139784124 + .long 1054987189 + .long 3690544014 + .long 1065666523 + .long 95707915 + .long 1053635428 + .long 4003114407 + .long 1064581412 + .long 2034926231 + .long 1052227513 + .long 3759536023 + .long 1063076341 + .long 3826928214 + .long 1050893819 + .long 3837960785 + .long 1061790379 + .long 1526325248 + .long 1070483918 + .long 2356426521 + .long 3172907104 + .long 0 + .long 0 + .long 457728975 + .long 1071088276 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1704352102 + .long 3223426649 + .long 0 + .long 0 + .long 2284589306 + .long 1076258036 + .long 0 + .long 0 + .long 2211264291 + .long 3224142658 + .long 0 + .long 3221225472 + .long 1441186365 + .long 1077028579 + .long 1431655765 + .long 1074091349 + .long 876943673 + .long 3224837270 + .long 2863311531 + .long 3221924522 + .long 236289504 + .long 1077767485 + .long 286331153 + .long 1074860305 + .long 2805473311 + .long 3225598926 + .long 95443718 + .long 3222646875 + .long 1160476131 + .long 1078450742 + .long 463583772 + .long 1075552698 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 1073741824 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3349892442 + .long 3221773860 + .long 0 + .long 0 + .long 3913197405 + .long 1074501181 + .long 0 + .long 0 + .long 2494034522 + .long 3222222818 + .long 1264738763 + .long 3220568452 + .long 1520293906 + .long 1074899632 + .long 1958936600 + .long 1073411493 + .long 2133649635 + .long 3222535819 + .long 4270740730 + .long 3221058356 + .long 1728930189 + .long 1075224844 + .long 1303998552 + .long 1073799186 + .long 618611933 + .long 3222903903 + .long 1769828046 + .long 3221422190 + .long 2200537986 + .long 1075641421 + .long 433361110 + .long 1074105369 + .long 719595600 + .long 3219800832 + .long 294527206 + .long 1014656440 + .long 0 + .long 1073741824 + .long 3811788216 + .long 3218400550 + .long 0 + .long 0 + .long 0 + .long 0 + .long 724322768 + .long 3220364956 + .long 0 + .long 0 + .long 643153048 + .long 1072905816 + .long 0 + .long 0 + .long 4285079458 + .long 3220412206 + .long 3912524733 + .long 3220106631 + .long 118362272 + .long 1072952754 + .long 4107767972 + .long 1072827408 + .long 2689502883 + .long 3220460570 + .long 946523347 + .long 3220256414 + .long 573204189 + .long 1073001761 + .long 581531518 + .long 1072826391 + .long 1386236526 + .long 3220510607 + .long 3718905905 + .long 3220316471 + .long 1145558140 + .long 1073052673 + .long 513572637 + .long 1072861969 + .long 716700048 + .long 3219481016 + .long 547126769 + .long 3163007173 + .long 0 + .long 1072693248 + .long 1097907398 + .long 1071420120 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3422807297 + .long 3219124495 + .long 0 + .long 0 + .long 1151658053 + .long 1071494715 + .long 0 + .long 0 + .long 929607071 + .long 3218829988 + .long 1037049034 + .long 3219520953 + .long 2786928657 + .long 1071215282 + .long 1447406859 + .long 1072265209 + .long 3490952107 + .long 3218574499 + .long 3205232916 + .long 3219452306 + .long 1297344304 + .long 1070977120 + .long 1066110976 + .long 1071946035 + .long 3803721480 + .long 3218354730 + .long 1496754229 + .long 3219290849 + .long 2982550683 + .long 1070773243 + .long 4014441989 + .long 1071736222 + .long 419968236 + .long 3219200695 + .long 3451266538 + .long 1015961163 + .long 0 + .long 1072693248 + .long 2960267235 + .long 1070745841 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1458794562 + .long 3217882198 + .long 0 + .long 0 + .long 2857777489 + .long 1070137637 + .long 0 + .long 0 + .long 1024359517 + .long 3217360179 + .long 2616040238 + .long 3219066585 + .long 1609024636 + .long 1069675088 + .long 2529240549 + .long 1071836633 + .long 1510128600 + .long 3216923761 + .long 2251697184 + .long 3218737335 + .long 1262761453 + .long 1069142850 + .long 1263091857 + .long 1071190461 + .long 3043383486 + .long 3216368839 + .long 2476932470 + .long 3218325650 + .long 3659995028 + .long 1068669200 + .long 855891755 + .long 1070696894 + .long 2583490354 + .long 3218768505 + .long 3062633575 + .long 3161492271 + .long 0 + .long 1072693248 + .long 2550940471 + .long 1069938201 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2467582782 + .long 3216740037 + .long 0 + .long 0 + .long 162150096 + .long 1068946420 + .long 0 + .long 0 + .long 3702794237 + .long 3216062800 + .long 3631919291 + .long 3218420574 + .long 3456821413 + .long 1068217218 + .long 2031366438 + .long 1071495745 + .long 1596664020 + .long 3215282929 + .long 1509038701 + .long 3218085291 + .long 583171477 + .long 1067510148 + .long 3785344682 + .long 1070618476 + .long 2402036048 + .long 3214559384 + .long 3233018412 + .long 3217396834 + .long 411280568 + .long 1066710556 + .long 1065584192 + .long 1069747896 + .long 895247324 + .long 3218303496 + .long 500078909 + .long 1013805133 + .long 0 + .long 1072693248 + .long 729983843 + .long 1068994194 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1512545955 + .long 3215602695 + .long 0 + .long 0 + .long 1127048698 + .long 1067909459 + .long 0 + .long 0 + .long 2300200450 + .long 3214738415 + .long 3593250296 + .long 3217717209 + .long 3009365544 + .long 1066902117 + .long 1127373050 + .long 1071173457 + .long 3046103305 + .long 3213854947 + .long 24583402 + .long 3217207636 + .long 4082511758 + .long 1065914199 + .long 3223889699 + .long 1070020367 + .long 548927984 + .long 3212899404 + .long 558065897 + .long 3216433066 + .long 680073315 + .long 1064940726 + .long 388873200 + .long 1068944270 + .long 3763679576 + .long 3217651189 + .long 1497360404 + .long 3157194195 + .long 0 + .long 1072693248 + .long 64931152 + .long 1067729411 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1313038235 + .long 3214229379 + .long 0 + .long 0 + .long 1013878342 + .long 1067152618 + .long 0 + .long 0 + .long 3663426833 + .long 3213208931 + .long 3693284251 + .long 3216602456 + .long 650852232 + .long 1065882376 + .long 1996245381 + .long 1071000265 + .long 2008746170 + .long 3212147845 + .long 3055842593 + .long 3216062494 + .long 1495406348 + .long 1064652437 + .long 2269530157 + .long 1069711235 + .long 285563696 + .long 3211060113 + .long 1046897440 + .long 3215189513 + .long 233429731 + .long 1063453151 + .long 522045958 + .long 1068476590 + .long 2354785698 + .long 3216586427 + .long 1317599141 + .long 3159915781 + .long 0 + .long 1072693248 + .long 2828230105 + .long 1065606626 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1841940611 + .long 1071931184 + .long 1841940611 + .long 1076125488 + .long 0 + .long 1131937792 + .long 0 + .long 1127743488 + .long 1413758976 + .long 1069097467 + .long 1413742592 + .long 1069097467 + .long 1734819840 + .long 3174229945 + .long 1280049152 + .long 1028033571 + .long 923219018 + .long 984130272 + .long 57701189 + .long 988383790 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 1734816687 + .long 1026746297 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 2146435072 + .long 0 + .long 0 + .long 4294705152 + .long 4294967295 + .long 0 + .long 0 + .long 0 + .long 1130364928 + .long 0 + .long 0 + .long 0 + .long 1015021568 + .long 0 + .long 0 + .long 0 + .long 1017118720 + .long 0 + .long 0 + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .long 0 + .long 1076887552 + .long 0 + .long 1072693248 + .type static_const_table,@object + .size static_const_table,5872 + .data + .hidden __libm_tancot_huge + .section .note.GNU-stack, "" +# End diff --git a/libm/x86/s_tanh.S b/libm/x86/s_tanh.S new file mode 100644 index 000000000..3975fa937 --- /dev/null +++ b/libm/x86/s_tanh.S @@ -0,0 +1,1362 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x))=(1-exp(-2*x))/(1+exp(-2*x)) +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^8*2=int(xH*L2EH*2^9), +// f=0.b1 b2 ... b8, k integer +// 2^{-f} is approximated as Tn[f]+Dn[f] +// Tn stores the high 53 bits, Dn stores (2^{-f}-Tn[f]) rounded to double precision +// +// r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-9}+2^{-14}, +// for |x| in [23/64,3*2^7) +// e^{-2*|x|}=2^{-k-f}*2^{-r} ~ 2^{-k}*(Tn+Dn)*(1+p)=(T0+D0)*(1+p) +// +// For |x| in [2^{-4},2^5): +// 2^{-r}-1 ~ p=c1*r+c2*r^2+..+c5*r^5 +// Let R=1/(1+T0+p*T0), truncated to 35 significant bits +// R=1/(1+T0+D0+p*(T0+D0))*(1+eps), |eps|<2^{-33} +// 1+T0+D0+p*(T0+D0)=KH+KL, where +// KH=(1+T0+c1*r*T0)_high (leading 17 bits) +// KL=T0_low+D0+(c1*r*T0)_low+c1*r*D0+(c2*r^2+..c5*r^5)*T0 +// eps ~ (R*KH-1)+R*KL +// 1/(1+T0+D0+p*(T0+D0)) ~ R-R*eps +// The result is approximated as (1-T0-D0-(T0+D0)*p)*(R-R*eps) +// 1-T0-D0-(T0+D0)*p=-((KH-2)+KL) +// The result is formed as +// (KH-2)*R+(-(KH-2)*R*eps+(KL*R-KL*R*eps)), with the correct sign +// set at the end +// +// For |x| in [2^{-64},2^{-4}): +// A Taylor series expansion is used (x+p3*x^3+..+p13*x^{13}) +// +// For |x|<2^{-64}: x is returned +// +// For |x|>=2^32: return +/-1 +// +// Special cases: +// tanh(NaN) = quiet NaN, and raise invalid exception +// tanh(INF) = that INF +// tanh(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin static_func + .text + .align __bionic_asm_align + .type static_func, @function +static_func: +..B1.1: + call ..L2 +..L2: + popl %eax + lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax + lea static_const_table@GOTOFF(%eax), %eax + ret + .size static_func,.-static_func +# -- End static_func + +# -- Begin tanh +ENTRY(tanh) +# parameter 1: 8 + %ebp +..B2.1: +..B2.2: + pushl %ebp + movl %esp, %ebp + subl $104, %esp + movl %ebx, 40(%esp) + call static_func + movl %eax, %ebx + movsd 112(%esp), %xmm0 + movsd 4256(%ebx), %xmm3 + xorpd %xmm4, %xmm4 + movsd 4112(%ebx), %xmm1 + movsd 4120(%ebx), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd 4096(%ebx), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + movl $32768, %edx + andl %ecx, %edx + andl $32767, %ecx + subl $16304, %ecx + cmpl $144, %ecx + jae .L_2TAG_PACKET_0.0.2 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + movapd %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + movsd 4264(%ebx), %xmm4 + subsd %xmm6, %xmm3 + xorpd %xmm0, %xmm0 + addsd %xmm1, %xmm2 + subsd %xmm3, %xmm7 + movapd 4128(%ebx), %xmm6 + addsd %xmm7, %xmm2 + movl $255, %ecx + andl %eax, %ecx + addl %ecx, %ecx + movapd (%ebx,%ecx,8), %xmm5 + shrl $4, %eax + andl $65520, %eax + subl $16368, %eax + negl %eax + pinsrw $3, %eax, %xmm0 + movapd 4144(%ebx), %xmm1 + pshufd $68, %xmm0, %xmm0 + mulpd %xmm5, %xmm0 + movsd 4160(%ebx), %xmm7 + pshufd $68, %xmm2, %xmm2 + movapd %xmm4, %xmm5 + addsd %xmm0, %xmm4 + mulpd %xmm2, %xmm6 + mulsd %xmm2, %xmm7 + mulpd %xmm2, %xmm2 + addpd %xmm6, %xmm1 + mulsd %xmm2, %xmm2 + movsd 4264(%ebx), %xmm3 + mulpd %xmm2, %xmm1 + pshufd $78, %xmm1, %xmm6 + addsd %xmm6, %xmm1 + movapd %xmm1, %xmm6 + addsd %xmm7, %xmm1 + mulsd %xmm0, %xmm1 + addsd %xmm4, %xmm1 + andpd 4224(%ebx), %xmm4 + divsd %xmm1, %xmm5 + subsd %xmm4, %xmm3 + pshufd $238, %xmm0, %xmm1 + addsd %xmm0, %xmm3 + movapd %xmm4, %xmm2 + addsd %xmm1, %xmm3 + mulsd %xmm7, %xmm1 + mulsd %xmm0, %xmm7 + addsd %xmm1, %xmm3 + addsd %xmm7, %xmm4 + movsd 4240(%ebx), %xmm1 + mulsd %xmm0, %xmm6 + andpd 4224(%ebx), %xmm4 + addsd %xmm6, %xmm3 + movapd %xmm4, %xmm6 + subsd %xmm4, %xmm2 + addsd %xmm7, %xmm2 + movsd 4264(%ebx), %xmm7 + andpd %xmm1, %xmm5 + addsd %xmm2, %xmm3 + mulsd %xmm5, %xmm4 + xorpd %xmm2, %xmm2 + mulsd %xmm5, %xmm3 + subsd 4272(%ebx), %xmm6 + subsd %xmm7, %xmm4 + xorl $32768, %edx + pinsrw $3, %edx, %xmm2 + addsd %xmm3, %xmm4 + mulsd %xmm5, %xmm6 + movapd %xmm3, %xmm1 + mulsd %xmm4, %xmm3 + movapd %xmm6, %xmm0 + mulsd %xmm4, %xmm6 + subsd %xmm3, %xmm1 + subsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + xorpd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_0.0.2: + addl $960, %ecx + cmpl $1104, %ecx + jae .L_2TAG_PACKET_2.0.2 + movapd 4176(%ebx), %xmm2 + pshufd $68, %xmm0, %xmm1 + movapd 4192(%ebx), %xmm3 + mulpd %xmm1, %xmm1 + movapd 4208(%ebx), %xmm4 + mulpd %xmm1, %xmm2 + pshufd $68, %xmm1, %xmm5 + addpd %xmm3, %xmm2 + mulsd %xmm5, %xmm5 + mulpd %xmm1, %xmm2 + mulsd %xmm5, %xmm5 + addpd %xmm4, %xmm2 + mulpd %xmm5, %xmm2 + pshufd $238, %xmm2, %xmm5 + addsd %xmm5, %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + addl $15344, %ecx + cmpl $16448, %ecx + jae .L_2TAG_PACKET_3.0.2 + cmpl $16, %ecx + jb .L_2TAG_PACKET_4.0.2 + xorpd %xmm2, %xmm2 + movl $17392, %eax + pinsrw $3, %eax, %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm2 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_4.0.2: + movapd %xmm0, %xmm2 + mulsd %xmm2, %xmm2 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_3.0.2: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_5.0.2 + xorpd %xmm2, %xmm2 + movl $15344, %ecx + pinsrw $3, %ecx, %xmm2 + movapd %xmm2, %xmm3 + mulsd %xmm2, %xmm2 + addsd %xmm3, %xmm2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm0, %xmm0 + orl $16368, %edx + pinsrw $3, %edx, %xmm0 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_5.0.2: + movapd %xmm0, %xmm2 + movd %xmm0, %eax + psrlq $20, %xmm2 + movd %xmm2, %ecx + orl %eax, %ecx + cmpl $0, %ecx + je .L_2TAG_PACKET_6.0.2 + addsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_1.0.2: + movsd %xmm0, 24(%esp) + fldl 24(%esp) +.L_2TAG_PACKET_7.0.2: + movl 40(%esp), %ebx + movl %ebp, %esp + popl %ebp + ret +..B2.3: +END(tanh) +# -- End tanh + +# Start file scope ASM +.weak tanhl +.equ tanhl, tanh +# End file scope ASM + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 1797923801 + .long 1072687577 + .long 1950547427 + .long 1013229059 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 915592468 + .long 1072676282 + .long 352947894 + .long 3161024371 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 35929225 + .long 1072665048 + .long 2809788041 + .long 3159436968 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 2038973688 + .long 1072653874 + .long 892941374 + .long 1016046459 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 1222472308 + .long 1072642761 + .long 1054357470 + .long 3161021018 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 481706282 + .long 1072631708 + .long 1696079173 + .long 3162710528 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 2719515920 + .long 1072620714 + .long 2760332941 + .long 1015137933 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2256325230 + .long 1072609780 + .long 580117746 + .long 1015317295 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 2009970496 + .long 1072598905 + .long 2159039665 + .long 3162572948 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 610758006 + .long 1072588089 + .long 1965209397 + .long 3161866232 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 991358482 + .long 1072577331 + .long 838715019 + .long 3163157668 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 1796832535 + .long 1072566631 + .long 3176955716 + .long 3160585513 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 1679558232 + .long 1072555989 + .long 2390342287 + .long 3163333970 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 3594158869 + .long 1072545404 + .long 2456521700 + .long 3163256561 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 1912561781 + .long 1072534877 + .long 3147495102 + .long 1015678253 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3898795731 + .long 1072524406 + .long 1249994144 + .long 1011869818 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 3939148246 + .long 1072513992 + .long 3210352148 + .long 1015274323 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 721996136 + .long 1072503635 + .long 563754734 + .long 1015371318 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1532734324 + .long 1072493333 + .long 3094216535 + .long 3163162857 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 778901109 + .long 1072483087 + .long 2248183955 + .long 3161268751 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 1464976603 + .long 1072472896 + .long 3507292405 + .long 3161977534 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 2307442995 + .long 1072462760 + .long 3190117721 + .long 3162404539 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 2029714210 + .long 1072452679 + .long 613660079 + .long 1015099143 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3657065772 + .long 1072442652 + .long 399025623 + .long 3162957078 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1631695677 + .long 1072432680 + .long 2717633076 + .long 3162344026 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 3287523847 + .long 1072422761 + .long 1625971539 + .long 3157009955 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 3080351519 + .long 1072412896 + .long 3379126788 + .long 3157218001 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4062661092 + .long 1072403084 + .long 1422616006 + .long 3163255318 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 703710506 + .long 1072393326 + .long 1384660846 + .long 1015195891 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 364333489 + .long 1072383620 + .long 3923737744 + .long 3161421373 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 1822067026 + .long 1072373966 + .long 1241994956 + .long 1015340290 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 3861050111 + .long 1072364364 + .long 254893773 + .long 3162813180 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 977020788 + .long 1072354815 + .long 3065100517 + .long 1015541563 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 557149882 + .long 1072345317 + .long 3672720709 + .long 1014537265 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 1405169241 + .long 1072335870 + .long 2998539689 + .long 3162830951 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2331271250 + .long 1072326474 + .long 812057446 + .long 1012207446 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 2152073944 + .long 1072317129 + .long 1486860576 + .long 3163203456 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 3985553595 + .long 1072307834 + .long 4002146062 + .long 1015834136 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 2366108318 + .long 1072298590 + .long 2867985102 + .long 3161762254 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 424392917 + .long 1072289396 + .long 2749202995 + .long 3162838718 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1297350157 + .long 1072280251 + .long 1308022040 + .long 3163412558 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 3833209506 + .long 1072271155 + .long 2722920684 + .long 1013754842 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 2591453363 + .long 1072262109 + .long 2132396182 + .long 3159074198 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 727685349 + .long 1072253112 + .long 2038246809 + .long 3162358742 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 1403662306 + .long 1072244163 + .long 2788809599 + .long 3161671007 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 3492293770 + .long 1072235262 + .long 2248032210 + .long 1015386826 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 1577608921 + .long 1072226410 + .long 1875489510 + .long 3162968394 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 3134592888 + .long 1072217605 + .long 4232266862 + .long 1015991134 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 2759350287 + .long 1072208848 + .long 1148526634 + .long 1015894933 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 3643909174 + .long 1072200138 + .long 3537586109 + .long 1014354647 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 396319521 + .long 1072191476 + .long 4172420816 + .long 3159074632 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 515457527 + .long 1072182860 + .long 836709333 + .long 1015651226 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 2916157145 + .long 1072174290 + .long 219487565 + .long 1015309367 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 2224145553 + .long 1072165767 + .long 3482522030 + .long 3161489169 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 1660913392 + .long 1072157290 + .long 4218599604 + .long 1015135707 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 158781403 + .long 1072148859 + .long 2221464712 + .long 3163286453 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 950803702 + .long 1072140473 + .long 1655364926 + .long 1015237032 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 2980802057 + .long 1072132132 + .long 378619896 + .long 1015773303 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 903334909 + .long 1072123837 + .long 1636462108 + .long 1015039997 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 2263535754 + .long 1072115586 + .long 752233586 + .long 3162639008 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 1727278727 + .long 1072107380 + .long 3562710623 + .long 1011471940 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 2555984613 + .long 1072099218 + .long 2652555442 + .long 3162552692 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 3721688645 + .long 1072091100 + .long 3069276937 + .long 1015839401 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 4201977662 + .long 1072083026 + .long 748330254 + .long 1013594357 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 2979960120 + .long 1072074996 + .long 2599109725 + .long 1014498493 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 3339203574 + .long 1072067009 + .long 1483497780 + .long 3162408754 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 4273770423 + .long 1072059065 + .long 3383180809 + .long 3163218901 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 488188413 + .long 1072051165 + .long 3199821029 + .long 1015564048 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3872257780 + .long 1072043306 + .long 1253592103 + .long 1015958334 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 551349105 + .long 1072035491 + .long 3821916050 + .long 3162106589 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2425981843 + .long 1072027717 + .long 2830390851 + .long 3163346599 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 4222122499 + .long 1072019985 + .long 1277378074 + .long 3163256737 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 671025100 + .long 1072012296 + .long 3832014351 + .long 3163022030 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 3689071823 + .long 1072004647 + .long 2321004996 + .long 3162552716 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3723038930 + .long 1071997040 + .long 378465264 + .long 3162569582 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 4109806887 + .long 1071989474 + .long 422403966 + .long 1014469229 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 3896463087 + .long 1071981949 + .long 1139797873 + .long 3161233805 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 2135241198 + .long 1071974465 + .long 1236747871 + .long 1013589147 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2178460671 + .long 1071967021 + .long 777878098 + .long 3162842493 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3088564500 + .long 1071959617 + .long 1762311517 + .long 1015045673 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 3933059031 + .long 1071952253 + .long 2133366768 + .long 3161531832 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3784486610 + .long 1071944929 + .long 1581883040 + .long 3161698953 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 1720398391 + .long 1071937645 + .long 3980678963 + .long 3163300080 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1118294578 + .long 1071930400 + .long 2197495694 + .long 3159909401 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 1065662932 + .long 1071923194 + .long 2533670915 + .long 1014530238 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 654919306 + .long 1071916027 + .long 3232961757 + .long 3163047469 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 3278348324 + .long 1071908898 + .long 3069497416 + .long 1014750712 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 3743175029 + .long 1071901808 + .long 2072812490 + .long 3162175075 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 1156440435 + .long 1071894757 + .long 2351451249 + .long 1013967056 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 3219942644 + .long 1071887743 + .long 3798990616 + .long 1015368806 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 460407023 + .long 1071880768 + .long 4237175092 + .long 3163138469 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 589198666 + .long 1071873830 + .long 2664346172 + .long 3163157962 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 2732492859 + .long 1071866929 + .long 2691479646 + .long 3162255684 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 1726216749 + .long 1071860066 + .long 2466808228 + .long 3161676405 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 1000925746 + .long 1071853240 + .long 1018491672 + .long 3163309544 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 3991843581 + .long 1071846450 + .long 4092853457 + .long 1014585763 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 1253935211 + .long 1071839698 + .long 1395382931 + .long 3159702613 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 526652809 + .long 1071832982 + .long 4223459736 + .long 1015879375 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 964107055 + .long 1071826302 + .long 2800439588 + .long 3162833221 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 1724976915 + .long 1071819658 + .long 420909223 + .long 3163117379 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 1972484976 + .long 1071813050 + .long 675290301 + .long 3161640050 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 874372905 + .long 1071806478 + .long 100263788 + .long 1015940732 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1897844341 + .long 1071799941 + .long 1254300460 + .long 1015275938 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 4219606026 + .long 1071793439 + .long 2434574742 + .long 1014681548 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2725843665 + .long 1071786973 + .long 1433917087 + .long 1014838523 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 897099801 + .long 1071780542 + .long 754756297 + .long 1015241005 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 2218315341 + .long 1071774145 + .long 2694295388 + .long 3163288868 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 1588871207 + .long 1071767783 + .long 143439582 + .long 3162963416 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2502433899 + .long 1071761455 + .long 2148595913 + .long 1015023991 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 4162030108 + .long 1071755161 + .long 2763428480 + .long 1015529349 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 1480023343 + .long 1071748902 + .long 2247196168 + .long 1015327453 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 2257959872 + .long 1071742676 + .long 3802946148 + .long 1012964927 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 1416741826 + .long 1071736484 + .long 2196380210 + .long 1011413563 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2471440686 + .long 1071730325 + .long 968836267 + .long 3162214888 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 351405227 + .long 1071724200 + .long 3125337328 + .long 3159822479 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 2875075254 + .long 1071718107 + .long 4144233330 + .long 3163333716 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 685187902 + .long 1071712048 + .long 378731989 + .long 1014843115 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 1608493509 + .long 1071706021 + .long 3159622171 + .long 3162807737 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 590962156 + .long 1071700027 + .long 3829346666 + .long 3163275597 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1172597893 + .long 1071694065 + .long 114433263 + .long 1015347593 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 2602514713 + .long 1071688135 + .long 2268929336 + .long 1014354284 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 4133881824 + .long 1071682237 + .long 2148155345 + .long 3162931299 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 728934454 + .long 1071676372 + .long 1413842688 + .long 1014178612 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 238821257 + .long 1071670538 + .long 1469694871 + .long 3162884987 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 1928746161 + .long 1071664735 + .long 983617676 + .long 1014285177 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 772914124 + .long 1071658964 + .long 4004372762 + .long 1012230161 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 339411585 + .long 1071653224 + .long 264588982 + .long 3161636657 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .long 4200250559 + .long 1071647514 + .long 2808127345 + .long 3161781938 + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .long 1610612736 + .long 1082594631 + .long 4166901572 + .long 1055174155 + .long 3884607281 + .long 3168131199 + .long 3607404735 + .long 3190582024 + .long 1874480759 + .long 1032041131 + .long 4286760334 + .long 1053736893 + .long 4277811695 + .long 3211144770 + .long 0 + .long 0 + .long 236289503 + .long 1064135997 + .long 463583772 + .long 3215696314 + .long 1441186365 + .long 3212977891 + .long 286331153 + .long 1069617425 + .long 2284589306 + .long 1066820852 + .long 1431655765 + .long 3218429269 + .long 0 + .long 4294967280 + .long 0 + .long 4294967280 + .long 4294705152 + .long 4294967295 + .long 4294705152 + .long 4294967295 + .long 4160749568 + .long 2147483647 + .long 0 + .long 1072693248 + .long 0 + .long 1073741824 + .type static_const_table,@object + .size static_const_table,4280 + .data + .section .note.GNU-stack, "" +# End diff --git a/libm/x86_64/e_acos.S b/libm/x86_64/e_acos.S new file mode 100644 index 000000000..d83c66b97 --- /dev/null +++ b/libm/x86_64/e_acos.S @@ -0,0 +1,1957 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// To compute acos(s), separate schemes are used when s is in different +// intervals. +// +// |s| in [2^{-4}, sqrt(3)/2): +// Let t=2^k*1.b1 b2..b6 1, where s=2^k*1.b1 b2 .. b52 +// acos(s)=pi/2-asin(t)-asin(r), where r=s*sqrt(1-t^2)-t*sqrt(1-s^2) +// asin(r)-r evaluated as 7-degree polynomial (c3*r^3+c5*r^5+c7*r^7) +// For the first degree term, r is evaluated as +// R=(s^2-t^2)/(sqrt(1-t^2)*s+sqrt(1-s^2)*t) +// (sqrt(1-t^2) read from table) +// The main source of error is still R (may still be affected by up to 3 ulps +// of rounding error). The table size must be sufficiently large, to minimize +// this effect. +// +// |s| in [sqrt(3)/2, 255/256): +// Let t=2^k*1.b1 b2..b6 1, where sqrt(1-s^2)=2^k*1.b1 b2 .. b52 (rounded) +// acos(|s|)=asin(t)-asin(r), r=s*t-sqrt(1-s^2)*sqrt(1-t^2) +// acos(-|s|)=pi-acos(|s|) +// (The -PI constant, or 0, is added to the result. The sign is set at +// the end) +// asin(r) evaluated as a polynomial (same as above) +// The first degree term is evaluated as +// r=(s^2+t^2-1)/(s*t+sqrt(1-s^2)*sqrt(1-t^2)) +// +// |s|<2^{-4}: acos(s)=pi/2-asin(s) +// evaluate asin(s) as 13-degree polynomial +// +// |s| in [255/256,1): acos(|s|)=2*asin(q), where q=sqrt((1-|s|)/2) +// asin(q) is evaluated as 13-degree polynomial +// q^2=(1-|s|)/2 is obtained in advance +// 2*q*eps ~ ((1-|s|)/2-q^2)/q used for first term +// acos(-|s|)=pi-acos(|s|) +// (The -PI constant, or 0, is added to the result. The sign is set at +// the end) +// +// Special cases: +// acos(NaN) = quiet NaN, and raise invalid exception +// acos(INF) = QNaN and raise invalid exception +// acos(x) = QNaN and raise invalid exception, for |x|>1.0 +// acos(1) = +0 +// +/******************************************************************************/ + +#include +# -- Begin acos +ENTRY(acos) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_acos.1: + subq $24, %rsp +..___tag_value_acos.3: + movsd %xmm0, (%rsp) +..B1.2: + movsd ABSVALMASK(%rip), %xmm4 + movsd ONEMASK(%rip), %xmm3 + xorpd %xmm5, %xmm5 + movsd TMASK(%rip), %xmm2 + movq %xmm0, %xmm1 + psrlq $44, %xmm0 + movd %xmm0, %edx + movq %xmm1, %xmm7 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movq %xmm1, %xmm0 + movl $524287, %eax + andl %edx, %eax + subl $260864, %eax + cmpl $955, %eax + jae .L_2TAG_PACKET_0.0.2 + mulsd %xmm1, %xmm1 + andl $65535, %edx + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + andpd %xmm7, %xmm2 + andl $-4, %edx + subl $64256, %edx + lea T_table(%rip), %r8 + movsd (%r8,%rdx,2), %xmm1 + orpd %xmm5, %xmm2 + lea Tbl_addr(%rip), %r8 + movapd (%r8,%rdx,4), %xmm4 + movq %xmm7, %xmm6 + addsd %xmm2, %xmm7 + subsd %xmm2, %xmm0 + mulsd %xmm0, %xmm7 + mulsd %xmm1, %xmm6 + mulsd %xmm2, %xmm3 + movq %xmm6, %xmm1 + addsd %xmm3, %xmm6 + divsd %xmm6, %xmm7 + movsd 24+cv(%rip), %xmm0 + movsd 8+cv(%rip), %xmm5 + subsd %xmm3, %xmm1 + psrlq $63, %xmm2 + movq %xmm1, %xmm3 + psllq $63, %xmm2 + mulsd %xmm1, %xmm1 + pshufd $68, %xmm2, %xmm2 + movsd 16+cv(%rip), %xmm6 + mulsd %xmm1, %xmm3 + mulsd %xmm1, %xmm0 + xorpd %xmm2, %xmm4 + mulsd %xmm3, %xmm5 + subpd PI_BY_2(%rip), %xmm4 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulsd %xmm3, %xmm0 + subsd %xmm4, %xmm5 + pshufd $238, %xmm4, %xmm4 + addsd %xmm5, %xmm0 + subsd %xmm7, %xmm0 + subsd %xmm4, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + subl $955, %eax + cmpl $65, %eax + jae .L_2TAG_PACKET_1.0.2 + psrlq $38, %xmm7 + psllq $38, %xmm7 + pmovmskb %xmm0, %eax + andnpd %xmm0, %xmm4 + subsd %xmm7, %xmm1 + movq %xmm7, %xmm6 + mulsd %xmm7, %xmm7 + addsd %xmm6, %xmm0 + orpd %xmm4, %xmm5 + subsd %xmm7, %xmm3 + mulsd %xmm1, %xmm0 + movq %xmm3, %xmm4 + subsd %xmm0, %xmm3 + sqrtsd %xmm3, %xmm3 + andl $128, %eax + shrl $7, %eax + negl %eax + movq %xmm3, %xmm7 + andpd %xmm3, %xmm2 + psllq $2, %xmm3 + pextrw $3, %xmm3, %edx + orpd %xmm5, %xmm2 + movd %eax, %xmm3 + pshufd $0, %xmm3, %xmm3 + subl $65216, %edx + addl %edx, %edx + lea T_table(%rip), %r8 + mulsd (%r8,%rdx,4), %xmm7 + mulsd %xmm2, %xmm6 + mulsd %xmm2, %xmm1 + mulsd %xmm2, %xmm2 + subsd %xmm7, %xmm6 + andpd NEG_PI(%rip), %xmm3 + addsd %xmm1, %xmm6 + subsd %xmm2, %xmm4 + addsd %xmm7, %xmm7 + movsd 8+cv(%rip), %xmm5 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm7 + movsd 24+cv(%rip), %xmm0 + divsd %xmm7, %xmm4 + movsd 16+cv(%rip), %xmm2 + lea Tbl_addr(%rip), %r8 + addpd (%r8,%rdx,8), %xmm3 + movq %xmm6, %xmm1 + mulsd %xmm6, %xmm6 + mulsd %xmm6, %xmm0 + mulsd %xmm6, %xmm1 + mulsd %xmm1, %xmm5 + mulsd %xmm6, %xmm1 + addsd %xmm2, %xmm0 + pxor %xmm6, %xmm6 + mulsd %xmm1, %xmm0 + addsd %xmm3, %xmm5 + addsd %xmm5, %xmm0 + andl $32768, %eax + pinsrw $3, %eax, %xmm6 + movq %xmm4, %xmm5 + pshufd $238, %xmm3, %xmm3 + addsd %xmm3, %xmm4 + subsd %xmm4, %xmm3 + addsd %xmm3, %xmm5 + addsd %xmm5, %xmm0 + addsd %xmm4, %xmm0 + xorpd %xmm6, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_1.0.2: + addl $15291, %eax + cmpl $14336, %eax + jae .L_2TAG_PACKET_2.0.2 + unpcklpd %xmm0, %xmm0 + movapd cv2(%rip), %xmm6 + unpcklpd %xmm0, %xmm1 + movapd 16+cv2(%rip), %xmm2 + movapd 32+cv2(%rip), %xmm4 + mulpd %xmm0, %xmm0 + movapd PI_BY_2(%rip), %xmm5 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm6 + mulpd %xmm0, %xmm0 + movq %xmm1, %xmm3 + mulsd %xmm1, %xmm1 + addpd %xmm2, %xmm6 + mulpd %xmm0, %xmm4 + mulsd %xmm3, %xmm1 + addpd %xmm4, %xmm6 + pshufd $238, %xmm5, %xmm0 + mulpd %xmm6, %xmm1 + pshufd $238, %xmm5, %xmm6 + subsd %xmm7, %xmm0 + pshufd $238, %xmm1, %xmm2 + subsd %xmm1, %xmm5 + subsd %xmm0, %xmm6 + subsd %xmm2, %xmm5 + subsd %xmm6, %xmm7 + subsd %xmm7, %xmm5 + addsd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + subl $15356, %eax + cmpl $4, %eax + jae .L_2TAG_PACKET_3.0.2 + xorpd %xmm6, %xmm6 + andpd ABSVALMASK(%rip), %xmm7 + movsd ONE_BY_2(%rip), %xmm4 + movapd cv2(%rip), %xmm1 + mulsd %xmm4, %xmm7 + movapd 16+cv2(%rip), %xmm2 + subsd %xmm7, %xmm4 + movapd 32+cv2(%rip), %xmm3 + pshufd $68, %xmm4, %xmm7 + sqrtsd %xmm4, %xmm4 + mulpd %xmm7, %xmm1 + pshufd $68, %xmm7, %xmm5 + pextrw $3, %xmm0, %eax + mulpd %xmm7, %xmm7 + addpd %xmm1, %xmm2 + movsd HALFMASK(%rip), %xmm1 + mulpd %xmm7, %xmm3 + cmpsd $1, %xmm6, %xmm0 + mulsd %xmm5, %xmm7 + addpd %xmm3, %xmm2 + pshufd $68, %xmm0, %xmm0 + mulsd %xmm7, %xmm2 + andpd NEG_PI(%rip), %xmm0 + mulpd %xmm5, %xmm2 + andpd %xmm4, %xmm1 + pshufd $68, %xmm4, %xmm3 + subsd %xmm1, %xmm4 + addsd %xmm3, %xmm3 + mulsd %xmm1, %xmm1 + subsd %xmm4, %xmm3 + subsd %xmm1, %xmm5 + mulsd %xmm3, %xmm4 + pshufd $238, %xmm3, %xmm3 + subsd %xmm4, %xmm5 + divsd %xmm3, %xmm5 + addpd %xmm3, %xmm3 + mulpd %xmm3, %xmm2 + pshufd $238, %xmm2, %xmm4 + addsd %xmm0, %xmm2 + andl $32768, %eax + pinsrw $3, %eax, %xmm6 + pshufd $238, %xmm0, %xmm0 + addsd %xmm4, %xmm2 + addsd %xmm5, %xmm2 + addsd %xmm3, %xmm2 + addsd %xmm2, %xmm0 + xorpd %xmm6, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_3.0.2: + addl $261884, %eax + cmpl $261888, %eax + jb .L_2TAG_PACKET_4.0.2 + movd %xmm7, %ecx + psrlq $32, %xmm7 + movd %xmm7, %edx + andl $2147483647, %edx + movl $1072693248, %eax + subl %edx, %eax + orl %ecx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_5.0.2 + movsd (%rsp), %xmm2 + movd %xmm2, %edx + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $2147483647, %ecx + subl $1, %edx + sbbl $2146435072, %ecx + cmpl $0, %ecx + jge .L_2TAG_PACKET_6.0.2 + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %edx + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_5.0.2: + pextrw $1, %xmm7, %edx + shrl $15, %edx + negl %edx + movd %edx, %xmm7 + pshufd $0, %xmm7, %xmm7 + movsd PI(%rip), %xmm2 + movsd 8+PI(%rip), %xmm0 + andpd %xmm7, %xmm2 + andpd %xmm7, %xmm0 + addsd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + movsd PI_BY_2(%rip), %xmm2 + movsd 8+PI_BY_2(%rip), %xmm0 + addsd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm6, %xmm6 + addsd %xmm6, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_7.0.2: + movq %xmm0, 8(%rsp) +..B1.3: + movq 8(%rsp), %xmm0 +.L_2TAG_PACKET_8.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_acos.4: + ret +..___tag_value_acos.5: +END(acos) +# -- End acos + .section .rodata, "a" + .align 16 + .align 16 +ABSVALMASK: + .long 4294967295 + .long 2147483647 + .long 0 + .long 0 + .type ABSVALMASK,@object + .size ABSVALMASK,16 + .align 16 +T_table: + .long 2642784509 + .long 1072689083 + .long 1514442531 + .long 1072688953 + .long 333108933 + .long 1072688821 + .long 3392112024 + .long 1072688686 + .long 2099852862 + .long 1072688550 + .long 749609004 + .long 1072688412 + .long 3634632596 + .long 1072688271 + .long 2163248461 + .long 1072688129 + .long 628657846 + .long 1072687985 + .long 3324036511 + .long 1072687838 + .long 1657632815 + .long 1072687690 + .long 4217538760 + .long 1072687539 + .long 2411951597 + .long 1072687387 + .long 533944872 + .long 1072687233 + .long 2876566508 + .long 1072687076 + .long 847936891 + .long 1072686918 + .long 3036019913 + .long 1072686757 + .long 848884575 + .long 1072686595 + .long 2874443326 + .long 1072686430 + .long 520713666 + .long 1072686264 + .long 2375556481 + .long 1072686095 + .long 4141904948 + .long 1072685924 + .long 1522666382 + .long 1072685752 + .long 3105624104 + .long 1072685577 + .long 298666327 + .long 1072685401 + .long 1689524500 + .long 1072685222 + .long 2981002200 + .long 1072685041 + .long 4170844284 + .long 1072684858 + .long 961802263 + .long 1072684674 + .long 1941503454 + .long 1072684487 + .long 2812647170 + .long 1072684298 + .long 3572873869 + .long 1072684107 + .long 4219797823 + .long 1072683914 + .long 456039788 + .long 1072683720 + .long 869096151 + .long 1072683523 + .long 1161535119 + .long 1072683324 + .long 1330865866 + .long 1072683123 + .long 1374571204 + .long 1072682920 + .long 1290107538 + .long 1072682715 + .long 1074904836 + .long 1072682508 + .long 726366587 + .long 1072682299 + .long 241869763 + .long 1072682088 + .long 3913732079 + .long 1072681874 + .long 3149342765 + .long 1072681659 + .long 2240966306 + .long 1072681442 + .long 1185873216 + .long 1072681223 + .long 4276274591 + .long 1072681001 + .long 2919452883 + .long 1072680778 + .long 1407565635 + .long 1072680553 + .long 4032743551 + .long 1072680325 + .long 2202188565 + .long 1072680096 + .long 207977577 + .long 1072679865 + .long 2342160518 + .long 1072679631 + .long 11858423 + .long 1072679396 + .long 1804034453 + .long 1072679158 + .long 3420722787 + .long 1072678918 + .long 563930456 + .long 1072678677 + .long 1820539192 + .long 1072678433 + .long 2892501606 + .long 1072678187 + .long 3776710320 + .long 1072677939 + .long 175063337 + .long 1072677690 + .long 674333171 + .long 1072677438 + .long 976363026 + .long 1072677184 + .long 1077935934 + .long 1072676928 + .long 1921075490 + .long 1072676540 + .long 881493302 + .long 1072676016 + .long 3275752439 + .long 1072675483 + .long 486855588 + .long 1072674943 + .long 1077229111 + .long 1072674394 + .long 723950308 + .long 1072673837 + .long 3693582199 + .long 1072673271 + .long 1367335316 + .long 1072672698 + .long 2305837020 + .long 1072672116 + .long 2184358641 + .long 1072671526 + .long 972682840 + .long 1072670928 + .long 2935101762 + .long 1072670321 + .long 3745513263 + .long 1072669706 + .long 3372320886 + .long 1072669083 + .long 1783464620 + .long 1072668452 + .long 3241386215 + .long 1072667812 + .long 3418125284 + .long 1072667164 + .long 2280219148 + .long 1072666508 + .long 4088700758 + .long 1072665843 + .long 219227400 + .long 1072665171 + .long 3521816918 + .long 1072664489 + .long 1076205279 + .long 1072663800 + .long 1436484616 + .long 1072663102 + .long 271362610 + .long 1072662396 + .long 1838996688 + .long 1072661681 + .long 1807122518 + .long 1072660958 + .long 137953542 + .long 1072660227 + .long 1088178584 + .long 1072659487 + .long 324057537 + .long 1072658739 + .long 2101288076 + .long 1072657982 + .long 2085133974 + .long 1072657217 + .long 235324451 + .long 1072656444 + .long 806051592 + .long 1072655662 + .long 3756033140 + .long 1072654871 + .long 453542543 + .long 1072654073 + .long 3741177327 + .long 1072653265 + .long 691216109 + .long 1072652450 + .long 4145223372 + .long 1072651625 + .long 1174439091 + .long 1072650793 + .long 324416139 + .long 1072649952 + .long 1550246310 + .long 1072649102 + .long 511524674 + .long 1072648244 + .long 1457248482 + .long 1072647377 + .long 45944955 + .long 1072646502 + .long 525537397 + .long 1072645618 + .long 2848440188 + .long 1072644725 + .long 2671555633 + .long 1072643824 + .long 4241172637 + .long 1072642914 + .long 3213094278 + .long 1072641996 + .long 3832503688 + .long 1072641069 + .long 1754091534 + .long 1072640134 + .long 1221921804 + .long 1072639190 + .long 2184526489 + .long 1072638237 + .long 294902089 + .long 1072637276 + .long 4090375270 + .long 1072636305 + .long 632860906 + .long 1072635327 + .long 2753498702 + .long 1072634339 + .long 1808009252 + .long 1072633343 + .long 2036428672 + .long 1072632338 + .long 3383235626 + .long 1072631324 + .long 1497347484 + .long 1072630302 + .long 617018317 + .long 1072629271 + .long 684933058 + .long 1072628231 + .long 1643170798 + .long 1072627182 + .long 3011066360 + .long 1072625592 + .long 957158713 + .long 1072623442 + .long 1390907941 + .long 1072621256 + .long 3819155270 + .long 1072619034 + .long 3443571196 + .long 1072616777 + .long 4045412458 + .long 1072614484 + .long 805503923 + .long 1072612156 + .long 1778922015 + .long 1072609791 + .long 2125033665 + .long 1072607390 + .long 1287203863 + .long 1072604953 + .long 2992629568 + .long 1072602479 + .long 2367267127 + .long 1072599969 + .long 3115526047 + .long 1072597422 + .long 340219539 + .long 1072594839 + .long 2017215719 + .long 1072592218 + .long 3225443424 + .long 1072589560 + .long 3326565673 + .long 1072586865 + .long 1669811211 + .long 1072584133 + .long 1886735022 + .long 1072581363 + .long 3301071171 + .long 1072578555 + .long 928514283 + .long 1072575710 + .long 2656364059 + .long 1072572826 + .long 3473490507 + .long 1072569904 + .long 2649965606 + .long 1072566944 + .long 3736819052 + .long 1072563945 + .long 1680885175 + .long 1072560908 + .long 4413771 + .long 1072557832 + .long 2214869753 + .long 1072554716 + .long 3214725184 + .long 1072551561 + .long 2186079903 + .long 1072548367 + .long 2590372131 + .long 1072545133 + .long 3578146079 + .long 1072541859 + .long 4283712755 + .long 1072538545 + .long 3824834510 + .long 1072535191 + .long 1302400298 + .long 1072531797 + .long 95058636 + .long 1072528362 + .long 3563906063 + .long 1072524885 + .long 2167230730 + .long 1072521368 + .long 3524918334 + .long 1072517809 + .long 2353304918 + .long 1072514209 + .long 1939625839 + .long 1072510567 + .long 1256714581 + .long 1072506883 + .long 3552525848 + .long 1072503156 + .long 3464809522 + .long 1072499387 + .long 4200542593 + .long 1072495575 + .long 355609124 + .long 1072491721 + .long 3684139099 + .long 1072487822 + .long 148355918 + .long 1072483881 + .long 1457689242 + .long 1072479895 + .long 2118591596 + .long 1072475865 + .long 908848089 + .long 1072471791 + .long 877032689 + .long 1072467672 + .long 752012304 + .long 1072463508 + .long 3532301749 + .long 1072459298 + .long 3600563221 + .long 1072455043 + .long 3902857084 + .long 1072450742 + .long 3063101036 + .long 1072446395 + .long 3972344374 + .long 1072442001 + .long 903183549 + .long 1072437561 + .long 983892938 + .long 1072433073 + .long 2722858568 + .long 1072428537 + .long 302790515 + .long 1072423954 + .long 759811057 + .long 1072419322 + .long 2507809922 + .long 1072414641 + .long 2388408813 + .long 1072407528 + .long 2084492942 + .long 1072397870 + .long 2435703301 + .long 1072388010 + .long 1935433360 + .long 1072377945 + .long 2742047290 + .long 1072367671 + .long 2053284205 + .long 1072357185 + .long 657783367 + .long 1072346483 + .long 2893664841 + .long 1072335560 + .long 3718906405 + .long 1072324413 + .long 1547896303 + .long 1072313038 + .long 2494058440 + .long 1072301429 + .long 3133238742 + .long 1072289582 + .long 3327000086 + .long 1072277492 + .long 1860667274 + .long 1072265154 + .long 665340747 + .long 1072252562 + .long 443347841 + .long 1072239710 + .long 581282618 + .long 1072226592 + .long 3349780465 + .long 1072213201 + .long 914217606 + .long 1072199532 + .long 989797661 + .long 1072185576 + .long 945436416 + .long 1072171326 + .long 549291300 + .long 1072156774 + .long 1814636389 + .long 1072141911 + .long 239092858 + .long 1072126729 + .long 1794680724 + .long 1072111217 + .long 1241534678 + .long 1072095366 + .long 3366566214 + .long 1072079164 + .long 1244090828 + .long 1072062601 + .long 1708448120 + .long 1072045663 + .long 3544260650 + .long 1072028337 + .long 1402741403 + .long 1072010610 + .long 2551936888 + .long 1071992465 + .long 617669739 + .long 1071973887 + .long 794002186 + .long 1071954857 + .long 2021237693 + .long 1071935356 + .long 540450384 + .long 1071915364 + .long 1920555537 + .long 1071894857 + .long 2879585206 + .long 1071873811 + .long 3000237455 + .long 1071852199 + .long 3352974346 + .long 1071829991 + .long 569629937 + .long 1071807155 + .long 2077237208 + .long 1071783653 + .long 2284891805 + .long 1071759446 + .long 1226651784 + .long 1071734489 + .long 1102047405 + .long 1071708731 + .long 2009896384 + .long 1071682115 + .long 927419082 + .long 1071654577 + .long 85010366 + .long 1071607413 + .long 696431025 + .long 1071548180 + .long 2611410541 + .long 1071486585 + .long 2612593658 + .long 1071422396 + .long 3548155306 + .long 1071355336 + .long 3887997484 + .long 1071285073 + .long 244854763 + .long 1071211202 + .long 4214445648 + .long 1071133216 + .long 2303966727 + .long 1071050478 + .long 3991040013 + .long 1070962152 + .long 3126952278 + .long 1070867118 + .long 1817448378 + .long 1070763804 + .long 1793814864 + .long 1070649884 + .long 3507224072 + .long 1070447193 + .long 4027609105 + .long 1070148772 + .long 577507993 + .long 1069779414 + .long 2310232419 + .long 1068931829 + .type T_table,@object + .size T_table,2048 + .align 16 +Tbl_addr: + .long 3822952792 + .long 1021639372 + .long 182792448 + .long 1068507836 + .long 2264213271 + .long 1019558908 + .long 649052928 + .long 1068524253 + .long 1797139609 + .long 1022295143 + .long 1243095296 + .long 1068540671 + .long 1415938756 + .long 1021439537 + .long 2033294592 + .long 1068557090 + .long 2356809978 + .long 1021777916 + .long 3088063744 + .long 1068573510 + .long 2669055318 + .long 1022124482 + .long 180888576 + .long 1068589932 + .long 3566445325 + .long 1021358712 + .long 1970196992 + .long 1068606354 + .long 896980323 + .long 1021319659 + .long 4229555456 + .long 1068622777 + .long 436049712 + .long 1021319758 + .long 2732572160 + .long 1068639202 + .long 583123209 + .long 1020797960 + .long 1842831872 + .long 1068655628 + .long 1370449804 + .long 1021429270 + .long 1628994560 + .long 1068672055 + .long 2411391464 + .long 1021057980 + .long 2159763712 + .long 1068688483 + .long 1208692749 + .long 1021943903 + .long 3503886336 + .long 1068704912 + .long 538793309 + .long 1019744063 + .long 1435187200 + .long 1068721343 + .long 4085087612 + .long 1020608419 + .long 317469952 + .long 1068737775 + .long 144386942 + .long 1021440732 + .long 219617280 + .long 1068754208 + .long 2940088361 + .long 1019981122 + .long 1210558208 + .long 1068770642 + .long 2176850347 + .long 1018373705 + .long 3359268352 + .long 1068787077 + .long 2395611454 + .long 1021889042 + .long 2439803648 + .long 1068803514 + .long 1650705253 + .long 1020227966 + .long 2816203520 + .long 1068819952 + .long 3702166386 + .long 1019379914 + .long 262620672 + .long 1068836392 + .long 1855649370 + .long 1020453124 + .long 3438159616 + .long 1068852832 + .long 923063860 + .long 1019273834 + .long 3822105856 + .long 1068869274 + .long 4289947947 + .long 1019434249 + .long 1483729920 + .long 1068885718 + .long 787455814 + .long 1020738379 + .long 787321088 + .long 1068902163 + .long 3321653337 + .long 1021842569 + .long 1802253312 + .long 1068918609 + .long 2653633526 + .long 1021821525 + .long 302985984 + .long 1068935057 + .long 161272028 + .long 1021655149 + .long 653966080 + .long 1068951506 + .long 2566098667 + .long 1020066219 + .long 2924727296 + .long 1068967956 + .long 3646493722 + .long 1014292285 + .long 2889890304 + .long 1068984408 + .long 1081009196 + .long 1022189620 + .long 619098112 + .long 1069000862 + .long 4011643355 + .long 1021773297 + .long 477017600 + .long 1069017317 + .long 4030305534 + .long 1021292252 + .long 2533403904 + .long 1069033773 + .long 2645187591 + .long 1019527099 + .long 2563102208 + .long 1069050231 + .long 3857293792 + .long 1022311697 + .long 635982336 + .long 1069066691 + .long 3625936637 + .long 1017511744 + .long 1116940800 + .long 1069083152 + .long 3653872993 + .long 1022016631 + .long 4075964160 + .long 1069099614 + .long 2468900271 + .long 1021769532 + .long 993165568 + .long 1069116079 + .long 1358104224 + .long 1021199776 + .long 528586752 + .long 1069132545 + .long 2200950332 + .long 1022024872 + .long 2752395776 + .long 1069149012 + .long 3197072454 + .long 1017751319 + .long 3439855616 + .long 1069165481 + .long 1651081806 + .long 1020809338 + .long 2661257728 + .long 1069181952 + .long 539032752 + .long 1021728805 + .long 486957312 + .long 1069198425 + .long 3136045149 + .long 1016888671 + .long 1282340352 + .long 1069214899 + .long 2593963259 + .long 1018956103 + .long 822921728 + .long 1069231375 + .long 2146032737 + .long 1022306465 + .long 3474216192 + .long 1069247852 + .long 3976811625 + .long 1021350207 + .long 716902656 + .long 1069264332 + .long 718267222 + .long 1018624727 + .long 1211594496 + .long 1069280813 + .long 1485641389 + .long 1018447451 + .long 734070272 + .long 1069297296 + .long 354455128 + .long 1021341291 + .long 3650110720 + .long 1069313780 + .long 682185947 + .long 1021651853 + .long 1440663040 + .long 1069330267 + .long 3558574550 + .long 1021615110 + .long 2766612224 + .long 1069346755 + .long 874607978 + .long 1017746872 + .long 3404011008 + .long 1069363245 + .long 4154988502 + .long 1021439906 + .long 3423949056 + .long 1069379737 + .long 2263202309 + .long 1021479615 + .long 2897587712 + .long 1069396231 + .long 2562065031 + .long 1022090363 + .long 1896159232 + .long 1069412727 + .long 3836237663 + .long 1019867288 + .long 490968576 + .long 1069429225 + .long 3322056743 + .long 1006752762 + .long 3048360192 + .long 1069445724 + .long 1152314833 + .long 1013122252 + .long 1049850624 + .long 1069462226 + .long 3601590727 + .long 1022214610 + .long 3156899584 + .long 1069478729 + .long 1855169970 + .long 1019487271 + .long 851173376 + .long 1069495235 + .long 312649594 + .long 1020868604 + .long 2794281728 + .long 1069511742 + .long 1093490181 + .long 1020777577 + .long 468042496 + .long 1069528252 + .long 1152540679 + .long 1021403732 + .long 2534219264 + .long 1069544763 + .long 2292126035 + .long 1021872430 + .long 1376146432 + .long 1069558527 + .long 3293753641 + .long 1020500454 + .long 4175442432 + .long 1069575044 + .long 3626347564 + .long 1021610969 + .long 3523113472 + .long 1069591566 + .long 339956500 + .long 1021119039 + .long 4003350528 + .long 1069608092 + .long 3429333082 + .long 1022813542 + .long 1611067392 + .long 1069624623 + .long 2298017544 + .long 1021977587 + .long 931782144 + .long 1069641158 + .long 2164684743 + .long 1021250988 + .long 2256725504 + .long 1069657697 + .long 1138762335 + .long 1021443776 + .long 1582853120 + .long 1069674241 + .long 1084010382 + .long 1022994693 + .long 3497758720 + .long 1069690789 + .long 406366244 + .long 1022713586 + .long 3999816960 + .long 1069707342 + .long 1488723042 + .long 1023381290 + .long 3383096064 + .long 1069723900 + .long 2541558953 + .long 1019137887 + .long 1942403584 + .long 1069740463 + .long 1879620343 + .long 1022653642 + .long 4268263680 + .long 1069757030 + .long 3039077047 + .long 1022252545 + .long 2067062272 + .long 1069773603 + .long 4190670677 + .long 1020725863 + .long 4225828096 + .long 1069790180 + .long 1998567321 + .long 1022014385 + .long 2452507136 + .long 1069806763 + .long 1511628873 + .long 1021900300 + .long 1340746240 + .long 1069823351 + .long 788367341 + .long 1022726208 + .long 1190035456 + .long 1069839944 + .long 3856337230 + .long 1021834118 + .long 2300688384 + .long 1069856542 + .long 3211396579 + .long 1022621365 + .long 678886400 + .long 1069873146 + .long 4001011887 + .long 1022042646 + .long 921594112 + .long 1069889755 + .long 557811968 + .long 1023065533 + .long 3331668992 + .long 1069906369 + .long 1877060679 + .long 1022419742 + .long 3917875200 + .long 1069922989 + .long 1181055171 + .long 1022752712 + .long 2984829696 + .long 1069939615 + .long 4294526932 + .long 1021499988 + .long 838049024 + .long 1069956247 + .long 3658081878 + .long 1022957952 + .long 2078928384 + .long 1069972884 + .long 820353701 + .long 1019391107 + .long 2719854336 + .long 1069989527 + .long 1644022489 + .long 1023378240 + .long 3069117696 + .long 1070006176 + .long 2771393702 + .long 1019319954 + .long 3435962368 + .long 1070022831 + .long 3876394145 + .long 1023024433 + .long 4130595328 + .long 1070039492 + .long 1630447748 + .long 1021465882 + .long 1169236224 + .long 1070056160 + .long 2828355997 + .long 1020458120 + .long 3453997312 + .long 1070072833 + .long 164091641 + .long 1020388279 + .long 2708127744 + .long 1070089513 + .long 3036550223 + .long 1023328684 + .long 3540797696 + .long 1070106199 + .long 3710949463 + .long 1022568805 + .long 1972276736 + .long 1070122892 + .long 3885277950 + .long 1019761674 + .long 2613815552 + .long 1070139591 + .long 2764165077 + .long 1022921023 + .long 1487791616 + .long 1070156297 + .long 1330644769 + .long 1023162679 + .long 3207593472 + .long 1070173009 + .long 3911007221 + .long 1022993496 + .long 3797764608 + .long 1070189728 + .long 979712598 + .long 1022554580 + .long 3578920448 + .long 1070206454 + .long 2825738223 + .long 1020223708 + .long 2872795648 + .long 1070223187 + .long 392451124 + .long 1022666279 + .long 2002258432 + .long 1070239927 + .long 3730407632 + .long 1023148291 + .long 1291326464 + .long 1070256674 + .long 3723802980 + .long 1022514089 + .long 1065180928 + .long 1070273428 + .long 2635617463 + .long 1022654470 + .long 1650181632 + .long 1070290189 + .long 2061982883 + .long 1022853411 + .long 3373882880 + .long 1070306957 + .long 319732785 + .long 1022017175 + .long 2270081280 + .long 1070323733 + .long 2237757411 + .long 1023064087 + .long 2963732736 + .long 1070340516 + .long 468839165 + .long 1023293774 + .long 1491099904 + .long 1070357307 + .long 1502657946 + .long 1021533479 + .long 2479636480 + .long 1070374105 + .long 482913562 + .long 1021986286 + .long 1968133632 + .long 1070390911 + .long 3281474337 + .long 1022646400 + .long 291639040 + .long 1070407725 + .long 2453320259 + .long 1022812423 + .long 2081472512 + .long 1070424546 + .long 2939989570 + .long 1023091888 + .long 3380340480 + .long 1070441375 + .long 2850707499 + .long 1021921109 + .long 232287488 + .long 1070458213 + .long 3674625342 + .long 1020725130 + .long 1567614208 + .long 1070475058 + .long 9347334 + .long 1022024009 + .long 3433091072 + .long 1070491911 + .long 282524999 + .long 1021433523 + .long 1876877312 + .long 1070508773 + .long 3470449440 + .long 1019309721 + .long 1538472192 + .long 1070525643 + .long 2089486825 + .long 1019698916 + .long 2763830784 + .long 1070542521 + .long 443498115 + .long 1020505194 + .long 1605381632 + .long 1070559408 + .long 3018871601 + .long 1022869913 + .long 2706946048 + .long 1070576303 + .long 3936260892 + .long 1023175875 + .long 2123887360 + .long 1070593207 + .long 2994220655 + .long 1022825948 + .long 104015104 + .long 1070603108 + .long 335054493 + .long 1023441853 + .long 2904568832 + .long 1070615800 + .long 1451215633 + .long 1023853857 + .long 3456197120 + .long 1070632739 + .long 436334733 + .long 1024026432 + .long 252452352 + .long 1070649697 + .long 34596167 + .long 1024031396 + .long 3328018432 + .long 1070666672 + .long 2644547073 + .long 1024296758 + .long 1255829248 + .long 1070683667 + .long 552832586 + .long 1023763122 + .long 4097058560 + .long 1070700680 + .long 1955640623 + .long 1021394654 + .long 451770112 + .long 1070717714 + .long 3428903777 + .long 1022941142 + .long 408920832 + .long 1070734767 + .long 165503263 + .long 1023894958 + .long 1186960640 + .long 1070751840 + .long 435826450 + .long 1024026134 + .long 19078656 + .long 1070768934 + .long 1834169749 + .long 1022899284 + .long 2743490304 + .long 1070786048 + .long 494581074 + .long 1018818479 + .long 2328961024 + .long 1070803184 + .long 2987908834 + .long 1022581110 + .long 350011392 + .long 1070820342 + .long 240771184 + .long 1024143083 + .long 2692326912 + .long 1070837521 + .long 666056837 + .long 1022394776 + .long 2373274368 + .long 1070854723 + .long 2484337770 + .long 1024228156 + .long 1017131520 + .long 1070871948 + .long 3285648279 + .long 1024025789 + .long 265558272 + .long 1070889196 + .long 392241896 + .long 1024252809 + .long 1778008064 + .long 1070906467 + .long 1536107943 + .long 1023949300 + .long 2937184768 + .long 1070923762 + .long 3541062251 + .long 1019448646 + .long 1144442880 + .long 1070941082 + .long 3691683781 + .long 1022123948 + .long 2410165504 + .long 1070958426 + .long 1804181960 + .long 1023945221 + .long 4174350848 + .long 1070975795 + .long 2016094861 + .long 1021716585 + .long 3897012480 + .long 1070993190 + .long 175294410 + .long 1023703404 + .long 3353623040 + .long 1071010611 + .long 167973242 + .long 1023240839 + .long 45671168 + .long 1071028059 + .long 2166856113 + .long 1021565413 + .long 86063872 + .long 1071045533 + .long 2676254727 + .long 1023985299 + .long 1019772672 + .long 1071063034 + .long 989043593 + .long 1021549587 + .long 414297344 + .long 1071080563 + .long 3960972046 + .long 1024307251 + .long 155173120 + .long 1071098120 + .long 1830919291 + .long 1021592251 + .long 2151562240 + .long 1071115705 + .long 405408666 + .long 1023423128 + .long 4041854720 + .long 1071133319 + .long 2043497827 + .long 1024411503 + .long 3489224192 + .long 1071150963 + .long 3072215864 + .long 1022698635 + .long 2477196288 + .long 1071168637 + .long 1812195139 + .long 1022689192 + .long 3015298816 + .long 1071186341 + .long 764841969 + .long 1021027331 + .long 2844731136 + .long 1071204076 + .long 2878117321 + .long 1019116513 + .long 4028950528 + .long 1071221842 + .long 698911452 + .long 1023265602 + .long 69441536 + .long 1071239641 + .long 3253467847 + .long 1020795075 + .long 1676209920 + .long 1071257471 + .long 4272431167 + .long 1022873982 + .long 2408752384 + .long 1071275334 + .long 648519100 + .long 1024385717 + .long 151623680 + .long 1071293231 + .long 345257017 + .long 1019561408 + .long 1410154240 + .long 1071311161 + .long 197863993 + .long 1023224207 + .long 4131351552 + .long 1071329125 + .long 2620801789 + .long 1024411169 + .long 1999664384 + .long 1071347125 + .long 3952692616 + .long 1024168086 + .long 1617668864 + .long 1071365160 + .long 3019889809 + .long 1021907692 + .long 1032074240 + .long 1071383231 + .long 59469899 + .long 1023656194 + .long 2619492096 + .long 1071401338 + .long 1417526820 + .long 1021457783 + .long 202429440 + .long 1071419483 + .long 2927667935 + .long 1019175447 + .long 525044224 + .long 1071437665 + .long 38166811 + .long 1023981879 + .long 1779258880 + .long 1071455885 + .long 481252500 + .long 1023310234 + .long 2195673600 + .long 1071474144 + .long 3962395981 + .long 1021339088 + .long 44573696 + .long 1071492443 + .long 3936281395 + .long 1023014829 + .long 2226905344 + .long 1071510781 + .long 1515320476 + .long 1024320623 + .long 2800512512 + .long 1071529160 + .long 1225403697 + .long 1021081846 + .long 161113600 + .long 1071547581 + .long 3064809733 + .long 1024173917 + .long 1338410240 + .long 1071566043 + .long 2027604973 + .long 1024362526 + .long 522433280 + .long 1071584548 + .long 2055171723 + .long 1023858825 + .long 539595776 + .long 1071603096 + .long 3868820135 + .long 1022936424 + .long 4264017664 + .long 1071621687 + .long 3228065145 + .long 1023479578 + .long 1733924096 + .long 1071640324 + .long 3511934475 + .long 1022496355 + .long 108880384 + .long 1071651839 + .long 615880967 + .long 1023519706 + .long 3517856512 + .long 1071661202 + .long 3113108559 + .long 1025190289 + .long 4043153152 + .long 1071670589 + .long 1571836218 + .long 1023106116 + .long 3251299072 + .long 1071680000 + .long 3444076102 + .long 1022187841 + .long 2736921600 + .long 1071689435 + .long 272771483 + .long 1025095280 + .long 3897698560 + .long 1071703633 + .long 2075390188 + .long 1022489022 + .long 3209485056 + .long 1071722652 + .long 1438094065 + .long 1021844944 + .long 3781432064 + .long 1071741774 + .long 1675017145 + .long 1024143828 + .long 2684184064 + .long 1071761003 + .long 2259963753 + .long 1024731393 + .long 1840489728 + .long 1071780342 + .long 3372883597 + .long 1023431408 + .long 3764087808 + .long 1071799794 + .long 3307523102 + .long 1024485788 + .long 3006232320 + .long 1071819364 + .long 3088971966 + .long 1025213251 + .long 3374881280 + .long 1071839055 + .long 834437749 + .long 1025236452 + .long 797284864 + .long 1071858872 + .long 3122663941 + .long 1025320473 + .long 545765120 + .long 1071878818 + .long 826539625 + .long 1022450955 + .long 107562240 + .long 1071898898 + .long 339584600 + .long 1022481255 + .long 2123649024 + .long 1071919116 + .long 3912959833 + .long 1024321009 + .long 1562385664 + .long 1071939478 + .long 2846067230 + .long 1023343981 + .long 2963085824 + .long 1071959988 + .long 954548627 + .long 1021475211 + .long 3325550592 + .long 1071980652 + .long 3459651155 + .long 1025305573 + .long 775752448 + .long 1072001476 + .long 3582746667 + .long 1023859460 + .long 3238590720 + .long 1072022464 + .long 634636162 + .long 1024472353 + .long 2758801920 + .long 1072043624 + .long 3078216319 + .long 1025304516 + .long 1370319104 + .long 1072064962 + .long 2570569078 + .long 1025099442 + .long 2615805184 + .long 1072086484 + .long 3729933412 + .long 1024605112 + .long 3077336576 + .long 1072108198 + .long 1948916066 + .long 1024781603 + .long 1099528192 + .long 1072130112 + .long 3139143157 + .long 1023729360 + .long 1231903232 + .long 1072152233 + .long 1349513477 + .long 1024737515 + .long 1507504128 + .long 1072174570 + .long 3484516322 + .long 1024000959 + .long 2214659840 + .long 1072197132 + .long 2563820917 + .long 1025225535 + .long 1804739840 + .long 1072219929 + .long 760038746 + .long 1024482855 + .long 1413746688 + .long 1072242971 + .long 3401734714 + .long 1025129838 + .long 821409536 + .long 1072266269 + .long 3729772551 + .long 1025484796 + .long 3031825664 + .long 1072289834 + .long 122256749 + .long 1024752594 + .long 1710784256 + .long 1072313680 + .long 1518205483 + .long 1024724809 + .long 3025265152 + .long 1072337819 + .long 409951989 + .long 1022835555 + .long 287769088 + .long 1072362267 + .long 800355594 + .long 1022484850 + .long 198179840 + .long 1072387038 + .long 3502926213 + .long 1024209373 + .long 1909130496 + .long 1072412149 + .long 3064694319 + .long 1025380823 + .long 1941732096 + .long 1072437619 + .long 4112930390 + .long 1024294679 + .long 3492010496 + .long 1072463467 + .long 2684918107 + .long 1023220233 + .long 81959680 + .long 1072489716 + .long 220021366 + .long 1020635131 + .long 2297837056 + .long 1072516387 + .long 4027683826 + .long 1021041185 + .long 270404096 + .long 1072543508 + .long 2012766065 + .long 1021780753 + .long 3667376896 + .long 1072571105 + .long 2727981522 + .long 1023009874 + .long 330400256 + .long 1072599212 + .long 2940017003 + .long 1025393439 + .long 1119293952 + .long 1072627861 + .long 1608550416 + .long 1022675612 + .long 3536155904 + .long 1072657091 + .long 349665778 + .long 1025156751 + .long 3078046720 + .long 1072686946 + .long 2016159996 + .long 1022193169 + .long 455228416 + .long 1072705361 + .long 1908539328 + .long 1026126332 + .long 1871505664 + .long 1072720988 + .long 2784700894 + .long 1025922277 + .long 1630994432 + .long 1072737010 + .long 361107678 + .long 1022887244 + .long 2084558336 + .long 1072753462 + .type Tbl_addr,@object + .size Tbl_addr,3840 + .space 768, 0x00 # pad + .align 16 +cv: + .long 0 + .long 0 + .long 1431655765 + .long 3217380693 + .long 858993459 + .long 3216192307 + .long 3067833783 + .long 3215383405 + .type cv,@object + .size cv,32 + .align 16 +PI_BY_2: + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .type PI_BY_2,@object + .size PI_BY_2,16 + .align 16 +NEG_PI: + .long 856972295 + .long 3164710438 + .long 1413754136 + .long 3221823995 + .type NEG_PI,@object + .size NEG_PI,16 + .align 16 +cv2: + .long 780903145 + .long 1066854586 + .long 858993459 + .long 1068708659 + .long 3340530119 + .long 1067392113 + .long 1431655765 + .long 1069897045 + .long 1321528399 + .long 1066517740 + .long 3067833783 + .long 1067899757 + .long 2021159460 + .long 1065855096 + .long 2576980378 + .long 1066178969 + .type cv2,@object + .size cv2,64 + .align 16 +HALFMASK: + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .type HALFMASK,@object + .size HALFMASK,16 + .align 16 +PI: + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 1074340347 + .type PI,@object + .size PI,16 + .align 4 +ONEMASK: + .long 0 + .long 1072693248 + .type ONEMASK,@object + .size ONEMASK,8 + .align 4 +TMASK: + .long 0 + .long 4294950912 + .type TMASK,@object + .size TMASK,8 + .align 4 +ONE_BY_2: + .long 0 + .long 1071644672 + .type ONE_BY_2,@object + .size ONE_BY_2,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_acos.1-. + .4byte ..___tag_value_acos.5-..___tag_value_acos.1 + .2byte 0x0400 + .4byte ..___tag_value_acos.3-..___tag_value_acos.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_acos.4-..___tag_value_acos.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_asin.S b/libm/x86_64/e_asin.S new file mode 100644 index 000000000..9f41c7cfd --- /dev/null +++ b/libm/x86_64/e_asin.S @@ -0,0 +1,2036 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// To compute asin(s), separate schemes are used when s is in different +// intervals. +// +// |s| in [2^{-4}, sqrt(3)/2): +// Let t=2^k*1.b1 b2..b6 1, where s=2^k*1.b1 b2 .. b52 +// asin(s)=asin(t)+asin(r), where r=s*sqrt(1-t^2)-t*sqrt(1-s^2) +// asin(r)-r evaluated as 7-degree polynomial (c3*r^3+c5*r^5+c7*r^7) +// For the first degree term, r is evaluated as +// R=(s^2-t^2)/(sqrt(1-t^2)*s+sqrt(1-s^2)*t) +// (sqrt(1-t^2) read from table) +// The main source of error is still R (may still be affected by up to 3 ulps +// of rounding error). The table size must be sufficiently large, to minimize +// this effect. +// +// |s| in [sqrt(3)/2, 255/256): +// Let t=2^k*1.b1 b2..b6 1, where sqrt(1-s^2)=2^k*1.b1 b2 .. b52 (rounded) +// asin(|s|)=pi/2-asin(t)+asin(r), r=s*t-sqrt(1-s^2)*sqrt(1-t^2) +// asin(r) evaluated as polynomial (same as above) +// The first degree term is evaluated as +// r=(s^2+t^2-1)/(s*t+sqrt(1-s^2)*sqrt(1-t^2)) +// +// |s|<2^{-4}: evaluate as 13-degree polynomial +// +// |s| in [255/256,1): asin(|s|)=pi/2-asin(sqrt(1-s^2)) +// use 17-degree polynomial, get error term +// Q*eps ~ (1-s^2-Q^2)/(2*Q) for first term +// ( Q(1+eps)=sqrt(1-s^2) ) +// +// Special cases: +// asin(NaN) = quiet NaN, and raise invalid exception +// asin(INF) = QNaN and raise invalid exception +// asin(x) = QNaN and raise invalid exception, for |x|>1.0 +// asin(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin asin +ENTRY(asin) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_asin.1: + subq $24, %rsp +..___tag_value_asin.3: + movsd %xmm0, (%rsp) +..B1.2: + stmxcsr 16(%rsp) + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + jne .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + movsd ABSVALMASK(%rip), %xmm4 + movsd ONEMASK(%rip), %xmm3 + xorpd %xmm5, %xmm5 + movsd TMASK(%rip), %xmm2 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movq %xmm0, %xmm1 + psrlq $44, %xmm0 + movd %xmm0, %edx + movq %xmm1, %xmm7 + movl $8192, %ecx + pinsrw $2, %ecx, %xmm5 + movq %xmm1, %xmm0 + movl $524287, %eax + andl %edx, %eax + subl $260864, %eax + cmpl $955, %eax + jae .L_2TAG_PACKET_2.0.2 + mulsd %xmm1, %xmm1 + andl $65535, %edx + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + andpd %xmm7, %xmm2 + andl $-4, %edx + subl $64256, %edx + lea T_table(%rip), %r8 + movsd (%r8,%rdx,2), %xmm1 + orpd %xmm5, %xmm2 + lea Tbl_addr(%rip), %r8 + movapd (%r8,%rdx,4), %xmm4 + movq %xmm7, %xmm6 + addsd %xmm2, %xmm7 + subsd %xmm2, %xmm0 + mulsd %xmm7, %xmm0 + mulsd %xmm1, %xmm6 + mulsd %xmm2, %xmm3 + movq %xmm6, %xmm1 + addsd %xmm3, %xmm6 + divsd %xmm6, %xmm0 + movsd 16+cv(%rip), %xmm7 + movsd cv(%rip), %xmm5 + subsd %xmm3, %xmm1 + andpd SIGNMASK(%rip), %xmm2 + movq %xmm1, %xmm3 + mulsd %xmm1, %xmm1 + movsd 8+cv(%rip), %xmm6 + mulsd %xmm1, %xmm3 + mulsd %xmm1, %xmm7 + mulsd %xmm3, %xmm5 + xorpd %xmm2, %xmm4 + mulsd %xmm1, %xmm3 + addsd %xmm7, %xmm6 + mulsd %xmm3, %xmm6 + addsd %xmm4, %xmm5 + pshufd $238, %xmm4, %xmm4 + addsd %xmm5, %xmm6 + orpd %xmm2, %xmm4 + addsd %xmm6, %xmm0 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_3.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_3.0.2: + addsd %xmm4, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + subl $955, %eax + cmpl $67, %eax + jae .L_2TAG_PACKET_4.0.2 + mulsd %xmm1, %xmm1 + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + movl %edx, %eax + andpd ABSVALMASK(%rip), %xmm0 + andpd HALFMASK2(%rip), %xmm7 + movq %xmm0, %xmm1 + movsd ONEMASK(%rip), %xmm4 + movq %xmm7, %xmm6 + subsd %xmm7, %xmm1 + mulsd %xmm7, %xmm7 + addsd %xmm6, %xmm0 + subsd %xmm7, %xmm4 + mulsd %xmm1, %xmm0 + movq %xmm3, %xmm7 + andpd %xmm3, %xmm2 + psllq $2, %xmm3 + pextrw $3, %xmm3, %edx + orpd %xmm5, %xmm2 + subl $65216, %edx + addl %edx, %edx + lea T_table(%rip), %r8 + mulsd (%r8,%rdx,4), %xmm7 + mulsd %xmm2, %xmm6 + movapd PI_BY_2(%rip), %xmm3 + mulsd %xmm2, %xmm1 + mulsd %xmm2, %xmm2 + subsd %xmm7, %xmm6 + addsd %xmm1, %xmm6 + subsd %xmm2, %xmm4 + addsd %xmm7, %xmm7 + movsd cv(%rip), %xmm5 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm7 + movsd 16+cv(%rip), %xmm0 + divsd %xmm7, %xmm4 + movsd 8+cv(%rip), %xmm2 + lea Tbl_addr(%rip), %r8 + subpd (%r8,%rdx,8), %xmm3 + movq %xmm6, %xmm1 + mulsd %xmm6, %xmm6 + andl $524288, %eax + shrl $4, %eax + mulsd %xmm6, %xmm0 + mulsd %xmm6, %xmm1 + mulsd %xmm1, %xmm5 + mulsd %xmm6, %xmm1 + addsd %xmm2, %xmm0 + pxor %xmm6, %xmm6 + mulsd %xmm1, %xmm0 + addsd %xmm3, %xmm5 + pinsrw $3, %eax, %xmm6 + addsd %xmm5, %xmm0 + movq %xmm4, %xmm5 + pshufd $238, %xmm3, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm3 + subsd %xmm3, %xmm5 + subsd %xmm5, %xmm0 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_5.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_5.0.2: + xorpd %xmm6, %xmm0 + xorpd %xmm6, %xmm4 + subsd %xmm4, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + addl $15291, %eax + cmpl $14336, %eax + jae .L_2TAG_PACKET_6.0.2 + unpcklpd %xmm7, %xmm7 + movapd cv2(%rip), %xmm1 + movapd %xmm7, %xmm6 + movapd 16+cv2(%rip), %xmm2 + movapd 32+cv2(%rip), %xmm4 + mulpd %xmm7, %xmm7 + mulpd %xmm7, %xmm6 + mulpd %xmm7, %xmm1 + mulpd %xmm7, %xmm7 + movq %xmm6, %xmm3 + mulsd %xmm6, %xmm6 + addpd %xmm2, %xmm1 + mulpd %xmm7, %xmm4 + mulsd %xmm3, %xmm6 + addpd %xmm4, %xmm1 + mulpd %xmm6, %xmm1 + pshufd $238, %xmm1, %xmm2 + addsd %xmm2, %xmm1 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_7.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_7.0.2: + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + subl $15358, %eax + cmpl $2, %eax + jae .L_2TAG_PACKET_8.0.2 + mulsd %xmm1, %xmm1 + subsd %xmm1, %xmm3 + sqrtsd %xmm3, %xmm3 + movl %edx, %eax + andpd HALFMASK(%rip), %xmm7 + pshufd $68, %xmm3, %xmm5 + andpd HALFMASK(%rip), %xmm3 + movq %xmm7, %xmm1 + movsd ONEMASK(%rip), %xmm4 + movq %xmm7, %xmm6 + subsd %xmm7, %xmm0 + mulsd %xmm7, %xmm7 + addsd %xmm1, %xmm1 + mulsd %xmm0, %xmm1 + subsd %xmm7, %xmm4 + movq %xmm3, %xmm6 + mulsd %xmm3, %xmm3 + mulsd %xmm0, %xmm0 + subsd %xmm1, %xmm4 + subsd %xmm5, %xmm6 + addsd %xmm5, %xmm5 + subsd %xmm3, %xmm4 + movapd cv2(%rip), %xmm2 + pshufd $238, %xmm5, %xmm3 + subsd %xmm0, %xmm4 + addsd %xmm6, %xmm5 + pshufd $238, %xmm3, %xmm7 + addsd %xmm3, %xmm3 + mulsd %xmm6, %xmm5 + addsd %xmm5, %xmm4 + pshufd $238, %xmm7, %xmm6 + divsd %xmm3, %xmm4 + movapd 48+cv2(%rip), %xmm1 + movapd 16+cv2(%rip), %xmm5 + movapd 32+cv2(%rip), %xmm0 + mulpd %xmm7, %xmm7 + movq %xmm6, %xmm3 + mulpd %xmm7, %xmm2 + mulpd %xmm7, %xmm6 + shrl $4, %eax + andl $32768, %eax + mulsd %xmm7, %xmm1 + mulpd %xmm7, %xmm7 + addpd %xmm2, %xmm5 + movapd %xmm6, %xmm2 + mulsd %xmm6, %xmm6 + mulpd %xmm0, %xmm7 + movapd PI_BY_2(%rip), %xmm0 + mulsd %xmm6, %xmm2 + addpd %xmm5, %xmm7 + pshufd $238, %xmm1, %xmm5 + mulsd %xmm2, %xmm6 + mulpd %xmm2, %xmm7 + addsd %xmm5, %xmm1 + xorpd %xmm5, %xmm5 + pshufd $238, %xmm7, %xmm2 + mulsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm6 + addsd %xmm2, %xmm7 + movq %xmm3, %xmm2 + pinsrw $3, %eax, %xmm5 + subsd %xmm6, %xmm3 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm6 + addsd %xmm4, %xmm7 + subsd %xmm6, %xmm2 + subsd %xmm7, %xmm0 + subsd %xmm2, %xmm0 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_9.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_9.0.2: + xorpd %xmm5, %xmm0 + xorpd %xmm5, %xmm3 + subsd %xmm3, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_8.0.2: + addl $261886, %eax + cmpl $261888, %eax + jb .L_2TAG_PACKET_10.0.2 + movd %xmm0, %ecx + psrlq $32, %xmm0 + movd %xmm0, %edx + andl $2147483647, %edx + movl $1072693248, %eax + subl %edx, %eax + orl %ecx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_11.0.2 + movsd (%rsp), %xmm2 + movd %xmm2, %edx + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $2147483647, %ecx + subl $1, %edx + sbbl $2146435072, %ecx + cmpl $0, %ecx + jge .L_2TAG_PACKET_10.0.2 + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %edx + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_12.0.2 +.L_2TAG_PACKET_11.0.2: + movsd ABSVALMASK(%rip), %xmm1 + movsd PI_BY_2(%rip), %xmm2 + movsd 8+PI_BY_2(%rip), %xmm0 + addsd %xmm2, %xmm0 + andnpd %xmm7, %xmm1 + orpd %xmm1, %xmm0 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_13.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_13.0.2: + jmp ..B1.5 +.L_2TAG_PACKET_10.0.2: + movsd (%rsp), %xmm0 + xorpd %xmm6, %xmm6 + movq %xmm0, %xmm7 + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_14.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_14.0.2: + pextrw $3, %xmm0, %edx + andl $32752, %edx + subl $16, %edx + cmpl $32736, %edx + jb .L_2TAG_PACKET_15.0.2 + addsd %xmm0, %xmm6 + orpd %xmm6, %xmm0 + mulsd %xmm0, %xmm7 +.L_2TAG_PACKET_15.0.2: + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + movl %eax, 20(%rsp) + ldmxcsr 20(%rsp) + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_12.0.2: + movl 16(%rsp), %eax + andl $-24577, %eax + cmpl 16(%rsp), %eax + je .L_2TAG_PACKET_16.0.2 + stmxcsr 20(%rsp) + movl 16(%rsp), %eax + andl $24576, %eax + orl %eax, 20(%rsp) + ldmxcsr 20(%rsp) +.L_2TAG_PACKET_16.0.2: + movq %xmm0, 8(%rsp) +..B1.3: + movq 8(%rsp), %xmm0 +.L_2TAG_PACKET_17.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_asin.4: + ret +..___tag_value_asin.5: +END(asin) +# -- End asin + .section .rodata, "a" + .align 16 + .align 16 +ABSVALMASK: + .long 4294967295 + .long 2147483647 + .long 0 + .long 0 + .type ABSVALMASK,@object + .size ABSVALMASK,16 + .align 16 +T_table: + .long 2642784509 + .long 1072689083 + .long 1514442531 + .long 1072688953 + .long 333108933 + .long 1072688821 + .long 3392112024 + .long 1072688686 + .long 2099852862 + .long 1072688550 + .long 749609004 + .long 1072688412 + .long 3634632596 + .long 1072688271 + .long 2163248461 + .long 1072688129 + .long 628657846 + .long 1072687985 + .long 3324036511 + .long 1072687838 + .long 1657632815 + .long 1072687690 + .long 4217538760 + .long 1072687539 + .long 2411951597 + .long 1072687387 + .long 533944872 + .long 1072687233 + .long 2876566508 + .long 1072687076 + .long 847936891 + .long 1072686918 + .long 3036019913 + .long 1072686757 + .long 848884575 + .long 1072686595 + .long 2874443326 + .long 1072686430 + .long 520713666 + .long 1072686264 + .long 2375556481 + .long 1072686095 + .long 4141904948 + .long 1072685924 + .long 1522666382 + .long 1072685752 + .long 3105624104 + .long 1072685577 + .long 298666327 + .long 1072685401 + .long 1689524500 + .long 1072685222 + .long 2981002200 + .long 1072685041 + .long 4170844284 + .long 1072684858 + .long 961802263 + .long 1072684674 + .long 1941503454 + .long 1072684487 + .long 2812647170 + .long 1072684298 + .long 3572873869 + .long 1072684107 + .long 4219797823 + .long 1072683914 + .long 456039788 + .long 1072683720 + .long 869096151 + .long 1072683523 + .long 1161535119 + .long 1072683324 + .long 1330865866 + .long 1072683123 + .long 1374571204 + .long 1072682920 + .long 1290107538 + .long 1072682715 + .long 1074904836 + .long 1072682508 + .long 726366587 + .long 1072682299 + .long 241869763 + .long 1072682088 + .long 3913732079 + .long 1072681874 + .long 3149342765 + .long 1072681659 + .long 2240966306 + .long 1072681442 + .long 1185873216 + .long 1072681223 + .long 4276274591 + .long 1072681001 + .long 2919452883 + .long 1072680778 + .long 1407565635 + .long 1072680553 + .long 4032743551 + .long 1072680325 + .long 2202188565 + .long 1072680096 + .long 207977577 + .long 1072679865 + .long 2342160518 + .long 1072679631 + .long 11858423 + .long 1072679396 + .long 1804034453 + .long 1072679158 + .long 3420722787 + .long 1072678918 + .long 563930456 + .long 1072678677 + .long 1820539192 + .long 1072678433 + .long 2892501606 + .long 1072678187 + .long 3776710320 + .long 1072677939 + .long 175063337 + .long 1072677690 + .long 674333171 + .long 1072677438 + .long 976363026 + .long 1072677184 + .long 1077935934 + .long 1072676928 + .long 1921075490 + .long 1072676540 + .long 881493302 + .long 1072676016 + .long 3275752439 + .long 1072675483 + .long 486855588 + .long 1072674943 + .long 1077229111 + .long 1072674394 + .long 723950308 + .long 1072673837 + .long 3693582199 + .long 1072673271 + .long 1367335316 + .long 1072672698 + .long 2305837020 + .long 1072672116 + .long 2184358641 + .long 1072671526 + .long 972682840 + .long 1072670928 + .long 2935101762 + .long 1072670321 + .long 3745513263 + .long 1072669706 + .long 3372320886 + .long 1072669083 + .long 1783464620 + .long 1072668452 + .long 3241386215 + .long 1072667812 + .long 3418125284 + .long 1072667164 + .long 2280219148 + .long 1072666508 + .long 4088700758 + .long 1072665843 + .long 219227400 + .long 1072665171 + .long 3521816918 + .long 1072664489 + .long 1076205279 + .long 1072663800 + .long 1436484616 + .long 1072663102 + .long 271362610 + .long 1072662396 + .long 1838996688 + .long 1072661681 + .long 1807122518 + .long 1072660958 + .long 137953542 + .long 1072660227 + .long 1088178584 + .long 1072659487 + .long 324057537 + .long 1072658739 + .long 2101288076 + .long 1072657982 + .long 2085133974 + .long 1072657217 + .long 235324451 + .long 1072656444 + .long 806051592 + .long 1072655662 + .long 3756033140 + .long 1072654871 + .long 453542543 + .long 1072654073 + .long 3741177327 + .long 1072653265 + .long 691216109 + .long 1072652450 + .long 4145223372 + .long 1072651625 + .long 1174439091 + .long 1072650793 + .long 324416139 + .long 1072649952 + .long 1550246310 + .long 1072649102 + .long 511524674 + .long 1072648244 + .long 1457248482 + .long 1072647377 + .long 45944955 + .long 1072646502 + .long 525537397 + .long 1072645618 + .long 2848440188 + .long 1072644725 + .long 2671555633 + .long 1072643824 + .long 4241172637 + .long 1072642914 + .long 3213094278 + .long 1072641996 + .long 3832503688 + .long 1072641069 + .long 1754091534 + .long 1072640134 + .long 1221921804 + .long 1072639190 + .long 2184526489 + .long 1072638237 + .long 294902089 + .long 1072637276 + .long 4090375270 + .long 1072636305 + .long 632860906 + .long 1072635327 + .long 2753498702 + .long 1072634339 + .long 1808009252 + .long 1072633343 + .long 2036428672 + .long 1072632338 + .long 3383235626 + .long 1072631324 + .long 1497347484 + .long 1072630302 + .long 617018317 + .long 1072629271 + .long 684933058 + .long 1072628231 + .long 1643170798 + .long 1072627182 + .long 3011066360 + .long 1072625592 + .long 957158713 + .long 1072623442 + .long 1390907941 + .long 1072621256 + .long 3819155270 + .long 1072619034 + .long 3443571196 + .long 1072616777 + .long 4045412458 + .long 1072614484 + .long 805503923 + .long 1072612156 + .long 1778922015 + .long 1072609791 + .long 2125033665 + .long 1072607390 + .long 1287203863 + .long 1072604953 + .long 2992629568 + .long 1072602479 + .long 2367267127 + .long 1072599969 + .long 3115526047 + .long 1072597422 + .long 340219539 + .long 1072594839 + .long 2017215719 + .long 1072592218 + .long 3225443424 + .long 1072589560 + .long 3326565673 + .long 1072586865 + .long 1669811211 + .long 1072584133 + .long 1886735022 + .long 1072581363 + .long 3301071171 + .long 1072578555 + .long 928514283 + .long 1072575710 + .long 2656364059 + .long 1072572826 + .long 3473490507 + .long 1072569904 + .long 2649965606 + .long 1072566944 + .long 3736819052 + .long 1072563945 + .long 1680885175 + .long 1072560908 + .long 4413771 + .long 1072557832 + .long 2214869753 + .long 1072554716 + .long 3214725184 + .long 1072551561 + .long 2186079903 + .long 1072548367 + .long 2590372131 + .long 1072545133 + .long 3578146079 + .long 1072541859 + .long 4283712755 + .long 1072538545 + .long 3824834510 + .long 1072535191 + .long 1302400298 + .long 1072531797 + .long 95058636 + .long 1072528362 + .long 3563906063 + .long 1072524885 + .long 2167230730 + .long 1072521368 + .long 3524918334 + .long 1072517809 + .long 2353304918 + .long 1072514209 + .long 1939625839 + .long 1072510567 + .long 1256714581 + .long 1072506883 + .long 3552525848 + .long 1072503156 + .long 3464809522 + .long 1072499387 + .long 4200542593 + .long 1072495575 + .long 355609124 + .long 1072491721 + .long 3684139099 + .long 1072487822 + .long 148355918 + .long 1072483881 + .long 1457689242 + .long 1072479895 + .long 2118591596 + .long 1072475865 + .long 908848089 + .long 1072471791 + .long 877032689 + .long 1072467672 + .long 752012304 + .long 1072463508 + .long 3532301749 + .long 1072459298 + .long 3600563221 + .long 1072455043 + .long 3902857084 + .long 1072450742 + .long 3063101036 + .long 1072446395 + .long 3972344374 + .long 1072442001 + .long 903183549 + .long 1072437561 + .long 983892938 + .long 1072433073 + .long 2722858568 + .long 1072428537 + .long 302790515 + .long 1072423954 + .long 759811057 + .long 1072419322 + .long 2507809922 + .long 1072414641 + .long 2388408813 + .long 1072407528 + .long 2084492942 + .long 1072397870 + .long 2435703301 + .long 1072388010 + .long 1935433360 + .long 1072377945 + .long 2742047290 + .long 1072367671 + .long 2053284205 + .long 1072357185 + .long 657783367 + .long 1072346483 + .long 2893664841 + .long 1072335560 + .long 3718906405 + .long 1072324413 + .long 1547896303 + .long 1072313038 + .long 2494058440 + .long 1072301429 + .long 3133238742 + .long 1072289582 + .long 3327000086 + .long 1072277492 + .long 1860667274 + .long 1072265154 + .long 665340747 + .long 1072252562 + .long 443347841 + .long 1072239710 + .long 581282618 + .long 1072226592 + .long 3349780465 + .long 1072213201 + .long 914217606 + .long 1072199532 + .long 989797661 + .long 1072185576 + .long 945436416 + .long 1072171326 + .long 549291300 + .long 1072156774 + .long 1814636389 + .long 1072141911 + .long 239092858 + .long 1072126729 + .long 1794680724 + .long 1072111217 + .long 1241534678 + .long 1072095366 + .long 3366566214 + .long 1072079164 + .long 1244090828 + .long 1072062601 + .long 1708448120 + .long 1072045663 + .long 3544260650 + .long 1072028337 + .long 1402741403 + .long 1072010610 + .long 2551936888 + .long 1071992465 + .long 617669739 + .long 1071973887 + .long 794002186 + .long 1071954857 + .long 2021237693 + .long 1071935356 + .long 540450384 + .long 1071915364 + .long 1920555537 + .long 1071894857 + .long 2879585206 + .long 1071873811 + .long 3000237455 + .long 1071852199 + .long 3352974346 + .long 1071829991 + .long 569629937 + .long 1071807155 + .long 2077237208 + .long 1071783653 + .long 2284891805 + .long 1071759446 + .long 1226651784 + .long 1071734489 + .long 1102047405 + .long 1071708731 + .long 2009896384 + .long 1071682115 + .long 927419082 + .long 1071654577 + .long 85010366 + .long 1071607413 + .long 696431025 + .long 1071548180 + .long 2611410541 + .long 1071486585 + .long 2612593658 + .long 1071422396 + .long 3548155306 + .long 1071355336 + .long 3887997484 + .long 1071285073 + .long 244854763 + .long 1071211202 + .long 4214445648 + .long 1071133216 + .long 2303966727 + .long 1071050478 + .long 3991040013 + .long 1070962152 + .long 3126952278 + .long 1070867118 + .long 1817448378 + .long 1070763804 + .long 1793814864 + .long 1070649884 + .long 3507224072 + .long 1070447193 + .long 4027609105 + .long 1070148772 + .long 577507993 + .long 1069779414 + .long 2310232419 + .long 1068931829 + .type T_table,@object + .size T_table,2048 + .align 16 +Tbl_addr: + .long 3822952792 + .long 1021639372 + .long 182792448 + .long 1068507836 + .long 2264213271 + .long 1019558908 + .long 649052928 + .long 1068524253 + .long 1797139609 + .long 1022295143 + .long 1243095296 + .long 1068540671 + .long 1415938756 + .long 1021439537 + .long 2033294592 + .long 1068557090 + .long 2356809978 + .long 1021777916 + .long 3088063744 + .long 1068573510 + .long 2669055318 + .long 1022124482 + .long 180888576 + .long 1068589932 + .long 3566445325 + .long 1021358712 + .long 1970196992 + .long 1068606354 + .long 896980323 + .long 1021319659 + .long 4229555456 + .long 1068622777 + .long 436049712 + .long 1021319758 + .long 2732572160 + .long 1068639202 + .long 583123209 + .long 1020797960 + .long 1842831872 + .long 1068655628 + .long 1370449804 + .long 1021429270 + .long 1628994560 + .long 1068672055 + .long 2411391464 + .long 1021057980 + .long 2159763712 + .long 1068688483 + .long 1208692749 + .long 1021943903 + .long 3503886336 + .long 1068704912 + .long 538793309 + .long 1019744063 + .long 1435187200 + .long 1068721343 + .long 4085087612 + .long 1020608419 + .long 317469952 + .long 1068737775 + .long 144386942 + .long 1021440732 + .long 219617280 + .long 1068754208 + .long 2940088361 + .long 1019981122 + .long 1210558208 + .long 1068770642 + .long 2176850347 + .long 1018373705 + .long 3359268352 + .long 1068787077 + .long 2395611454 + .long 1021889042 + .long 2439803648 + .long 1068803514 + .long 1650705253 + .long 1020227966 + .long 2816203520 + .long 1068819952 + .long 3702166386 + .long 1019379914 + .long 262620672 + .long 1068836392 + .long 1855649370 + .long 1020453124 + .long 3438159616 + .long 1068852832 + .long 923063860 + .long 1019273834 + .long 3822105856 + .long 1068869274 + .long 4289947947 + .long 1019434249 + .long 1483729920 + .long 1068885718 + .long 787455814 + .long 1020738379 + .long 787321088 + .long 1068902163 + .long 3321653337 + .long 1021842569 + .long 1802253312 + .long 1068918609 + .long 2653633526 + .long 1021821525 + .long 302985984 + .long 1068935057 + .long 161272028 + .long 1021655149 + .long 653966080 + .long 1068951506 + .long 2566098667 + .long 1020066219 + .long 2924727296 + .long 1068967956 + .long 3646493722 + .long 1014292285 + .long 2889890304 + .long 1068984408 + .long 1081009196 + .long 1022189620 + .long 619098112 + .long 1069000862 + .long 4011643355 + .long 1021773297 + .long 477017600 + .long 1069017317 + .long 4030305534 + .long 1021292252 + .long 2533403904 + .long 1069033773 + .long 2645187591 + .long 1019527099 + .long 2563102208 + .long 1069050231 + .long 3857293792 + .long 1022311697 + .long 635982336 + .long 1069066691 + .long 3625936637 + .long 1017511744 + .long 1116940800 + .long 1069083152 + .long 3653872993 + .long 1022016631 + .long 4075964160 + .long 1069099614 + .long 2468900271 + .long 1021769532 + .long 993165568 + .long 1069116079 + .long 1358104224 + .long 1021199776 + .long 528586752 + .long 1069132545 + .long 2200950332 + .long 1022024872 + .long 2752395776 + .long 1069149012 + .long 3197072454 + .long 1017751319 + .long 3439855616 + .long 1069165481 + .long 1651081806 + .long 1020809338 + .long 2661257728 + .long 1069181952 + .long 539032752 + .long 1021728805 + .long 486957312 + .long 1069198425 + .long 3136045149 + .long 1016888671 + .long 1282340352 + .long 1069214899 + .long 2593963259 + .long 1018956103 + .long 822921728 + .long 1069231375 + .long 2146032737 + .long 1022306465 + .long 3474216192 + .long 1069247852 + .long 3976811625 + .long 1021350207 + .long 716902656 + .long 1069264332 + .long 718267222 + .long 1018624727 + .long 1211594496 + .long 1069280813 + .long 1485641389 + .long 1018447451 + .long 734070272 + .long 1069297296 + .long 354455128 + .long 1021341291 + .long 3650110720 + .long 1069313780 + .long 682185947 + .long 1021651853 + .long 1440663040 + .long 1069330267 + .long 3558574550 + .long 1021615110 + .long 2766612224 + .long 1069346755 + .long 874607978 + .long 1017746872 + .long 3404011008 + .long 1069363245 + .long 4154988502 + .long 1021439906 + .long 3423949056 + .long 1069379737 + .long 2263202309 + .long 1021479615 + .long 2897587712 + .long 1069396231 + .long 2562065031 + .long 1022090363 + .long 1896159232 + .long 1069412727 + .long 3836237663 + .long 1019867288 + .long 490968576 + .long 1069429225 + .long 3322056743 + .long 1006752762 + .long 3048360192 + .long 1069445724 + .long 1152314833 + .long 1013122252 + .long 1049850624 + .long 1069462226 + .long 3601590727 + .long 1022214610 + .long 3156899584 + .long 1069478729 + .long 1855169970 + .long 1019487271 + .long 851173376 + .long 1069495235 + .long 312649594 + .long 1020868604 + .long 2794281728 + .long 1069511742 + .long 1093490181 + .long 1020777577 + .long 468042496 + .long 1069528252 + .long 1152540679 + .long 1021403732 + .long 2534219264 + .long 1069544763 + .long 2292126035 + .long 1021872430 + .long 1376146432 + .long 1069558527 + .long 3293753641 + .long 1020500454 + .long 4175442432 + .long 1069575044 + .long 3626347564 + .long 1021610969 + .long 3523113472 + .long 1069591566 + .long 339956500 + .long 1021119039 + .long 4003350528 + .long 1069608092 + .long 3429333082 + .long 1022813542 + .long 1611067392 + .long 1069624623 + .long 2298017544 + .long 1021977587 + .long 931782144 + .long 1069641158 + .long 2164684743 + .long 1021250988 + .long 2256725504 + .long 1069657697 + .long 1138762335 + .long 1021443776 + .long 1582853120 + .long 1069674241 + .long 1084010382 + .long 1022994693 + .long 3497758720 + .long 1069690789 + .long 406366244 + .long 1022713586 + .long 3999816960 + .long 1069707342 + .long 1488723042 + .long 1023381290 + .long 3383096064 + .long 1069723900 + .long 2541558953 + .long 1019137887 + .long 1942403584 + .long 1069740463 + .long 1879620343 + .long 1022653642 + .long 4268263680 + .long 1069757030 + .long 3039077047 + .long 1022252545 + .long 2067062272 + .long 1069773603 + .long 4190670677 + .long 1020725863 + .long 4225828096 + .long 1069790180 + .long 1998567321 + .long 1022014385 + .long 2452507136 + .long 1069806763 + .long 1511628873 + .long 1021900300 + .long 1340746240 + .long 1069823351 + .long 788367341 + .long 1022726208 + .long 1190035456 + .long 1069839944 + .long 3856337230 + .long 1021834118 + .long 2300688384 + .long 1069856542 + .long 3211396579 + .long 1022621365 + .long 678886400 + .long 1069873146 + .long 4001011887 + .long 1022042646 + .long 921594112 + .long 1069889755 + .long 557811968 + .long 1023065533 + .long 3331668992 + .long 1069906369 + .long 1877060679 + .long 1022419742 + .long 3917875200 + .long 1069922989 + .long 1181055171 + .long 1022752712 + .long 2984829696 + .long 1069939615 + .long 4294526932 + .long 1021499988 + .long 838049024 + .long 1069956247 + .long 3658081878 + .long 1022957952 + .long 2078928384 + .long 1069972884 + .long 820353701 + .long 1019391107 + .long 2719854336 + .long 1069989527 + .long 1644022489 + .long 1023378240 + .long 3069117696 + .long 1070006176 + .long 2771393702 + .long 1019319954 + .long 3435962368 + .long 1070022831 + .long 3876394145 + .long 1023024433 + .long 4130595328 + .long 1070039492 + .long 1630447748 + .long 1021465882 + .long 1169236224 + .long 1070056160 + .long 2828355997 + .long 1020458120 + .long 3453997312 + .long 1070072833 + .long 164091641 + .long 1020388279 + .long 2708127744 + .long 1070089513 + .long 3036550223 + .long 1023328684 + .long 3540797696 + .long 1070106199 + .long 3710949463 + .long 1022568805 + .long 1972276736 + .long 1070122892 + .long 3885277950 + .long 1019761674 + .long 2613815552 + .long 1070139591 + .long 2764165077 + .long 1022921023 + .long 1487791616 + .long 1070156297 + .long 1330644769 + .long 1023162679 + .long 3207593472 + .long 1070173009 + .long 3911007221 + .long 1022993496 + .long 3797764608 + .long 1070189728 + .long 979712598 + .long 1022554580 + .long 3578920448 + .long 1070206454 + .long 2825738223 + .long 1020223708 + .long 2872795648 + .long 1070223187 + .long 392451124 + .long 1022666279 + .long 2002258432 + .long 1070239927 + .long 3730407632 + .long 1023148291 + .long 1291326464 + .long 1070256674 + .long 3723802980 + .long 1022514089 + .long 1065180928 + .long 1070273428 + .long 2635617463 + .long 1022654470 + .long 1650181632 + .long 1070290189 + .long 2061982883 + .long 1022853411 + .long 3373882880 + .long 1070306957 + .long 319732785 + .long 1022017175 + .long 2270081280 + .long 1070323733 + .long 2237757411 + .long 1023064087 + .long 2963732736 + .long 1070340516 + .long 468839165 + .long 1023293774 + .long 1491099904 + .long 1070357307 + .long 1502657946 + .long 1021533479 + .long 2479636480 + .long 1070374105 + .long 482913562 + .long 1021986286 + .long 1968133632 + .long 1070390911 + .long 3281474337 + .long 1022646400 + .long 291639040 + .long 1070407725 + .long 2453320259 + .long 1022812423 + .long 2081472512 + .long 1070424546 + .long 2939989570 + .long 1023091888 + .long 3380340480 + .long 1070441375 + .long 2850707499 + .long 1021921109 + .long 232287488 + .long 1070458213 + .long 3674625342 + .long 1020725130 + .long 1567614208 + .long 1070475058 + .long 9347334 + .long 1022024009 + .long 3433091072 + .long 1070491911 + .long 282524999 + .long 1021433523 + .long 1876877312 + .long 1070508773 + .long 3470449440 + .long 1019309721 + .long 1538472192 + .long 1070525643 + .long 2089486825 + .long 1019698916 + .long 2763830784 + .long 1070542521 + .long 443498115 + .long 1020505194 + .long 1605381632 + .long 1070559408 + .long 3018871601 + .long 1022869913 + .long 2706946048 + .long 1070576303 + .long 3936260892 + .long 1023175875 + .long 2123887360 + .long 1070593207 + .long 2994220655 + .long 1022825948 + .long 104015104 + .long 1070603108 + .long 335054493 + .long 1023441853 + .long 2904568832 + .long 1070615800 + .long 1451215633 + .long 1023853857 + .long 3456197120 + .long 1070632739 + .long 436334733 + .long 1024026432 + .long 252452352 + .long 1070649697 + .long 34596167 + .long 1024031396 + .long 3328018432 + .long 1070666672 + .long 2644547073 + .long 1024296758 + .long 1255829248 + .long 1070683667 + .long 552832586 + .long 1023763122 + .long 4097058560 + .long 1070700680 + .long 1955640623 + .long 1021394654 + .long 451770112 + .long 1070717714 + .long 3428903777 + .long 1022941142 + .long 408920832 + .long 1070734767 + .long 165503263 + .long 1023894958 + .long 1186960640 + .long 1070751840 + .long 435826450 + .long 1024026134 + .long 19078656 + .long 1070768934 + .long 1834169749 + .long 1022899284 + .long 2743490304 + .long 1070786048 + .long 494581074 + .long 1018818479 + .long 2328961024 + .long 1070803184 + .long 2987908834 + .long 1022581110 + .long 350011392 + .long 1070820342 + .long 240771184 + .long 1024143083 + .long 2692326912 + .long 1070837521 + .long 666056837 + .long 1022394776 + .long 2373274368 + .long 1070854723 + .long 2484337770 + .long 1024228156 + .long 1017131520 + .long 1070871948 + .long 3285648279 + .long 1024025789 + .long 265558272 + .long 1070889196 + .long 392241896 + .long 1024252809 + .long 1778008064 + .long 1070906467 + .long 1536107943 + .long 1023949300 + .long 2937184768 + .long 1070923762 + .long 3541062251 + .long 1019448646 + .long 1144442880 + .long 1070941082 + .long 3691683781 + .long 1022123948 + .long 2410165504 + .long 1070958426 + .long 1804181960 + .long 1023945221 + .long 4174350848 + .long 1070975795 + .long 2016094861 + .long 1021716585 + .long 3897012480 + .long 1070993190 + .long 175294410 + .long 1023703404 + .long 3353623040 + .long 1071010611 + .long 167973242 + .long 1023240839 + .long 45671168 + .long 1071028059 + .long 2166856113 + .long 1021565413 + .long 86063872 + .long 1071045533 + .long 2676254727 + .long 1023985299 + .long 1019772672 + .long 1071063034 + .long 989043593 + .long 1021549587 + .long 414297344 + .long 1071080563 + .long 3960972046 + .long 1024307251 + .long 155173120 + .long 1071098120 + .long 1830919291 + .long 1021592251 + .long 2151562240 + .long 1071115705 + .long 405408666 + .long 1023423128 + .long 4041854720 + .long 1071133319 + .long 2043497827 + .long 1024411503 + .long 3489224192 + .long 1071150963 + .long 3072215864 + .long 1022698635 + .long 2477196288 + .long 1071168637 + .long 1812195139 + .long 1022689192 + .long 3015298816 + .long 1071186341 + .long 764841969 + .long 1021027331 + .long 2844731136 + .long 1071204076 + .long 2878117321 + .long 1019116513 + .long 4028950528 + .long 1071221842 + .long 698911452 + .long 1023265602 + .long 69441536 + .long 1071239641 + .long 3253467847 + .long 1020795075 + .long 1676209920 + .long 1071257471 + .long 4272431167 + .long 1022873982 + .long 2408752384 + .long 1071275334 + .long 648519100 + .long 1024385717 + .long 151623680 + .long 1071293231 + .long 345257017 + .long 1019561408 + .long 1410154240 + .long 1071311161 + .long 197863993 + .long 1023224207 + .long 4131351552 + .long 1071329125 + .long 2620801789 + .long 1024411169 + .long 1999664384 + .long 1071347125 + .long 3952692616 + .long 1024168086 + .long 1617668864 + .long 1071365160 + .long 3019889809 + .long 1021907692 + .long 1032074240 + .long 1071383231 + .long 59469899 + .long 1023656194 + .long 2619492096 + .long 1071401338 + .long 1417526820 + .long 1021457783 + .long 202429440 + .long 1071419483 + .long 2927667935 + .long 1019175447 + .long 525044224 + .long 1071437665 + .long 38166811 + .long 1023981879 + .long 1779258880 + .long 1071455885 + .long 481252500 + .long 1023310234 + .long 2195673600 + .long 1071474144 + .long 3962395981 + .long 1021339088 + .long 44573696 + .long 1071492443 + .long 3936281395 + .long 1023014829 + .long 2226905344 + .long 1071510781 + .long 1515320476 + .long 1024320623 + .long 2800512512 + .long 1071529160 + .long 1225403697 + .long 1021081846 + .long 161113600 + .long 1071547581 + .long 3064809733 + .long 1024173917 + .long 1338410240 + .long 1071566043 + .long 2027604973 + .long 1024362526 + .long 522433280 + .long 1071584548 + .long 2055171723 + .long 1023858825 + .long 539595776 + .long 1071603096 + .long 3868820135 + .long 1022936424 + .long 4264017664 + .long 1071621687 + .long 3228065145 + .long 1023479578 + .long 1733924096 + .long 1071640324 + .long 3511934475 + .long 1022496355 + .long 108880384 + .long 1071651839 + .long 615880967 + .long 1023519706 + .long 3517856512 + .long 1071661202 + .long 3113108559 + .long 1025190289 + .long 4043153152 + .long 1071670589 + .long 1571836218 + .long 1023106116 + .long 3251299072 + .long 1071680000 + .long 3444076102 + .long 1022187841 + .long 2736921600 + .long 1071689435 + .long 272771483 + .long 1025095280 + .long 3897698560 + .long 1071703633 + .long 2075390188 + .long 1022489022 + .long 3209485056 + .long 1071722652 + .long 1438094065 + .long 1021844944 + .long 3781432064 + .long 1071741774 + .long 1675017145 + .long 1024143828 + .long 2684184064 + .long 1071761003 + .long 2259963753 + .long 1024731393 + .long 1840489728 + .long 1071780342 + .long 3372883597 + .long 1023431408 + .long 3764087808 + .long 1071799794 + .long 3307523102 + .long 1024485788 + .long 3006232320 + .long 1071819364 + .long 3088971966 + .long 1025213251 + .long 3374881280 + .long 1071839055 + .long 834437749 + .long 1025236452 + .long 797284864 + .long 1071858872 + .long 3122663941 + .long 1025320473 + .long 545765120 + .long 1071878818 + .long 826539625 + .long 1022450955 + .long 107562240 + .long 1071898898 + .long 339584600 + .long 1022481255 + .long 2123649024 + .long 1071919116 + .long 3912959833 + .long 1024321009 + .long 1562385664 + .long 1071939478 + .long 2846067230 + .long 1023343981 + .long 2963085824 + .long 1071959988 + .long 954548627 + .long 1021475211 + .long 3325550592 + .long 1071980652 + .long 3459651155 + .long 1025305573 + .long 775752448 + .long 1072001476 + .long 3582746667 + .long 1023859460 + .long 3238590720 + .long 1072022464 + .long 634636162 + .long 1024472353 + .long 2758801920 + .long 1072043624 + .long 3078216319 + .long 1025304516 + .long 1370319104 + .long 1072064962 + .long 2570569078 + .long 1025099442 + .long 2615805184 + .long 1072086484 + .long 3729933412 + .long 1024605112 + .long 3077336576 + .long 1072108198 + .long 1948916066 + .long 1024781603 + .long 1099528192 + .long 1072130112 + .long 3139143157 + .long 1023729360 + .long 1231903232 + .long 1072152233 + .long 1349513477 + .long 1024737515 + .long 1507504128 + .long 1072174570 + .long 3484516322 + .long 1024000959 + .long 2214659840 + .long 1072197132 + .long 2563820917 + .long 1025225535 + .long 1804739840 + .long 1072219929 + .long 760038746 + .long 1024482855 + .long 1413746688 + .long 1072242971 + .long 3401734714 + .long 1025129838 + .long 821409536 + .long 1072266269 + .long 3729772551 + .long 1025484796 + .long 3031825664 + .long 1072289834 + .long 122256749 + .long 1024752594 + .long 1710784256 + .long 1072313680 + .long 1518205483 + .long 1024724809 + .long 3025265152 + .long 1072337819 + .long 409951989 + .long 1022835555 + .long 287769088 + .long 1072362267 + .long 800355594 + .long 1022484850 + .long 198179840 + .long 1072387038 + .long 3502926213 + .long 1024209373 + .long 1909130496 + .long 1072412149 + .long 3064694319 + .long 1025380823 + .long 1941732096 + .long 1072437619 + .long 4112930390 + .long 1024294679 + .long 3492010496 + .long 1072463467 + .long 2684918107 + .long 1023220233 + .long 81959680 + .long 1072489716 + .long 220021366 + .long 1020635131 + .long 2297837056 + .long 1072516387 + .long 4027683826 + .long 1021041185 + .long 270404096 + .long 1072543508 + .long 2012766065 + .long 1021780753 + .long 3667376896 + .long 1072571105 + .long 2727981522 + .long 1023009874 + .long 330400256 + .long 1072599212 + .long 2940017003 + .long 1025393439 + .long 1119293952 + .long 1072627861 + .long 1608550416 + .long 1022675612 + .long 3536155904 + .long 1072657091 + .long 349665778 + .long 1025156751 + .long 3078046720 + .long 1072686946 + .long 2016159996 + .long 1022193169 + .long 455228416 + .long 1072705361 + .long 1908539328 + .long 1026126332 + .long 1871505664 + .long 1072720988 + .long 2784700894 + .long 1025922277 + .long 1630994432 + .long 1072737010 + .long 361107678 + .long 1022887244 + .long 2084558336 + .long 1072753462 + .type Tbl_addr,@object + .size Tbl_addr,3840 + .space 768, 0x00 # pad + .align 16 +SIGNMASK: + .long 0 + .long 2147483648 + .long 0 + .long 0 + .type SIGNMASK,@object + .size SIGNMASK,16 + .align 16 +HALFMASK2: + .long 0 + .long 2147483584 + .long 0 + .long 0 + .type HALFMASK2,@object + .size HALFMASK2,16 + .align 16 +PI_BY_2: + .long 856972295 + .long 1016178214 + .long 1413754136 + .long 1073291771 + .type PI_BY_2,@object + .size PI_BY_2,16 + .align 16 +cv2: + .long 780903145 + .long 1066854586 + .long 858993459 + .long 1068708659 + .long 3340530119 + .long 1067392113 + .long 1431655765 + .long 1069897045 + .long 1321528399 + .long 1066517740 + .long 3067833783 + .long 1067899757 + .long 2021159460 + .long 1065855096 + .long 2576980378 + .long 1066178969 + .type cv2,@object + .size cv2,64 + .align 16 +HALFMASK: + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .type HALFMASK,@object + .size HALFMASK,16 + .align 4 +ONEMASK: + .long 0 + .long 1072693248 + .type ONEMASK,@object + .size ONEMASK,8 + .align 4 +TMASK: + .long 0 + .long 4294950912 + .type TMASK,@object + .size TMASK,8 + .align 4 +cv: + .long 1431655765 + .long 1069897045 + .long 858993459 + .long 1068708659 + .long 3067833783 + .long 1067899757 + .type cv,@object + .size cv,24 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_asin.1-. + .4byte ..___tag_value_asin.5-..___tag_value_asin.1 + .2byte 0x0400 + .4byte ..___tag_value_asin.3-..___tag_value_asin.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_asin.4-..___tag_value_asin.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_atan2.S b/libm/x86_64/e_atan2.S new file mode 100644 index 000000000..f9baea975 --- /dev/null +++ b/libm/x86_64/e_atan2.S @@ -0,0 +1,1242 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// +//1. The method is based on the relationship of atan2(Y,X) to atan(|Y/X|) +// as follows. +// / sign(Y) atan(|Y/X|) if X > 0 +// atan2(Y,X) = +// \ sign(Y)*pi - sign(Y)*atan(|Y/X|) if X < 0 +// +// Thus, atan2(Y,X) is of the form atan2(Y,X) = PI + sgn*atan(|Y/X|) +// where PI and sgn can be determined by the four possible combinations of +// of the pair (sign(X),sign(Y)). We concentrate on the numerical method +// for atan(|Y/X|). +// +//2. For |Y/X| < 2^(-64), atan(|Y/X|) ~=~ |Y/X|. Hence, atan2(Y,X) is Y/X +// if X > 0, and sign(Y)*pi otherwise. +//3. For |Y/X| >= 2^(65), atan(|Y/X|) ~=~ pi/2. Hence atan2(Y,X) is sign(Y)pi/2. +//4. For 2^(-64) <= |Y/X| < 2^(-5), atan(|Y/X|) is approximated by a polynomial +// of the form Z + Z*E*polynomial(E), where Z = |Y/X| and E = Z*Z. +//5. For |Y/X| > 2^(5), atan(|Y/X|) = pi/2 + atan(-|X/Y|), and atan(-|X/Y|) is +// calculated using the polynomial in 4 above. +//6. For 2^(-5) <= |Y/X| <= 2^(5), we employ a table lookup method. First, +// we obtain B = 2^k * 1.b1 b2 b3 b4 = 2^k * (1+k/16) that approximate +// |Y/X| to approximately 5 significant bits. Hence, atan(|Y/X|) is +// +// atan(|Y/X|) = atan(B) + atan(Z), where Z = (|Y|-B|X|)/(|X|+B|Y|). +// ~=~ tau + Z + Z*E*polynomial(E), where E = Z*Z. +// +// B has the range from 2^(-6)*(1+14/16) to 2^5 = 2^(5)*(1+0/16), totally +// 163 possible values. These values are calculated beforehand and stored +// in a table. The polynomial is the one used in 4. +// +// Special cases: +// atan2(+-0, +0) = +-0 +// atan2(+-0, -0) = +-pi +// atan2(+-0, x) = +-0, for x > 0, and +-pi, for x < 0 +// atan2(y, +-0) = +pi/2 for y > 0, and -pi/2 for y < 0 +// atan2(+-y, +INF) = +-0, for finite y > 0 +// atan2(+-y, -INF) = +-pi, for finite y > 0 +// atan2(+-INF, x) = +-pi/2, for finite x +// atan2(+-INF, +INF) = +-pi/4 +// atan2(+-INF, -INF) = +-3*pi/4 +// +/******************************************************************************/ + +#include +# -- Begin atan2 +ENTRY(atan2) +# parameter 1: %xmm0 +# parameter 2: %xmm1 +..B1.1: +..___tag_value_atan2.1: + subq $24, %rsp +..___tag_value_atan2.3: + movsd %xmm0, (%rsp) + movsd %xmm1, 8(%rsp) +..B1.2: + pextrw $3, %xmm0, %eax + andl $32752, %eax + subl $14448, %eax + cmpl $3840, %eax + ja .L_2TAG_PACKET_0.0.2 + pextrw $3, %xmm1, %eax + andl $32752, %eax + subl $14448, %eax + cmpl $3840, %eax + ja .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + unpcklpd %xmm1, %xmm0 + xorpd %xmm5, %xmm5 + xorpd %xmm3, %xmm3 + movl $2048, %eax + pinsrw $3, %eax, %xmm5 + paddw %xmm1, %xmm5 + psrlq $29, %xmm5 + rcpss %xmm5, %xmm3 + xorpd %xmm4, %xmm4 + movl $14336, %ecx + pinsrw $3, %ecx, %xmm4 + psllq $29, %xmm3 + paddw %xmm4, %xmm3 + mulsd %xmm0, %xmm3 + xorpd %xmm2, %xmm2 + xorpd %xmm6, %xmm6 + xorpd %xmm7, %xmm7 + movl $32768, %eax + pinsrw $2, %eax, %xmm6 + movl $32767, %ecx + pinsrw $3, %ecx, %xmm7 + paddd %xmm6, %xmm3 + andpd %xmm7, %xmm3 + movq %xmm3, %xmm5 + pextrw $3, %xmm3, %eax + movl $16448, %ecx + pinsrw $3, %ecx, %xmm2 + minsd %xmm2, %xmm3 + movmskpd %xmm0, %edx + psllq $1, %xmm0 + psrlq $1, %xmm0 + cmpsd $2, %xmm2, %xmm5 + psllq $1, %xmm1 + psrlq $1, %xmm1 + movq %xmm1, %xmm6 + movq %xmm1, %xmm7 + movq %xmm0, %xmm2 + movl $0, %ecx + pinsrw $0, %ecx, %xmm6 + subsd %xmm6, %xmm7 + movq %xmm0, %xmm4 + mulsd %xmm3, %xmm6 + mulsd %xmm3, %xmm4 + mulsd %xmm3, %xmm7 + andpd %xmm5, %xmm0 + subsd %xmm6, %xmm0 + andpd %xmm5, %xmm1 + addsd %xmm1, %xmm4 + subsd %xmm7, %xmm0 + andl $32752, %eax + subl $16286, %eax + cmpl $1121, %eax + ja .L_2TAG_PACKET_3.0.2 + divsd %xmm4, %xmm0 + pextrw $3, %xmm3, %ecx + movsd a2(%rip), %xmm2 + movsd b2(%rip), %xmm3 + pextrw $0, %xmm5, %eax + addl %edx, %edx + lea P_TBL(%rip), %r8 + movapd (%r8,%rdx,8), %xmm6 + lea SGN_TBL(%rip), %r8 + movapd (%r8,%rdx,8), %xmm1 + subl $16286, %ecx + notl %eax + andl $1, %eax + addl %eax, %ecx + addl %ecx, %ecx + lea ATAN_TBL(%rip), %r8 + movapd (%r8,%rcx,8), %xmm5 + xorpd %xmm1, %xmm5 + addpd %xmm6, %xmm5 + movq %xmm5, %xmm6 + unpckhpd %xmm5, %xmm5 + xorpd %xmm0, %xmm1 + movq %xmm1, %xmm4 + mulsd %xmm0, %xmm0 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm3 + addsd %xmm6, %xmm1 + subsd %xmm1, %xmm6 + addsd %xmm4, %xmm6 + addsd 8+a2(%rip), %xmm2 + mulsd %xmm0, %xmm3 + mulsd %xmm4, %xmm0 + addsd %xmm5, %xmm6 + mulsd %xmm2, %xmm0 + addsd 8+b2(%rip), %xmm3 + mulsd %xmm3, %xmm0 + addsd %xmm6, %xmm0 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_3.0.2: + addl $942, %eax + cmpl $942, %eax + ja .L_2TAG_PACKET_4.0.2 + xorpd %xmm4, %xmm4 + movl $16368, %ecx + pinsrw $3, %ecx, %xmm4 + divsd %xmm1, %xmm4 + addl %edx, %edx + lea SGN_TBL(%rip), %r8 + movapd (%r8,%rdx,8), %xmm6 + unpcklpd %xmm3, %xmm3 + xorpd %xmm6, %xmm0 + xorpd %xmm6, %xmm2 + xorpd %xmm6, %xmm3 + lea P_TBL2(%rip), %r8 + movapd (%r8,%rdx,8), %xmm7 + movsd a2(%rip), %xmm1 + movsd b2(%rip), %xmm5 + lea SELECT_B(%rip), %r8 + andpd (%r8,%rdx,8), %xmm3 + mulsd %xmm4, %xmm2 + mulsd %xmm4, %xmm0 + movq %xmm2, %xmm6 + mulsd %xmm2, %xmm2 + mulsd %xmm2, %xmm1 + addsd %xmm2, %xmm5 + mulsd %xmm2, %xmm6 + addsd 8+a2(%rip), %xmm1 + mulsd %xmm2, %xmm5 + addsd %xmm0, %xmm7 + addpd %xmm3, %xmm7 + mulsd %xmm6, %xmm1 + addsd 8+b2(%rip), %xmm5 + mulsd %xmm1, %xmm5 + addsd %xmm7, %xmm5 + pshufd $238, %xmm7, %xmm0 + addsd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + movsd 8(%rsp), %xmm1 + movsd (%rsp), %xmm0 + pextrw $3, %xmm1, %eax + andl $32752, %eax + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl %eax, %ecx + jg .L_2TAG_PACKET_5.0.2 + pextrw $3, %xmm1, %ecx + cmpl $32767, %ecx + jg .L_2TAG_PACKET_6.0.2 + divsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + andpd SGNMASK(%rip), %xmm0 + movsd pi_table(%rip), %xmm2 + xorpd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_5.0.2: + andpd SGNMASK(%rip), %xmm0 + movsd pi2_table(%rip), %xmm2 + xorpd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: +.L_2TAG_PACKET_1.0.2: + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $32752, %ecx + je .L_2TAG_PACKET_7.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_8.0.2 + movsd POW55(%rip), %xmm3 + movl $1024, %edx + movsd INVEXPMASK(%rip), %xmm4 + xorpd %xmm6, %xmm6 + movsd EXPMASK(%rip), %xmm7 + cmpl $0, %ecx + je .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_10.0.2: + cmpl $0, %eax + je .L_2TAG_PACKET_11.0.2 +.L_2TAG_PACKET_12.0.2: + addl %ecx, %edx + subl %eax, %edx + cmpl $2048, %edx + ja .L_2TAG_PACKET_4.0.2 + addl $15344, %edx + pinsrw $3, %edx, %xmm6 + andpd %xmm4, %xmm0 + andpd %xmm4, %xmm1 + orpd %xmm6, %xmm0 + orpd %xmm7, %xmm1 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_9.0.2: + subl $880, %edx + mulsd %xmm3, %xmm0 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $0, %ecx + je .L_2TAG_PACKET_13.0.2 + jmp .L_2TAG_PACKET_10.0.2 +.L_2TAG_PACKET_11.0.2: + addl $880, %edx + mulsd %xmm3, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_14.0.2 + jmp .L_2TAG_PACKET_12.0.2 +.L_2TAG_PACKET_7.0.2: + movd %xmm0, %edx + movq %xmm0, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + andl $1048575, %ecx + orl %edx, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_15.0.2 + psrlq $63, %xmm0 + psllq $63, %xmm0 + cmpl $32752, %eax + jae .L_2TAG_PACKET_16.0.2 + movapd pi2_table(%rip), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_15.0.2: + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_16.0.2: + movd %xmm1, %eax + movq %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + movl $-2147483648, %edx + andl %ecx, %edx + andl $1048575, %ecx + orl %eax, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_17.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_18.0.2 + movapd pi4_table(%rip), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_17.0.2: + movq %xmm1, %xmm0 + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_18.0.2: + movapd pi4_table(%rip), %xmm5 + movapd pi2_table(%rip), %xmm6 + addpd %xmm6, %xmm5 + pshufd $238, %xmm5, %xmm6 + addpd %xmm6, %xmm5 + orpd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_8.0.2: + movd %xmm1, %eax + movq %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + movl $-2147483648, %edx + andl %ecx, %edx + andl $1048575, %ecx + orl %eax, %ecx + cmpl $0, %ecx + jne .L_2TAG_PACKET_17.0.2 + psrlq $63, %xmm0 + psllq $63, %xmm0 + cmpl $0, %edx + jne .L_2TAG_PACKET_19.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_19.0.2: + movapd pi_table(%rip), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_13.0.2: + pextrw $3, %xmm1, %edx + andl $32768, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_20.0.2 + movapd pi_table(%rip), %xmm5 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + comisd %xmm0, %xmm1 + orpd %xmm5, %xmm0 + je .L_2TAG_PACKET_21.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_20.0.2: + comisd %xmm0, %xmm1 + je .L_2TAG_PACKET_21.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_14.0.2: + movapd pi2_table(%rip), %xmm5 + psrlq $63, %xmm0 + psllq $63, %xmm0 + pshufd $238, %xmm5, %xmm4 + addsd %xmm4, %xmm5 + orpd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_21.0.2: + movq %xmm0, 16(%rsp) +..B1.3: + movq 16(%rsp), %xmm0 +.L_2TAG_PACKET_22.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_atan2.4: + ret +..___tag_value_atan2.5: +END(atan2) +# -- End atan2 + .section .rodata, "a" + .align 16 + .align 16 +a2: + .long 2006262985 + .long 1069310863 + .long 2358449471 + .long 3217342131 + .type a2,@object + .size a2,16 + .align 16 +b2: + .long 3845454352 + .long 1069952297 + .long 2829679149 + .long 1073771565 + .type b2,@object + .size b2,16 + .align 16 +P_TBL: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 3221823995 + .long 856972295 + .long 3164710438 + .type P_TBL,@object + .size P_TBL,64 + .align 16 +SGN_TBL: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .long 0 + .long 0 + .long 0 + .long 0 + .type SGN_TBL,@object + .size SGN_TBL,64 + .align 16 +ATAN_TBL: + .long 3390881280 + .long 1067318733 + .long 1411116779 + .long 1018950063 + .long 2985987840 + .long 1067384211 + .long 2088903695 + .long 1018086027 + .long 3148445184 + .long 1067449685 + .long 2044163806 + .long 1017271335 + .long 3667629184 + .long 1067515494 + .long 2353092775 + .long 1019967309 + .long 1546568832 + .long 1067580954 + .long 611991315 + .long 1017602584 + .long 3815996800 + .long 1067646404 + .long 466038598 + .long 1019686426 + .long 4050241920 + .long 1067711845 + .long 3265026328 + .long 1019626952 + .long 120454912 + .long 1067777277 + .long 1542207696 + .long 1020155608 + .long 2784639744 + .long 1067842697 + .long 3883834623 + .long 1018602870 + .long 1328010624 + .long 1067908107 + .long 1791097456 + .long 1019053126 + .long 2217794048 + .long 1067973505 + .long 551619938 + .long 1018494194 + .long 3333520000 + .long 1068038891 + .long 2390331823 + .long 1019033022 + .long 2557052032 + .long 1068104265 + .long 2423976108 + .long 1019728674 + .long 2067649536 + .long 1068169626 + .long 3757397745 + .long 1018672362 + .long 4047094784 + .long 1068234973 + .long 481613184 + .long 1019275104 + .long 2089853184 + .long 1068300307 + .long 1733914374 + .long 1020124677 + .long 2678003840 + .long 1068365626 + .long 1373600282 + .long 1013935474 + .long 3706496128 + .long 1068430930 + .long 1000610902 + .long 1019673285 + .long 3073179008 + .long 1068496219 + .long 1497143008 + .long 1019900342 + .long 2803716736 + .long 1068562846 + .long 1476677416 + .long 1019444094 + .long 3204984128 + .long 1068628077 + .long 1192335905 + .long 1018748628 + .long 831146624 + .long 1068693273 + .long 2733586224 + .long 1018823295 + .long 243029376 + .long 1068758431 + .long 950106081 + .long 1019046675 + .long 1735561920 + .long 1068823549 + .long 3546440856 + .long 1020104712 + .long 1339217792 + .long 1068888626 + .long 3028812387 + .long 1019818321 + .long 3706342144 + .long 1068953659 + .long 3814564029 + .long 1017763871 + .long 637726976 + .long 1069018648 + .long 3584007699 + .long 1017976868 + .long 1148779264 + .long 1069083589 + .long 2282532133 + .long 1019483954 + .long 1406131392 + .long 1069148481 + .long 1547359113 + .long 1019786342 + .long 1908875904 + .long 1069213322 + .long 1315508410 + .long 1020009473 + .long 3194947520 + .long 1069278110 + .long 3845393201 + .long 1015803761 + .long 1547487744 + .long 1069342844 + .long 3863107865 + .long 1019810104 + .long 1881061952 + .long 1069407521 + .long 4288343548 + .long 1019687581 + .long 563086336 + .long 1069472140 + .long 2582230241 + .long 1020099350 + .long 2594975552 + .long 1069536698 + .long 2306443764 + .long 1019667244 + .long 3438545024 + .long 1069606573 + .long 957455549 + .long 1015587735 + .long 4211357472 + .long 1069670906 + .long 2611778754 + .long 1017877214 + .long 3002835424 + .long 1069735101 + .long 235580458 + .long 1020211685 + .long 3905315424 + .long 1069799150 + .long 3630647617 + .long 1018736849 + .long 2849656576 + .long 1069863047 + .long 2412165062 + .long 1019693004 + .long 507429472 + .long 1069926785 + .long 1397750723 + .long 1018412717 + .long 2307470272 + .long 1069990356 + .long 1796470904 + .long 1019796181 + .long 1271814912 + .long 1070053755 + .long 189761565 + .long 1016149115 + .long 3800538144 + .long 1070116974 + .long 2524871582 + .long 1018263353 + .long 3916203552 + .long 1070180008 + .long 127848658 + .long 1017672664 + .long 457192032 + .long 1070242851 + .long 4020400938 + .long 1019823010 + .long 1385324704 + .long 1070305495 + .long 564511179 + .long 1016079094 + .long 2322869856 + .long 1070367935 + .long 2347103319 + .long 1018927760 + .long 3743438624 + .long 1070430165 + .long 877973862 + .long 1019638162 + .long 2392255552 + .long 1070492180 + .long 2432782267 + .long 1018872629 + .long 4180443328 + .long 1070553973 + .long 3102990015 + .long 1020093101 + .long 2547540832 + .long 1070636485 + .long 3877738253 + .long 1017300424 + .long 2735468912 + .long 1070697461 + .long 2446470256 + .long 1019235378 + .long 542633792 + .long 1070757943 + .long 583606328 + .long 1018624131 + .long 923265984 + .long 1070817911 + .long 1793926708 + .long 1019714161 + .long 918728448 + .long 1070877348 + .long 3726463586 + .long 1019433296 + .long 2572275008 + .long 1070936237 + .long 1845354238 + .long 1019459238 + .long 50974688 + .long 1070994564 + .long 983808064 + .long 1016685418 + .long 1105518320 + .long 1071052313 + .long 2357496692 + .long 1015139882 + .long 1264825328 + .long 1071109472 + .long 2244129354 + .long 1019046344 + .long 961157920 + .long 1071166029 + .long 3124185339 + .long 1018541776 + .long 1162701584 + .long 1071221973 + .long 1279780948 + .long 1019268918 + .long 3284935664 + .long 1071277294 + .long 2670033472 + .long 1019833744 + .long 497441888 + .long 1071331985 + .long 1032737410 + .long 1019795212 + .long 3377383904 + .long 1071386036 + .long 2356897182 + .long 1020205553 + .long 1126962000 + .long 1071439443 + .long 3723724586 + .long 1015212418 + .long 90291008 + .long 1071492199 + .long 4178672431 + .long 1020186971 + .long 190059536 + .long 1071595741 + .long 1763589807 + .long 1019162163 + .long 2497392840 + .long 1071670654 + .long 3036997041 + .long 1020204325 + .long 2616971944 + .long 1071719773 + .long 300151069 + .long 1017041957 + .long 2883518128 + .long 1071767563 + .long 2203981414 + .long 1019190108 + .long 1496354352 + .long 1071814030 + .long 332287966 + .long 1016846435 + .long 483276728 + .long 1071859184 + .long 653845024 + .long 1018830914 + .long 3097401072 + .long 1071903039 + .long 1514746408 + .long 1019278972 + .long 2737217248 + .long 1071945615 + .long 1358845067 + .long 1017268275 + .long 2072577560 + .long 1071986933 + .long 3041024735 + .long 1019929672 + .long 2266405656 + .long 1072027017 + .long 1271261130 + .long 1012925070 + .long 958652544 + .long 1072065894 + .long 2158017058 + .long 1019955372 + .long 3312993840 + .long 1072103591 + .long 765809169 + .long 1019114443 + .long 3177001304 + .long 1072140139 + .long 144180084 + .long 1019822186 + .long 3071642184 + .long 1072175568 + .long 4004602424 + .long 1019420740 + .long 4283953648 + .long 1072209909 + .long 1511950430 + .long 1020176966 + .long 1413754136 + .long 1072243195 + .long 856972295 + .long 1015129638 + .long 4073202944 + .long 1072306725 + .long 4068194804 + .long 1019714860 + .long 946117760 + .long 1072366415 + .long 694980733 + .long 1020150135 + .long 3980632032 + .long 1072422512 + .long 1313251280 + .long 1019948709 + .long 1468297112 + .long 1072475260 + .long 330111143 + .long 1019809198 + .long 3478063816 + .long 1072524887 + .long 2930067044 + .long 1017784081 + .long 1153979856 + .long 1072571613 + .long 2225786102 + .long 1017634481 + .long 2089828808 + .long 1072615641 + .long 474621367 + .long 1017043414 + .long 3531732632 + .long 1072657163 + .long 2276396220 + .long 1018757240 + .long 775214612 + .long 1072694803 + .long 3209744818 + .long 1019963015 + .long 662307284 + .long 1072713319 + .long 1381696763 + .long 1019763781 + .long 1192776652 + .long 1072730830 + .long 3017932994 + .long 1015179769 + .long 744202396 + .long 1072747407 + .long 2073854034 + .long 1019512292 + .long 8337908 + .long 1072763115 + .long 16004448 + .long 1019599514 + .long 3589868768 + .long 1072778013 + .long 1374369804 + .long 1018019237 + .long 121647320 + .long 1072792159 + .long 128481634 + .long 1018115438 + .long 2464923204 + .long 1072805601 + .long 1787331214 + .long 1016798022 + .long 4093304372 + .long 1072830562 + .long 3306868969 + .long 1019384078 + .long 1436891684 + .long 1072853231 + .long 676347266 + .long 1017302183 + .long 1104571840 + .long 1072873890 + .long 2870400285 + .long 1019938149 + .long 2037009832 + .long 1072892781 + .long 2956702105 + .long 1016472908 + .long 3139037960 + .long 1072910111 + .long 916057147 + .long 1018364335 + .long 1826698064 + .long 1072926058 + .long 2171961098 + .long 1019669816 + .long 1353941060 + .long 1072940774 + .long 1722928782 + .long 1019926215 + .long 1803191644 + .long 1072954391 + .long 1547878639 + .long 1020259262 + .long 1092591296 + .long 1072967024 + .long 3070107923 + .long 1018320401 + .long 2205372832 + .long 1072978772 + .long 787328196 + .long 1014621351 + .long 1291577100 + .long 1072989723 + .long 2964757301 + .long 1020242528 + .long 4234512804 + .long 1072999952 + .long 3136030038 + .long 1017522144 + .long 3248069132 + .long 1073009528 + .long 1506192355 + .long 1018050472 + .long 3932628500 + .long 1073018509 + .long 1045823554 + .long 1019946655 + .long 4195697848 + .long 1073026948 + .long 233443322 + .long 1018917447 + .long 2501811452 + .long 1073034892 + .long 901427976 + .long 1017333852 + .long 866379428 + .long 1073049455 + .long 2437443742 + .long 1019678792 + .long 1376865888 + .long 1073062480 + .long 3365790232 + .long 1014547152 + .long 3290094268 + .long 1073074195 + .long 3898947415 + .long 1018683566 + .long 354764884 + .long 1073084787 + .long 3854322404 + .long 1019662058 + .long 3332975496 + .long 1073094406 + .long 3171701655 + .long 1017830922 + .long 1141460088 + .long 1073103181 + .long 3946082701 + .long 1020032019 + .long 745761284 + .long 1073111216 + .long 1347210591 + .long 1019106121 + .long 1673304508 + .long 1073118600 + .long 1760606642 + .long 1017324577 + .long 983388240 + .long 1073125409 + .long 3740651204 + .long 1019514104 + .long 3895509100 + .long 1073131706 + .long 2409629983 + .long 1020069322 + .long 2128523668 + .long 1073137548 + .long 3045605368 + .long 1018579174 + .long 2075485692 + .long 1073142981 + .long 3720571789 + .long 1017557436 + .long 121855976 + .long 1073148047 + .long 2391744767 + .long 1020160645 + .long 4181733780 + .long 1073152780 + .long 995028816 + .long 1019681295 + .long 2887813280 + .long 1073157214 + .long 218733247 + .long 1020003509 + .long 2862180896 + .long 1073161375 + .long 2043806490 + .long 1018602288 + .long 3909375184 + .long 1073168973 + .long 1559903412 + .long 1020103444 + .long 3533966292 + .long 1073175738 + .long 734884149 + .long 1018462962 + .long 3815044608 + .long 1073181799 + .long 3630523428 + .long 1017250093 + .long 739639376 + .long 1073187261 + .long 4167476661 + .long 1020008277 + .long 1068309648 + .long 1073192207 + .long 2110061437 + .long 1019295858 + .long 2350566352 + .long 1073196707 + .long 582596516 + .long 1018568821 + .long 2529520024 + .long 1073200819 + .long 745552787 + .long 1019053165 + .long 1841667508 + .long 1073204591 + .long 3982568700 + .long 1016503327 + .long 2242261080 + .long 1073208063 + .long 3433582258 + .long 1016196763 + .long 715134328 + .long 1073211270 + .long 355901358 + .long 1020087916 + .long 2700735876 + .long 1073214240 + .long 3640957736 + .long 1019780205 + .long 141607580 + .long 1073217000 + .long 2488245051 + .long 1020262395 + .long 287934404 + .long 1073219570 + .long 2392691085 + .long 1019883292 + .long 2363373988 + .long 1073221969 + .long 4194561737 + .long 1019237447 + .long 3829340424 + .long 1073224214 + .long 429455526 + .long 1019490975 + .long 1988805928 + .long 1073226320 + .long 3029848706 + .long 1018104889 + .long 1647572320 + .long 1073230161 + .long 10289938 + .long 1017394880 + .long 3988000624 + .long 1073233576 + .long 1957559169 + .long 1019434816 + .long 4263843944 + .long 1073236633 + .long 204710264 + .long 1019908761 + .long 663197724 + .long 1073239386 + .long 1921757578 + .long 1019778948 + .long 3560800700 + .long 1073241876 + .long 3994348896 + .long 1019230192 + .long 2441785656 + .long 1073244141 + .long 871468611 + .long 1014800505 + .long 3277400272 + .long 1073246209 + .long 4092218139 + .long 1020040842 + .long 3951990120 + .long 1073248105 + .long 4276546478 + .long 1019763677 + .long 2737338540 + .long 1073249850 + .long 252776012 + .long 1018794951 + .long 1511361316 + .long 1073251461 + .long 3119653999 + .long 1018514803 + .long 3969162516 + .long 1073252952 + .long 1037069016 + .long 1016792900 + .long 413985240 + .long 1073254338 + .long 4110171432 + .long 1020001345 + .long 3681283576 + .long 1073255627 + .long 1463092818 + .long 1020260354 + .long 3146455488 + .long 1073256831 + .long 1031209123 + .long 1016554799 + .long 95214512 + .long 1073257958 + .long 1373808632 + .long 1019493031 + .long 4250240828 + .long 1073259013 + .long 3891047882 + .long 1020108730 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .type ATAN_TBL,@object + .size ATAN_TBL,2624 + .align 16 +P_TBL2: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 856972295 + .long 1017226790 + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 3164710438 + .long 1413754136 + .long 3221823995 + .type P_TBL2,@object + .size P_TBL2,64 + .align 16 +SELECT_B: + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .long 4294967295 + .long 4294967295 + .long 0 + .long 0 + .type SELECT_B,@object + .size SELECT_B,64 + .align 16 +SGNMASK: + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .type SGNMASK,@object + .size SGNMASK,16 + .align 16 +pi_table: + .long 1413754136 + .long 1074340347 + .long 856972295 + .long 1017226790 + .type pi_table,@object + .size pi_table,16 + .align 16 +pi2_table: + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .type pi2_table,@object + .size pi2_table,16 + .align 16 +pi4_table: + .long 1413754136 + .long 1072243195 + .long 856972295 + .long 1015129638 + .type pi4_table,@object + .size pi4_table,16 + .align 4 +POW55: + .long 0 + .long 1130364928 + .type POW55,@object + .size POW55,8 + .align 4 +INVEXPMASK: + .long 4294967295 + .long 2148532223 + .type INVEXPMASK,@object + .size INVEXPMASK,8 + .align 4 +EXPMASK: + .long 0 + .long 1072693248 + .type EXPMASK,@object + .size EXPMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_atan2.1-. + .4byte ..___tag_value_atan2.5-..___tag_value_atan2.1 + .2byte 0x0400 + .4byte ..___tag_value_atan2.3-..___tag_value_atan2.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_atan2.4-..___tag_value_atan2.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_cosh.S b/libm/x86_64/e_cosh.S new file mode 100644 index 000000000..8cdbca6c0 --- /dev/null +++ b/libm/x86_64/e_cosh.S @@ -0,0 +1,1372 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// cosh(x)=(exp(x)+exp(-x))/2 +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^7=int(xH*L2EH*2^7), +// f=0.b1 b2 ... b7, k integer +// 2^f is approximated as Tp[f]+Dp[f], and 2^{-f} as Tn[f]+Dn[f] +// Tp stores higher 53 bits, Dp stores (2^f-Tp[f]) rounded to double precision +// +// e^|x|=2^{k+f}*2^r, r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-8}+2^{-14}, +// for |x| in [1/8,3*2^8) +// e^{-|x|}=2^{-k-f}*2^{-r} +// +// e^|x| is approximated as 2^k*Tp+2^k*Tp*c1*r(1+c2*r+..+c5*r^4)+2^k*Dp= +// =2^k*Tp+2^k*Tp*P15+2^k*Dp +// e^{-|x|} approximated as 2^{-k}*Tn-2^{-k}*Tn*c1*r(1-c2*r+..+c5*r^4) +// +// For |x| in [1/8, 3*2^7), cosh(x) is formed as +// RN(2^k*Tp+2^{-k}*Tn)+2^k*Tp*P15+2^{-k}*Tn*P`15+2^{-k}*TnL+2^{-k}*Dn+2^k*Dp +// +// For |x| in [3*2^7, 3*2^8), (e^|x|)/2 is returned, and +// the result is checked for overflow. +// +// For |x|<1/8, a Taylor polynomial expansion is used (degree 10) +// (error bound for polynomial expansion is below 0.501 ulp) +// +// Special cases: +// cosh(NaN) = quiet NaN, and raise invalid exception +// cosh(INF) = that INF +// cosh(0)=1 +// for finite argument, only cosh(0)=1 is exact +// For IEEE double +// cosh(x) overflows +// for x > 710.47586007394386342639336362481117248535156250 = MAXLOG+log(2) +// +/******************************************************************************/ + +#include + +# -- Begin cosh +ENTRY(cosh) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_cosh.1: + pushq %rsi +..___tag_value_cosh.3: +..B1.2: + movsd HALFMASK(%rip), %xmm3 + xorpd %xmm4, %xmm4 + movsd L2E(%rip), %xmm1 + movsd 8+L2E(%rip), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd Shifter(%rip), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + andl $32767, %ecx + subl $16320, %ecx + cmpl $200, %ecx + jae .L_2TAG_PACKET_0.0.2 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + movq %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + xorpd %xmm5, %xmm5 + subsd %xmm6, %xmm3 + movapd cv(%rip), %xmm4 + addsd %xmm1, %xmm2 + movapd 16+cv(%rip), %xmm6 + subsd %xmm3, %xmm7 + movl $32704, %edx + pinsrw $3, %edx, %xmm5 + movapd 32+cv(%rip), %xmm1 + addsd %xmm7, %xmm2 + movl $127, %edx + andl %eax, %edx + addl %edx, %edx + shrl $3, %eax + andl $65520, %eax + addl $16352, %eax + xorpd %xmm0, %xmm0 + cmpl $184, %ecx + jae .L_2TAG_PACKET_1.0.2 + pshufd $68, %xmm5, %xmm5 + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + psubw %xmm0, %xmm5 + lea T2f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm0 + lea T2_neg_f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm5 + pshufd $68, %xmm2, %xmm3 + movapd 48+cv(%rip), %xmm7 + pshufd $68, %xmm2, %xmm2 + mulpd %xmm3, %xmm3 + mulpd %xmm2, %xmm4 + mulpd %xmm2, %xmm6 + mulpd 64+cv(%rip), %xmm2 + mulpd %xmm3, %xmm1 + mulpd %xmm3, %xmm7 + mulpd %xmm3, %xmm4 + mulpd %xmm3, %xmm1 + addpd %xmm7, %xmm6 + movq %xmm0, %xmm7 + addpd %xmm1, %xmm4 + shufpd $0, %xmm5, %xmm7 + addpd %xmm5, %xmm0 + mulpd %xmm7, %xmm2 + addpd %xmm6, %xmm4 + subsd %xmm0, %xmm7 + mulpd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm5, %xmm7 + addpd %xmm2, %xmm4 + addsd %xmm6, %xmm7 + pshufd $238, %xmm4, %xmm2 + addsd %xmm7, %xmm2 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + addl $16320, %ecx + cmpl $16320, %ecx + ja .L_2TAG_PACKET_2.0.2 + cmpl $15952, %ecx + jae .L_2TAG_PACKET_3.0.2 + addsd %xmm2, %xmm6 + movq ONEMASK(%rip), %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_1.0.2: + subl $16352, %eax + movl %eax, %ecx + andl $32752, %eax + shrl $1, %eax + andl $65520, %eax + subl %eax, %ecx + addl $16352, %eax + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + lea T2f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm0 + pshufd $68, %xmm2, %xmm3 + movsd 48+cv(%rip), %xmm7 + mulsd %xmm3, %xmm3 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm6 + mulsd 64+cv(%rip), %xmm2 + mulsd %xmm3, %xmm1 + mulsd %xmm3, %xmm7 + mulsd %xmm3, %xmm4 + addl $16368, %ecx + pinsrw $3, %ecx, %xmm5 + mulsd %xmm3, %xmm1 + addsd %xmm7, %xmm6 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + addsd %xmm6, %xmm4 + mulsd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm6, %xmm4 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm5, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + cmpl $32752, %eax + je .L_2TAG_PACKET_4.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_3.0.2: + movapd pv(%rip), %xmm1 + mulpd %xmm5, %xmm5 + movapd 16+pv(%rip), %xmm2 + xorpd %xmm3, %xmm3 + movq %xmm5, %xmm0 + mulpd %xmm5, %xmm1 + movsd ONEMASK(%rip), %xmm6 + mulpd %xmm5, %xmm5 + movl $16352, %eax + pinsrw $3, %eax, %xmm3 + addpd %xmm2, %xmm1 + mulpd %xmm5, %xmm1 + pshufd $238, %xmm1, %xmm2 + mulsd %xmm1, %xmm5 + mulsd %xmm3, %xmm0 + addsd %xmm5, %xmm2 + addsd %xmm2, %xmm0 + addsd %xmm6, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_5.0.2 + xorpd %xmm0, %xmm0 + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + mulsd %xmm0, %xmm0 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + mulsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + movq %xmm0, (%rsp) +..B1.3: + movq (%rsp), %xmm0 +.L_2TAG_PACKET_6.0.2: +..B1.5: + popq %rcx +..___tag_value_cosh.4: + ret +..___tag_value_cosh.5: +END(cosh) +# -- End cosh + .section .rodata, "a" + .align 16 + .align 16 +L2E: + .long 1610612736 + .long 1080497479 + .long 4166901572 + .long 1053077003 + .type L2E,@object + .size L2E,16 + .align 16 +Shifter: + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .type Shifter,@object + .size Shifter,16 + .align 16 +cv: + .long 3607404736 + .long 1044146952 + .long 3607404736 + .long 3191630600 + .long 4277811695 + .long 1063661122 + .long 4277811695 + .long 3211144770 + .long 2140175755 + .long 1033864261 + .long 2140175755 + .long 1033864261 + .long 4289495988 + .long 1054113747 + .long 4289495988 + .long 1054113747 + .long 4277811695 + .long 1064709698 + .long 4277811695 + .long 3212193346 + .type cv,@object + .size cv,80 + .align 16 +T2f: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 3706687593 + .long 1073526560 + .long 3521726940 + .long 1014301643 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .type T2f,@object + .size T2f,2048 + .align 16 +T2_neg_f: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .type T2_neg_f,@object + .size T2_neg_f,2048 + .align 16 +pv: + .long 3078135644 + .long 1049787983 + .long 381774870 + .long 1062650220 + .long 436314137 + .long 1056571808 + .long 1431655765 + .long 1067799893 + .type pv,@object + .size pv,32 + .align 4 +HALFMASK: + .long 4160749568 + .long 2147483647 + .type HALFMASK,@object + .size HALFMASK,8 + .align 4 +ONEMASK: + .long 0 + .long 1072693248 + .type ONEMASK,@object + .size ONEMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_cosh.1-. + .4byte ..___tag_value_cosh.5-..___tag_value_cosh.1 + .2byte 0x0400 + .4byte ..___tag_value_cosh.3-..___tag_value_cosh.1 + .2byte 0x100e + .byte 0x04 + .4byte ..___tag_value_cosh.4-..___tag_value_cosh.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_exp.S b/libm/x86_64/e_exp.S new file mode 100644 index 000000000..6882dfc9c --- /dev/null +++ b/libm/x86_64/e_exp.S @@ -0,0 +1,636 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Description: +// Let K = 64 (table size). +// x x/log(2) n +// e = 2 = 2 * T[j] * (1 + P(y)) +// where +// x = m*log(2)/K + y, y in [-log(2)/K..log(2)/K] +// m = n*K + j, m,n,j - signed integer, j in [-K/2..K/2] +// j/K +// values of 2 are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]). +// +// P(y) is a minimax polynomial approximation of exp(x)-1 +// on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V). +// +// To avoid problems with arithmetic overflow and underflow, +// n n1 n2 +// value of 2 is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2] +// where BIAS is a value of exponent bias. +// +// Special cases: +// exp(NaN) = NaN +// exp(+INF) = +INF +// exp(-INF) = 0 +// exp(x) = 1 for subnormals +// for finite argument, only exp(0)=1 is exact +// For IEEE double +// if x > 709.782712893383973096 then exp(x) overflow +// if x < -745.133219101941108420 then exp(x) underflow +// +/******************************************************************************/ + +#include +# -- Begin exp +ENTRY(exp) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_exp.1: + subq $24, %rsp +..___tag_value_exp.3: + movsd %xmm0, 8(%rsp) +..B1.2: + unpcklpd %xmm0, %xmm0 + movapd cv(%rip), %xmm1 + movapd Shifter(%rip), %xmm6 + movapd 16+cv(%rip), %xmm2 + movapd 32+cv(%rip), %xmm3 + pextrw $3, %xmm0, %eax + andl $32767, %eax + movl $16527, %edx + subl %eax, %edx + subl $15504, %eax + orl %eax, %edx + cmpl $-2147483648, %edx + jae .L_2TAG_PACKET_0.0.2 + mulpd %xmm0, %xmm1 + addpd %xmm6, %xmm1 + movapd %xmm1, %xmm7 + subpd %xmm6, %xmm1 + mulpd %xmm1, %xmm2 + movapd 64+cv(%rip), %xmm4 + mulpd %xmm1, %xmm3 + movapd 80+cv(%rip), %xmm5 + subpd %xmm2, %xmm0 + movd %xmm7, %eax + movl %eax, %ecx + andl $63, %ecx + shll $4, %ecx + sarl $6, %eax + movl %eax, %edx + movdqa mmask(%rip), %xmm6 + pand %xmm6, %xmm7 + movdqa bias(%rip), %xmm6 + paddq %xmm6, %xmm7 + psllq $46, %xmm7 + subpd %xmm3, %xmm0 + lea Tbl_addr(%rip), %r8 + movapd (%rcx,%r8), %xmm2 + mulpd %xmm0, %xmm4 + movapd %xmm0, %xmm6 + movapd %xmm0, %xmm1 + mulpd %xmm6, %xmm6 + mulpd %xmm6, %xmm0 + addpd %xmm4, %xmm5 + mulsd %xmm6, %xmm0 + mulpd 48+cv(%rip), %xmm6 + addsd %xmm2, %xmm1 + unpckhpd %xmm2, %xmm2 + mulpd %xmm5, %xmm0 + addsd %xmm0, %xmm1 + orpd %xmm7, %xmm2 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + addsd %xmm6, %xmm0 + addl $894, %edx + cmpl $1916, %edx + ja .L_2TAG_PACKET_1.0.2 + mulsd %xmm2, %xmm0 + addsd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_1.0.2: + xorpd %xmm3, %xmm3 + movapd ALLONES(%rip), %xmm4 + movl $-1022, %edx + subl %eax, %edx + movd %edx, %xmm5 + psllq %xmm5, %xmm4 + movl %eax, %ecx + sarl $1, %eax + pinsrw $3, %eax, %xmm3 + movapd ebias(%rip), %xmm6 + psllq $4, %xmm3 + psubd %xmm3, %xmm2 + mulsd %xmm2, %xmm0 + cmpl $52, %edx + jg .L_2TAG_PACKET_2.0.2 + andpd %xmm2, %xmm4 + paddd %xmm6, %xmm3 + subsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + cmpl $1023, %ecx + jge .L_2TAG_PACKET_3.0.2 + pextrw $3, %xmm0, %ecx + andl $32768, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_4.0.2 + movapd %xmm0, %xmm6 + addsd %xmm4, %xmm0 + mulsd %xmm3, %xmm0 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $0, %ecx + je .L_2TAG_PACKET_5.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_5.0.2: + mulsd %xmm3, %xmm6 + mulsd %xmm3, %xmm4 + movq %xmm6, %xmm0 + pxor %xmm4, %xmm6 + psrad $31, %xmm6 + pshufd $85, %xmm6, %xmm6 + psllq $1, %xmm0 + psrlq $1, %xmm0 + pxor %xmm6, %xmm0 + psrlq $63, %xmm6 + paddq %xmm6, %xmm0 + paddq %xmm4, %xmm0 + movl $15, (%rsp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_4.0.2: + addsd %xmm4, %xmm0 + mulsd %xmm3, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_3.0.2: + addsd %xmm4, %xmm0 + mulsd %xmm3, %xmm0 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $32752, %ecx + jnb .L_2TAG_PACKET_7.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + paddd %xmm6, %xmm3 + addpd %xmm2, %xmm0 + mulsd %xmm3, %xmm0 + movl $15, (%rsp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_8.0.2: + cmpl $2146435072, %eax + jae .L_2TAG_PACKET_9.0.2 + movl 12(%rsp), %eax + cmpl $-2147483648, %eax + jae .L_2TAG_PACKET_10.0.2 + movsd XMAX(%rip), %xmm0 + mulsd %xmm0, %xmm0 +.L_2TAG_PACKET_7.0.2: + movl $14, (%rsp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_10.0.2: + movsd XMIN(%rip), %xmm0 + mulsd %xmm0, %xmm0 + movl $15, (%rsp) + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_9.0.2: + movl 8(%rsp), %edx + cmpl $2146435072, %eax + ja .L_2TAG_PACKET_11.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_11.0.2 + movl 12(%rsp), %eax + cmpl $2146435072, %eax + jne .L_2TAG_PACKET_12.0.2 + movsd INF(%rip), %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_12.0.2: + movsd ZERO(%rip), %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_11.0.2: + movsd 8(%rsp), %xmm0 + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + movl 12(%rsp), %eax + andl $2147483647, %eax + cmpl $1083179008, %eax + jae .L_2TAG_PACKET_8.0.2 + movsd 8(%rsp), %xmm0 + addsd ONE_val(%rip), %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + movq %xmm0, 16(%rsp) +..B1.3: + movq 16(%rsp), %xmm0 +.L_2TAG_PACKET_13.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_exp.4: + ret +..___tag_value_exp.5: +END(exp) +# -- End exp + .section .rodata, "a" + .align 16 + .align 16 +cv: + .long 1697350398 + .long 1079448903 + .long 1697350398 + .long 1079448903 + .long 4277796864 + .long 1065758274 + .long 4277796864 + .long 1065758274 + .long 3164486458 + .long 1025308570 + .long 3164486458 + .long 1025308570 + .long 4294967294 + .long 1071644671 + .long 4294967294 + .long 1071644671 + .long 3811088480 + .long 1062650204 + .long 1432067621 + .long 1067799893 + .long 3230715663 + .long 1065423125 + .long 1431604129 + .long 1069897045 + .type cv,@object + .size cv,96 + .align 16 +Shifter: + .long 0 + .long 1127743488 + .long 0 + .long 1127743488 + .type Shifter,@object + .size Shifter,16 + .align 16 +mmask: + .long 4294967232 + .long 0 + .long 4294967232 + .long 0 + .type mmask,@object + .size mmask,16 + .align 16 +bias: + .long 65472 + .long 0 + .long 65472 + .long 0 + .type bias,@object + .size bias,16 + .align 16 +Tbl_addr: + .long 0 + .long 0 + .long 0 + .long 0 + .long 235107661 + .long 1018002367 + .long 1048019040 + .long 11418 + .long 896005651 + .long 1015861842 + .long 3541402996 + .long 22960 + .long 1642514529 + .long 1012987726 + .long 410360776 + .long 34629 + .long 1568897900 + .long 1016568486 + .long 1828292879 + .long 46424 + .long 1882168529 + .long 1010744893 + .long 852742562 + .long 58348 + .long 509852888 + .long 1017336174 + .long 3490863952 + .long 70401 + .long 653277307 + .long 1017431380 + .long 2930322911 + .long 82586 + .long 1649557430 + .long 1017729363 + .long 1014845818 + .long 94904 + .long 1058231231 + .long 1015777676 + .long 3949972341 + .long 107355 + .long 1044000607 + .long 1016786167 + .long 828946858 + .long 119943 + .long 1151779725 + .long 1015705409 + .long 2288159958 + .long 132667 + .long 3819481236 + .long 1016499965 + .long 1853186616 + .long 145530 + .long 2552227826 + .long 1015039787 + .long 1709341917 + .long 158533 + .long 1829350193 + .long 1015216097 + .long 4112506593 + .long 171677 + .long 1913391795 + .long 1015756674 + .long 2799960843 + .long 184965 + .long 1303423926 + .long 1015238005 + .long 171030293 + .long 198398 + .long 1574172746 + .long 1016061241 + .long 2992903935 + .long 211976 + .long 3424156969 + .long 1017196428 + .long 926591434 + .long 225703 + .long 1938513547 + .long 1017631273 + .long 887463926 + .long 239579 + .long 2804567149 + .long 1015390024 + .long 1276261410 + .long 253606 + .long 631083525 + .long 1017690182 + .long 569847337 + .long 267786 + .long 1623370770 + .long 1011049453 + .long 1617004845 + .long 282120 + .long 3667985273 + .long 1013894369 + .long 3049340112 + .long 296610 + .long 3145379760 + .long 1014403278 + .long 3577096743 + .long 311258 + .long 2603100681 + .long 1017152460 + .long 1990012070 + .long 326066 + .long 3249202951 + .long 1017448880 + .long 1453150081 + .long 341035 + .long 419288974 + .long 1016280325 + .long 917841882 + .long 356167 + .long 3793507337 + .long 1016095713 + .long 3712504873 + .long 371463 + .long 728023093 + .long 1016345318 + .long 363667784 + .long 386927 + .long 2582678538 + .long 1017123460 + .long 2956612996 + .long 402558 + .long 7592966 + .long 1016721543 + .long 2186617380 + .long 418360 + .long 228611441 + .long 1016696141 + .long 1719614412 + .long 434334 + .long 2261665670 + .long 1017457593 + .long 1013258798 + .long 450482 + .long 544148907 + .long 1017323666 + .long 3907805043 + .long 466805 + .long 2383914918 + .long 1017143586 + .long 1447192520 + .long 483307 + .long 1176412038 + .long 1017267372 + .long 1944781190 + .long 499988 + .long 2882956373 + .long 1013312481 + .long 919555682 + .long 516851 + .long 3154077648 + .long 1016528543 + .long 2571947538 + .long 533897 + .long 348651999 + .long 1016405780 + .long 2604962540 + .long 551129 + .long 3253791412 + .long 1015920431 + .long 1110089947 + .long 568549 + .long 1509121860 + .long 1014756995 + .long 2568320822 + .long 586158 + .long 2617649212 + .long 1017340090 + .long 2966275556 + .long 603959 + .long 553214634 + .long 1016457425 + .long 2682146383 + .long 621954 + .long 730975783 + .long 1014083580 + .long 2191782032 + .long 640145 + .long 1486499517 + .long 1016818996 + .long 2069751140 + .long 658534 + .long 2595788928 + .long 1016407932 + .long 2990417244 + .long 677123 + .long 1853053619 + .long 1015310724 + .long 1434058175 + .long 695915 + .long 2462790535 + .long 1015814775 + .long 2572866477 + .long 714911 + .long 3693944214 + .long 1017259110 + .long 3092190714 + .long 734114 + .long 2979333550 + .long 1017188654 + .long 4076559942 + .long 753526 + .long 174054861 + .long 1014300631 + .long 2420883922 + .long 773150 + .long 816778419 + .long 1014197934 + .long 3716502172 + .long 792987 + .long 3507050924 + .long 1015341199 + .long 777507147 + .long 813041 + .long 1821514088 + .long 1013410604 + .long 3706687593 + .long 833312 + .long 920623539 + .long 1016295433 + .long 1242007931 + .long 853805 + .long 2789017511 + .long 1014276997 + .long 3707479175 + .long 874520 + .long 3586233004 + .long 1015962192 + .long 64696965 + .long 895462 + .long 474650514 + .long 1016642419 + .long 863738718 + .long 916631 + .long 1614448851 + .long 1014281732 + .long 3884662774 + .long 938030 + .long 2450082086 + .long 1016164135 + .long 2728693977 + .long 959663 + .long 1101668360 + .long 1015989180 + .long 3999357479 + .long 981531 + .long 835814894 + .long 1015702697 + .long 1533953344 + .long 1003638 + .long 1301400989 + .long 1014466875 + .long 2174652632 + .long 1025985 + .type Tbl_addr,@object + .size Tbl_addr,1024 + .align 16 +ALLONES: + .long 4294967295 + .long 4294967295 + .long 4294967295 + .long 4294967295 + .type ALLONES,@object + .size ALLONES,16 + .align 16 +ebias: + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .type ebias,@object + .size ebias,16 + .align 4 +XMAX: + .long 4294967295 + .long 2146435071 + .type XMAX,@object + .size XMAX,8 + .align 4 +XMIN: + .long 0 + .long 1048576 + .type XMIN,@object + .size XMIN,8 + .align 4 +INF: + .long 0 + .long 2146435072 + .type INF,@object + .size INF,8 + .align 4 +ZERO: + .long 0 + .long 0 + .type ZERO,@object + .size ZERO,8 + .align 4 +ONE_val: + .long 0 + .long 1072693248 + .type ONE_val,@object + .size ONE_val,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_exp.1-. + .4byte ..___tag_value_exp.5-..___tag_value_exp.1 + .2byte 0x0400 + .4byte ..___tag_value_exp.3-..___tag_value_exp.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_exp.4-..___tag_value_exp.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_hypot.S b/libm/x86_64/e_hypot.S new file mode 100644 index 000000000..089b2b47c --- /dev/null +++ b/libm/x86_64/e_hypot.S @@ -0,0 +1,210 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// X87 version: +// Use 80-bit FPU precision fmul, fsqrt to compute square and sqrt. +// +// SSE version: +// Swap x, y if |x|<|y| +// For x=2^k*x, get y=y*2^(-k) +// Get S ~ sqrt(x^2+y^2) (leading 1 + leading 25 mantissa bits) +// +// Get D = ( RN(x^2+y^2) - S^2 ) + ( x^2 - RN(x^2) ) + +// + ( y^2 - ((RN(x^2+y^2)-RN(x^2)) ) +// +// Result is 2^k*(S + Se), where Se = S*e +// S*e is approximated as (D/2S)*( 1 - (D/2S)^2*1.0/S ) +// +// Return 2^k*(S+Se) +// +// For |y/x|<2^(-64), return x +// +// For cases where maximum biased exponent is either greater than 7fdh or +// below 32, take a special path to check for special cases (0, NaN, Inf), +// possible overflow, and more accurate computation for denormal results +// +// Special cases: +// hypot(x,y), hypot(y,x), and hypot(x,-y) are equivalent +// hypot(x,+-0) is equivalent to fabs(x) +// hypot(x,y) = y if (x==NaN or x==INF) and y==INF +// hypot(x,y) = x if (x==NaN or x==INF) and y!=INF (even if y==NaN!) +// hypot(x,y) = y if (x!=NaN and x!=INF) and (y==NaN or y==INF) +// +/******************************************************************************/ + +#include +# -- Begin hypot +ENTRY(hypot) +# parameter 1: %xmm0 +# parameter 2: %xmm1 +..B1.1: +..___tag_value_hypot.1: +..___tag_value_hypot.3: +..B1.2: + subq $64, %rsp + movapd static_const_table(%rip), %xmm3 + movsd %xmm0, 48(%rsp) + movsd %xmm1, 56(%rsp) + andpd %xmm3, %xmm0 + andpd %xmm3, %xmm1 + pextrw $3, %xmm0, %eax + pextrw $3, %xmm1, %edx + cmpl $24528, %eax + ja .L_2TAG_PACKET_0.0.1 + cmpl $24528, %edx + ja .L_2TAG_PACKET_0.0.1 +.L_2TAG_PACKET_1.0.1: + fldl 48(%rsp) + fldl 56(%rsp) + fxch %st(1) + fmul %st(0), %st + fxch %st(1) + nop + fmul %st(0), %st + faddp %st, %st(1) + fsqrt + jmp .L_2TAG_PACKET_2.0.1 +.L_2TAG_PACKET_0.0.1: + cmpl $32752, %eax + movl %eax, %ecx + jae .L_2TAG_PACKET_3.0.1 + subl %edx, %ecx + cmpl $32752, %edx + jae .L_2TAG_PACKET_3.0.1 + addl $928, %ecx + addl %edx, %eax + cmpl $1856, %ecx + ja .L_2TAG_PACKET_4.0.1 + cmpl $49056, %eax + jb .L_2TAG_PACKET_1.0.1 + fldl 48(%rsp) + fldl 56(%rsp) + fxch %st(1) + fmul %st(0), %st + fxch %st(1) + nop + fmul %st(0), %st + faddp %st, %st(1) + fsqrt +.L_2TAG_PACKET_5.0.1: + fstl (%rsp) + fstpt 16(%rsp) + xorl %eax, %eax + movw 24(%rsp), %ax + cmpl $17407, %eax + jae .L_2TAG_PACKET_6.0.1 + fldl (%rsp) + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_4.0.1: + movsd %xmm0, 32(%rsp) + movsd %xmm1, 40(%rsp) + fldl 32(%rsp) + faddl 40(%rsp) + jmp .L_2TAG_PACKET_5.0.1 +.L_2TAG_PACKET_6.0.1: + fldl (%rsp) + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_3.0.1: + shufpd $0, %xmm1, %xmm0 + movdqa %xmm0, %xmm2 + movdqa 16+static_const_table(%rip), %xmm3 + movsd %xmm0, 32(%rsp) + movsd %xmm1, 40(%rsp) + cmppd $3, %xmm0, %xmm2 + cmppd $0, %xmm0, %xmm3 + movmskpd %xmm2, %edx + movmskpd %xmm3, %rax + testl %edx, %edx + je .L_2TAG_PACKET_8.0.1 + fldl 32(%rsp) + fmull 40(%rsp) + testq $1, %rax + jne .L_2TAG_PACKET_9.0.1 + testq $2, %rax + jne .L_2TAG_PACKET_10.0.1 + jmp .L_2TAG_PACKET_2.0.1 +.L_2TAG_PACKET_8.0.1: + fldl 32(%rsp) + faddl 40(%rsp) + jmp .L_2TAG_PACKET_2.0.1 +.L_2TAG_PACKET_9.0.1: + fstpl 40(%rsp) + fldl 32(%rsp) + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_10.0.1: + fstpl 32(%rsp) + fldl 40(%rsp) + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_2.0.1: +.L_2TAG_PACKET_7.0.1: + fstpl 16(%rsp) + movq 16(%rsp), %xmm0 + addq $64, %rsp + ret +..B1.3: +..___tag_value_hypot.4: +END(hypot) +# -- End hypot + .section .rodata, "a" + .align 16 + .align 16 +static_const_table: + .long 4294967295 + .long 2147483647 + .long 4294967295 + .long 2147483647 + .long 0 + .long 2146435072 + .long 0 + .long 2146435072 + .type static_const_table,@object + .size static_const_table,32 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x00000014 + .4byte 0x0000001c + .4byte ..___tag_value_hypot.1-. + .4byte ..___tag_value_hypot.4-..___tag_value_hypot.1 + .2byte 0x0400 + .4byte ..___tag_value_hypot.3-..___tag_value_hypot.1 + .2byte 0x100e +# End diff --git a/libm/x86_64/e_log.S b/libm/x86_64/e_log.S new file mode 100644 index 000000000..40cb5e243 --- /dev/null +++ b/libm/x86_64/e_log.S @@ -0,0 +1,779 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpss instruction (B0) +// B = int((B0*2^7+0.5))/2^7 +// +// Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts) +// +// Result: k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6) and +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log(NaN) = quiet NaN, and raise invalid exception +// log(+INF) = that INF +// log(0) = -INF with divide-by-zero exception raised +// log(1) = +0 +// log(x) = NaN with invalid exception raised if x < -0, including -INF +// +/******************************************************************************/ + +#include +# -- Begin log +ENTRY(log) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_log.1: + subq $24, %rsp +..___tag_value_log.3: + movsd %xmm0, (%rsp) +..B1.2: + movq $0x3ff0000000000000, %rax + movd %rax, %xmm2 + movq $0x77f0000000000000, %rdx + movd %rdx, %xmm3 + movl $32768, %ecx + movd %rcx, %xmm4 + movq $0xffffe00000000000, %r8 + movd %r8, %xmm5 + movq %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $16352, %ecx + psrlq $27, %xmm0 + lea L_tbl(%rip), %r11 + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + paddd %xmm4, %xmm0 + orpd %xmm3, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm1, %xmm5 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm1 + mulpd %xmm0, %xmm5 + andl $32752, %eax + subl %ecx, %eax + cvtsi2sd %eax, %xmm7 + mulsd %xmm0, %xmm1 + movq log2(%rip), %xmm6 + movapd coeff(%rip), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd (%r11,%rdx), %xmm0 + movapd 16+coeff(%rip), %xmm4 + addsd %xmm5, %xmm1 + movapd 32+coeff(%rip), %xmm2 + mulsd %xmm7, %xmm6 + movddup %xmm1, %xmm5 + mulsd 8+log2(%rip), %xmm7 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm4 + mulpd %xmm5, %xmm5 + movddup %xmm0, %xmm6 + addsd %xmm1, %xmm0 + addpd %xmm2, %xmm4 + mulpd %xmm5, %xmm3 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm4 + pshufd $238, %xmm0, %xmm2 + addsd %xmm6, %xmm1 + mulsd %xmm5, %xmm5 + addsd %xmm2, %xmm7 + addpd %xmm3, %xmm4 + addsd %xmm7, %xmm1 + mulpd %xmm5, %xmm4 + addsd %xmm4, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + movq (%rsp), %xmm0 + movq (%rsp), %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_2.0.2 + cmpl $16, %eax + jb .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_4.0.2: + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_5.0.2: + ja .L_2TAG_PACKET_4.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_4.0.2 + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_3.0.2: + xorpd %xmm1, %xmm1 + addsd %xmm0, %xmm1 + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_7.0.2 + xorpd %xmm1, %xmm1 + movl $18416, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + movq %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + psrlq $27, %xmm0 + movl $18416, %ecx + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_5.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + movl $3, 16(%rsp) + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $2, 16(%rsp) +.L_2TAG_PACKET_8.0.2: + movq %xmm0, 8(%rsp) +..B1.3: + movq 8(%rsp), %xmm0 +.L_2TAG_PACKET_9.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_log.4: + ret +..___tag_value_log.5: +END(log) +# -- End log + .section .rodata, "a" + .align 16 + .align 16 +L_tbl: + .long 4277811200 + .long 1072049730 + .long 2479318832 + .long 1026487127 + .long 2854492160 + .long 1072033410 + .long 215631550 + .long 1025638968 + .long 1547061248 + .long 1072017216 + .long 2886781435 + .long 1026423395 + .long 649825280 + .long 1072001146 + .long 4281533405 + .long 1024038923 + .long 646346752 + .long 1071985198 + .long 1562735921 + .long 1023790276 + .long 2203734016 + .long 1071969370 + .long 1838397691 + .long 3173936209 + .long 1872169984 + .long 1071953661 + .long 3981202460 + .long 1022325013 + .long 669557760 + .long 1071938069 + .long 4182597802 + .long 3173174122 + .long 4076413952 + .long 1071922591 + .long 1209029111 + .long 3170736207 + .long 556125184 + .long 1071907228 + .long 821086028 + .long 3173437049 + .long 204914688 + .long 1071891976 + .long 2097025986 + .long 3171071798 + .long 387545088 + .long 1071876834 + .long 3142936996 + .long 3173092218 + .long 2912783360 + .long 1071861800 + .long 2502420140 + .long 1024505919 + .long 1144260608 + .long 1071846874 + .long 3315658140 + .long 3173469843 + .long 1471209472 + .long 1071832053 + .long 129621009 + .long 3172443877 + .long 1829683200 + .long 1071817336 + .long 3885467693 + .long 1025535275 + .long 288676864 + .long 1071802722 + .long 86139472 + .long 3171639793 + .long 3636378624 + .long 1071788208 + .long 1850238587 + .long 1024654342 + .long 1606817792 + .long 1071773795 + .long 3388899795 + .long 3173675586 + .long 1236164608 + .long 1071759480 + .long 3983599207 + .long 1020046558 + .long 1089616896 + .long 1071745262 + .long 4171974224 + .long 1024773198 + .long 4143093760 + .long 1071731139 + .long 2727587401 + .long 3173965207 + .long 600267776 + .long 1071717112 + .long 3147685042 + .long 3173353031 + .long 2249313280 + .long 1071703177 + .long 125835074 + .long 1025255832 + .long 3805303808 + .long 1071689334 + .long 2289991207 + .long 1025460331 + .long 87278592 + .long 1071675583 + .long 1106114045 + .long 1025933602 + .long 3195405312 + .long 1071661920 + .long 3885316576 + .long 3171206239 + .long 3853649920 + .long 1071648346 + .long 2977069852 + .long 3171236771 + .long 2944026624 + .long 1071625048 + .long 1008093493 + .long 1023444474 + .long 3993180160 + .long 1071598247 + .long 1862355595 + .long 1024642533 + .long 1454641152 + .long 1071571617 + .long 1514603089 + .long 1026500596 + .long 3286085632 + .long 1071545154 + .long 1400028424 + .long 3173279056 + .long 438773760 + .long 1071518858 + .long 120727864 + .long 3172148914 + .long 1212979200 + .long 1071492725 + .long 1625055594 + .long 3172901933 + .long 1189017600 + .long 1071466754 + .long 3920062376 + .long 1025727407 + .long 403064832 + .long 1071440943 + .long 1053271728 + .long 3171391427 + .long 3343210496 + .long 1071415289 + .long 3243395502 + .long 3173627613 + .long 1765777408 + .long 1071389792 + .long 2145968512 + .long 1026354304 + .long 461430784 + .long 1071364449 + .long 4094322285 + .long 1026021467 + .long 71706624 + .long 1071339258 + .long 763632021 + .long 1024496933 + .long 1380503552 + .long 1071314217 + .long 1383547992 + .long 3173088453 + .long 1015732224 + .long 1071289325 + .long 3198646877 + .long 1025390322 + .long 35977216 + .long 1071264580 + .long 2141026805 + .long 1025754693 + .long 3927306240 + .long 1071239979 + .long 282116272 + .long 3173394334 + .long 1125341184 + .long 1071215523 + .long 2768427504 + .long 3172279059 + .long 1666971648 + .long 1071191208 + .long 786837629 + .long 3172427445 + .long 2827694080 + .long 1071167033 + .long 3857122416 + .long 3173014241 + .long 2003683328 + .long 1071142997 + .long 859010954 + .long 1026545007 + .long 1004017664 + .long 1071119098 + .long 3356644970 + .long 3173458064 + .long 1753020416 + .long 1071095334 + .long 788338552 + .long 1026157693 + .long 1992718336 + .long 1071071704 + .long 1239179443 + .long 1026394889 + .long 3870234624 + .long 1071048206 + .long 2082614663 + .long 1024926053 + .long 1050437632 + .long 1071024840 + .long 660007840 + .long 1025548499 + .long 188395520 + .long 1071001603 + .long 3878792704 + .long 3173889571 + .long 3747176448 + .long 1070978493 + .long 144991708 + .long 3171552042 + .long 1405669376 + .long 1070955511 + .long 3999088879 + .long 1025486317 + .long 121151488 + .long 1070932654 + .long 2170865497 + .long 1026473584 + .long 2652319744 + .long 1070909920 + .long 453695652 + .long 3173916809 + .long 3262236672 + .long 1070887309 + .long 157800053 + .long 3173984206 + .long 601221120 + .long 1070864820 + .long 3968917661 + .long 1023992886 + .long 1999843328 + .long 1070842450 + .long 3053895004 + .long 1024998228 + .long 1992167424 + .long 1070820199 + .long 2968614856 + .long 1024552653 + .long 3788726272 + .long 1070798065 + .long 3542170808 + .long 3173573242 + .long 2094829568 + .long 1070776048 + .long 1246758132 + .long 1026202874 + .long 288675840 + .long 1070754146 + .long 3747328950 + .long 1026331585 + .long 1829681152 + .long 1070732357 + .long 3125197546 + .long 1024100318 + .long 1666869248 + .long 1070710681 + .long 1363656119 + .long 1026336493 + .long 3417110528 + .long 1070689116 + .long 4154791553 + .long 1026267853 + .long 2183653376 + .long 1070667662 + .long 1671819292 + .long 3173785870 + .long 1734434816 + .long 1070646317 + .long 373091049 + .long 1025972363 + .long 1615681536 + .long 1070625080 + .long 384650897 + .long 1022926043 + .long 1445382144 + .long 1070603950 + .long 344320330 + .long 3172397196 + .long 1823715328 + .long 1070569756 + .long 3389841200 + .long 1025231852 + .long 3839688704 + .long 1070527917 + .long 1706790417 + .long 3167363349 + .long 4293332992 + .long 1070486286 + .long 1614935088 + .long 1019351591 + .long 2966720512 + .long 1070444861 + .long 4145393717 + .long 3173711658 + .long 4066729984 + .long 1070403639 + .long 1974925028 + .long 3171437182 + .long 3337621504 + .long 1070362619 + .long 3314953170 + .long 3169971314 + .long 943448064 + .long 1070321799 + .long 1498682038 + .long 3173862340 + .long 1465634816 + .long 1070281176 + .long 1319952810 + .long 3171693965 + .long 1015734272 + .long 1070240749 + .long 1347821929 + .long 3173544515 + .long 118001664 + .long 1070200516 + .long 1751482746 + .long 1026134093 + .long 3707174912 + .long 1070160474 + .long 1486946159 + .long 1023930920 + .long 3946381312 + .long 1070120623 + .long 2867408081 + .long 3171368276 + .long 1699848192 + .long 1070080961 + .long 2590187139 + .long 1025379803 + .long 2235846656 + .long 1070041485 + .long 1888568069 + .long 3172754960 + .long 2339729408 + .long 1070002194 + .long 3852214753 + .long 3173323149 + .long 3196850176 + .long 1069963086 + .long 742141560 + .long 1025101707 + .long 1800683520 + .long 1069924160 + .long 3949500444 + .long 3172102179 + .long 3835801600 + .long 1069885413 + .long 3848895943 + .long 1025913832 + .long 2201202688 + .long 1069846845 + .long 1425913464 + .long 1025868665 + .long 2778279936 + .long 1069808453 + .long 2120889677 + .long 3173831128 + .long 2954203136 + .long 1069770236 + .long 592147081 + .long 1019621288 + .long 210141184 + .long 1069732193 + .long 3414275233 + .long 1023647084 + .long 709476352 + .long 1069694321 + .long 2413027164 + .long 1024462115 + .long 2116284416 + .long 1069656619 + .long 1144559924 + .long 1026336654 + .long 2183651328 + .long 1069619086 + .long 3459057650 + .long 1025634168 + .long 3047047168 + .long 1069581720 + .long 1879674924 + .long 3173508573 + .long 970711040 + .long 1069541521 + .long 1335954173 + .long 3173332182 + .long 2198478848 + .long 1069467449 + .long 2951103968 + .long 3173892200 + .long 1669611520 + .long 1069393703 + .long 531044147 + .long 1025149248 + .long 29114368 + .long 1069320280 + .long 3327831251 + .long 1025918673 + .long 2376949760 + .long 1069247176 + .long 737634533 + .long 3172176000 + .long 1085390848 + .long 1069174390 + .long 3108243400 + .long 3171828406 + .long 1566130176 + .long 1069101918 + .long 985483226 + .long 1025708380 + .long 792780800 + .long 1069029758 + .long 4184866295 + .long 1024426204 + .long 183156736 + .long 1068957907 + .long 2845699378 + .long 1022107277 + .long 1301782528 + .long 1068886362 + .long 1012735262 + .long 3173804294 + .long 1562411008 + .long 1068815121 + .long 2197086703 + .long 3170187813 + .long 2815549440 + .long 1068744181 + .long 2782613207 + .long 1026345054 + .long 2756124672 + .long 1068673540 + .long 2929486205 + .long 3173037800 + .long 3511050240 + .long 1068603195 + .long 1443733147 + .long 3173331549 + .long 3047047168 + .long 1068533144 + .long 1879674924 + .long 3172459997 + .long 3221667840 + .long 1068427825 + .long 1338588027 + .long 3171815742 + .long 3453861888 + .long 1068288883 + .long 1205348359 + .long 3172624626 + .long 3506110464 + .long 1068150514 + .long 893105198 + .long 1025571866 + .long 346013696 + .long 1068012714 + .long 3495569021 + .long 3172563349 + .long 4074029056 + .long 1067875476 + .long 3961106338 + .long 3171065595 + .long 3559784448 + .long 1067738798 + .long 1975385384 + .long 3173783155 + .long 797769728 + .long 1067602675 + .long 3760305787 + .long 1026047642 + .long 2313633792 + .long 1067467101 + .long 1559353171 + .long 1023480256 + .long 3960766464 + .long 1067213778 + .long 1067365107 + .long 1025865926 + .long 684261376 + .long 1066944805 + .long 844762164 + .long 3173687482 + .long 630718464 + .long 1066676905 + .long 2458269694 + .long 1024033081 + .long 1486061568 + .long 1066410070 + .long 115537874 + .long 3173243995 + .long 2743664640 + .long 1065886792 + .long 3665098304 + .long 3173471607 + .long 1971912704 + .long 1065357333 + .long 2577214440 + .long 3171993451 + .long 1498939392 + .long 1064306693 + .long 3409036923 + .long 1025599151 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .type L_tbl,@object + .size L_tbl,2064 + .align 16 +log2: + .long 4277811200 + .long 1067855426 + .long 2479318832 + .long 1022292823 + .type log2,@object + .size log2,16 + .align 16 +coeff: + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1030730101 + .long 3217380702 + .long 1431655765 + .long 1070945621 + .long 2576980378 + .long 1070176665 + .long 0 + .long 3219128320 + .type coeff,@object + .size coeff,48 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_log.1-. + .4byte ..___tag_value_log.5-..___tag_value_log.1 + .2byte 0x0400 + .4byte ..___tag_value_log.3-..___tag_value_log.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_log.4-..___tag_value_log.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_log10.S b/libm/x86_64/e_log10.S new file mode 100644 index 000000000..4f43a36e5 --- /dev/null +++ b/libm/x86_64/e_log10.S @@ -0,0 +1,807 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpss instruction (B0) +// B = int((B0*LH*2^7+0.5))/2^7 +// LH is a short approximation for log10(e) +// +// Reduced argument: r=B*mx-LH (computed accurately in high and low parts) +// +// Result: k*log10(2) - log(B) + p(r) +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log10(0) = -INF with divide-by-zero exception raised +// log10(1) = +0 +// log10(x) = NaN with invalid exception raised if x < -0, including -INF +// log10(+INF) = +INF +// +/******************************************************************************/ + +#include +# -- Begin log10 +ENTRY(log10) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_log10.1: + subq $24, %rsp +..___tag_value_log10.3: + movsd %xmm0, (%rsp) +..B1.2: + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movl $1054736384, %ecx + movd %ecx, %xmm7 + xorpd %xmm3, %xmm3 + movl $30704, %edx + pinsrw $3, %edx, %xmm3 + movq %xmm0, %xmm1 + movl $32768, %edx + movd %edx, %xmm4 + movapd HIGHSIGMASK(%rip), %xmm5 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $16352, %ecx + psrlq $27, %xmm0 + movq LOG10_E(%rip), %xmm2 + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $78, %xmm5, %xmm6 + psrlq $12, %xmm1 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 +.L_2TAG_PACKET_1.0.2: + mulss %xmm7, %xmm0 + orpd %xmm3, %xmm1 + lea L_tbl(%rip), %r11 + andpd %xmm1, %xmm5 + paddd %xmm4, %xmm0 + subsd %xmm5, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm6, %xmm0 + andl $32752, %eax + subl %ecx, %eax + cvtsi2sd %eax, %xmm7 + mulpd %xmm0, %xmm5 + mulsd %xmm0, %xmm1 + movq log2(%rip), %xmm6 + movapd coeff(%rip), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd -1504(%r11,%rdx), %xmm0 + movapd 16+coeff(%rip), %xmm4 + addsd %xmm5, %xmm1 + movapd 32+coeff(%rip), %xmm2 + mulsd %xmm7, %xmm6 + pshufd $68, %xmm1, %xmm5 + mulsd 8+log2(%rip), %xmm7 + mulsd %xmm1, %xmm3 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm4 + movq 8+LOG10_E(%rip), %xmm6 + mulpd %xmm5, %xmm5 + addpd %xmm2, %xmm4 + mulpd %xmm5, %xmm3 + pshufd $228, %xmm0, %xmm2 + addsd %xmm1, %xmm0 + mulsd %xmm1, %xmm4 + subsd %xmm0, %xmm2 + mulsd %xmm1, %xmm6 + addsd %xmm2, %xmm1 + pshufd $238, %xmm0, %xmm2 + mulsd %xmm5, %xmm5 + addsd %xmm2, %xmm7 + addsd %xmm6, %xmm1 + addpd %xmm3, %xmm4 + addsd %xmm7, %xmm1 + mulpd %xmm5, %xmm4 + addsd %xmm4, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + movq (%rsp), %xmm0 + movq (%rsp), %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_2.0.2 + cmpl $16, %eax + jb .L_2TAG_PACKET_3.0.2 +.L_2TAG_PACKET_4.0.2: + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_5.0.2: + ja .L_2TAG_PACKET_4.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_4.0.2 + jmp .L_2TAG_PACKET_6.0.2 +.L_2TAG_PACKET_3.0.2: + xorpd %xmm1, %xmm1 + addsd %xmm0, %xmm1 + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_7.0.2 + xorpd %xmm1, %xmm1 + movl $18416, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movq %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psrlq $27, %xmm0 + movq LOG10_E(%rip), %xmm2 + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $78, %xmm5, %xmm6 + psrlq $12, %xmm1 + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_2.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_5.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + movl $9, 16(%rsp) + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $8, 16(%rsp) +.L_2TAG_PACKET_8.0.2: + movq %xmm0, 8(%rsp) +..B1.3: + movq 8(%rsp), %xmm0 +.L_2TAG_PACKET_9.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_log10.4: + ret +..___tag_value_log10.5: +END(log10) +# -- End log10 + .section .rodata, "a" + .align 16 + .align 16 +HIGHSIGMASK: + .long 4160749568 + .long 4294967295 + .long 0 + .long 4294959104 + .type HIGHSIGMASK,@object + .size HIGHSIGMASK,16 + .align 16 +LOG10_E: + .long 0 + .long 1071366144 + .long 3207479560 + .long 1062894188 + .type LOG10_E,@object + .size LOG10_E,16 + .align 16 +L_tbl: + .long 1352628224 + .long 1070810131 + .long 521319256 + .long 1025503025 + .long 2150839296 + .long 1070801944 + .long 3329350096 + .long 3170190015 + .long 1360613376 + .long 1070793794 + .long 2024059075 + .long 1024991594 + .long 1875350528 + .long 1070785680 + .long 2163882141 + .long 3163564137 + .long 2312126464 + .long 1070777602 + .long 1975711076 + .long 1023674196 + .long 1306336256 + .long 1070769560 + .long 3524899523 + .long 3170508164 + .long 1806334976 + .long 1070761553 + .long 4254777025 + .long 1025238739 + .long 2483193856 + .long 1070753581 + .long 3800671317 + .long 3172916830 + .long 2025350144 + .long 1070745644 + .long 1731514745 + .long 1025501083 + .long 3433285632 + .long 1070737741 + .long 2551857336 + .long 3169662186 + .long 1134317568 + .long 1070729873 + .long 3426297655 + .long 3172637891 + .long 2457152512 + .long 1070722038 + .long 63549415 + .long 1025415416 + .long 1861803008 + .long 1070714237 + .long 1910171636 + .long 1023977580 + .long 2414140416 + .long 1070706469 + .long 4002514337 + .long 3170841618 + .long 2900726784 + .long 1070698734 + .long 3268064083 + .long 1022459609 + .long 2123517952 + .long 1070691032 + .long 1767031218 + .long 1022448156 + .long 3194569728 + .long 1070683362 + .long 3402332618 + .long 3171671160 + .long 650882048 + .long 1070675725 + .long 4146023905 + .long 3171023038 + .long 1928988672 + .long 1070668119 + .long 1438617867 + .long 1016360491 + .long 1594908672 + .long 1070660545 + .long 971389377 + .long 1024763979 + .long 2818746368 + .long 1070653002 + .long 3555925341 + .long 3172434821 + .long 194584576 + .long 1070645491 + .long 943919215 + .long 3172950063 + .long 1215096832 + .long 1070638010 + .long 2283358588 + .long 1022335098 + .long 501519360 + .long 1070630560 + .long 480904295 + .long 1024437959 + .long 1278266368 + .long 1070623140 + .long 2755806066 + .long 3172342012 + .long 2487812096 + .long 1070615750 + .long 2489653202 + .long 3172481099 + .long 3085451264 + .long 1070608390 + .long 3759184951 + .long 3172574892 + .long 2039090176 + .long 1070601060 + .long 1361176676 + .long 3172355319 + .long 953057280 + .long 1070591423 + .long 1176587546 + .long 3166422018 + .long 3370524672 + .long 1070576879 + .long 3669570051 + .long 1025376630 + .long 749742080 + .long 1070562394 + .long 707700964 + .long 3170814058 + .long 4008353792 + .long 1070547965 + .long 3247327652 + .long 1022431400 + .long 2612455424 + .long 1070533594 + .long 2453457344 + .long 3172322969 + .long 3230920704 + .long 1070519279 + .long 1296781801 + .long 1025115335 + .long 3965253632 + .long 1070505020 + .long 373075289 + .long 1017938528 + .long 2593157120 + .long 1070476669 + .long 1068054086 + .long 1021616576 + .long 925962240 + .long 1070448537 + .long 850121213 + .long 1023928989 + .long 1732556800 + .long 1070420620 + .long 1305206740 + .long 3172665570 + .long 3815630848 + .long 1070392915 + .long 192642943 + .long 3172699907 + .long 2001758208 + .long 1070365420 + .long 2820786683 + .long 1024704867 + .long 16746496 + .long 1070338131 + .long 1399573110 + .long 3171372773 + .long 1886492672 + .long 1070311044 + .long 3621428075 + .long 3172974358 + .long 3338196992 + .long 1070284157 + .long 3793882035 + .long 1025124701 + .long 381769728 + .long 1070257468 + .long 3877933342 + .long 3170195490 + .long 2186491904 + .long 1070230972 + .long 1838687089 + .long 1017927292 + .long 1008330752 + .long 1070204668 + .long 2228321664 + .long 1025352196 + .long 2247065600 + .long 1070178552 + .long 1413900906 + .long 3170902532 + .long 2964070400 + .long 1070152622 + .long 3590454629 + .long 1025016844 + .long 465154048 + .long 1070126876 + .long 2079688550 + .long 3172268183 + .long 883615744 + .long 1070101310 + .long 989244452 + .long 3171900485 + .long 1993768960 + .long 1070075922 + .long 1124327841 + .long 3172964992 + .long 1794471936 + .long 1070050710 + .long 1140575046 + .long 1022673726 + .long 2797932544 + .long 1070025671 + .long 1894836933 + .long 3172544059 + .long 3433797632 + .long 1070000803 + .long 3221831166 + .long 3171921685 + .long 2338371584 + .long 1069976104 + .long 3732461053 + .long 3164513518 + .long 2644013056 + .long 1069951571 + .long 2519460462 + .long 3172548740 + .long 3383814144 + .long 1069927202 + .long 2290997657 + .long 1025499649 + .long 3781380096 + .long 1069902995 + .long 380479405 + .long 1025184136 + .long 3245785088 + .long 1069878948 + .long 1096398261 + .long 3169885192 + .long 1366712320 + .long 1069855059 + .long 2218343715 + .long 3170281628 + .long 2204717056 + .long 1069831325 + .long 2668334011 + .long 1025264524 + .long 1401772032 + .long 1069807745 + .long 4103993159 + .long 1022925721 + .long 3356721152 + .long 1069784316 + .long 3573790772 + .long 3172186527 + .long 4041148416 + .long 1069761037 + .long 4027691910 + .long 3171276990 + .long 3880151040 + .long 1069737906 + .long 4087118786 + .long 3172710734 + .long 3453364224 + .long 1069714921 + .long 99014299 + .long 3172003077 + .long 3491092480 + .long 1069692080 + .long 3801836701 + .long 3172989287 + .long 575580160 + .long 1069669382 + .long 1920406012 + .long 3170874125 + .long 22282240 + .long 1069646824 + .long 964193370 + .long 1019363159 + .long 2991429632 + .long 1069624404 + .long 3372589890 + .long 1023425053 + .long 2189645824 + .long 1069602122 + .long 2610503872 + .long 1023652442 + .long 3341467648 + .long 1069579975 + .long 1190292004 + .long 1022425665 + .long 3711293440 + .long 1069557962 + .long 1104795356 + .long 1023625829 + .long 1380401152 + .long 1069524644 + .long 1156998217 + .long 1025100499 + .long 765710336 + .long 1069481144 + .long 1736649113 + .long 1024999439 + .long 849412096 + .long 1069437902 + .long 2618178330 + .long 3170853629 + .long 1433104384 + .long 1069394915 + .long 43477267 + .long 3170378811 + .long 2548596736 + .long 1069352180 + .long 3967367063 + .long 1025246584 + .long 157577216 + .long 1069309695 + .long 100402533 + .long 3172825502 + .long 3326238720 + .long 1069267455 + .long 1176892909 + .long 1025464099 + .long 4155494400 + .long 1069225459 + .long 3713707617 + .long 3172630046 + .long 3545804800 + .long 1069183704 + .long 857007315 + .long 1024965777 + .long 2602520576 + .long 1069142187 + .long 2588758347 + .long 1022463131 + .long 2631196672 + .long 1069100905 + .long 2118424235 + .long 1022490989 + .long 838135808 + .long 1069059856 + .long 4117002727 + .long 1024874520 + .long 3210903552 + .long 1069019036 + .long 650070125 + .long 3172012966 + .long 3039211520 + .long 1068978444 + .long 438055812 + .long 1017743757 + .long 2385633280 + .long 1068938077 + .long 3011990369 + .long 3171312044 + .long 3491618816 + .long 1068897932 + .long 712813818 + .long 3172720400 + .long 183644160 + .long 1068858008 + .long 4287006742 + .long 1022379728 + .long 3639214080 + .long 1068818300 + .long 353762279 + .long 3172980009 + .long 3728416768 + .long 1068778808 + .long 1851367730 + .long 1025486574 + .long 3370094592 + .long 1068739529 + .long 4046594913 + .long 3172567047 + .long 1348407296 + .long 1068700461 + .long 143189675 + .long 1025397632 + .long 899403776 + .long 1068661601 + .long 3753687842 + .long 3170772772 + .long 1117708288 + .long 1068622947 + .long 1857340812 + .long 3170782678 + .long 1248276480 + .long 1068584497 + .long 1289858203 + .long 1025222289 + .long 683237376 + .long 1068546249 + .long 2356679608 + .long 3171629170 + .long 3253764096 + .long 1068508200 + .long 3267136556 + .long 1018554987 + .long 94478336 + .long 1068441756 + .long 1927868814 + .long 3169378180 + .long 3233144832 + .long 1068366445 + .long 2682188854 + .long 1023964004 + .long 2940297216 + .long 1068291522 + .long 275301289 + .long 1023944679 + .long 3677708288 + .long 1068216982 + .long 302658771 + .long 1024465567 + .long 1576968192 + .long 1068142822 + .long 3672035940 + .long 3172254610 + .long 1614069760 + .long 1068069037 + .long 480052905 + .long 3172692062 + .long 424435712 + .long 1067995624 + .long 2207869657 + .long 3170965436 + .long 3477782528 + .long 1067922578 + .long 2980661858 + .long 3164990018 + .long 3598401536 + .long 1067849897 + .long 1974393034 + .long 3171357083 + .long 2435235840 + .long 1067777577 + .long 1385289011 + .long 1024615823 + .long 1867333632 + .long 1067705614 + .long 3442236633 + .long 1025334384 + .long 3999301632 + .long 1067634004 + .long 3506472073 + .long 1025132546 + .long 2566971392 + .long 1067562745 + .long 1425757592 + .long 3172358463 + .long 112943104 + .long 1067491833 + .long 1693407156 + .long 3172426603 + .long 3079929856 + .long 1067392159 + .long 3999942455 + .long 1018549369 + .long 2443837440 + .long 1067251701 + .long 974534460 + .long 1023963412 + .long 359366656 + .long 1067111917 + .long 2204915018 + .long 1013514416 + .long 3564519424 + .long 1066972799 + .long 3977441659 + .long 3170879860 + .long 2011086848 + .long 1066834343 + .long 590145514 + .long 1025390011 + .long 3216982016 + .long 1066696541 + .long 3629120110 + .long 1024330313 + .long 2194128896 + .long 1066559388 + .long 2367098512 + .long 3172260338 + .long 2916220928 + .long 1066422877 + .long 2262431886 + .long 1021229446 + .long 2263941120 + .long 1066172214 + .long 3118507287 + .long 1021484970 + .long 3076292608 + .long 1065901726 + .long 1411737803 + .long 3172957147 + .long 1186136064 + .long 1065632488 + .long 3109349337 + .long 1025397383 + .long 3085303808 + .long 1065364487 + .long 584715031 + .long 3172596519 + .long 1821048832 + .long 1064842211 + .long 2182246895 + .long 3172536214 + .long 697368576 + .long 1064311094 + .long 3157561765 + .long 3172716357 + .long 894042112 + .long 1063260131 + .long 3237958154 + .long 3172587292 + .long 0 + .long 0 + .long 0 + .long 0 + .type L_tbl,@object + .size L_tbl,2064 + .align 16 +log2: + .long 1352628224 + .long 1066615827 + .long 521319256 + .long 1021308721 + .type log2,@object + .size log2,16 + .align 16 +coeff: + .long 3248877870 + .long 1077250164 + .long 1691676429 + .long 3221787401 + .long 945132465 + .long 3223701783 + .long 3700831335 + .long 1073506818 + .long 2141010593 + .long 1075227551 + .long 3698831637 + .long 3220339442 + .type coeff,@object + .size coeff,48 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_log10.1-. + .4byte ..___tag_value_log10.5-..___tag_value_log10.1 + .2byte 0x0400 + .4byte ..___tag_value_log10.3-..___tag_value_log10.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_log10.4-..___tag_value_log10.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_pow.S b/libm/x86_64/e_pow.S new file mode 100644 index 000000000..9ec38287c --- /dev/null +++ b/libm/x86_64/e_pow.S @@ -0,0 +1,4282 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// log2(x) calculation: +// +// Get B~1/mx based on the output of rcpps instruction (B0) +// B = int((B0*LH*2^9+0.5))/2^9 +// LH is a short approximation for log2(e) +// +// Reduced argument, scaled by LH: +// r=B*mx-LH (computed accurately in high and low parts) +// +// log2(x) result: k - log2(B) + p(r) +// p(r) is a degree 8 polynomial +// -log2(B) read from data table (high, low parts) +// log2(x) is formed from high and low parts +// For |x| in [1-1/32, 1+1/16), a slower but more accurate computation +// based om the same table design is performed. +// +// Main path is taken if | floor(log2(|log2(|x|)|) + floor(log2|y|) | < 8, +// to filter out all potential OF/UF cases. +// exp2(y*log2(x)) is computed using an 8-bit index table and a degree 5 +// polynomial +// +// Special cases: +// pow(-0,y) = -INF and raises the divide-by-zero exception for y an odd +// integer < 0. +// pow(-0,y) = +INF and raises the divide-by-zero exception for y < 0 and +// not an odd integer. +// pow(-0,y) = -0 for y an odd integer > 0. +// pow(-0,y) = +0 for y > 0 and not an odd integer. +// pow(-1,-INF) = 1. +// pow(+1,y) = 1 for any y, even a NaN. +// pow(x,-0) = 1 for any x, even a NaN. +// pow(x,y) = a NaN and raises the invalid exception for finite x < 0 and +// finite non-integer y. +// pow(x,-INF) = +INF for |x|<1. +// pow(x,-INF) = +0 for |x|>1. +// pow(x,+INF) = +0 for |x|<1. +// pow(x,+INF) = +INF for |x|>1. +// pow(-INF,y) = -0 for y an odd integer < 0. +// pow(-INF,y) = +0 for y < 0 and not an odd integer. +// pow(-INF,y) = -INF for y an odd integer > 0. +// pow(-INF,y) = +INF for y > 0 and not an odd integer. +// pow(+INF,y) = +0 for y <0. +// pow(+INF,y) = +INF for y >0. +// +/******************************************************************************/ + +#include +# -- Begin pow +ENTRY(pow) +# parameter 1: %xmm0 +# parameter 2: %xmm1 +..B1.1: +..___tag_value_pow.1: + subq $40, %rsp +..___tag_value_pow.3: + movsd %xmm0, 8(%rsp) + movsd %xmm1, 16(%rsp) +..B1.2: + pextrw $3, %xmm0, %eax + xorpd %xmm2, %xmm2 + movq $0x3ff0000000000000, %r9 + movd %r9, %xmm2 + movl $1069088768, %r8d + movd %r8, %xmm7 + xorpd %xmm1, %xmm1 + movq $0x77f0000000000000, %r10 + movd %r10, %xmm1 + movq %xmm0, %xmm3 + movl $32752, %edx + andl %eax, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + orpd %xmm2, %xmm0 + movapd HIGHSIGMASK(%rip), %xmm6 + psrlq $27, %xmm0 + movq LOG2_E(%rip), %xmm2 + psrld $2, %xmm0 + addl $16, %ecx + bsr %ecx, %ecx + rcpps %xmm0, %xmm0 + psllq $12, %xmm3 + movl $8192, %r11d + movd %r11, %xmm4 + psrlq $12, %xmm3 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 + movq $0, %r8 +.L_2TAG_PACKET_1.0.2: + mulss %xmm7, %xmm0 + movl $-1, %edx + subl $4, %ecx + shll %cl, %edx + shlq $32, %rdx + movd %rdx, %xmm5 + orpd %xmm1, %xmm3 + subl $16351, %eax + cmpl $1, %eax + jbe .L_2TAG_PACKET_2.0.2 + paddd %xmm4, %xmm0 + andpd %xmm3, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 +.L_2TAG_PACKET_3.0.2: + subsd %xmm5, %xmm3 + andpd %xmm6, %xmm0 + subl $1, %eax + sarl $4, %eax + cvtsi2sd %eax, %xmm7 + mulpd %xmm0, %xmm5 +.L_2TAG_PACKET_4.0.2: + mulsd %xmm0, %xmm3 + movapd coeff(%rip), %xmm1 + lea L_tbl(%rip), %r11 + subsd %xmm2, %xmm5 + movapd 16+coeff(%rip), %xmm4 + movl %eax, %ecx + sarl $31, %eax + addl %eax, %ecx + xorl %ecx, %eax + addl $1, %eax + bsr %eax, %eax + unpcklpd %xmm3, %xmm5 + movapd 32+coeff(%rip), %xmm6 + addsd %xmm5, %xmm3 + andl $16760832, %edx + shrl $10, %edx + addpd -3648(%r11,%rdx), %xmm5 + movapd 48+coeff(%rip), %xmm0 + pshufd $68, %xmm3, %xmm2 + mulsd %xmm3, %xmm3 + mulpd %xmm2, %xmm1 + mulpd %xmm2, %xmm4 + addsd %xmm7, %xmm5 + mulsd %xmm3, %xmm2 + addpd %xmm1, %xmm6 + mulsd %xmm3, %xmm3 + addpd %xmm4, %xmm0 + movq 16(%rsp), %xmm1 + movw 22(%rsp), %cx + pshufd $238, %xmm5, %xmm7 + movq HIGHMASK_Y(%rip), %xmm4 + mulpd %xmm2, %xmm6 + pshufd $68, %xmm3, %xmm3 + mulpd %xmm2, %xmm0 + shll $4, %eax + subl $15872, %eax + andl $32752, %ecx + addl %ecx, %eax + mulpd %xmm6, %xmm3 + cmpl $624, %eax + jae .L_2TAG_PACKET_5.0.2 + xorpd %xmm6, %xmm6 + movl $17080, %edx + pinsrw $3, %edx, %xmm6 + movq %xmm1, %xmm2 + andpd %xmm1, %xmm4 + subsd %xmm4, %xmm1 + mulsd %xmm5, %xmm4 + addsd %xmm7, %xmm0 + mulsd %xmm5, %xmm1 + movq %xmm6, %xmm7 + addsd %xmm4, %xmm6 + lea T_exp(%rip), %r11 + addpd %xmm0, %xmm3 + movd %xmm6, %edx + subsd %xmm7, %xmm6 + pshufd $238, %xmm3, %xmm0 + subsd %xmm6, %xmm4 + addsd %xmm3, %xmm0 + movl %edx, %ecx + andl $255, %edx + addl %edx, %edx + movapd (%r11,%rdx,8), %xmm5 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + movapd e_coeff(%rip), %xmm7 + movapd 16+e_coeff(%rip), %xmm3 + shll $12, %ecx + xorl %r8d, %ecx + andl $-1048576, %ecx + movd %rcx, %xmm6 + addsd %xmm4, %xmm2 + movq $0x3fe62e42fefa39ef, %r9 + movd %r9, %xmm1 + pshufd $68, %xmm2, %xmm0 + pshufd $68, %xmm2, %xmm4 + mulsd %xmm2, %xmm1 + pshufd $17, %xmm6, %xmm6 + mulpd %xmm0, %xmm0 + mulpd %xmm4, %xmm7 + paddd %xmm6, %xmm5 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm5, %xmm6 + mulsd %xmm0, %xmm0 + addpd %xmm7, %xmm3 + addsd %xmm6, %xmm1 + mulpd %xmm3, %xmm0 + pshufd $238, %xmm0, %xmm3 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm0 + addsd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + addl $16, %eax + movl $32752, %edx + andl %eax, %edx + cmpl $32752, %edx + je .L_2TAG_PACKET_6.0.2 + testl $32768, %eax + jne .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_8.0.2: + movq 8(%rsp), %xmm0 + movq 8(%rsp), %xmm3 + movd %xmm3, %edx + psrlq $32, %xmm3 + movd %xmm3, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_9.0.2 + xorpd %xmm3, %xmm3 + movl $18416, %eax + pinsrw $3, %eax, %xmm3 + mulsd %xmm3, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movq %xmm0, %xmm3 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psrlq $27, %xmm0 + movq LOG2_E(%rip), %xmm2 + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm3 + movapd HIGHSIGMASK(%rip), %xmm6 + psrlq $12, %xmm3 + mulss %xmm7, %xmm0 + movl $-1024, %edx + movd %edx, %xmm5 + orpd %xmm1, %xmm3 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm3, %xmm5 + movl $0, %r8d + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + andl $32752, %eax + subl $18416, %eax + sarl $4, %eax + cvtsi2sd %eax, %xmm7 + mulpd %xmm0, %xmm5 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_10.0.2: + movq 8(%rsp), %xmm0 + movq 8(%rsp), %xmm3 + movd %xmm3, %edx + psrlq $32, %xmm3 + movd %xmm3, %ecx + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_9.0.2 + xorpd %xmm3, %xmm3 + movl $18416, %eax + pinsrw $3, %eax, %xmm3 + mulsd %xmm3, %xmm0 + xorpd %xmm2, %xmm2 + movl $16368, %eax + pinsrw $3, %eax, %xmm2 + movq %xmm0, %xmm3 + pextrw $3, %xmm0, %eax + orpd %xmm2, %xmm0 + movl $18416, %ecx + psrlq $27, %xmm0 + movq LOG2_E(%rip), %xmm2 + psrld $2, %xmm0 + rcpps %xmm0, %xmm0 + psllq $12, %xmm3 + movapd HIGHSIGMASK(%rip), %xmm6 + psrlq $12, %xmm3 + mulss %xmm7, %xmm0 + movl $-1024, %edx + movd %edx, %xmm5 + orpd %xmm1, %xmm3 + paddd %xmm4, %xmm0 + psllq $32, %xmm5 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm3, %xmm5 + movl $-2147483648, %r8d + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + andl $32752, %eax + subl $18416, %eax + sarl $4, %eax + cvtsi2sd %eax, %xmm7 + mulpd %xmm0, %xmm5 + jmp .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + cmpl $0, %eax + jl .L_2TAG_PACKET_11.0.2 + cmpl $736, %eax + jae .L_2TAG_PACKET_12.0.2 + addsd %xmm7, %xmm0 + movq HALFMASK(%rip), %xmm2 + addpd %xmm0, %xmm3 + xorpd %xmm6, %xmm6 + movl $17080, %eax + pinsrw $3, %eax, %xmm6 + pshufd $238, %xmm3, %xmm0 + addsd %xmm3, %xmm0 + movq %xmm5, %xmm3 + addsd %xmm0, %xmm5 + movq %xmm2, %xmm4 + subsd %xmm5, %xmm3 + movq %xmm5, %xmm7 + andpd %xmm2, %xmm5 + movq %xmm1, %xmm2 + andpd %xmm1, %xmm4 + subsd %xmm5, %xmm7 + addsd %xmm3, %xmm0 + subsd %xmm4, %xmm1 + mulsd %xmm5, %xmm4 + addsd %xmm7, %xmm0 + mulsd %xmm0, %xmm2 + movq %xmm6, %xmm7 + mulsd %xmm5, %xmm1 + addsd %xmm4, %xmm6 + movd %xmm6, %eax + subsd %xmm7, %xmm6 + lea T_exp(%rip), %r11 + addsd %xmm1, %xmm2 + movapd e_coeff(%rip), %xmm7 + movapd 16+e_coeff(%rip), %xmm3 + subsd %xmm6, %xmm4 + pextrw $3, %xmm6, %edx + movl %eax, %ecx + andl $255, %eax + addl %eax, %eax + movapd (%r11,%rax,8), %xmm5 + addsd %xmm4, %xmm2 + sarl $8, %ecx + movl %ecx, %eax + sarl $1, %ecx + subl %ecx, %eax + shll $20, %ecx + xorl %r8d, %ecx + movd %ecx, %xmm6 + movq 32+e_coeff(%rip), %xmm1 + andl $32767, %edx + cmpl $16529, %edx + ja .L_2TAG_PACKET_12.0.2 + pshufd $68, %xmm2, %xmm0 + pshufd $68, %xmm2, %xmm4 + mulpd %xmm0, %xmm0 + mulpd %xmm4, %xmm7 + pshufd $17, %xmm6, %xmm6 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm0 + paddd %xmm6, %xmm5 + addpd %xmm7, %xmm3 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm5, %xmm6 + mulpd %xmm3, %xmm0 + addsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm3 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + shll $4, %eax + xorpd %xmm4, %xmm4 + addl $16368, %eax + pinsrw $3, %eax, %xmm4 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm0 + movq %xmm0, %xmm1 + addsd %xmm5, %xmm0 + mulsd %xmm4, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + je .L_2TAG_PACKET_13.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_14.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + movq 16(%rsp), %xmm1 + movq 8(%rsp), %xmm0 + movq %xmm0, %xmm2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + je .L_2TAG_PACKET_15.0.2 + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_16.0.2 + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_16.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + movl $29, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_18.0.2: + movq 16(%rsp), %xmm0 + addpd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_15.0.2: + movd %xmm1, %eax + movq %xmm1, %xmm2 + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_19.0.2 + pextrw $3, %xmm2, %eax + andl $32752, %eax + cmpl $32752, %eax + jne .L_2TAG_PACKET_20.0.2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + jne .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_20.0.2: + pextrw $3, %xmm0, %eax + testl $32768, %eax + jne .L_2TAG_PACKET_21.0.2 + testl $-2147483648, %ecx + jne .L_2TAG_PACKET_22.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_23.0.2: + movq 16(%rsp), %xmm1 + movd %xmm1, %eax + testl $1, %eax + jne .L_2TAG_PACKET_24.0.2 + testl $2, %eax + jne .L_2TAG_PACKET_25.0.2 + jmp .L_2TAG_PACKET_24.0.2 +.L_2TAG_PACKET_21.0.2: + shrl $20, %ecx + andl $2047, %ecx + cmpl $1075, %ecx + ja .L_2TAG_PACKET_24.0.2 + je .L_2TAG_PACKET_26.0.2 + cmpl $1074, %ecx + ja .L_2TAG_PACKET_23.0.2 + cmpl $1023, %ecx + jb .L_2TAG_PACKET_24.0.2 + movq 16(%rsp), %xmm1 + movl $17208, %eax + xorpd %xmm3, %xmm3 + pinsrw $3, %eax, %xmm3 + movq %xmm3, %xmm4 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + jne .L_2TAG_PACKET_24.0.2 + movd %xmm3, %eax + andl $1, %eax + je .L_2TAG_PACKET_24.0.2 +.L_2TAG_PACKET_25.0.2: + movq 16(%rsp), %xmm1 + pextrw $3, %xmm1, %eax + andl $32768, %eax + jne .L_2TAG_PACKET_27.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_27.0.2: + xorpd %xmm0, %xmm0 + movl $32768, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_24.0.2: + movq 16(%rsp), %xmm1 + pextrw $3, %xmm1, %eax + andl $32768, %eax + jne .L_2TAG_PACKET_22.0.2 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_26.0.2: + movq 16(%rsp), %xmm1 + movd %xmm1, %eax + andl $1, %eax + je .L_2TAG_PACKET_24.0.2 + jmp .L_2TAG_PACKET_25.0.2 +.L_2TAG_PACKET_28.0.2: + movd %xmm1, %eax + psrlq $20, %xmm1 + movd %xmm1, %edx + orl %edx, %eax + je .L_2TAG_PACKET_29.0.2 + movq 16(%rsp), %xmm0 + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_29.0.2: + movq 8(%rsp), %xmm0 + pextrw $3, %xmm0, %eax + cmpl $49136, %eax + jne .L_2TAG_PACKET_30.0.2 + movd %xmm0, %ecx + psrlq $20, %xmm0 + movd %xmm0, %edx + orl %edx, %ecx + jne .L_2TAG_PACKET_30.0.2 + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_30.0.2: + movq 16(%rsp), %xmm1 + andl $32752, %eax + subl $16368, %eax + pextrw $3, %xmm1, %edx + xorpd %xmm0, %xmm0 + xorl %edx, %eax + andl $32768, %eax + je .L_2TAG_PACKET_31.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_31.0.2: + movl $32752, %ecx + pinsrw $3, %ecx, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_32.0.2: + movd %xmm1, %eax + cmpl $17184, %edx + ja .L_2TAG_PACKET_33.0.2 + testl $1, %eax + jne .L_2TAG_PACKET_34.0.2 + testl $2, %eax + je .L_2TAG_PACKET_35.0.2 + jmp .L_2TAG_PACKET_36.0.2 +.L_2TAG_PACKET_33.0.2: + testl $1, %eax + je .L_2TAG_PACKET_35.0.2 + jmp .L_2TAG_PACKET_36.0.2 +.L_2TAG_PACKET_7.0.2: + movq 8(%rsp), %xmm2 + movd %xmm2, %eax + psrlq $31, %xmm2 + movd %xmm2, %ecx + orl %ecx, %eax + je .L_2TAG_PACKET_9.0.2 + movq 16(%rsp), %xmm1 + pextrw $3, %xmm1, %edx + movd %xmm1, %eax + movq %xmm1, %xmm2 + psrlq $32, %xmm2 + movd %xmm2, %ecx + addl %ecx, %ecx + orl %eax, %ecx + je .L_2TAG_PACKET_37.0.2 + andl $32752, %edx + cmpl $32752, %edx + je .L_2TAG_PACKET_28.0.2 + cmpl $17200, %edx + ja .L_2TAG_PACKET_35.0.2 + cmpl $17184, %edx + jae .L_2TAG_PACKET_32.0.2 + cmpl $16368, %edx + jb .L_2TAG_PACKET_34.0.2 + movl $17208, %eax + xorpd %xmm2, %xmm2 + pinsrw $3, %eax, %xmm2 + movq %xmm2, %xmm4 + addsd %xmm1, %xmm2 + subsd %xmm2, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32767, %eax + jne .L_2TAG_PACKET_34.0.2 + movd %xmm2, %eax + andl $1, %eax + je .L_2TAG_PACKET_35.0.2 +.L_2TAG_PACKET_36.0.2: + xorpd %xmm1, %xmm1 + movl $30704, %edx + pinsrw $3, %edx, %xmm1 + movq LOG2_E(%rip), %xmm2 + movq 8(%rsp), %xmm4 + pextrw $3, %xmm4, %eax + movl $8192, %edx + movd %edx, %xmm4 + andl $32767, %eax + subl $16, %eax + jl .L_2TAG_PACKET_10.0.2 + movl %eax, %edx + andl $32752, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + addl $16, %ecx + bsr %ecx, %ecx + movl $-2147483648, %r8d + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_34.0.2: + xorpd %xmm1, %xmm1 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + xorpd %xmm0, %xmm0 + mulsd %xmm1, %xmm0 + movl $28, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_35.0.2: + xorpd %xmm1, %xmm1 + movl $30704, %edx + pinsrw $3, %edx, %xmm1 + movq LOG2_E(%rip), %xmm2 + movq 8(%rsp), %xmm4 + pextrw $3, %xmm4, %eax + movl $8192, %edx + movd %edx, %xmm4 + andl $32767, %eax + subl $16, %eax + jl .L_2TAG_PACKET_8.0.2 + movl %eax, %edx + andl $32752, %edx + subl $16368, %edx + movl %edx, %ecx + sarl $31, %edx + addl %edx, %ecx + xorl %edx, %ecx + addl $16, %ecx + bsr %ecx, %ecx + movl $0, %r8d + jmp .L_2TAG_PACKET_1.0.2 +.L_2TAG_PACKET_19.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_22.0.2: + xorpd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_11.0.2: + addl $384, %eax + cmpl $0, %eax + jl .L_2TAG_PACKET_38.0.2 + mulsd %xmm1, %xmm5 + addsd %xmm7, %xmm0 + shrl $31, %r8d + addpd %xmm0, %xmm3 + pshufd $238, %xmm3, %xmm0 + addsd %xmm0, %xmm3 + lea log2(%rip), %r11 + movq (%r11,%r8,8), %xmm4 + mulsd %xmm3, %xmm1 + xorpd %xmm0, %xmm0 + movl $16368, %eax + shll $15, %r8d + orl %r8d, %eax + pinsrw $3, %eax, %xmm0 + addsd %xmm1, %xmm5 + mulsd %xmm4, %xmm5 + addsd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_38.0.2: +.L_2TAG_PACKET_37.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_39.0.2: + xorpd %xmm0, %xmm0 + movl $16368, %eax + pinsrw $3, %eax, %xmm0 + movl $26, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_9.0.2: + movq 16(%rsp), %xmm1 + movq %xmm1, %xmm2 + pextrw $3, %xmm1, %eax + andl $32752, %eax + cmpl $32752, %eax + jne .L_2TAG_PACKET_40.0.2 + movd %xmm2, %eax + psrlq $20, %xmm2 + movd %xmm2, %edx + orl %edx, %eax + jne .L_2TAG_PACKET_18.0.2 +.L_2TAG_PACKET_40.0.2: + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + movl %edx, %ecx + addl %edx, %edx + orl %edx, %eax + je .L_2TAG_PACKET_39.0.2 + shrl $21, %edx + cmpl $1075, %edx + ja .L_2TAG_PACKET_41.0.2 + je .L_2TAG_PACKET_42.0.2 + cmpl $1023, %edx + jb .L_2TAG_PACKET_41.0.2 + movq 16(%rsp), %xmm1 + movl $17208, %eax + xorpd %xmm3, %xmm3 + pinsrw $3, %eax, %xmm3 + movq %xmm3, %xmm4 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + pextrw $3, %xmm1, %eax + andl $32752, %eax + jne .L_2TAG_PACKET_41.0.2 + movd %xmm3, %eax + andl $1, %eax + je .L_2TAG_PACKET_41.0.2 +.L_2TAG_PACKET_43.0.2: + movq 8(%rsp), %xmm0 + testl $-2147483648, %ecx + jne .L_2TAG_PACKET_44.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_42.0.2: + movq 16(%rsp), %xmm1 + movd %xmm1, %eax + testl $1, %eax + jne .L_2TAG_PACKET_43.0.2 +.L_2TAG_PACKET_41.0.2: + testl $-2147483648, %ecx + je .L_2TAG_PACKET_22.0.2 + xorpd %xmm0, %xmm0 +.L_2TAG_PACKET_44.0.2: + movl $16368, %eax + xorpd %xmm1, %xmm1 + pinsrw $3, %eax, %xmm1 + divsd %xmm0, %xmm1 + movq %xmm1, %xmm0 + movl $27, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_12.0.2: + movq 8(%rsp), %xmm2 + movq 16(%rsp), %xmm6 + pextrw $3, %xmm2, %eax + pextrw $3, %xmm6, %edx + movl $32752, %ecx + andl %edx, %ecx + cmpl $32752, %ecx + je .L_2TAG_PACKET_45.0.2 + andl $32752, %eax + subl $16368, %eax + xorl %eax, %edx + testl $32768, %edx + jne .L_2TAG_PACKET_46.0.2 +.L_2TAG_PACKET_47.0.2: + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + shrl $16, %r8d + orl %r8d, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 +.L_2TAG_PACKET_14.0.2: + movl $24, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_46.0.2: + movl $16, %eax + pinsrw $3, %eax, %xmm0 + mulsd %xmm0, %xmm0 + testl $-2147483648, %r8d + je .L_2TAG_PACKET_48.0.2 + movq $0x8000000000000000, %r9 + movd %r9, %xmm2 + xorpd %xmm2, %xmm0 +.L_2TAG_PACKET_48.0.2: + movl $25, (%rsp) + jmp .L_2TAG_PACKET_17.0.2 +.L_2TAG_PACKET_13.0.2: + pextrw $3, %xmm5, %ecx + pextrw $3, %xmm4, %edx + movl $-1, %eax + andl $32752, %ecx + subl $16368, %ecx + andl $32752, %edx + addl %ecx, %edx + movl $-31, %ecx + sarl $4, %edx + subl %edx, %ecx + jle .L_2TAG_PACKET_49.0.2 + cmpl $20, %ecx + ja .L_2TAG_PACKET_50.0.2 + shll %cl, %eax +.L_2TAG_PACKET_49.0.2: + movd %eax, %xmm0 + psllq $32, %xmm0 + andpd %xmm5, %xmm0 + subsd %xmm0, %xmm5 + addsd %xmm1, %xmm5 + mulsd %xmm4, %xmm0 + mulsd %xmm4, %xmm5 + addsd %xmm5, %xmm0 +.L_2TAG_PACKET_50.0.2: + jmp .L_2TAG_PACKET_48.0.2 +.L_2TAG_PACKET_2.0.2: + movw 22(%rsp), %cx + movl $-2147483648, %edx + movd %rdx, %xmm1 + xorpd %xmm7, %xmm7 + paddd %xmm4, %xmm0 + movd %xmm0, %edx + psllq $29, %xmm0 + paddq %xmm3, %xmm1 + andpd %xmm1, %xmm5 + andw $32752, %cx + cmpw $16560, %cx + jb .L_2TAG_PACKET_3.0.2 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm3 + addl $16351, %eax + shrl $4, %eax + subl $1022, %eax + cvtsi2sd %eax, %xmm7 + mulpd %xmm0, %xmm5 + lea L_tbl(%rip), %r11 + movq coeff_h(%rip), %xmm4 + mulsd %xmm0, %xmm3 + movq coeff_h(%rip), %xmm6 + subsd %xmm2, %xmm5 + movq 8+coeff_h(%rip), %xmm1 + pshufd $68, %xmm3, %xmm2 + unpcklpd %xmm3, %xmm5 + addsd %xmm5, %xmm3 + movq 8+coeff_h(%rip), %xmm0 + andl $16760832, %edx + shrl $10, %edx + addpd -3648(%r11,%rdx), %xmm7 + mulsd %xmm5, %xmm4 + mulsd %xmm5, %xmm0 + mulsd %xmm2, %xmm6 + mulsd %xmm2, %xmm1 + movq %xmm5, %xmm2 + mulsd %xmm5, %xmm4 + addsd %xmm0, %xmm5 + movq %xmm7, %xmm0 + addsd %xmm3, %xmm2 + addsd %xmm5, %xmm7 + mulsd %xmm2, %xmm6 + subsd %xmm7, %xmm0 + movq %xmm7, %xmm2 + addsd %xmm4, %xmm7 + addsd %xmm5, %xmm0 + subsd %xmm7, %xmm2 + addsd %xmm2, %xmm4 + pshufd $238, %xmm5, %xmm2 + movq %xmm7, %xmm5 + addsd %xmm2, %xmm7 + addsd %xmm0, %xmm4 + movapd coeff(%rip), %xmm0 + subsd %xmm7, %xmm5 + addsd %xmm4, %xmm6 + movq %xmm7, %xmm4 + addsd %xmm2, %xmm5 + addsd %xmm1, %xmm7 + movapd 64+coeff(%rip), %xmm2 + subsd %xmm7, %xmm4 + addsd %xmm5, %xmm6 + addsd %xmm1, %xmm4 + pshufd $238, %xmm7, %xmm5 + movapd %xmm7, %xmm1 + addsd %xmm5, %xmm7 + subsd %xmm7, %xmm1 + addsd %xmm5, %xmm1 + movapd 80+coeff(%rip), %xmm5 + pshufd $68, %xmm3, %xmm3 + addsd %xmm4, %xmm6 + addsd %xmm1, %xmm6 + movapd 32+coeff(%rip), %xmm1 + mulpd %xmm3, %xmm0 + mulpd %xmm3, %xmm2 + pshufd $68, %xmm3, %xmm4 + mulpd %xmm3, %xmm3 + addpd %xmm1, %xmm0 + addpd %xmm2, %xmm5 + mulsd %xmm3, %xmm4 + movq HIGHMASK_LOG_X(%rip), %xmm2 + mulpd %xmm3, %xmm3 + movq 16(%rsp), %xmm1 + movw 22(%rsp), %cx + mulpd %xmm4, %xmm0 + pextrw $3, %xmm7, %eax + mulpd %xmm4, %xmm5 + mulpd %xmm3, %xmm0 + movq 8+HIGHMASK_Y(%rip), %xmm4 + andpd %xmm7, %xmm2 + addsd %xmm6, %xmm5 + subsd %xmm2, %xmm7 + addpd %xmm0, %xmm5 + andl $32752, %eax + subl $16368, %eax + andl $32752, %ecx + cmpl $32752, %ecx + je .L_2TAG_PACKET_45.0.2 + addl %eax, %ecx + cmpl $16576, %ecx + jae .L_2TAG_PACKET_51.0.2 + pshufd $238, %xmm5, %xmm0 + andpd %xmm1, %xmm4 + movq %xmm1, %xmm3 + addsd %xmm0, %xmm5 + subsd %xmm4, %xmm1 + xorpd %xmm6, %xmm6 + movl $17080, %edx + pinsrw $3, %edx, %xmm6 + addsd %xmm5, %xmm7 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm1 + movq %xmm6, %xmm5 + mulsd %xmm7, %xmm3 + addsd %xmm4, %xmm6 + addsd %xmm3, %xmm1 + movapd e_coeff(%rip), %xmm7 + movd %xmm6, %edx + subsd %xmm5, %xmm6 + lea T_exp(%rip), %r11 + movapd 16+e_coeff(%rip), %xmm3 + movq 32+e_coeff(%rip), %xmm2 + subsd %xmm6, %xmm4 + movl %edx, %ecx + andl $255, %edx + addl %edx, %edx + movapd (%r11,%rdx,8), %xmm5 + addsd %xmm1, %xmm4 + pextrw $3, %xmm6, %edx + shrl $8, %ecx + movl %ecx, %eax + shrl $1, %ecx + subl %ecx, %eax + shll $20, %ecx + movd %ecx, %xmm6 + pshufd $68, %xmm4, %xmm0 + pshufd $68, %xmm4, %xmm1 + mulpd %xmm0, %xmm0 + mulpd %xmm1, %xmm7 + pshufd $17, %xmm6, %xmm6 + mulsd %xmm4, %xmm2 + andl $32767, %edx + cmpl $16529, %edx + ja .L_2TAG_PACKET_12.0.2 + mulsd %xmm0, %xmm0 + paddd %xmm6, %xmm5 + addpd %xmm7, %xmm3 + mulsd %xmm5, %xmm2 + pshufd $238, %xmm5, %xmm6 + mulpd %xmm3, %xmm0 + addsd %xmm6, %xmm2 + pshufd $238, %xmm0, %xmm3 + addl $1023, %eax + shll $20, %eax + orl %r8d, %eax + movd %eax, %xmm4 + mulsd %xmm5, %xmm0 + mulsd %xmm5, %xmm3 + addsd %xmm2, %xmm0 + psllq $32, %xmm4 + addsd %xmm3, %xmm0 + movq %xmm0, %xmm1 + addsd %xmm5, %xmm0 + mulsd %xmm4, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + je .L_2TAG_PACKET_13.0.2 + cmpl $32752, %eax + je .L_2TAG_PACKET_14.0.2 +.L_2TAG_PACKET_52.0.2: + jmp ..B1.5 +.L_2TAG_PACKET_45.0.2: + movq 8(%rsp), %xmm0 + xorpd %xmm2, %xmm2 + movl $49136, %eax + pinsrw $3, %eax, %xmm2 + addsd %xmm0, %xmm2 + pextrw $3, %xmm2, %eax + cmpl $0, %eax + jne .L_2TAG_PACKET_53.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_53.0.2: + movq 16(%rsp), %xmm1 + movd %xmm1, %edx + movq %xmm1, %xmm3 + psrlq $20, %xmm3 + movd %xmm3, %ecx + orl %edx, %ecx + je .L_2TAG_PACKET_54.0.2 + addsd %xmm1, %xmm1 + movq %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_51.0.2: + pextrw $3, %xmm1, %eax + pextrw $3, %xmm2, %ecx + xorl %ecx, %eax + testl $32768, %eax + je .L_2TAG_PACKET_47.0.2 + jmp .L_2TAG_PACKET_46.0.2 +.L_2TAG_PACKET_54.0.2: + pextrw $3, %xmm0, %eax + andl $32752, %eax + pextrw $3, %xmm1, %edx + xorpd %xmm0, %xmm0 + subl $16368, %eax + xorl %edx, %eax + testl $32768, %eax + je .L_2TAG_PACKET_55.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_55.0.2: + movl $32752, %edx + pinsrw $3, %edx, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_17.0.2: + movq %xmm0, 24(%rsp) +..B1.3: + movq 24(%rsp), %xmm0 +.L_2TAG_PACKET_56.0.2: +..B1.5: + addq $40, %rsp +..___tag_value_pow.4: + ret +..___tag_value_pow.5: +END(pow) +# -- End pow + .section .rodata, "a" + .align 16 + .align 16 +HIGHSIGMASK: + .long 0 + .long 4294965248 + .long 0 + .long 4294965248 + .type HIGHSIGMASK,@object + .size HIGHSIGMASK,16 + .align 16 +LOG2_E: + .long 0 + .long 1073160192 + .long 370913857 + .long 3210587105 + .type LOG2_E,@object + .size LOG2_E,16 + .align 16 +coeff: + .long 1841914130 + .long 3213059448 + .long 3995341938 + .long 3214607105 + .long 2677381210 + .long 3216320731 + .long 3011779882 + .long 3218479542 + .long 1367832035 + .long 1066403058 + .long 2894285243 + .long 1067936923 + .long 1215221452 + .long 1069835102 + .long 370913857 + .long 3210587105 + .long 2677381210 + .long 3216320731 + .long 4172642429 + .long 1056068382 + .long 1215221451 + .long 1069835102 + .long 1092638156 + .long 3184925618 + .type coeff,@object + .size coeff,96 + .align 16 +L_tbl: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 536870912 + .long 1072689162 + .long 2523013013 + .long 1046157398 + .long 3758096384 + .long 1072685081 + .long 3851513758 + .long 3190968952 + .long 0 + .long 1072681007 + .long 2241466466 + .long 1046044599 + .long 3221225472 + .long 1072676937 + .long 2990928271 + .long 3193084984 + .long 3758096384 + .long 1072672873 + .long 2905112743 + .long 3192918576 + .long 1610612736 + .long 1072668815 + .long 3370591264 + .long 1046051793 + .long 2147483648 + .long 1072664762 + .long 3272361216 + .long 3193793653 + .long 3758096384 + .long 1072660714 + .long 46546755 + .long 1043206936 + .long 3221225472 + .long 1072656672 + .long 3017067724 + .long 3192177962 + .long 0 + .long 1072652636 + .long 3688436631 + .long 3192814956 + .long 2684354560 + .long 1072648604 + .long 1707461992 + .long 3193056712 + .long 2684354560 + .long 1072644578 + .long 1188114540 + .long 3193603086 + .long 3758096384 + .long 1072640557 + .long 3533180564 + .long 1045459375 + .long 2684354560 + .long 1072636542 + .long 2000337630 + .long 3193475557 + .long 2684354560 + .long 1072632532 + .long 3698062443 + .long 3193752766 + .long 3758096384 + .long 1072628527 + .long 3161606138 + .long 3190532995 + .long 2147483648 + .long 1072624528 + .long 3165265478 + .long 3193158459 + .long 1610612736 + .long 1072620534 + .long 1600940077 + .long 3193226777 + .long 2147483648 + .long 1072616545 + .long 1363272552 + .long 3192614278 + .long 3758096384 + .long 1072612561 + .long 3966209910 + .long 3191249654 + .long 2147483648 + .long 1072608583 + .long 1093672789 + .long 3190637330 + .long 1610612736 + .long 1072604610 + .long 1735239357 + .long 3192753616 + .long 1610612736 + .long 1072600642 + .long 1470665156 + .long 1045559697 + .long 2684354560 + .long 1072596679 + .long 3840624926 + .long 1045928953 + .long 536870912 + .long 1072592722 + .long 4259072556 + .long 3191035622 + .long 3221225472 + .long 1072588769 + .long 3613088753 + .long 3192165681 + .long 2147483648 + .long 1072584822 + .long 3175234446 + .long 1039486948 + .long 1610612736 + .long 1072580880 + .long 856576441 + .long 1045702812 + .long 2147483648 + .long 1072576943 + .long 2253498719 + .long 3193285334 + .long 2684354560 + .long 1072573011 + .long 1587070728 + .long 3190801577 + .long 3758096384 + .long 1072569084 + .long 159986317 + .long 1042519436 + .long 1073741824 + .long 1072565163 + .long 3999541949 + .long 3192020440 + .long 2684354560 + .long 1072561246 + .long 3281310262 + .long 1045586786 + .long 536870912 + .long 1072557335 + .long 3775179406 + .long 1045226055 + .long 3221225472 + .long 1072553428 + .long 643472356 + .long 3193681786 + .long 1073741824 + .long 1072549527 + .long 248169775 + .long 1045068977 + .long 3758096384 + .long 1072545630 + .long 307016632 + .long 1042640932 + .long 2147483648 + .long 1072541739 + .long 3872718526 + .long 3189781486 + .long 536870912 + .long 1072537853 + .long 969711630 + .long 3191724732 + .long 3221225472 + .long 1072533971 + .long 4018820394 + .long 3193189264 + .long 1073741824 + .long 1072530095 + .long 3102233092 + .long 1045510224 + .long 3758096384 + .long 1072526223 + .long 1029307912 + .long 3193812776 + .long 1073741824 + .long 1072522357 + .long 984083153 + .long 1045987403 + .long 3221225472 + .long 1072518495 + .long 4171455401 + .long 3193084080 + .long 0 + .long 1072514639 + .long 2592660757 + .long 1046121691 + .long 1073741824 + .long 1072510787 + .long 2964365712 + .long 1046054453 + .long 2147483648 + .long 1072506940 + .long 3792777877 + .long 3193704729 + .long 2147483648 + .long 1072503098 + .long 2948536104 + .long 3192467100 + .long 1610612736 + .long 1072499261 + .long 3836005619 + .long 1041873166 + .long 536870912 + .long 1072495429 + .long 3124543160 + .long 1044409168 + .long 3221225472 + .long 1072491601 + .long 286227933 + .long 1041065990 + .long 1073741824 + .long 1072487779 + .long 2111296776 + .long 3193604419 + .long 2147483648 + .long 1072483961 + .long 2606822001 + .long 3192940394 + .long 2147483648 + .long 1072480148 + .long 194696800 + .long 1046026063 + .long 1610612736 + .long 1072476340 + .long 8535452 + .long 1046200178 + .long 536870912 + .long 1072472537 + .long 950463625 + .long 3192731897 + .long 2147483648 + .long 1072468738 + .long 973831566 + .long 1045683197 + .long 3221225472 + .long 1072464944 + .long 3330435892 + .long 3190277577 + .long 3221225472 + .long 1072461155 + .long 208692097 + .long 3193517651 + .long 1610612736 + .long 1072457371 + .long 2113097415 + .long 1044781749 + .long 3758096384 + .long 1072453591 + .long 1088808936 + .long 3193716142 + .long 0 + .long 1072449817 + .long 1443002127 + .long 3193250205 + .long 3221225472 + .long 1072446046 + .long 3967357419 + .long 1046109477 + .long 1610612736 + .long 1072442281 + .long 3013517861 + .long 3193159691 + .long 2147483648 + .long 1072438520 + .long 2524586286 + .long 1046121951 + .long 1610612736 + .long 1072434764 + .long 1476892861 + .long 1046434731 + .long 0 + .long 1072431013 + .long 3089640950 + .long 3192305780 + .long 536870912 + .long 1072427266 + .long 3812255529 + .long 1045730879 + .long 0 + .long 1072423524 + .long 995354762 + .long 3191528673 + .long 1610612736 + .long 1072419786 + .long 3260567684 + .long 1046273695 + .long 2147483648 + .long 1072416053 + .long 2738210286 + .long 3191471516 + .long 536870912 + .long 1072412325 + .long 1931849805 + .long 1044560405 + .long 1610612736 + .long 1072408601 + .long 358896655 + .long 1044029237 + .long 1073741824 + .long 1072404882 + .long 2214589842 + .long 3193202126 + .long 2684354560 + .long 1072401167 + .long 3118097363 + .long 3192592906 + .long 2147483648 + .long 1072397457 + .long 1835998884 + .long 1045788247 + .long 0 + .long 1072393752 + .long 1585488319 + .long 1045289910 + .long 0 + .long 1072390051 + .long 480160949 + .long 1046030455 + .long 2684354560 + .long 1072386354 + .long 1832959667 + .long 3193013644 + .long 2684354560 + .long 1072382662 + .long 3611346555 + .long 1044544210 + .long 1073741824 + .long 1072378975 + .long 2749418734 + .long 3193712580 + .long 1073741824 + .long 1072375292 + .long 2390043472 + .long 3191710658 + .long 3221225472 + .long 1072371613 + .long 2828199902 + .long 1042265217 + .long 3221225472 + .long 1072367939 + .long 569209321 + .long 3191230982 + .long 536870912 + .long 1072364270 + .long 236159139 + .long 1046240123 + .long 536870912 + .long 1072360605 + .long 1010656270 + .long 3193813968 + .long 1610612736 + .long 1072356944 + .long 2409080597 + .long 1044025029 + .long 536870912 + .long 1072353288 + .long 598419513 + .long 1043327370 + .long 1073741824 + .long 1072349636 + .long 4105950479 + .long 1045747958 + .long 3758096384 + .long 1072345988 + .long 343243853 + .long 3192420172 + .long 3221225472 + .long 1072342345 + .long 2088439530 + .long 1046172091 + .long 536870912 + .long 1072338707 + .long 4117721107 + .long 1043882496 + .long 3758096384 + .long 1072335072 + .long 3192032958 + .long 3192998645 + .long 3758096384 + .long 1072331442 + .long 2366522518 + .long 1045401957 + .long 1610612736 + .long 1072327817 + .long 3685533141 + .long 3193701947 + .long 536870912 + .long 1072324196 + .long 1058658672 + .long 3193572492 + .long 536870912 + .long 1072320579 + .long 166346347 + .long 1045456348 + .long 2147483648 + .long 1072316966 + .long 2027889772 + .long 1046349302 + .long 1073741824 + .long 1072313358 + .long 1079497888 + .long 1044585259 + .long 1073741824 + .long 1072309754 + .long 2189851573 + .long 1045132990 + .long 2684354560 + .long 1072306154 + .long 2486629386 + .long 3193613625 + .long 536870912 + .long 1072302559 + .long 1263686579 + .long 1044789259 + .long 0 + .long 1072298968 + .long 2412061798 + .long 3191369627 + .long 536870912 + .long 1072295381 + .long 584315716 + .long 3193144135 + .long 1610612736 + .long 1072291798 + .long 449000738 + .long 1046330451 + .long 0 + .long 1072288220 + .long 3938320157 + .long 1044446220 + .long 3758096384 + .long 1072284645 + .long 2949844595 + .long 3193462371 + .long 3758096384 + .long 1072281075 + .long 2771329642 + .long 3192121593 + .long 536870912 + .long 1072277510 + .long 3971508621 + .long 3193002806 + .long 2147483648 + .long 1072273948 + .long 4071942301 + .long 1044952619 + .long 536870912 + .long 1072270391 + .long 2090502395 + .long 1044660556 + .long 0 + .long 1072266838 + .long 3657520961 + .long 3193770938 + .long 3758096384 + .long 1072263288 + .long 1608175110 + .long 1045543239 + .long 0 + .long 1072259744 + .long 2506924180 + .long 1045530501 + .long 1073741824 + .long 1072256203 + .long 18238493 + .long 1046305623 + .long 3221225472 + .long 1072252666 + .long 3862640487 + .long 3192882407 + .long 1073741824 + .long 1072249134 + .long 3850158761 + .long 1043656099 + .long 3758096384 + .long 1072245605 + .long 2356524356 + .long 1045915296 + .long 3221225472 + .long 1072242081 + .long 936497287 + .long 3193842353 + .long 2147483648 + .long 1072238561 + .long 2840845344 + .long 1046454771 + .long 2147483648 + .long 1072235045 + .long 3688100713 + .long 1044895451 + .long 2684354560 + .long 1072231533 + .long 479979913 + .long 3193842442 + .long 2684354560 + .long 1072228025 + .long 1016321898 + .long 1046251032 + .long 3758096384 + .long 1072224521 + .long 562232474 + .long 3191974558 + .long 536870912 + .long 1072221022 + .long 3870512029 + .long 3193113881 + .long 1610612736 + .long 1072217526 + .long 1239780547 + .long 3191583604 + .long 2684354560 + .long 1072214034 + .long 2815421327 + .long 1045873682 + .long 0 + .long 1072210547 + .long 2371009561 + .long 1041508792 + .long 1610612736 + .long 1072207063 + .long 1304636524 + .long 3192414284 + .long 3221225472 + .long 1072203583 + .long 210144854 + .long 3193327333 + .long 0 + .long 1072200108 + .long 1454303272 + .long 1046360024 + .long 1610612736 + .long 1072196636 + .long 2095757548 + .long 1044984677 + .long 3221225472 + .long 1072193168 + .long 2027215580 + .long 3192880933 + .long 0 + .long 1072189705 + .long 214794880 + .long 1043457954 + .long 1073741824 + .long 1072186245 + .long 884624917 + .long 1043497079 + .long 2147483648 + .long 1072182789 + .long 2792396634 + .long 3193171685 + .long 2684354560 + .long 1072179337 + .long 4128995250 + .long 3192103434 + .long 2684354560 + .long 1072175889 + .long 333866043 + .long 1046372325 + .long 3221225472 + .long 1072172445 + .long 2194445544 + .long 3193958905 + .long 2684354560 + .long 1072169005 + .long 2316082269 + .long 3192041703 + .long 1610612736 + .long 1072165569 + .long 581005057 + .long 1046322848 + .long 536870912 + .long 1072162137 + .long 3280786513 + .long 1045457251 + .long 3221225472 + .long 1072158708 + .long 2567093361 + .long 1044710359 + .long 1073741824 + .long 1072155284 + .long 3740443584 + .long 1044224237 + .long 2684354560 + .long 1072151863 + .long 3981028272 + .long 1042596351 + .long 3758096384 + .long 1072148446 + .long 3820011120 + .long 3191915623 + .long 0 + .long 1072145034 + .long 2946439484 + .long 3193831276 + .long 3758096384 + .long 1072141624 + .long 3075274422 + .long 3190132432 + .long 2684354560 + .long 1072138219 + .long 496052167 + .long 1043619760 + .long 1073741824 + .long 1072134818 + .long 271106589 + .long 3192265149 + .long 2684354560 + .long 1072131420 + .long 2091955684 + .long 1044443554 + .long 3758096384 + .long 1072128026 + .long 723240109 + .long 3191007419 + .long 3758096384 + .long 1072124636 + .long 1748629070 + .long 1044510075 + .long 3221225472 + .long 1072121250 + .long 3289522046 + .long 3193095178 + .long 1610612736 + .long 1072117868 + .long 3599052146 + .long 3193720427 + .long 3221225472 + .long 1072114489 + .long 2446758135 + .long 3193436303 + .long 3758096384 + .long 1072111114 + .long 1652171097 + .long 3192137173 + .long 3221225472 + .long 1072107743 + .long 1353007155 + .long 1044523902 + .long 1610612736 + .long 1072104376 + .long 990601105 + .long 1046296663 + .long 3758096384 + .long 1072101012 + .long 2228627618 + .long 3193041040 + .long 0 + .long 1072097653 + .long 812484756 + .long 3191950723 + .long 3758096384 + .long 1072094296 + .long 817833130 + .long 3192279242 + .long 2147483648 + .long 1072090944 + .long 3563228521 + .long 3193810951 + .long 3221225472 + .long 1072087595 + .long 2729108859 + .long 3190936185 + .long 3221225472 + .long 1072084250 + .long 2249121662 + .long 3190639690 + .long 2147483648 + .long 1072080909 + .long 4082471745 + .long 3193929368 + .long 3758096384 + .long 1072077571 + .long 2827323806 + .long 3193708561 + .long 3758096384 + .long 1072074237 + .long 735866167 + .long 1042434690 + .long 2684354560 + .long 1072070907 + .long 3240808889 + .long 3191918422 + .long 0 + .long 1072067581 + .long 466482777 + .long 3186962221 + .long 0 + .long 1072064258 + .long 1576076296 + .long 1045849056 + .long 3221225472 + .long 1072060938 + .long 2751923560 + .long 3191910703 + .long 0 + .long 1072057623 + .long 1908755527 + .long 1046437515 + .long 0 + .long 1072054311 + .long 3175841411 + .long 1044572886 + .long 2684354560 + .long 1072051002 + .long 1633258450 + .long 3192670420 + .long 3221225472 + .long 1072047697 + .long 1867746657 + .long 1045726209 + .long 2684354560 + .long 1072044396 + .long 338968864 + .long 3193084662 + .long 0 + .long 1072041099 + .long 1501742471 + .long 3191742031 + .long 0 + .long 1072037805 + .long 4266775786 + .long 3192686970 + .long 2147483648 + .long 1072034514 + .long 4249283553 + .long 1045769728 + .long 2684354560 + .long 1072031227 + .long 2758366873 + .long 1046402161 + .long 1610612736 + .long 1072027944 + .long 2161186990 + .long 1044736865 + .long 2684354560 + .long 1072024664 + .long 810300171 + .long 1045748777 + .long 2147483648 + .long 1072021388 + .long 183688927 + .long 3191515581 + .long 3758096384 + .long 1072018115 + .long 368874072 + .long 3192363575 + .long 3221225472 + .long 1072014846 + .long 2459092970 + .long 1041794640 + .long 536870912 + .long 1072011581 + .long 867488640 + .long 1046310291 + .long 536870912 + .long 1072008319 + .long 50140871 + .long 1043327329 + .long 2684354560 + .long 1072005060 + .long 1241902518 + .long 3192739252 + .long 2684354560 + .long 1072001805 + .long 1027881659 + .long 3193858388 + .long 0 + .long 1071998554 + .long 38457322 + .long 1045489179 + .long 0 + .long 1071995306 + .long 3432963337 + .long 3190969347 + .long 1610612736 + .long 1071992061 + .long 534931792 + .long 1046302734 + .long 1610612736 + .long 1071988820 + .long 1817895268 + .long 3192551860 + .long 3221225472 + .long 1071985582 + .long 357237383 + .long 3191870833 + .long 2684354560 + .long 1071982348 + .long 108262401 + .long 3193365867 + .long 3758096384 + .long 1071979117 + .long 1964729244 + .long 1042502249 + .long 2684354560 + .long 1071975890 + .long 2088446957 + .long 1038010503 + .long 3221225472 + .long 1071972666 + .long 2947239447 + .long 1046377845 + .long 1610612736 + .long 1071969446 + .long 774932072 + .long 1046064854 + .long 2147483648 + .long 1071966229 + .long 4080937590 + .long 3193041284 + .long 3758096384 + .long 1071963015 + .long 2208251454 + .long 1045945089 + .long 3221225472 + .long 1071959805 + .long 2850924475 + .long 1045650959 + .long 0 + .long 1071956599 + .long 714040997 + .long 1046275153 + .long 3221225472 + .long 1071953395 + .long 85533782 + .long 3192816920 + .long 3221225472 + .long 1071950195 + .long 1252511005 + .long 1044805706 + .long 1073741824 + .long 1071946999 + .long 2384659038 + .long 3193391602 + .long 0 + .long 1071943806 + .long 416481813 + .long 1043730233 + .long 536870912 + .long 1071940616 + .long 1675424499 + .long 1046348030 + .long 3221225472 + .long 1071937429 + .long 1175989513 + .long 3193009113 + .long 2684354560 + .long 1071934246 + .long 2400084650 + .long 3192451713 + .long 3758096384 + .long 1071931066 + .long 1467335692 + .long 3193350868 + .long 1610612736 + .long 1071927890 + .long 266493801 + .long 1044954481 + .long 1073741824 + .long 1071924717 + .long 3919093445 + .long 1046023575 + .long 2147483648 + .long 1071921547 + .long 3017408483 + .long 1044880828 + .long 536870912 + .long 1071918381 + .long 948849966 + .long 3193892224 + .long 3758096384 + .long 1071915217 + .long 1870232600 + .long 1045777228 + .long 536870912 + .long 1071912058 + .long 822381492 + .long 3193639186 + .long 2147483648 + .long 1071908901 + .long 788243705 + .long 1044966343 + .long 1073741824 + .long 1071905748 + .long 1344278809 + .long 1044428545 + .long 1073741824 + .long 1071902598 + .long 172864300 + .long 1045765608 + .long 2684354560 + .long 1071899451 + .long 211555467 + .long 3192963574 + .long 536870912 + .long 1071896308 + .long 3373438023 + .long 1045643168 + .long 0 + .long 1071893168 + .long 2867180960 + .long 3189945998 + .long 536870912 + .long 1071890031 + .long 36724362 + .long 3193240584 + .long 1610612736 + .long 1071886897 + .long 2140176984 + .long 1045945349 + .long 0 + .long 1071883767 + .long 436842360 + .long 1040712587 + .long 3758096384 + .long 1071880639 + .long 1225147329 + .long 3193814594 + .long 3758096384 + .long 1071877515 + .long 1586157348 + .long 3191614322 + .long 536870912 + .long 1071874395 + .long 3329332918 + .long 1041699791 + .long 2684354560 + .long 1071871277 + .long 1635968041 + .long 3191783756 + .long 1073741824 + .long 1071868163 + .long 2876158382 + .long 1046097093 + .long 1073741824 + .long 1071865052 + .long 4267556964 + .long 3193723000 + .long 1073741824 + .long 1071861944 + .long 195475940 + .long 1045520795 + .long 2147483648 + .long 1071858839 + .long 2239193514 + .long 1046478675 + .long 0 + .long 1071855738 + .long 4168275596 + .long 1044926285 + .long 2684354560 + .long 1071852639 + .long 142514114 + .long 1045595182 + .long 2147483648 + .long 1071849544 + .long 1943457984 + .long 3192930015 + .long 2147483648 + .long 1071846452 + .long 202659489 + .long 3193926317 + .long 2684354560 + .long 1071843363 + .long 2208408789 + .long 3193857484 + .long 3758096384 + .long 1071840277 + .long 2237297552 + .long 3192939576 + .long 1073741824 + .long 1071837195 + .long 2726920839 + .long 1044193954 + .long 3758096384 + .long 1071834115 + .long 2337732207 + .long 3193611773 + .long 2147483648 + .long 1071831039 + .long 1390088602 + .long 1044000317 + .long 1610612736 + .long 1071827966 + .long 3806188736 + .long 3193463913 + .long 1073741824 + .long 1071824896 + .long 1795276560 + .long 1043671965 + .long 1073741824 + .long 1071821829 + .long 2960792799 + .long 1046240474 + .long 2147483648 + .long 1071818765 + .long 3350591592 + .long 3193333939 + .long 3221225472 + .long 1071815704 + .long 408870754 + .long 3193322854 + .long 0 + .long 1071812647 + .long 4146717132 + .long 1046063520 + .long 2147483648 + .long 1071809592 + .long 1681114919 + .long 3192114313 + .long 0 + .long 1071806541 + .long 1098393137 + .long 3190846732 + .long 2684354560 + .long 1071803492 + .long 2437484983 + .long 3193448718 + .long 1073741824 + .long 1071800447 + .long 1036809185 + .long 3192023501 + .long 0 + .long 1071797405 + .long 659668848 + .long 3193596312 + .long 3221225472 + .long 1071794365 + .long 1112062459 + .long 3192773376 + .long 2147483648 + .long 1071791329 + .long 4082956335 + .long 1045830513 + .long 1610612736 + .long 1071788296 + .long 2387089965 + .long 1045532601 + .long 1610612736 + .long 1071785266 + .long 1522101980 + .long 3193941957 + .long 1073741824 + .long 1071782239 + .long 2157197585 + .long 3188193305 + .long 1073741824 + .long 1071779215 + .long 946810220 + .long 3193223819 + .long 1073741824 + .long 1071776194 + .long 4069942444 + .long 3193878549 + .long 536870912 + .long 1071773176 + .long 1693463440 + .long 1046360588 + .long 536870912 + .long 1071770161 + .long 1954543254 + .long 1046409381 + .long 1073741824 + .long 1071767149 + .long 1050471249 + .long 3193933095 + .long 536870912 + .long 1071764140 + .long 1256240478 + .long 1046456865 + .long 536870912 + .long 1071761134 + .long 676764254 + .long 1046055503 + .long 536870912 + .long 1071758131 + .long 1421032967 + .long 1044779786 + .long 536870912 + .long 1071755131 + .long 38735992 + .long 3192766355 + .long 0 + .long 1071752134 + .long 2960669690 + .long 1044484680 + .long 3758096384 + .long 1071749139 + .long 788707382 + .long 1045299895 + .long 3221225472 + .long 1071746148 + .long 685689300 + .long 1040778831 + .long 2147483648 + .long 1071743160 + .long 1170994182 + .long 1046159174 + .long 1073741824 + .long 1071740175 + .long 64591436 + .long 1046153849 + .long 0 + .long 1071737193 + .long 2338031659 + .long 3189997702 + .long 2684354560 + .long 1071734213 + .long 1941624568 + .long 3186752676 + .long 536870912 + .long 1071731237 + .long 1401255580 + .long 1046383990 + .long 2684354560 + .long 1071728263 + .long 376888427 + .long 1045896456 + .long 536870912 + .long 1071725293 + .long 2831424639 + .long 3193539109 + .long 1610612736 + .long 1071722325 + .long 3303123696 + .long 1044599415 + .long 2684354560 + .long 1071719360 + .long 1077295329 + .long 3189877372 + .long 3221225472 + .long 1071716398 + .long 1434061099 + .long 3184529771 + .long 3221225472 + .long 1071713439 + .long 2104991590 + .long 1045062074 + .long 3221225472 + .long 1071710483 + .long 722060869 + .long 3193788526 + .long 536870912 + .long 1071704580 + .long 3928796486 + .long 1046129020 + .long 536870912 + .long 1071698688 + .long 588844628 + .long 1045492135 + .long 2684354560 + .long 1071692807 + .long 326739366 + .long 3193004445 + .long 1610612736 + .long 1071686938 + .long 2456436042 + .long 1046278169 + .long 2684354560 + .long 1071681080 + .long 2831303512 + .long 1043670046 + .long 536870912 + .long 1071675234 + .long 607223418 + .long 1045507322 + .long 0 + .long 1071669399 + .long 4254921332 + .long 3193290483 + .long 0 + .long 1071663575 + .long 914994333 + .long 3191263853 + .long 1073741824 + .long 1071657762 + .long 4147050180 + .long 3193228552 + .long 2684354560 + .long 1071651960 + .long 594554157 + .long 3193503935 + .long 0 + .long 1071646170 + .long 1062846796 + .long 1045944331 + .long 1073741824 + .long 1071636109 + .long 2909238893 + .long 3193436884 + .long 1073741824 + .long 1071624572 + .long 1682918119 + .long 1042211899 + .long 1073741824 + .long 1071613057 + .long 2419209426 + .long 1045437062 + .long 1073741824 + .long 1071601564 + .long 2951341321 + .long 3190193214 + .long 0 + .long 1071590093 + .long 3084900875 + .long 3192394907 + .long 1073741824 + .long 1071578643 + .long 999567454 + .long 1046433447 + .long 2147483648 + .long 1071567215 + .long 1570101857 + .long 3193291160 + .long 0 + .long 1071555809 + .long 1080647881 + .long 3185154585 + .long 0 + .long 1071544424 + .long 3526309177 + .long 1044843640 + .long 2147483648 + .long 1071533060 + .long 2213463349 + .long 3191738930 + .long 1073741824 + .long 1071521718 + .long 1039925195 + .long 3192618353 + .long 1073741824 + .long 1071510397 + .long 2115757280 + .long 3193671567 + .long 1073741824 + .long 1071499097 + .long 1188751495 + .long 3191145560 + .long 2147483648 + .long 1071487818 + .long 3983461449 + .long 3193897029 + .long 2147483648 + .long 1071476560 + .long 782141500 + .long 1042879962 + .long 2147483648 + .long 1071465323 + .long 4038904626 + .long 1045063881 + .long 2147483648 + .long 1071454107 + .long 2613036921 + .long 3193217642 + .long 0 + .long 1071442912 + .long 2095723435 + .long 1044629175 + .long 1073741824 + .long 1071431737 + .long 3879795974 + .long 1045767874 + .long 1073741824 + .long 1071420583 + .long 2662198042 + .long 3191434637 + .long 3221225472 + .long 1071409449 + .long 4037605722 + .long 3193703090 + .long 2147483648 + .long 1071398336 + .long 1860331835 + .long 1040814822 + .long 3221225472 + .long 1071387243 + .long 1522972033 + .long 3190305974 + .long 1073741824 + .long 1071376171 + .long 2361534207 + .long 1043699366 + .long 0 + .long 1071365119 + .long 4180309179 + .long 1044142099 + .long 0 + .long 1071354087 + .long 1201038528 + .long 3192968772 + .long 0 + .long 1071343075 + .long 1342478171 + .long 3193251215 + .long 0 + .long 1071332083 + .long 3836883348 + .long 3193472007 + .long 3221225472 + .long 1071321110 + .long 3864874250 + .long 1045593126 + .long 2147483648 + .long 1071310158 + .long 2169494998 + .long 1046045346 + .long 1073741824 + .long 1071299226 + .long 3785165075 + .long 3193319246 + .long 2147483648 + .long 1071288313 + .long 1137692678 + .long 3192716779 + .long 1073741824 + .long 1071277420 + .long 1752107598 + .long 1046366120 + .long 3221225472 + .long 1071266546 + .long 1912656912 + .long 1046352281 + .long 3221225472 + .long 1071255692 + .long 2882676334 + .long 1046406353 + .long 1073741824 + .long 1071244858 + .long 963612460 + .long 1045282811 + .long 0 + .long 1071234043 + .long 3811255773 + .long 1046231636 + .long 1073741824 + .long 1071223247 + .long 1126055989 + .long 3192224037 + .long 2147483648 + .long 1071212470 + .long 2079145427 + .long 1044432413 + .long 0 + .long 1071201713 + .long 3611595621 + .long 1043358745 + .long 2147483648 + .long 1071190974 + .long 390522769 + .long 1045888252 + .long 1073741824 + .long 1071180255 + .long 4087939723 + .long 3192930745 + .long 3221225472 + .long 1071169554 + .long 1451494480 + .long 3190219274 + .long 1073741824 + .long 1071158873 + .long 427176194 + .long 3193042022 + .long 2147483648 + .long 1071148210 + .long 1882381948 + .long 3192727946 + .long 2147483648 + .long 1071137566 + .long 3736313771 + .long 3192087019 + .long 1073741824 + .long 1071126941 + .long 1560398816 + .long 3193185715 + .long 2147483648 + .long 1071116334 + .long 1021942441 + .long 1041526696 + .long 2147483648 + .long 1071105746 + .long 3517080249 + .long 3193576041 + .long 3221225472 + .long 1071095176 + .long 2248589878 + .long 1044527624 + .long 2147483648 + .long 1071084625 + .long 2412896695 + .long 1046112867 + .long 3221225472 + .long 1071074092 + .long 3834725738 + .long 1044562378 + .long 1073741824 + .long 1071063578 + .long 1150920407 + .long 1043768986 + .long 0 + .long 1071053082 + .long 1379393428 + .long 3188690690 + .long 0 + .long 1071042604 + .long 3058183278 + .long 3193617655 + .long 0 + .long 1071032144 + .long 421133665 + .long 3193417186 + .long 0 + .long 1071021702 + .long 2860161357 + .long 3191816125 + .long 0 + .long 1071011278 + .long 1742405964 + .long 1043580240 + .long 0 + .long 1071000872 + .long 2821215927 + .long 3188984273 + .long 3221225472 + .long 1070990483 + .long 510275597 + .long 1045813401 + .long 2147483648 + .long 1070980113 + .long 304266588 + .long 3191193536 + .long 3221225472 + .long 1070969760 + .long 1854784211 + .long 1046302073 + .long 0 + .long 1070959426 + .long 3773082854 + .long 3193008899 + .long 2147483648 + .long 1070949108 + .long 3003572392 + .long 1046404879 + .long 3221225472 + .long 1070938808 + .long 1702149204 + .long 1046407257 + .long 2147483648 + .long 1070928526 + .long 3935314439 + .long 1046438280 + .long 3221225472 + .long 1070918261 + .long 2677087609 + .long 1045501749 + .long 2147483648 + .long 1070908014 + .long 4190598039 + .long 3193640515 + .long 1073741824 + .long 1070897784 + .long 368874072 + .long 1044879927 + .long 2147483648 + .long 1070887571 + .long 3584052697 + .long 3192024662 + .long 3221225472 + .long 1070877375 + .long 3762307829 + .long 1045886918 + .long 1073741824 + .long 1070867197 + .long 495710920 + .long 1046317072 + .long 0 + .long 1070857036 + .long 2292768238 + .long 3190887508 + .long 3221225472 + .long 1070846891 + .long 1044078151 + .long 3193772914 + .long 1073741824 + .long 1070836764 + .long 3266010457 + .long 1043443755 + .long 3221225472 + .long 1070826653 + .long 3571665822 + .long 1045547823 + .long 1073741824 + .long 1070816560 + .long 393348347 + .long 3190525143 + .long 2147483648 + .long 1070806483 + .long 4241722498 + .long 3192084193 + .long 2147483648 + .long 1070796423 + .long 1693797068 + .long 3192807972 + .long 0 + .long 1070786380 + .long 2860086745 + .long 1046331646 + .long 2147483648 + .long 1070776353 + .long 1366141759 + .long 3192979363 + .long 1073741824 + .long 1070766343 + .long 737899283 + .long 1045853346 + .long 3221225472 + .long 1070756349 + .long 88734873 + .long 1043881257 + .long 3221225472 + .long 1070746372 + .long 1438003315 + .long 3192917101 + .long 0 + .long 1070736412 + .long 1066505530 + .long 1043896695 + .long 3221225472 + .long 1070726467 + .long 2706653041 + .long 3191113643 + .long 3221225472 + .long 1070716539 + .long 1321764476 + .long 1039573724 + .long 0 + .long 1070706628 + .long 1126753211 + .long 1044502976 + .long 2147483648 + .long 1070696732 + .long 773642884 + .long 1044110727 + .long 1073741824 + .long 1070686853 + .long 1263743406 + .long 3193115278 + .long 0 + .long 1070676990 + .long 3115237732 + .long 3193089176 + .long 3221225472 + .long 1070667142 + .long 3642626838 + .long 3191146032 + .long 2147483648 + .long 1070657311 + .long 2091696428 + .long 1044337177 + .long 1073741824 + .long 1070647496 + .long 3168958391 + .long 1044197568 + .long 0 + .long 1070637697 + .long 711148669 + .long 3193181047 + .long 2147483648 + .long 1070627913 + .long 4207182773 + .long 3193402092 + .long 3221225472 + .long 1070618145 + .long 918070640 + .long 3192902845 + .long 3221225472 + .long 1070608393 + .long 3135571447 + .long 3192193928 + .long 2147483648 + .long 1070598657 + .long 1043705517 + .long 3193188604 + .long 2147483648 + .long 1070581777 + .long 1886680492 + .long 1043890286 + .long 2147483648 + .long 1070562367 + .long 3373799420 + .long 3191917802 + .long 2147483648 + .long 1070542988 + .long 2919618025 + .long 3192461752 + .long 2147483648 + .long 1070523640 + .long 2926365158 + .long 3193113492 + .long 0 + .long 1070504323 + .long 519978638 + .long 1045918846 + .long 0 + .long 1070485037 + .long 3665353151 + .long 3193546248 + .long 0 + .long 1070465781 + .long 2327718958 + .long 1045050797 + .long 0 + .long 1070446556 + .long 345326861 + .long 3188224716 + .long 2147483648 + .long 1070427361 + .long 2263747488 + .long 3192871328 + .long 0 + .long 1070408197 + .long 3894192264 + .long 1045693123 + .long 0 + .long 1070389063 + .long 994321593 + .long 1046347203 + .long 2147483648 + .long 1070369959 + .long 3540366700 + .long 1042296230 + .long 0 + .long 1070350886 + .long 966420752 + .long 3192400412 + .long 2147483648 + .long 1070331842 + .long 1954511160 + .long 3193467762 + .long 2147483648 + .long 1070312828 + .long 1875003040 + .long 1045485629 + .long 0 + .long 1070293845 + .long 4003372005 + .long 3193714109 + .long 2147483648 + .long 1070274890 + .long 2216083644 + .long 1045720399 + .long 0 + .long 1070255966 + .long 1240985743 + .long 1045879414 + .long 0 + .long 1070237071 + .long 1573064162 + .long 1046427916 + .long 0 + .long 1070218206 + .long 2500166582 + .long 3193848169 + .long 2147483648 + .long 1070199369 + .long 862131539 + .long 1045606065 + .long 0 + .long 1070180563 + .long 3733427622 + .long 3193545988 + .long 0 + .long 1070161785 + .long 124515358 + .long 1045504766 + .long 2147483648 + .long 1070143036 + .long 689228007 + .long 1044238436 + .long 0 + .long 1070124317 + .long 976284835 + .long 3189879978 + .long 2147483648 + .long 1070105626 + .long 2997446224 + .long 3193394244 + .long 2147483648 + .long 1070086964 + .long 594985163 + .long 3190453447 + .long 2147483648 + .long 1070068331 + .long 3634411091 + .long 3193012662 + .long 0 + .long 1070049727 + .long 841316482 + .long 3192551604 + .long 0 + .long 1070031151 + .long 518949849 + .long 3189505693 + .long 2147483648 + .long 1070012603 + .long 207633604 + .long 1043791305 + .long 2147483648 + .long 1069994084 + .long 925415631 + .long 3189658670 + .long 2147483648 + .long 1069975593 + .long 3348775015 + .long 1046231055 + .long 0 + .long 1069957131 + .long 4137593961 + .long 1045760644 + .long 2147483648 + .long 1069938696 + .long 3081207972 + .long 1046319652 + .long 2147483648 + .long 1069920290 + .long 2912811806 + .long 3193250863 + .long 0 + .long 1069901912 + .long 1704663230 + .long 3192651171 + .long 2147483648 + .long 1069883561 + .long 1726887473 + .long 3193427817 + .long 2147483648 + .long 1069865238 + .long 516302873 + .long 1042556919 + .long 2147483648 + .long 1069846943 + .long 3737277289 + .long 3192083505 + .long 0 + .long 1069828676 + .long 2829909067 + .long 3191628520 + .long 0 + .long 1069810436 + .long 3474800299 + .long 3187384991 + .long 2147483648 + .long 1069792223 + .long 2041291754 + .long 3186735048 + .long 2147483648 + .long 1069774038 + .long 3100739290 + .long 3192991951 + .long 2147483648 + .long 1069755880 + .long 2641686866 + .long 1042449846 + .long 0 + .long 1069737750 + .long 1353612457 + .long 3192928544 + .long 2147483648 + .long 1069719646 + .long 1823398190 + .long 3193125156 + .long 0 + .long 1069701570 + .long 2629108558 + .long 3192983089 + .long 2147483648 + .long 1069683520 + .long 314889080 + .long 3193178947 + .long 2147483648 + .long 1069665497 + .long 3426846470 + .long 1046055034 + .long 0 + .long 1069647502 + .long 2451521798 + .long 3193081447 + .long 2147483648 + .long 1069629532 + .long 963200030 + .long 1046315089 + .long 0 + .long 1069611590 + .long 3644976987 + .long 1046450297 + .long 2147483648 + .long 1069593674 + .long 1514045874 + .long 3193337489 + .long 0 + .long 1069575785 + .long 2640752615 + .long 3192734715 + .long 0 + .long 1069557922 + .long 177381730 + .long 3193107348 + .long 0 + .long 1069532650 + .long 546871269 + .long 1045601847 + .long 0 + .long 1069497029 + .long 2220408187 + .long 1045964849 + .long 0 + .long 1069461461 + .long 3101209784 + .long 3192417098 + .long 0 + .long 1069425944 + .long 3768825782 + .long 1046196178 + .long 0 + .long 1069390480 + .long 737308942 + .long 1043872555 + .long 0 + .long 1069355068 + .long 1944808119 + .long 3193362317 + .long 0 + .long 1069319707 + .long 852406261 + .long 3191004250 + .long 0 + .long 1069284398 + .long 3202370743 + .long 3192549796 + .long 0 + .long 1069249140 + .long 900633975 + .long 1043862575 + .long 0 + .long 1069213934 + .long 3417168564 + .long 3193213168 + .long 0 + .long 1069178778 + .long 2513309972 + .long 1046051953 + .long 0 + .long 1069143674 + .long 1836846968 + .long 1044036653 + .long 0 + .long 1069108621 + .long 675391362 + .long 3193334972 + .long 0 + .long 1069073618 + .long 1859398086 + .long 3191668729 + .long 0 + .long 1069038666 + .long 3835994043 + .long 3193252196 + .long 0 + .long 1069003764 + .long 563337246 + .long 3192060530 + .long 0 + .long 1068968912 + .long 3715154210 + .long 1045592716 + .long 0 + .long 1068934111 + .long 51415636 + .long 3192193939 + .long 0 + .long 1068899359 + .long 822049108 + .long 1045846080 + .long 0 + .long 1068864658 + .long 3739043340 + .long 3193184949 + .long 0 + .long 1068830006 + .long 2500828997 + .long 3193115638 + .long 0 + .long 1068795403 + .long 1479335089 + .long 1045458233 + .long 0 + .long 1068760850 + .long 1914098598 + .long 1045079833 + .long 0 + .long 1068726346 + .long 1470374909 + .long 1046125471 + .long 0 + .long 1068691892 + .long 2048101185 + .long 3192960024 + .long 0 + .long 1068657486 + .long 801101802 + .long 1042523454 + .long 0 + .long 1068623129 + .long 412171467 + .long 1044799425 + .long 0 + .long 1068588821 + .long 2124566049 + .long 1040459843 + .long 0 + .long 1068554561 + .long 2087558263 + .long 1046083102 + .long 0 + .long 1068520350 + .long 290389316 + .long 1045220023 + .long 0 + .long 1068473430 + .long 393737815 + .long 1045770085 + .long 0 + .long 1068405202 + .long 3273111658 + .long 3193594336 + .long 0 + .long 1068337068 + .long 3076935419 + .long 3191993934 + .long 0 + .long 1068269030 + .long 1564279721 + .long 1040713632 + .long 0 + .long 1068201088 + .long 1950103787 + .long 3191285473 + .long 0 + .long 1068133240 + .long 111301617 + .long 1046140470 + .long 0 + .long 1068065488 + .long 2740933659 + .long 1046091898 + .long 0 + .long 1067997832 + .long 1267131462 + .long 3192947024 + .long 0 + .long 1067930268 + .long 629787343 + .long 1045599114 + .long 0 + .long 1067862800 + .long 2943029746 + .long 3191100621 + .long 0 + .long 1067795426 + .long 2538631151 + .long 3193953989 + .long 0 + .long 1067728144 + .long 3881795033 + .long 3191377363 + .long 0 + .long 1067660956 + .long 2752747058 + .long 3186250103 + .long 0 + .long 1067593862 + .long 892170014 + .long 3193330390 + .long 0 + .long 1067526860 + .long 2000985783 + .long 3192968647 + .long 0 + .long 1067459950 + .long 1954077304 + .long 1044399908 + .long 0 + .long 1067335900 + .long 4120702847 + .long 3193150730 + .long 0 + .long 1067202448 + .long 353489980 + .long 1045676744 + .long 0 + .long 1067069184 + .long 2609643324 + .long 3192108001 + .long 0 + .long 1066936100 + .long 2904433317 + .long 1044836541 + .long 0 + .long 1066803200 + .long 319656790 + .long 1044863904 + .long 0 + .long 1066670484 + .long 2407987331 + .long 3192995083 + .long 0 + .long 1066537948 + .long 2437746120 + .long 3193127733 + .long 0 + .long 1066405592 + .long 762570215 + .long 3189946997 + .long 0 + .long 1066145040 + .long 3317159694 + .long 1046060125 + .long 0 + .long 1065881056 + .long 2317845886 + .long 3191679176 + .long 0 + .long 1065617424 + .long 3665195816 + .long 1045633853 + .long 0 + .long 1065354160 + .long 2008730355 + .long 3193898211 + .long 0 + .long 1064829264 + .long 3746236192 + .long 1046121471 + .long 0 + .long 1064303680 + .long 885296753 + .long 3191852441 + .long 0 + .long 1063253696 + .long 449976495 + .long 3192682663 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .type L_tbl,@object + .size L_tbl,8208 + .space 496, 0x00 # pad + .align 16 +HIGHMASK_Y: + .long 0 + .long 4294967288 + .long 0 + .long 4294967295 + .type HIGHMASK_Y,@object + .size HIGHMASK_Y,16 + .align 16 +T_exp: + .long 0 + .long 1072693248 + .long 0 + .long 997195776 + .long 4200250559 + .long 1072696090 + .long 2808127345 + .long 3162830514 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 339411585 + .long 1072701800 + .long 264588982 + .long 3162685233 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 772914124 + .long 1072707540 + .long 4004372762 + .long 1013278737 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 1928746161 + .long 1072713311 + .long 983617676 + .long 1015333753 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 238821257 + .long 1072719114 + .long 1469694871 + .long 3163933563 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 728934454 + .long 1072724948 + .long 1413842688 + .long 1015227188 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 4133881824 + .long 1072730813 + .long 2148155345 + .long 3163979875 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 2602514713 + .long 1072736711 + .long 2268929336 + .long 1015402860 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 1172597893 + .long 1072742641 + .long 114433263 + .long 1016396169 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 590962156 + .long 1072748603 + .long 3829346666 + .long 3164324173 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 1608493509 + .long 1072754597 + .long 3159622171 + .long 3163856313 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 685187902 + .long 1072760624 + .long 378731989 + .long 1015891691 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 2875075254 + .long 1072766683 + .long 4144233330 + .long 3164382292 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 351405227 + .long 1072772776 + .long 3125337328 + .long 3160871055 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 2471440686 + .long 1072778901 + .long 968836267 + .long 3163263464 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1416741826 + .long 1072785060 + .long 2196380210 + .long 1012462139 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 2257959872 + .long 1072791252 + .long 3802946148 + .long 1014013503 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 1480023343 + .long 1072797478 + .long 2247196168 + .long 1016376029 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 4162030108 + .long 1072803737 + .long 2763428480 + .long 1016577925 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 2502433899 + .long 1072810031 + .long 2148595913 + .long 1016072567 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 1588871207 + .long 1072816359 + .long 143439582 + .long 3164011992 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2218315341 + .long 1072822721 + .long 2694295388 + .long 3164337444 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 897099801 + .long 1072829118 + .long 754756297 + .long 1016289581 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 2725843665 + .long 1072835549 + .long 1433917087 + .long 1015887099 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 4219606026 + .long 1072842015 + .long 2434574742 + .long 1015730124 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1897844341 + .long 1072848517 + .long 1254300460 + .long 1016324514 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 874372905 + .long 1072855054 + .long 100263788 + .long 1016989308 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 1972484976 + .long 1072861626 + .long 675290301 + .long 3162688626 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 1724976915 + .long 1072868234 + .long 420909223 + .long 3164165955 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 964107055 + .long 1072874878 + .long 2800439588 + .long 3163881797 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 526652809 + .long 1072881558 + .long 4223459736 + .long 1016927951 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 1253935211 + .long 1072888274 + .long 1395382931 + .long 3160751189 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 3991843581 + .long 1072895026 + .long 4092853457 + .long 1015634339 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 1000925746 + .long 1072901816 + .long 1018491672 + .long 3164358120 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1726216749 + .long 1072908642 + .long 2466808228 + .long 3162724981 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 2732492859 + .long 1072915505 + .long 2691479646 + .long 3163304260 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 589198666 + .long 1072922406 + .long 2664346172 + .long 3164206538 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 460407023 + .long 1072929344 + .long 4237175092 + .long 3164187045 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3219942644 + .long 1072936319 + .long 3798990616 + .long 1016417382 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1156440435 + .long 1072943333 + .long 2351451249 + .long 1015015632 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 3743175029 + .long 1072950384 + .long 2072812490 + .long 3163223651 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 3278348324 + .long 1072957474 + .long 3069497416 + .long 1015799288 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 654919306 + .long 1072964603 + .long 3232961757 + .long 3164096045 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1065662932 + .long 1072971770 + .long 2533670915 + .long 1015578814 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 1118294578 + .long 1072978976 + .long 2197495694 + .long 3160957977 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 1720398391 + .long 1072986221 + .long 3980678963 + .long 3164348656 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 3784486610 + .long 1072993505 + .long 1581883040 + .long 3162747529 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3933059031 + .long 1073000829 + .long 2133366768 + .long 3162580408 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 3088564500 + .long 1073008193 + .long 1762311517 + .long 1016094249 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 2178460671 + .long 1073015597 + .long 777878098 + .long 3163891069 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2135241198 + .long 1073023041 + .long 1236747871 + .long 1014637723 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 3896463087 + .long 1073030525 + .long 1139797873 + .long 3162282381 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 4109806887 + .long 1073038050 + .long 422403966 + .long 1015517805 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 3723038930 + .long 1073045616 + .long 378465264 + .long 3163618158 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3689071823 + .long 1073053223 + .long 2321004996 + .long 3163601292 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 671025100 + .long 1073060872 + .long 3832014351 + .long 3164070606 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 4222122499 + .long 1073068561 + .long 1277378074 + .long 3164305313 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 2425981843 + .long 1073076293 + .long 2830390851 + .long 3164395175 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 551349105 + .long 1073084067 + .long 3821916050 + .long 3163155165 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 3872257780 + .long 1073091882 + .long 1253592103 + .long 1017006910 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 488188413 + .long 1073099741 + .long 3199821029 + .long 1016612624 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 4273770423 + .long 1073107641 + .long 3383180809 + .long 3164267477 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3339203574 + .long 1073115585 + .long 1483497780 + .long 3163457330 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 2979960120 + .long 1073123572 + .long 2599109725 + .long 1015547069 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 4201977662 + .long 1073131602 + .long 748330254 + .long 1014642933 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 3721688645 + .long 1073139676 + .long 3069276937 + .long 1016887977 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 2555984613 + .long 1073147794 + .long 2652555442 + .long 3163601268 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 1727278727 + .long 1073155956 + .long 3562710623 + .long 1012520516 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 2263535754 + .long 1073164162 + .long 752233586 + .long 3163687584 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 903334909 + .long 1073172413 + .long 1636462108 + .long 1016088573 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 2980802057 + .long 1073180708 + .long 378619896 + .long 1016821879 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 950803702 + .long 1073189049 + .long 1655364926 + .long 1016285608 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 158781403 + .long 1073197435 + .long 2221464712 + .long 3164335029 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 1660913392 + .long 1073205866 + .long 4218599604 + .long 1016184283 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 2224145553 + .long 1073214343 + .long 3482522030 + .long 3162537745 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2916157145 + .long 1073222866 + .long 219487565 + .long 1016357943 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 515457527 + .long 1073231436 + .long 836709333 + .long 1016699802 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 396319521 + .long 1073240052 + .long 4172420816 + .long 3160123208 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3643909174 + .long 1073248714 + .long 3537586109 + .long 1015403223 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 2759350287 + .long 1073257424 + .long 1148526634 + .long 1016943509 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 3134592888 + .long 1073266181 + .long 4232266862 + .long 1017039710 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 1577608921 + .long 1073274986 + .long 1875489510 + .long 3164016970 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 3492293770 + .long 1073283838 + .long 2248032210 + .long 1016435402 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 1403662306 + .long 1073292739 + .long 2788809599 + .long 3162719583 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 727685349 + .long 1073301688 + .long 2038246809 + .long 3163407318 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2591453363 + .long 1073310685 + .long 2132396182 + .long 3160122774 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 3833209506 + .long 1073319731 + .long 2722920684 + .long 1014803418 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 1297350157 + .long 1073328827 + .long 1308022040 + .long 3164461134 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 424392917 + .long 1073337972 + .long 2749202995 + .long 3163887294 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2366108318 + .long 1073347166 + .long 2867985102 + .long 3162810830 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3985553595 + .long 1073356410 + .long 4002146062 + .long 1016882712 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2152073944 + .long 1073365705 + .long 1486860576 + .long 3164252032 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 2331271250 + .long 1073375050 + .long 812057446 + .long 1013256022 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1405169241 + .long 1073384446 + .long 2998539689 + .long 3163879527 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 557149882 + .long 1073393893 + .long 3672720709 + .long 1015585841 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 977020788 + .long 1073403391 + .long 3065100517 + .long 1016590139 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 3861050111 + .long 1073412940 + .long 254893773 + .long 3163861756 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 1822067026 + .long 1073422542 + .long 1241994956 + .long 1016388866 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 364333489 + .long 1073432196 + .long 3923737744 + .long 3162469949 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 703710506 + .long 1073441902 + .long 1384660846 + .long 1016244467 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 4062661092 + .long 1073451660 + .long 1422616006 + .long 3164303894 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 3080351519 + .long 1073461472 + .long 3379126789 + .long 3158266577 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 3287523847 + .long 1073471337 + .long 1625971539 + .long 3158058531 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 1631695677 + .long 1073481256 + .long 2717633076 + .long 3163392602 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 3657065772 + .long 1073491228 + .long 399025623 + .long 3164005654 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 2029714210 + .long 1073501255 + .long 613660079 + .long 1016147719 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2307442995 + .long 1073511336 + .long 3190117721 + .long 3163453115 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 1464976603 + .long 1073521472 + .long 3507292405 + .long 3163026110 + .long 3706687593 + .long 1073526560 + .long 3521726939 + .long 1014301643 + .long 778901109 + .long 1073531663 + .long 2248183954 + .long 3162317327 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1532734324 + .long 1073541909 + .long 3094216535 + .long 3164211433 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 721996136 + .long 1073552211 + .long 563754734 + .long 1016419894 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3939148246 + .long 1073562568 + .long 3210352148 + .long 1016322899 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 3898795731 + .long 1073572982 + .long 1249994144 + .long 1012918394 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 1912561781 + .long 1073583453 + .long 3147495102 + .long 1016726829 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 3594158869 + .long 1073593980 + .long 2456521700 + .long 3164305137 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 1679558232 + .long 1073604565 + .long 2390342287 + .long 3164382546 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 1796832535 + .long 1073615207 + .long 3176955716 + .long 3161634089 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 991358482 + .long 1073625907 + .long 838715019 + .long 3164206244 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 610758006 + .long 1073636665 + .long 1965209397 + .long 3162914808 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2009970496 + .long 1073647481 + .long 2159039665 + .long 3163621524 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 2256325230 + .long 1073658356 + .long 580117746 + .long 1016365871 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 2719515920 + .long 1073669290 + .long 2760332941 + .long 1016186509 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 481706282 + .long 1073680284 + .long 1696079173 + .long 3163759104 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1222472308 + .long 1073691337 + .long 1054357470 + .long 3162069594 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2038973688 + .long 1073702450 + .long 892941374 + .long 1017095035 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 35929225 + .long 1073713624 + .long 2809788041 + .long 3160485544 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 915592468 + .long 1073724858 + .long 352947894 + .long 3162072947 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .long 1797923801 + .long 1073736153 + .long 1950547427 + .long 1014277635 + .type T_exp,@object + .size T_exp,4096 + .space 512, 0x00 # pad + .align 16 +e_coeff: + .long 3884607281 + .long 1062590591 + .long 3607404736 + .long 1068264200 + .long 1874480759 + .long 1065595563 + .long 4286760335 + .long 1070514109 + .long 4277811695 + .long 1072049730 + .long 0 + .long 0 + .type e_coeff,@object + .size e_coeff,48 + .align 16 +coeff_h: + .long 0 + .long 3218479616 + .long 0 + .long 3210587105 + .type coeff_h,@object + .size coeff_h,16 + .align 16 +HIGHMASK_LOG_X: + .long 4160749568 + .long 4294967295 + .long 0 + .long 4294965248 + .type HIGHMASK_LOG_X,@object + .size HIGHMASK_LOG_X,16 + .align 8 +HALFMASK: + .long 4160749568 + .long 4294967295 + .long 4160749568 + .long 4294967295 + .type HALFMASK,@object + .size HALFMASK,16 + .align 8 +log2: + .long 4277811695 + .long 1072049730 + .long 4277811695 + .long 3219533378 + .type log2,@object + .size log2,16 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_pow.1-. + .4byte ..___tag_value_pow.5-..___tag_value_pow.1 + .2byte 0x0400 + .4byte ..___tag_value_pow.3-..___tag_value_pow.1 + .2byte 0x300e + .byte 0x04 + .4byte ..___tag_value_pow.4-..___tag_value_pow.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/e_sinh.S b/libm/x86_64/e_sinh.S new file mode 100644 index 000000000..4d8db630a --- /dev/null +++ b/libm/x86_64/e_sinh.S @@ -0,0 +1,1430 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// sinh(x)=(exp(x)-exp(-x))/2 +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^7=int(xH*L2EH*2^7), +// f=0.b1 b2 ... b7, k integer +// 2^f is approximated as Tp[f]+Dp[f], and 2^{-f} as Tn[f]+Dn[f] +// Tp stores the high 53 bits, Dp stores (2^f-Tp[f]) rounded to double precision +// +// e^|x|=2^{k+f}*2^r, r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-8}+2^{-14}, +// for |x| in [23/64,3*2^7) +// e^{-|x|}=2^{-k-f}*2^{-r} +// +// e^|x| is approximated as 2^k*Tp+2^k*Tp*c1*r(1+c2*r+..+c5*r^4)+2^k*Dp= +// =2^k*Tp+2^k*Tp*P15+2^k*Dp +// e^{-|x|} approximated as 2^{-k}*Tn-2^{-k}*Tn*c1*r(1-c2*r+..+c5*r^4)+2^{-k}*Dn +// +// For |x| in [1/8, 3*2^7), sinh(x) is formed as +// RN(2^k*Tp-2^{-k}*Tn)+2^k*Tp*P15-2^{-k}*Tn*P`15-2^{-k}*TnL-2^{-k}*Dn+2^k*Dp +// +// For x in (3*2^7, 3*2^8), sign(x)*(e^|x|)/2 is returned, and +// the result is checked for overflow. +// +// For |x|<23/64, a Taylor polynomial expansion is used (degree 13) +// To reduce rounding errors, the p3*x^3 term is computed as +// (p3*xh^3)_high+[(p3*xl*(3*x*xh+xl^2))+(p3*xh^3)_low], +// where x=xh+xl, (xh are the leading 17 bits of x), and +// (p3*xh^3)_high=RN(x+p3*xh^3)-x +// (error bound for polynomial expansion is below 0.51 ulp) +// +// Special cases: +// sinh(NaN) = quiet NaN, and raise invalid exception +// sinh(+/-INF) = +/-INF +// sinh(x) = x for subnormals +// for finite argument, only sinh(0)=0 is exact +// For IEEE double +// sinh(x) overflows for x > +// 710.47586007394386342639336362481117248535156250 = MAXLOG+log(2) +// +/******************************************************************************/ + +#include +# -- Begin sinh +ENTRY(sinh) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_sinh.1: + pushq %rsi +..___tag_value_sinh.3: +..B1.2: + movsd HALFMASK(%rip), %xmm3 + xorpd %xmm4, %xmm4 + movsd L2E(%rip), %xmm1 + movsd 8+L2E(%rip), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd Shifter(%rip), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + movl $32768, %edx + andl %ecx, %edx + andl $32767, %ecx + subl $16343, %ecx + cmpl $177, %ecx + jae .L_2TAG_PACKET_0.0.2 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + shll $3, %edx + orl %edx, %eax + movq %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + xorpd %xmm5, %xmm5 + subsd %xmm6, %xmm3 + movapd cv(%rip), %xmm4 + addsd %xmm1, %xmm2 + movapd 16+cv(%rip), %xmm6 + subsd %xmm3, %xmm7 + movl $32704, %edx + pinsrw $3, %edx, %xmm5 + movapd 32+cv(%rip), %xmm1 + addsd %xmm7, %xmm2 + movl $127, %edx + andl %eax, %edx + addl %edx, %edx + shrl $3, %eax + andl $65520, %eax + addl $16352, %eax + xorpd %xmm0, %xmm0 + cmpl $161, %ecx + jae .L_2TAG_PACKET_1.0.2 + pshufd $68, %xmm5, %xmm5 + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + psubw %xmm0, %xmm5 + lea T2f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm0 + lea T2_neg_f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm5 + pshufd $68, %xmm2, %xmm3 + movapd 48+cv(%rip), %xmm7 + pshufd $68, %xmm2, %xmm2 + mulpd %xmm3, %xmm3 + mulpd %xmm2, %xmm4 + mulpd %xmm2, %xmm6 + mulpd 64+cv(%rip), %xmm2 + mulpd %xmm3, %xmm1 + mulpd %xmm3, %xmm7 + mulpd %xmm3, %xmm4 + mulpd %xmm3, %xmm1 + addpd %xmm7, %xmm6 + movq %xmm0, %xmm7 + addpd %xmm1, %xmm4 + shufpd $0, %xmm5, %xmm7 + subpd %xmm5, %xmm0 + mulpd %xmm7, %xmm2 + addpd %xmm6, %xmm4 + subsd %xmm0, %xmm7 + mulpd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + subsd %xmm5, %xmm7 + addpd %xmm2, %xmm4 + addsd %xmm6, %xmm7 + pshufd $238, %xmm4, %xmm2 + addsd %xmm7, %xmm2 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_1.0.2: + subl $16352, %eax + movl %eax, %ecx + andl $32752, %eax + shrl $1, %eax + andl $65520, %eax + subl %eax, %ecx + addl $16352, %eax + pinsrw $3, %eax, %xmm0 + pshufd $68, %xmm0, %xmm0 + lea T2f(%rip), %r8 + mulpd (%r8,%rdx,8), %xmm0 + pshufd $68, %xmm2, %xmm3 + movsd 48+cv(%rip), %xmm7 + mulsd %xmm3, %xmm3 + mulsd %xmm2, %xmm4 + mulsd %xmm2, %xmm6 + mulsd 64+cv(%rip), %xmm2 + mulsd %xmm3, %xmm1 + mulsd %xmm3, %xmm7 + mulsd %xmm3, %xmm4 + addl $16368, %ecx + pinsrw $3, %ecx, %xmm5 + mulsd %xmm3, %xmm1 + addsd %xmm7, %xmm6 + addsd %xmm1, %xmm4 + mulsd %xmm0, %xmm2 + addsd %xmm6, %xmm4 + mulsd %xmm2, %xmm4 + pshufd $238, %xmm0, %xmm6 + addsd %xmm6, %xmm4 + addsd %xmm4, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm5, %xmm0 + pextrw $3, %xmm0, %eax + andl $32752, %eax + movl $127, %edx + cmpl $32752, %eax + je .L_2TAG_PACKET_2.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + addl $16343, %ecx + cmpl $16343, %ecx + ja .L_2TAG_PACKET_3.0.2 + cmpl $15856, %ecx + jb .L_2TAG_PACKET_4.0.2 + movapd pv(%rip), %xmm1 + pshufd $68, %xmm0, %xmm6 + mulpd %xmm5, %xmm5 + movapd 16+pv(%rip), %xmm2 + pshufd $68, %xmm0, %xmm7 + movapd 32+pv(%rip), %xmm3 + pshufd $68, %xmm0, %xmm4 + andpd MASK3(%rip), %xmm6 + mulpd %xmm5, %xmm1 + mulsd %xmm5, %xmm2 + subpd %xmm6, %xmm4 + mulpd %xmm5, %xmm7 + addpd %xmm3, %xmm1 + pshufd $68, %xmm6, %xmm3 + mulpd %xmm5, %xmm5 + mulsd %xmm7, %xmm2 + mulpd %xmm7, %xmm1 + pshufd $68, %xmm0, %xmm7 + mulsd %xmm6, %xmm6 + addsd %xmm7, %xmm7 + mulsd %xmm4, %xmm4 + mulpd %xmm5, %xmm1 + addsd %xmm0, %xmm7 + mulsd %xmm3, %xmm6 + mulsd %xmm3, %xmm7 + pshufd $238, %xmm1, %xmm3 + mulsd %xmm5, %xmm1 + pshufd $238, %xmm4, %xmm5 + addsd %xmm2, %xmm3 + pshufd $238, %xmm2, %xmm2 + addsd %xmm4, %xmm7 + movq %xmm0, %xmm4 + mulsd %xmm2, %xmm6 + mulsd %xmm5, %xmm7 + addsd %xmm6, %xmm0 + mulsd %xmm2, %xmm7 + subsd %xmm0, %xmm4 + addsd %xmm7, %xmm1 + addsd %xmm4, %xmm6 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + cmpl $16, %ecx + jae .L_2TAG_PACKET_5.0.2 + movq %xmm0, %xmm1 + mulsd %xmm1, %xmm1 + jmp ..B1.5 +.L_2TAG_PACKET_5.0.2: + xorpd %xmm2, %xmm2 + movl $17392, %ecx + pinsrw $3, %ecx, %xmm2 + xorpd %xmm3, %xmm3 + movl $15344, %edx + pinsrw $3, %edx, %xmm3 + mulsd %xmm0, %xmm2 + addsd %xmm2, %xmm0 + mulsd %xmm3, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_3.0.2: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_6.0.2 + xorpd %xmm0, %xmm0 + movl $32736, %eax + pinsrw $3, %eax, %xmm0 + orl %edx, %eax + pinsrw $3, %eax, %xmm1 + mulsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_2.0.2 +.L_2TAG_PACKET_6.0.2: + xorpd %xmm1, %xmm1 + movl $32768, %eax + pinsrw $3, %eax, %xmm1 + andnpd %xmm0, %xmm1 + mulsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + movq %xmm0, (%rsp) +..B1.3: + movq (%rsp), %xmm0 +.L_2TAG_PACKET_7.0.2: +..B1.5: + popq %rcx +..___tag_value_sinh.4: + ret +..___tag_value_sinh.5: +END(sinh) +# -- End sinh + .section .rodata, "a" + .align 16 + .align 16 +L2E: + .long 1610612736 + .long 1080497479 + .long 4166901572 + .long 1053077003 + .type L2E,@object + .size L2E,16 + .align 16 +Shifter: + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .type Shifter,@object + .size Shifter,16 + .align 16 +cv: + .long 3607404736 + .long 1044146952 + .long 3607404736 + .long 3191630600 + .long 4277811695 + .long 1063661122 + .long 4277811695 + .long 3211144770 + .long 2140175755 + .long 1033864261 + .long 2140175755 + .long 1033864261 + .long 4289495988 + .long 1054113747 + .long 4289495988 + .long 1054113747 + .long 4277811695 + .long 1064709698 + .long 4277811695 + .long 1064709698 + .type cv,@object + .size cv,80 + .align 16 +T2f: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 2851812149 + .long 1072698941 + .long 2595802551 + .long 1016815913 + .long 1048019041 + .long 1072704666 + .long 1398474845 + .long 3161559171 + .long 3899555717 + .long 1072710421 + .long 427280750 + .long 3163595548 + .long 3541402996 + .long 1072716208 + .long 2759177317 + .long 1015903202 + .long 702412510 + .long 1072722027 + .long 3803266087 + .long 3163328991 + .long 410360776 + .long 1072727877 + .long 1269990655 + .long 1013024446 + .long 3402036099 + .long 1072733758 + .long 405889334 + .long 1016154232 + .long 1828292879 + .long 1072739672 + .long 1255956747 + .long 1016636974 + .long 728909815 + .long 1072745618 + .long 383930225 + .long 1016078044 + .long 852742562 + .long 1072751596 + .long 667253586 + .long 1010842135 + .long 2952712987 + .long 1072757606 + .long 3293494651 + .long 3161168877 + .long 3490863953 + .long 1072763649 + .long 960797498 + .long 3163997456 + .long 3228316108 + .long 1072769725 + .long 3010241991 + .long 3159471380 + .long 2930322912 + .long 1072775834 + .long 2599499422 + .long 3163762623 + .long 3366293073 + .long 1072781976 + .long 3119426314 + .long 1015169130 + .long 1014845819 + .long 1072788152 + .long 3117910646 + .long 3162607681 + .long 948735466 + .long 1072794361 + .long 3516338028 + .long 3163623459 + .long 3949972341 + .long 1072800603 + .long 2068408548 + .long 1015962444 + .long 2214878420 + .long 1072806880 + .long 892270087 + .long 3164164998 + .long 828946858 + .long 1072813191 + .long 10642492 + .long 1016988014 + .long 586995997 + .long 1072819536 + .long 41662348 + .long 3163676568 + .long 2288159958 + .long 1072825915 + .long 2169144469 + .long 1015924597 + .long 2440944790 + .long 1072832329 + .long 2492769774 + .long 1015196030 + .long 1853186616 + .long 1072838778 + .long 3066496371 + .long 1016705150 + .long 1337108031 + .long 1072845262 + .long 3203724452 + .long 1015726421 + .long 1709341917 + .long 1072851781 + .long 2571168217 + .long 1015201075 + .long 3790955393 + .long 1072858335 + .long 2352942462 + .long 3164228666 + .long 4112506593 + .long 1072864925 + .long 2947355221 + .long 1015419624 + .long 3504003472 + .long 1072871551 + .long 3594001060 + .long 3158379228 + .long 2799960843 + .long 1072878213 + .long 1423655381 + .long 1016070727 + .long 2839424854 + .long 1072884911 + .long 1171596163 + .long 1014090255 + .long 171030293 + .long 1072891646 + .long 3526460132 + .long 1015477354 + .long 4232894513 + .long 1072898416 + .long 2383938684 + .long 1015717095 + .long 2992903935 + .long 1072905224 + .long 2218154406 + .long 1016276769 + .long 1603444721 + .long 1072912069 + .long 1548633640 + .long 3163249902 + .long 926591435 + .long 1072918951 + .long 3208833762 + .long 3163962090 + .long 1829099622 + .long 1072925870 + .long 1016661181 + .long 3164509581 + .long 887463927 + .long 1072932827 + .long 3596744163 + .long 3161842742 + .long 3272845541 + .long 1072939821 + .long 928852419 + .long 3164536824 + .long 1276261410 + .long 1072946854 + .long 300981948 + .long 1015732745 + .long 78413852 + .long 1072953925 + .long 4183226867 + .long 3164065827 + .long 569847338 + .long 1072961034 + .long 472945272 + .long 3160339305 + .long 3645941911 + .long 1072968181 + .long 3814685081 + .long 3162621917 + .long 1617004845 + .long 1072975368 + .long 82804944 + .long 1011391354 + .long 3978100823 + .long 1072982593 + .long 3513027190 + .long 1016894539 + .long 3049340112 + .long 1072989858 + .long 3062915824 + .long 1014219171 + .long 4040676318 + .long 1072997162 + .long 4090609238 + .long 1016712034 + .long 3577096743 + .long 1073004506 + .long 2951496418 + .long 1014842263 + .long 2583551245 + .long 1073011890 + .long 3161094195 + .long 1016655067 + .long 1990012071 + .long 1073019314 + .long 3529070563 + .long 3163861769 + .long 2731501122 + .long 1073026778 + .long 1774031855 + .long 3163518597 + .long 1453150082 + .long 1073034283 + .long 498154669 + .long 3162536638 + .long 3395129871 + .long 1073041828 + .long 4025345435 + .long 3163383964 + .long 917841882 + .long 1073049415 + .long 18715565 + .long 1016707884 + .long 3566716925 + .long 1073057042 + .long 1536826856 + .long 1015191009 + .long 3712504873 + .long 1073064711 + .long 88491949 + .long 1016476236 + .long 2321106615 + .long 1073072422 + .long 2171176610 + .long 1010584347 + .long 363667784 + .long 1073080175 + .long 813753950 + .long 1016833785 + .long 3111574537 + .long 1073087969 + .long 2606161479 + .long 3163808322 + .long 2956612997 + .long 1073095806 + .long 2118169751 + .long 3163784129 + .long 885834528 + .long 1073103686 + .long 1973258547 + .long 3163310140 + .long 2186617381 + .long 1073111608 + .long 2270764084 + .long 3164321289 + .long 3561793907 + .long 1073119573 + .long 1157054053 + .long 1012938926 + .long 1719614413 + .long 1073127582 + .long 330458198 + .long 3164331316 + .long 1963711167 + .long 1073135634 + .long 1744767757 + .long 3161622870 + .long 1013258799 + .long 1073143730 + .long 1748797611 + .long 3161177658 + .long 4182873220 + .long 1073151869 + .long 629542646 + .long 3163044879 + .long 3907805044 + .long 1073160053 + .long 2257091225 + .long 3162598983 + .long 1218806132 + .long 1073168282 + .long 1818613052 + .long 3163597017 + .long 1447192521 + .long 1073176555 + .long 1462857171 + .long 3163563097 + .long 1339972927 + .long 1073184873 + .long 167908909 + .long 1016620728 + .long 1944781191 + .long 1073193236 + .long 3993278767 + .long 3162772855 + .long 19972402 + .long 1073201645 + .long 3507899862 + .long 1017057868 + .long 919555682 + .long 1073210099 + .long 3121969534 + .long 1013996802 + .long 1413356050 + .long 1073218599 + .long 1651349291 + .long 3163716742 + .long 2571947539 + .long 1073227145 + .long 3558159064 + .long 3164425245 + .long 1176749997 + .long 1073235738 + .long 2738998779 + .long 3163084420 + .long 2604962541 + .long 1073244377 + .long 2614425274 + .long 3164587768 + .long 3649726105 + .long 1073253063 + .long 4085036346 + .long 1016698050 + .long 1110089947 + .long 1073261797 + .long 1451641639 + .long 1016523249 + .long 380978316 + .long 1073270578 + .long 854188970 + .long 3161511262 + .long 2568320822 + .long 1073279406 + .long 2732824428 + .long 1015401491 + .long 194117574 + .long 1073288283 + .long 777528612 + .long 3164460665 + .long 2966275557 + .long 1073297207 + .long 2176155324 + .long 3160891335 + .long 3418903055 + .long 1073306180 + .long 2527457337 + .long 3161869180 + .long 2682146384 + .long 1073315202 + .long 2082178513 + .long 3164411995 + .long 1892288442 + .long 1073324273 + .long 2446255666 + .long 3163648957 + .long 2191782032 + .long 1073333393 + .long 2960257726 + .long 1014791238 + .long 434316067 + .long 1073342563 + .long 2028358766 + .long 1014506698 + .long 2069751141 + .long 1073351782 + .long 1562170675 + .long 3163773257 + .long 3964284211 + .long 1073361051 + .long 2111583915 + .long 1016475740 + .long 2990417245 + .long 1073370371 + .long 3683467745 + .long 3164417902 + .long 321958744 + .long 1073379742 + .long 3401933767 + .long 1016843134 + .long 1434058175 + .long 1073389163 + .long 251133233 + .long 1016134345 + .long 3218338682 + .long 1073398635 + .long 3404164304 + .long 3163525684 + .long 2572866477 + .long 1073408159 + .long 878562433 + .long 1016570317 + .long 697153126 + .long 1073417735 + .long 1283515429 + .long 3164331765 + .long 3092190715 + .long 1073427362 + .long 814012168 + .long 3160571998 + .long 2380618042 + .long 1073437042 + .long 3149557219 + .long 3164369375 + .long 4076559943 + .long 1073446774 + .long 2119478331 + .long 3161806927 + .long 815859274 + .long 1073456560 + .long 240396590 + .long 3164536019 + .long 2420883922 + .long 1073466398 + .long 2049810052 + .long 1015168464 + .long 1540824585 + .long 1073476290 + .long 1064017011 + .long 3164536266 + .long 3716502172 + .long 1073486235 + .long 2303740125 + .long 1015091301 + .long 1610600570 + .long 1073496235 + .long 3766732298 + .long 1016808759 + .long 777507147 + .long 1073506289 + .long 4282924205 + .long 1016236109 + .long 2483480501 + .long 1073516397 + .long 1216371780 + .long 1014082748 + .long 3706687593 + .long 1073526560 + .long 3521726940 + .long 1014301643 + .long 1432208378 + .long 1073536779 + .long 1401068914 + .long 3163412539 + .long 1242007932 + .long 1073547053 + .long 1132034716 + .long 3164388407 + .long 135105010 + .long 1073557383 + .long 1906148728 + .long 3164424315 + .long 3707479175 + .long 1073567768 + .long 3613079303 + .long 1015213314 + .long 382305176 + .long 1073578211 + .long 2347622376 + .long 3163627201 + .long 64696965 + .long 1073588710 + .long 1768797490 + .long 1016865536 + .long 4076975200 + .long 1073599265 + .long 2029000899 + .long 1016257111 + .long 863738719 + .long 1073609879 + .long 1326992220 + .long 3163661773 + .long 351641897 + .long 1073620550 + .long 2172261526 + .long 3164059175 + .long 3884662774 + .long 1073631278 + .long 2158611599 + .long 1015258761 + .long 4224142467 + .long 1073642065 + .long 3389820386 + .long 1016255778 + .long 2728693978 + .long 1073652911 + .long 396109971 + .long 3164511267 + .long 764307441 + .long 1073663816 + .long 3021057420 + .long 3164378099 + .long 3999357479 + .long 1073674779 + .long 2258941616 + .long 1016973300 + .long 929806999 + .long 1073685803 + .long 3205336643 + .long 1016308133 + .long 1533953344 + .long 1073696886 + .long 769171851 + .long 1016714209 + .long 2912730644 + .long 1073708029 + .long 3490067722 + .long 3164453650 + .long 2174652632 + .long 1073719233 + .long 4087714590 + .long 1015498835 + .long 730821105 + .long 1073730498 + .long 2523232743 + .long 1013115764 + .type T2f,@object + .size T2f,2048 + .align 16 +T2_neg_f: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .type T2_neg_f,@object + .size T2_neg_f,2048 + .align 16 +pv: + .long 329805064 + .long 1038488134 + .long 2773927730 + .long 1053236707 + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1069897045 + .long 1744127201 + .long 1046144581 + .long 436314137 + .long 1059717536 + .type pv,@object + .size pv,48 + .align 16 +MASK3: + .long 0 + .long 4294967280 + .long 0 + .long 4294967280 + .type MASK3,@object + .size MASK3,16 + .align 8 +HALFMASK: + .long 4160749568 + .long 2147483647 + .type HALFMASK,@object + .size HALFMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_sinh.1-. + .4byte ..___tag_value_sinh.5-..___tag_value_sinh.1 + .2byte 0x0400 + .4byte ..___tag_value_sinh.3-..___tag_value_sinh.1 + .2byte 0x100e + .byte 0x04 + .4byte ..___tag_value_sinh.4-..___tag_value_sinh.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/s_atan.S b/libm/x86_64/s_atan.S new file mode 100644 index 000000000..2453e1002 --- /dev/null +++ b/libm/x86_64/s_atan.S @@ -0,0 +1,927 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// This implementation uses the main path for |x| in [2^{-5},2^65). +// For |x| in [2^{-64},2^{-5}), a secondary path is used. +// For the biased exponent of X within 3FFH-64 and 3FF+64, we use one branch. +// We use the following definition of B and X` so that the formula +// atan(X) = Tau + atan( (X`-B) / (One + BX) ) is correct +// +// X = (-1)^s * 2^k * 1. x1 x2 ... x52 +// +// Define X` = 0 if k >= 5; and X` = |X| otherwise +// Define One = 0 if k >= 5; and One = 1 otherwise +// Define B = 0 if k <= -6; B = 2^k * 1.x1 x2 x3 x4 1 if -5 <= k <= 4 +// Define B = 2^5 * 1.0 0 ... 0 if k >= 5 +// +// Tau is 0 if k <= -6; +// Tau is atan( B ) if -5 <= k <= 4 +// Tau is pi/2 if k >= 5 +// +// Special cases: +// atan(NaN) = quiet NaN +// atan(+/-INF) = +/-Pi/2 +// atan(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin atan +ENTRY(atan) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_atan.1: + pushq %rsi +..___tag_value_atan.3: + movsd %xmm0, (%rsp) +..B1.2: + movq $0xffff000000000000, %r8 + movd %r8, %xmm3 + movq ONEMASK(%rip), %xmm5 + movq $0x800000000000, %r9 + movd %r9, %xmm4 + pextrw $3, %xmm0, %edx + andpd %xmm0, %xmm3 + pshufd $68, %xmm0, %xmm1 + orpd %xmm4, %xmm3 + movl %edx, %eax + andl $32767, %edx + subl $16288, %edx + cmpl $159, %edx + ja .L_2TAG_PACKET_0.0.1 + mulsd %xmm3, %xmm1 + subsd %xmm3, %xmm0 + addsd %xmm5, %xmm1 + divsd %xmm1, %xmm0 + addl $1, %edx + movq a2(%rip), %xmm2 + movq b2(%rip), %xmm4 + andl $32768, %eax + xorpd %xmm7, %xmm7 + pinsrw $3, %eax, %xmm7 + addl %edx, %edx + lea atan_tbl(%rip), %r8 + movq (%r8,%rdx,8), %xmm6 + movq 8(%r8,%rdx,8), %xmm5 + xorpd %xmm7, %xmm5 + xorpd %xmm7, %xmm6 + movq 8+a2(%rip), %xmm7 + movddup %xmm0, %xmm1 + mulsd %xmm0, %xmm0 + movddup %xmm1, %xmm3 + addsd %xmm6, %xmm1 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm4 + subsd %xmm1, %xmm6 + mulsd %xmm0, %xmm4 + addsd %xmm7, %xmm2 + mulsd %xmm3, %xmm0 + addsd %xmm3, %xmm6 + mulsd %xmm2, %xmm0 + addsd 8+b2(%rip), %xmm4 + addsd %xmm5, %xmm6 + mulsd %xmm4, %xmm0 + addsd %xmm6, %xmm0 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_1.0.1 +.L_2TAG_PACKET_0.0.1: + addl $944, %edx + cmpl $1103, %edx + ja .L_2TAG_PACKET_2.0.1 + movq a2(%rip), %xmm4 + movq b2(%rip), %xmm7 + movq (%rsp), %xmm0 + mulsd %xmm1, %xmm1 + movq 8+a2(%rip), %xmm2 + movq 8+b2(%rip), %xmm5 + mulsd %xmm1, %xmm4 + addsd %xmm1, %xmm7 + movq %xmm1, %xmm6 + mulsd %xmm0, %xmm1 + addsd %xmm4, %xmm2 + mulsd %xmm6, %xmm7 + mulsd %xmm1, %xmm2 + addsd %xmm5, %xmm7 + mulsd %xmm7, %xmm2 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_1.0.1 +.L_2TAG_PACKET_2.0.1: + addl $15344, %edx + cmpl $16368, %edx + ja .L_2TAG_PACKET_3.0.1 + movq (%rsp), %xmm0 + movq (%rsp), %xmm1 + cmpl $16, %edx + jae .L_2TAG_PACKET_1.0.1 + mulsd %xmm0, %xmm1 + jmp .L_2TAG_PACKET_1.0.1 +.L_2TAG_PACKET_3.0.1: + cmpl $17392, %edx + jae .L_2TAG_PACKET_4.0.1 + movq $0xbff0000000000000, %r8 + movd %r8, %xmm1 + divsd %xmm0, %xmm1 + movq a2(%rip), %xmm2 + movq b2(%rip), %xmm4 + andl $32768, %eax + xorpd %xmm7, %xmm7 + pinsrw $3, %eax, %xmm7 + addl %edx, %edx + movq pi_table(%rip), %xmm6 + movq 8+pi_table(%rip), %xmm5 + xorpd %xmm7, %xmm5 + xorpd %xmm7, %xmm6 + movq 8+a2(%rip), %xmm7 + movddup %xmm1, %xmm0 + mulsd %xmm1, %xmm1 + movddup %xmm0, %xmm3 + addsd %xmm6, %xmm0 + mulsd %xmm1, %xmm2 + addsd %xmm1, %xmm4 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm4 + addsd %xmm7, %xmm2 + mulsd %xmm3, %xmm1 + addsd %xmm3, %xmm6 + mulsd %xmm2, %xmm1 + addsd 8+b2(%rip), %xmm4 + addsd %xmm5, %xmm6 + mulsd %xmm4, %xmm1 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_1.0.1 +.L_2TAG_PACKET_4.0.1: + movq (%rsp), %xmm4 + movq SGNMASK(%rip), %xmm0 + movq pi_table(%rip), %xmm2 + movq 8+pi_table(%rip), %xmm3 + movd %xmm1, %eax + psrlq $32, %xmm1 + movd %xmm1, %edx + andl $2147483647, %edx + cmpl $2146435072, %edx + jae .L_2TAG_PACKET_5.0.1 +.L_2TAG_PACKET_6.0.1: + andnpd %xmm4, %xmm0 + orpd %xmm0, %xmm2 + orpd %xmm3, %xmm0 + addsd %xmm2, %xmm0 + jmp .L_2TAG_PACKET_1.0.1 +.L_2TAG_PACKET_5.0.1: + subl $2146435072, %edx + orl %edx, %eax + cmpl $0, %eax + je .L_2TAG_PACKET_6.0.1 + movq %xmm4, %xmm0 + addsd %xmm0, %xmm0 +.L_2TAG_PACKET_1.0.1: +..B1.3: + popq %rcx +..___tag_value_atan.4: + ret +..___tag_value_atan.5: +END(atan) +# -- End atan + .section .rodata, "a" + .align 4 + .align 4 +ONEMASK: + .long 0 + .long 1072693248 + .type ONEMASK,@object + .size ONEMASK,8 + .align 4 +a2: + .long 2006262985 + .long 1069310863 + .long 2358449471 + .long 3217342131 + .type a2,@object + .size a2,16 + .align 4 +b2: + .long 3845454352 + .long 1069952297 + .long 2829679149 + .long 1073771565 + .type b2,@object + .size b2,16 + .align 4 +atan_tbl: + .long 0 + .long 0 + .long 0 + .long 0 + .long 3819695742 + .long 1067482761 + .long 2398680355 + .long 3155462074 + .long 2998791009 + .long 1067548225 + .long 3868465248 + .long 3157182472 + .long 3339424991 + .long 1067613680 + .long 3296670360 + .long 1010752543 + .long 2710002256 + .long 1067679126 + .long 3403896007 + .long 1010910768 + .long 3275701428 + .long 1067744562 + .long 119959933 + .long 1011482843 + .long 2908636881 + .long 1067809988 + .long 2464489612 + .long 1011545526 + .long 3777889398 + .long 1067875403 + .long 3262682165 + .long 1009703919 + .long 3759667419 + .long 1067940807 + .long 1838130851 + .long 3157373556 + .long 732369940 + .long 1068006200 + .long 1203428313 + .long 1010055371 + .long 1166616461 + .long 1068071580 + .long 2901274051 + .long 3158549977 + .long 2945472892 + .long 1068136947 + .long 3726120658 + .long 1009762715 + .long 3954480976 + .long 1068202301 + .long 1289173457 + .long 1009429861 + .long 2081752829 + .long 1068267642 + .long 1836909874 + .long 1006212095 + .long 3807999788 + .long 1068332968 + .long 2172459940 + .long 3156162078 + .long 2731789884 + .long 1068398280 + .long 3450718392 + .long 3159216547 + .long 1044477961 + .long 1068463577 + .long 2230553229 + .long 1011424339 + .long 1486930287 + .long 1068530218 + .long 2861547474 + .long 1012041376 + .long 2293016881 + .long 1068595466 + .long 136843272 + .long 1012684797 + .long 201518157 + .long 1068660680 + .long 63231984 + .long 1012427198 + .long 4054234584 + .long 1068725856 + .long 3927006960 + .long 1011878955 + .long 1246477213 + .long 1068790995 + .long 1494265652 + .long 3155219350 + .long 678186699 + .long 1068856093 + .long 1264361424 + .long 3159256693 + .long 2690594995 + .long 1068921148 + .long 3906996379 + .long 1009288267 + .long 3362611517 + .long 1068986159 + .long 1650970041 + .long 3158331771 + .long 3102162111 + .long 1069051124 + .long 365917035 + .long 3160264153 + .long 2352611067 + .long 1069116041 + .long 4008970190 + .long 3159478182 + .long 1594134794 + .long 1069180908 + .long 466690178 + .long 1012526501 + .long 1345079306 + .long 1069245723 + .long 2268273568 + .long 3160164092 + .long 2163300970 + .long 1069310484 + .long 2750834800 + .long 3158113482 + .long 352522716 + .long 1069375190 + .long 1750411372 + .long 1011790845 + .long 848541647 + .long 1069439838 + .long 2164207573 + .long 1011698350 + .long 40647312 + .long 1069504427 + .long 2949165434 + .long 3159107267 + .long 2216766270 + .long 1069574357 + .long 2197920765 + .long 3161055954 + .long 1090914384 + .long 1069638757 + .long 2330454674 + .long 1013365998 + .long 387601244 + .long 1069703022 + .long 3185681168 + .long 1013434071 + .long 3991640484 + .long 1069767144 + .long 1313211590 + .long 3161087959 + .long 3322489502 + .long 1069831118 + .long 3013977995 + .long 1013053011 + .long 3121698570 + .long 1069894936 + .long 4069015667 + .long 1013023362 + .long 4289964660 + .long 1069958591 + .long 1736191156 + .long 3158266731 + .long 3903312386 + .long 1070022077 + .long 1833592413 + .long 3159731471 + .long 3818449864 + .long 1070085387 + .long 851036429 + .long 3159730451 + .long 2097480306 + .long 1070148515 + .long 3506390884 + .long 3160462302 + .long 1611694502 + .long 1070211454 + .long 2785735540 + .long 3160465144 + .long 1464694796 + .long 1070274198 + .long 4229277299 + .long 3159907000 + .long 1299612775 + .long 1070336741 + .long 4116653788 + .long 3160427739 + .long 1310544789 + .long 1070399077 + .long 1064430331 + .long 1013218202 + .long 2253168030 + .long 1070461200 + .long 1405044609 + .long 3157623179 + .long 1159567373 + .long 1070523105 + .long 2353445521 + .long 3159992176 + .long 1359373750 + .long 1070605818 + .long 1748171336 + .long 3161879263 + .long 908341706 + .long 1070667034 + .long 3372710815 + .long 3161775245 + .long 1743027350 + .long 1070727765 + .long 687089934 + .long 3160507171 + .long 2055355646 + .long 1070787992 + .long 2392855242 + .long 1013682469 + .long 690426164 + .long 1070847697 + .long 1103926666 + .long 1014052810 + .long 1483247847 + .long 1070906862 + .long 2082645847 + .long 3161345479 + .long 392040270 + .long 1070965472 + .long 2407720023 + .long 1014053754 + .long 2673846014 + .long 1071023511 + .long 1293605532 + .long 3158464385 + .long 1384215810 + .long 1071080967 + .long 2446095872 + .long 3159216407 + .long 3101660631 + .long 1071137826 + .long 698040758 + .long 1014855328 + .long 2094057058 + .long 1071194078 + .long 2282048339 + .long 1014040385 + .long 1712750594 + .long 1071249712 + .long 1204372378 + .long 3162276464 + .long 1411515787 + .long 1071304719 + .long 949080808 + .long 1015006403 + .long 931538085 + .long 1071359091 + .long 3027127039 + .long 1014307233 + .long 179139065 + .long 1071412821 + .long 4285547492 + .long 3161934731 + .long 3387721259 + .long 1071465902 + .long 373225773 + .long 1013486625 + .long 2132236852 + .long 1071544299 + .long 3250533429 + .long 1014031677 + .long 1942070284 + .long 1071645596 + .long 1237964179 + .long 3163239113 + .long 1532707802 + .long 1071695380 + .long 330645583 + .long 1012495610 + .long 2294184979 + .long 1071743834 + .long 3959472897 + .long 1015833116 + .long 3805060714 + .long 1071790961 + .long 2671256142 + .long 1013727772 + .long 2215037898 + .long 1071836770 + .long 2683359117 + .long 1015831902 + .long 483661594 + .long 1071881273 + .long 836288326 + .long 3162648643 + .long 1534679894 + .long 1071924486 + .long 373258696 + .long 3162470096 + .long 1538714628 + .long 1071966430 + .long 3199433068 + .long 1015325501 + .long 527642555 + .long 1072007128 + .long 3636832592 + .long 3161843145 + .long 291339150 + .long 1072046605 + .long 890169537 + .long 3160586117 + .long 2450210201 + .long 1072084888 + .long 1636353294 + .long 3163193400 + .long 2411367951 + .long 1072122007 + .long 374899873 + .long 1011331750 + .long 681549971 + .long 1072157992 + .long 506411689 + .long 1015373954 + .long 1466745541 + .long 1072192873 + .long 2143860931 + .long 1013364334 + .long 2845622366 + .long 1072226682 + .long 2869178209 + .long 3162423682 + .long 2838871438 + .long 1072275456 + .long 3742223599 + .long 1014338577 + .long 4200275274 + .long 1072337034 + .long 1566539915 + .long 3161839550 + .long 3034733530 + .long 1072394897 + .long 652621408 + .long 3162261964 + .long 3207412993 + .long 1072449290 + .long 3206124665 + .long 1014408733 + .long 624461478 + .long 1072500450 + .long 932437485 + .long 1015204343 + .long 767665908 + .long 1072548600 + .long 1037911952 + .long 3163527627 + .long 1110773639 + .long 1072593952 + .long 2371517912 + .long 3160465741 + .long 1940828530 + .long 1072636704 + .long 2731408428 + .long 3162895795 + .long 1911329388 + .long 1072677041 + .long 1773089615 + .long 3159569267 + .long 1764715788 + .long 1072704191 + .long 691346949 + .long 3164069946 + .long 3332979233 + .long 1072722195 + .long 3550733983 + .long 1014770628 + .long 1321870254 + .long 1072739231 + .long 1415315820 + .long 1016224052 + .long 3657429030 + .long 1072755365 + .long 3910539033 + .long 1015966402 + .long 4197624557 + .long 1072770661 + .long 2333399254 + .long 3164546480 + .long 1512059493 + .long 1072785177 + .long 2701510318 + .long 1016178092 + .long 453379037 + .long 1072798965 + .long 4046344253 + .long 3162814364 + .long 1942345162 + .long 1072818388 + .long 621134147 + .long 1016335195 + .long 4210176273 + .long 1072842164 + .long 2701013387 + .long 3164326619 + .long 4185644010 + .long 1072863795 + .long 4163699341 + .long 1016203112 + .long 679688788 + .long 1072883543 + .long 4147276762 + .long 1014066750 + .long 29432865 + .long 1072901630 + .long 970415797 + .long 1016902063 + .long 4070721092 + .long 1072918247 + .long 2539004411 + .long 3163736096 + .long 2252468843 + .long 1072933561 + .long 3424082887 + .long 3163407177 + .long 2929724825 + .long 1072947712 + .long 3661482235 + .long 3163846989 + .long 1377513368 + .long 1072960824 + .long 3987926680 + .long 1013647908 + .long 1031632908 + .long 1072973003 + .long 3672217151 + .long 1016614619 + .long 2516508130 + .long 1072984342 + .long 545855020 + .long 3162728930 + .long 3792452178 + .long 1072994923 + .long 3420119467 + .long 1016471430 + .long 3147791459 + .long 1073004818 + .long 1342204979 + .long 1013937254 + .long 999189752 + .long 1073014090 + .long 1006335472 + .long 3162850919 + .long 711011011 + .long 1073022794 + .long 4633488 + .long 3162966895 + .long 15640363 + .long 1073030980 + .long 1686389560 + .long 3164376226 + .long 1218463589 + .long 1073042382 + .long 1526837110 + .long 3163533985 + .long 2538470555 + .long 1073056144 + .long 2273304406 + .long 3163784996 + .long 1229720947 + .long 1073068489 + .long 2971628206 + .long 3162356540 + .long 3115427016 + .long 1073079621 + .long 4215132957 + .long 3164282762 + .long 4030612557 + .long 1073089709 + .long 1913251691 + .long 3163671292 + .long 2728521257 + .long 1073098892 + .long 2861089500 + .long 1015454459 + .long 1118696283 + .long 1073107285 + .long 1628948053 + .long 1016179658 + .long 2682711255 + .long 1073114984 + .long 2906306266 + .long 1014142643 + .long 2073898081 + .long 1073122072 + .long 1322740454 + .long 3164497217 + .long 1403700297 + .long 1073128618 + .long 416137895 + .long 3162781466 + .long 2502685617 + .long 1073134681 + .long 3242008732 + .long 1014593495 + .long 1531926851 + .long 1073140313 + .long 1362708094 + .long 1016517604 + .long 3572814411 + .long 1073145557 + .long 3709790527 + .long 1012646874 + .long 1695536111 + .long 1073150453 + .long 3980346340 + .long 1016705136 + .long 2363057203 + .long 1073155033 + .long 2551194792 + .long 1012569695 + .long 2873365682 + .long 1073159327 + .long 3181154748 + .long 1017041450 + .long 1053384691 + .long 1073165288 + .long 3074536879 + .long 1016965660 + .long 3270542712 + .long 1073172451 + .long 2535319415 + .long 3163051778 + .long 1353631484 + .long 1073178850 + .long 1173833755 + .long 1015534537 + .long 3511218460 + .long 1073184599 + .long 1243608109 + .long 3161592122 + .long 4121259284 + .long 1073189793 + .long 398584912 + .long 3163829923 + .long 1193862106 + .long 1073194509 + .long 1873745539 + .long 3163802819 + .long 3861949790 + .long 1073198808 + .long 3841261147 + .long 1015587248 + .long 1486904578 + .long 1073202745 + .long 1634726776 + .long 3163847886 + .long 2879153715 + .long 1073206362 + .long 200456242 + .long 3164138657 + .long 385353253 + .long 1073209698 + .long 1186355517 + .long 1014887155 + .long 1125865839 + .long 1073212783 + .long 203561262 + .long 3161244927 + .long 1221361475 + .long 1073215645 + .long 3382476563 + .long 1014936138 + .long 2077323573 + .long 1073218307 + .long 1005121005 + .long 3164430752 + .long 215611373 + .long 1073220790 + .long 353198764 + .long 3164485137 + .long 2347419265 + .long 1073223110 + .long 1103143360 + .long 1016542137 + .long 1379112765 + .long 1073225284 + .long 381583533 + .long 3162870833 + .long 3891198463 + .long 1073228298 + .long 1771275754 + .long 1014654681 + .long 3395914051 + .long 1073231917 + .long 2350900914 + .long 3164013978 + .long 2799919478 + .long 1073235146 + .long 2893950164 + .long 3163260901 + .long 1138673476 + .long 1073238045 + .long 2622204785 + .long 3164174388 + .long 3408855940 + .long 1073240661 + .long 2800881650 + .long 1016008624 + .long 2044858738 + .long 1073243035 + .long 604544785 + .long 1017022901 + .long 2578795176 + .long 1073245198 + .long 2557332925 + .long 1016135165 + .long 4196285314 + .long 1073247177 + .long 2032365307 + .long 1016194735 + .long 224877747 + .long 1073248996 + .long 497926916 + .long 1016947111 + .long 3271386490 + .long 1073250671 + .long 2689994846 + .long 1016631513 + .long 813635989 + .long 1073252221 + .long 747035277 + .long 3164530136 + .long 369829519 + .long 1073253658 + .long 2182033858 + .long 3163190340 + .long 1187679052 + .long 1073254994 + .long 673954443 + .long 1016149821 + .long 4232586098 + .long 1073256239 + .long 497775200 + .long 3162179015 + .long 426690558 + .long 1073257404 + .long 3063343247 + .long 1016865578 + .long 1624065902 + .long 1073258494 + .long 1354224996 + .long 3163503778 + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .type atan_tbl,@object + .size atan_tbl,2592 + .align 4 +pi_table: + .long 1413754136 + .long 1073291771 + .long 856972295 + .long 1016178214 + .type pi_table,@object + .size pi_table,16 + .align 4 +SGNMASK: + .long 4294967295 + .long 2147483647 + .type SGNMASK,@object + .size SGNMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_atan.1-. + .4byte ..___tag_value_atan.5-..___tag_value_atan.1 + .2byte 0x0400 + .4byte ..___tag_value_atan.3-..___tag_value_atan.1 + .2byte 0x100e + .byte 0x04 + .4byte ..___tag_value_atan.4-..___tag_value_atan.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/s_cbrt.S b/libm/x86_64/s_cbrt.S new file mode 100644 index 000000000..4aa4373e4 --- /dev/null +++ b/libm/x86_64/s_cbrt.S @@ -0,0 +1,754 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Assume x=2^{3*k+j} * 1.b1 b2 ... b5 b6 ... b52, where j = 0,1,2. +// Let r=(x*2^{-3k-j} - 1.b1 b2 ... b5 1)* rcp[b1 b2 ..b5], +// where rcp[b1 b2 .. b5]=1/(1.b1 b2 b3 b4 b5 1) in double precision +// cbrt(2^j * 1. b1 b2 .. b5 1) is approximated as T[j][b1..b5]+D[j][b1..b5] +// (T stores the high 53 bits, D stores the low order bits) +// Result=2^k*T+(2^k*T*r)*P+2^k*D +// where P=p1+p2*r+..+p8*r^7 +// +// Special cases: +// cbrt(NaN) = quiet NaN, and raise invalid exception +// cbrt(INF) = that INF +// cbrt(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin cbrt +ENTRY(cbrt) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_cbrt.1: + subq $24, %rsp +..___tag_value_cbrt.3: + movsd %xmm0, (%rsp) +..B1.2: + movq %xmm0, %xmm7 + movl $524032, %edx + movsd EXP_MSK3(%rip), %xmm5 + movsd EXP_MSK2(%rip), %xmm3 + psrlq $44, %xmm7 + pextrw $0, %xmm7, %ecx + movd %xmm7, %eax + movsd EXP_MASK(%rip), %xmm1 + movsd SIG_MASK(%rip), %xmm2 + andl $248, %ecx + lea rcp_table(%rip), %r8 + movsd (%rcx,%r8), %xmm4 + movq %rax, %r9 + andl %eax, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_0.0.1 + cmpl $524032, %edx + je .L_2TAG_PACKET_1.0.1 + shrl $8, %edx + shrq $8, %r9 + andpd %xmm0, %xmm2 + andpd %xmm5, %xmm0 + orpd %xmm2, %xmm3 + orpd %xmm0, %xmm1 + movapd coeff_table(%rip), %xmm5 + movl $5462, %eax + movapd 16+coeff_table(%rip), %xmm6 + mull %edx + movq %r9, %rdx + andq $2047, %r9 + shrl $14, %eax + andl $2048, %edx + subq %rax, %r9 + subq %rax, %r9 + subq %rax, %r9 + shlq $8, %r9 + addl $682, %eax + orl %edx, %eax + movd %eax, %xmm7 + addq %r9, %rcx + psllq $52, %xmm7 +.L_2TAG_PACKET_2.0.1: + movapd 32+coeff_table(%rip), %xmm2 + movapd 48+coeff_table(%rip), %xmm0 + subsd %xmm3, %xmm1 + movq %xmm7, %xmm3 + lea cbrt_table(%rip), %r8 + mulsd (%rcx,%r8), %xmm7 + mulsd %xmm4, %xmm1 + lea D_table(%rip), %r8 + mulsd (%rcx,%r8), %xmm3 + movapd %xmm1, %xmm4 + unpcklpd %xmm1, %xmm1 + mulpd %xmm1, %xmm5 + mulpd %xmm1, %xmm6 + mulpd %xmm1, %xmm1 + addpd %xmm5, %xmm2 + addpd %xmm6, %xmm0 + mulpd %xmm1, %xmm2 + mulpd %xmm1, %xmm1 + mulsd %xmm7, %xmm4 + addpd %xmm2, %xmm0 + mulsd %xmm0, %xmm1 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + mulsd %xmm4, %xmm0 + addsd %xmm3, %xmm0 + addsd %xmm7, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_0.0.1: + mulsd SCALE63(%rip), %xmm0 + movq %xmm0, %xmm7 + movl $524032, %edx + psrlq $44, %xmm7 + pextrw $0, %xmm7, %ecx + movd %xmm7, %eax + andl $248, %ecx + lea rcp_table(%rip), %r8 + movsd (%rcx,%r8), %xmm4 + movq %rax, %r9 + andl %eax, %edx + shrl $8, %edx + shrq $8, %r9 + cmpl $0, %edx + je .L_2TAG_PACKET_3.0.1 + andpd %xmm0, %xmm2 + andpd %xmm5, %xmm0 + orpd %xmm2, %xmm3 + orpd %xmm0, %xmm1 + movapd coeff_table(%rip), %xmm5 + movl $5462, %eax + movapd 16+coeff_table(%rip), %xmm6 + mull %edx + movq %r9, %rdx + andq $2047, %r9 + shrl $14, %eax + andl $2048, %edx + subq %rax, %r9 + subq %rax, %r9 + subq %rax, %r9 + shlq $8, %r9 + addl $661, %eax + orl %edx, %eax + movd %eax, %xmm7 + addq %r9, %rcx + psllq $52, %xmm7 + jmp .L_2TAG_PACKET_2.0.1 +.L_2TAG_PACKET_3.0.1: + cmpq $0, %r9 + jne .L_2TAG_PACKET_4.0.1 + xorpd %xmm0, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_4.0.1: + movsd ZERON(%rip), %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_1.0.1: + movl 4(%rsp), %eax + movl (%rsp), %edx + movl %eax, %ecx + andl $2147483647, %ecx + cmpl $2146435072, %ecx + ja .L_2TAG_PACKET_5.0.1 + cmpl $0, %edx + jne .L_2TAG_PACKET_5.0.1 + cmpl $2146435072, %eax + jne .L_2TAG_PACKET_6.0.1 + movsd INF(%rip), %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_6.0.1: + movsd NEG_INF(%rip), %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_5.0.1: + movsd (%rsp), %xmm0 + addsd %xmm0, %xmm0 + movq %xmm0, 8(%rsp) +.L_2TAG_PACKET_7.0.1: +..B1.4: + addq $24, %rsp +..___tag_value_cbrt.4: + ret +..___tag_value_cbrt.5: +END(cbrt) +# -- End cbrt + .section .rodata, "a" + .align 16 + .align 16 +coeff_table: + .long 1553778919 + .long 3213899486 + .long 3534952507 + .long 3215266280 + .long 1646371399 + .long 3214412045 + .long 477218588 + .long 3216798151 + .long 3582521621 + .long 1066628362 + .long 1007461464 + .long 1068473053 + .long 889629714 + .long 1067378449 + .long 1431655765 + .long 1070945621 + .type coeff_table,@object + .size coeff_table,64 + .align 4 +EXP_MSK3: + .long 4294967295 + .long 1048575 + .type EXP_MSK3,@object + .size EXP_MSK3,8 + .align 4 +EXP_MSK2: + .long 0 + .long 3220193280 + .type EXP_MSK2,@object + .size EXP_MSK2,8 + .align 4 +EXP_MASK: + .long 0 + .long 3220176896 + .type EXP_MASK,@object + .size EXP_MASK,8 + .align 4 +SIG_MASK: + .long 0 + .long 1032192 + .type SIG_MASK,@object + .size SIG_MASK,8 + .align 4 +rcp_table: + .long 528611360 + .long 3220144632 + .long 2884679527 + .long 3220082993 + .long 1991868891 + .long 3220024928 + .long 2298714891 + .long 3219970134 + .long 58835168 + .long 3219918343 + .long 3035110223 + .long 3219869313 + .long 1617585086 + .long 3219822831 + .long 2500867033 + .long 3219778702 + .long 4241943008 + .long 3219736752 + .long 258732970 + .long 3219696825 + .long 404232216 + .long 3219658776 + .long 2172167368 + .long 3219622476 + .long 1544257904 + .long 3219587808 + .long 377579543 + .long 3219554664 + .long 1616385542 + .long 3219522945 + .long 813783277 + .long 3219492562 + .long 3940743189 + .long 3219463431 + .long 2689777499 + .long 3219435478 + .long 1700977147 + .long 3219408632 + .long 3169102082 + .long 3219382828 + .long 327235604 + .long 3219358008 + .long 1244336319 + .long 3219334115 + .long 1300311200 + .long 3219311099 + .long 3095471925 + .long 3219288912 + .long 2166487928 + .long 3219267511 + .long 2913108253 + .long 3219246854 + .long 293672978 + .long 3219226904 + .long 288737297 + .long 3219207624 + .long 1810275472 + .long 3219188981 + .long 174592167 + .long 3219170945 + .long 3539053052 + .long 3219153485 + .long 2164392968 + .long 3219136576 + .type rcp_table,@object + .size rcp_table,256 + .align 4 +cbrt_table: + .long 572345495 + .long 1072698681 + .long 1998204467 + .long 1072709382 + .long 3861501553 + .long 1072719872 + .long 2268192434 + .long 1072730162 + .long 2981979308 + .long 1072740260 + .long 270859143 + .long 1072750176 + .long 2958651392 + .long 1072759916 + .long 313113243 + .long 1072769490 + .long 919449400 + .long 1072778903 + .long 2809328903 + .long 1072788162 + .long 2222981587 + .long 1072797274 + .long 2352530781 + .long 1072806244 + .long 594152517 + .long 1072815078 + .long 1555767199 + .long 1072823780 + .long 4282421314 + .long 1072832355 + .long 2355578597 + .long 1072840809 + .long 1162590619 + .long 1072849145 + .long 797864051 + .long 1072857367 + .long 431273680 + .long 1072865479 + .long 2669831148 + .long 1072873484 + .long 733477752 + .long 1072881387 + .long 4280220604 + .long 1072889189 + .long 801961634 + .long 1072896896 + .long 2915370760 + .long 1072904508 + .long 1159613482 + .long 1072912030 + .long 2689944798 + .long 1072919463 + .long 1248687822 + .long 1072926811 + .long 2967951030 + .long 1072934075 + .long 630170432 + .long 1072941259 + .long 3760898254 + .long 1072948363 + .long 0 + .long 1072955392 + .long 2370273294 + .long 1072962345 + .long 1261754802 + .long 1072972640 + .long 546334065 + .long 1072986123 + .long 1054893830 + .long 1072999340 + .long 1571187597 + .long 1073012304 + .long 1107975175 + .long 1073025027 + .long 3606909377 + .long 1073037519 + .long 1113616747 + .long 1073049792 + .long 4154744632 + .long 1073061853 + .long 3358931423 + .long 1073073713 + .long 4060702372 + .long 1073085379 + .long 747576176 + .long 1073096860 + .long 3023138255 + .long 1073108161 + .long 1419988548 + .long 1073119291 + .long 1914185305 + .long 1073130255 + .long 294389948 + .long 1073141060 + .long 3761802570 + .long 1073151710 + .long 978281566 + .long 1073162213 + .long 823148820 + .long 1073172572 + .long 2420954441 + .long 1073182792 + .long 3815449908 + .long 1073192878 + .long 2046058587 + .long 1073202835 + .long 1807524753 + .long 1073212666 + .long 2628681401 + .long 1073222375 + .long 3225667357 + .long 1073231966 + .long 1555307421 + .long 1073241443 + .long 3454043099 + .long 1073250808 + .long 1208137896 + .long 1073260066 + .long 3659916772 + .long 1073269218 + .long 1886261264 + .long 1073278269 + .long 3593647839 + .long 1073287220 + .long 3086012205 + .long 1073296075 + .long 2769796922 + .long 1073304836 + .long 888716057 + .long 1073317807 + .long 2201465623 + .long 1073334794 + .long 164369365 + .long 1073351447 + .long 3462666733 + .long 1073367780 + .long 2773905457 + .long 1073383810 + .long 1342879088 + .long 1073399550 + .long 2543933975 + .long 1073415012 + .long 1684477781 + .long 1073430209 + .long 3532178543 + .long 1073445151 + .long 1147747300 + .long 1073459850 + .long 1928031793 + .long 1073474314 + .long 2079717015 + .long 1073488553 + .long 4016765315 + .long 1073502575 + .long 3670431139 + .long 1073516389 + .long 3549227225 + .long 1073530002 + .long 11637607 + .long 1073543422 + .long 588220169 + .long 1073556654 + .long 2635407503 + .long 1073569705 + .long 2042029317 + .long 1073582582 + .long 1925128962 + .long 1073595290 + .long 4136375664 + .long 1073607834 + .long 759964600 + .long 1073620221 + .long 4257606771 + .long 1073632453 + .long 297278907 + .long 1073644538 + .long 3655053093 + .long 1073656477 + .long 2442253172 + .long 1073668277 + .long 1111876799 + .long 1073679941 + .long 3330973139 + .long 1073691472 + .long 3438879452 + .long 1073702875 + .long 3671565478 + .long 1073714153 + .long 1317849547 + .long 1073725310 + .long 1642364115 + .long 1073736348 + .type cbrt_table,@object + .size cbrt_table,768 + .align 4 +D_table: + .long 4050900474 + .long 1014427190 + .long 1157977860 + .long 1016444461 + .long 1374568199 + .long 1017271387 + .long 2809163288 + .long 1016882676 + .long 3742377377 + .long 1013168191 + .long 3101606597 + .long 1017541672 + .long 65224358 + .long 1017217597 + .long 2691591250 + .long 1017266643 + .long 4020758549 + .long 1017689313 + .long 1316310992 + .long 1018030788 + .long 1031537856 + .long 1014090882 + .long 3261395239 + .long 1016413641 + .long 886424999 + .long 1016313335 + .long 3114776834 + .long 1014195875 + .long 1681120620 + .long 1017825416 + .long 1329600273 + .long 1016625740 + .long 465474623 + .long 1017097119 + .long 4251633980 + .long 1017169077 + .long 1986990133 + .long 1017710645 + .long 752958613 + .long 1017159641 + .long 2216216792 + .long 1018020163 + .long 4282860129 + .long 1015924861 + .long 1557627859 + .long 1016039538 + .long 3889219754 + .long 1018086237 + .long 3684996408 + .long 1017353275 + .long 723532103 + .long 1017717141 + .long 2951149676 + .long 1012528470 + .long 831890937 + .long 1017830553 + .long 1031212645 + .long 1017387331 + .long 2741737450 + .long 1017604974 + .long 2863311531 + .long 1003776682 + .long 4276736099 + .long 1013153088 + .long 4111778382 + .long 1015673686 + .long 1728065769 + .long 1016413986 + .long 2708718031 + .long 1018078833 + .long 1069335005 + .long 1015291224 + .long 700037144 + .long 1016482032 + .long 2904566452 + .long 1017226861 + .long 4074156649 + .long 1017622651 + .long 25019565 + .long 1015245366 + .long 3601952608 + .long 1015771755 + .long 3267129373 + .long 1017904664 + .long 503203103 + .long 1014921629 + .long 2122011730 + .long 1018027866 + .long 3927295461 + .long 1014189456 + .long 2790625147 + .long 1016024251 + .long 1330460186 + .long 1016940346 + .long 4033568463 + .long 1015538390 + .long 3695818227 + .long 1017509621 + .long 257573361 + .long 1017208868 + .long 3227697852 + .long 1017337964 + .long 234118548 + .long 1017169577 + .long 4009025803 + .long 1017278524 + .long 1948343394 + .long 1017749310 + .long 678398162 + .long 1018144239 + .long 3083864863 + .long 1016669086 + .long 2415453452 + .long 1017890370 + .long 175467344 + .long 1017330033 + .long 3197359580 + .long 1010339928 + .long 2071276951 + .long 1015941358 + .long 268372543 + .long 1016737773 + .long 938132959 + .long 1017389108 + .long 1816750559 + .long 1017337448 + .long 4119203749 + .long 1017152174 + .long 2578653878 + .long 1013108497 + .long 2470331096 + .long 1014678606 + .long 123855735 + .long 1016553320 + .long 1265650889 + .long 1014782687 + .long 3414398172 + .long 1017182638 + .long 1040773369 + .long 1016158401 + .long 3483628886 + .long 1016886550 + .long 4140499405 + .long 1016191425 + .long 3893477850 + .long 1016964495 + .long 3935319771 + .long 1009634717 + .long 2978982660 + .long 1015027112 + .long 2452709923 + .long 1017990229 + .long 3190365712 + .long 1015835149 + .long 4237588139 + .long 1015832925 + .long 2610678389 + .long 1017962711 + .long 2127316774 + .long 1017405770 + .long 824267502 + .long 1017959463 + .long 2165924042 + .long 1017912225 + .long 2774007076 + .long 1013257418 + .long 4123916326 + .long 1017582284 + .long 1976417958 + .long 1016959909 + .long 4092806412 + .long 1017711279 + .long 119251817 + .long 1015363631 + .long 3475418768 + .long 1017675415 + .long 1972580503 + .long 1015470684 + .long 815541017 + .long 1017517969 + .long 2429917451 + .long 1017397776 + .long 4062888482 + .long 1016749897 + .long 68284153 + .long 1017925678 + .long 2207779246 + .long 1016320298 + .long 1183466520 + .long 1017408657 + .long 143326427 + .long 1017060403 + .type D_table,@object + .size D_table,768 + .align 4 +SCALE63: + .long 0 + .long 1138753536 + .type SCALE63,@object + .size SCALE63,8 + .align 4 +ZERON: + .long 0 + .long 2147483648 + .type ZERON,@object + .size ZERON,8 + .align 4 +INF: + .long 0 + .long 2146435072 + .type INF,@object + .size INF,8 + .align 4 +NEG_INF: + .long 0 + .long 4293918720 + .type NEG_INF,@object + .size NEG_INF,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_cbrt.1-. + .4byte ..___tag_value_cbrt.5-..___tag_value_cbrt.1 + .2byte 0x0400 + .4byte ..___tag_value_cbrt.3-..___tag_value_cbrt.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_cbrt.4-..___tag_value_cbrt.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/s_cos.S b/libm/x86_64/s_cos.S new file mode 100644 index 000000000..ab5a0e1b7 --- /dev/null +++ b/libm/x86_64/s_cos.S @@ -0,0 +1,1275 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// 1. RANGE REDUCTION +// +// We perform an initial range reduction from X to r with +// +// X =~= N * pi/32 + r +// +// so that |r| <= pi/64 + epsilon. We restrict inputs to those +// where |N| <= 932560. Beyond this, the range reduction is +// insufficiently accurate. For extremely small inputs, +// denormalization can occur internally, impacting performance. +// This means that the main path is actually only taken for +// 2^-252 <= |X| < 90112. +// +// To avoid branches, we perform the range reduction to full +// accuracy each time. +// +// X - N * (P_1 + P_2 + P_3) +// +// where P_1 and P_2 are 32-bit numbers (so multiplication by N +// is exact) and P_3 is a 53-bit number. Together, these +// approximate pi well enough for all cases in the restricted +// range. +// +// The main reduction sequence is: +// +// y = 32/pi * x +// N = integer(y) +// (computed by adding and subtracting off SHIFTER) +// +// m_1 = N * P_1 +// m_2 = N * P_2 +// r_1 = x - m_1 +// r = r_1 - m_2 +// (this r can be used for most of the calculation) +// +// c_1 = r_1 - r +// m_3 = N * P_3 +// c_2 = c_1 - m_2 +// c = c_2 - m_3 +// +// 2. MAIN ALGORITHM +// +// The algorithm uses a table lookup based on B = M * pi / 32 +// where M = N mod 64. The stored values are: +// sigma closest power of 2 to cos(B) +// C_hl 53-bit cos(B) - sigma +// S_hi + S_lo 2 * 53-bit sin(B) +// +// The computation is organized as follows: +// +// sin(B + r + c) = [sin(B) + sigma * r] + +// r * (cos(B) - sigma) + +// sin(B) * [cos(r + c) - 1] + +// cos(B) * [sin(r + c) - r] +// +// which is approximately: +// +// [S_hi + sigma * r] + +// C_hl * r + +// S_lo + S_hi * [(cos(r) - 1) - r * c] + +// (C_hl + sigma) * [(sin(r) - r) + c] +// +// and this is what is actually computed. We separate this sum +// into four parts: +// +// hi + med + pols + corr +// +// where +// +// hi = S_hi + sigma r +// med = C_hl * r +// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r) +// corr = S_lo + c * ((C_hl + sigma) - S_hi * r) +// +// 3. POLYNOMIAL +// +// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) * +// (sin(r) - r) can be rearranged freely, since it is quite +// small, so we exploit parallelism to the fullest. +// +// psc4 = SC_4 * r_1 +// msc4 = psc4 * r +// r2 = r * r +// msc2 = SC_2 * r2 +// r4 = r2 * r2 +// psc3 = SC_3 + msc4 +// psc1 = SC_1 + msc2 +// msc3 = r4 * psc3 +// sincospols = psc1 + msc3 +// pols = sincospols * +// +// +// 4. CORRECTION TERM +// +// This is where the "c" component of the range reduction is +// taken into account; recall that just "r" is used for most of +// the calculation. +// +// -c = m_3 - c_2 +// -d = S_hi * r - (C_hl + sigma) +// corr = -c * -d + S_lo +// +// 5. COMPENSATED SUMMATIONS +// +// The two successive compensated summations add up the high +// and medium parts, leaving just the low parts to add up at +// the end. +// +// rs = sigma * r +// res_int = S_hi + rs +// k_0 = S_hi - res_int +// k_2 = k_0 + rs +// med = C_hl * r +// res_hi = res_int + med +// k_1 = res_int - res_hi +// k_3 = k_1 + med +// +// 6. FINAL SUMMATION +// +// We now add up all the small parts: +// +// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3 +// +// Now the overall result is just: +// +// res_hi + res_lo +// +// 7. SMALL ARGUMENTS +// +// Inputs with |X| < 2^-252 are treated specially as +// 1 - |x|. +// +// Special cases: +// cos(NaN) = quiet NaN, and raise invalid exception +// cos(INF) = NaN and raise invalid exception +// cos(0) = 1 +// +/******************************************************************************/ + +#include +# -- Begin cos +ENTRY(cos) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_cos.1: + pushq %rbx +..___tag_value_cos.3: + subq $16, %rsp +..___tag_value_cos.5: + movsd %xmm0, 8(%rsp) +..B1.2: + movl 12(%rsp), %eax + movq PI32INV(%rip), %xmm1 + andl $2147418112, %eax + subl $808452096, %eax + cmpl $281346048, %eax + ja .L_2TAG_PACKET_0.0.1 + mulsd %xmm0, %xmm1 + movapd ONEHALF(%rip), %xmm5 + movq SIGN_MASK(%rip), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %edx + cvtsi2sd %edx, %xmm1 + movapd P_2(%rip), %xmm2 + movq P_1(%rip), %xmm3 + mulsd %xmm1, %xmm3 + unpcklpd %xmm1, %xmm1 + addq $1865232, %rdx + movq %xmm0, %xmm4 + andq $63, %rdx + movapd SC_4(%rip), %xmm5 + lea Ctable(%rip), %rax + shlq $5, %rdx + addq %rdx, %rax + mulpd %xmm1, %xmm2 + subsd %xmm3, %xmm0 + mulsd P_3(%rip), %xmm1 + subsd %xmm3, %xmm4 + movq 8(%rax), %xmm7 + unpcklpd %xmm0, %xmm0 + movq %xmm4, %xmm3 + subsd %xmm2, %xmm4 + mulpd %xmm0, %xmm5 + subpd %xmm2, %xmm0 + movapd SC_2(%rip), %xmm6 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm2, %xmm3 + movapd (%rax), %xmm2 + subsd %xmm3, %xmm1 + movq 24(%rax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd SC_3(%rip), %xmm5 + mulsd (%rax), %xmm4 + addpd SC_1(%rip), %xmm6 + mulpd %xmm0, %xmm5 + movq %xmm3, %xmm0 + addsd 8(%rax), %xmm3 + mulpd %xmm7, %xmm1 + movq %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movq 8(%rax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%rax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm5, %xmm0 + addsd %xmm7, %xmm3 + addsd %xmm1, %xmm0 + addsd %xmm3, %xmm0 + addsd %xmm6, %xmm0 + unpckhpd %xmm6, %xmm6 + addsd %xmm6, %xmm0 + addsd %xmm4, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_0.0.1: + jg .L_2TAG_PACKET_1.0.1 + pextrw $3, %xmm0, %eax + andw $32767, %ax + pinsrw $3, %eax, %xmm0 + movq ONE(%rip), %xmm1 + subsd %xmm0, %xmm1 + movq %xmm1, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_1.0.1: + pextrw $3, %xmm0, %eax + andl $32752, %eax + cmpl $32752, %eax + je .L_2TAG_PACKET_2.0.1 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + subl $16224, %ecx + shrl $7, %ecx + andl $65532, %ecx + lea PI_INV_TABLE(%rip), %r11 + addq %r11, %rcx + movd %xmm0, %rax + movl 20(%rcx), %r10d + movl 24(%rcx), %r8d + movl %eax, %edx + shrq $21, %rax + orl $-2147483648, %eax + shrl $11, %eax + movl %r10d, %r9d + imulq %rdx, %r10 + imulq %rax, %r9 + imulq %rax, %r8 + movl 16(%rcx), %esi + movl 12(%rcx), %edi + movl %r10d, %r11d + shrq $32, %r10 + addq %r10, %r9 + addq %r8, %r11 + movl %r11d, %r8d + shrq $32, %r11 + addq %r11, %r9 + movl %esi, %r10d + imulq %rdx, %rsi + imulq %rax, %r10 + movl %edi, %r11d + imulq %rdx, %rdi + movl %esi, %ebx + shrq $32, %rsi + addq %rbx, %r9 + movl %r9d, %ebx + shrq $32, %r9 + addq %rsi, %r10 + addq %r9, %r10 + shlq $32, %rbx + orq %rbx, %r8 + imulq %rax, %r11 + movl 8(%rcx), %r9d + movl 4(%rcx), %esi + movl %edi, %ebx + shrq $32, %rdi + addq %rbx, %r10 + movl %r10d, %ebx + shrq $32, %r10 + addq %rdi, %r11 + addq %r10, %r11 + movq %r9, %rdi + imulq %rdx, %r9 + imulq %rax, %rdi + movl %r9d, %r10d + shrq $32, %r9 + addq %r10, %r11 + movl %r11d, %r10d + shrq $32, %r11 + addq %r9, %rdi + addq %r11, %rdi + movq %rsi, %r9 + imulq %rdx, %rsi + imulq %rax, %r9 + shlq $32, %r10 + orq %rbx, %r10 + movl (%rcx), %eax + movl %esi, %r11d + shrq $32, %rsi + addq %r11, %rdi + movl %edi, %r11d + shrq $32, %rdi + addq %rsi, %r9 + addq %rdi, %r9 + imulq %rax, %rdx + pextrw $3, %xmm0, %ebx + lea PI_INV_TABLE(%rip), %rdi + subq %rdi, %rcx + addl %ecx, %ecx + addl %ecx, %ecx + addl %ecx, %ecx + addl $19, %ecx + movl $32768, %esi + andl %ebx, %esi + shrl $4, %ebx + andl $2047, %ebx + subl $1023, %ebx + subl %ebx, %ecx + addq %rdx, %r9 + movl %ecx, %edx + addl $32, %edx + cmpl $1, %ecx + jl .L_2TAG_PACKET_3.0.1 + negl %ecx + addl $29, %ecx + shll %cl, %r9d + movl %r9d, %edi + andl $536870911, %r9d + testl $268435456, %r9d + jne .L_2TAG_PACKET_4.0.1 + shrl %cl, %r9d + movl $0, %ebx + shlq $32, %r9 + orq %r11, %r9 +.L_2TAG_PACKET_5.0.1: +.L_2TAG_PACKET_6.0.1: + cmpq $0, %r9 + je .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_8.0.1: + bsr %r9, %r11 + movl $29, %ecx + subl %r11d, %ecx + jle .L_2TAG_PACKET_9.0.1 + shlq %cl, %r9 + movq %r10, %rax + shlq %cl, %r10 + addl %ecx, %edx + negl %ecx + addl $64, %ecx + shrq %cl, %rax + shrq %cl, %r8 + orq %rax, %r9 + orq %r8, %r10 +.L_2TAG_PACKET_10.0.1: + cvtsi2sdq %r9, %xmm0 + shrq $1, %r10 + cvtsi2sdq %r10, %xmm3 + xorpd %xmm4, %xmm4 + shll $4, %edx + negl %edx + addl $16368, %edx + orl %esi, %edx + xorl %ebx, %edx + pinsrw $3, %edx, %xmm4 + movq PI_4(%rip), %xmm2 + movq 8+PI_4(%rip), %xmm6 + xorpd %xmm5, %xmm5 + subl $1008, %edx + pinsrw $3, %edx, %xmm5 + mulsd %xmm4, %xmm0 + shll $16, %esi + sarl $31, %esi + mulsd %xmm5, %xmm3 + movq %xmm0, %xmm1 + mulsd %xmm2, %xmm0 + shrl $29, %edi + addsd %xmm3, %xmm1 + mulsd %xmm2, %xmm3 + addl %esi, %edi + xorl %esi, %edi + mulsd %xmm1, %xmm6 + movl %edi, %eax + addsd %xmm3, %xmm6 + movq %xmm0, %xmm2 + addsd %xmm6, %xmm0 + subsd %xmm0, %xmm2 + addsd %xmm2, %xmm6 +.L_2TAG_PACKET_11.0.1: + movq PI32INV(%rip), %xmm1 + mulsd %xmm0, %xmm1 + movq ONEHALF(%rip), %xmm5 + movq SIGN_MASK(%rip), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %rdx + cvtsi2sdq %rdx, %xmm1 + movq P_1(%rip), %xmm3 + movapd P_2(%rip), %xmm2 + mulsd %xmm1, %xmm3 + unpcklpd %xmm1, %xmm1 + shll $3, %eax + addl $1865232, %edx + movq %xmm0, %xmm4 + addl %eax, %edx + andl $63, %edx + movapd SC_4(%rip), %xmm5 + lea Ctable(%rip), %rax + shll $5, %edx + addq %rdx, %rax + mulpd %xmm1, %xmm2 + subsd %xmm3, %xmm0 + mulsd P_3(%rip), %xmm1 + subsd %xmm3, %xmm4 + movq 8(%rax), %xmm7 + unpcklpd %xmm0, %xmm0 + movq %xmm4, %xmm3 + subsd %xmm2, %xmm4 + mulpd %xmm0, %xmm5 + subpd %xmm2, %xmm0 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm2, %xmm3 + movapd (%rax), %xmm2 + subsd %xmm3, %xmm1 + movq 24(%rax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + subsd %xmm6, %xmm1 + movapd SC_2(%rip), %xmm6 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd SC_3(%rip), %xmm5 + mulsd (%rax), %xmm4 + addpd SC_1(%rip), %xmm6 + mulpd %xmm0, %xmm5 + movq %xmm3, %xmm0 + addsd 8(%rax), %xmm3 + mulpd %xmm7, %xmm1 + movq %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movq 8(%rax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%rax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm0, %xmm5 + addsd %xmm7, %xmm3 + addsd %xmm5, %xmm1 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + unpckhpd %xmm6, %xmm6 + movq %xmm4, %xmm0 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_7.0.1: + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + movq $0, %r8 + cmpq $0, %r9 + jne .L_2TAG_PACKET_8.0.1 + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + cmpq $0, %r9 + jne .L_2TAG_PACKET_8.0.1 + xorpd %xmm0, %xmm0 + xorpd %xmm6, %xmm6 + jmp .L_2TAG_PACKET_11.0.1 +.L_2TAG_PACKET_9.0.1: + je .L_2TAG_PACKET_10.0.1 + negl %ecx + shrq %cl, %r10 + movq %r9, %rax + shrq %cl, %r9 + subl %ecx, %edx + negl %ecx + addl $64, %ecx + shlq %cl, %rax + orq %rax, %r10 + jmp .L_2TAG_PACKET_10.0.1 +.L_2TAG_PACKET_3.0.1: + negl %ecx + shlq $32, %r9 + orq %r11, %r9 + shlq %cl, %r9 + movq %r9, %rdi + testl $-2147483648, %r9d + jne .L_2TAG_PACKET_12.0.1 + shrl %cl, %r9d + movl $0, %ebx + shrq $3, %rdi + jmp .L_2TAG_PACKET_6.0.1 +.L_2TAG_PACKET_4.0.1: + shrl %cl, %r9d + movl $536870912, %ebx + shrl %cl, %ebx + shlq $32, %r9 + orq %r11, %r9 + shlq $32, %rbx + addl $536870912, %edi + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + jmp .L_2TAG_PACKET_5.0.1 +.L_2TAG_PACKET_12.0.1: + shrl %cl, %r9d + movq $0x100000000, %rbx + shrq %cl, %rbx + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + shrq $3, %rdi + addl $536870912, %edi + jmp .L_2TAG_PACKET_6.0.1 +.L_2TAG_PACKET_2.0.1: + movsd 8(%rsp), %xmm0 + mulsd NEG_ZERO(%rip), %xmm0 + movq %xmm0, (%rsp) +.L_2TAG_PACKET_13.0.1: +..B1.4: + addq $16, %rsp +..___tag_value_cos.6: + popq %rbx +..___tag_value_cos.8: + ret +..___tag_value_cos.9: +END(cos) +# -- End cos + .section .rodata, "a" + .align 16 + .align 16 +ONEHALF: + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .type ONEHALF,@object + .size ONEHALF,16 + .align 16 +P_2: + .long 442499072 + .long 1032893537 + .long 442499072 + .long 1032893537 + .type P_2,@object + .size P_2,16 + .align 16 +SC_4: + .long 2773927732 + .long 1053236707 + .long 436314138 + .long 1056571808 + .type SC_4,@object + .size SC_4,16 + .align 16 +Ctable: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 1072693248 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 1072693248 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 1071644672 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 1071644672 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 1070596096 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 1070596096 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 1069547520 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 3217031168 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 3218079744 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 3218079744 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 3219128320 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 3219128320 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 3220176896 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 3220176896 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 3219128320 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 3219128320 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 3218079744 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 3218079744 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 3217031168 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 1069547520 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 1070596096 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 1070596096 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 1071644672 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 1071644672 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 1072693248 + .type Ctable,@object + .size Ctable,2048 + .align 16 +SC_2: + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1067799893 + .type SC_2,@object + .size SC_2,16 + .align 16 +SC_3: + .long 436314138 + .long 3207201184 + .long 381774871 + .long 3210133868 + .type SC_3,@object + .size SC_3,16 + .align 16 +SC_1: + .long 1431655765 + .long 3217380693 + .long 0 + .long 3219128320 + .type SC_1,@object + .size SC_1,16 + .align 16 +PI_INV_TABLE: + .long 0 + .long 0 + .long 2734261102 + .long 1313084713 + .long 4230436817 + .long 4113882560 + .long 3680671129 + .long 1011060801 + .long 4266746795 + .long 3736847713 + .long 3072618042 + .long 1112396512 + .long 105459434 + .long 164729372 + .long 4263373596 + .long 2972297022 + .long 3900847605 + .long 784024708 + .long 3919343654 + .long 3026157121 + .long 965858873 + .long 2203269620 + .long 2625920907 + .long 3187222587 + .long 536385535 + .long 3724908559 + .long 4012839307 + .long 1510632735 + .long 1832287951 + .long 667617719 + .long 1330003814 + .long 2657085997 + .long 1965537991 + .long 3957715323 + .long 1023883767 + .long 2320667370 + .long 1811636145 + .long 529358088 + .long 1443049542 + .long 4235946923 + .long 4040145953 + .type PI_INV_TABLE,@object + .size PI_INV_TABLE,164 + .space 12, 0x00 # pad + .align 16 +PI_4: + .long 1073741824 + .long 1072243195 + .long 407279769 + .long 1046758445 + .type PI_4,@object + .size PI_4,16 + .align 8 +PI32INV: + .long 1841940611 + .long 1076125488 + .type PI32INV,@object + .size PI32INV,8 + .align 8 +SIGN_MASK: + .long 0 + .long 2147483648 + .type SIGN_MASK,@object + .size SIGN_MASK,8 + .align 8 +P_1: + .long 1413480448 + .long 1069097467 + .type P_1,@object + .size P_1,8 + .align 8 +P_3: + .long 771977331 + .long 996350346 + .type P_3,@object + .size P_3,8 + .align 8 +ONE: + .long 0 + .long 1072693248 + .type ONE,@object + .size ONE,8 + .align 8 +NEG_ZERO: + .long 0 + .long 2147483648 + .type NEG_ZERO,@object + .size NEG_ZERO,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000002c + .4byte 0x0000001c + .4byte ..___tag_value_cos.1-. + .4byte ..___tag_value_cos.9-..___tag_value_cos.1 + .2byte 0x0400 + .4byte ..___tag_value_cos.3-..___tag_value_cos.1 + .4byte 0x0283100e + .byte 0x04 + .4byte ..___tag_value_cos.5-..___tag_value_cos.3 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_cos.6-..___tag_value_cos.5 + .4byte 0x04c3100e + .4byte ..___tag_value_cos.8-..___tag_value_cos.6 + .2byte 0x080e +# End diff --git a/libm/x86_64/s_expm1.S b/libm/x86_64/s_expm1.S new file mode 100644 index 000000000..9da1d9dd6 --- /dev/null +++ b/libm/x86_64/s_expm1.S @@ -0,0 +1,727 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Description: +// Let K = 64 (table size). +// +// Four sub-domains: +// 1. |x| < 1/(2*K) +// expm1(x) ~ P(x) +// 2. 1/(2*K) <= |x| <= 56*log(2) +// x x/log(2) n +// e - 1 = 2 = 2 * T[j] * (1 + P(y)) - 1 +// 3. 56*log(2) < x < MAX_LOG +// x x x/log(2) n +// e - 1 ~ e = 2 = 2 * T[j] * (1 + P(y)) +// 4. x < -56*log(2) +// x x +// e - 1 = -1 + e ~ -1 +// where +// x = m*log(2)/K + y, y in [-log(2)/K..log(2)/K] +// m = n*K + j, m,n,j - signed integer, j in [-K/2..K/2] +// j/K +// values of 2 are tabulated as T[j] = T_hi[j] ( 1 + T_lo[j]). +// +// P(y) is a minimax polynomial approximation of exp(x)-1 +// on small interval [-log(2)/K..log(2)/K] (were calculated by Maple V). +// +// In case 3, to avoid problems with arithmetic overflow and underflow, +// n n1 n2 +// value of 2 is safely computed as 2 * 2 where n1 in [-BIAS/2..BIAS/2] +// and BIAS is a value of exponent bias. +// +// Special cases: +// expm1(NaN) is NaN +// expm1(+INF) is +INF +// expm1(-INF) is -1 +// expm1(x) is x for subnormals +// for finite argument, only expm1(0)=0 is exact. +// For IEEE double +// if x > 709.782712893383973096 then expm1(x) overflow +// +/******************************************************************************/ + +#include +# -- Begin expm1 +ENTRY(expm1) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_expm1.1: + subq $56, %rsp +..___tag_value_expm1.3: + movsd %xmm0, 32(%rsp) +..B1.2: + unpcklpd %xmm0, %xmm0 + movapd cv(%rip), %xmm1 + movapd Shifter(%rip), %xmm6 + movapd 16+cv(%rip), %xmm2 + movapd 32+cv(%rip), %xmm3 + pextrw $3, %xmm0, %eax + andl $32767, %eax + movl $16527, %edx + subl %eax, %edx + subl $16304, %eax + orl %eax, %edx + cmpl $-2147483648, %edx + jae .L_2TAG_PACKET_0.0.2 + mulpd %xmm0, %xmm1 + addpd %xmm6, %xmm1 + movapd %xmm1, %xmm7 + subpd %xmm6, %xmm1 + mulpd %xmm1, %xmm2 + movapd 48+cv(%rip), %xmm4 + mulpd %xmm1, %xmm3 + movapd 64+cv(%rip), %xmm5 + subpd %xmm2, %xmm0 + movd %xmm7, %eax + movl %eax, %ecx + andl $63, %ecx + shll $4, %ecx + sarl $6, %eax + movl %eax, %edx + subpd %xmm3, %xmm0 + lea Tbl_addr(%rip), %r11 + movapd (%rcx,%r11), %xmm2 + movq 80+cv(%rip), %xmm3 + mulpd %xmm0, %xmm4 + movapd %xmm0, %xmm1 + mulpd %xmm0, %xmm0 + mulsd %xmm0, %xmm3 + addpd %xmm4, %xmm5 + mulsd %xmm0, %xmm0 + movq %xmm2, %xmm4 + unpckhpd %xmm2, %xmm2 + movdqa mmask(%rip), %xmm6 + pand %xmm6, %xmm7 + movdqa bias(%rip), %xmm6 + paddq %xmm6, %xmm7 + psllq $46, %xmm7 + mulsd %xmm0, %xmm3 + mulpd %xmm5, %xmm0 + addl $894, %edx + cmpl $1916, %edx + ja .L_2TAG_PACKET_1.0.2 + addsd %xmm3, %xmm0 + xorpd %xmm3, %xmm3 + movl $16368, %eax + pinsrw $3, %eax, %xmm3 + orpd %xmm7, %xmm2 + mulsd %xmm4, %xmm7 + movq %xmm3, %xmm6 + addsd %xmm1, %xmm3 + pextrw $3, %xmm2, %edx + pshufd $238, %xmm0, %xmm5 + psrlq $38, %xmm3 + psllq $38, %xmm3 + movq %xmm2, %xmm4 + subsd %xmm3, %xmm6 + addsd %xmm5, %xmm0 + addsd %xmm6, %xmm1 + addsd %xmm7, %xmm4 + mulsd %xmm3, %xmm7 + mulsd %xmm2, %xmm3 + xorpd %xmm5, %xmm5 + movl $16368, %eax + pinsrw $3, %eax, %xmm5 + addsd %xmm1, %xmm0 + movl $17184, %ecx + subl %edx, %ecx + subl $16256, %edx + orl %edx, %ecx + jl .L_2TAG_PACKET_2.0.2 + mulsd %xmm4, %xmm0 + subsd %xmm5, %xmm3 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 +.L_2TAG_PACKET_3.0.2: + jmp ..B1.5 +.L_2TAG_PACKET_2.0.2: + cmpl $0, %edx + jl .L_2TAG_PACKET_4.0.2 + mulsd %xmm4, %xmm0 + subsd %xmm5, %xmm7 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_4.0.2: + mulsd %xmm4, %xmm0 + addsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + subsd %xmm5, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_1.0.2: + movl 36(%rsp), %ecx + addsd %xmm0, %xmm1 + unpckhpd %xmm0, %xmm0 + addsd %xmm1, %xmm0 + cmpl $0, %ecx + jl .L_2TAG_PACKET_5.0.2 + fstcw (%rsp) + movw (%rsp), %dx + orw $768, %dx + movw %dx, 4(%rsp) + fldcw 4(%rsp) + movl %eax, %edx + sarl $1, %eax + subl %eax, %edx + movdqa emask(%rip), %xmm6 + pandn %xmm2, %xmm6 + addl $1023, %eax + movd %eax, %xmm3 + psllq $52, %xmm3 + orpd %xmm3, %xmm6 + mulsd %xmm3, %xmm4 + movsd %xmm0, 16(%rsp) + fldl 16(%rsp) + movsd %xmm6, 24(%rsp) + fldl 24(%rsp) + movsd %xmm4, 16(%rsp) + fldl 16(%rsp) + addl $1023, %edx + movd %edx, %xmm4 + psllq $52, %xmm4 + faddp %st, %st(1) + fmul %st, %st(1) + faddp %st, %st(1) + movsd %xmm4, 24(%rsp) + fldl 24(%rsp) + fmulp %st, %st(1) + fstpl 16(%rsp) + movsd 16(%rsp), %xmm0 + fldcw (%rsp) + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + cmpl $32752, %ecx + jae .L_2TAG_PACKET_6.0.2 + jmp ..B1.5 + cmpl $-2147483648, %ecx + jb .L_2TAG_PACKET_6.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + movl $41, 8(%rsp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_8.0.2: + cmpl $2146435072, %eax + jae .L_2TAG_PACKET_9.0.2 + movsd XMAX(%rip), %xmm0 + mulsd %xmm0, %xmm0 + movl $41, 8(%rsp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_9.0.2: + movl 36(%rsp), %eax + movl 32(%rsp), %edx + movl %eax, %ecx + andl $2147483647, %eax + cmpl $2146435072, %eax + ja .L_2TAG_PACKET_10.0.2 + cmpl $0, %edx + jne .L_2TAG_PACKET_10.0.2 + cmpl $0, %ecx + jl .L_2TAG_PACKET_11.0.2 + movq INF(%rip), %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_11.0.2: + jmp .L_2TAG_PACKET_5.0.2 +.L_2TAG_PACKET_10.0.2: + movsd 32(%rsp), %xmm0 + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_12.0.2: + addl $16304, %eax + cmpl $15504, %eax + jb .L_2TAG_PACKET_13.0.2 + movapd cvl(%rip), %xmm2 + pshufd $68, %xmm0, %xmm1 + movapd 16+cvl(%rip), %xmm3 + movapd 32+cvl(%rip), %xmm4 + movq 48+cvl(%rip), %xmm5 + mulsd %xmm1, %xmm1 + xorpd %xmm6, %xmm6 + movl $16352, %eax + pinsrw $3, %eax, %xmm6 + mulpd %xmm0, %xmm2 + xorpd %xmm7, %xmm7 + movl $16368, %edx + pinsrw $3, %edx, %xmm7 + addpd %xmm3, %xmm2 + mulsd %xmm1, %xmm5 + pshufd $228, %xmm1, %xmm3 + mulpd %xmm1, %xmm1 + mulsd %xmm0, %xmm6 + mulpd %xmm0, %xmm2 + addpd %xmm4, %xmm2 + movq %xmm7, %xmm4 + addsd %xmm6, %xmm7 + mulpd %xmm3, %xmm1 + psrlq $27, %xmm7 + psllq $27, %xmm7 + movq HIGHMASK(%rip), %xmm3 + subsd %xmm7, %xmm4 + mulpd %xmm1, %xmm2 + addsd %xmm4, %xmm6 + pshufd $238, %xmm2, %xmm1 + addsd %xmm2, %xmm6 + andpd %xmm0, %xmm3 + movq %xmm0, %xmm4 + addsd %xmm6, %xmm1 + subsd %xmm3, %xmm0 + addsd %xmm5, %xmm1 + mulsd %xmm7, %xmm3 + mulsd %xmm7, %xmm0 + mulsd %xmm1, %xmm4 + addsd %xmm4, %xmm0 + addsd %xmm3, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_13.0.2: + cmpl $16, %eax + jae .L_2TAG_PACKET_3.0.2 + movq %xmm0, %xmm2 + movd %xmm0, %eax + psrlq $31, %xmm2 + movd %xmm2, %ecx + orl %ecx, %eax + je .L_2TAG_PACKET_3.0.2 + movl $16, %edx + xorpd %xmm1, %xmm1 + pinsrw $3, %edx, %xmm1 + mulsd %xmm1, %xmm1 + movl $42, 8(%rsp) + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_0.0.2: + cmpl $0, %eax + jl .L_2TAG_PACKET_12.0.2 + movl 36(%rsp), %eax + cmpl $1083179008, %eax + jge .L_2TAG_PACKET_8.0.2 + cmpl $-1048576, %eax + jae .L_2TAG_PACKET_9.0.2 +.L_2TAG_PACKET_5.0.2: + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_7.0.2: + movq %xmm0, 40(%rsp) +..B1.3: + movq 40(%rsp), %xmm0 +.L_2TAG_PACKET_14.0.2: +..B1.5: + addq $56, %rsp +..___tag_value_expm1.4: + ret +..___tag_value_expm1.5: +END(expm1) +# -- End expm1 + .section .rodata, "a" + .align 16 + .align 16 +cv: + .long 1697350398 + .long 1079448903 + .long 1697350398 + .long 1079448903 + .long 4277796864 + .long 1065758274 + .long 4277796864 + .long 1065758274 + .long 3164486458 + .long 1025308570 + .long 3164486458 + .long 1025308570 + .long 1963358694 + .long 1065423121 + .long 1431655765 + .long 1069897045 + .long 1431655765 + .long 1067799893 + .long 0 + .long 1071644672 + .long 381774871 + .long 1062650220 + .long 381774871 + .long 1062650220 + .type cv,@object + .size cv,96 + .align 16 +Shifter: + .long 0 + .long 1127743488 + .long 0 + .long 1127743488 + .type Shifter,@object + .size Shifter,16 + .align 16 +Tbl_addr: + .long 0 + .long 0 + .long 0 + .long 0 + .long 1000070955 + .long 1042145304 + .long 1040187392 + .long 11418 + .long 988267849 + .long 1039500660 + .long 3539992576 + .long 22960 + .long 36755401 + .long 1042114290 + .long 402653184 + .long 34629 + .long 3634769483 + .long 1042178627 + .long 1820327936 + .long 46424 + .long 2155991225 + .long 1041560680 + .long 847249408 + .long 58348 + .long 2766913307 + .long 1039293264 + .long 3489660928 + .long 70401 + .long 3651174602 + .long 1040488175 + .long 2927624192 + .long 82586 + .long 3073892131 + .long 1042240606 + .long 1006632960 + .long 94904 + .long 1328391742 + .long 1042019037 + .long 3942645760 + .long 107355 + .long 2650893825 + .long 1041903210 + .long 822083584 + .long 119943 + .long 2397289153 + .long 1041802037 + .long 2281701376 + .long 132667 + .long 430997175 + .long 1042110606 + .long 1845493760 + .long 145530 + .long 1230936525 + .long 1041801015 + .long 1702887424 + .long 158533 + .long 740675935 + .long 1040178913 + .long 4110417920 + .long 171677 + .long 3489810261 + .long 1041825986 + .long 2793406464 + .long 184965 + .long 2532600530 + .long 1040767882 + .long 167772160 + .long 198398 + .long 3542557060 + .long 1041827263 + .long 2986344448 + .long 211976 + .long 1401563777 + .long 1041061093 + .long 922746880 + .long 225703 + .long 3129406026 + .long 1041852413 + .long 880803840 + .long 239579 + .long 900993572 + .long 1039283234 + .long 1275068416 + .long 253606 + .long 2115029358 + .long 1042140042 + .long 562036736 + .long 267786 + .long 1086643152 + .long 1041785419 + .long 1610612736 + .long 282120 + .long 82864366 + .long 1041256244 + .long 3045064704 + .long 296610 + .long 2392968152 + .long 1040913683 + .long 3573547008 + .long 311258 + .long 2905856183 + .long 1040002214 + .long 1988100096 + .long 326066 + .long 3742008261 + .long 1040011137 + .long 1451229184 + .long 341035 + .long 863393794 + .long 1040880621 + .long 914358272 + .long 356167 + .long 1446136837 + .long 1041372426 + .long 3707764736 + .long 371463 + .long 927855201 + .long 1040617636 + .long 360710144 + .long 386927 + .long 1492679939 + .long 1041050306 + .long 2952790016 + .long 402558 + .long 608827001 + .long 1041582217 + .long 2181038080 + .long 418360 + .long 606260204 + .long 1042271987 + .long 1711276032 + .long 434334 + .long 3163044019 + .long 1041843851 + .long 1006632960 + .long 450482 + .long 4148747325 + .long 1041962972 + .long 3900702720 + .long 466805 + .long 802924201 + .long 1041275378 + .long 1442840576 + .long 483307 + .long 3052749833 + .long 1041940577 + .long 1937768448 + .long 499988 + .long 2216116399 + .long 1041486744 + .long 914358272 + .long 516851 + .long 2729697836 + .long 1041445764 + .long 2566914048 + .long 533897 + .long 540608356 + .long 1041310907 + .long 2600468480 + .long 551129 + .long 2916344493 + .long 1040535661 + .long 1107296256 + .long 568549 + .long 731391814 + .long 1039497014 + .long 2566914048 + .long 586158 + .long 1024722704 + .long 1041461625 + .long 2961178624 + .long 603959 + .long 3806831748 + .long 1041732499 + .long 2675965952 + .long 621954 + .long 238953304 + .long 1040316488 + .long 2189426688 + .long 640145 + .long 749123235 + .long 1041725785 + .long 2063597568 + .long 658534 + .long 1168187977 + .long 1041175214 + .long 2986344448 + .long 677123 + .long 3506096399 + .long 1042186095 + .long 1426063360 + .long 695915 + .long 1470221620 + .long 1041675499 + .long 2566914048 + .long 714911 + .long 3182425146 + .long 1041483134 + .long 3087007744 + .long 734114 + .long 3131698208 + .long 1042208657 + .long 4068474880 + .long 753526 + .long 2300504125 + .long 1041428596 + .long 2415919104 + .long 773150 + .long 2290297931 + .long 1037388400 + .long 3716153344 + .long 792987 + .long 3532148223 + .long 1041626194 + .long 771751936 + .long 813041 + .long 1161884404 + .long 1042015258 + .long 3699376128 + .long 833312 + .long 876383176 + .long 1037968878 + .long 1241513984 + .long 853805 + .long 3379986796 + .long 1042213153 + .long 3699376128 + .long 874520 + .long 1545797737 + .long 1041681569 + .long 58720256 + .long 895462 + .long 2925146801 + .long 1042212567 + .long 855638016 + .long 916631 + .long 1316627971 + .long 1038516204 + .long 3883925504 + .long 938030 + .long 3267869137 + .long 1040337004 + .long 2726297600 + .long 959663 + .long 3720868999 + .long 1041782409 + .long 3992977408 + .long 981531 + .long 433316142 + .long 1041994064 + .long 1526726656 + .long 1003638 + .long 781232103 + .long 1040093400 + .long 2172649472 + .long 1025985 + .type Tbl_addr,@object + .size Tbl_addr,1024 + .align 16 +mmask: + .long 4294967232 + .long 0 + .long 4294967232 + .long 0 + .type mmask,@object + .size mmask,16 + .align 16 +bias: + .long 65472 + .long 0 + .long 65472 + .long 0 + .type bias,@object + .size bias,16 + .align 16 +emask: + .long 0 + .long 4293918720 + .long 0 + .long 4293918720 + .type emask,@object + .size emask,16 + .align 16 +cvl: + .long 2773927732 + .long 1053236707 + .long 381774871 + .long 1062650220 + .long 379653899 + .long 1056571845 + .long 286331153 + .long 1065423121 + .long 436314138 + .long 1059717536 + .long 1431655765 + .long 1067799893 + .long 1431655765 + .long 1069897045 + .long 0 + .long 1071644672 + .type cvl,@object + .size cvl,64 + .align 8 +XMAX: + .long 4294967295 + .long 2146435071 + .type XMAX,@object + .size XMAX,8 + .align 8 +INF: + .long 0 + .long 2146435072 + .type INF,@object + .size INF,8 + .align 8 +HIGHMASK: + .long 4227858432 + .long 4294967295 + .type HIGHMASK,@object + .size HIGHMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_expm1.1-. + .4byte ..___tag_value_expm1.5-..___tag_value_expm1.1 + .2byte 0x0400 + .4byte ..___tag_value_expm1.3-..___tag_value_expm1.1 + .2byte 0x400e + .byte 0x04 + .4byte ..___tag_value_expm1.4-..___tag_value_expm1.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/s_log1p.S b/libm/x86_64/s_log1p.S new file mode 100644 index 000000000..1ff2d3965 --- /dev/null +++ b/libm/x86_64/s_log1p.S @@ -0,0 +1,829 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Let x=2^k * mx, mx in [1,2) +// +// Get B~1/mx based on the output of rcpps instruction (B0) +// B = int((B0*2^7+0.5))/2^7 +// +// Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts) +// +// Result: k*log(2) - log(B) + p(r) +// p(r) is a degree 7 polynomial +// -log(B) read from data table (high, low parts) +// Result is formed from high and low parts +// +// Special cases: +// log1p(NaN) = quiet NaN, and raise invalid exception +// log1p(+INF) = that INF +// log1p(x) = NaN if x < -1 or x = -INF, and raises invalid exception +// log1p(-1) = -INF, and raises divide-by-zero exception +// log1p(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin log1p +ENTRY(log1p) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_log1p.1: + subq $24, %rsp +..___tag_value_log1p.3: + movsd %xmm0, 8(%rsp) +..B1.2: + movq $0x3ff0000000000000, %rax + movd %rax, %xmm2 + xorpd %xmm3, %xmm3 + movl $32768, %ecx + movd %rcx, %xmm4 + movq $0xffffe00000000000, %r8 + movd %r8, %xmm5 + movddup %xmm0, %xmm7 + pshufd $68, %xmm2, %xmm6 + pextrw $3, %xmm0, %ecx + addsd %xmm2, %xmm0 + movq %xmm0, %xmm1 + pextrw $3, %xmm0, %eax + subsd %xmm0, %xmm6 + orpd %xmm2, %xmm0 + psrlq $27, %xmm0 + lea L_tbl(%rip), %r11 + psrld $2, %xmm0 + subl $16, %eax + cmpl $32736, %eax + jae .L_2TAG_PACKET_0.0.2 + addsd %xmm6, %xmm7 + rcpps %xmm0, %xmm0 + psllq $12, %xmm1 + pshufd $228, %xmm5, %xmm6 + psrlq $12, %xmm1 + andl $32752, %ecx + cmpl $16256, %ecx + jb .L_2TAG_PACKET_1.0.2 + andl $32752, %eax + movl $32720, %ecx + subl %eax, %ecx + pinsrw $3, %ecx, %xmm3 +.L_2TAG_PACKET_2.0.2: + mulsd %xmm3, %xmm7 + paddd %xmm4, %xmm0 + movq $0x3800000000000000, %rcx + movd %rcx, %xmm4 + orpd %xmm2, %xmm1 + movd %xmm0, %edx + psllq $29, %xmm0 + andpd %xmm1, %xmm5 + andpd %xmm6, %xmm0 + subsd %xmm5, %xmm1 + paddd %xmm4, %xmm0 + mulsd %xmm0, %xmm5 + movl $16352, %ecx + subl %ecx, %eax + cvtsi2sd %eax, %xmm4 + mulsd %xmm0, %xmm7 + mulsd %xmm0, %xmm1 + movq log2(%rip), %xmm6 + movapd coeff(%rip), %xmm3 + subsd %xmm2, %xmm5 + andl $16711680, %edx + shrl $12, %edx + movapd (%r11,%rdx), %xmm0 + movapd 16+coeff(%rip), %xmm2 + addsd %xmm5, %xmm1 + movq %xmm1, %xmm5 + addsd %xmm7, %xmm1 + subsd %xmm1, %xmm5 + addsd %xmm5, %xmm7 + mulsd %xmm4, %xmm6 + mulsd 8+log2(%rip), %xmm4 + mulsd %xmm1, %xmm3 + movddup %xmm1, %xmm5 + addsd %xmm6, %xmm0 + mulpd %xmm5, %xmm2 + mulpd %xmm5, %xmm5 + movddup %xmm0, %xmm6 + addsd %xmm1, %xmm0 + addpd 32+coeff(%rip), %xmm2 + mulpd %xmm5, %xmm3 + subsd %xmm0, %xmm6 + mulsd %xmm1, %xmm2 + addsd %xmm7, %xmm4 + mulsd %xmm1, %xmm7 + addsd %xmm6, %xmm1 + pshufd $238, %xmm0, %xmm6 + mulsd %xmm5, %xmm5 + addsd %xmm6, %xmm4 + subsd %xmm7, %xmm1 + addpd %xmm3, %xmm2 + addsd %xmm4, %xmm1 + mulpd %xmm5, %xmm2 + addsd %xmm2, %xmm1 + pshufd $238, %xmm2, %xmm5 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_0.0.2: + movq 8(%rsp), %xmm0 + movq 8(%rsp), %xmm1 + addl $16, %eax + cmpl $32768, %eax + jae .L_2TAG_PACKET_3.0.2 + cmpl $0, %eax + je .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_5.0.2: + addsd %xmm0, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_6.0.2: + ja .L_2TAG_PACKET_5.0.2 + cmpl $0, %edx + ja .L_2TAG_PACKET_5.0.2 + jmp .L_2TAG_PACKET_7.0.2 +.L_2TAG_PACKET_3.0.2: + movd %xmm1, %edx + psrlq $32, %xmm1 + movd %xmm1, %ecx + addl %ecx, %ecx + cmpl $-2097152, %ecx + jae .L_2TAG_PACKET_6.0.2 + orl %ecx, %edx + cmpl $0, %edx + je .L_2TAG_PACKET_4.0.2 +.L_2TAG_PACKET_7.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $32752, %eax + pinsrw $3, %eax, %xmm1 + movl $141, (%rsp) + mulsd %xmm1, %xmm0 + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_4.0.2: + xorpd %xmm1, %xmm1 + xorpd %xmm0, %xmm0 + movl $49136, %eax + pinsrw $3, %eax, %xmm0 + divsd %xmm1, %xmm0 + movl $140, (%rsp) + jmp .L_2TAG_PACKET_8.0.2 +.L_2TAG_PACKET_1.0.2: + movq 8(%rsp), %xmm0 + cmpl $15504, %ecx + jb .L_2TAG_PACKET_9.0.2 + movapd coeff2(%rip), %xmm1 + pshufd $68, %xmm0, %xmm0 + movapd 16+coeff2(%rip), %xmm2 + pshufd $68, %xmm0, %xmm4 + movapd 32+coeff2(%rip), %xmm3 + mulpd %xmm0, %xmm1 + xorpd %xmm6, %xmm6 + mulpd %xmm4, %xmm4 + addpd %xmm2, %xmm1 + pshufd $68, %xmm4, %xmm5 + mulpd %xmm0, %xmm4 + movl $49120, %eax + pinsrw $3, %eax, %xmm6 + mulpd %xmm0, %xmm1 + mulsd %xmm4, %xmm4 + addpd %xmm3, %xmm1 + mulsd %xmm6, %xmm5 + mulpd %xmm4, %xmm1 + pshufd $238, %xmm1, %xmm7 + addsd %xmm7, %xmm1 + addsd %xmm5, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.5 +.L_2TAG_PACKET_9.0.2: + cmpl $16, %ecx + jb .L_2TAG_PACKET_10.0.2 + jmp ..B1.5 +.L_2TAG_PACKET_10.0.2: + movq %xmm0, %xmm1 + mulsd %xmm1, %xmm1 + jmp ..B1.5 +.L_2TAG_PACKET_8.0.2: + movq %xmm0, 16(%rsp) +..B1.3: + movq 16(%rsp), %xmm0 +.L_2TAG_PACKET_11.0.2: +..B1.5: + addq $24, %rsp +..___tag_value_log1p.4: + ret +..___tag_value_log1p.5: +END(log1p) +# -- End log1p + .section .rodata, "a" + .align 16 + .align 16 +L_tbl: + .long 4277811200 + .long 1072049730 + .long 2479318832 + .long 1026487127 + .long 2854492160 + .long 1072033410 + .long 215631550 + .long 1025638968 + .long 1547061248 + .long 1072017216 + .long 2886781435 + .long 1026423395 + .long 649825280 + .long 1072001146 + .long 4281533405 + .long 1024038923 + .long 646346752 + .long 1071985198 + .long 1562735921 + .long 1023790276 + .long 2203734016 + .long 1071969370 + .long 1838397691 + .long 3173936209 + .long 1872169984 + .long 1071953661 + .long 3981202460 + .long 1022325013 + .long 669557760 + .long 1071938069 + .long 4182597802 + .long 3173174122 + .long 4076413952 + .long 1071922591 + .long 1209029111 + .long 3170736207 + .long 556125184 + .long 1071907228 + .long 821086028 + .long 3173437049 + .long 204914688 + .long 1071891976 + .long 2097025986 + .long 3171071798 + .long 387545088 + .long 1071876834 + .long 3142936996 + .long 3173092218 + .long 2912783360 + .long 1071861800 + .long 2502420140 + .long 1024505919 + .long 1144260608 + .long 1071846874 + .long 3315658140 + .long 3173469843 + .long 1471209472 + .long 1071832053 + .long 129621009 + .long 3172443877 + .long 1829683200 + .long 1071817336 + .long 3885467693 + .long 1025535275 + .long 288676864 + .long 1071802722 + .long 86139472 + .long 3171639793 + .long 3636378624 + .long 1071788208 + .long 1850238587 + .long 1024654342 + .long 1606817792 + .long 1071773795 + .long 3388899795 + .long 3173675586 + .long 1236164608 + .long 1071759480 + .long 3983599207 + .long 1020046558 + .long 1089616896 + .long 1071745262 + .long 4171974224 + .long 1024773198 + .long 4143093760 + .long 1071731139 + .long 2727587401 + .long 3173965207 + .long 600267776 + .long 1071717112 + .long 3147685042 + .long 3173353031 + .long 2249313280 + .long 1071703177 + .long 125835074 + .long 1025255832 + .long 3805303808 + .long 1071689334 + .long 2289991207 + .long 1025460331 + .long 87278592 + .long 1071675583 + .long 1106114045 + .long 1025933602 + .long 3195405312 + .long 1071661920 + .long 3885316576 + .long 3171206239 + .long 3853649920 + .long 1071648346 + .long 2977069852 + .long 3171236771 + .long 2944026624 + .long 1071625048 + .long 1008093493 + .long 1023444474 + .long 3993180160 + .long 1071598247 + .long 1862355595 + .long 1024642533 + .long 1454641152 + .long 1071571617 + .long 1514603089 + .long 1026500596 + .long 3286085632 + .long 1071545154 + .long 1400028424 + .long 3173279056 + .long 438773760 + .long 1071518858 + .long 120727864 + .long 3172148914 + .long 1212979200 + .long 1071492725 + .long 1625055594 + .long 3172901933 + .long 1189017600 + .long 1071466754 + .long 3920062376 + .long 1025727407 + .long 403064832 + .long 1071440943 + .long 1053271728 + .long 3171391427 + .long 3343210496 + .long 1071415289 + .long 3243395502 + .long 3173627613 + .long 1765777408 + .long 1071389792 + .long 2145968512 + .long 1026354304 + .long 461430784 + .long 1071364449 + .long 4094322285 + .long 1026021467 + .long 71706624 + .long 1071339258 + .long 763632021 + .long 1024496933 + .long 1380503552 + .long 1071314217 + .long 1383547992 + .long 3173088453 + .long 1015732224 + .long 1071289325 + .long 3198646877 + .long 1025390322 + .long 35977216 + .long 1071264580 + .long 2141026805 + .long 1025754693 + .long 3927306240 + .long 1071239979 + .long 282116272 + .long 3173394334 + .long 1125341184 + .long 1071215523 + .long 2768427504 + .long 3172279059 + .long 1666971648 + .long 1071191208 + .long 786837629 + .long 3172427445 + .long 2827694080 + .long 1071167033 + .long 3857122416 + .long 3173014241 + .long 2003683328 + .long 1071142997 + .long 859010954 + .long 1026545007 + .long 1004017664 + .long 1071119098 + .long 3356644970 + .long 3173458064 + .long 1753020416 + .long 1071095334 + .long 788338552 + .long 1026157693 + .long 1992718336 + .long 1071071704 + .long 1239179443 + .long 1026394889 + .long 3870234624 + .long 1071048206 + .long 2082614663 + .long 1024926053 + .long 1050437632 + .long 1071024840 + .long 660007840 + .long 1025548499 + .long 188395520 + .long 1071001603 + .long 3878792704 + .long 3173889571 + .long 3747176448 + .long 1070978493 + .long 144991708 + .long 3171552042 + .long 1405669376 + .long 1070955511 + .long 3999088879 + .long 1025486317 + .long 121151488 + .long 1070932654 + .long 2170865497 + .long 1026473584 + .long 2652319744 + .long 1070909920 + .long 453695652 + .long 3173916809 + .long 3262236672 + .long 1070887309 + .long 157800053 + .long 3173984206 + .long 601221120 + .long 1070864820 + .long 3968917661 + .long 1023992886 + .long 1999843328 + .long 1070842450 + .long 3053895004 + .long 1024998228 + .long 1992167424 + .long 1070820199 + .long 2968614856 + .long 1024552653 + .long 3788726272 + .long 1070798065 + .long 3542170808 + .long 3173573242 + .long 2094829568 + .long 1070776048 + .long 1246758132 + .long 1026202874 + .long 288675840 + .long 1070754146 + .long 3747328950 + .long 1026331585 + .long 1829681152 + .long 1070732357 + .long 3125197546 + .long 1024100318 + .long 1666869248 + .long 1070710681 + .long 1363656119 + .long 1026336493 + .long 3417110528 + .long 1070689116 + .long 4154791553 + .long 1026267853 + .long 2183653376 + .long 1070667662 + .long 1671819292 + .long 3173785870 + .long 1734434816 + .long 1070646317 + .long 373091049 + .long 1025972363 + .long 1615681536 + .long 1070625080 + .long 384650897 + .long 1022926043 + .long 1445382144 + .long 1070603950 + .long 344320330 + .long 3172397196 + .long 1823715328 + .long 1070569756 + .long 3389841200 + .long 1025231852 + .long 3839688704 + .long 1070527917 + .long 1706790417 + .long 3167363349 + .long 4293332992 + .long 1070486286 + .long 1614935088 + .long 1019351591 + .long 2966720512 + .long 1070444861 + .long 4145393717 + .long 3173711658 + .long 4066729984 + .long 1070403639 + .long 1974925028 + .long 3171437182 + .long 3337621504 + .long 1070362619 + .long 3314953170 + .long 3169971314 + .long 943448064 + .long 1070321799 + .long 1498682038 + .long 3173862340 + .long 1465634816 + .long 1070281176 + .long 1319952810 + .long 3171693965 + .long 1015734272 + .long 1070240749 + .long 1347821929 + .long 3173544515 + .long 118001664 + .long 1070200516 + .long 1751482746 + .long 1026134093 + .long 3707174912 + .long 1070160474 + .long 1486946159 + .long 1023930920 + .long 3946381312 + .long 1070120623 + .long 2867408081 + .long 3171368276 + .long 1699848192 + .long 1070080961 + .long 2590187139 + .long 1025379803 + .long 2235846656 + .long 1070041485 + .long 1888568069 + .long 3172754960 + .long 2339729408 + .long 1070002194 + .long 3852214753 + .long 3173323149 + .long 3196850176 + .long 1069963086 + .long 742141560 + .long 1025101707 + .long 1800683520 + .long 1069924160 + .long 3949500444 + .long 3172102179 + .long 3835801600 + .long 1069885413 + .long 3848895943 + .long 1025913832 + .long 2201202688 + .long 1069846845 + .long 1425913464 + .long 1025868665 + .long 2778279936 + .long 1069808453 + .long 2120889677 + .long 3173831128 + .long 2954203136 + .long 1069770236 + .long 592147081 + .long 1019621288 + .long 210141184 + .long 1069732193 + .long 3414275233 + .long 1023647084 + .long 709476352 + .long 1069694321 + .long 2413027164 + .long 1024462115 + .long 2116284416 + .long 1069656619 + .long 1144559924 + .long 1026336654 + .long 2183651328 + .long 1069619086 + .long 3459057650 + .long 1025634168 + .long 3047047168 + .long 1069581720 + .long 1879674924 + .long 3173508573 + .long 970711040 + .long 1069541521 + .long 1335954173 + .long 3173332182 + .long 2198478848 + .long 1069467449 + .long 2951103968 + .long 3173892200 + .long 1669611520 + .long 1069393703 + .long 531044147 + .long 1025149248 + .long 29114368 + .long 1069320280 + .long 3327831251 + .long 1025918673 + .long 2376949760 + .long 1069247176 + .long 737634533 + .long 3172176000 + .long 1085390848 + .long 1069174390 + .long 3108243400 + .long 3171828406 + .long 1566130176 + .long 1069101918 + .long 985483226 + .long 1025708380 + .long 792780800 + .long 1069029758 + .long 4184866295 + .long 1024426204 + .long 183156736 + .long 1068957907 + .long 2845699378 + .long 1022107277 + .long 1301782528 + .long 1068886362 + .long 1012735262 + .long 3173804294 + .long 1562411008 + .long 1068815121 + .long 2197086703 + .long 3170187813 + .long 2815549440 + .long 1068744181 + .long 2782613207 + .long 1026345054 + .long 2756124672 + .long 1068673540 + .long 2929486205 + .long 3173037800 + .long 3511050240 + .long 1068603195 + .long 1443733147 + .long 3173331549 + .long 3047047168 + .long 1068533144 + .long 1879674924 + .long 3172459997 + .long 3221667840 + .long 1068427825 + .long 1338588027 + .long 3171815742 + .long 3453861888 + .long 1068288883 + .long 1205348359 + .long 3172624626 + .long 3506110464 + .long 1068150514 + .long 893105198 + .long 1025571866 + .long 346013696 + .long 1068012714 + .long 3495569021 + .long 3172563349 + .long 4074029056 + .long 1067875476 + .long 3961106338 + .long 3171065595 + .long 3559784448 + .long 1067738798 + .long 1975385384 + .long 3173783155 + .long 797769728 + .long 1067602675 + .long 3760305787 + .long 1026047642 + .long 2313633792 + .long 1067467101 + .long 1559353171 + .long 1023480256 + .long 3960766464 + .long 1067213778 + .long 1067365107 + .long 1025865926 + .long 684261376 + .long 1066944805 + .long 844762164 + .long 3173687482 + .long 630718464 + .long 1066676905 + .long 2458269694 + .long 1024033081 + .long 1486061568 + .long 1066410070 + .long 115537874 + .long 3173243995 + .long 2743664640 + .long 1065886792 + .long 3665098304 + .long 3173471607 + .long 1971912704 + .long 1065357333 + .long 2577214440 + .long 3171993451 + .long 1498939392 + .long 1064306693 + .long 3409036923 + .long 1025599151 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .type L_tbl,@object + .size L_tbl,2064 + .align 16 +log2: + .long 4277811200 + .long 1067855426 + .long 2479318832 + .long 1022292823 + .type log2,@object + .size log2,16 + .align 16 +coeff: + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1030730101 + .long 3217380702 + .long 1431655765 + .long 1070945621 + .long 2576980378 + .long 1070176665 + .long 0 + .long 3219128320 + .type coeff,@object + .size coeff,48 + .align 16 +coeff2: + .long 0 + .long 3217031168 + .long 2576980378 + .long 1070176665 + .long 2454267026 + .long 1069697316 + .long 0 + .long 3218079744 + .long 1431655765 + .long 3217380693 + .long 1431655765 + .long 1070945621 + .type coeff2,@object + .size coeff2,48 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_log1p.1-. + .4byte ..___tag_value_log1p.5-..___tag_value_log1p.1 + .2byte 0x0400 + .4byte ..___tag_value_log1p.3-..___tag_value_log1p.1 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_log1p.4-..___tag_value_log1p.3 + .2byte 0x080e + .byte 0x00 +# End diff --git a/libm/x86_64/s_sin.S b/libm/x86_64/s_sin.S new file mode 100644 index 000000000..2f93a34bb --- /dev/null +++ b/libm/x86_64/s_sin.S @@ -0,0 +1,1300 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// 1. RANGE REDUCTION +// +// We perform an initial range reduction from X to r with +// +// X =~= N * pi/32 + r +// +// so that |r| <= pi/64 + epsilon. We restrict inputs to those +// where |N| <= 932560. Beyond this, the range reduction is +// insufficiently accurate. For extremely small inputs, +// denormalization can occur internally, impacting performance. +// This means that the main path is actually only taken for +// 2^-252 <= |X| < 90112. +// +// To avoid branches, we perform the range reduction to full +// accuracy each time. +// +// X - N * (P_1 + P_2 + P_3) +// +// where P_1 and P_2 are 32-bit numbers (so multiplication by N +// is exact) and P_3 is a 53-bit number. Together, these +// approximate pi well enough for all cases in the restricted +// range. +// +// The main reduction sequence is: +// +// y = 32/pi * x +// N = integer(y) +// (computed by adding and subtracting off SHIFTER) +// +// m_1 = N * P_1 +// m_2 = N * P_2 +// r_1 = x - m_1 +// r = r_1 - m_2 +// (this r can be used for most of the calculation) +// +// c_1 = r_1 - r +// m_3 = N * P_3 +// c_2 = c_1 - m_2 +// c = c_2 - m_3 +// +// 2. MAIN ALGORITHM +// +// The algorithm uses a table lookup based on B = M * pi / 32 +// where M = N mod 64. The stored values are: +// sigma closest power of 2 to cos(B) +// C_hl 53-bit cos(B) - sigma +// S_hi + S_lo 2 * 53-bit sin(B) +// +// The computation is organized as follows: +// +// sin(B + r + c) = [sin(B) + sigma * r] + +// r * (cos(B) - sigma) + +// sin(B) * [cos(r + c) - 1] + +// cos(B) * [sin(r + c) - r] +// +// which is approximately: +// +// [S_hi + sigma * r] + +// C_hl * r + +// S_lo + S_hi * [(cos(r) - 1) - r * c] + +// (C_hl + sigma) * [(sin(r) - r) + c] +// +// and this is what is actually computed. We separate this sum +// into four parts: +// +// hi + med + pols + corr +// +// where +// +// hi = S_hi + sigma r +// med = C_hl * r +// pols = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r) +// corr = S_lo + c * ((C_hl + sigma) - S_hi * r) +// +// 3. POLYNOMIAL +// +// The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) * +// (sin(r) - r) can be rearranged freely, since it is quite +// small, so we exploit parallelism to the fullest. +// +// psc4 = SC_4 * r_1 +// msc4 = psc4 * r +// r2 = r * r +// msc2 = SC_2 * r2 +// r4 = r2 * r2 +// psc3 = SC_3 + msc4 +// psc1 = SC_1 + msc2 +// msc3 = r4 * psc3 +// sincospols = psc1 + msc3 +// pols = sincospols * +// +// +// 4. CORRECTION TERM +// +// This is where the "c" component of the range reduction is +// taken into account; recall that just "r" is used for most of +// the calculation. +// +// -c = m_3 - c_2 +// -d = S_hi * r - (C_hl + sigma) +// corr = -c * -d + S_lo +// +// 5. COMPENSATED SUMMATIONS +// +// The two successive compensated summations add up the high +// and medium parts, leaving just the low parts to add up at +// the end. +// +// rs = sigma * r +// res_int = S_hi + rs +// k_0 = S_hi - res_int +// k_2 = k_0 + rs +// med = C_hl * r +// res_hi = res_int + med +// k_1 = res_int - res_hi +// k_3 = k_1 + med +// +// 6. FINAL SUMMATION +// +// We now add up all the small parts: +// +// res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3 +// +// Now the overall result is just: +// +// res_hi + res_lo +// +// 7. SMALL ARGUMENTS +// +// If |x| < SNN (SNN meaning the smallest normal number), we +// simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we +// do 2^-55 * (2^55 * x - x). +// +// Special cases: +// sin(NaN) = quiet NaN, and raise invalid exception +// sin(INF) = NaN and raise invalid exception +// sin(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin sin +ENTRY(sin) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_sin.1: + pushq %rbx +..___tag_value_sin.3: + subq $16, %rsp +..___tag_value_sin.5: + movsd %xmm0, 8(%rsp) +..B1.2: + movl 12(%rsp), %eax + movq PI32INV(%rip), %xmm1 + movq SHIFTER(%rip), %xmm2 + andl $2147418112, %eax + subl $808452096, %eax + cmpl $281346048, %eax + ja .L_2TAG_PACKET_0.0.1 + mulsd %xmm0, %xmm1 + movapd ONEHALF(%rip), %xmm5 + movq SIGN_MASK(%rip), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %edx + cvtsi2sd %edx, %xmm1 + movapd P_2(%rip), %xmm6 + movq $0x3fb921fb54400000, %r8 + movd %r8, %xmm3 + movapd SC_4(%rip), %xmm5 + pshufd $68, %xmm0, %xmm4 + mulsd %xmm1, %xmm3 + movddup %xmm1, %xmm1 + andl $63, %edx + shll $5, %edx + lea Ctable(%rip), %rax + addq %rdx, %rax + mulpd %xmm1, %xmm6 + mulsd P_3(%rip), %xmm1 + subsd %xmm3, %xmm4 + movq 8(%rax), %xmm7 + subsd %xmm3, %xmm0 + movddup %xmm4, %xmm3 + subsd %xmm6, %xmm4 + pshufd $68, %xmm0, %xmm0 + movapd (%rax), %xmm2 + mulpd %xmm0, %xmm5 + subpd %xmm6, %xmm0 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm6, %xmm3 + movapd SC_2(%rip), %xmm6 + subsd %xmm3, %xmm1 + movq 24(%rax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd SC_3(%rip), %xmm5 + mulsd (%rax), %xmm4 + addpd SC_1(%rip), %xmm6 + mulpd %xmm0, %xmm5 + movq %xmm3, %xmm0 + addsd 8(%rax), %xmm3 + mulpd %xmm7, %xmm1 + movq %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movq 8(%rax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%rax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm0, %xmm5 + addsd %xmm7, %xmm3 + addsd %xmm5, %xmm1 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + unpckhpd %xmm6, %xmm6 + movq %xmm4, %xmm0 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_0.0.1: + jg .L_2TAG_PACKET_1.0.1 + shrl $20, %eax + cmpw $3325, %ax + jne .L_2TAG_PACKET_2.0.1 + mulsd ALL_ONES(%rip), %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_2.0.1: + movq TWO_POW_55(%rip), %xmm3 + mulsd %xmm0, %xmm3 + subsd %xmm0, %xmm3 + mulsd TWO_POW_M55(%rip), %xmm3 + jmp ..B1.4 +.L_2TAG_PACKET_1.0.1: + pextrw $3, %xmm0, %eax + andl $32752, %eax + cmpl $32752, %eax + je .L_2TAG_PACKET_3.0.1 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + subl $16224, %ecx + shrl $7, %ecx + andl $65532, %ecx + lea PI_INV_TABLE(%rip), %r11 + addq %r11, %rcx + movd %xmm0, %rax + movl 20(%rcx), %r10d + movl 24(%rcx), %r8d + movl %eax, %edx + shrq $21, %rax + orl $-2147483648, %eax + shrl $11, %eax + movl %r10d, %r9d + imulq %rdx, %r10 + imulq %rax, %r9 + imulq %rax, %r8 + movl 16(%rcx), %esi + movl 12(%rcx), %edi + movl %r10d, %r11d + shrq $32, %r10 + addq %r10, %r9 + addq %r8, %r11 + movl %r11d, %r8d + shrq $32, %r11 + addq %r11, %r9 + movl %esi, %r10d + imulq %rdx, %rsi + imulq %rax, %r10 + movl %edi, %r11d + imulq %rdx, %rdi + movl %esi, %ebx + shrq $32, %rsi + addq %rbx, %r9 + movl %r9d, %ebx + shrq $32, %r9 + addq %rsi, %r10 + addq %r9, %r10 + shlq $32, %rbx + orq %rbx, %r8 + imulq %rax, %r11 + movl 8(%rcx), %r9d + movl 4(%rcx), %esi + movl %edi, %ebx + shrq $32, %rdi + addq %rbx, %r10 + movl %r10d, %ebx + shrq $32, %r10 + addq %rdi, %r11 + addq %r10, %r11 + movq %r9, %rdi + imulq %rdx, %r9 + imulq %rax, %rdi + movl %r9d, %r10d + shrq $32, %r9 + addq %r10, %r11 + movl %r11d, %r10d + shrq $32, %r11 + addq %r9, %rdi + addq %r11, %rdi + movq %rsi, %r9 + imulq %rdx, %rsi + imulq %rax, %r9 + shlq $32, %r10 + orq %rbx, %r10 + movl (%rcx), %eax + movl %esi, %r11d + shrq $32, %rsi + addq %r11, %rdi + movl %edi, %r11d + shrq $32, %rdi + addq %rsi, %r9 + addq %rdi, %r9 + imulq %rax, %rdx + pextrw $3, %xmm0, %ebx + lea PI_INV_TABLE(%rip), %rdi + subq %rdi, %rcx + addl %ecx, %ecx + addl %ecx, %ecx + addl %ecx, %ecx + addl $19, %ecx + movl $32768, %esi + andl %ebx, %esi + shrl $4, %ebx + andl $2047, %ebx + subl $1023, %ebx + subl %ebx, %ecx + addq %rdx, %r9 + movl %ecx, %edx + addl $32, %edx + cmpl $1, %ecx + jl .L_2TAG_PACKET_4.0.1 + negl %ecx + addl $29, %ecx + shll %cl, %r9d + movl %r9d, %edi + andl $536870911, %r9d + testl $268435456, %r9d + jne .L_2TAG_PACKET_5.0.1 + shrl %cl, %r9d + movl $0, %ebx + shlq $32, %r9 + orq %r11, %r9 +.L_2TAG_PACKET_6.0.1: +.L_2TAG_PACKET_7.0.1: + cmpq $0, %r9 + je .L_2TAG_PACKET_8.0.1 +.L_2TAG_PACKET_9.0.1: + bsr %r9, %r11 + movl $29, %ecx + subl %r11d, %ecx + jle .L_2TAG_PACKET_10.0.1 + shlq %cl, %r9 + movq %r10, %rax + shlq %cl, %r10 + addl %ecx, %edx + negl %ecx + addl $64, %ecx + shrq %cl, %rax + shrq %cl, %r8 + orq %rax, %r9 + orq %r8, %r10 +.L_2TAG_PACKET_11.0.1: + cvtsi2sdq %r9, %xmm0 + shrq $1, %r10 + cvtsi2sdq %r10, %xmm3 + xorpd %xmm4, %xmm4 + shll $4, %edx + negl %edx + addl $16368, %edx + orl %esi, %edx + xorl %ebx, %edx + pinsrw $3, %edx, %xmm4 + movq PI_4(%rip), %xmm2 + movq 8+PI_4(%rip), %xmm6 + xorpd %xmm5, %xmm5 + subl $1008, %edx + pinsrw $3, %edx, %xmm5 + mulsd %xmm4, %xmm0 + shll $16, %esi + sarl $31, %esi + mulsd %xmm5, %xmm3 + movq %xmm0, %xmm1 + mulsd %xmm2, %xmm0 + shrl $29, %edi + addsd %xmm3, %xmm1 + mulsd %xmm2, %xmm3 + addl %esi, %edi + xorl %esi, %edi + mulsd %xmm1, %xmm6 + movl %edi, %eax + addsd %xmm3, %xmm6 + movq %xmm0, %xmm2 + addsd %xmm6, %xmm0 + subsd %xmm0, %xmm2 + addsd %xmm2, %xmm6 +.L_2TAG_PACKET_12.0.1: + movq PI32INV(%rip), %xmm1 + mulsd %xmm0, %xmm1 + movq ONEHALF(%rip), %xmm5 + movq SIGN_MASK(%rip), %xmm4 + andpd %xmm0, %xmm4 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + cvttsd2si %xmm1, %edx + cvtsi2sd %edx, %xmm1 + movq P_1(%rip), %xmm3 + movapd P_2(%rip), %xmm2 + mulsd %xmm1, %xmm3 + unpcklpd %xmm1, %xmm1 + shll $3, %eax + addl $1865216, %edx + movq %xmm0, %xmm4 + addl %eax, %edx + andl $63, %edx + movapd SC_4(%rip), %xmm5 + lea Ctable(%rip), %rax + shll $5, %edx + addq %rdx, %rax + mulpd %xmm1, %xmm2 + subsd %xmm3, %xmm0 + mulsd P_3(%rip), %xmm1 + subsd %xmm3, %xmm4 + movq 8(%rax), %xmm7 + unpcklpd %xmm0, %xmm0 + movq %xmm4, %xmm3 + subsd %xmm2, %xmm4 + mulpd %xmm0, %xmm5 + subpd %xmm2, %xmm0 + mulsd %xmm4, %xmm7 + subsd %xmm4, %xmm3 + mulpd %xmm0, %xmm5 + mulpd %xmm0, %xmm0 + subsd %xmm2, %xmm3 + movapd (%rax), %xmm2 + subsd %xmm3, %xmm1 + movq 24(%rax), %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm7 + subsd %xmm6, %xmm1 + movapd SC_2(%rip), %xmm6 + mulsd %xmm4, %xmm2 + mulpd %xmm0, %xmm6 + mulsd %xmm4, %xmm3 + mulpd %xmm0, %xmm2 + mulpd %xmm0, %xmm0 + addpd SC_3(%rip), %xmm5 + mulsd (%rax), %xmm4 + addpd SC_1(%rip), %xmm6 + mulpd %xmm0, %xmm5 + movq %xmm3, %xmm0 + addsd 8(%rax), %xmm3 + mulpd %xmm7, %xmm1 + movq %xmm4, %xmm7 + addsd %xmm3, %xmm4 + addpd %xmm5, %xmm6 + movq 8(%rax), %xmm5 + subsd %xmm3, %xmm5 + subsd %xmm4, %xmm3 + addsd 16(%rax), %xmm1 + mulpd %xmm2, %xmm6 + addsd %xmm0, %xmm5 + addsd %xmm7, %xmm3 + addsd %xmm5, %xmm1 + addsd %xmm3, %xmm1 + addsd %xmm6, %xmm1 + unpckhpd %xmm6, %xmm6 + movq %xmm4, %xmm0 + addsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_8.0.1: + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + movq $0, %r8 + cmpq $0, %r9 + jne .L_2TAG_PACKET_9.0.1 + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + cmpq $0, %r9 + jne .L_2TAG_PACKET_9.0.1 + xorpd %xmm0, %xmm0 + xorpd %xmm6, %xmm6 + jmp .L_2TAG_PACKET_12.0.1 +.L_2TAG_PACKET_10.0.1: + je .L_2TAG_PACKET_11.0.1 + negl %ecx + shrq %cl, %r10 + movq %r9, %rax + shrq %cl, %r9 + subl %ecx, %edx + negl %ecx + addl $64, %ecx + shlq %cl, %rax + orq %rax, %r10 + jmp .L_2TAG_PACKET_11.0.1 +.L_2TAG_PACKET_4.0.1: + negl %ecx + shlq $32, %r9 + orq %r11, %r9 + shlq %cl, %r9 + movq %r9, %rdi + testl $-2147483648, %r9d + jne .L_2TAG_PACKET_13.0.1 + shrl %cl, %r9d + movl $0, %ebx + shrq $3, %rdi + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_5.0.1: + shrl %cl, %r9d + movl $536870912, %ebx + shrl %cl, %ebx + shlq $32, %r9 + orq %r11, %r9 + shlq $32, %rbx + addl $536870912, %edi + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + jmp .L_2TAG_PACKET_6.0.1 +.L_2TAG_PACKET_13.0.1: + shrl %cl, %r9d + movq $0x100000000, %rbx + shrq %cl, %rbx + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + shrq $3, %rdi + addl $536870912, %edi + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_3.0.1: + movq 8(%rsp), %xmm0 + mulsd NEG_ZERO(%rip), %xmm0 + movq %xmm0, (%rsp) +.L_2TAG_PACKET_14.0.1: +..B1.4: + addq $16, %rsp +..___tag_value_sin.6: + popq %rbx +..___tag_value_sin.8: + ret +..___tag_value_sin.9: +END(sin) +# -- End sin + .section .rodata, "a" + .align 16 + .align 16 +ONEHALF: + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .type ONEHALF,@object + .size ONEHALF,16 + .align 16 +P_2: + .long 442499072 + .long 1032893537 + .long 442499072 + .long 1032893537 + .type P_2,@object + .size P_2,16 + .align 16 +SC_4: + .long 2773927732 + .long 1053236707 + .long 436314138 + .long 1056571808 + .type SC_4,@object + .size SC_4,16 + .align 16 +Ctable: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 1072693248 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 1072693248 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 1071644672 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 1071644672 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 1070596096 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 1070596096 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 1069547520 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 1072683149 + .long 1073741824 + .long 3163061750 + .long 0 + .long 3217031168 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 1072652951 + .long 536870912 + .long 1014325783 + .long 0 + .long 3218079744 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 1072602945 + .long 3758096384 + .long 1015505073 + .long 0 + .long 3218079744 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 1072533611 + .long 536870912 + .long 1014257638 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 1072445618 + .long 2147483648 + .long 3161907377 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 1072339814 + .long 3758096384 + .long 1010431536 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 1072217216 + .long 536870912 + .long 3162686945 + .long 0 + .long 3219128320 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 1072079006 + .long 536870912 + .long 3163282740 + .long 0 + .long 3219128320 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 1071926515 + .long 536870912 + .long 1013450602 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 1071761211 + .long 536870912 + .long 1015752157 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 1071524701 + .long 536870912 + .long 1012796809 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 1071152610 + .long 3758096384 + .long 3160878317 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 1070765062 + .long 2684354560 + .long 3161838221 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 1070135480 + .long 3221225472 + .long 3160567065 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 1069094822 + .long 3758096384 + .long 3158189848 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 393047345 + .long 1064548654 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 3220176896 + .long 18115067 + .long 1066642694 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 3220176896 + .long 2476548698 + .long 1067846634 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 3220176896 + .long 2255197647 + .long 1068727457 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 3220176896 + .long 1945768569 + .long 1069431400 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 3220176896 + .long 1539668340 + .long 1069912679 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 3220176896 + .long 1403757309 + .long 1070403070 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 3220176896 + .long 2583490354 + .long 3217719929 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 3219128320 + .long 2485417816 + .long 3217109964 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 3219128320 + .long 2598800519 + .long 3215750067 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 3219128320 + .long 2140183630 + .long 1067272748 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 3219128320 + .long 1699043957 + .long 1069418613 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 3219128320 + .long 1991047213 + .long 3215237169 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 3218079744 + .long 240740309 + .long 1068244255 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 3218079744 + .long 257503056 + .long 1067164005 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 3217031168 + .long 0 + .long 0 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 0 + .long 257503056 + .long 3214647653 + .long 2748392742 + .long 3220166797 + .long 1073741824 + .long 1015578102 + .long 0 + .long 1069547520 + .long 240740309 + .long 3215727903 + .long 3489094832 + .long 3220136599 + .long 536870912 + .long 3161809431 + .long 0 + .long 1070596096 + .long 1991047213 + .long 1067753521 + .long 1455828442 + .long 3220086593 + .long 3758096384 + .long 3162988721 + .long 0 + .long 1070596096 + .long 1699043957 + .long 3216902261 + .long 3476196678 + .long 3220017259 + .long 536870912 + .long 3161741286 + .long 0 + .long 1071644672 + .long 2140183630 + .long 3214756396 + .long 4051746225 + .long 3219929266 + .long 2147483648 + .long 1014423729 + .long 0 + .long 1071644672 + .long 2598800519 + .long 1068266419 + .long 688824739 + .long 3219823462 + .long 3758096384 + .long 3157915184 + .long 0 + .long 1071644672 + .long 2485417816 + .long 1069626316 + .long 1796544321 + .long 3219700864 + .long 536870912 + .long 1015203297 + .long 0 + .long 1071644672 + .long 2583490354 + .long 1070236281 + .long 1719614413 + .long 3219562654 + .long 536870912 + .long 1015799092 + .long 0 + .long 1071644672 + .long 1403757309 + .long 3217886718 + .long 621354454 + .long 3219410163 + .long 536870912 + .long 3160934250 + .long 0 + .long 1072693248 + .long 1539668340 + .long 3217396327 + .long 967731400 + .long 3219244859 + .long 536870912 + .long 3163235805 + .long 0 + .long 1072693248 + .long 1945768569 + .long 3216915048 + .long 939980347 + .long 3219008349 + .long 536870912 + .long 3160280457 + .long 0 + .long 1072693248 + .long 2255197647 + .long 3216211105 + .long 2796464483 + .long 3218636258 + .long 3758096384 + .long 1013394669 + .long 0 + .long 1072693248 + .long 2476548698 + .long 3215330282 + .long 785751814 + .long 3218248710 + .long 2684354560 + .long 1014354573 + .long 0 + .long 1072693248 + .long 18115067 + .long 3214126342 + .long 1013556747 + .long 3217619128 + .long 3221225472 + .long 1013083417 + .long 0 + .long 1072693248 + .long 393047345 + .long 3212032302 + .long 3156849708 + .long 3216578470 + .long 3758096384 + .long 1010706200 + .long 0 + .long 1072693248 + .type Ctable,@object + .size Ctable,2048 + .align 16 +SC_2: + .long 286331153 + .long 1065423121 + .long 1431655765 + .long 1067799893 + .type SC_2,@object + .size SC_2,16 + .align 16 +SC_3: + .long 436314138 + .long 3207201184 + .long 381774871 + .long 3210133868 + .type SC_3,@object + .size SC_3,16 + .align 16 +SC_1: + .long 1431655765 + .long 3217380693 + .long 0 + .long 3219128320 + .type SC_1,@object + .size SC_1,16 + .align 16 +PI_INV_TABLE: + .long 0 + .long 0 + .long 2734261102 + .long 1313084713 + .long 4230436817 + .long 4113882560 + .long 3680671129 + .long 1011060801 + .long 4266746795 + .long 3736847713 + .long 3072618042 + .long 1112396512 + .long 105459434 + .long 164729372 + .long 4263373596 + .long 2972297022 + .long 3900847605 + .long 784024708 + .long 3919343654 + .long 3026157121 + .long 965858873 + .long 2203269620 + .long 2625920907 + .long 3187222587 + .long 536385535 + .long 3724908559 + .long 4012839307 + .long 1510632735 + .long 1832287951 + .long 667617719 + .long 1330003814 + .long 2657085997 + .long 1965537991 + .long 3957715323 + .long 1023883767 + .long 2320667370 + .long 1811636145 + .long 529358088 + .long 1443049542 + .long 4235946923 + .long 4040145953 + .type PI_INV_TABLE,@object + .size PI_INV_TABLE,164 + .space 12, 0x00 # pad + .align 16 +PI_4: + .long 1073741824 + .long 1072243195 + .long 407279769 + .long 1046758445 + .type PI_4,@object + .size PI_4,16 + .align 8 +PI32INV: + .long 1841940611 + .long 1076125488 + .type PI32INV,@object + .size PI32INV,8 + .align 8 +SHIFTER: + .long 0 + .long 1127743488 + .type SHIFTER,@object + .size SHIFTER,8 + .align 8 +SIGN_MASK: + .long 0 + .long 2147483648 + .type SIGN_MASK,@object + .size SIGN_MASK,8 + .align 8 +P_3: + .long 771977331 + .long 996350346 + .type P_3,@object + .size P_3,8 + .align 8 +ALL_ONES: + .long 4294967295 + .long 1072693247 + .type ALL_ONES,@object + .size ALL_ONES,8 + .align 8 +TWO_POW_55: + .long 0 + .long 1130364928 + .type TWO_POW_55,@object + .size TWO_POW_55,8 + .align 8 +TWO_POW_M55: + .long 0 + .long 1015021568 + .type TWO_POW_M55,@object + .size TWO_POW_M55,8 + .align 8 +P_1: + .long 1413480448 + .long 1069097467 + .type P_1,@object + .size P_1,8 + .align 8 +NEG_ZERO: + .long 0 + .long 2147483648 + .type NEG_ZERO,@object + .size NEG_ZERO,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000002c + .4byte 0x0000001c + .4byte ..___tag_value_sin.1-. + .4byte ..___tag_value_sin.9-..___tag_value_sin.1 + .2byte 0x0400 + .4byte ..___tag_value_sin.3-..___tag_value_sin.1 + .4byte 0x0283100e + .byte 0x04 + .4byte ..___tag_value_sin.5-..___tag_value_sin.3 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_sin.6-..___tag_value_sin.5 + .4byte 0x04c3100e + .4byte ..___tag_value_sin.8-..___tag_value_sin.6 + .2byte 0x080e +# End diff --git a/libm/x86_64/s_tan.S b/libm/x86_64/s_tan.S new file mode 100644 index 000000000..74cb04494 --- /dev/null +++ b/libm/x86_64/s_tan.S @@ -0,0 +1,2239 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// Polynomials coefficients and other constants. +// +// Note that in this algorithm, there is a different polynomial for +// each breakpoint, so there are 32 sets of polynomial coefficients +// as well as 32 instances of the other constants. +// +// The polynomial coefficients and constants are offset from the start +// of the main block as follows: +// +// 0: c8 | c0 +// 16: c9 | c1 +// 32: c10 | c2 +// 48: c11 | c3 +// 64: c12 | c4 +// 80: c13 | c5 +// 96: c14 | c6 +// 112: c15 | c7 +// 128: T_hi +// 136: T_lo +// 144: Sigma +// 152: T_hl +// 160: Tau +// 168: Mask +// 176: (end of block) +// +// The total table size is therefore 5632 bytes. +// +// Note that c0 and c1 are always zero. We could try storing +// other constants here, and just loading the low part of the +// SIMD register in these cases, after ensuring the high part +// is zero. +// +// The higher terms of the polynomial are computed in the *low* +// part of the SIMD register. This is so we can overlap the +// multiplication by r^8 and the unpacking of the other part. +// +// The constants are: +// T_hi + T_lo = accurate constant term in power series +// Sigma + T_hl = accurate coefficient of r in power series (Sigma=1 bit) +// Tau = multiplier for the reciprocal, always -1 or 0 +// +// The basic reconstruction formula using these constants is: +// +// High = tau * recip_hi + t_hi +// Med = (sgn * r + t_hl * r)_hi +// Low = (sgn * r + t_hl * r)_lo + +// tau * recip_lo + T_lo + (T_hl + sigma) * c + pol +// +// where pol = c0 + c1 * r + c2 * r^2 + ... + c15 * r^15 +// +// (c0 = c1 = 0, but using them keeps SIMD regularity) +// +// We then do a compensated sum High + Med, add the low parts together +// and then do the final sum. +// +// Here recip_hi + recip_lo is an accurate reciprocal of the remainder +// modulo pi/2 +// +// Special cases: +// tan(NaN) = quiet NaN, and raise invalid exception +// tan(INF) = NaN and raise invalid exception +// tan(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin tan +ENTRY(tan) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_tan.1: + pushq %rbx +..___tag_value_tan.3: + subq $16, %rsp +..___tag_value_tan.5: + movsd %xmm0, 8(%rsp) +..B1.2: + pextrw $3, %xmm0, %eax + andl $32767, %eax + subl $16314, %eax + cmpl $270, %eax + ja .L_2TAG_PACKET_0.0.1 + movapd ONEHALF(%rip), %xmm5 + movapd MUL16(%rip), %xmm6 + unpcklpd %xmm0, %xmm0 + movapd sign_mask(%rip), %xmm4 + andpd %xmm0, %xmm4 + movapd PI32INV(%rip), %xmm1 + mulpd %xmm0, %xmm1 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + movapd %xmm1, %xmm7 + unpckhpd %xmm7, %xmm7 + cvttsd2si %xmm7, %edx + cvttpd2dq %xmm1, %xmm1 + cvtdq2pd %xmm1, %xmm1 + mulpd %xmm6, %xmm1 + movapd P_1(%rip), %xmm3 + movq QQ_2(%rip), %xmm5 + addq $469248, %rdx + movapd P_2(%rip), %xmm4 + mulpd %xmm1, %xmm3 + andq $31, %rdx + mulsd %xmm1, %xmm5 + movq %rdx, %rcx + mulpd %xmm1, %xmm4 + shlq $1, %rcx + subpd %xmm3, %xmm0 + mulpd P_3(%rip), %xmm1 + addq %rcx, %rdx + shlq $2, %rcx + addq %rcx, %rdx + addsd %xmm0, %xmm5 + movapd %xmm0, %xmm2 + subpd %xmm4, %xmm0 + movq ONE(%rip), %xmm6 + shlq $4, %rdx + lea Ctable(%rip), %rax + andpd MASK_35(%rip), %xmm5 + movapd %xmm0, %xmm3 + addq %rdx, %rax + subpd %xmm0, %xmm2 + unpckhpd %xmm0, %xmm0 + divsd %xmm5, %xmm6 + subpd %xmm4, %xmm2 + movapd 16(%rax), %xmm7 + subsd %xmm5, %xmm3 + mulpd %xmm0, %xmm7 + subpd %xmm1, %xmm2 + movapd 48(%rax), %xmm1 + mulpd %xmm0, %xmm1 + movapd 96(%rax), %xmm4 + mulpd %xmm0, %xmm4 + addsd %xmm3, %xmm2 + movapd %xmm0, %xmm3 + mulpd %xmm0, %xmm0 + addpd (%rax), %xmm7 + addpd 32(%rax), %xmm1 + mulpd %xmm0, %xmm1 + addpd 80(%rax), %xmm4 + addpd %xmm1, %xmm7 + movapd 112(%rax), %xmm1 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm0 + addpd %xmm1, %xmm4 + movapd 64(%rax), %xmm1 + mulpd %xmm0, %xmm1 + addpd %xmm1, %xmm7 + movapd %xmm3, %xmm1 + mulpd %xmm0, %xmm3 + mulsd %xmm0, %xmm0 + mulpd 144(%rax), %xmm1 + mulpd %xmm3, %xmm4 + movq %xmm1, %xmm3 + addpd %xmm4, %xmm7 + movq %xmm1, %xmm4 + mulsd %xmm7, %xmm0 + unpckhpd %xmm7, %xmm7 + addsd %xmm7, %xmm0 + unpckhpd %xmm1, %xmm1 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + movq %xmm2, %xmm4 + movq 144(%rax), %xmm7 + unpckhpd %xmm2, %xmm2 + addsd 152(%rax), %xmm7 + mulsd %xmm2, %xmm7 + addsd 136(%rax), %xmm7 + addsd %xmm1, %xmm7 + addsd %xmm7, %xmm0 + movq ONE(%rip), %xmm7 + mulsd %xmm6, %xmm4 + movq 168(%rax), %xmm2 + andpd %xmm6, %xmm2 + mulsd %xmm2, %xmm5 + mulsd 160(%rax), %xmm6 + subsd %xmm5, %xmm7 + subsd 128(%rax), %xmm2 + subsd %xmm4, %xmm7 + mulsd %xmm6, %xmm7 + movq %xmm3, %xmm4 + subsd %xmm2, %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm4 + addsd %xmm4, %xmm0 + subsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_0.0.1: + jg .L_2TAG_PACKET_1.0.1 + pextrw $3, %xmm0, %eax + movl %eax, %edx + andl $32752, %eax + je .L_2TAG_PACKET_2.0.1 + andl $32767, %edx + cmpl $15904, %edx + jb .L_2TAG_PACKET_3.0.1 + movq %xmm0, %xmm2 + movq %xmm0, %xmm3 + movq Q_11(%rip), %xmm1 + mulsd %xmm0, %xmm2 + mulsd %xmm2, %xmm3 + mulsd %xmm2, %xmm1 + addsd Q_9(%rip), %xmm1 + mulsd %xmm2, %xmm1 + addsd Q_7(%rip), %xmm1 + mulsd %xmm2, %xmm1 + addsd Q_5(%rip), %xmm1 + mulsd %xmm2, %xmm1 + addsd Q_3(%rip), %xmm1 + mulsd %xmm3, %xmm1 + addsd %xmm1, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_3.0.1: + movq TWO_POW_55(%rip), %xmm3 + mulsd %xmm0, %xmm3 + addsd %xmm3, %xmm0 + mulsd TWO_POW_M55(%rip), %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_2.0.1: + movq %xmm0, %xmm1 + mulsd %xmm1, %xmm1 + jmp ..B1.4 +.L_2TAG_PACKET_1.0.1: + pextrw $3, %xmm0, %eax + andl $32752, %eax + cmpl $32752, %eax + je .L_2TAG_PACKET_4.0.1 + pextrw $3, %xmm0, %ecx + andl $32752, %ecx + subl $16224, %ecx + shrl $7, %ecx + andl $65532, %ecx + lea PI_INV_TABLE(%rip), %r11 + addq %r11, %rcx + movd %xmm0, %rax + movl 20(%rcx), %r10d + movl 24(%rcx), %r8d + movl %eax, %edx + shrq $21, %rax + orl $-2147483648, %eax + shrl $11, %eax + movl %r10d, %r9d + imulq %rdx, %r10 + imulq %rax, %r9 + imulq %rax, %r8 + movl 16(%rcx), %esi + movl 12(%rcx), %edi + movl %r10d, %r11d + shrq $32, %r10 + addq %r10, %r9 + addq %r8, %r11 + movl %r11d, %r8d + shrq $32, %r11 + addq %r11, %r9 + movl %esi, %r10d + imulq %rdx, %rsi + imulq %rax, %r10 + movl %edi, %r11d + imulq %rdx, %rdi + movl %esi, %ebx + shrq $32, %rsi + addq %rbx, %r9 + movl %r9d, %ebx + shrq $32, %r9 + addq %rsi, %r10 + addq %r9, %r10 + shlq $32, %rbx + orq %rbx, %r8 + imulq %rax, %r11 + movl 8(%rcx), %r9d + movl 4(%rcx), %esi + movl %edi, %ebx + shrq $32, %rdi + addq %rbx, %r10 + movl %r10d, %ebx + shrq $32, %r10 + addq %rdi, %r11 + addq %r10, %r11 + movq %r9, %rdi + imulq %rdx, %r9 + imulq %rax, %rdi + movl %r9d, %r10d + shrq $32, %r9 + addq %r10, %r11 + movl %r11d, %r10d + shrq $32, %r11 + addq %r9, %rdi + addq %r11, %rdi + movq %rsi, %r9 + imulq %rdx, %rsi + imulq %rax, %r9 + shlq $32, %r10 + orq %rbx, %r10 + movl (%rcx), %eax + movl %esi, %r11d + shrq $32, %rsi + addq %r11, %rdi + movl %edi, %r11d + shrq $32, %rdi + addq %rsi, %r9 + addq %rdi, %r9 + imulq %rax, %rdx + pextrw $3, %xmm0, %ebx + lea PI_INV_TABLE(%rip), %rdi + subq %rdi, %rcx + addl %ecx, %ecx + addl %ecx, %ecx + addl %ecx, %ecx + addl $19, %ecx + movl $32768, %esi + andl %ebx, %esi + shrl $4, %ebx + andl $2047, %ebx + subl $1023, %ebx + subl %ebx, %ecx + addq %rdx, %r9 + movl %ecx, %edx + addl $32, %edx + cmpl $0, %ecx + jl .L_2TAG_PACKET_5.0.1 + negl %ecx + addl $29, %ecx + shll %cl, %r9d + movl %r9d, %edi + andl $1073741823, %r9d + testl $536870912, %r9d + jne .L_2TAG_PACKET_6.0.1 + shrl %cl, %r9d + movl $0, %ebx + shlq $32, %r9 + orq %r11, %r9 +.L_2TAG_PACKET_7.0.1: +.L_2TAG_PACKET_8.0.1: + cmpq $0, %r9 + je .L_2TAG_PACKET_9.0.1 +.L_2TAG_PACKET_10.0.1: + bsr %r9, %r11 + movl $29, %ecx + subl %r11d, %ecx + jle .L_2TAG_PACKET_11.0.1 + shlq %cl, %r9 + movq %r10, %rax + shlq %cl, %r10 + addl %ecx, %edx + negl %ecx + addl $64, %ecx + shrq %cl, %rax + shrq %cl, %r8 + orq %rax, %r9 + orq %r8, %r10 +.L_2TAG_PACKET_12.0.1: + cvtsi2sdq %r9, %xmm0 + shrq $1, %r10 + cvtsi2sdq %r10, %xmm3 + xorpd %xmm4, %xmm4 + shll $4, %edx + negl %edx + addl $16368, %edx + orl %esi, %edx + xorl %ebx, %edx + pinsrw $3, %edx, %xmm4 + movq PI_4(%rip), %xmm2 + movq 8+PI_4(%rip), %xmm7 + xorpd %xmm5, %xmm5 + subl $1008, %edx + pinsrw $3, %edx, %xmm5 + mulsd %xmm4, %xmm0 + shll $16, %esi + sarl $31, %esi + mulsd %xmm5, %xmm3 + movq %xmm0, %xmm1 + mulsd %xmm2, %xmm0 + shrl $30, %edi + addsd %xmm3, %xmm1 + mulsd %xmm2, %xmm3 + addl %esi, %edi + xorl %esi, %edi + mulsd %xmm1, %xmm7 + movl %edi, %eax + addsd %xmm3, %xmm7 + movq %xmm0, %xmm2 + addsd %xmm7, %xmm0 + subsd %xmm0, %xmm2 + addsd %xmm2, %xmm7 + movapd PI32INV(%rip), %xmm1 + movddup %xmm0, %xmm0 + movapd sign_mask(%rip), %xmm4 + andpd %xmm0, %xmm4 + mulpd %xmm0, %xmm1 + movddup %xmm7, %xmm7 + movapd ONEHALF(%rip), %xmm5 + movapd MUL16(%rip), %xmm6 + orps %xmm4, %xmm5 + addpd %xmm5, %xmm1 + movapd %xmm1, %xmm5 + unpckhpd %xmm5, %xmm5 + cvttsd2si %xmm5, %edx + cvttpd2dq %xmm1, %xmm1 + cvtdq2pd %xmm1, %xmm1 + mulpd %xmm6, %xmm1 + movapd P_1(%rip), %xmm3 + movq QQ_2(%rip), %xmm5 + shll $4, %eax + addl $469248, %edx + movapd P_2(%rip), %xmm4 + mulpd %xmm1, %xmm3 + addl %eax, %edx + andl $31, %edx + mulsd %xmm1, %xmm5 + movl %edx, %ecx + mulpd %xmm1, %xmm4 + shll $1, %ecx + subpd %xmm3, %xmm0 + mulpd P_3(%rip), %xmm1 + addl %ecx, %edx + shll $2, %ecx + addl %ecx, %edx + addsd %xmm0, %xmm5 + movapd %xmm0, %xmm2 + subpd %xmm4, %xmm0 + movq ONE(%rip), %xmm6 + shll $4, %edx + lea Ctable(%rip), %rax + andpd MASK_35(%rip), %xmm5 + movapd %xmm0, %xmm3 + addq %rdx, %rax + subpd %xmm0, %xmm2 + unpckhpd %xmm0, %xmm0 + divsd %xmm5, %xmm6 + subpd %xmm4, %xmm2 + subsd %xmm5, %xmm3 + subpd %xmm1, %xmm2 + movapd 48(%rax), %xmm1 + addpd %xmm7, %xmm2 + movapd 16(%rax), %xmm7 + mulpd %xmm0, %xmm7 + movapd 96(%rax), %xmm4 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm4 + addsd %xmm3, %xmm2 + movapd %xmm0, %xmm3 + mulpd %xmm0, %xmm0 + addpd (%rax), %xmm7 + addpd 32(%rax), %xmm1 + mulpd %xmm0, %xmm1 + addpd 80(%rax), %xmm4 + addpd %xmm1, %xmm7 + movapd 112(%rax), %xmm1 + mulpd %xmm0, %xmm1 + mulpd %xmm0, %xmm0 + addpd %xmm1, %xmm4 + movapd 64(%rax), %xmm1 + mulpd %xmm0, %xmm1 + addpd %xmm1, %xmm7 + movapd %xmm3, %xmm1 + mulpd %xmm0, %xmm3 + mulsd %xmm0, %xmm0 + mulpd 144(%rax), %xmm1 + mulpd %xmm3, %xmm4 + movq %xmm1, %xmm3 + addpd %xmm4, %xmm7 + movq %xmm1, %xmm4 + mulsd %xmm7, %xmm0 + unpckhpd %xmm7, %xmm7 + addsd %xmm7, %xmm0 + unpckhpd %xmm1, %xmm1 + addsd %xmm1, %xmm3 + subsd %xmm3, %xmm4 + addsd %xmm4, %xmm1 + movq %xmm2, %xmm4 + movq 144(%rax), %xmm7 + unpckhpd %xmm2, %xmm2 + addsd 152(%rax), %xmm7 + mulsd %xmm2, %xmm7 + addsd 136(%rax), %xmm7 + addsd %xmm1, %xmm7 + addsd %xmm7, %xmm0 + movq ONE(%rip), %xmm7 + mulsd %xmm6, %xmm4 + movq 168(%rax), %xmm2 + andpd %xmm6, %xmm2 + mulsd %xmm2, %xmm5 + mulsd 160(%rax), %xmm6 + subsd %xmm5, %xmm7 + subsd 128(%rax), %xmm2 + subsd %xmm4, %xmm7 + mulsd %xmm6, %xmm7 + movq %xmm3, %xmm4 + subsd %xmm2, %xmm3 + addsd %xmm3, %xmm2 + subsd %xmm2, %xmm4 + addsd %xmm4, %xmm0 + subsd %xmm7, %xmm0 + addsd %xmm3, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_9.0.1: + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + movq $0, %r8 + cmpq $0, %r9 + jne .L_2TAG_PACKET_10.0.1 + addl $64, %edx + movq %r10, %r9 + movq %r8, %r10 + cmpq $0, %r9 + jne .L_2TAG_PACKET_10.0.1 + jmp .L_2TAG_PACKET_12.0.1 +.L_2TAG_PACKET_11.0.1: + je .L_2TAG_PACKET_12.0.1 + negl %ecx + shrq %cl, %r10 + movq %r9, %rax + shrq %cl, %r9 + subl %ecx, %edx + negl %ecx + addl $64, %ecx + shlq %cl, %rax + orq %rax, %r10 + jmp .L_2TAG_PACKET_12.0.1 +.L_2TAG_PACKET_5.0.1: + notl %ecx + shlq $32, %r9 + orq %r11, %r9 + shlq %cl, %r9 + movq %r9, %rdi + testl $-2147483648, %r9d + jne .L_2TAG_PACKET_13.0.1 + shrl %cl, %r9d + movl $0, %ebx + shrq $2, %rdi + jmp .L_2TAG_PACKET_8.0.1 +.L_2TAG_PACKET_6.0.1: + shrl %cl, %r9d + movl $1073741824, %ebx + shrl %cl, %ebx + shlq $32, %r9 + orq %r11, %r9 + shlq $32, %rbx + addl $1073741824, %edi + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + jmp .L_2TAG_PACKET_7.0.1 +.L_2TAG_PACKET_13.0.1: + shrl %cl, %r9d + movq $0x100000000, %rbx + shrq %cl, %rbx + movq $0, %rcx + movq $0, %r11 + subq %r8, %rcx + sbbq %r10, %r11 + sbbq %r9, %rbx + movq %rcx, %r8 + movq %r11, %r10 + movq %rbx, %r9 + movl $32768, %ebx + shrq $2, %rdi + addl $1073741824, %edi + jmp .L_2TAG_PACKET_8.0.1 +.L_2TAG_PACKET_4.0.1: + movq 8(%rsp), %xmm0 + mulsd NEG_ZERO(%rip), %xmm0 + movq %xmm0, (%rsp) +.L_2TAG_PACKET_14.0.1: +..B1.4: + addq $16, %rsp +..___tag_value_tan.6: + popq %rbx +..___tag_value_tan.8: + ret +..___tag_value_tan.9: +END(tan) +# -- End tan + .section .rodata, "a" + .align 16 + .align 16 +ONEHALF: + .long 0 + .long 1071644672 + .long 0 + .long 1071644672 + .type ONEHALF,@object + .size ONEHALF,16 + .align 16 +MUL16: + .long 0 + .long 1076887552 + .long 0 + .long 1072693248 + .type MUL16,@object + .size MUL16,16 + .align 16 +sign_mask: + .long 0 + .long 2147483648 + .long 0 + .long 2147483648 + .type sign_mask,@object + .size sign_mask,16 + .align 16 +PI32INV: + .long 1841940611 + .long 1071931184 + .long 1841940611 + .long 1076125488 + .type PI32INV,@object + .size PI32INV,16 + .align 16 +P_1: + .long 1413758976 + .long 1069097467 + .long 1413742592 + .long 1069097467 + .type P_1,@object + .size P_1,16 + .align 16 +P_2: + .long 1734819840 + .long 3174229945 + .long 1280049152 + .long 1028033571 + .type P_2,@object + .size P_2,16 + .align 16 +P_3: + .long 923219018 + .long 984130272 + .long 57701189 + .long 988383790 + .type P_3,@object + .size P_3,16 + .align 16 +Ctable: + .long 0 + .long 0 + .long 0 + .long 0 + .long 2284589306 + .long 1066820852 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1441186365 + .long 1065494243 + .long 1431655765 + .long 1070945621 + .long 0 + .long 0 + .long 0 + .long 0 + .long 236289504 + .long 1064135997 + .long 286331153 + .long 1069617425 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1160476131 + .long 1062722102 + .long 463583772 + .long 1068212666 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1313038235 + .long 1066745731 + .long 0 + .long 0 + .long 1013878342 + .long 1067152618 + .long 0 + .long 0 + .long 3663426833 + .long 1065725283 + .long 3693284251 + .long 1069118808 + .long 650852232 + .long 1065882376 + .long 1996245381 + .long 1071000265 + .long 2008746170 + .long 1064664197 + .long 3055842593 + .long 1068578846 + .long 1495406348 + .long 1064652437 + .long 2269530157 + .long 1069711235 + .long 285563696 + .long 1063576465 + .long 1046897440 + .long 1067705865 + .long 233429731 + .long 1063453151 + .long 522045958 + .long 1068476590 + .long 2354785698 + .long 1069102779 + .long 1317599141 + .long 1012432133 + .long 0 + .long 1072693248 + .long 2828230105 + .long 1065606626 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1512545955 + .long 1068119047 + .long 0 + .long 0 + .long 1127048698 + .long 1067909459 + .long 0 + .long 0 + .long 2300200450 + .long 1067254767 + .long 3593250296 + .long 1070233561 + .long 3009365544 + .long 1066902117 + .long 1127373050 + .long 1071173457 + .long 3046103305 + .long 1066371299 + .long 24583402 + .long 1069723988 + .long 4082511758 + .long 1065914199 + .long 3223889699 + .long 1070020367 + .long 548927984 + .long 1065415756 + .long 558065897 + .long 1068949418 + .long 680073315 + .long 1064940726 + .long 388873200 + .long 1068944270 + .long 3763679576 + .long 1070167541 + .long 1497360404 + .long 1009710547 + .long 0 + .long 1072693248 + .long 64931152 + .long 1067729411 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2467582782 + .long 1069256389 + .long 0 + .long 0 + .long 162150096 + .long 1068946420 + .long 0 + .long 0 + .long 3702794237 + .long 1068579152 + .long 3631919291 + .long 1070936926 + .long 3456821413 + .long 1068217218 + .long 2031366438 + .long 1071495745 + .long 1596664020 + .long 1067799281 + .long 1509038701 + .long 1070601643 + .long 583171477 + .long 1067510148 + .long 3785344682 + .long 1070618476 + .long 2402036048 + .long 1067075736 + .long 3233018412 + .long 1069913186 + .long 411280568 + .long 1066710556 + .long 1065584192 + .long 1069747896 + .long 895247324 + .long 1070819848 + .long 500078909 + .long 3161288781 + .long 0 + .long 1072693248 + .long 729983843 + .long 1068994194 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1458794562 + .long 1070398550 + .long 0 + .long 0 + .long 2857777489 + .long 1070137637 + .long 0 + .long 0 + .long 1024359517 + .long 1069876531 + .long 2616040238 + .long 1071582937 + .long 1609024636 + .long 1069675088 + .long 2529240549 + .long 1071836633 + .long 1510128600 + .long 1069440113 + .long 2251697184 + .long 1071253687 + .long 1262761453 + .long 1069142850 + .long 1263091857 + .long 1071190461 + .long 3043383486 + .long 1068885191 + .long 2476932470 + .long 1070842002 + .long 3659995028 + .long 1068669200 + .long 855891755 + .long 1070696894 + .long 2583490354 + .long 1071284857 + .long 3062633575 + .long 1014008623 + .long 0 + .long 1072693248 + .long 2550940471 + .long 1069938201 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3422807297 + .long 1071640847 + .long 0 + .long 0 + .long 1151658053 + .long 1071494715 + .long 0 + .long 0 + .long 929607071 + .long 1071346340 + .long 1037049034 + .long 1072037305 + .long 2786928657 + .long 1071215282 + .long 1447406859 + .long 1072265209 + .long 3490952107 + .long 1071090851 + .long 3205232916 + .long 1071968658 + .long 1297344304 + .long 1070977120 + .long 1066110976 + .long 1071946035 + .long 3803721480 + .long 1070871082 + .long 1496754229 + .long 1071807201 + .long 2982550683 + .long 1070773243 + .long 4014441989 + .long 1071736222 + .long 419968236 + .long 1071717047 + .long 3451266538 + .long 3163444811 + .long 0 + .long 1072693248 + .long 2960267235 + .long 1070745841 + .long 0 + .long 0 + .long 0 + .long 0 + .long 724322768 + .long 1072881308 + .long 0 + .long 0 + .long 643153048 + .long 1072905816 + .long 0 + .long 0 + .long 4285079458 + .long 1072928558 + .long 3912524733 + .long 1072622983 + .long 118362272 + .long 1072952754 + .long 4107767972 + .long 1072827408 + .long 2689502883 + .long 1072976922 + .long 946523347 + .long 1072772766 + .long 573204189 + .long 1073001761 + .long 581531518 + .long 1072826391 + .long 1386236526 + .long 1073026959 + .long 3718905905 + .long 1072832823 + .long 1145558140 + .long 1073052673 + .long 513572637 + .long 1072861969 + .long 716700048 + .long 1071997368 + .long 547126769 + .long 1015523525 + .long 0 + .long 1072693248 + .long 1097907398 + .long 1071420120 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3349892442 + .long 1074290212 + .long 0 + .long 0 + .long 3913197405 + .long 1074501181 + .long 0 + .long 0 + .long 2494034522 + .long 1074739170 + .long 1264738763 + .long 1073084804 + .long 1520293906 + .long 1074899632 + .long 1958936600 + .long 1073411493 + .long 2133649635 + .long 1075052171 + .long 4270740730 + .long 1073574708 + .long 1728930189 + .long 1075224844 + .long 1303998552 + .long 1073799186 + .long 618611933 + .long 1075420255 + .long 1769828046 + .long 1073938542 + .long 2200537986 + .long 1075641421 + .long 433361110 + .long 1074105369 + .long 719595600 + .long 1072317184 + .long 294527206 + .long 3162140088 + .long 0 + .long 1073741824 + .long 3811788216 + .long 3218400550 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1704352102 + .long 1075943001 + .long 0 + .long 0 + .long 2284589306 + .long 1076258036 + .long 0 + .long 0 + .long 2211264291 + .long 1076659010 + .long 0 + .long 1073741824 + .long 1441186365 + .long 1077028579 + .long 1431655765 + .long 1074091349 + .long 876943673 + .long 1077353622 + .long 2863311531 + .long 1074440874 + .long 236289504 + .long 1077767485 + .long 286331153 + .long 1074860305 + .long 2805473311 + .long 1078115278 + .long 95443718 + .long 1075163227 + .long 1160476131 + .long 1078450742 + .long 463583772 + .long 1075552698 + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 0 + .long 1073741824 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1330165971 + .long 3207850745 + .long 0 + .long 0 + .long 217536623 + .long 1059109098 + .long 0 + .long 0 + .long 3492120849 + .long 3205151475 + .long 602185705 + .long 3215678092 + .long 760422958 + .long 1056312597 + .long 555127889 + .long 1067545266 + .long 3139784124 + .long 3202470837 + .long 3690544014 + .long 3213150171 + .long 95707915 + .long 1053635428 + .long 4003114407 + .long 1064581412 + .long 2034926231 + .long 3199711161 + .long 3759536023 + .long 3210559989 + .long 3826928214 + .long 1050893819 + .long 3837960785 + .long 1061790379 + .long 1526325248 + .long 3217967566 + .long 2356426521 + .long 1025423456 + .long 0 + .long 0 + .long 457728975 + .long 1071088276 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1398462608 + .long 3207303968 + .long 0 + .long 0 + .long 26205983 + .long 1058461213 + .long 0 + .long 0 + .long 56226238 + .long 3204528612 + .long 2754706541 + .long 3215359511 + .long 2187799823 + .long 1055634437 + .long 790323742 + .long 1067402587 + .long 1372385848 + .long 3201651479 + .long 4097292716 + .long 3212856302 + .long 3348210357 + .long 1052830099 + .long 2442796466 + .long 1064337602 + .long 862608142 + .long 3198830754 + .long 170296152 + .long 3210060867 + .long 3755571428 + .long 1049933343 + .long 3614866008 + .long 1061361670 + .long 719978496 + .long 3217669096 + .long 1998842465 + .long 3174703977 + .long 0 + .long 0 + .long 3749156607 + .long 1071048258 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3120498638 + .long 3206749304 + .long 0 + .long 0 + .long 2773578114 + .long 1058009312 + .long 0 + .long 0 + .long 2030783676 + .long 3203817873 + .long 2223654598 + .long 3215071936 + .long 2976134650 + .long 1054987244 + .long 706390066 + .long 1067217386 + .long 4258437615 + .long 3200900378 + .long 1066252975 + .long 3212391267 + .long 815777514 + .long 1051989462 + .long 3202745457 + .long 1064010682 + .long 2493556375 + .long 3198004753 + .long 1046243251 + .long 3209678971 + .long 2593078846 + .long 1049017717 + .long 2763962276 + .long 1060970161 + .long 701480960 + .long 3217377742 + .long 3205862232 + .long 3174660915 + .long 0 + .long 0 + .long 2267016812 + .long 1071015664 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 2107155798 + .long 3206166872 + .long 0 + .long 0 + .long 2642992129 + .long 1057424578 + .long 0 + .long 0 + .long 1936992811 + .long 3203204426 + .long 1485063559 + .long 3214682643 + .long 1432914553 + .long 1054319398 + .long 3996381654 + .long 1067075828 + .long 2833029256 + .long 3200223545 + .long 2866066872 + .long 3211982662 + .long 2432888737 + .long 1051234178 + .long 3669764559 + .long 1063748136 + .long 2458496952 + .long 3197170774 + .long 1948234989 + .long 3209098147 + .long 2843698787 + .long 1048163519 + .long 3398041407 + .long 1060559728 + .long 2829230080 + .long 3217092115 + .long 1034046433 + .long 3174271903 + .long 0 + .long 0 + .long 298675305 + .long 1070989821 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 437603223 + .long 3205589761 + .long 0 + .long 0 + .long 759330352 + .long 1057048511 + .long 0 + .long 0 + .long 3107463368 + .long 3202507988 + .long 3144465176 + .long 3214191500 + .long 2290961810 + .long 1053841035 + .long 1618153340 + .long 1066971547 + .long 3836869393 + .long 3199400272 + .long 584032116 + .long 3211469261 + .long 1245704358 + .long 1050626462 + .long 4247487438 + .long 1063561943 + .long 1669034927 + .long 3196274812 + .long 3844233498 + .long 3208626322 + .long 2706958524 + .long 1047411374 + .long 3857199098 + .long 1060281647 + .long 3593904128 + .long 3216590719 + .long 3267547836 + .long 3172163321 + .long 0 + .long 0 + .long 4076712227 + .long 1070970214 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3290090340 + .long 3204793485 + .long 0 + .long 0 + .long 3685760367 + .long 1056668370 + .long 0 + .long 0 + .long 2655163949 + .long 3201674917 + .long 628750575 + .long 3213566872 + .long 680140505 + .long 1053299777 + .long 2954464709 + .long 1066900026 + .long 803201619 + .long 3198516435 + .long 1466315631 + .long 3210837162 + .long 1611220163 + .long 1049972438 + .long 2766187256 + .long 1063437894 + .long 1804579484 + .long 3195331491 + .long 3695969289 + .long 3207854418 + .long 2617238373 + .long 1046675948 + .long 3095830084 + .long 1060095334 + .long 3789570048 + .long 3216034914 + .long 23826559 + .long 3172048060 + .long 0 + .long 0 + .long 3870939386 + .long 1070956467 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1571758758 + .long 3203672535 + .long 0 + .long 0 + .long 113026373 + .long 1056416381 + .long 0 + .long 0 + .long 1913766298 + .long 3200523326 + .long 2507068734 + .long 3212502004 + .long 4000648818 + .long 1053003803 + .long 2446607349 + .long 1066858259 + .long 912662124 + .long 3197333001 + .long 1349489537 + .long 3209765608 + .long 3412972607 + .long 1049641401 + .long 1721283327 + .long 1063366855 + .long 1466691883 + .long 3194116746 + .long 3852528092 + .long 3206760861 + .long 285443293 + .long 1046158380 + .long 1758739894 + .long 1059895449 + .long 1858781184 + .long 3214984212 + .long 3447575948 + .long 1024675855 + .long 0 + .long 0 + .long 2242038011 + .long 1070948320 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 0 + .long 0 + .long 0 + .long 0 + .long 737611454 + .long 1056336527 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3594790527 + .long 1052911621 + .long 381774871 + .long 1066844524 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3303051618 + .long 1049456050 + .long 3154187623 + .long 1063343722 + .long 0 + .long 0 + .long 0 + .long 0 + .long 528061788 + .long 1045944910 + .long 2469719819 + .long 1059831159 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1431655765 + .long 1070945621 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1571758758 + .long 1056188887 + .long 0 + .long 0 + .long 113026373 + .long 1056416381 + .long 0 + .long 0 + .long 1913766298 + .long 1053039678 + .long 2507068734 + .long 1065018356 + .long 4000648818 + .long 1053003803 + .long 2446607349 + .long 1066858259 + .long 912662124 + .long 1049849353 + .long 1349489537 + .long 1062281960 + .long 3412972607 + .long 1049641401 + .long 1721283327 + .long 1063366855 + .long 1466691883 + .long 1046633098 + .long 3852528092 + .long 1059277213 + .long 285443293 + .long 1046158380 + .long 1758739894 + .long 1059895449 + .long 1858781184 + .long 1067500564 + .long 3447575948 + .long 3172159503 + .long 0 + .long 0 + .long 2242038011 + .long 1070948320 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3290090340 + .long 1057309837 + .long 0 + .long 0 + .long 3685760367 + .long 1056668370 + .long 0 + .long 0 + .long 2655163949 + .long 1054191269 + .long 628750575 + .long 1066083224 + .long 680140505 + .long 1053299777 + .long 2954464709 + .long 1066900026 + .long 803201619 + .long 1051032787 + .long 1466315631 + .long 1063353514 + .long 1611220163 + .long 1049972438 + .long 2766187256 + .long 1063437894 + .long 1804579484 + .long 1047847843 + .long 3695969289 + .long 1060370770 + .long 2617238373 + .long 1046675948 + .long 3095830084 + .long 1060095334 + .long 3789570048 + .long 1068551266 + .long 23826559 + .long 1024564412 + .long 0 + .long 0 + .long 3870939386 + .long 1070956467 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 437603223 + .long 1058106113 + .long 0 + .long 0 + .long 759330352 + .long 1057048511 + .long 0 + .long 0 + .long 3107463368 + .long 1055024340 + .long 3144465176 + .long 1066707852 + .long 2290961810 + .long 1053841035 + .long 1618153340 + .long 1066971547 + .long 3836869393 + .long 1051916624 + .long 584032116 + .long 1063985613 + .long 1245704358 + .long 1050626462 + .long 4247487438 + .long 1063561943 + .long 1669034927 + .long 1048791164 + .long 3844233498 + .long 1061142674 + .long 2706958524 + .long 1047411374 + .long 3857199098 + .long 1060281647 + .long 3593904128 + .long 1069107071 + .long 3267547836 + .long 1024679673 + .long 0 + .long 0 + .long 4076712227 + .long 1070970214 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 2107155798 + .long 1058683224 + .long 0 + .long 0 + .long 2642992129 + .long 1057424578 + .long 0 + .long 0 + .long 1936992811 + .long 1055720778 + .long 1485063559 + .long 1067198995 + .long 1432914553 + .long 1054319398 + .long 3996381654 + .long 1067075828 + .long 2833029256 + .long 1052739897 + .long 2866066872 + .long 1064499014 + .long 2432888737 + .long 1051234178 + .long 3669764559 + .long 1063748136 + .long 2458496952 + .long 1049687126 + .long 1948234989 + .long 1061614499 + .long 2843698787 + .long 1048163519 + .long 3398041407 + .long 1060559728 + .long 2829230080 + .long 1069608467 + .long 1034046433 + .long 1026788255 + .long 0 + .long 0 + .long 298675305 + .long 1070989821 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 3120498638 + .long 1059265656 + .long 0 + .long 0 + .long 2773578114 + .long 1058009312 + .long 0 + .long 0 + .long 2030783676 + .long 1056334225 + .long 2223654598 + .long 1067588288 + .long 2976134650 + .long 1054987244 + .long 706390066 + .long 1067217386 + .long 4258437615 + .long 1053416730 + .long 1066252975 + .long 1064907619 + .long 815777514 + .long 1051989462 + .long 3202745457 + .long 1064010682 + .long 2493556375 + .long 1050521105 + .long 1046243251 + .long 1062195323 + .long 2593078846 + .long 1049017717 + .long 2763962276 + .long 1060970161 + .long 701480960 + .long 1069894094 + .long 3205862232 + .long 1027177267 + .long 0 + .long 0 + .long 2267016812 + .long 1071015664 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1398462608 + .long 1059820320 + .long 0 + .long 0 + .long 26205983 + .long 1058461213 + .long 0 + .long 0 + .long 56226238 + .long 1057044964 + .long 2754706541 + .long 1067875863 + .long 2187799823 + .long 1055634437 + .long 790323742 + .long 1067402587 + .long 1372385848 + .long 1054167831 + .long 4097292716 + .long 1065372654 + .long 3348210357 + .long 1052830099 + .long 2442796466 + .long 1064337602 + .long 862608142 + .long 1051347106 + .long 170296152 + .long 1062577219 + .long 3755571428 + .long 1049933343 + .long 3614866008 + .long 1061361670 + .long 719978496 + .long 1070185448 + .long 1998842465 + .long 1027220329 + .long 0 + .long 0 + .long 3749156607 + .long 1071048258 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1330165971 + .long 1060367097 + .long 0 + .long 0 + .long 217536623 + .long 1059109098 + .long 0 + .long 0 + .long 3492120849 + .long 1057667827 + .long 602185705 + .long 1068194444 + .long 760422958 + .long 1056312597 + .long 555127889 + .long 1067545266 + .long 3139784124 + .long 1054987189 + .long 3690544014 + .long 1065666523 + .long 95707915 + .long 1053635428 + .long 4003114407 + .long 1064581412 + .long 2034926231 + .long 1052227513 + .long 3759536023 + .long 1063076341 + .long 3826928214 + .long 1050893819 + .long 3837960785 + .long 1061790379 + .long 1526325248 + .long 1070483918 + .long 2356426521 + .long 3172907104 + .long 0 + .long 0 + .long 457728975 + .long 1071088276 + .long 0 + .long 1072693248 + .long 0 + .long 4294967288 + .long 1704352102 + .long 3223426649 + .long 0 + .long 0 + .long 2284589306 + .long 1076258036 + .long 0 + .long 0 + .long 2211264291 + .long 3224142658 + .long 0 + .long 3221225472 + .long 1441186365 + .long 1077028579 + .long 1431655765 + .long 1074091349 + .long 876943673 + .long 3224837270 + .long 2863311531 + .long 3221924522 + .long 236289504 + .long 1077767485 + .long 286331153 + .long 1074860305 + .long 2805473311 + .long 3225598926 + .long 95443718 + .long 3222646875 + .long 1160476131 + .long 1078450742 + .long 463583772 + .long 1075552698 + .long 0 + .long 3220176896 + .long 0 + .long 0 + .long 0 + .long 1073741824 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3349892442 + .long 3221773860 + .long 0 + .long 0 + .long 3913197405 + .long 1074501181 + .long 0 + .long 0 + .long 2494034522 + .long 3222222818 + .long 1264738763 + .long 3220568452 + .long 1520293906 + .long 1074899632 + .long 1958936600 + .long 1073411493 + .long 2133649635 + .long 3222535819 + .long 4270740730 + .long 3221058356 + .long 1728930189 + .long 1075224844 + .long 1303998552 + .long 1073799186 + .long 618611933 + .long 3222903903 + .long 1769828046 + .long 3221422190 + .long 2200537986 + .long 1075641421 + .long 433361110 + .long 1074105369 + .long 719595600 + .long 3219800832 + .long 294527206 + .long 1014656440 + .long 0 + .long 1073741824 + .long 3811788216 + .long 3218400550 + .long 0 + .long 0 + .long 0 + .long 0 + .long 724322768 + .long 3220364956 + .long 0 + .long 0 + .long 643153048 + .long 1072905816 + .long 0 + .long 0 + .long 4285079458 + .long 3220412206 + .long 3912524733 + .long 3220106631 + .long 118362272 + .long 1072952754 + .long 4107767972 + .long 1072827408 + .long 2689502883 + .long 3220460570 + .long 946523347 + .long 3220256414 + .long 573204189 + .long 1073001761 + .long 581531518 + .long 1072826391 + .long 1386236526 + .long 3220510607 + .long 3718905905 + .long 3220316471 + .long 1145558140 + .long 1073052673 + .long 513572637 + .long 1072861969 + .long 716700048 + .long 3219481016 + .long 547126769 + .long 3163007173 + .long 0 + .long 1072693248 + .long 1097907398 + .long 1071420120 + .long 0 + .long 0 + .long 0 + .long 0 + .long 3422807297 + .long 3219124495 + .long 0 + .long 0 + .long 1151658053 + .long 1071494715 + .long 0 + .long 0 + .long 929607071 + .long 3218829988 + .long 1037049034 + .long 3219520953 + .long 2786928657 + .long 1071215282 + .long 1447406859 + .long 1072265209 + .long 3490952107 + .long 3218574499 + .long 3205232916 + .long 3219452306 + .long 1297344304 + .long 1070977120 + .long 1066110976 + .long 1071946035 + .long 3803721480 + .long 3218354730 + .long 1496754229 + .long 3219290849 + .long 2982550683 + .long 1070773243 + .long 4014441989 + .long 1071736222 + .long 419968236 + .long 3219200695 + .long 3451266538 + .long 1015961163 + .long 0 + .long 1072693248 + .long 2960267235 + .long 1070745841 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1458794562 + .long 3217882198 + .long 0 + .long 0 + .long 2857777489 + .long 1070137637 + .long 0 + .long 0 + .long 1024359517 + .long 3217360179 + .long 2616040238 + .long 3219066585 + .long 1609024636 + .long 1069675088 + .long 2529240549 + .long 1071836633 + .long 1510128600 + .long 3216923761 + .long 2251697184 + .long 3218737335 + .long 1262761453 + .long 1069142850 + .long 1263091857 + .long 1071190461 + .long 3043383486 + .long 3216368839 + .long 2476932470 + .long 3218325650 + .long 3659995028 + .long 1068669200 + .long 855891755 + .long 1070696894 + .long 2583490354 + .long 3218768505 + .long 3062633575 + .long 3161492271 + .long 0 + .long 1072693248 + .long 2550940471 + .long 1069938201 + .long 0 + .long 0 + .long 0 + .long 0 + .long 2467582782 + .long 3216740037 + .long 0 + .long 0 + .long 162150096 + .long 1068946420 + .long 0 + .long 0 + .long 3702794237 + .long 3216062800 + .long 3631919291 + .long 3218420574 + .long 3456821413 + .long 1068217218 + .long 2031366438 + .long 1071495745 + .long 1596664020 + .long 3215282929 + .long 1509038701 + .long 3218085291 + .long 583171477 + .long 1067510148 + .long 3785344682 + .long 1070618476 + .long 2402036048 + .long 3214559384 + .long 3233018412 + .long 3217396834 + .long 411280568 + .long 1066710556 + .long 1065584192 + .long 1069747896 + .long 895247324 + .long 3218303496 + .long 500078909 + .long 1013805133 + .long 0 + .long 1072693248 + .long 729983843 + .long 1068994194 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1512545955 + .long 3215602695 + .long 0 + .long 0 + .long 1127048698 + .long 1067909459 + .long 0 + .long 0 + .long 2300200450 + .long 3214738415 + .long 3593250296 + .long 3217717209 + .long 3009365544 + .long 1066902117 + .long 1127373050 + .long 1071173457 + .long 3046103305 + .long 3213854947 + .long 24583402 + .long 3217207636 + .long 4082511758 + .long 1065914199 + .long 3223889699 + .long 1070020367 + .long 548927984 + .long 3212899404 + .long 558065897 + .long 3216433066 + .long 680073315 + .long 1064940726 + .long 388873200 + .long 1068944270 + .long 3763679576 + .long 3217651189 + .long 1497360404 + .long 3157194195 + .long 0 + .long 1072693248 + .long 64931152 + .long 1067729411 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1313038235 + .long 3214229379 + .long 0 + .long 0 + .long 1013878342 + .long 1067152618 + .long 0 + .long 0 + .long 3663426833 + .long 3213208931 + .long 3693284251 + .long 3216602456 + .long 650852232 + .long 1065882376 + .long 1996245381 + .long 1071000265 + .long 2008746170 + .long 3212147845 + .long 3055842593 + .long 3216062494 + .long 1495406348 + .long 1064652437 + .long 2269530157 + .long 1069711235 + .long 285563696 + .long 3211060113 + .long 1046897440 + .long 3215189513 + .long 233429731 + .long 1063453151 + .long 522045958 + .long 1068476590 + .long 2354785698 + .long 3216586427 + .long 1317599141 + .long 3159915781 + .long 0 + .long 1072693248 + .long 2828230105 + .long 1065606626 + .long 0 + .long 0 + .long 0 + .long 0 + .type Ctable,@object + .size Ctable,5632 + .align 16 +MASK_35: + .long 4294705152 + .long 4294967295 + .long 0 + .long 0 + .type MASK_35,@object + .size MASK_35,16 + .align 16 +Q_11: + .long 3103673719 + .long 1065509018 + .type Q_11,@object + .size Q_11,8 + .space 8, 0x00 # pad + .align 16 +Q_9: + .long 3213130307 + .long 1066820768 + .type Q_9,@object + .size Q_9,8 + .space 8, 0x00 # pad + .align 16 +Q_7: + .long 1388628139 + .long 1068212666 + .type Q_7,@object + .size Q_7,8 + .space 8, 0x00 # pad + .align 16 +Q_5: + .long 285812550 + .long 1069617425 + .type Q_5,@object + .size Q_5,8 + .space 8, 0x00 # pad + .align 16 +Q_3: + .long 1431655954 + .long 1070945621 + .type Q_3,@object + .size Q_3,8 + .space 8, 0x00 # pad + .align 16 +PI_INV_TABLE: + .long 0 + .long 0 + .long 2734261102 + .long 1313084713 + .long 4230436817 + .long 4113882560 + .long 3680671129 + .long 1011060801 + .long 4266746795 + .long 3736847713 + .long 3072618042 + .long 1112396512 + .long 105459434 + .long 164729372 + .long 4263373596 + .long 2972297022 + .long 3900847605 + .long 784024708 + .long 3919343654 + .long 3026157121 + .long 965858873 + .long 2203269620 + .long 2625920907 + .long 3187222587 + .long 536385535 + .long 3724908559 + .long 4012839307 + .long 1510632735 + .long 1832287951 + .long 667617719 + .long 1330003814 + .long 2657085997 + .long 1965537991 + .long 3957715323 + .long 1023883767 + .long 2320667370 + .long 1811636145 + .long 529358088 + .long 1443049542 + .long 4235946923 + .long 4040145953 + .type PI_INV_TABLE,@object + .size PI_INV_TABLE,164 + .space 12, 0x00 # pad + .align 16 +PI_4: + .long 0 + .long 1072243195 + .long 1175561766 + .long 1048908043 + .type PI_4,@object + .size PI_4,16 + .align 8 +QQ_2: + .long 1734816687 + .long 1026746297 + .type QQ_2,@object + .size QQ_2,8 + .align 8 +ONE: + .long 0 + .long 1072693248 + .type ONE,@object + .size ONE,8 + .align 8 +TWO_POW_55: + .long 0 + .long 1130364928 + .type TWO_POW_55,@object + .size TWO_POW_55,8 + .align 8 +TWO_POW_M55: + .long 0 + .long 1015021568 + .type TWO_POW_M55,@object + .size TWO_POW_M55,8 + .align 4 +NEG_ZERO: + .long 0 + .long 2147483648 + .type NEG_ZERO,@object + .size NEG_ZERO,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000002c + .4byte 0x0000001c + .4byte ..___tag_value_tan.1-. + .4byte ..___tag_value_tan.9-..___tag_value_tan.1 + .2byte 0x0400 + .4byte ..___tag_value_tan.3-..___tag_value_tan.1 + .4byte 0x0283100e + .byte 0x04 + .4byte ..___tag_value_tan.5-..___tag_value_tan.3 + .2byte 0x200e + .byte 0x04 + .4byte ..___tag_value_tan.6-..___tag_value_tan.5 + .4byte 0x04c3100e + .4byte ..___tag_value_tan.8-..___tag_value_tan.6 + .2byte 0x080e +# End diff --git a/libm/x86_64/s_tanh.S b/libm/x86_64/s_tanh.S new file mode 100644 index 000000000..2c8f9bfd5 --- /dev/null +++ b/libm/x86_64/s_tanh.S @@ -0,0 +1,1392 @@ +/* +Copyright (c) 2014, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + + * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/******************************************************************************/ +// ALGORITHM DESCRIPTION +// --------------------- +// +// tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x))=(1-exp(-2*x))/(1+exp(-2*x)) +// +// Let |x|=xH+xL (upper 26 bits, lower 27 bits) +// log2(e) rounded to 26 bits (high part) plus a double precision low part is +// L2EH+L2EL (upper 26, lower 53 bits) +// +// Let xH*L2EH=k+f+r`, where (k+f)*2^8*2=int(xH*L2EH*2^9), +// f=0.b1 b2 ... b8, k integer +// 2^{-f} is approximated as Tn[f]+Dn[f] +// Tn stores the high 53 bits, Dn stores (2^{-f}-Tn[f]) rounded to double precision +// +// r=r`+xL*L2EH+|x|*L2EL, |r|<2^{-9}+2^{-14}, +// for |x| in [23/64,3*2^7) +// e^{-2*|x|}=2^{-k-f}*2^{-r} ~ 2^{-k}*(Tn+Dn)*(1+p)=(T0+D0)*(1+p) +// +// For |x| in [2^{-4},2^5): +// 2^{-r}-1 ~ p=c1*r+c2*r^2+..+c5*r^5 +// Let R=1/(1+T0+p*T0), truncated to 35 significant bits +// R=1/(1+T0+D0+p*(T0+D0))*(1+eps), |eps|<2^{-33} +// 1+T0+D0+p*(T0+D0)=KH+KL, where +// KH=(1+T0+c1*r*T0)_high (leading 17 bits) +// KL=T0_low+D0+(c1*r*T0)_low+c1*r*D0+(c2*r^2+..c5*r^5)*T0 +// eps ~ (R*KH-1)+R*KL +// 1/(1+T0+D0+p*(T0+D0)) ~ R-R*eps +// The result is approximated as (1-T0-D0-(T0+D0)*p)*(R-R*eps) +// 1-T0-D0-(T0+D0)*p=-((KH-2)+KL) +// The result is formed as +// (KH-2)*R+(-(KH-2)*R*eps+(KL*R-KL*R*eps)), with the correct sign +// set at the end +// +// For |x| in [2^{-64},2^{-4}): +// A Taylor series expansion is used (x+p3*x^3+..+p13*x^{13}) +// +// For |x|<2^{-64}: x is returned +// +// For |x|>=2^32: return +/-1 +// +// Special cases: +// tanh(NaN) = quiet NaN, and raise invalid exception +// tanh(INF) = that INF +// tanh(+/-0) = +/-0 +// +/******************************************************************************/ + +#include +# -- Begin tanh +ENTRY(tanh) +# parameter 1: %xmm0 +..B1.1: +..___tag_value_tanh.1: + pushq %rsi +..___tag_value_tanh.3: +..B1.2: + movsd HALFMASK(%rip), %xmm3 + xorpd %xmm4, %xmm4 + movsd L2E(%rip), %xmm1 + movsd 8+L2E(%rip), %xmm2 + movl $32768, %eax + pinsrw $3, %eax, %xmm4 + movsd Shifter(%rip), %xmm6 + pextrw $3, %xmm0, %ecx + andpd %xmm0, %xmm3 + andnpd %xmm0, %xmm4 + pshufd $68, %xmm4, %xmm5 + movl $32768, %edx + andl %ecx, %edx + andl $32767, %ecx + subl $16304, %ecx + cmpl $144, %ecx + jae .L_2TAG_PACKET_0.0.1 + subsd %xmm3, %xmm4 + mulsd %xmm1, %xmm3 + mulsd %xmm5, %xmm2 + cvtsd2si %xmm3, %eax + movq %xmm3, %xmm7 + addsd %xmm6, %xmm3 + mulsd %xmm4, %xmm1 + movsd ONEMASK(%rip), %xmm4 + subsd %xmm6, %xmm3 + xorpd %xmm0, %xmm0 + addsd %xmm1, %xmm2 + subsd %xmm3, %xmm7 + movapd cv(%rip), %xmm6 + addsd %xmm7, %xmm2 + movl $255, %ecx + andl %eax, %ecx + addl %ecx, %ecx + lea T2_neg_f(%rip), %r8 + movapd (%r8,%rcx,8), %xmm5 + shrl $4, %eax + andl $65520, %eax + subl $16368, %eax + negl %eax + pinsrw $3, %eax, %xmm0 + movapd 16+cv(%rip), %xmm1 + pshufd $68, %xmm0, %xmm0 + mulpd %xmm5, %xmm0 + movsd 32+cv(%rip), %xmm7 + pshufd $68, %xmm2, %xmm2 + movq %xmm4, %xmm5 + addsd %xmm0, %xmm4 + mulpd %xmm2, %xmm6 + mulsd %xmm2, %xmm7 + mulpd %xmm2, %xmm2 + addpd %xmm6, %xmm1 + mulsd %xmm2, %xmm2 + movsd ONEMASK(%rip), %xmm3 + mulpd %xmm2, %xmm1 + pshufd $78, %xmm1, %xmm6 + addsd %xmm6, %xmm1 + movq %xmm1, %xmm6 + addsd %xmm7, %xmm1 + mulsd %xmm0, %xmm1 + addsd %xmm4, %xmm1 + andpd MASK3(%rip), %xmm4 + divsd %xmm1, %xmm5 + subsd %xmm4, %xmm3 + pshufd $238, %xmm0, %xmm1 + addsd %xmm0, %xmm3 + movq %xmm4, %xmm2 + addsd %xmm1, %xmm3 + mulsd %xmm7, %xmm1 + mulsd %xmm0, %xmm7 + addsd %xmm1, %xmm3 + addsd %xmm7, %xmm4 + movsd RMASK(%rip), %xmm1 + mulsd %xmm0, %xmm6 + andpd MASK3(%rip), %xmm4 + addsd %xmm6, %xmm3 + movq %xmm4, %xmm6 + subsd %xmm4, %xmm2 + addsd %xmm7, %xmm2 + movsd ONEMASK(%rip), %xmm7 + andpd %xmm1, %xmm5 + addsd %xmm2, %xmm3 + mulsd %xmm5, %xmm4 + xorpd %xmm2, %xmm2 + mulsd %xmm5, %xmm3 + subsd TWOMASK(%rip), %xmm6 + subsd %xmm7, %xmm4 + xorl $32768, %edx + pinsrw $3, %edx, %xmm2 + addsd %xmm3, %xmm4 + mulsd %xmm5, %xmm6 + movq %xmm3, %xmm1 + mulsd %xmm4, %xmm3 + movq %xmm6, %xmm0 + mulsd %xmm4, %xmm6 + subsd %xmm3, %xmm1 + subsd %xmm6, %xmm1 + addsd %xmm1, %xmm0 + xorpd %xmm2, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_0.0.1: + addl $960, %ecx + cmpl $1104, %ecx + jae .L_2TAG_PACKET_1.0.1 + movapd pv(%rip), %xmm2 + pshufd $68, %xmm0, %xmm1 + movapd 16+pv(%rip), %xmm3 + mulpd %xmm1, %xmm1 + movapd 32+pv(%rip), %xmm4 + mulpd %xmm1, %xmm2 + pshufd $68, %xmm1, %xmm5 + addpd %xmm3, %xmm2 + mulsd %xmm5, %xmm5 + mulpd %xmm1, %xmm2 + mulsd %xmm5, %xmm5 + addpd %xmm4, %xmm2 + mulpd %xmm5, %xmm2 + pshufd $238, %xmm2, %xmm5 + addsd %xmm5, %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm2, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_1.0.1: + addl $15344, %ecx + cmpl $16448, %ecx + jae .L_2TAG_PACKET_2.0.1 + cmpl $16, %ecx + jb .L_2TAG_PACKET_3.0.1 + xorpd %xmm2, %xmm2 + movl $17392, %eax + pinsrw $3, %eax, %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm0, %xmm2 + jmp ..B1.4 +.L_2TAG_PACKET_3.0.1: + movq %xmm0, %xmm2 + mulsd %xmm2, %xmm2 + jmp ..B1.4 +.L_2TAG_PACKET_2.0.1: + cmpl $32752, %ecx + jae .L_2TAG_PACKET_4.0.1 + xorpd %xmm2, %xmm2 + movl $15344, %ecx + pinsrw $3, %ecx, %xmm2 + movq %xmm2, %xmm3 + mulsd %xmm2, %xmm2 + addsd %xmm3, %xmm2 +.L_2TAG_PACKET_5.0.1: + xorpd %xmm0, %xmm0 + orl $16368, %edx + pinsrw $3, %edx, %xmm0 + jmp ..B1.4 +.L_2TAG_PACKET_4.0.1: + movq %xmm0, %xmm2 + movd %xmm0, %eax + psrlq $20, %xmm2 + movd %xmm2, %ecx + orl %eax, %ecx + cmpl $0, %ecx + je .L_2TAG_PACKET_5.0.1 + addsd %xmm0, %xmm0 + movq %xmm0, (%rsp) +.L_2TAG_PACKET_6.0.1: +..B1.4: + popq %rcx +..___tag_value_tanh.4: + ret +..___tag_value_tanh.5: +END(tanh) +# -- End tanh + .section .rodata, "a" + .align 16 + .align 16 +L2E: + .long 1610612736 + .long 1082594631 + .long 4166901572 + .long 1055174155 + .type L2E,@object + .size L2E,16 + .align 16 +Shifter: + .long 0 + .long 1127743488 + .long 0 + .long 3275227136 + .type Shifter,@object + .size Shifter,16 + .align 16 +cv: + .long 3884607281 + .long 3168131199 + .long 3607404735 + .long 3190582024 + .long 1874480759 + .long 1032041131 + .long 4286760334 + .long 1053736893 + .long 4277811695 + .long 3211144770 + .long 0 + .long 0 + .type cv,@object + .size cv,48 + .align 16 +T2_neg_f: + .long 0 + .long 1072693248 + .long 0 + .long 0 + .long 1797923801 + .long 1072687577 + .long 1950547427 + .long 1013229059 + .long 730821105 + .long 1072681922 + .long 2523232743 + .long 1012067188 + .long 915592468 + .long 1072676282 + .long 352947894 + .long 3161024371 + .long 2174652632 + .long 1072670657 + .long 4087714590 + .long 1014450259 + .long 35929225 + .long 1072665048 + .long 2809788041 + .long 3159436968 + .long 2912730644 + .long 1072659453 + .long 3490067722 + .long 3163405074 + .long 2038973688 + .long 1072653874 + .long 892941374 + .long 1016046459 + .long 1533953344 + .long 1072648310 + .long 769171851 + .long 1015665633 + .long 1222472308 + .long 1072642761 + .long 1054357470 + .long 3161021018 + .long 929806999 + .long 1072637227 + .long 3205336643 + .long 1015259557 + .long 481706282 + .long 1072631708 + .long 1696079173 + .long 3162710528 + .long 3999357479 + .long 1072626203 + .long 2258941616 + .long 1015924724 + .long 2719515920 + .long 1072620714 + .long 2760332941 + .long 1015137933 + .long 764307441 + .long 1072615240 + .long 3021057420 + .long 3163329523 + .long 2256325230 + .long 1072609780 + .long 580117746 + .long 1015317295 + .long 2728693978 + .long 1072604335 + .long 396109971 + .long 3163462691 + .long 2009970496 + .long 1072598905 + .long 2159039665 + .long 3162572948 + .long 4224142467 + .long 1072593489 + .long 3389820386 + .long 1015207202 + .long 610758006 + .long 1072588089 + .long 1965209397 + .long 3161866232 + .long 3884662774 + .long 1072582702 + .long 2158611599 + .long 1014210185 + .long 991358482 + .long 1072577331 + .long 838715019 + .long 3163157668 + .long 351641897 + .long 1072571974 + .long 2172261526 + .long 3163010599 + .long 1796832535 + .long 1072566631 + .long 3176955716 + .long 3160585513 + .long 863738719 + .long 1072561303 + .long 1326992220 + .long 3162613197 + .long 1679558232 + .long 1072555989 + .long 2390342287 + .long 3163333970 + .long 4076975200 + .long 1072550689 + .long 2029000899 + .long 1015208535 + .long 3594158869 + .long 1072545404 + .long 2456521700 + .long 3163256561 + .long 64696965 + .long 1072540134 + .long 1768797490 + .long 1015816960 + .long 1912561781 + .long 1072534877 + .long 3147495102 + .long 1015678253 + .long 382305176 + .long 1072529635 + .long 2347622376 + .long 3162578625 + .long 3898795731 + .long 1072524406 + .long 1249994144 + .long 1011869818 + .long 3707479175 + .long 1072519192 + .long 3613079303 + .long 1014164738 + .long 3939148246 + .long 1072513992 + .long 3210352148 + .long 1015274323 + .long 135105010 + .long 1072508807 + .long 1906148728 + .long 3163375739 + .long 721996136 + .long 1072503635 + .long 563754734 + .long 1015371318 + .long 1242007932 + .long 1072498477 + .long 1132034716 + .long 3163339831 + .long 1532734324 + .long 1072493333 + .long 3094216535 + .long 3163162857 + .long 1432208378 + .long 1072488203 + .long 1401068914 + .long 3162363963 + .long 778901109 + .long 1072483087 + .long 2248183955 + .long 3161268751 + .long 3706687593 + .long 1072477984 + .long 3521726940 + .long 1013253067 + .long 1464976603 + .long 1072472896 + .long 3507292405 + .long 3161977534 + .long 2483480501 + .long 1072467821 + .long 1216371780 + .long 1013034172 + .long 2307442995 + .long 1072462760 + .long 3190117721 + .long 3162404539 + .long 777507147 + .long 1072457713 + .long 4282924205 + .long 1015187533 + .long 2029714210 + .long 1072452679 + .long 613660079 + .long 1015099143 + .long 1610600570 + .long 1072447659 + .long 3766732298 + .long 1015760183 + .long 3657065772 + .long 1072442652 + .long 399025623 + .long 3162957078 + .long 3716502172 + .long 1072437659 + .long 2303740125 + .long 1014042725 + .long 1631695677 + .long 1072432680 + .long 2717633076 + .long 3162344026 + .long 1540824585 + .long 1072427714 + .long 1064017011 + .long 3163487690 + .long 3287523847 + .long 1072422761 + .long 1625971539 + .long 3157009955 + .long 2420883922 + .long 1072417822 + .long 2049810052 + .long 1014119888 + .long 3080351519 + .long 1072412896 + .long 3379126788 + .long 3157218001 + .long 815859274 + .long 1072407984 + .long 240396590 + .long 3163487443 + .long 4062661092 + .long 1072403084 + .long 1422616006 + .long 3163255318 + .long 4076559943 + .long 1072398198 + .long 2119478331 + .long 3160758351 + .long 703710506 + .long 1072393326 + .long 1384660846 + .long 1015195891 + .long 2380618042 + .long 1072388466 + .long 3149557219 + .long 3163320799 + .long 364333489 + .long 1072383620 + .long 3923737744 + .long 3161421373 + .long 3092190715 + .long 1072378786 + .long 814012168 + .long 3159523422 + .long 1822067026 + .long 1072373966 + .long 1241994956 + .long 1015340290 + .long 697153126 + .long 1072369159 + .long 1283515429 + .long 3163283189 + .long 3861050111 + .long 1072364364 + .long 254893773 + .long 3162813180 + .long 2572866477 + .long 1072359583 + .long 878562433 + .long 1015521741 + .long 977020788 + .long 1072354815 + .long 3065100517 + .long 1015541563 + .long 3218338682 + .long 1072350059 + .long 3404164304 + .long 3162477108 + .long 557149882 + .long 1072345317 + .long 3672720709 + .long 1014537265 + .long 1434058175 + .long 1072340587 + .long 251133233 + .long 1015085769 + .long 1405169241 + .long 1072335870 + .long 2998539689 + .long 3162830951 + .long 321958744 + .long 1072331166 + .long 3401933767 + .long 1015794558 + .long 2331271250 + .long 1072326474 + .long 812057446 + .long 1012207446 + .long 2990417245 + .long 1072321795 + .long 3683467745 + .long 3163369326 + .long 2152073944 + .long 1072317129 + .long 1486860576 + .long 3163203456 + .long 3964284211 + .long 1072312475 + .long 2111583915 + .long 1015427164 + .long 3985553595 + .long 1072307834 + .long 4002146062 + .long 1015834136 + .long 2069751141 + .long 1072303206 + .long 1562170675 + .long 3162724681 + .long 2366108318 + .long 1072298590 + .long 2867985102 + .long 3161762254 + .long 434316067 + .long 1072293987 + .long 2028358766 + .long 1013458122 + .long 424392917 + .long 1072289396 + .long 2749202995 + .long 3162838718 + .long 2191782032 + .long 1072284817 + .long 2960257726 + .long 1013742662 + .long 1297350157 + .long 1072280251 + .long 1308022040 + .long 3163412558 + .long 1892288442 + .long 1072275697 + .long 2446255666 + .long 3162600381 + .long 3833209506 + .long 1072271155 + .long 2722920684 + .long 1013754842 + .long 2682146384 + .long 1072266626 + .long 2082178513 + .long 3163363419 + .long 2591453363 + .long 1072262109 + .long 2132396182 + .long 3159074198 + .long 3418903055 + .long 1072257604 + .long 2527457337 + .long 3160820604 + .long 727685349 + .long 1072253112 + .long 2038246809 + .long 3162358742 + .long 2966275557 + .long 1072248631 + .long 2176155324 + .long 3159842759 + .long 1403662306 + .long 1072244163 + .long 2788809599 + .long 3161671007 + .long 194117574 + .long 1072239707 + .long 777528612 + .long 3163412089 + .long 3492293770 + .long 1072235262 + .long 2248032210 + .long 1015386826 + .long 2568320822 + .long 1072230830 + .long 2732824428 + .long 1014352915 + .long 1577608921 + .long 1072226410 + .long 1875489510 + .long 3162968394 + .long 380978316 + .long 1072222002 + .long 854188970 + .long 3160462686 + .long 3134592888 + .long 1072217605 + .long 4232266862 + .long 1015991134 + .long 1110089947 + .long 1072213221 + .long 1451641639 + .long 1015474673 + .long 2759350287 + .long 1072208848 + .long 1148526634 + .long 1015894933 + .long 3649726105 + .long 1072204487 + .long 4085036346 + .long 1015649474 + .long 3643909174 + .long 1072200138 + .long 3537586109 + .long 1014354647 + .long 2604962541 + .long 1072195801 + .long 2614425274 + .long 3163539192 + .long 396319521 + .long 1072191476 + .long 4172420816 + .long 3159074632 + .long 1176749997 + .long 1072187162 + .long 2738998779 + .long 3162035844 + .long 515457527 + .long 1072182860 + .long 836709333 + .long 1015651226 + .long 2571947539 + .long 1072178569 + .long 3558159064 + .long 3163376669 + .long 2916157145 + .long 1072174290 + .long 219487565 + .long 1015309367 + .long 1413356050 + .long 1072170023 + .long 1651349291 + .long 3162668166 + .long 2224145553 + .long 1072165767 + .long 3482522030 + .long 3161489169 + .long 919555682 + .long 1072161523 + .long 3121969534 + .long 1012948226 + .long 1660913392 + .long 1072157290 + .long 4218599604 + .long 1015135707 + .long 19972402 + .long 1072153069 + .long 3507899862 + .long 1016009292 + .long 158781403 + .long 1072148859 + .long 2221464712 + .long 3163286453 + .long 1944781191 + .long 1072144660 + .long 3993278767 + .long 3161724279 + .long 950803702 + .long 1072140473 + .long 1655364926 + .long 1015237032 + .long 1339972927 + .long 1072136297 + .long 167908909 + .long 1015572152 + .long 2980802057 + .long 1072132132 + .long 378619896 + .long 1015773303 + .long 1447192521 + .long 1072127979 + .long 1462857171 + .long 3162514521 + .long 903334909 + .long 1072123837 + .long 1636462108 + .long 1015039997 + .long 1218806132 + .long 1072119706 + .long 1818613052 + .long 3162548441 + .long 2263535754 + .long 1072115586 + .long 752233586 + .long 3162639008 + .long 3907805044 + .long 1072111477 + .long 2257091225 + .long 3161550407 + .long 1727278727 + .long 1072107380 + .long 3562710623 + .long 1011471940 + .long 4182873220 + .long 1072103293 + .long 629542646 + .long 3161996303 + .long 2555984613 + .long 1072099218 + .long 2652555442 + .long 3162552692 + .long 1013258799 + .long 1072095154 + .long 1748797611 + .long 3160129082 + .long 3721688645 + .long 1072091100 + .long 3069276937 + .long 1015839401 + .long 1963711167 + .long 1072087058 + .long 1744767757 + .long 3160574294 + .long 4201977662 + .long 1072083026 + .long 748330254 + .long 1013594357 + .long 1719614413 + .long 1072079006 + .long 330458198 + .long 3163282740 + .long 2979960120 + .long 1072074996 + .long 2599109725 + .long 1014498493 + .long 3561793907 + .long 1072070997 + .long 1157054053 + .long 1011890350 + .long 3339203574 + .long 1072067009 + .long 1483497780 + .long 3162408754 + .long 2186617381 + .long 1072063032 + .long 2270764084 + .long 3163272713 + .long 4273770423 + .long 1072059065 + .long 3383180809 + .long 3163218901 + .long 885834528 + .long 1072055110 + .long 1973258547 + .long 3162261564 + .long 488188413 + .long 1072051165 + .long 3199821029 + .long 1015564048 + .long 2956612997 + .long 1072047230 + .long 2118169751 + .long 3162735553 + .long 3872257780 + .long 1072043306 + .long 1253592103 + .long 1015958334 + .long 3111574537 + .long 1072039393 + .long 2606161479 + .long 3162759746 + .long 551349105 + .long 1072035491 + .long 3821916050 + .long 3162106589 + .long 363667784 + .long 1072031599 + .long 813753950 + .long 1015785209 + .long 2425981843 + .long 1072027717 + .long 2830390851 + .long 3163346599 + .long 2321106615 + .long 1072023846 + .long 2171176610 + .long 1009535771 + .long 4222122499 + .long 1072019985 + .long 1277378074 + .long 3163256737 + .long 3712504873 + .long 1072016135 + .long 88491949 + .long 1015427660 + .long 671025100 + .long 1072012296 + .long 3832014351 + .long 3163022030 + .long 3566716925 + .long 1072008466 + .long 1536826856 + .long 1014142433 + .long 3689071823 + .long 1072004647 + .long 2321004996 + .long 3162552716 + .long 917841882 + .long 1072000839 + .long 18715565 + .long 1015659308 + .long 3723038930 + .long 1071997040 + .long 378465264 + .long 3162569582 + .long 3395129871 + .long 1071993252 + .long 4025345435 + .long 3162335388 + .long 4109806887 + .long 1071989474 + .long 422403966 + .long 1014469229 + .long 1453150082 + .long 1071985707 + .long 498154669 + .long 3161488062 + .long 3896463087 + .long 1071981949 + .long 1139797873 + .long 3161233805 + .long 2731501122 + .long 1071978202 + .long 1774031855 + .long 3162470021 + .long 2135241198 + .long 1071974465 + .long 1236747871 + .long 1013589147 + .long 1990012071 + .long 1071970738 + .long 3529070563 + .long 3162813193 + .long 2178460671 + .long 1071967021 + .long 777878098 + .long 3162842493 + .long 2583551245 + .long 1071963314 + .long 3161094195 + .long 1015606491 + .long 3088564500 + .long 1071959617 + .long 1762311517 + .long 1015045673 + .long 3577096743 + .long 1071955930 + .long 2951496418 + .long 1013793687 + .long 3933059031 + .long 1071952253 + .long 2133366768 + .long 3161531832 + .long 4040676318 + .long 1071948586 + .long 4090609238 + .long 1015663458 + .long 3784486610 + .long 1071944929 + .long 1581883040 + .long 3161698953 + .long 3049340112 + .long 1071941282 + .long 3062915824 + .long 1013170595 + .long 1720398391 + .long 1071937645 + .long 3980678963 + .long 3163300080 + .long 3978100823 + .long 1071934017 + .long 3513027190 + .long 1015845963 + .long 1118294578 + .long 1071930400 + .long 2197495694 + .long 3159909401 + .long 1617004845 + .long 1071926792 + .long 82804944 + .long 1010342778 + .long 1065662932 + .long 1071923194 + .long 2533670915 + .long 1014530238 + .long 3645941911 + .long 1071919605 + .long 3814685081 + .long 3161573341 + .long 654919306 + .long 1071916027 + .long 3232961757 + .long 3163047469 + .long 569847338 + .long 1071912458 + .long 472945272 + .long 3159290729 + .long 3278348324 + .long 1071908898 + .long 3069497416 + .long 1014750712 + .long 78413852 + .long 1071905349 + .long 4183226867 + .long 3163017251 + .long 3743175029 + .long 1071901808 + .long 2072812490 + .long 3162175075 + .long 1276261410 + .long 1071898278 + .long 300981948 + .long 1014684169 + .long 1156440435 + .long 1071894757 + .long 2351451249 + .long 1013967056 + .long 3272845541 + .long 1071891245 + .long 928852419 + .long 3163488248 + .long 3219942644 + .long 1071887743 + .long 3798990616 + .long 1015368806 + .long 887463927 + .long 1071884251 + .long 3596744163 + .long 3160794166 + .long 460407023 + .long 1071880768 + .long 4237175092 + .long 3163138469 + .long 1829099622 + .long 1071877294 + .long 1016661181 + .long 3163461005 + .long 589198666 + .long 1071873830 + .long 2664346172 + .long 3163157962 + .long 926591435 + .long 1071870375 + .long 3208833762 + .long 3162913514 + .long 2732492859 + .long 1071866929 + .long 2691479646 + .long 3162255684 + .long 1603444721 + .long 1071863493 + .long 1548633640 + .long 3162201326 + .long 1726216749 + .long 1071860066 + .long 2466808228 + .long 3161676405 + .long 2992903935 + .long 1071856648 + .long 2218154406 + .long 1015228193 + .long 1000925746 + .long 1071853240 + .long 1018491672 + .long 3163309544 + .long 4232894513 + .long 1071849840 + .long 2383938684 + .long 1014668519 + .long 3991843581 + .long 1071846450 + .long 4092853457 + .long 1014585763 + .long 171030293 + .long 1071843070 + .long 3526460132 + .long 1014428778 + .long 1253935211 + .long 1071839698 + .long 1395382931 + .long 3159702613 + .long 2839424854 + .long 1071836335 + .long 1171596163 + .long 1013041679 + .long 526652809 + .long 1071832982 + .long 4223459736 + .long 1015879375 + .long 2799960843 + .long 1071829637 + .long 1423655381 + .long 1015022151 + .long 964107055 + .long 1071826302 + .long 2800439588 + .long 3162833221 + .long 3504003472 + .long 1071822975 + .long 3594001060 + .long 3157330652 + .long 1724976915 + .long 1071819658 + .long 420909223 + .long 3163117379 + .long 4112506593 + .long 1071816349 + .long 2947355221 + .long 1014371048 + .long 1972484976 + .long 1071813050 + .long 675290301 + .long 3161640050 + .long 3790955393 + .long 1071809759 + .long 2352942462 + .long 3163180090 + .long 874372905 + .long 1071806478 + .long 100263788 + .long 1015940732 + .long 1709341917 + .long 1071803205 + .long 2571168217 + .long 1014152499 + .long 1897844341 + .long 1071799941 + .long 1254300460 + .long 1015275938 + .long 1337108031 + .long 1071796686 + .long 3203724452 + .long 1014677845 + .long 4219606026 + .long 1071793439 + .long 2434574742 + .long 1014681548 + .long 1853186616 + .long 1071790202 + .long 3066496371 + .long 1015656574 + .long 2725843665 + .long 1071786973 + .long 1433917087 + .long 1014838523 + .long 2440944790 + .long 1071783753 + .long 2492769774 + .long 1014147454 + .long 897099801 + .long 1071780542 + .long 754756297 + .long 1015241005 + .long 2288159958 + .long 1071777339 + .long 2169144469 + .long 1014876021 + .long 2218315341 + .long 1071774145 + .long 2694295388 + .long 3163288868 + .long 586995997 + .long 1071770960 + .long 41662348 + .long 3162627992 + .long 1588871207 + .long 1071767783 + .long 143439582 + .long 3162963416 + .long 828946858 + .long 1071764615 + .long 10642492 + .long 1015939438 + .long 2502433899 + .long 1071761455 + .long 2148595913 + .long 1015023991 + .long 2214878420 + .long 1071758304 + .long 892270087 + .long 3163116422 + .long 4162030108 + .long 1071755161 + .long 2763428480 + .long 1015529349 + .long 3949972341 + .long 1071752027 + .long 2068408548 + .long 1014913868 + .long 1480023343 + .long 1071748902 + .long 2247196168 + .long 1015327453 + .long 948735466 + .long 1071745785 + .long 3516338028 + .long 3162574883 + .long 2257959872 + .long 1071742676 + .long 3802946148 + .long 1012964927 + .long 1014845819 + .long 1071739576 + .long 3117910646 + .long 3161559105 + .long 1416741826 + .long 1071736484 + .long 2196380210 + .long 1011413563 + .long 3366293073 + .long 1071733400 + .long 3119426314 + .long 1014120554 + .long 2471440686 + .long 1071730325 + .long 968836267 + .long 3162214888 + .long 2930322912 + .long 1071727258 + .long 2599499422 + .long 3162714047 + .long 351405227 + .long 1071724200 + .long 3125337328 + .long 3159822479 + .long 3228316108 + .long 1071721149 + .long 3010241991 + .long 3158422804 + .long 2875075254 + .long 1071718107 + .long 4144233330 + .long 3163333716 + .long 3490863953 + .long 1071715073 + .long 960797498 + .long 3162948880 + .long 685187902 + .long 1071712048 + .long 378731989 + .long 1014843115 + .long 2952712987 + .long 1071709030 + .long 3293494651 + .long 3160120301 + .long 1608493509 + .long 1071706021 + .long 3159622171 + .long 3162807737 + .long 852742562 + .long 1071703020 + .long 667253586 + .long 1009793559 + .long 590962156 + .long 1071700027 + .long 3829346666 + .long 3163275597 + .long 728909815 + .long 1071697042 + .long 383930225 + .long 1015029468 + .long 1172597893 + .long 1071694065 + .long 114433263 + .long 1015347593 + .long 1828292879 + .long 1071691096 + .long 1255956747 + .long 1015588398 + .long 2602514713 + .long 1071688135 + .long 2268929336 + .long 1014354284 + .long 3402036099 + .long 1071685182 + .long 405889334 + .long 1015105656 + .long 4133881824 + .long 1071682237 + .long 2148155345 + .long 3162931299 + .long 410360776 + .long 1071679301 + .long 1269990655 + .long 1011975870 + .long 728934454 + .long 1071676372 + .long 1413842688 + .long 1014178612 + .long 702412510 + .long 1071673451 + .long 3803266087 + .long 3162280415 + .long 238821257 + .long 1071670538 + .long 1469694871 + .long 3162884987 + .long 3541402996 + .long 1071667632 + .long 2759177317 + .long 1014854626 + .long 1928746161 + .long 1071664735 + .long 983617676 + .long 1014285177 + .long 3899555717 + .long 1071661845 + .long 427280750 + .long 3162546972 + .long 772914124 + .long 1071658964 + .long 4004372762 + .long 1012230161 + .long 1048019041 + .long 1071656090 + .long 1398474845 + .long 3160510595 + .long 339411585 + .long 1071653224 + .long 264588982 + .long 3161636657 + .long 2851812149 + .long 1071650365 + .long 2595802551 + .long 1015767337 + .long 4200250559 + .long 1071647514 + .long 2808127345 + .long 3161781938 + .type T2_neg_f,@object + .size T2_neg_f,4096 + .space 512, 0x00 # pad + .align 16 +MASK3: + .long 0 + .long 4294967280 + .long 0 + .long 4294967280 + .type MASK3,@object + .size MASK3,16 + .align 16 +RMASK: + .long 4294705152 + .long 4294967295 + .long 4294705152 + .long 4294967295 + .type RMASK,@object + .size RMASK,16 + .align 16 +pv: + .long 236289503 + .long 1064135997 + .long 463583772 + .long 3215696314 + .long 1441186365 + .long 3212977891 + .long 286331153 + .long 1069617425 + .long 2284589306 + .long 1066820852 + .long 1431655765 + .long 3218429269 + .type pv,@object + .size pv,48 + .align 4 +HALFMASK: + .long 4160749568 + .long 2147483647 + .type HALFMASK,@object + .size HALFMASK,8 + .align 4 +ONEMASK: + .long 0 + .long 1072693248 + .type ONEMASK,@object + .size ONEMASK,8 + .align 4 +TWOMASK: + .long 0 + .long 1073741824 + .type TWOMASK,@object + .size TWOMASK,8 + .data + .section .note.GNU-stack, "" +// -- Begin DWARF2 SEGMENT .eh_frame + .section .eh_frame,"a",@progbits +.eh_frame_seg: + .align 1 + .4byte 0x00000014 + .8byte 0x00527a0100000000 + .8byte 0x08070c1b01107801 + .4byte 0x00000190 + .4byte 0x0000001c + .4byte 0x0000001c + .4byte ..___tag_value_tanh.1-. + .4byte ..___tag_value_tanh.5-..___tag_value_tanh.1 + .2byte 0x0400 + .4byte ..___tag_value_tanh.3-..___tag_value_tanh.1 + .2byte 0x100e + .byte 0x04 + .4byte ..___tag_value_tanh.4-..___tag_value_tanh.3 + .2byte 0x080e + .byte 0x00 +# End From 3597b8055da090ef3f1ee662e96dcb952bba2c30 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 9 Mar 2015 12:02:02 -0700 Subject: [PATCH 172/194] Store fields for gnu_hash separately Kindle app relies on soinfo's sysv hash fields while linking native libraries. This change allows to keep sysv hash fields intact for the libraries linked with --hash-style=both. Bug: 19059885 Change-Id: I12528652955638f1a6586bda99e111bb1c8aa7a3 --- linker/linker.cpp | 45 +++++++++++++++++++++++++-------------------- linker/linker.h | 4 ++++ 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 9ba83ecc2..593785b79 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -421,26 +421,41 @@ ElfW(Sym)* soinfo::gnu_lookup(SymbolName& symbol_name) { uint32_t word_num = (hash / bloom_mask_bits) & gnu_maskwords_; ElfW(Addr) bloom_word = gnu_bloom_filter_[word_num]; + TRACE_TYPE(LOOKUP, "SEARCH %s in %s@%p (gnu)", + symbol_name.get_name(), name, reinterpret_cast(base)); + // test against bloom filter if ((1 & (bloom_word >> (hash % bloom_mask_bits)) & (bloom_word >> (h2 % bloom_mask_bits))) == 0) { + TRACE_TYPE(LOOKUP, "NOT FOUND %s in %s@%p", + symbol_name.get_name(), name, reinterpret_cast(base)); + return nullptr; } // bloom test says "probably yes"... - uint32_t n = bucket_[hash % nbucket_]; + uint32_t n = gnu_bucket_[hash % gnu_nbucket_]; if (n == 0) { + TRACE_TYPE(LOOKUP, "NOT FOUND %s in %s@%p", + symbol_name.get_name(), name, reinterpret_cast(base)); + return nullptr; } do { ElfW(Sym)* s = symtab_ + n; - if (((chain_[n] ^ hash) >> 1) == 0 && + if (((gnu_chain_[n] ^ hash) >> 1) == 0 && strcmp(get_string(s->st_name), symbol_name.get_name()) == 0 && is_symbol_global_and_defined(this, s)) { + TRACE_TYPE(LOOKUP, "FOUND %s in %s (%p) %zd", + symbol_name.get_name(), name, reinterpret_cast(s->st_value), + static_cast(s->st_size)); return s; } - } while ((chain_[n++] & 1) == 0); + } while ((gnu_chain_[n++] & 1) == 0); + + TRACE_TYPE(LOOKUP, "NOT FOUND %s in %s@%p", + symbol_name.get_name(), name, reinterpret_cast(base)); return nullptr; } @@ -802,8 +817,8 @@ static bool symbol_matches_soaddr(const ElfW(Sym)* sym, ElfW(Addr) soaddr) { ElfW(Sym)* soinfo::gnu_addr_lookup(const void* addr) { ElfW(Addr) soaddr = reinterpret_cast(addr) - load_bias; - for (size_t i = 0; i < nbucket_; ++i) { - uint32_t n = bucket_[i]; + for (size_t i = 0; i < gnu_nbucket_; ++i) { + uint32_t n = gnu_bucket_[i]; if (n == 0) { continue; @@ -814,7 +829,7 @@ ElfW(Sym)* soinfo::gnu_addr_lookup(const void* addr) { if (symbol_matches_soaddr(sym, soaddr)) { return sym; } - } while ((chain_[n++] & 1) == 0); + } while ((gnu_chain_[n++] & 1) == 0); } return nullptr; @@ -1941,11 +1956,6 @@ bool soinfo::prelink_image() { break; case DT_HASH: - if (nbucket_ != 0) { - // in case of --hash-style=both, we prefer gnu - break; - } - nbucket_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; nchain_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; bucket_ = reinterpret_cast(load_bias + d->d_un.d_ptr + 8); @@ -1953,20 +1963,15 @@ bool soinfo::prelink_image() { break; case DT_GNU_HASH: - if (nbucket_ != 0) { - // in case of --hash-style=both, we prefer gnu - nchain_ = 0; - } - - nbucket_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; + gnu_nbucket_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[0]; // skip symndx gnu_maskwords_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[2]; gnu_shift2_ = reinterpret_cast(load_bias + d->d_un.d_ptr)[3]; gnu_bloom_filter_ = reinterpret_cast(load_bias + d->d_un.d_ptr + 16); - bucket_ = reinterpret_cast(gnu_bloom_filter_ + gnu_maskwords_); + gnu_bucket_ = reinterpret_cast(gnu_bloom_filter_ + gnu_maskwords_); // amend chain for symndx = header[1] - chain_ = bucket_ + nbucket_ - reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; + gnu_chain_ = gnu_bucket_ + gnu_nbucket_ - reinterpret_cast(load_bias + d->d_un.d_ptr)[1]; if (!powerof2(gnu_maskwords_)) { DL_ERR("invalid maskwords for gnu_hash = 0x%x, in \"%s\" expecting power to two", gnu_maskwords_, name); @@ -2278,7 +2283,7 @@ bool soinfo::prelink_image() { DL_ERR("linker cannot have DT_NEEDED dependencies on other libraries"); return false; } - if (nbucket_ == 0) { + if (nbucket_ == 0 && gnu_nbucket_ == 0) { DL_ERR("empty/missing DT_HASH/DT_GNU_HASH in \"%s\" (new hash type from the future?)", name); return false; } diff --git a/linker/linker.h b/linker/linker.h index f8640a0e5..e4681ebe5 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -309,6 +309,10 @@ struct soinfo { size_t strtab_size_; // version >= 2 + + size_t gnu_nbucket_; + uint32_t* gnu_bucket_; + uint32_t* gnu_chain_; uint32_t gnu_maskwords_; uint32_t gnu_shift2_; ElfW(Addr)* gnu_bloom_filter_; From c6e5874a4c19f398eb179a23de9b1d2c06bccea0 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Mon, 9 Mar 2015 13:55:18 -0700 Subject: [PATCH 173/194] Loosen fchmodat AT_SYMLINK_NOFOLLOW test on symlink. It has been reported in b2/19657449 and b2/19381040 that fchmodat AT_SYMLINK_NOFOLLOW operation on symlink can succeed. It seems to be controlled by kernel(version or configuration) or user configuration whether chmod is allowed on symlinks. Unless we can disable chmod on symlinks in bionic explicitly, we can not guarantee that the test can pass. But it seems reasonable to allow chmod on symlink if kernel allows to. So We prefer to loosen the test here, accepting both success and failure when doing chmod operation on symlinks. Bug: 19657449 Bug: 19381040 Change-Id: I780e84f0b50d0412fbac9f1c240d07e984892a28 --- tests/sys_stat_test.cpp | 56 ++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp index 28c7c5262..7c387ba2f 100644 --- a/tests/sys_stat_test.cpp +++ b/tests/sys_stat_test.cpp @@ -138,13 +138,18 @@ TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_nonexistant_file) { #endif } +static void AssertFileModeEquals(mode_t expected_mode, const char* filename) { + struct stat sb; + ASSERT_EQ(0, stat(filename, &sb)); + mode_t mask = S_IRWXU | S_IRWXG | S_IRWXO; + ASSERT_EQ(expected_mode & mask, static_cast(sb.st_mode) & mask); +} + TEST(sys_stat, fchmodat_file) { TemporaryFile tf; - struct stat sb; ASSERT_EQ(0, fchmodat(AT_FDCWD, tf.filename, 0751, 0)); - ASSERT_EQ(0, fstat(tf.fd, &sb)); - ASSERT_TRUE(0751 == (sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO))); + AssertFileModeEquals(0751, tf.filename); } TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_file) { @@ -153,11 +158,9 @@ TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_file) { int result = fchmodat(AT_FDCWD, tf.filename, 0751, AT_SYMLINK_NOFOLLOW); #if defined(__BIONIC__) - struct stat sb; ASSERT_EQ(0, result); ASSERT_EQ(0, errno); - ASSERT_EQ(0, fstat(tf.fd, &sb)); - ASSERT_TRUE(0751 == (sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO))); + AssertFileModeEquals(0751, tf.filename); #else // glibc 2.19 does not implement AT_SYMLINK_NOFOLLOW and always // returns ENOTSUP @@ -169,14 +172,12 @@ TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_file) { TEST(sys_stat, fchmodat_symlink) { TemporaryFile tf; char linkname[255]; - struct stat sb; snprintf(linkname, sizeof(linkname), "%s.link", tf.filename); ASSERT_EQ(0, symlink(tf.filename, linkname)); ASSERT_EQ(0, fchmodat(AT_FDCWD, linkname, 0751, 0)); - ASSERT_EQ(0, fstat(tf.fd, &sb)); - ASSERT_TRUE(0751 == (sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO))); + AssertFileModeEquals(0751, tf.filename); unlink(linkname); } @@ -194,29 +195,54 @@ TEST(sys_stat, fchmodat_dangling_symlink) { unlink(linkname); } +static void AssertSymlinkModeEquals(mode_t expected_mode, const char* linkname) { + struct stat sb; + ASSERT_EQ(0, fstatat(AT_FDCWD, linkname, &sb, AT_SYMLINK_NOFOLLOW)); + mode_t mask = S_IRWXU | S_IRWXG | S_IRWXO; + ASSERT_EQ(expected_mode & mask, static_cast(sb.st_mode) & mask); +} + TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_with_symlink) { TemporaryFile tf; - char linkname[255]; + struct stat tf_sb; + ASSERT_EQ(0, stat(tf.filename, &tf_sb)); + char linkname[255]; snprintf(linkname, sizeof(linkname), "%s.link", tf.filename); ASSERT_EQ(0, symlink(tf.filename, linkname)); - ASSERT_EQ(-1, fchmodat(AT_FDCWD, linkname, 0751, AT_SYMLINK_NOFOLLOW)); - ASSERT_EQ(ENOTSUP, errno); + int result = fchmodat(AT_FDCWD, linkname, 0751, AT_SYMLINK_NOFOLLOW); + // It depends on the kernel whether chmod operation on symlink is allowed. + if (result == 0) { + AssertSymlinkModeEquals(0751, linkname); + } else { + ASSERT_EQ(-1, result); + ASSERT_EQ(ENOTSUP, errno); + } + + // Target file mode shouldn't be modified. + AssertFileModeEquals(tf_sb.st_mode, tf.filename); unlink(linkname); } TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_with_dangling_symlink) { TemporaryFile tf; + char linkname[255]; char target[255]; - snprintf(linkname, sizeof(linkname), "%s.link", tf.filename); snprintf(target, sizeof(target), "%s.doesnotexist", tf.filename); ASSERT_EQ(0, symlink(target, linkname)); - ASSERT_EQ(-1, fchmodat(AT_FDCWD, linkname, 0751, AT_SYMLINK_NOFOLLOW)); - ASSERT_EQ(ENOTSUP, errno); + int result = fchmodat(AT_FDCWD, linkname, 0751, AT_SYMLINK_NOFOLLOW); + // It depends on the kernel whether chmod operation on symlink is allowed. + if (result == 0) { + AssertSymlinkModeEquals(0751, linkname); + } else { + ASSERT_EQ(-1, result); + ASSERT_EQ(ENOTSUP, errno); + } + unlink(linkname); } From 4a55c46d308deae70d7d8669c50514d521813dc2 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 9 Mar 2015 19:38:56 -0700 Subject: [PATCH 174/194] Generate sysv hash for libc, libstdc++ and libm Bug: 19059885 Change-Id: I35e2a9cd0bb3914d9d0c82d163bfaf0fff844667 --- libc/Android.mk | 8 ++++++++ libm/Android.mk | 3 +++ 2 files changed, 11 insertions(+) diff --git a/libc/Android.mk b/libc/Android.mk index cb1d8c034..d0ef77297 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1324,6 +1324,10 @@ include $(CLEAR_VARS) LOCAL_CFLAGS := $(libc_common_cflags) LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) + +# TODO: This is to work around b/19059885. Remove after root cause is fixed +LOCAL_LDFLAGS := -Wl,--hash-style=both + LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_SRC_FILES := \ $(libc_arch_dynamic_src_files) \ @@ -1474,6 +1478,10 @@ include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include LOCAL_CFLAGS := $(libc_common_cflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) + +# TODO: This is to work around b/19059885. Remove after root cause is fixed +LOCAL_LDFLAGS := -Wl,--hash-style=both + LOCAL_SRC_FILES := $(libstdcxx_common_src_files) LOCAL_MODULE:= libstdc++ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk diff --git a/libm/Android.mk b/libm/Android.mk index 418ec5973..092ebd57c 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -438,6 +438,9 @@ include $(BUILD_STATIC_LIBRARY) # ----------------------------------------------------------------------------- include $(CLEAR_VARS) +# TODO: This is to work around b/19059885. Remove after root cause is fixed +LOCAL_LDFLAGS := -Wl,--hash-style=both + LOCAL_MODULE := libm LOCAL_CLANG := $(libm_clang) LOCAL_SYSTEM_SHARED_LIBRARIES := libc From 1156508265422f407c7072788ce6c32c35411941 Mon Sep 17 00:00:00 2001 From: Goran Jakovljevic Date: Tue, 10 Mar 2015 17:11:39 +0100 Subject: [PATCH 175/194] Generate gnu hash for arm only Fixes build failure caused by: https://android-review.googlesource.com/#/c/139660 As previously discussed [1], MIPS does not support GNU-style ELF hashes. [1] https://android-review.googlesource.com/#/c/49282/2/tests/Android.mk Change-Id: I9a7966eebfd1ef0a587a20b71faefde38e84ab62 --- libc/Android.mk | 4 ++-- libm/Android.mk | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index d0ef77297..293b70e07 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1326,7 +1326,7 @@ LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) # TODO: This is to work around b/19059885. Remove after root cause is fixed -LOCAL_LDFLAGS := -Wl,--hash-style=both +LOCAL_LDFLAGS_arm := -Wl,--hash-style=both LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_SRC_FILES := \ @@ -1480,7 +1480,7 @@ LOCAL_CFLAGS := $(libc_common_cflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) # TODO: This is to work around b/19059885. Remove after root cause is fixed -LOCAL_LDFLAGS := -Wl,--hash-style=both +LOCAL_LDFLAGS_arm := -Wl,--hash-style=both LOCAL_SRC_FILES := $(libstdcxx_common_src_files) LOCAL_MODULE:= libstdc++ diff --git a/libm/Android.mk b/libm/Android.mk index 092ebd57c..2f30c8210 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -439,7 +439,7 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) # TODO: This is to work around b/19059885. Remove after root cause is fixed -LOCAL_LDFLAGS := -Wl,--hash-style=both +LOCAL_LDFLAGS_arm := -Wl,--hash-style=both LOCAL_MODULE := libm LOCAL_CLANG := $(libm_clang) From c9ce70d7838b6aae074fc3615cdf04e5c9ac612a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 10 Mar 2015 15:30:26 -0700 Subject: [PATCH 176/194] Refactoring: rename linker_allocator files Change-Id: Ifc08e64b3a85205f072b7abab1149c7ab71e2f75 --- linker/Android.mk | 2 +- linker/linker.cpp | 2 +- linker/{linker_allocator.cpp => linker_block_allocator.cpp} | 2 +- linker/{linker_allocator.h => linker_block_allocator.h} | 0 linker/tests/Android.mk | 4 ++-- ...ker_allocator_test.cpp => linker_block_allocator_test.cpp} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename linker/{linker_allocator.cpp => linker_block_allocator.cpp} (99%) rename linker/{linker_allocator.h => linker_block_allocator.h} (100%) rename linker/tests/{linker_allocator_test.cpp => linker_block_allocator_test.cpp} (98%) diff --git a/linker/Android.mk b/linker/Android.mk index 54535fc2b..0ab0fda4a 100644 --- a/linker/Android.mk +++ b/linker/Android.mk @@ -6,7 +6,7 @@ LOCAL_SRC_FILES:= \ debugger.cpp \ dlfcn.cpp \ linker.cpp \ - linker_allocator.cpp \ + linker_block_allocator.cpp \ linker_environ.cpp \ linker_libc_support.c \ linker_phdr.cpp \ diff --git a/linker/linker.cpp b/linker/linker.cpp index 593785b79..493b03515 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -50,7 +50,7 @@ #include "private/UniquePtr.h" #include "linker.h" -#include "linker_allocator.h" +#include "linker_block_allocator.h" #include "linker_debug.h" #include "linker_environ.h" #include "linker_leb128.h" diff --git a/linker/linker_allocator.cpp b/linker/linker_block_allocator.cpp similarity index 99% rename from linker/linker_allocator.cpp rename to linker/linker_block_allocator.cpp index ac11b979a..4545c4ae2 100644 --- a/linker/linker_allocator.cpp +++ b/linker/linker_block_allocator.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "linker_allocator.h" +#include "linker_block_allocator.h" #include #include #include diff --git a/linker/linker_allocator.h b/linker/linker_block_allocator.h similarity index 100% rename from linker/linker_allocator.h rename to linker/linker_block_allocator.h diff --git a/linker/tests/Android.mk b/linker/tests/Android.mk index aa9491ed0..9a08bec0e 100644 --- a/linker/tests/Android.mk +++ b/linker/tests/Android.mk @@ -28,7 +28,7 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../libc/ LOCAL_SRC_FILES := \ linked_list_test.cpp \ - linker_allocator_test.cpp \ - ../linker_allocator.cpp + linker_block_allocator_test.cpp \ + ../linker_block_allocator.cpp include $(BUILD_NATIVE_TEST) diff --git a/linker/tests/linker_allocator_test.cpp b/linker/tests/linker_block_allocator_test.cpp similarity index 98% rename from linker/tests/linker_allocator_test.cpp rename to linker/tests/linker_block_allocator_test.cpp index 9292a054d..6674881d9 100644 --- a/linker/tests/linker_allocator_test.cpp +++ b/linker/tests/linker_block_allocator_test.cpp @@ -20,7 +20,7 @@ #include -#include "../linker_allocator.h" +#include "../linker_block_allocator.h" #include From 600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 10 Mar 2015 15:43:50 -0700 Subject: [PATCH 177/194] Rename LinkerAllocator and LinkerAllocatorPage Change-Id: I87d80fbcd4ec26c0ee4f601b9c4c64f600418dd9 --- linker/linker.cpp | 4 ++-- linker/linker_block_allocator.cpp | 21 ++++++++++---------- linker/linker_block_allocator.h | 13 ++++++------ linker/tests/linker_block_allocator_test.cpp | 8 ++++---- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/linker/linker.cpp b/linker/linker.cpp index 493b03515..ea7d63761 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -92,8 +92,8 @@ static const char* get_base_name(const char* name) { static ElfW(Addr) get_elf_exec_load_bias(const ElfW(Ehdr)* elf); -static LinkerAllocator g_soinfo_allocator; -static LinkerAllocator> g_soinfo_links_allocator; +static LinkerTypeAllocator g_soinfo_allocator; +static LinkerTypeAllocator> g_soinfo_links_allocator; static soinfo* solist; static soinfo* sonext; diff --git a/linker/linker_block_allocator.cpp b/linker/linker_block_allocator.cpp index 4545c4ae2..fc9a75b15 100644 --- a/linker/linker_block_allocator.cpp +++ b/linker/linker_block_allocator.cpp @@ -22,9 +22,9 @@ #include "private/bionic_prctl.h" -struct LinkerAllocatorPage { - LinkerAllocatorPage* next; - uint8_t bytes[PAGE_SIZE-sizeof(LinkerAllocatorPage*)]; +struct LinkerBlockAllocatorPage { + LinkerBlockAllocatorPage* next; + uint8_t bytes[PAGE_SIZE-sizeof(LinkerBlockAllocatorPage*)]; }; struct FreeBlockInfo { @@ -64,7 +64,7 @@ void LinkerBlockAllocator::free(void* block) { return; } - LinkerAllocatorPage* page = find_page(block); + LinkerBlockAllocatorPage* page = find_page(block); if (page == nullptr) { abort(); @@ -87,7 +87,7 @@ void LinkerBlockAllocator::free(void* block) { } void LinkerBlockAllocator::protect_all(int prot) { - for (LinkerAllocatorPage* page = page_list_; page != nullptr; page = page->next) { + for (LinkerBlockAllocatorPage* page = page_list_; page != nullptr; page = page->next) { if (mprotect(page, PAGE_SIZE, prot) == -1) { abort(); } @@ -95,8 +95,9 @@ void LinkerBlockAllocator::protect_all(int prot) { } void LinkerBlockAllocator::create_new_page() { - LinkerAllocatorPage* page = reinterpret_cast(mmap(nullptr, PAGE_SIZE, - PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0)); + LinkerBlockAllocatorPage* page = reinterpret_cast( + mmap(nullptr, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0)); + if (page == MAP_FAILED) { abort(); // oom } @@ -107,7 +108,7 @@ void LinkerBlockAllocator::create_new_page() { FreeBlockInfo* first_block = reinterpret_cast(page->bytes); first_block->next_block = free_block_list_; - first_block->num_free_blocks = (PAGE_SIZE - sizeof(LinkerAllocatorPage*))/block_size_; + first_block->num_free_blocks = (PAGE_SIZE - sizeof(LinkerBlockAllocatorPage*))/block_size_; free_block_list_ = first_block; @@ -115,12 +116,12 @@ void LinkerBlockAllocator::create_new_page() { page_list_ = page; } -LinkerAllocatorPage* LinkerBlockAllocator::find_page(void* block) { +LinkerBlockAllocatorPage* LinkerBlockAllocator::find_page(void* block) { if (block == nullptr) { abort(); } - LinkerAllocatorPage* page = page_list_; + LinkerBlockAllocatorPage* page = page_list_; while (page != nullptr) { const uint8_t* page_ptr = reinterpret_cast(page); if (block >= (page_ptr + sizeof(page->next)) && block < (page_ptr + PAGE_SIZE)) { diff --git a/linker/linker_block_allocator.h b/linker/linker_block_allocator.h index 5d3563fbd..1d41806a8 100644 --- a/linker/linker_block_allocator.h +++ b/linker/linker_block_allocator.h @@ -21,7 +21,7 @@ #include #include "private/bionic_macros.h" -struct LinkerAllocatorPage; +struct LinkerBlockAllocatorPage; /* * This class is a non-template version of the LinkerAllocator @@ -40,10 +40,10 @@ class LinkerBlockAllocator { private: void create_new_page(); - LinkerAllocatorPage* find_page(void* block); + LinkerBlockAllocatorPage* find_page(void* block); size_t block_size_; - LinkerAllocatorPage* page_list_; + LinkerBlockAllocatorPage* page_list_; void* free_block_list_; DISALLOW_COPY_AND_ASSIGN(LinkerBlockAllocator); @@ -57,14 +57,15 @@ class LinkerBlockAllocator { * anonymous mmaps. */ template -class LinkerAllocator { +class LinkerTypeAllocator { public: - LinkerAllocator() : block_allocator_(sizeof(T)) {} + LinkerTypeAllocator() : block_allocator_(sizeof(T)) {} T* alloc() { return reinterpret_cast(block_allocator_.alloc()); } void free(T* t) { block_allocator_.free(t); } void protect_all(int prot) { block_allocator_.protect_all(prot); } private: LinkerBlockAllocator block_allocator_; - DISALLOW_COPY_AND_ASSIGN(LinkerAllocator); + DISALLOW_COPY_AND_ASSIGN(LinkerTypeAllocator); }; + #endif // __LINKER_ALLOCATOR_H diff --git a/linker/tests/linker_block_allocator_test.cpp b/linker/tests/linker_block_allocator_test.cpp index 6674881d9..3ef0f36f8 100644 --- a/linker/tests/linker_block_allocator_test.cpp +++ b/linker/tests/linker_block_allocator_test.cpp @@ -49,7 +49,7 @@ static size_t kPageSize = sysconf(_SC_PAGE_SIZE); }; TEST(linker_allocator, test_nominal) { - LinkerAllocator allocator; + LinkerTypeAllocator allocator; test_struct_nominal* ptr1 = allocator.alloc(); ASSERT_TRUE(ptr1 != nullptr); @@ -65,7 +65,7 @@ TEST(linker_allocator, test_nominal) { } TEST(linker_allocator, test_small) { - LinkerAllocator allocator; + LinkerTypeAllocator allocator; char* ptr1 = reinterpret_cast(allocator.alloc()); char* ptr2 = reinterpret_cast(allocator.alloc()); @@ -76,7 +76,7 @@ TEST(linker_allocator, test_small) { } TEST(linker_allocator, test_larger) { - LinkerAllocator allocator; + LinkerTypeAllocator allocator; test_struct_larger* ptr1 = allocator.alloc(); test_struct_larger* ptr2 = allocator.alloc(); @@ -99,7 +99,7 @@ TEST(linker_allocator, test_larger) { } static void protect_all() { - LinkerAllocator allocator; + LinkerTypeAllocator allocator; // number of allocs to reach the end of first page size_t n = kPageSize/sizeof(test_struct_larger) - 1; From ba87fe5145b27bee0dc2a0ce146928a1998c8061 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 11 Mar 2015 09:32:25 -0700 Subject: [PATCH 178/194] Add the UMOUNT_NOFOLLOW flag to . Change-Id: I2b81cfc3147d9a0a6ac2a8f064e6d9864fa7e04d --- libc/include/sys/mount.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libc/include/sys/mount.h b/libc/include/sys/mount.h index 3c35d31b9..fd7cf17fb 100644 --- a/libc/include/sys/mount.h +++ b/libc/include/sys/mount.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_MOUNT_H #define _SYS_MOUNT_H @@ -35,9 +36,10 @@ __BEGIN_DECLS /* umount2 flags. */ -#define MNT_FORCE 1 /* Forcibly unmount */ -#define MNT_DETACH 2 /* Detach from tree only */ -#define MNT_EXPIRE 4 /* Mark for expiry */ +#define MNT_FORCE 1 +#define MNT_DETACH 2 +#define MNT_EXPIRE 4 +#define UMOUNT_NOFOLLOW 8 extern int mount(const char*, const char*, const char*, unsigned long, const void*); extern int umount(const char*); From c4a586da49e438961e09a1319df86c9a26f4eb92 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Thu, 12 Mar 2015 13:21:35 -0700 Subject: [PATCH 179/194] syslog.h: missing LOG_MAKEPRI definition Bug: 19681572 Change-Id: Ice5f5cb1f71522ffc47b2243a8dc4c277c2a288f --- libc/include/syslog.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libc/include/syslog.h b/libc/include/syslog.h index cbceab287..8000f03d9 100644 --- a/libc/include/syslog.h +++ b/libc/include/syslog.h @@ -47,6 +47,7 @@ __BEGIN_DECLS #define LOG_PRIMASK 7 #define LOG_PRI(x) ((x) & LOG_PRIMASK) +#define LOG_MAKEPRI(fac, pri) ((fac) | (pri)) /* Facilities are currently ignored on Android. */ #define LOG_KERN 0000 From 64a9c4f697a2588bbcfb20534b8b15b823595d1f Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 12 Mar 2015 22:16:03 -0700 Subject: [PATCH 180/194] Make gtest_main exit 1 when some test are failed. This is the gtest behavior, which I think can make test status judgement more convenient. Change-Id: I7d3c210d1744b954a4148cd905dd5c353207fce8 --- tests/gtest_main.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp index b1953fc29..bf2b69578 100644 --- a/tests/gtest_main.cpp +++ b/tests/gtest_main.cpp @@ -741,7 +741,8 @@ static void CollectChildTestResult(const ChildProcInfo& child_proc, TestCase& te // We choose to use multi-fork and multi-wait here instead of multi-thread, because it always // makes deadlock to use fork in multi-thread. -static void RunTestInSeparateProc(int argc, char** argv, std::vector& testcase_list, +// Returns true if all tests run successfully, otherwise return false. +static bool RunTestInSeparateProc(int argc, char** argv, std::vector& testcase_list, size_t iteration_count, size_t job_count, const std::string& xml_output_filename) { // Stop default result printer to avoid environment setup/teardown information for each test. @@ -759,6 +760,8 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& exit(1); } + bool all_tests_passed = true; + for (size_t iteration = 1; iteration <= iteration_count; ++iteration) { OnTestIterationStartPrint(testcase_list, iteration, iteration_count); int64_t iteration_start_time_ns = NanoTime(); @@ -806,6 +809,9 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& if (++finished_test_count_list[testcase_id] == testcase.TestCount()) { ++finished_testcase_count; } + if (testcase.GetTestResult(test_id) != TEST_SUCCESS) { + all_tests_passed = false; + } it = child_proc_list.erase(it); } else { @@ -827,6 +833,8 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& perror("sigprocmask SIG_SETMASK"); exit(1); } + + return all_tests_passed; } static size_t GetProcessorCount() { @@ -1061,15 +1069,15 @@ int main(int argc, char** argv) { if (EnumerateTests(argc, arg_list.data(), testcase_list) == false) { return 1; } - RunTestInSeparateProc(argc, arg_list.data(), testcase_list, options.gtest_repeat, - options.job_count, options.gtest_output); + bool all_test_passed = RunTestInSeparateProc(argc, arg_list.data(), testcase_list, + options.gtest_repeat, options.job_count, options.gtest_output); + return all_test_passed ? 0 : 1; } else { argc = static_cast(arg_list.size()); arg_list.push_back(NULL); testing::InitGoogleTest(&argc, arg_list.data()); return RUN_ALL_TESTS(); } - return 0; } //################################################################################ From c94c7ff2bb7cdc8638d2155b8eefd8e2538eea50 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 13 Mar 2015 10:32:45 -0700 Subject: [PATCH 181/194] Add some GNU specific elf constants. Change-Id: I6c668463a27a641c9a280ce1937857d622344ff8 --- libc/include/elf.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libc/include/elf.h b/libc/include/elf.h index 41680a521..ee53ad14b 100644 --- a/libc/include/elf.h +++ b/libc/include/elf.h @@ -125,4 +125,8 @@ typedef struct { /* The kernel uses NT_PRFPREG but glibc also offers NT_FPREGSET */ #define NT_FPREGSET NT_PRFPREG +#define ELF_NOTE_GNU "GNU" + +#define NT_GNU_BUILD_ID 3 + #endif /* _ELF_H */ From 2e16d2cf1e477af1db92efde389a5ce0a8e6fbb3 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Fri, 13 Mar 2015 12:43:30 -0700 Subject: [PATCH 182/194] Switch libc and libm to sysv-only hash style Bug: 19059885 Change-Id: I60a23dc5f9c756994d566818332ca42b305b4a05 --- libc/Android.mk | 2 +- libm/Android.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/Android.mk b/libc/Android.mk index 293b70e07..7bbdd9901 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -1326,7 +1326,7 @@ LOCAL_CONLYFLAGS := $(libc_common_conlyflags) LOCAL_CPPFLAGS := $(libc_common_cppflags) # TODO: This is to work around b/19059885. Remove after root cause is fixed -LOCAL_LDFLAGS_arm := -Wl,--hash-style=both +LOCAL_LDFLAGS_arm := -Wl,--hash-style=sysv LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_SRC_FILES := \ diff --git a/libm/Android.mk b/libm/Android.mk index 2f30c8210..c7b777d56 100644 --- a/libm/Android.mk +++ b/libm/Android.mk @@ -439,7 +439,7 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) # TODO: This is to work around b/19059885. Remove after root cause is fixed -LOCAL_LDFLAGS_arm := -Wl,--hash-style=both +LOCAL_LDFLAGS_arm := -Wl,--hash-style=sysv LOCAL_MODULE := libm LOCAL_CLANG := $(libm_clang) From 2fabea47ac9475bcc52aff0715819d18aa5bdf1d Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Fri, 13 Mar 2015 14:22:05 -0700 Subject: [PATCH 183/194] Hide content of pthread_rwlock_t in pthread_rwlock_internal_t. Bug: 19249079 Change-Id: Ifbe634c716b6793bef897ec5134b55eb44c6b8d5 --- libc/bionic/pthread_rwlock.cpp | 263 ++++++++++++++++----------------- libc/include/pthread.h | 22 +-- 2 files changed, 135 insertions(+), 150 deletions(-) diff --git a/libc/bionic/pthread_rwlock.cpp b/libc/bionic/pthread_rwlock.cpp index 83243ab46..f089940a8 100644 --- a/libc/bionic/pthread_rwlock.cpp +++ b/libc/bionic/pthread_rwlock.cpp @@ -62,18 +62,6 @@ #define RWLOCKATTR_DEFAULT 0 #define RWLOCKATTR_SHARED_MASK 0x0010 -static inline bool rwlock_is_shared(const pthread_rwlock_t* rwlock) { - return rwlock->attr == PTHREAD_PROCESS_SHARED; -} - -static bool timespec_from_absolute(timespec* rel_timeout, const timespec* abs_timeout) { - if (abs_timeout != NULL) { - if (!timespec_from_absolute_timespec(*rel_timeout, *abs_timeout, CLOCK_REALTIME)) { - return false; - } - } - return true; -} int pthread_rwlockattr_init(pthread_rwlockattr_t* attr) { *attr = PTHREAD_PROCESS_PRIVATE; @@ -101,37 +89,33 @@ int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t* attr, int* pshared return 0; } -static inline atomic_int* STATE_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { - static_assert(sizeof(atomic_int) == sizeof(rwlock->state), - "rwlock->state should actually be atomic_int in implementation."); +struct pthread_rwlock_internal_t { + atomic_int state; // 0=unlock, -1=writer lock, +n=reader lock + atomic_int writer_thread_id; + atomic_uint pending_readers; + atomic_uint pending_writers; + int32_t attr; - // We prefer casting to atomic_int instead of declaring rwlock->state to be atomic_int directly. - // Because using the second method pollutes pthread.h, and causes an error when compiling libcxx. - return reinterpret_cast(&rwlock->state); + bool process_shared() const { + return attr == PTHREAD_PROCESS_SHARED; + } + +#if defined(__LP64__) + char __reserved[36]; +#else + char __reserved[20]; +#endif +}; + +static inline pthread_rwlock_internal_t* __get_internal_rwlock(pthread_rwlock_t* rwlock_interface) { + static_assert(sizeof(pthread_rwlock_t) == sizeof(pthread_rwlock_internal_t), + "pthread_rwlock_t should actually be pthread_rwlock_internal_t in implementation."); + return reinterpret_cast(rwlock_interface); } -static inline atomic_int* WRITER_THREAD_ID_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { - static_assert(sizeof(atomic_int) == sizeof(rwlock->writer_thread_id), - "rwlock->writer_thread_id should actually be atomic_int in implementation."); +int pthread_rwlock_init(pthread_rwlock_t* rwlock_interface, const pthread_rwlockattr_t* attr) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); - return reinterpret_cast(&rwlock->writer_thread_id); -} - -static inline atomic_uint* PENDING_READERS_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { - static_assert(sizeof(atomic_uint) == sizeof(rwlock->pending_readers), - "rwlock->pending_readers should actually be atomic_uint in implementation."); - - return reinterpret_cast(&rwlock->pending_readers); -} - -static inline atomic_uint* PENDING_WRITERS_ATOMIC_POINTER(pthread_rwlock_t* rwlock) { - static_assert(sizeof(atomic_uint) == sizeof(rwlock->pending_writers), - "rwlock->pending_writers should actually be atomic_uint in implementation."); - - return reinterpret_cast(&rwlock->pending_writers); -} - -int pthread_rwlock_init(pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* attr) { if (__predict_true(attr == NULL)) { rwlock->attr = 0; } else { @@ -145,53 +129,62 @@ int pthread_rwlock_init(pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* at } } - atomic_init(STATE_ATOMIC_POINTER(rwlock), 0); - atomic_init(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), 0); - atomic_init(PENDING_READERS_ATOMIC_POINTER(rwlock), 0); - atomic_init(PENDING_WRITERS_ATOMIC_POINTER(rwlock), 0); + atomic_init(&rwlock->state, 0); + atomic_init(&rwlock->writer_thread_id, 0); + atomic_init(&rwlock->pending_readers, 0); + atomic_init(&rwlock->pending_writers, 0); return 0; } -int pthread_rwlock_destroy(pthread_rwlock_t* rwlock) { - if (rwlock->state != 0) { +int pthread_rwlock_destroy(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); + + if (atomic_load_explicit(&rwlock->state, memory_order_relaxed) != 0) { return EBUSY; } return 0; } -static int __pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { - if (__predict_false(__get_thread()->tid == - atomic_load_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), memory_order_relaxed))) { +static int __pthread_rwlock_timedrdlock(pthread_rwlock_internal_t* rwlock, + const timespec* abs_timeout_or_null) { + + if (__predict_false(__get_thread()->tid == atomic_load_explicit(&rwlock->writer_thread_id, + memory_order_relaxed))) { return EDEADLK; } - timespec ts; - timespec* rel_timeout = (abs_timeout == NULL) ? NULL : &ts; - - atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); - while (true) { - int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); - if (__predict_true(cur_state >= 0)) { - if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state + 1, + int old_state = atomic_load_explicit(&rwlock->state, memory_order_relaxed); + if (__predict_true(old_state >= 0)) { + if (atomic_compare_exchange_weak_explicit(&rwlock->state, &old_state, old_state + 1, memory_order_acquire, memory_order_relaxed)) { return 0; } } else { - if (!timespec_from_absolute(rel_timeout, abs_timeout)) { - return ETIMEDOUT; + timespec ts; + timespec* rel_timeout = NULL; + + if (abs_timeout_or_null != NULL) { + rel_timeout = &ts; + if (!timespec_from_absolute_timespec(*rel_timeout, *abs_timeout_or_null, CLOCK_REALTIME)) { + return ETIMEDOUT; + } } - atomic_uint* pending_readers_ptr = PENDING_READERS_ATOMIC_POINTER(rwlock); // To avoid losing wake ups, the pending_readers increment should be observed before // futex_wait by all threads. A seq_cst fence instead of a seq_cst operation is used // here. Because only a seq_cst fence can ensure sequential consistency for non-atomic // operations in futex_wait. - atomic_fetch_add_explicit(pending_readers_ptr, 1, memory_order_relaxed); + atomic_fetch_add_explicit(&rwlock->pending_readers, 1, memory_order_relaxed); + atomic_thread_fence(memory_order_seq_cst); - int ret = __futex_wait_ex(state_ptr, rwlock_is_shared(rwlock), cur_state, rel_timeout); - atomic_fetch_sub_explicit(pending_readers_ptr, 1, memory_order_relaxed); + + int ret = __futex_wait_ex(&rwlock->state, rwlock->process_shared(), old_state, + rel_timeout); + + atomic_fetch_sub_explicit(&rwlock->pending_readers, 1, memory_order_relaxed); + if (ret == -ETIMEDOUT) { return ETIMEDOUT; } @@ -199,44 +192,49 @@ static int __pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock, const timespec } } -static int __pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { - if (__predict_false(__get_thread()->tid == - atomic_load_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), memory_order_relaxed))) { +static int __pthread_rwlock_timedwrlock(pthread_rwlock_internal_t* rwlock, + const timespec* abs_timeout_or_null) { + + if (__predict_false(__get_thread()->tid == atomic_load_explicit(&rwlock->writer_thread_id, + memory_order_relaxed))) { return EDEADLK; } - timespec ts; - timespec* rel_timeout = (abs_timeout == NULL) ? NULL : &ts; - - atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); - while (true) { - int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); - if (__predict_true(cur_state == 0)) { - if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, -1, + int old_state = atomic_load_explicit(&rwlock->state, memory_order_relaxed); + if (__predict_true(old_state == 0)) { + if (atomic_compare_exchange_weak_explicit(&rwlock->state, &old_state, -1, memory_order_acquire, memory_order_relaxed)) { // writer_thread_id is protected by rwlock and can only be modified in rwlock write // owner thread. Other threads may read it for EDEADLK error checking, atomic operation // is safe enough for it. - atomic_store_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), __get_thread()->tid, - memory_order_relaxed); + atomic_store_explicit(&rwlock->writer_thread_id, __get_thread()->tid, memory_order_relaxed); return 0; } } else { - if (!timespec_from_absolute(rel_timeout, abs_timeout)) { - return ETIMEDOUT; - } + timespec ts; + timespec* rel_timeout = NULL; - atomic_uint* pending_writers_ptr = PENDING_WRITERS_ATOMIC_POINTER(rwlock); + if (abs_timeout_or_null != NULL) { + rel_timeout = &ts; + if (!timespec_from_absolute_timespec(*rel_timeout, *abs_timeout_or_null, CLOCK_REALTIME)) { + return ETIMEDOUT; + } + } // To avoid losing wake ups, the pending_writers increment should be observed before // futex_wait by all threads. A seq_cst fence instead of a seq_cst operation is used // here. Because only a seq_cst fence can ensure sequential consistency for non-atomic // operations in futex_wait. - atomic_fetch_add_explicit(pending_writers_ptr, 1, memory_order_relaxed); + atomic_fetch_add_explicit(&rwlock->pending_writers, 1, memory_order_relaxed); + atomic_thread_fence(memory_order_seq_cst); - int ret = __futex_wait_ex(state_ptr, rwlock_is_shared(rwlock), cur_state, rel_timeout); - atomic_fetch_sub_explicit(pending_writers_ptr, 1, memory_order_relaxed); + + int ret = __futex_wait_ex(&rwlock->state, rwlock->process_shared(), old_state, + rel_timeout); + + atomic_fetch_sub_explicit(&rwlock->pending_writers, 1, memory_order_relaxed); + if (ret == -ETIMEDOUT) { return ETIMEDOUT; } @@ -244,86 +242,87 @@ static int __pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock, const timespec } } -int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock) { +int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); + return __pthread_rwlock_timedrdlock(rwlock, NULL); } -int pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { +int pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock_interface, const timespec* abs_timeout) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); + return __pthread_rwlock_timedrdlock(rwlock, abs_timeout); } -int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock) { - atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); - int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); +int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); - while (cur_state >= 0) { - if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state + 1, - memory_order_acquire, memory_order_relaxed)) { - return 0; - } + int old_state = atomic_load_explicit(&rwlock->state, memory_order_relaxed); + + while (old_state >= 0 && !atomic_compare_exchange_weak_explicit(&rwlock->state, &old_state, + old_state + 1, memory_order_acquire, memory_order_relaxed)) { } - return EBUSY; + return (old_state >= 0) ? 0 : EBUSY; } -int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock) { +int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); + return __pthread_rwlock_timedwrlock(rwlock, NULL); } -int pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock, const timespec* abs_timeout) { +int pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock_interface, const timespec* abs_timeout) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); + return __pthread_rwlock_timedwrlock(rwlock, abs_timeout); } -int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock) { - atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); - int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); +int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); - while (cur_state == 0) { - if (atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, -1, + int old_state = atomic_load_explicit(&rwlock->state, memory_order_relaxed); + + while (old_state == 0 && !atomic_compare_exchange_weak_explicit(&rwlock->state, &old_state, -1, memory_order_acquire, memory_order_relaxed)) { - int tid = __get_thread()->tid; - atomic_store_explicit(WRITER_THREAD_ID_ATOMIC_POINTER(rwlock), tid, memory_order_relaxed); - return 0; - } + } + if (old_state == 0) { + atomic_store_explicit(&rwlock->writer_thread_id, __get_thread()->tid, memory_order_relaxed); + return 0; } return EBUSY; } -int pthread_rwlock_unlock(pthread_rwlock_t* rwlock) { - int tid = __get_thread()->tid; - atomic_int* state_ptr = STATE_ATOMIC_POINTER(rwlock); - atomic_uint* pending_readers_ptr = PENDING_READERS_ATOMIC_POINTER(rwlock); - atomic_uint* pending_writers_ptr = PENDING_WRITERS_ATOMIC_POINTER(rwlock); +int pthread_rwlock_unlock(pthread_rwlock_t* rwlock_interface) { + pthread_rwlock_internal_t* rwlock = __get_internal_rwlock(rwlock_interface); - int cur_state = atomic_load_explicit(state_ptr, memory_order_relaxed); - if (__predict_false(cur_state == 0)) { + int old_state = atomic_load_explicit(&rwlock->state, memory_order_relaxed); + if (__predict_false(old_state == 0)) { return EPERM; - } else if (cur_state == -1) { - atomic_int* writer_thread_id_ptr = WRITER_THREAD_ID_ATOMIC_POINTER(rwlock); - if (atomic_load_explicit(writer_thread_id_ptr, memory_order_relaxed) != tid) { + } else if (old_state == -1) { + if (atomic_load_explicit(&rwlock->writer_thread_id, memory_order_relaxed) != __get_thread()->tid) { return EPERM; } // We're no longer the owner. - atomic_store_explicit(writer_thread_id_ptr, 0, memory_order_relaxed); + atomic_store_explicit(&rwlock->writer_thread_id, 0, memory_order_relaxed); // Change state from -1 to 0. - atomic_store_explicit(state_ptr, 0, memory_order_release); - goto wakeup_waiters; + atomic_store_explicit(&rwlock->state, 0, memory_order_release); - } else { // cur_state > 0 + } else { // old_state > 0 // Reduce state by 1. - while (!atomic_compare_exchange_weak_explicit(state_ptr, &cur_state, cur_state - 1, - memory_order_release, memory_order_relaxed)) { - if (cur_state <= 0) { - return EPERM; - } + while (old_state > 0 && !atomic_compare_exchange_weak_explicit(&rwlock->state, &old_state, + old_state - 1, memory_order_release, memory_order_relaxed)) { } - if (cur_state == 1) { - goto wakeup_waiters; - } - } - return 0; -wakeup_waiters: + if (old_state <= 0) { + return EPERM; + } else if (old_state > 1) { + return 0; + } + // old_state = 1, which means the last reader calling unlock. It has to wake up waiters. + } + + // If having waiters, wake up them. // To avoid losing wake ups, the update of state should be observed before reading // pending_readers/pending_writers by all threads. Use read locking as an example: // read locking thread unlocking thread @@ -335,9 +334,9 @@ wakeup_waiters: // in a situation that the locking thread reads state as negative and needs to wait, // while the unlocking thread reads pending_readers as zero and doesn't need to wake up waiters. atomic_thread_fence(memory_order_seq_cst); - if (__predict_false(atomic_load_explicit(pending_readers_ptr, memory_order_relaxed) > 0 || - atomic_load_explicit(pending_writers_ptr, memory_order_relaxed) > 0)) { - __futex_wake_ex(state_ptr, rwlock_is_shared(rwlock), INT_MAX); + if (__predict_false(atomic_load_explicit(&rwlock->pending_readers, memory_order_relaxed) > 0 || + atomic_load_explicit(&rwlock->pending_writers, memory_order_relaxed) > 0)) { + __futex_wake_ex(&rwlock->state, rwlock->process_shared(), INT_MAX); } return 0; } diff --git a/libc/include/pthread.h b/libc/include/pthread.h index 1fe61e29c..c701e30a7 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -87,28 +87,14 @@ typedef long pthread_condattr_t; typedef long pthread_rwlockattr_t; typedef struct { -#if !defined(__LP64__) - pthread_mutex_t __unused_lock; - pthread_cond_t __unused_cond; -#endif - int32_t state; // 0=unlock, -1=writer lock, +n=reader lock - int32_t writer_thread_id; - uint32_t pending_readers; - uint32_t pending_writers; - int32_t attr; -#ifdef __LP64__ - char __reserved[36]; +#if defined(__LP64__) + char __private[56]; #else - char __reserved[12]; + char __private[40]; #endif - } pthread_rwlock_t; -#ifdef __LP64__ - #define PTHREAD_RWLOCK_INITIALIZER { 0, 0, 0, 0, 0, { 0 } } -#else - #define PTHREAD_RWLOCK_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0, 0, 0, 0, { 0 } } -#endif +#define PTHREAD_RWLOCK_INITIALIZER { { 0 } } typedef int pthread_key_t; From 7ed5fa1e4d37722a644518594bf2b0e1529c05e9 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Fri, 13 Mar 2015 22:34:37 -0700 Subject: [PATCH 184/194] Moving StringPrintf to libbase. Change-Id: I47ef28bb294ffb7c7c065c5624417edf23503b77 --- benchmarks/Android.mk | 8 ++++---- benchmarks/Benchmark.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk index ae0541f12..e1580feb4 100644 --- a/benchmarks/Android.mk +++ b/benchmarks/Android.mk @@ -42,7 +42,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) -LOCAL_STATIC_LIBRARIES := libutils +LOCAL_STATIC_LIBRARIES := libbase include $(BUILD_STATIC_LIBRARY) # Only supported on linux systems. @@ -55,7 +55,7 @@ LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) LOCAL_MULTILIB := both -LOCAL_STATIC_LIBRARIES := libutils +LOCAL_STATIC_LIBRARIES := libbase include $(BUILD_HOST_STATIC_LIBRARY) endif @@ -84,7 +84,7 @@ LOCAL_MULTILIB := both LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libutils +LOCAL_STATIC_LIBRARIES := libbenchmark libbase include $(BUILD_EXECUTABLE) # We don't build a static benchmark executable because it's not usually @@ -106,7 +106,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_LDFLAGS := -lrt LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libutils +LOCAL_STATIC_LIBRARIES := libbenchmark libbase include $(BUILD_HOST_EXECUTABLE) endif diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp index 5ca1d4792..ea6000fe5 100644 --- a/benchmarks/Benchmark.cpp +++ b/benchmarks/Benchmark.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include @@ -108,7 +108,7 @@ std::string BenchmarkWithArg::GetNameStr(int arg) { template <> std::string BenchmarkWithArg::GetNameStr(double arg) { - return Name() + "/" + android::StringPrintf("%0.6f", arg); + return Name() + "/" + android::base::StringPrintf("%0.6f", arg); } template From 995b813e91a5eb67a970b9f076911873bdf5dbc4 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Fri, 13 Mar 2015 17:43:52 -0700 Subject: [PATCH 185/194] For libm, use a macro for aliasing symbols. Change-Id: Ibd42ebc387c2bf3eba9aa96091770915b4b34184 --- libc/private/bionic_asm.h | 4 ++++ libm/arm/e_sqrt.S | 5 +---- libm/arm/s_floor.S | 5 +---- libm/arm64/lrint.S | 6 ++---- libm/x86/ceil.S | 3 +-- libm/x86/e_acos.S | 3 +-- libm/x86/e_asin.S | 3 +-- libm/x86/e_atan2.S | 3 +-- libm/x86/e_cosh.S | 3 +-- libm/x86/e_exp.S | 3 +-- libm/x86/e_hypot.S | 3 +-- libm/x86/e_log.S | 3 +-- libm/x86/e_log10.S | 3 +-- libm/x86/e_sinh.S | 3 +-- libm/x86/floor.S | 3 +-- libm/x86/s_atan.S | 3 +-- libm/x86/s_cbrt.S | 3 +-- libm/x86/s_cos.S | 3 +-- libm/x86/s_expm1.S | 3 +-- libm/x86/s_log1p.S | 3 +-- libm/x86/s_sin.S | 3 +-- libm/x86/s_tan.S | 3 +-- libm/x86/s_tanh.S | 3 +-- libm/x86/sqrt.S | 3 +-- libm/x86/trunc.S | 3 +-- 25 files changed, 29 insertions(+), 54 deletions(-) diff --git a/libc/private/bionic_asm.h b/libc/private/bionic_asm.h index d53ebbae1..5fca222c4 100644 --- a/libc/private/bionic_asm.h +++ b/libc/private/bionic_asm.h @@ -57,4 +57,8 @@ ENTRY(f); \ .hidden f \ +#define ALIAS_SYMBOL(alias, original) \ + .globl alias; \ + .equ alias, original + #endif /* _PRIVATE_BIONIC_ASM_H_ */ diff --git a/libm/arm/e_sqrt.S b/libm/arm/e_sqrt.S index 669212f58..17312f50f 100644 --- a/libm/arm/e_sqrt.S +++ b/libm/arm/e_sqrt.S @@ -39,7 +39,4 @@ ENTRY(sqrt) bx lr END(sqrt) -#if LDBL_MANT_DIG == 53 - .weak sqrtl - .equ sqrtl, sqrt -#endif +ALIAS_SYMBOL(sqrtl, sqrt); diff --git a/libm/arm/s_floor.S b/libm/arm/s_floor.S index 44053581e..3af8f7624 100644 --- a/libm/arm/s_floor.S +++ b/libm/arm/s_floor.S @@ -136,7 +136,4 @@ ENTRY(floor) /* x in r0, r1 */ END(floor) -#if LDBL_MANT_DIG == 53 - .weak floorl - .equ floorl,floor -#endif +ALIAS_SYMBOL(floorl, floor); diff --git a/libm/arm64/lrint.S b/libm/arm64/lrint.S index 69cc10c3e..d6427598c 100644 --- a/libm/arm64/lrint.S +++ b/libm/arm64/lrint.S @@ -29,8 +29,6 @@ ENTRY(lrintf) END(lrintf) // sizeof(long) and sizeof(long long) are the same for aarch64 -.weak llrint -.equ llrint,lrint +ALIAS_SYMBOL(llrint, lrint); -.weak llrintf -.equ llrintf,lrintf +ALIAS_SYMBOL(llrintf, lrintf); diff --git a/libm/x86/ceil.S b/libm/x86/ceil.S index b992057cc..63020378d 100644 --- a/libm/x86/ceil.S +++ b/libm/x86/ceil.S @@ -40,5 +40,4 @@ ENTRY(ceil) ret END(ceil) -.globl ceill; -.equ ceill, ceil; +ALIAS_SYMBOL(ceill, ceil); diff --git a/libm/x86/e_acos.S b/libm/x86/e_acos.S index a42948185..fa6185314 100644 --- a/libm/x86/e_acos.S +++ b/libm/x86/e_acos.S @@ -388,8 +388,7 @@ END(acos) # -- End acos # Start file scope ASM -.weak acosl -.equ acosl, acos +ALIAS_SYMBOL(acosl, acos); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_asin.S b/libm/x86/e_asin.S index 99dfb68d3..5d7f33179 100644 --- a/libm/x86/e_asin.S +++ b/libm/x86/e_asin.S @@ -466,8 +466,7 @@ END(asin) # -- End asin # Start file scope ASM -.weak asinl -.equ asinl, asin +ALIAS_SYMBOL(asinl, asin); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_atan2.S b/libm/x86/e_atan2.S index a6ad390e0..1efdf6582 100644 --- a/libm/x86/e_atan2.S +++ b/libm/x86/e_atan2.S @@ -452,8 +452,7 @@ END(atan2) # -- End atan2 # Start file scope ASM -.weak atan2l -.equ atan2l, atan2 +ALIAS_SYMBOL(atan2l, atan2); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_cosh.S b/libm/x86/e_cosh.S index 694202870..ecea8f478 100644 --- a/libm/x86/e_cosh.S +++ b/libm/x86/e_cosh.S @@ -272,8 +272,7 @@ END(cosh) # -- End cosh # Start file scope ASM -.weak coshl -.equ coshl, cosh +ALIAS_SYMBOL(coshl, cosh); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_exp.S b/libm/x86/e_exp.S index c4fbe4744..eab619d85 100644 --- a/libm/x86/e_exp.S +++ b/libm/x86/e_exp.S @@ -257,8 +257,7 @@ END(exp) # -- End exp # Start file scope ASM -.weak expl -.equ expl, exp +ALIAS_SYMBOL(expl, exp); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_hypot.S b/libm/x86/e_hypot.S index aa6ab64b8..6a143e50b 100644 --- a/libm/x86/e_hypot.S +++ b/libm/x86/e_hypot.S @@ -199,8 +199,7 @@ END(hypot) # -- End hypot # Start file scope ASM -.weak hypotl -.equ hypotl, hypot +ALIAS_SYMBOL(hypotl, hypot); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_log.S b/libm/x86/e_log.S index b5df1eaa3..a6181cac0 100644 --- a/libm/x86/e_log.S +++ b/libm/x86/e_log.S @@ -231,8 +231,7 @@ END(log) # -- End log # Start file scope ASM -.weak logl -.equ logl, log +ALIAS_SYMBOL(logl, log); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_log10.S b/libm/x86/e_log10.S index d34829cd4..09b295211 100644 --- a/libm/x86/e_log10.S +++ b/libm/x86/e_log10.S @@ -242,8 +242,7 @@ END(log10) # -- End log10 # Start file scope ASM -.weak log10l -.equ log10l, log10 +ALIAS_SYMBOL(log10l, log10); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/e_sinh.S b/libm/x86/e_sinh.S index 9d28a317b..d6b04b57d 100644 --- a/libm/x86/e_sinh.S +++ b/libm/x86/e_sinh.S @@ -324,8 +324,7 @@ END(sinh) # -- End sinh # Start file scope ASM -.weak sinhl -.equ sinhl, sinh +ALIAS_SYMBOL(sinhl, sinh); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/floor.S b/libm/x86/floor.S index 2b815f346..b859736c7 100644 --- a/libm/x86/floor.S +++ b/libm/x86/floor.S @@ -40,5 +40,4 @@ ENTRY(floor) ret END(floor) -.globl floorl; -.equ floorl, floor; +ALIAS_SYMBOL(floorl, floor); diff --git a/libm/x86/s_atan.S b/libm/x86/s_atan.S index 67d8c020f..c4413f158 100644 --- a/libm/x86/s_atan.S +++ b/libm/x86/s_atan.S @@ -245,8 +245,7 @@ END(atan) # -- End atan # Start file scope ASM -.weak atanl -.equ atanl, atan +ALIAS_SYMBOL(atanl, atan); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_cbrt.S b/libm/x86/s_cbrt.S index d065de285..0c98c9949 100644 --- a/libm/x86/s_cbrt.S +++ b/libm/x86/s_cbrt.S @@ -225,8 +225,7 @@ END(cbrt) # -- End cbrt # Start file scope ASM -.weak cbrtl -.equ cbrtl, cbrt +ALIAS_SYMBOL(cbrtl, cbrt); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_cos.S b/libm/x86/s_cos.S index 0f5d57011..fd5ef5db6 100644 --- a/libm/x86/s_cos.S +++ b/libm/x86/s_cos.S @@ -314,8 +314,7 @@ END(cos) # -- End cos # Start file scope ASM -.weak cosl -.equ cosl, cos +ALIAS_SYMBOL(cosl, cos); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_expm1.S b/libm/x86/s_expm1.S index 58819efc4..1f21cde00 100644 --- a/libm/x86/s_expm1.S +++ b/libm/x86/s_expm1.S @@ -365,8 +365,7 @@ END(expm1) # -- End expm1 # Start file scope ASM -.weak expm1l -.equ expm1l, expm1 +ALIAS_SYMBOL(exmp1l, exmp1); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_log1p.S b/libm/x86/s_log1p.S index 76fb8265e..7a6d845bd 100644 --- a/libm/x86/s_log1p.S +++ b/libm/x86/s_log1p.S @@ -266,8 +266,7 @@ END(log1p) # -- End log1p # Start file scope ASM -.weak log1pl -.equ log1pl, log1p +ALIAS_SYMBOL(log1pl, log1p); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_sin.S b/libm/x86/s_sin.S index a0578bebb..1e6cbd4aa 100644 --- a/libm/x86/s_sin.S +++ b/libm/x86/s_sin.S @@ -321,8 +321,7 @@ END(sin) # -- End sin # Start file scope ASM -.weak sinl -.equ sinl, sin +ALIAS_SYMBOL(sinl, sin); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_tan.S b/libm/x86/s_tan.S index 621c94a0f..3ee21075f 100644 --- a/libm/x86/s_tan.S +++ b/libm/x86/s_tan.S @@ -284,8 +284,7 @@ END(tan) # -- End tan # Start file scope ASM -.weak tanl -.equ tanl, tan +ALIAS_SYMBOL(tanl, tan); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/s_tanh.S b/libm/x86/s_tanh.S index 3975fa937..737bcbbd9 100644 --- a/libm/x86/s_tanh.S +++ b/libm/x86/s_tanh.S @@ -278,8 +278,7 @@ END(tanh) # -- End tanh # Start file scope ASM -.weak tanhl -.equ tanhl, tanh +ALIAS_SYMBOL(tanhl, tanh); # End file scope ASM .section .rodata, "a" .align 16 diff --git a/libm/x86/sqrt.S b/libm/x86/sqrt.S index 3e459ceaf..c9d434d2e 100644 --- a/libm/x86/sqrt.S +++ b/libm/x86/sqrt.S @@ -40,5 +40,4 @@ ENTRY(sqrt) ret END(sqrt) -.globl sqrtl; -.equ sqrtl, sqrt; +ALIAS_SYMBOL(sqrtl, sqrt); diff --git a/libm/x86/trunc.S b/libm/x86/trunc.S index 2f21e88db..da9d5fb3a 100644 --- a/libm/x86/trunc.S +++ b/libm/x86/trunc.S @@ -40,5 +40,4 @@ ENTRY(trunc) ret END(trunc) -.globl truncl; -.equ truncl, trunc; +ALIAS_SYMBOL(truncl, trunc); From 6e86146b85efe9fbab117a62bc7a5c5be1370731 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Sat, 14 Mar 2015 12:17:45 -0700 Subject: [PATCH 186/194] Fix typo in alias symbol. Change-Id: I41d2c29bd4a9ba382bbe3440541c8e1506fc5809 --- libm/x86/s_expm1.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libm/x86/s_expm1.S b/libm/x86/s_expm1.S index 1f21cde00..1f9e87b91 100644 --- a/libm/x86/s_expm1.S +++ b/libm/x86/s_expm1.S @@ -365,7 +365,7 @@ END(expm1) # -- End expm1 # Start file scope ASM -ALIAS_SYMBOL(exmp1l, exmp1); +ALIAS_SYMBOL(expm1l, expm1); # End file scope ASM .section .rodata, "a" .align 16 From d2dad2b24fb82604f9dbe7a082e630a524f1473d Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Mon, 16 Mar 2015 12:19:26 +0000 Subject: [PATCH 187/194] Revert "Moving StringPrintf to libbase." libbase has been reverted This reverts commit 7ed5fa1e4d37722a644518594bf2b0e1529c05e9. Change-Id: I5d8ff8c38ff8c9123e6cee5dc15a101a79e94b2e --- benchmarks/Android.mk | 8 ++++---- benchmarks/Benchmark.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk index e1580feb4..ae0541f12 100644 --- a/benchmarks/Android.mk +++ b/benchmarks/Android.mk @@ -42,7 +42,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) -LOCAL_STATIC_LIBRARIES := libbase +LOCAL_STATIC_LIBRARIES := libutils include $(BUILD_STATIC_LIBRARY) # Only supported on linux systems. @@ -55,7 +55,7 @@ LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) LOCAL_MULTILIB := both -LOCAL_STATIC_LIBRARIES := libbase +LOCAL_STATIC_LIBRARIES := libutils include $(BUILD_HOST_STATIC_LIBRARY) endif @@ -84,7 +84,7 @@ LOCAL_MULTILIB := both LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libbase +LOCAL_STATIC_LIBRARIES := libbenchmark libutils include $(BUILD_EXECUTABLE) # We don't build a static benchmark executable because it's not usually @@ -106,7 +106,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_LDFLAGS := -lrt LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libbase +LOCAL_STATIC_LIBRARIES := libbenchmark libutils include $(BUILD_HOST_EXECUTABLE) endif diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp index ea6000fe5..5ca1d4792 100644 --- a/benchmarks/Benchmark.cpp +++ b/benchmarks/Benchmark.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include @@ -108,7 +108,7 @@ std::string BenchmarkWithArg::GetNameStr(int arg) { template <> std::string BenchmarkWithArg::GetNameStr(double arg) { - return Name() + "/" + android::base::StringPrintf("%0.6f", arg); + return Name() + "/" + android::StringPrintf("%0.6f", arg); } template From 3e87c785434fdfed2fb00496cb391c411a426bdd Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 16 Mar 2015 10:06:29 -0700 Subject: [PATCH 188/194] Revert "Revert "Moving StringPrintf to libbase."" This reverts commit d2dad2b24fb82604f9dbe7a082e630a524f1473d. --- benchmarks/Android.mk | 8 ++++---- benchmarks/Benchmark.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk index ae0541f12..e1580feb4 100644 --- a/benchmarks/Android.mk +++ b/benchmarks/Android.mk @@ -42,7 +42,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) -LOCAL_STATIC_LIBRARIES := libutils +LOCAL_STATIC_LIBRARIES := libbase include $(BUILD_STATIC_LIBRARY) # Only supported on linux systems. @@ -55,7 +55,7 @@ LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmarklib_src_files) LOCAL_C_INCLUDES := $(benchmark_c_includes) LOCAL_MULTILIB := both -LOCAL_STATIC_LIBRARIES := libutils +LOCAL_STATIC_LIBRARIES := libbase include $(BUILD_HOST_STATIC_LIBRARY) endif @@ -84,7 +84,7 @@ LOCAL_MULTILIB := both LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libutils +LOCAL_STATIC_LIBRARIES := libbenchmark libbase include $(BUILD_EXECUTABLE) # We don't build a static benchmark executable because it's not usually @@ -106,7 +106,7 @@ LOCAL_CFLAGS := $(benchmark_cflags) LOCAL_CPPFLAGS := $(benchmark_cppflags) LOCAL_LDFLAGS := -lrt LOCAL_SRC_FILES := $(benchmark_src_files) -LOCAL_STATIC_LIBRARIES := libbenchmark libutils +LOCAL_STATIC_LIBRARIES := libbenchmark libbase include $(BUILD_HOST_EXECUTABLE) endif diff --git a/benchmarks/Benchmark.cpp b/benchmarks/Benchmark.cpp index 5ca1d4792..ea6000fe5 100644 --- a/benchmarks/Benchmark.cpp +++ b/benchmarks/Benchmark.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include @@ -108,7 +108,7 @@ std::string BenchmarkWithArg::GetNameStr(int arg) { template <> std::string BenchmarkWithArg::GetNameStr(double arg) { - return Name() + "/" + android::StringPrintf("%0.6f", arg); + return Name() + "/" + android::base::StringPrintf("%0.6f", arg); } template From 32651b8e8e453391c7aaca47cd885e94d54d0bf4 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Fri, 13 Mar 2015 20:30:00 -0700 Subject: [PATCH 189/194] Hide content of pthread_cond_t in pthread_cond_internal_t. Bug: 19249079 Change-Id: I6f55af30bcd6211ce71630c6cacbef0e1663dcee --- libc/bionic/pthread_cond.cpp | 148 ++++++++++++++++++----------------- libc/include/pthread.h | 9 ++- tests/pthread_test.cpp | 72 +++++++++++++++-- 3 files changed, 150 insertions(+), 79 deletions(-) diff --git a/libc/bionic/pthread_cond.cpp b/libc/bionic/pthread_cond.cpp index 5542c5965..cb7cf5f35 100644 --- a/libc/bionic/pthread_cond.cpp +++ b/libc/bionic/pthread_cond.cpp @@ -41,6 +41,13 @@ #include "private/bionic_time_conversions.h" #include "private/bionic_tls.h" +// XXX *technically* there is a race condition that could allow +// XXX a signal to be missed. If thread A is preempted in _wait() +// XXX after unlocking the mutex and before waiting, and if other +// XXX threads call signal or broadcast UINT_MAX/2 times (exactly), +// XXX before thread A is scheduled again and calls futex_wait(), +// XXX then the signal will be lost. + // We use one bit in pthread_condattr_t (long) values as the 'shared' flag // and one bit for the clock type (CLOCK_REALTIME is ((clockid_t) 1), and // CLOCK_MONOTONIC is ((clockid_t) 0).). The rest of the bits are a counter. @@ -57,7 +64,6 @@ #define COND_GET_CLOCK(c) (((c) & COND_CLOCK_MASK) >> 1) #define COND_SET_CLOCK(attr, c) ((attr) | (c << 1)) - int pthread_condattr_init(pthread_condattr_t* attr) { *attr = 0; *attr |= PTHREAD_PROCESS_PRIVATE; @@ -98,47 +104,50 @@ int pthread_condattr_destroy(pthread_condattr_t* attr) { return 0; } -static inline atomic_uint* COND_TO_ATOMIC_POINTER(pthread_cond_t* cond) { - static_assert(sizeof(atomic_uint) == sizeof(cond->value), - "cond->value should actually be atomic_uint in implementation."); +struct pthread_cond_internal_t { + atomic_uint state; - // We prefer casting to atomic_uint instead of declaring cond->value to be atomic_uint directly. - // Because using the second method pollutes pthread.h, and causes an error when compiling libcxx. - return reinterpret_cast(&cond->value); + bool process_shared() const { + return COND_IS_SHARED(atomic_load_explicit(&state, memory_order_relaxed)); + } + + int get_clock() const { + return COND_GET_CLOCK(atomic_load_explicit(&state, memory_order_relaxed)); + } + +#if defined(__LP64__) + char __reserved[44]; +#endif +}; + +static pthread_cond_internal_t* __get_internal_cond(pthread_cond_t* cond_interface) { + static_assert(sizeof(pthread_cond_t) == sizeof(pthread_cond_internal_t), + "pthread_cond_t should actually be pthread_cond_internal_t in implementation."); + return reinterpret_cast(cond_interface); } -// XXX *technically* there is a race condition that could allow -// XXX a signal to be missed. If thread A is preempted in _wait() -// XXX after unlocking the mutex and before waiting, and if other -// XXX threads call signal or broadcast UINT_MAX/2 times (exactly), -// XXX before thread A is scheduled again and calls futex_wait(), -// XXX then the signal will be lost. - -int pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t* attr) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - unsigned int init_value = 0; +int pthread_cond_init(pthread_cond_t* cond_interface, const pthread_condattr_t* attr) { + pthread_cond_internal_t* cond = __get_internal_cond(cond_interface); + unsigned int init_state = 0; if (attr != NULL) { - init_value = (*attr & COND_FLAGS_MASK); + init_state = (*attr & COND_FLAGS_MASK); } - atomic_init(cond_value_ptr, init_value); + atomic_init(&cond->state, init_state); return 0; } -int pthread_cond_destroy(pthread_cond_t* cond) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - atomic_store_explicit(cond_value_ptr, 0xdeadc04d, memory_order_relaxed); +int pthread_cond_destroy(pthread_cond_t* cond_interface) { + pthread_cond_internal_t* cond = __get_internal_cond(cond_interface); + atomic_store_explicit(&cond->state, 0xdeadc04d, memory_order_relaxed); return 0; } // This function is used by pthread_cond_broadcast and // pthread_cond_signal to atomically decrement the counter // then wake up thread_count threads. -static int __pthread_cond_pulse(atomic_uint* cond_value_ptr, int thread_count) { - unsigned int old_value = atomic_load_explicit(cond_value_ptr, memory_order_relaxed); - bool shared = COND_IS_SHARED(old_value); - +static int __pthread_cond_pulse(pthread_cond_internal_t* cond, int thread_count) { // We don't use a release/seq_cst fence here. Because pthread_cond_wait/signal can't be // used as a method for memory synchronization by itself. It should always be used with // pthread mutexes. Note that Spurious wakeups from pthread_cond_wait/timedwait may occur, @@ -149,20 +158,18 @@ static int __pthread_cond_pulse(atomic_uint* cond_value_ptr, int thread_count) { // synchronization. And it doesn't help even if we use any fence here. // The increase of value should leave flags alone, even if the value can overflows. - atomic_fetch_add_explicit(cond_value_ptr, COND_COUNTER_STEP, memory_order_relaxed); + atomic_fetch_add_explicit(&cond->state, COND_COUNTER_STEP, memory_order_relaxed); - __futex_wake_ex(cond_value_ptr, shared, thread_count); + __futex_wake_ex(&cond->state, cond->process_shared(), thread_count); return 0; } -__LIBC_HIDDEN__ -int __pthread_cond_timedwait_relative(atomic_uint* cond_value_ptr, pthread_mutex_t* mutex, - const timespec* reltime) { - unsigned int old_value = atomic_load_explicit(cond_value_ptr, memory_order_relaxed); - bool shared = COND_IS_SHARED(old_value); +static int __pthread_cond_timedwait_relative(pthread_cond_internal_t* cond, pthread_mutex_t* mutex, + const timespec* rel_timeout_or_null) { + unsigned int old_state = atomic_load_explicit(&cond->state, memory_order_relaxed); pthread_mutex_unlock(mutex); - int status = __futex_wait_ex(cond_value_ptr, shared, old_value, reltime); + int status = __futex_wait_ex(&cond->state, cond->process_shared(), old_state, rel_timeout_or_null); pthread_mutex_lock(mutex); if (status == -ETIMEDOUT) { @@ -171,67 +178,68 @@ int __pthread_cond_timedwait_relative(atomic_uint* cond_value_ptr, pthread_mutex return 0; } -__LIBC_HIDDEN__ -int __pthread_cond_timedwait(atomic_uint* cond_value_ptr, pthread_mutex_t* mutex, - const timespec* abs_ts, clockid_t clock) { +static int __pthread_cond_timedwait(pthread_cond_internal_t* cond, pthread_mutex_t* mutex, + const timespec* abs_timeout_or_null, clockid_t clock) { timespec ts; - timespec* tsp; + timespec* rel_timeout = NULL; - if (abs_ts != NULL) { - if (!timespec_from_absolute_timespec(ts, *abs_ts, clock)) { + if (abs_timeout_or_null != NULL) { + rel_timeout = &ts; + if (!timespec_from_absolute_timespec(*rel_timeout, *abs_timeout_or_null, clock)) { return ETIMEDOUT; } - tsp = &ts; - } else { - tsp = NULL; } - return __pthread_cond_timedwait_relative(cond_value_ptr, mutex, tsp); + return __pthread_cond_timedwait_relative(cond, mutex, rel_timeout); } -int pthread_cond_broadcast(pthread_cond_t* cond) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_pulse(cond_value_ptr, INT_MAX); +int pthread_cond_broadcast(pthread_cond_t* cond_interface) { + return __pthread_cond_pulse(__get_internal_cond(cond_interface), INT_MAX); } -int pthread_cond_signal(pthread_cond_t* cond) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_pulse(cond_value_ptr, 1); +int pthread_cond_signal(pthread_cond_t* cond_interface) { + return __pthread_cond_pulse(__get_internal_cond(cond_interface), 1); } -int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait(cond_value_ptr, mutex, NULL, - COND_GET_CLOCK(atomic_load_explicit(cond_value_ptr, memory_order_relaxed))); +int pthread_cond_wait(pthread_cond_t* cond_interface, pthread_mutex_t* mutex) { + pthread_cond_internal_t* cond = __get_internal_cond(cond_interface); + return __pthread_cond_timedwait(cond, mutex, NULL, cond->get_clock()); } -int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t * mutex, const timespec *abstime) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait(cond_value_ptr, mutex, abstime, - COND_GET_CLOCK(atomic_load_explicit(cond_value_ptr, memory_order_relaxed))); +int pthread_cond_timedwait(pthread_cond_t *cond_interface, pthread_mutex_t * mutex, + const timespec *abstime) { + + pthread_cond_internal_t* cond = __get_internal_cond(cond_interface); + return __pthread_cond_timedwait(cond, mutex, abstime, cond->get_clock()); } #if !defined(__LP64__) // TODO: this exists only for backward binary compatibility on 32 bit platforms. -extern "C" int pthread_cond_timedwait_monotonic(pthread_cond_t* cond, pthread_mutex_t* mutex, const timespec* abstime) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait(cond_value_ptr, mutex, abstime, CLOCK_MONOTONIC); +extern "C" int pthread_cond_timedwait_monotonic(pthread_cond_t* cond_interface, + pthread_mutex_t* mutex, + const timespec* abs_timeout) { + + return __pthread_cond_timedwait(__get_internal_cond(cond_interface), mutex, abs_timeout, + CLOCK_MONOTONIC); } -extern "C" int pthread_cond_timedwait_monotonic_np(pthread_cond_t* cond, pthread_mutex_t* mutex, const timespec* abstime) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait(cond_value_ptr, mutex, abstime, CLOCK_MONOTONIC); +extern "C" int pthread_cond_timedwait_monotonic_np(pthread_cond_t* cond_interface, + pthread_mutex_t* mutex, + const timespec* abs_timeout) { + return pthread_cond_timedwait_monotonic(cond_interface, mutex, abs_timeout); } -extern "C" int pthread_cond_timedwait_relative_np(pthread_cond_t* cond, pthread_mutex_t* mutex, const timespec* reltime) { - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait_relative(cond_value_ptr, mutex, reltime); +extern "C" int pthread_cond_timedwait_relative_np(pthread_cond_t* cond_interface, + pthread_mutex_t* mutex, + const timespec* rel_timeout) { + + return __pthread_cond_timedwait_relative(__get_internal_cond(cond_interface), mutex, rel_timeout); } -extern "C" int pthread_cond_timeout_np(pthread_cond_t* cond, pthread_mutex_t* mutex, unsigned ms) { +extern "C" int pthread_cond_timeout_np(pthread_cond_t* cond_interface, + pthread_mutex_t* mutex, unsigned ms) { timespec ts; timespec_from_ms(ts, ms); - atomic_uint* cond_value_ptr = COND_TO_ATOMIC_POINTER(cond); - return __pthread_cond_timedwait_relative(cond_value_ptr, mutex, &ts); + return pthread_cond_timedwait_relative_np(cond_interface, mutex, &ts); } #endif // !defined(__LP64__) diff --git a/libc/include/pthread.h b/libc/include/pthread.h index c701e30a7..b0389e84d 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -73,13 +73,14 @@ enum { }; typedef struct { - unsigned int value; -#ifdef __LP64__ - char __reserved[44]; +#if defined(__LP64__) + char __private[48]; +#else + char __private[4]; #endif } pthread_cond_t; -#define PTHREAD_COND_INITIALIZER {0 __RESERVED_INITIALIZER} +#define PTHREAD_COND_INITIALIZER { { 0 } } typedef long pthread_mutexattr_t; typedef long pthread_condattr_t; diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index c507faab9..e1bbc55cd 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -875,7 +875,7 @@ TEST(pthread, pthread_condattr_setclock) { } TEST(pthread, pthread_cond_broadcast__preserves_condattr_flags) { -#if defined(__BIONIC__) // This tests a bionic implementation detail. +#if defined(__BIONIC__) pthread_condattr_t attr; pthread_condattr_init(&attr); @@ -888,16 +888,78 @@ TEST(pthread, pthread_cond_broadcast__preserves_condattr_flags) { ASSERT_EQ(0, pthread_cond_signal(&cond_var)); ASSERT_EQ(0, pthread_cond_broadcast(&cond_var)); - attr = static_cast(cond_var.value); + attr = static_cast(*reinterpret_cast(cond_var.__private)); clockid_t clock; ASSERT_EQ(0, pthread_condattr_getclock(&attr, &clock)); ASSERT_EQ(CLOCK_MONOTONIC, clock); int pshared; ASSERT_EQ(0, pthread_condattr_getpshared(&attr, &pshared)); ASSERT_EQ(PTHREAD_PROCESS_SHARED, pshared); -#else // __BIONIC__ - GTEST_LOG_(INFO) << "This test does nothing.\n"; -#endif // __BIONIC__ +#else // !defined(__BIONIC__) + GTEST_LOG_(INFO) << "This tests a bionic implementation detail.\n"; +#endif // !defined(__BIONIC__) +} + +class pthread_CondWakeupTest : public ::testing::Test { + protected: + pthread_mutex_t mutex; + pthread_cond_t cond; + + enum Progress { + INITIALIZED, + WAITING, + SIGNALED, + FINISHED, + }; + std::atomic progress; + pthread_t thread; + + protected: + virtual void SetUp() { + ASSERT_EQ(0, pthread_mutex_init(&mutex, NULL)); + ASSERT_EQ(0, pthread_cond_init(&cond, NULL)); + progress = INITIALIZED; + ASSERT_EQ(0, + pthread_create(&thread, NULL, reinterpret_cast(WaitThreadFn), this)); + } + + virtual void TearDown() { + ASSERT_EQ(0, pthread_join(thread, NULL)); + ASSERT_EQ(FINISHED, progress); + ASSERT_EQ(0, pthread_cond_destroy(&cond)); + ASSERT_EQ(0, pthread_mutex_destroy(&mutex)); + } + + void SleepUntilProgress(Progress expected_progress) { + while (progress != expected_progress) { + usleep(5000); + } + usleep(5000); + } + + private: + static void WaitThreadFn(pthread_CondWakeupTest* test) { + ASSERT_EQ(0, pthread_mutex_lock(&test->mutex)); + test->progress = WAITING; + while (test->progress == WAITING) { + ASSERT_EQ(0, pthread_cond_wait(&test->cond, &test->mutex)); + } + ASSERT_EQ(SIGNALED, test->progress); + test->progress = FINISHED; + ASSERT_EQ(0, pthread_mutex_unlock(&test->mutex)); + } +}; + +TEST_F(pthread_CondWakeupTest, signal) { + SleepUntilProgress(WAITING); + progress = SIGNALED; + pthread_cond_signal(&cond); +} + +TEST_F(pthread_CondWakeupTest, broadcast) { + SleepUntilProgress(WAITING); + progress = SIGNALED; + pthread_cond_broadcast(&cond); } TEST(pthread, pthread_mutex_timedlock) { From 19656ce5376c95ce0deebc4d0c6af1bb8d740934 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Tue, 10 Mar 2015 17:48:27 -0700 Subject: [PATCH 190/194] General purpose memory allocator for linker. Add basic general purpose memory allocator to linker in order to enable usage of other libraries like libziparchive. Change-Id: I4a680ebb36ed5ba67c61249f81dba9f567808434 --- linker/Android.mk | 2 + linker/linker.cpp | 12 - linker/linker_allocator.cpp | 346 ++++++++++++++++++ linker/linker_allocator.h | 143 ++++++++ linker/linker_block_allocator.h | 24 +- linker/linker_memory.cpp | 38 ++ linker/tests/Android.mk | 7 +- linker/tests/linker_memory_allocator_test.cpp | 193 ++++++++++ 8 files changed, 745 insertions(+), 20 deletions(-) create mode 100644 linker/linker_allocator.cpp create mode 100644 linker/linker_allocator.h create mode 100644 linker/linker_memory.cpp create mode 100644 linker/tests/linker_memory_allocator_test.cpp diff --git a/linker/Android.mk b/linker/Android.mk index 0ab0fda4a..f78a0257c 100644 --- a/linker/Android.mk +++ b/linker/Android.mk @@ -6,9 +6,11 @@ LOCAL_SRC_FILES:= \ debugger.cpp \ dlfcn.cpp \ linker.cpp \ + linker_allocator.cpp \ linker_block_allocator.cpp \ linker_environ.cpp \ linker_libc_support.c \ + linker_memory.cpp \ linker_phdr.cpp \ rt.cpp \ diff --git a/linker/linker.cpp b/linker/linker.cpp index ea7d63761..18f8cdcb4 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -147,18 +147,6 @@ void count_relocation(RelocationKind) { uint32_t bitmask[4096]; #endif -// You shouldn't try to call memory-allocating functions in the dynamic linker. -// Guard against the most obvious ones. -#define DISALLOW_ALLOCATION(return_type, name, ...) \ - return_type name __VA_ARGS__ \ - { \ - __libc_fatal("ERROR: " #name " called from the dynamic linker!\n"); \ - } -DISALLOW_ALLOCATION(void*, malloc, (size_t u __unused)); -DISALLOW_ALLOCATION(void, free, (void* u __unused)); -DISALLOW_ALLOCATION(void*, realloc, (void* u1 __unused, size_t u2 __unused)); -DISALLOW_ALLOCATION(void*, calloc, (size_t u1 __unused, size_t u2 __unused)); - static char __linker_dl_err_buf[768]; char* linker_get_error_buffer() { diff --git a/linker/linker_allocator.cpp b/linker/linker_allocator.cpp new file mode 100644 index 000000000..1b16cf12c --- /dev/null +++ b/linker/linker_allocator.cpp @@ -0,0 +1,346 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "linker_allocator.h" +#include "linker.h" + +#include +#include + +#include +#include +#include + +#include "private/bionic_prctl.h" + +// +// LinkerMemeoryAllocator is general purpose allocator +// designed to provide the same functionality as the malloc/free/realloc +// libc functions. +// +// On alloc: +// If size is >= 1k allocator proxies malloc call directly to mmap +// If size < 1k allocator uses SmallObjectAllocator for the size +// rounded up to the nearest power of two. +// +// On free: +// +// For a pointer allocated using proxy-to-mmap allocator unmaps +// the memory. +// +// For a pointer allocated using SmallObjectAllocator it adds +// the block to free_blocks_list_. If the number of free pages reaches 2, +// SmallObjectAllocator munmaps one of the pages keeping the other one +// in reserve. + +static const char kSignature[4] = {'L', 'M', 'A', 1}; + +static const size_t kSmallObjectMaxSize = 1 << kSmallObjectMaxSizeLog2; + +// This type is used for large allocations (with size >1k) +static const uint32_t kLargeObject = 111; + +bool operator<(const small_object_page_record& one, const small_object_page_record& two) { + return one.page_addr < two.page_addr; +} + +static inline uint16_t log2(size_t number) { + uint16_t result = 0; + number--; + + while (number != 0) { + result++; + number >>= 1; + } + + return result; +} + +LinkerSmallObjectAllocator::LinkerSmallObjectAllocator() + : type_(0), name_(nullptr), block_size_(0), free_pages_cnt_(0), free_blocks_list_(nullptr) {} + +void* LinkerSmallObjectAllocator::alloc() { + if (free_blocks_list_ == nullptr) { + alloc_page(); + } + + small_object_block_record* block_record = free_blocks_list_; + if (block_record->free_blocks_cnt > 1) { + small_object_block_record* next_free = reinterpret_cast( + reinterpret_cast(block_record) + block_size_); + next_free->next = block_record->next; + next_free->free_blocks_cnt = block_record->free_blocks_cnt - 1; + free_blocks_list_ = next_free; + } else { + free_blocks_list_ = block_record->next; + } + + // bookkeeping... + auto page_record = find_page_record(block_record); + + if (page_record->allocated_blocks_cnt == 0) { + free_pages_cnt_--; + } + + page_record->free_blocks_cnt--; + page_record->allocated_blocks_cnt++; + + memset(block_record, 0, block_size_); + + return block_record; +} + +void LinkerSmallObjectAllocator::free_page(linker_vector_t::iterator page_record) { + void* page_start = reinterpret_cast(page_record->page_addr); + void* page_end = reinterpret_cast(reinterpret_cast(page_start) + PAGE_SIZE); + + while (free_blocks_list_ != nullptr && + free_blocks_list_ > page_start && + free_blocks_list_ < page_end) { + free_blocks_list_ = free_blocks_list_->next; + } + + small_object_block_record* current = free_blocks_list_; + + while (current != nullptr) { + while (current->next > page_start && current->next < page_end) { + current->next = current->next->next; + } + + current = current->next; + } + + munmap(page_start, PAGE_SIZE); + page_records_.erase(page_record); + free_pages_cnt_--; +} + +void LinkerSmallObjectAllocator::free(void* ptr) { + auto page_record = find_page_record(ptr); + + ssize_t offset = reinterpret_cast(ptr) - sizeof(page_info); + + if (offset % block_size_ != 0) { + __libc_fatal("invalid pointer: %p (block_size=%zd)", ptr, block_size_); + } + + memset(ptr, 0, block_size_); + small_object_block_record* block_record = reinterpret_cast(ptr); + + block_record->next = free_blocks_list_; + block_record->free_blocks_cnt = 1; + + free_blocks_list_ = block_record; + + page_record->free_blocks_cnt++; + page_record->allocated_blocks_cnt--; + + if (page_record->allocated_blocks_cnt == 0) { + if (free_pages_cnt_++ > 1) { + // if we already have a free page - unmap this one. + free_page(page_record); + } + } +} + +void LinkerSmallObjectAllocator::init(uint32_t type, size_t block_size, const char* name) { + type_ = type; + block_size_ = block_size; + name_ = name; +} + +linker_vector_t::iterator LinkerSmallObjectAllocator::find_page_record(void* ptr) { + void* addr = reinterpret_cast(PAGE_START(reinterpret_cast(ptr))); + small_object_page_record boundary; + boundary.page_addr = addr; + linker_vector_t::iterator it = std::lower_bound( + page_records_.begin(), page_records_.end(), boundary); + + if (it == page_records_.end() || it->page_addr != addr) { + // not found... + __libc_fatal("page record for %p was not found (block_size=%zd)", ptr, block_size_); + } + + return it; +} + +void LinkerSmallObjectAllocator::create_page_record(void* page_addr, size_t free_blocks_cnt) { + small_object_page_record record; + record.page_addr = page_addr; + record.free_blocks_cnt = free_blocks_cnt; + record.allocated_blocks_cnt = 0; + + linker_vector_t::iterator it = std::lower_bound( + page_records_.begin(), page_records_.end(), record); + page_records_.insert(it, record); +} + +void LinkerSmallObjectAllocator::alloc_page() { + void* map_ptr = mmap(nullptr, PAGE_SIZE, + PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); + if (map_ptr == MAP_FAILED) { + __libc_fatal("mmap failed"); + } + + prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, PAGE_SIZE, name_); + + memset(map_ptr, 0, PAGE_SIZE); + + page_info* info = reinterpret_cast(map_ptr); + memcpy(info->signature, kSignature, sizeof(kSignature)); + info->type = type_; + info->allocator_addr = this; + + size_t free_blocks_cnt = (PAGE_SIZE - sizeof(page_info))/block_size_; + + create_page_record(map_ptr, free_blocks_cnt); + + small_object_block_record* first_block = reinterpret_cast(info + 1); + + first_block->next = free_blocks_list_; + first_block->free_blocks_cnt = free_blocks_cnt; + + free_blocks_list_ = first_block; +} + + +LinkerMemoryAllocator::LinkerMemoryAllocator() { + static const char* allocator_names[kSmallObjectAllocatorsCount] = { + "linker_alloc_16", // 2^4 + "linker_alloc_32", // 2^5 + "linker_alloc_64", // and so on... + "linker_alloc_128", + "linker_alloc_256", + "linker_alloc_512", + "linker_alloc_1024", // 2^10 + }; + + for (size_t i = 0; i < kSmallObjectAllocatorsCount; ++i) { + uint32_t type = i + kSmallObjectMinSizeLog2; + allocators_[i].init(type, 1 << type, allocator_names[i]); + } +} + +void* LinkerMemoryAllocator::alloc_mmap(size_t size) { + size_t allocated_size = PAGE_END(size + sizeof(page_info)); + void* map_ptr = mmap(nullptr, allocated_size, + PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); + + if (map_ptr == MAP_FAILED) { + __libc_fatal("mmap failed"); + } + + prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, allocated_size, "linker_alloc_lob"); + + memset(map_ptr, 0, allocated_size); + + page_info* info = reinterpret_cast(map_ptr); + memcpy(info->signature, kSignature, sizeof(kSignature)); + info->type = kLargeObject; + info->allocated_size = allocated_size; + + return info + 1; +} + +void* LinkerMemoryAllocator::alloc(size_t size) { + // treat alloc(0) as alloc(1) + if (size == 0) { + size = 1; + } + + if (size > kSmallObjectMaxSize) { + return alloc_mmap(size); + } + + uint16_t log2_size = log2(size); + + if (log2_size < kSmallObjectMinSizeLog2) { + log2_size = kSmallObjectMinSizeLog2; + } + + return get_small_object_allocator(log2_size)->alloc(); +} + +page_info* LinkerMemoryAllocator::get_page_info(void* ptr) { + page_info* info = reinterpret_cast(PAGE_START(reinterpret_cast(ptr))); + if (memcmp(info->signature, kSignature, sizeof(kSignature)) != 0) { + __libc_fatal("invalid pointer %p (page signature mismatch)", ptr); + } + + return info; +} + +void* LinkerMemoryAllocator::realloc(void* ptr, size_t size) { + if (ptr == nullptr) { + return alloc(size); + } + + if (size == 0) { + free(ptr); + return nullptr; + } + + page_info* info = get_page_info(ptr); + + size_t old_size = 0; + + if (info->type == kLargeObject) { + old_size = info->allocated_size - sizeof(page_info); + } else { + LinkerSmallObjectAllocator* allocator = get_small_object_allocator(info->type); + if (allocator != info->allocator_addr) { + __libc_fatal("invalid pointer %p (page signature mismatch)", ptr); + } + + old_size = allocator->get_block_size(); + } + + if (old_size < size) { + void *result = alloc(size); + memcpy(result, ptr, old_size); + free(ptr); + return result; + } + + return ptr; +} + +void LinkerMemoryAllocator::free(void* ptr) { + if (ptr == nullptr) { + return; + } + + page_info* info = get_page_info(ptr); + + if (info->type == kLargeObject) { + munmap(info, info->allocated_size); + } else { + LinkerSmallObjectAllocator* allocator = get_small_object_allocator(info->type); + if (allocator != info->allocator_addr) { + __libc_fatal("invalid pointer %p (invalid allocator address for the page)", ptr); + } + + allocator->free(ptr); + } +} + +LinkerSmallObjectAllocator* LinkerMemoryAllocator::get_small_object_allocator(uint32_t type) { + if (type < kSmallObjectMinSizeLog2 || type > kSmallObjectMaxSizeLog2) { + __libc_fatal("invalid type: %u", type); + } + + return &allocators_[type - kSmallObjectMinSizeLog2]; +} diff --git a/linker/linker_allocator.h b/linker/linker_allocator.h new file mode 100644 index 000000000..2adad56fe --- /dev/null +++ b/linker/linker_allocator.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __LINKER_ALLOCATOR_H +#define __LINKER_ALLOCATOR_H + +#include +#include +#include +#include +#include + +#include + +#include "private/bionic_prctl.h" +#include "private/libc_logging.h" + +const uint32_t kSmallObjectMaxSizeLog2 = 10; +const uint32_t kSmallObjectMinSizeLog2 = 4; +const uint32_t kSmallObjectAllocatorsCount = kSmallObjectMaxSizeLog2 - kSmallObjectMinSizeLog2 + 1; + +class LinkerSmallObjectAllocator; + +// This structure is placed at the beginning of each addressable page +// and has all information we need to find the corresponding memory allocator. +struct page_info { + char signature[4]; + uint32_t type; + union { + // we use allocated_size for large objects allocator + size_t allocated_size; + // and allocator_addr for small ones. + LinkerSmallObjectAllocator* allocator_addr; + }; +}; + +struct small_object_page_record { + void* page_addr; + size_t free_blocks_cnt; + size_t allocated_blocks_cnt; +}; + +// for lower_bound... +bool operator<(const small_object_page_record& one, const small_object_page_record& two); + +struct small_object_block_record { + small_object_block_record* next; + size_t free_blocks_cnt; +}; + +// This is implementation for std::vector allocator +template +class linker_vector_allocator { + public: + typedef T value_type; + typedef T* pointer; + typedef const T* const_pointer; + typedef T& reference; + typedef const T& const_reference; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + T* allocate(size_t n, const T* hint = nullptr) { + size_t size = n * sizeof(T); + void* ptr = mmap(const_cast(hint), size, + PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0); + if (ptr == MAP_FAILED) { + // Spec says we need to throw std::bad_alloc here but because our + // code does not support exception handling anyways - we are going to abort. + __libc_fatal("mmap failed"); + } + + prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, ptr, size, "linker_alloc_vector"); + + return reinterpret_cast(ptr); + } + + void deallocate(T* ptr, size_t n) { + munmap(ptr, n * sizeof(T)); + } +}; + +typedef + std::vector> + linker_vector_t; + + +class LinkerSmallObjectAllocator { + public: + LinkerSmallObjectAllocator(); + void init(uint32_t type, size_t block_size, const char* name); + void* alloc(); + void free(void* ptr); + + size_t get_block_size() const { return block_size_; } + private: + void alloc_page(); + void free_page(linker_vector_t::iterator page_record); + linker_vector_t::iterator find_page_record(void* ptr); + void create_page_record(void* page_addr, size_t free_blocks_cnt); + + uint32_t type_; + const char* name_; + size_t block_size_; + + size_t free_pages_cnt_; + small_object_block_record* free_blocks_list_; + + // sorted vector of page records + linker_vector_t page_records_; +}; + +class LinkerMemoryAllocator { + public: + LinkerMemoryAllocator(); + void* alloc(size_t size); + + // Note that this implementation of realloc never shrinks allocation + void* realloc(void* ptr, size_t size); + void free(void* ptr); + private: + void* alloc_mmap(size_t size); + page_info* get_page_info(void* ptr); + LinkerSmallObjectAllocator* get_small_object_allocator(uint32_t type); + + LinkerSmallObjectAllocator allocators_[kSmallObjectAllocatorsCount]; +}; + + +#endif /* __LINKER_ALLOCATOR_H */ diff --git a/linker/linker_block_allocator.h b/linker/linker_block_allocator.h index 1d41806a8..4b9b99526 100644 --- a/linker/linker_block_allocator.h +++ b/linker/linker_block_allocator.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef __LINKER_ALLOCATOR_H -#define __LINKER_ALLOCATOR_H +#ifndef __LINKER_BLOCK_ALLOCATOR_H +#define __LINKER_BLOCK_ALLOCATOR_H #include #include @@ -24,11 +24,11 @@ struct LinkerBlockAllocatorPage; /* - * This class is a non-template version of the LinkerAllocator + * This class is a non-template version of the LinkerTypeAllocator * It keeps code inside .cpp file by keeping the interface * template-free. * - * Please use LinkerAllocator where possible (everywhere). + * Please use LinkerTypeAllocator where possible (everywhere). */ class LinkerBlockAllocator { public: @@ -50,11 +50,21 @@ class LinkerBlockAllocator { }; /* - * We can't use malloc(3) in the dynamic linker. - * * A simple allocator for the dynamic linker. An allocator allocates instances * of a single fixed-size type. Allocations are backed by page-sized private * anonymous mmaps. + * + * The differences between this allocator and LinkerMemoryAllocator are: + * 1. This allocator manages space more efficiently. LinkerMemoryAllocator + * operates in power-of-two sized blocks up to 1k, when this implementation + * splits the page to aligned size of structure; For example for structures + * with size 513 this allocator will use 516 (520 for lp64) bytes of data + * where generalized implementation is going to use 1024 sized blocks. + * + * 2. This allocator does not munmap allocated memory, where LinkerMemoryAllocator does. + * + * 3. This allocator provides mprotect services to the user, where LinkerMemoryAllocator + * always treats it's memory as READ|WRITE. */ template class LinkerTypeAllocator { @@ -68,4 +78,4 @@ class LinkerTypeAllocator { DISALLOW_COPY_AND_ASSIGN(LinkerTypeAllocator); }; -#endif // __LINKER_ALLOCATOR_H +#endif // __LINKER_BLOCK_ALLOCATOR_H diff --git a/linker/linker_memory.cpp b/linker/linker_memory.cpp new file mode 100644 index 000000000..1892d02ca --- /dev/null +++ b/linker/linker_memory.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "linker_allocator.h" + +#include + +static LinkerMemoryAllocator g_linker_allocator; + +void* malloc(size_t byte_count) { + return g_linker_allocator.alloc(byte_count); +} + +void* calloc(size_t item_count, size_t item_size) { + return g_linker_allocator.alloc(item_count*item_size); +} + +void* realloc(void* p, size_t byte_count) { + return g_linker_allocator.realloc(p, byte_count); +} + +void free(void* ptr) { + g_linker_allocator.free(ptr); +} + diff --git a/linker/tests/Android.mk b/linker/tests/Android.mk index 9a08bec0e..35992c53e 100644 --- a/linker/tests/Android.mk +++ b/linker/tests/Android.mk @@ -29,6 +29,11 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../libc/ LOCAL_SRC_FILES := \ linked_list_test.cpp \ linker_block_allocator_test.cpp \ - ../linker_block_allocator.cpp + ../linker_block_allocator.cpp \ + linker_memory_allocator_test.cpp \ + ../linker_allocator.cpp + +# for __libc_fatal +LOCAL_SRC_FILES += ../../libc/bionic/libc_logging.cpp include $(BUILD_NATIVE_TEST) diff --git a/linker/tests/linker_memory_allocator_test.cpp b/linker/tests/linker_memory_allocator_test.cpp new file mode 100644 index 000000000..f002a0d50 --- /dev/null +++ b/linker/tests/linker_memory_allocator_test.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include + +#include "../linker_allocator.h" + +#include + +namespace { + +/* + * this one has size below allocator cap which is 2*sizeof(void*) + */ +struct test_struct_small { + char dummy_str[5]; +}; + +struct test_struct_large { + char dummy_str[1009]; +}; + +struct test_struct_huge { + char dummy_str[73939]; +}; + +struct test_struct_512 { + char dummy_str[503]; +}; + +}; + +static size_t kPageSize = sysconf(_SC_PAGE_SIZE); + +TEST(linker_memory, test_alloc_0) { + LinkerMemoryAllocator allocator; + void* ptr = allocator.alloc(0); + ASSERT_TRUE(ptr != nullptr); + free(ptr); +} + +TEST(linker_memory, test_free_nullptr) { + LinkerMemoryAllocator allocator; + allocator.free(nullptr); +} + +TEST(linker_memory, test_realloc) { + LinkerMemoryAllocator allocator; + uint32_t* array = reinterpret_cast(allocator.alloc(512)); + const size_t array_size = 512 / sizeof(uint32_t); + + uint32_t model[1000]; + + model[0] = 1; + model[1] = 1; + + for (size_t i = 2; i < 1000; ++i) { + model[i] = model[i - 1] + model[i - 2]; + } + + memcpy(array, model, array_size); + + uint32_t* reallocated_ptr = reinterpret_cast(allocator.realloc(array, 1024)); + + ASSERT_TRUE(reallocated_ptr != nullptr); + ASSERT_TRUE(reallocated_ptr != array); + + ASSERT_TRUE(memcmp(reallocated_ptr, model, array_size) == 0); + + array = reallocated_ptr; + + memcpy(array, model, 2*array_size); + + reallocated_ptr = reinterpret_cast(allocator.realloc(array, 62)); + + ASSERT_TRUE(reallocated_ptr == array); + + reallocated_ptr = reinterpret_cast(allocator.realloc(array, 4000)); + + ASSERT_TRUE(reallocated_ptr != nullptr); + ASSERT_TRUE(reallocated_ptr != array); + + ASSERT_TRUE(memcmp(reallocated_ptr, model, array_size * 2) == 0); + + array = reallocated_ptr; + + memcpy(array, model, 4000); + + reallocated_ptr = reinterpret_cast(allocator.realloc(array, 64000)); + + ASSERT_TRUE(reallocated_ptr != nullptr); + ASSERT_TRUE(reallocated_ptr != array); + + ASSERT_TRUE(memcmp(reallocated_ptr, model, 4000) == 0); + + ASSERT_EQ(nullptr, realloc(reallocated_ptr, 0)); +} + +TEST(linker_memory, test_small_smoke) { + LinkerMemoryAllocator allocator; + + uint8_t zeros[16]; + memset(zeros, 0, sizeof(zeros)); + + test_struct_small* ptr1 = + reinterpret_cast(allocator.alloc(sizeof(test_struct_small))); + test_struct_small* ptr2 = + reinterpret_cast(allocator.alloc(sizeof(test_struct_small))); + + ASSERT_TRUE(ptr1 != nullptr); + ASSERT_TRUE(ptr2 != nullptr); + ASSERT_EQ(reinterpret_cast(ptr1)+16, reinterpret_cast(ptr2)); + ASSERT_TRUE(memcmp(ptr1, zeros, 16) == 0); + + allocator.free(ptr1); + allocator.free(ptr2); +} + +TEST(linker_memory, test_huge_smoke) { + LinkerMemoryAllocator allocator; + + // this should trigger proxy-to-mmap + test_struct_huge* ptr1 = + reinterpret_cast(allocator.alloc(sizeof(test_struct_huge))); + test_struct_huge* ptr2 = + reinterpret_cast(allocator.alloc(sizeof(test_struct_huge))); + + ASSERT_TRUE(ptr1 != nullptr); + ASSERT_TRUE(ptr2 != nullptr); + + ASSERT_TRUE( + reinterpret_cast(ptr1)/kPageSize != reinterpret_cast(ptr2)/kPageSize); + allocator.free(ptr2); + allocator.free(ptr1); +} + +TEST(linker_memory, test_large) { + LinkerMemoryAllocator allocator; + + test_struct_large* ptr1 = + reinterpret_cast(allocator.alloc(sizeof(test_struct_large))); + test_struct_large* ptr2 = + reinterpret_cast(allocator.alloc(1024)); + + ASSERT_TRUE(ptr1 != nullptr); + ASSERT_TRUE(ptr2 != nullptr); + + ASSERT_EQ(reinterpret_cast(ptr1) + 1024, reinterpret_cast(ptr2)); + + // let's allocate until we reach the next page. + size_t n = kPageSize / sizeof(test_struct_large) + 1 - 2; + test_struct_large* objects[n]; + + for (size_t i = 0; i < n; ++i) { + test_struct_large* obj_ptr = + reinterpret_cast(allocator.alloc(sizeof(test_struct_large))); + ASSERT_TRUE(obj_ptr != nullptr); + objects[i] = obj_ptr; + } + + test_struct_large* ptr_to_free = + reinterpret_cast(allocator.alloc(sizeof(test_struct_large))); + + ASSERT_TRUE(ptr_to_free != nullptr); + + allocator.free(ptr1); + + for (size_t i=0; i Date: Mon, 16 Mar 2015 13:20:23 -0700 Subject: [PATCH 191/194] Fix typo Change-Id: Ie6dad7d09873c88f6bbb2d45c2780e3b0c618bd6 --- tests/dlext_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp index 0849b2766..d832653bd 100644 --- a/tests/dlext_test.cpp +++ b/tests/dlext_test.cpp @@ -144,7 +144,7 @@ TEST_F(DlExtTest, ExtInfoUseFdWithInvalidOffset) { ASSERT_TRUE(android_data != nullptr); char lib_path[PATH_MAX]; - snprintf(lib_path, sizeof(lib_path), LIBPATH, android_data); + snprintf(lib_path, sizeof(lib_path), LIBZIPPATH, android_data); android_dlextinfo extinfo; extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET; From cb0443c0fa07e4c049f426e3041894df522732df Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 16 Mar 2015 14:15:46 -0700 Subject: [PATCH 192/194] Remove obsolete test_isolated wrapper function We already run all of our tests in isolated mode. Change-Id: I8236baa302b1026a9b4a1c33a4aa65e223771bc7 --- tests/dlfcn_test.cpp | 83 +++++++++++++++++++----------------------- tests/gtest_ex.h | 40 -------------------- tests/pthread_test.cpp | 27 ++++++-------- 3 files changed, 50 insertions(+), 100 deletions(-) delete mode 100644 tests/gtest_ex.h diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index 3b1001a8e..dfb5e54ab 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -22,7 +22,6 @@ #include #include -#include "gtest_ex.h" #include "private/ScopeGuard.h" #include @@ -376,33 +375,31 @@ TEST(dlfcn, check_unload_after_reloc) { // Test dlopens parent1 which loads and relocates libtest_two_parents_child.so // as a second step it dlopens parent2 and dlcloses parent1... - test_isolated([] { - void* handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle != nullptr) << dlerror(); + void* handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle != nullptr) << dlerror(); - void* handle2 = dlopen("libtest_two_parents_parent2.so", RTLD_NOW | RTLD_LOCAL); - ASSERT_TRUE(handle2 != nullptr) << dlerror(); + void* handle2 = dlopen("libtest_two_parents_parent2.so", RTLD_NOW | RTLD_LOCAL); + ASSERT_TRUE(handle2 != nullptr) << dlerror(); - typedef int (*fn_t) (void); - fn_t fn = reinterpret_cast(dlsym(handle2, "check_order_reloc_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); + typedef int (*fn_t) (void); + fn_t fn = reinterpret_cast(dlsym(handle2, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); - ASSERT_EQ(0, dlclose(handle)); + ASSERT_EQ(0, dlclose(handle)); - handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL | RTLD_NOLOAD); - ASSERT_TRUE(handle != nullptr); - ASSERT_EQ(0, dlclose(handle)); + handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL | RTLD_NOLOAD); + ASSERT_TRUE(handle != nullptr); + ASSERT_EQ(0, dlclose(handle)); - fn = reinterpret_cast(dlsym(handle2, "check_order_reloc_get_answer")); - ASSERT_TRUE(fn != nullptr) << dlerror(); - ASSERT_EQ(42, fn()); + fn = reinterpret_cast(dlsym(handle2, "check_order_reloc_get_answer")); + ASSERT_TRUE(fn != nullptr) << dlerror(); + ASSERT_EQ(42, fn()); - ASSERT_EQ(0, dlclose(handle2)); + ASSERT_EQ(0, dlclose(handle2)); - handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); - }); + handle = dlopen("libtest_two_parents_parent1.so", RTLD_NOW | RTLD_LOCAL | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); } extern "C" int check_order_reloc_root_get_answer_impl() { @@ -485,25 +482,23 @@ TEST(dlfcn, dlopen_check_rtld_global) { // libtest_with_dependency_loop_b.so -> libtest_with_dependency_loop_c.so -> // libtest_with_dependency_loop_a.so TEST(dlfcn, dlopen_check_loop) { - test_isolated([] { - void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr) << dlerror(); - void* f = dlsym(handle, "dlopen_test_loopy_function"); - ASSERT_TRUE(f != nullptr) << dlerror(); - EXPECT_TRUE(reinterpret_cast(f)()); - ASSERT_EQ(0, dlclose(handle)); + void* handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + void* f = dlsym(handle, "dlopen_test_loopy_function"); + ASSERT_TRUE(f != nullptr) << dlerror(); + EXPECT_TRUE(reinterpret_cast(f)()); + ASSERT_EQ(0, dlclose(handle)); - // dlopen second time to make sure that the library was unloaded correctly - handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); + // dlopen second time to make sure that the library was unloaded correctly + handle = dlopen("libtest_with_dependency_loop.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); #ifdef __BIONIC__ - // TODO: glibc returns nullptr on dlerror() here. Is it bug? - ASSERT_STREQ("dlopen failed: library \"libtest_with_dependency_loop.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); + // TODO: glibc returns nullptr on dlerror() here. Is it bug? + ASSERT_STREQ("dlopen failed: library \"libtest_with_dependency_loop.so\" wasn't loaded and RTLD_NOLOAD prevented it", dlerror()); #endif - handle = dlopen("libtest_with_dependency_a.so", RTLD_NOW | RTLD_NOLOAD); - ASSERT_TRUE(handle == nullptr); - }); + handle = dlopen("libtest_with_dependency_a.so", RTLD_NOW | RTLD_NOLOAD); + ASSERT_TRUE(handle == nullptr); } TEST(dlfcn, dlopen_nodelete) { @@ -830,15 +825,13 @@ TEST(dlfcn, dlsym_weak_func) { } TEST(dlfcn, dlopen_undefined_weak_func) { - test_isolated([] { - void* handle = dlopen("libtest_dlopen_weak_undefined_func.so", RTLD_NOW); - ASSERT_TRUE(handle != nullptr) << dlerror(); - int (*weak_func)(); - weak_func = reinterpret_cast(dlsym(handle, "use_weak_undefined_func")); - ASSERT_TRUE(weak_func != nullptr) << dlerror(); - EXPECT_EQ(6551, weak_func()); - dlclose(handle); - }); + void* handle = dlopen("libtest_dlopen_weak_undefined_func.so", RTLD_NOW); + ASSERT_TRUE(handle != nullptr) << dlerror(); + int (*weak_func)(); + weak_func = reinterpret_cast(dlsym(handle, "use_weak_undefined_func")); + ASSERT_TRUE(weak_func != nullptr) << dlerror(); + EXPECT_EQ(6551, weak_func()); + dlclose(handle); } TEST(dlfcn, dlopen_symlink) { diff --git a/tests/gtest_ex.h b/tests/gtest_ex.h deleted file mode 100644 index fe1d89434..000000000 --- a/tests/gtest_ex.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include -#include - -#include -#include -#include - -template -void test_isolated(F test) { - int pid = fork(); - ASSERT_NE(-1, pid) << strerror(errno); - - if (pid == 0) { - test(); - _exit(testing::Test::HasFailure() ? 1 : 0); - } - - int status; - ASSERT_EQ(pid, waitpid(pid, &status, 0)); - ASSERT_TRUE(WIFEXITED(status)); - ASSERT_EQ(0, WEXITSTATUS(status)) << "Forked test has failed, see above.."; -} diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index e1bbc55cd..d3b53325b 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -19,7 +19,6 @@ #include "private/ScopeGuard.h" #include "BionicDeathTest.h" #include "ScopedSignalHandler.h" -#include "gtest_ex.h" #include #include @@ -817,23 +816,21 @@ static void AtForkChild1() { g_atfork_child_calls = (g_atfork_child_calls << 4) static void AtForkChild2() { g_atfork_child_calls = (g_atfork_child_calls << 4) | 2; } TEST(pthread, pthread_atfork_smoke) { - test_isolated([] { - ASSERT_EQ(0, pthread_atfork(AtForkPrepare1, AtForkParent1, AtForkChild1)); - ASSERT_EQ(0, pthread_atfork(AtForkPrepare2, AtForkParent2, AtForkChild2)); + ASSERT_EQ(0, pthread_atfork(AtForkPrepare1, AtForkParent1, AtForkChild1)); + ASSERT_EQ(0, pthread_atfork(AtForkPrepare2, AtForkParent2, AtForkChild2)); - int pid = fork(); - ASSERT_NE(-1, pid) << strerror(errno); + int pid = fork(); + ASSERT_NE(-1, pid) << strerror(errno); - // Child and parent calls are made in the order they were registered. - if (pid == 0) { - ASSERT_EQ(0x12, g_atfork_child_calls); - _exit(0); - } - ASSERT_EQ(0x12, g_atfork_parent_calls); + // Child and parent calls are made in the order they were registered. + if (pid == 0) { + ASSERT_EQ(0x12, g_atfork_child_calls); + _exit(0); + } + ASSERT_EQ(0x12, g_atfork_parent_calls); - // Prepare calls are made in the reverse order. - ASSERT_EQ(0x21, g_atfork_prepare_calls); - }); + // Prepare calls are made in the reverse order. + ASSERT_EQ(0x21, g_atfork_prepare_calls); } TEST(pthread, pthread_attr_getscope) { From 9e6c7bc61838476d749d9bc4801777d35fd46a63 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Mon, 16 Mar 2015 14:26:53 -0700 Subject: [PATCH 193/194] Fix atomic_load on const variable in pthread_cond_t. Change-Id: I60f55a53294a09332a3fbec669ed793359d1bdf5 --- libc/bionic/pthread_cond.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/bionic/pthread_cond.cpp b/libc/bionic/pthread_cond.cpp index cb7cf5f35..95a433c11 100644 --- a/libc/bionic/pthread_cond.cpp +++ b/libc/bionic/pthread_cond.cpp @@ -107,11 +107,11 @@ int pthread_condattr_destroy(pthread_condattr_t* attr) { struct pthread_cond_internal_t { atomic_uint state; - bool process_shared() const { + bool process_shared() { return COND_IS_SHARED(atomic_load_explicit(&state, memory_order_relaxed)); } - int get_clock() const { + int get_clock() { return COND_GET_CLOCK(atomic_load_explicit(&state, memory_order_relaxed)); } From eb8b122d67db501729ecde4fcb960336c87af4ce Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Mon, 16 Mar 2015 16:21:08 -0700 Subject: [PATCH 194/194] Add alignment to opaque types. If there is no alignment forced, then the compiler might put these structures at any alignment. Change-Id: I6416db72433504e0ec1178bfae6f5b18b6e363fb --- libc/include/pthread.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/include/pthread.h b/libc/include/pthread.h index b0389e84d..38282adb1 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -78,7 +78,7 @@ typedef struct { #else char __private[4]; #endif -} pthread_cond_t; +} pthread_cond_t __attribute__((aligned(8))); #define PTHREAD_COND_INITIALIZER { { 0 } } @@ -93,7 +93,7 @@ typedef struct { #else char __private[40]; #endif -} pthread_rwlock_t; +} pthread_rwlock_t __attribute__((aligned(8))); #define PTHREAD_RWLOCK_INITIALIZER { { 0 } }