Merge "Test for ns_parserr() and got a heap-buffer-overflow"
diff --git a/android-changes-for-ndk-developers.md b/android-changes-for-ndk-developers.md
index 4bd97a0..84456f9 100644
--- a/android-changes-for-ndk-developers.md
+++ b/android-changes-for-ndk-developers.md
@@ -1,8 +1,11 @@
-# Android changes for NDK developers
+# Android linker changes for NDK developers
This document details important changes related to native code
loading in various Android releases.
+See also [bionic status](docs/status.md) for general libc/libm/libdl
+behavior changes.
+
Required tools: the NDK has an _arch_-linux-android-readelf binary
(e.g. arm-linux-androideabi-readelf or i686-linux-android-readelf)
for each architecture (under toolchains/), but you can use readelf for
@@ -46,6 +49,10 @@
[ReLinker](https://github.com/KeepSafe/ReLinker) which claims to solve
these problems automatically.
+Alternatively, if you don't have too many dependencies, it can be easiest to
+simply link all of your code into one big library and sidestep the details of
+library and symbol lookup changes on all past (and future) Android versions.
+
## Changes to library search order
We have made various fixes to library search order when resolving symbols.
diff --git a/docs/native_allocator.md b/docs/native_allocator.md
index 97c3648..82a98fe 100644
--- a/docs/native_allocator.md
+++ b/docs/native_allocator.md
@@ -10,7 +10,7 @@
It is important to note that there are two modes for a native allocator
to run in on Android. The first is the normal allocator, the second is
called the svelte config, which is designed to run on memory constrained
-systems and be a bit slower, but take less PSS. To enable the svelte config,
+systems and be a bit slower, but take less RSS. To enable the svelte config,
add this line to the `BoardConfig.mk` for the given target:
MALLOC_SVELTE := true
@@ -55,7 +55,7 @@
When set to zero, `mallopt(M_DECAY_TIME, 0)`, it is expected that an
allocator will attempt to purge and release any unused memory back to the
kernel on free calls. This is important in Android to avoid consuming extra
-PSS.
+RSS.
When set to non-zero, `mallopt(M_DECAY_TIME, 1)`, an allocator can delay the
purge and release action. The amount of delay is up to the allocator
@@ -65,13 +65,13 @@
The drawback to this option is that most allocators do not have a separate
thread to handle the purge, so the decay is only handled when an
allocation operation occurs. For server processes, this can mean that
-PSS is slightly higher when the server is waiting for the next connection
+RSS is slightly higher when the server is waiting for the next connection
and no other allocation calls are made. The `M_PURGE` option is used to
force a purge in this case.
For all applications on Android, the call `mallopt(M_DECAY_TIME, 1)` is
made by default. The idea is that it allows application frees to run a
-bit faster, while only increasing PSS a bit.
+bit faster, while only increasing RSS a bit.
#### M\_PURGE
When called, `mallopt(M_PURGE, 0)`, an allocator should purge and release
@@ -115,7 +115,7 @@
## Performance
There are multiple different ways to evaluate the performance of a native
allocator on Android. One is allocation speed in various different scenarios,
-anoher is total PSS taken by the allocator.
+another is total RSS taken by the allocator.
The last is virtual address space consumed in 32 bit applications. There is
a limited amount of address space available in 32 bit apps, and there have
@@ -129,7 +129,7 @@
mmma -j bionic/benchmarks
These benchmarks are only used to verify the speed of the allocator and
-ignore anything related to PSS and virtual address space consumed.
+ignore anything related to RSS and virtual address space consumed.
#### Allocate/Free Benchmarks
These are the benchmarks to verify the allocation speed of a loop doing a
@@ -228,7 +228,7 @@
These numbers should be as performant as the current allocator.
### Memory Trace Benchmarks
-These benchmarks measure all three axes of a native allocator, PSS, virtual
+These benchmarks measure all three axes of a native allocator, RSS, virtual
address space consumed, speed of allocation. They are designed to
run on a trace of the allocations from a real world application or system
process.
@@ -248,7 +248,7 @@
/data/benchmarktest/trace_benchmark/trace_benchmark
#### Memory Replay Benchmarks
-These benchmarks display PSS, virtual memory consumed (VA space), and do a
+These benchmarks display RSS, virtual memory consumed (VA space), and do a
bit of performance testing on actual traces taken from running applications.
The trace data includes what thread does each operation, so the replay
@@ -266,21 +266,21 @@
To run these benchmarks, first copy the trace files to the target and
unzip them using these commands:
- adb shell push system/extras/dumps /data/local/tmp
- adb shell 'cd /data/local/tmp/dumps && for name in *.zip; do unzip $name; done'
+ adb shell push system/extras/traces /data/local/tmp
+ adb shell 'cd /data/local/tmp/traces && for name in *.zip; do unzip $name; done'
Since all of the traces come from applications, the `memory_replay` program
will always call `mallopt(M_DECAY_TIME, 1)' before running the trace.
Run the benchmark thusly:
- adb shell memory_replay64 /data/local/tmp/dumps/XXX.txt
- adb shell memory_replay32 /data/local/tmp/dumps/XXX.txt
+ adb shell memory_replay64 /data/local/tmp/traces/XXX.txt
+ adb shell memory_replay32 /data/local/tmp/traces/XXX.txt
Where XXX.txt is the name of a trace file.
-Every 100000 allocation operations, a dump of the PSS and VA space will be
-performed. At the end, a final PSS and VA space number will be printed.
+Every 100000 allocation operations, a dump of the RSS and VA space will be
+performed. At the end, a final RSS and VA space number will be printed.
For the most part, the intermediate data can be ignored, but it is always
a good idea to look over the data to verify that no strange spikes are
occurring.
@@ -304,6 +304,14 @@
executable, the virtual address space consumed is not much larger than the
current allocator. A small increase (on the order of a few MBs) would be okay.
+There is no specific benchmark for memory fragmentation, instead, the RSS
+when running the memory traces acts as a proxy for this. An allocator that
+is fragmenting badly will show an increase in RSS. The best trace for
+tracking fragmentation is system\_server.txt which is an extremely long
+trace (~13 million operations). The total number of live allocations goes
+up and down a bit, but stays mostly the same so an allocator that fragments
+badly would likely show an abnormal increase in RSS on this trace.
+
NOTE: When a native allocator calls mmap, it is expected that the allocator
will name the map using the call:
diff --git a/docs/status.md b/docs/status.md
index 5c2f2e8..6968a18 100644
--- a/docs/status.md
+++ b/docs/status.md
@@ -1,5 +1,11 @@
# Android bionic status
+This document details libc/libm/libdl additions and behavior changes.
+
+See also
+[Android linker changes for NDK developers](../android-changes-for-ndk-developers.md)
+for changes related to native code loading in various Android releases.
+
## Bionic function availability
### POSIX
@@ -39,6 +45,9 @@
New libc functions in R (API level 30):
* Full C11 `<threads.h>` (available as inlines for older API levels).
+ * `memfd_create` and `mlock2` (GNU extensions).
+ * `renameat2` (GNU extension).
+ * `pthread_cond_clockwait`/`pthread_mutex_clocklock`/`pthread_rwlock_clockrdlock`/`pthread_rwlock_clockwrlock`/`sem_clockwait`
New libc functions in Q (API level 29):
* `timespec_get` (C11 `<time.h>` addition)
diff --git a/libc/Android.bp b/libc/Android.bp
index 71d4d4a..e505c67 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -1133,7 +1133,6 @@
"bionic/sigprocmask.cpp",
"bionic/spawn.cpp",
"bionic/stat.cpp",
- "bionic/statvfs.cpp",
"bionic/stdlib_l.cpp",
"bionic/strchrnul.cpp",
"bionic/strerror.cpp",
@@ -1150,6 +1149,8 @@
"bionic/sys_sem.cpp",
"bionic/sys_shm.cpp",
"bionic/sys_signalfd.cpp",
+ "bionic/sys_statfs.cpp",
+ "bionic/sys_statvfs.cpp",
"bionic/sys_time.cpp",
"bionic/sysinfo.cpp",
"bionic/syslog.cpp",
diff --git a/libc/SECCOMP_WHITELIST_COMMON.TXT b/libc/SECCOMP_WHITELIST_COMMON.TXT
index 43e7d1c..07f84a8 100644
--- a/libc/SECCOMP_WHITELIST_COMMON.TXT
+++ b/libc/SECCOMP_WHITELIST_COMMON.TXT
@@ -64,21 +64,45 @@
int stat64:stat64(const char*, struct stat64*) arm,x86
ssize_t readlink:readlink(const char*, char*, size_t) arm,x86,x86_64
-# Probed for and conditionally used by ART.
-int membarrier(int cmd, int flags) all
-
+#
# Useful new syscalls which we don't yet use in bionic.
-int sched_getattr(pid_t pid, struct sched_attr* attr, unsigned int flags) all
-int sched_setattr(pid_t pid, struct sched_attr* attr, unsigned int size, unsigned int flags) all
-int memfd_create(const char* name, unsigned int flags) all
-int renameat2(int olddirfd, const char* oldpath, int newdirfd, const char* newpath, unsigned int flags) all
-int execveat(int dirfd, const char* pathname, char* const* argv, char* const* envp, int flags) all
-ssize_t copy_file_range(int fd_in, loff_t* off_in, int fd_out, loff_t* off_out, size_t len, unsigned int flags) all
-int mlock2(const void* addr, size_t len, int flags) all
-ssize_t preadv2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
-ssize_t pwritev2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
+#
+
+# Since Linux 2.5, not in glibc.
int io_setup(unsigned nr, aio_context_t *ctxp) all
int io_destroy(aio_context_t ctx) all
int io_submit(aio_context_t ctx, long nr, struct iocb **iocbpp) all
int io_getevents(aio_context_t ctx, long min_nr, long max_nr, struct io_event *events, struct timespec *timeout) all
int io_cancel(aio_context_t ctx, struct iocb *, struct io_event *result) all
+# Since Linux 3.14, not in glibc.
+int sched_getattr(pid_t pid, struct sched_attr* attr, unsigned int flags) all
+int sched_setattr(pid_t pid, struct sched_attr* attr, unsigned int size, unsigned int flags) all
+# Since Linux 3.19, not in glibc (and not really needed to implement fexecve).
+int execveat(int dirfd, const char* pathname, char* const* argv, char* const* envp, int flags) all
+# Since Linux 4.3, not in glibc. Probed for and conditionally used by ART.
+int membarrier(int cmd, int flags) all
+# Since Linux 4.5, glibc 2.27.
+ssize_t copy_file_range(int fd_in, loff_t* off_in, int fd_out, loff_t* off_out, size_t len, unsigned int flags) all
+# Since Linux 4.6, glibc 2.26.
+ssize_t preadv2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
+ssize_t pwritev2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
+# Since Linux 4.11, glibc 2.30.
+int statx(int, const char*, int, unsigned int, statx*) all
+# Since Linux 5.1, not in glibc.
+int clock_gettime64(clockid_t, timespec64*) lp32
+int clock_settime64(clockid_t, const timespec64*) lp32
+int clock_adjtime64(clockid_t, timex64*) lp32
+int clock_getres_time64(clockid_t, timespec64*) lp32
+int clock_nanosleep_time64(clockid_t, int, const timespec64*, timespec*) lp32
+int timer_gettime64(__kernel_timer_t, itimerspec64*) lp32
+int timer_settime64(__kernel_timer_t, int, const itimerspec64*, itimerspec64*) lp32
+int timerfd_gettime64(int, itimerspec64*) lp32
+int timerfd_settime64(int, int, const itimerspec64*, itimerspec64*) lp32
+int utimensat_time64(int, const char*, const timespec64[2], int) lp32
+int pselect6_time64(int, fd_set*, fd_set*, timespec64*, void*) lp32
+int ppoll_time64(pollfd*, unsigned int, timespec64*, const sigset64_t*, size_t) lp32
+int recvmmsg_time64(int, mmsghdr*, unsigned int, int, const timespec64*) lp32
+int semtimedop_time64(int, sembuf*, size_t, const timespec64*) lp32
+int rt_sigtimedwait_time64(const sigset64_t*, siginfo_t*, const timespec64*, size_t) lp32
+int futex_time64(int*, int, int, const timespec64*, int*, int) lp32
+int sched_rr_get_interval_time64(pid_t, timespec64*) lp32
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT
index 99bdc93..21ebdbd 100644
--- a/libc/SYSCALLS.TXT
+++ b/libc/SYSCALLS.TXT
@@ -107,12 +107,14 @@
int __close:close(int) all
pid_t __getpid:getpid() all
+int memfd_create(const char*, unsigned) all
int munmap(void*, size_t) all
void* __mremap:mremap(void*, size_t, size_t, int, void*) all
int msync(const void*, size_t, int) all
int mprotect(const void*, size_t, int) all
int madvise(void*, size_t, int) all
-int mlock(const void* addr, size_t len) all
+int mlock(const void* addr, size_t len) all
+int mlock2(const void* addr, size_t len, int flags) all
int munlock(const void* addr, size_t len) all
int mlockall(int flags) all
int munlockall() all
@@ -151,6 +153,7 @@
int mknodat(int, const char*, mode_t, dev_t) all
int readlinkat(int, const char*, char*, size_t) all
int renameat(int, const char*, int, const char*) all
+int renameat2(int, const char*, int, const char*, unsigned) all
int symlinkat(const char*, int, const char*) all
int unlinkat(int, const char*, int) all
int utimensat(int, const char*, const struct timespec times[2], int) all
diff --git a/libc/arch-common/bionic/__dso_handle_so.h b/libc/arch-common/bionic/__dso_handle_so.h
index e2c26b6..2c0df7b 100644
--- a/libc/arch-common/bionic/__dso_handle_so.h
+++ b/libc/arch-common/bionic/__dso_handle_so.h
@@ -26,4 +26,14 @@
* SUCH DAMAGE.
*/
-__attribute__((__visibility__("hidden"))) void* __dso_handle = &__dso_handle;
+/*
+ * We would like __dso_handle to be:
+ * 1. A const so that if a DSO does not have any RW data, .data section can
+ * be omitted.
+ * 2. Of type void* so that no awkward type conversion is needed when
+ * &__dso_handle is passed to various functions, which all expect a void*.
+ * To achieve both, we do the following aliasing trick.
+ */
+static const void* const __dso_handle_const = &__dso_handle_const;
+__attribute__((__visibility__("hidden")))
+__attribute__((alias("__dso_handle_const"))) extern void* __dso_handle;
diff --git a/libc/bionic/__cxa_guard.cpp b/libc/bionic/__cxa_guard.cpp
index 30b5f41..e2e7477 100644
--- a/libc/bionic/__cxa_guard.cpp
+++ b/libc/bionic/__cxa_guard.cpp
@@ -16,9 +16,7 @@
#include <endian.h>
#include <limits.h>
-#undef _USING_LIBCXX // Prevent using of <atomic>.
#include <stdatomic.h>
-
#include <stddef.h>
#include "private/bionic_futex.h"
diff --git a/libc/bionic/dl_iterate_phdr_static.cpp b/libc/bionic/dl_iterate_phdr_static.cpp
index bbce1fc..7b44810 100644
--- a/libc/bionic/dl_iterate_phdr_static.cpp
+++ b/libc/bionic/dl_iterate_phdr_static.cpp
@@ -32,6 +32,10 @@
#include <sys/types.h>
#include <link.h>
+#include "private/bionic_elf_tls.h"
+#include "private/bionic_globals.h"
+#include "pthread_internal.h"
+
/* ld provides this to us in the default link script */
extern "C" void* __executable_start;
@@ -52,6 +56,21 @@
exe_info.dlpi_name = NULL;
exe_info.dlpi_phdr = reinterpret_cast<ElfW(Phdr)*>(reinterpret_cast<uintptr_t>(ehdr) + ehdr->e_phoff);
exe_info.dlpi_phnum = ehdr->e_phnum;
+ exe_info.dlpi_adds = 0;
+ exe_info.dlpi_subs = 0;
+
+ const TlsModules& tls_modules = __libc_shared_globals()->tls_modules;
+ if (tls_modules.module_count == 0) {
+ exe_info.dlpi_tls_modid = 0;
+ exe_info.dlpi_tls_data = nullptr;
+ } else {
+ const size_t kExeModuleId = 1;
+ const StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+ const TlsModule& tls_module = tls_modules.module_table[__tls_module_id_to_idx(kExeModuleId)];
+ char* static_tls = reinterpret_cast<char*>(__get_bionic_tcb()) - layout.offset_bionic_tcb();
+ exe_info.dlpi_tls_modid = kExeModuleId;
+ exe_info.dlpi_tls_data = static_tls + tls_module.static_offset;
+ }
// Try the executable first.
int rc = cb(&exe_info, sizeof(exe_info), data);
@@ -71,6 +90,10 @@
vdso_info.dlpi_name = NULL;
vdso_info.dlpi_phdr = reinterpret_cast<ElfW(Phdr)*>(reinterpret_cast<char*>(ehdr_vdso) + ehdr_vdso->e_phoff);
vdso_info.dlpi_phnum = ehdr_vdso->e_phnum;
+ vdso_info.dlpi_adds = 0;
+ vdso_info.dlpi_subs = 0;
+ vdso_info.dlpi_tls_modid = 0;
+ vdso_info.dlpi_tls_data = nullptr;
for (size_t i = 0; i < vdso_info.dlpi_phnum; ++i) {
if (vdso_info.dlpi_phdr[i].p_type == PT_LOAD) {
vdso_info.dlpi_addr = (ElfW(Addr)) ehdr_vdso - vdso_info.dlpi_phdr[i].p_vaddr;
diff --git a/libc/bionic/fdsan.cpp b/libc/bionic/fdsan.cpp
index dd3a96e..4ebc796 100644
--- a/libc/bionic/fdsan.cpp
+++ b/libc/bionic/fdsan.cpp
@@ -106,30 +106,8 @@
}
void __libc_init_fdsan() {
- constexpr auto default_level = ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE;
- const prop_info* pi = __system_property_find(kFdsanPropertyName);
- if (!pi) {
- android_fdsan_set_error_level(default_level);
- return;
- }
- __system_property_read_callback(
- pi,
- [](void*, const char*, const char* value, uint32_t) {
- if (strcasecmp(value, "1") == 0 || strcasecmp(value, "fatal") == 0) {
- android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
- } else if (strcasecmp(value, "warn") == 0) {
- android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS);
- } else if (strcasecmp(value, "warn_once") == 0) {
- android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
- } else {
- if (strlen(value) != 0 && strcasecmp(value, "0") != 0) {
- async_safe_format_log(ANDROID_LOG_ERROR, "libc",
- "debug.fdsan set to unknown value '%s', disabling", value);
- }
- android_fdsan_set_error_level(default_level);
- }
- },
- nullptr);
+ constexpr auto default_level = ANDROID_FDSAN_ERROR_LEVEL_FATAL;
+ android_fdsan_set_error_level_from_property(default_level);
}
static FdTable& GetFdTable() {
@@ -355,6 +333,45 @@
return atomic_exchange(&GetFdTable().error_level, new_level);
}
+android_fdsan_error_level android_fdsan_set_error_level_from_property(
+ android_fdsan_error_level default_level) {
+ const prop_info* pi = __system_property_find(kFdsanPropertyName);
+ if (!pi) {
+ return android_fdsan_set_error_level(default_level);
+ }
+
+ struct callback_data {
+ android_fdsan_error_level default_value;
+ android_fdsan_error_level result;
+ };
+
+ callback_data data;
+ data.default_value = default_level;
+
+ __system_property_read_callback(
+ pi,
+ [](void* arg, const char*, const char* value, uint32_t) {
+ callback_data* data = static_cast<callback_data*>(arg);
+
+ if (strcasecmp(value, "1") == 0 || strcasecmp(value, "fatal") == 0) {
+ data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
+ } else if (strcasecmp(value, "warn") == 0) {
+ data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS);
+ } else if (strcasecmp(value, "warn_once") == 0) {
+ data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
+ } else {
+ if (strlen(value) != 0 && strcasecmp(value, "0") != 0) {
+ async_safe_format_log(ANDROID_LOG_ERROR, "libc",
+ "debug.fdsan set to unknown value '%s', disabling", value);
+ }
+ data->result = android_fdsan_set_error_level(data->default_value);
+ }
+ },
+ &data);
+
+ return data.result;
+}
+
int close(int fd) {
int rc = android_fdsan_close_with_tag(fd, 0);
if (rc == -1 && errno == EINTR) {
diff --git a/libc/bionic/fortify.cpp b/libc/bionic/fortify.cpp
index cf37666..3b804b0 100644
--- a/libc/bionic/fortify.cpp
+++ b/libc/bionic/fortify.cpp
@@ -249,7 +249,7 @@
// This is a variant of __stpncpy_chk, but it also checks to make
// sure we don't read beyond the end of "src". The code for this is
// based on the original version of stpncpy, but modified to check
-// how much we read from "src" at the end of the copy operation.
+// how much we read from "src" during the copy operation.
char* __stpncpy_chk2(char* dst, const char* src, size_t n, size_t dst_len, size_t src_len) {
__check_buffer_access("stpncpy", "write into", n, dst_len);
if (n != 0) {
@@ -257,6 +257,11 @@
const char* s = src;
do {
+ size_t s_copy_len = static_cast<size_t>(s - src);
+ if (__predict_false(s_copy_len >= src_len)) {
+ __fortify_fatal("stpncpy: detected read past end of %zu-byte buffer", src_len);
+ }
+
if ((*d++ = *s++) == 0) {
// NUL pad the remaining n-1 bytes.
while (--n != 0) {
@@ -265,11 +270,6 @@
break;
}
} while (--n != 0);
-
- size_t s_copy_len = static_cast<size_t>(s - src);
- if (__predict_false(s_copy_len > src_len)) {
- __fortify_fatal("stpncpy: detected read past end of %zu-byte buffer", src_len);
- }
}
return dst;
@@ -360,7 +360,7 @@
// This is a variant of __strncpy_chk, but it also checks to make
// sure we don't read beyond the end of "src". The code for this is
// based on the original version of strncpy, but modified to check
-// how much we read from "src" at the end of the copy operation.
+// how much we read from "src" during the copy operation.
char* __strncpy_chk2(char* dst, const char* src, size_t n, size_t dst_len, size_t src_len) {
__check_buffer_access("strncpy", "write into", n, dst_len);
if (n != 0) {
@@ -368,6 +368,11 @@
const char* s = src;
do {
+ size_t s_copy_len = static_cast<size_t>(s - src);
+ if (__predict_false(s_copy_len >= src_len)) {
+ __fortify_fatal("strncpy: detected read past end of %zu-byte buffer", src_len);
+ }
+
if ((*d++ = *s++) == 0) {
// NUL pad the remaining n-1 bytes.
while (--n != 0) {
@@ -376,11 +381,6 @@
break;
}
} while (--n != 0);
-
- size_t s_copy_len = static_cast<size_t>(s - src);
- if (__predict_false(s_copy_len > src_len)) {
- __fortify_fatal("strncpy: detected read past end of %zu-byte buffer", src_len);
- }
}
return dst;
diff --git a/libc/bionic/libc_init_dynamic.cpp b/libc/bionic/libc_init_dynamic.cpp
index 4f3b4f7..d6d5552 100644
--- a/libc/bionic/libc_init_dynamic.cpp
+++ b/libc/bionic/libc_init_dynamic.cpp
@@ -69,6 +69,13 @@
__LIBC_HIDDEN__ void* __libc_sysinfo = reinterpret_cast<void*>(__libc_int0x80);
#endif
+extern "C" __attribute__((weak)) void __hwasan_library_loaded(ElfW(Addr) base,
+ const ElfW(Phdr)* phdr,
+ ElfW(Half) phnum);
+extern "C" __attribute__((weak)) void __hwasan_library_unloaded(ElfW(Addr) base,
+ const ElfW(Phdr)* phdr,
+ ElfW(Half) phnum);
+
// We need a helper function for __libc_preinit because compiling with LTO may
// inline functions requiring a stack protector check, but __stack_chk_guard is
// not initialized at the start of __libc_preinit. __libc_preinit_impl will run
@@ -91,6 +98,14 @@
// Hooks for various libraries to let them know that we're starting up.
__libc_globals.mutate(__libc_init_malloc);
+
+#if __has_feature(hwaddress_sanitizer)
+ // Notify the HWASan runtime library whenever a library is loaded or unloaded
+ // so that it can update its shadow memory.
+ __libc_shared_globals()->load_hook = __hwasan_library_loaded;
+ __libc_shared_globals()->unload_hook = __hwasan_library_unloaded;
+#endif
+
netdClientInit();
}
diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp
index f0a7026..2c3299f 100644
--- a/libc/bionic/ndk_cruft.cpp
+++ b/libc/bionic/ndk_cruft.cpp
@@ -243,23 +243,15 @@
return signal(signum, handler);
}
-// bcopy/bzero were previously `#define`d, so we only have `static` wrappers in
-// Bionic headers. Since we have header definitions, we need some way to
-// overload these implementations; __never_call will ensure that any calls to
-// bcopy/bzero call the in-header implementation. Since the implementations
-// should end up functionally identical, it doesn't matter which we actually
-// call.
-#define __never_call __attribute__((enable_if(false, "never selected")))
-
// This was removed from POSIX 2008.
-void bcopy(const void* src, void* dst, size_t n) __never_call __RENAME(bcopy);
-void bcopy(const void* src, void* dst, size_t n) __never_call {
+#undef bcopy
+void bcopy(const void* src, void* dst, size_t n) {
memmove(dst, src, n);
}
// This was removed from POSIX 2008.
-void bzero(void* dst, size_t n) __never_call __RENAME(bzero);
-void bzero(void* dst, size_t n) __never_call {
+#undef bzero
+void bzero(void* dst, size_t n) {
memset(dst, 0, n);
}
diff --git a/libc/bionic/statvfs.cpp b/libc/bionic/statvfs.cpp
deleted file mode 100644
index cd825eb..0000000
--- a/libc/bionic/statvfs.cpp
+++ /dev/null
@@ -1,91 +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.
- */
-
-#include <sys/statvfs.h>
-
-#include <sys/statfs.h>
-
-// Paper over the fact that 32-bit kernels use fstatfs64/statfs64 with an extra argument,
-// but 64-bit kernels don't have the "64" bit suffix or the extra size_t argument.
-#if defined(__LP64__)
-extern "C" int __fstatfs(int, struct statfs*);
-extern "C" int __statfs(const char*, struct statfs*);
-# define __fstatfs64(fd,size,buf) __fstatfs(fd,buf)
-# define __statfs64(path,size,buf) __statfs(path,buf)
-#else
-extern "C" int __fstatfs64(int, size_t, struct statfs*);
-extern "C" int __statfs64(const char*, size_t, struct statfs*);
-#endif
-
-// The kernel sets a private ST_VALID flag to signal to the C library whether the
-// f_flags field is valid. This flag should not be exposed to users of the C library.
-#define ST_VALID 0x0020
-
-static void __statfs_to_statvfs(const struct statfs& in, struct statvfs* out) {
- out->f_bsize = in.f_bsize;
- out->f_frsize = in.f_frsize;
- out->f_blocks = in.f_blocks;
- out->f_bfree = in.f_bfree;
- out->f_bavail = in.f_bavail;
- out->f_files = in.f_files;
- out->f_ffree = in.f_ffree;
- out->f_favail = in.f_ffree;
- out->f_fsid = in.f_fsid.__val[0] | (static_cast<uint64_t>(in.f_fsid.__val[1]) << 32);
- out->f_flag = in.f_flags;
- out->f_namemax = in.f_namelen;
-}
-
-int fstatfs(int fd, struct statfs* result) {
- int rc = __fstatfs64(fd, sizeof(*result), result);
- if (rc != 0) {
- return rc;
- }
- result->f_flags &= ~ST_VALID;
- return 0;
-}
-__strong_alias(fstatfs64, fstatfs);
-
-int statfs(const char* path, struct statfs* result) {
- int rc = __statfs64(path, sizeof(*result), result);
- if (rc != 0) {
- return rc;
- }
- result->f_flags &= ~ST_VALID;
- return 0;
-}
-__strong_alias(statfs64, statfs);
-
-int statvfs(const char* path, struct statvfs* result) {
- struct statfs tmp;
- int rc = statfs(path, &tmp);
- if (rc != 0) {
- return rc;
- }
- __statfs_to_statvfs(tmp, result);
- return 0;
-}
-__strong_alias(statvfs64, statvfs);
-
-int fstatvfs(int fd, struct statvfs* result) {
- struct statfs tmp;
- int rc = fstatfs(fd, &tmp);
- if (rc != 0) {
- return rc;
- }
- __statfs_to_statvfs(tmp, result);
- return 0;
-}
-__strong_alias(fstatvfs64, fstatvfs);
diff --git a/libc/bionic/sys_statfs.cpp b/libc/bionic/sys_statfs.cpp
new file mode 100644
index 0000000..d78de2d
--- /dev/null
+++ b/libc/bionic/sys_statfs.cpp
@@ -0,0 +1,55 @@
+/*
+ * 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 <sys/statfs.h>
+
+// Paper over the fact that 32-bit kernels use fstatfs64/statfs64 with
+// an extra argument, but 64-bit kernels don't have the "64" bit suffix or
+// the extra size_t argument.
+#if defined(__LP64__)
+extern "C" int __fstatfs(int, struct statfs*);
+extern "C" int __statfs(const char*, struct statfs*);
+# define __fstatfs64(fd,size,buf) __fstatfs(fd,buf)
+# define __statfs64(path,size,buf) __statfs(path,buf)
+#else
+extern "C" int __fstatfs64(int, size_t, struct statfs*);
+extern "C" int __statfs64(const char*, size_t, struct statfs*);
+#endif
+
+// The kernel sets a private ST_VALID flag to signal to the C library
+// whether the f_flags field is valid. This flag should not be exposed to
+// users of the C library.
+#define ST_VALID 0x0020
+
+int fstatfs(int fd, struct statfs* result) {
+ int rc = __fstatfs64(fd, sizeof(*result), result);
+ if (rc != 0) {
+ return rc;
+ }
+ result->f_flags &= ~ST_VALID;
+ return 0;
+}
+__strong_alias(fstatfs64, fstatfs);
+
+int statfs(const char* path, struct statfs* result) {
+ int rc = __statfs64(path, sizeof(*result), result);
+ if (rc != 0) {
+ return rc;
+ }
+ result->f_flags &= ~ST_VALID;
+ return 0;
+}
+__strong_alias(statfs64, statfs);
diff --git a/libc/bionic/sys_statvfs.cpp b/libc/bionic/sys_statvfs.cpp
new file mode 100644
index 0000000..ef5dc57
--- /dev/null
+++ b/libc/bionic/sys_statvfs.cpp
@@ -0,0 +1,32 @@
+/*
+ * 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 <sys/statvfs.h>
+
+// libc++ uses statvfs (for Darwin compatibility), but on Linux statvfs is
+// just another name for statfs, so it didn't arrive until API level 19. We
+// make the implementation available as inlines to support std::filesystem
+// for NDK users (see https://github.com/android-ndk/ndk/issues/609).
+
+#define __BIONIC_SYS_STATVFS_INLINE /* Out of line. */
+#define __BIONIC_NEED_STATVFS_INLINES
+#undef __BIONIC_NEED_STATVFS64_INLINES
+#include <bits/sys_statvfs_inlines.h>
+
+// Historically we provided actual symbols for statvfs64 and fstatvfs64.
+// They're not particularly useful, but we can't take them away.
+__strong_alias(statvfs64, statvfs);
+__strong_alias(fstatvfs64, fstatvfs);
diff --git a/libc/include/android/fdsan.h b/libc/include/android/fdsan.h
index 1169ed0..83b9318 100644
--- a/libc/include/android/fdsan.h
+++ b/libc/include/android/fdsan.h
@@ -197,4 +197,8 @@
*/
enum android_fdsan_error_level android_fdsan_set_error_level(enum android_fdsan_error_level new_level) __INTRODUCED_IN(29) __attribute__((__weak__));
+/*
+ * Set the error level to the global setting if available, or a default value.
+ */
+enum android_fdsan_error_level android_fdsan_set_error_level_from_property(enum android_fdsan_error_level default_level) __INTRODUCED_IN(30) __attribute__((__weak__));
__END_DECLS
diff --git a/libc/include/android/legacy_sys_statvfs_inlines.h b/libc/include/android/legacy_sys_statvfs_inlines.h
new file mode 100644
index 0000000..369e6a2
--- /dev/null
+++ b/libc/include/android/legacy_sys_statvfs_inlines.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+/**
+ * @file legacy_sys_statvfs_inlines.h
+ * @brief Inline definitions of statvfs/fstatvfs for old API levels.
+ */
+
+#include <sys/cdefs.h>
+
+#if __ANDROID_API__ < 21
+
+#define __BIONIC_NEED_STATVFS64_INLINES
+#if __ANDROID_API__ < 19
+#define __BIONIC_NEED_STATVFS_INLINES
+#endif
+
+#define __BIONIC_SYS_STATVFS_INLINE static __inline
+#include <bits/sys_statvfs_inlines.h>
+
+#endif
diff --git a/libc/include/bits/fortify/strings.h b/libc/include/bits/fortify/strings.h
index 6bda295..385cf77 100644
--- a/libc/include/bits/fortify/strings.h
+++ b/libc/include/bits/fortify/strings.h
@@ -30,7 +30,7 @@
#if __ANDROID_API__ >= __ANDROID_API_J_MR1__
__BIONIC_FORTIFY_INLINE
-void bcopy(const void *src, void* const dst __pass_object_size0, size_t len)
+void __bionic_bcopy(const void *src, void* const dst __pass_object_size0, size_t len)
__overloadable
__clang_error_if(__bos_unevaluated_lt(__bos0(dst), len),
"'bcopy' called with size bigger than buffer") {
@@ -43,7 +43,7 @@
}
__BIONIC_FORTIFY_INLINE
-void bzero(void* const b __pass_object_size0, size_t len)
+void __bionic_bzero(void* const b __pass_object_size0, size_t len)
__overloadable
__clang_error_if(__bos_unevaluated_lt(__bos0(b), len),
"'bzero' called with size bigger than buffer") {
diff --git a/libc/include/bits/sys_statvfs_inlines.h b/libc/include/bits/sys_statvfs_inlines.h
new file mode 100644
index 0000000..fd4578c
--- /dev/null
+++ b/libc/include/bits/sys_statvfs_inlines.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+#include <sys/cdefs.h>
+#include <sys/statfs.h>
+#include <sys/statvfs.h>
+
+#if defined(__BIONIC_SYS_STATVFS_INLINE)
+
+__BEGIN_DECLS
+
+#if defined(__BIONIC_NEED_STATVFS_INLINES)
+
+static __inline void __bionic_statfs_to_statvfs(const struct statfs* __in,
+ struct statvfs* __out) {
+ __out->f_bsize = __in->f_bsize;
+ __out->f_frsize = __in->f_frsize;
+ __out->f_blocks = __in->f_blocks;
+ __out->f_bfree = __in->f_bfree;
+ __out->f_bavail = __in->f_bavail;
+ __out->f_files = __in->f_files;
+ __out->f_ffree = __in->f_ffree;
+ __out->f_favail = __in->f_ffree;
+ __out->f_fsid = __in->f_fsid.__val[0] |
+ __BIONIC_CAST(static_cast, uint64_t, __in->f_fsid.__val[1]) << 32;
+ __out->f_flag = __in->f_flags;
+ __out->f_namemax = __in->f_namelen;
+}
+
+__BIONIC_SYS_STATVFS_INLINE int statvfs(const char* __path,
+ struct statvfs* __result) {
+ struct statfs __tmp;
+ int __rc = statfs(__path, &__tmp);
+ if (__rc != 0) return __rc;
+ __bionic_statfs_to_statvfs(&__tmp, __result);
+ return 0;
+}
+
+__BIONIC_SYS_STATVFS_INLINE int fstatvfs(int __fd,
+ struct statvfs* __result) {
+ struct statfs __tmp;
+ int __rc = fstatfs(__fd, &__tmp);
+ if (__rc != 0) return __rc;
+ __bionic_statfs_to_statvfs(&__tmp, __result);
+ return 0;
+}
+
+#endif
+
+#if defined(__BIONIC_NEED_STATVFS64_INLINES)
+
+__BIONIC_SYS_STATVFS_INLINE int statvfs64(const char* __path,
+ struct statvfs64* __result) {
+ return statvfs(__path, __BIONIC_CAST(reinterpret_cast, struct statvfs*,
+ __result));
+}
+
+__BIONIC_SYS_STATVFS_INLINE int fstatvfs64(int __fd,
+ struct statvfs64* __result) {
+ return fstatvfs(__fd, __BIONIC_CAST(reinterpret_cast, struct statvfs*,
+ __result));
+}
+
+#endif
+
+__END_DECLS
+
+#endif
diff --git a/libc/include/bits/threads_inlines.h b/libc/include/bits/threads_inlines.h
index 1130b3a..8f2beb0 100644
--- a/libc/include/bits/threads_inlines.h
+++ b/libc/include/bits/threads_inlines.h
@@ -34,9 +34,7 @@
#include <sched.h>
#include <stdlib.h>
-#if !defined(__BIONIC_THREADS_INLINE)
-#define __BIONIC_THREADS_INLINE static __inline
-#endif
+#if defined(__BIONIC_THREADS_INLINE)
__BEGIN_DECLS
@@ -105,10 +103,12 @@
return __bionic_thrd_error(pthread_mutex_lock(__mtx));
}
+#if __ANDROID_API__ >= __ANDROID_API_L__
__BIONIC_THREADS_INLINE int mtx_timedlock(mtx_t* __mtx,
const struct timespec* __timeout) {
return __bionic_thrd_error(pthread_mutex_timedlock(__mtx, __timeout));
}
+#endif
__BIONIC_THREADS_INLINE int mtx_trylock(mtx_t* __mtx) {
return __bionic_thrd_error(pthread_mutex_trylock(__mtx));
@@ -205,3 +205,5 @@
}
__END_DECLS
+
+#endif // __BIONIC_THREADS_INLINE
diff --git a/libc/include/bits/timespec.h b/libc/include/bits/timespec.h
index 0497cfe..daad03f 100644
--- a/libc/include/bits/timespec.h
+++ b/libc/include/bits/timespec.h
@@ -46,7 +46,7 @@
struct timespec {
/** Number of seconds. */
time_t tv_sec;
- /** Number of nanoseconds. Must be less than 1,000,000. */
+ /** Number of nanoseconds. Must be less than 1,000,000,000. */
long tv_nsec;
};
#endif
diff --git a/libc/include/link.h b/libc/include/link.h
index 072f093..bd430f5 100644
--- a/libc/include/link.h
+++ b/libc/include/link.h
@@ -47,6 +47,12 @@
const char* dlpi_name;
const ElfW(Phdr)* dlpi_phdr;
ElfW(Half) dlpi_phnum;
+
+ // These fields were added in Android R.
+ unsigned long long dlpi_adds;
+ unsigned long long dlpi_subs;
+ size_t dlpi_tls_modid;
+ void* dlpi_tls_data;
};
#if defined(__arm__)
diff --git a/libc/include/paths.h b/libc/include/paths.h
index 58540d9..0aa4d93 100644
--- a/libc/include/paths.h
+++ b/libc/include/paths.h
@@ -47,7 +47,7 @@
#define _PATH_CONSOLE "/dev/console"
/** Default shell search path. */
-#define _PATH_DEFPATH "/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin"
+#define _PATH_DEFPATH "/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin"
/** Path to the directory containing device files. */
#define _PATH_DEV "/dev/"
diff --git a/libc/include/stdio.h b/libc/include/stdio.h
index 8bd690f..6632c01 100644
--- a/libc/include/stdio.h
+++ b/libc/include/stdio.h
@@ -165,9 +165,53 @@
char* tempnam(const char* __dir, const char* __prefix)
__warnattr("tempnam is unsafe, use mkstemp or tmpfile instead");
+/**
+ * [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html) changes
+ * the name or location of a file.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int rename(const char* __old_path, const char* __new_path);
+
+/**
+ * [renameat(2)](http://man7.org/linux/man-pages/man2/renameat.2.html) changes
+ * the name or location of a file, interpreting relative paths using an fd.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int renameat(int __old_dir_fd, const char* __old_path, int __new_dir_fd, const char* __new_path);
+#if defined(__USE_GNU)
+
+/**
+ * Flag for [renameat2(2)](http://man7.org/linux/man-pages/man2/renameat2.2.html)
+ * to fail if the new path already exists.
+ */
+#define RENAME_NOREPLACE (1<<0)
+
+/**
+ * Flag for [renameat2(2)](http://man7.org/linux/man-pages/man2/renameat2.2.html)
+ * to atomically exchange the two paths.
+ */
+#define RENAME_EXCHANGE (1<<1)
+
+/**
+ * Flag for [renameat2(2)](http://man7.org/linux/man-pages/man2/renameat2.2.html)
+ * to create a union/overlay filesystem object.
+ */
+#define RENAME_WHITEOUT (1<<2)
+
+/**
+ * [renameat2(2)](http://man7.org/linux/man-pages/man2/renameat2.2.html) changes
+ * the name or location of a file, interpreting relative paths using an fd,
+ * with optional `RENAME_` flags.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
+int renameat2(int __old_dir_fd, const char* __old_path, int __new_dir_fd, const char* __new_path, unsigned __flags) __INTRODUCED_IN(30);
+
+#endif
+
int fseek(FILE* __fp, long __offset, int __whence);
long ftell(FILE* __fp);
diff --git a/libc/include/strings.h b/libc/include/strings.h
index a054aed..d6ee1c8 100644
--- a/libc/include/strings.h
+++ b/libc/include/strings.h
@@ -52,12 +52,14 @@
__BEGIN_DECLS
/** Deprecated. Use memmove() instead. */
-static __inline__ __always_inline void bcopy(const void* b1, void* b2, size_t len) {
+#define bcopy(b1, b2, len) __bionic_bcopy((b1), (b2), (len))
+static __inline__ __always_inline void __bionic_bcopy(const void* b1, void* b2, size_t len) {
__builtin_memmove(b2, b1, len);
}
/** Deprecated. Use memset() instead. */
-static __inline__ __always_inline void bzero(void* b, size_t len) {
+#define bzero(b, len) __bionic_bzero((b), (len))
+static __inline__ __always_inline void __bionic_bzero(void* b, size_t len) {
__builtin_memset(b, 0, len);
}
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index dceb116..689b650 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -361,3 +361,6 @@
#include <android/versioning.h>
#include <android/api-level.h>
+#if __has_include(<android/ndk-version.h>)
+#include <android/ndk-version.h>
+#endif
diff --git a/libc/include/sys/eventfd.h b/libc/include/sys/eventfd.h
index 85f9877..1b6ad29 100644
--- a/libc/include/sys/eventfd.h
+++ b/libc/include/sys/eventfd.h
@@ -38,6 +38,8 @@
__BEGIN_DECLS
+/** The eventfd() flag to provide semaphore-like semantics for reads. */
+#define EFD_SEMAPHORE (1 << 0)
/** The eventfd() flag for a close-on-exec file descriptor. */
#define EFD_CLOEXEC O_CLOEXEC
/** The eventfd() flag for a non-blocking file descriptor. */
diff --git a/libc/include/sys/mman.h b/libc/include/sys/mman.h
index 89d6d07..3b83229 100644
--- a/libc/include/sys/mman.h
+++ b/libc/include/sys/mman.h
@@ -26,34 +26,27 @@
* SUCH DAMAGE.
*/
-#ifndef _SYS_MMAN_H_
-#define _SYS_MMAN_H_
+#pragma once
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <linux/memfd.h>
#include <linux/mman.h>
__BEGIN_DECLS
-#ifndef MAP_ANON
-#define MAP_ANON MAP_ANONYMOUS
-#endif
+/** Alternative spelling of the `MAP_ANONYMOUS` flag for mmap(). */
+#define MAP_ANON MAP_ANONYMOUS
+/** Return value for mmap(). */
#define MAP_FAILED __BIONIC_CAST(reinterpret_cast, void*, -1)
-#define MREMAP_MAYMOVE 1
-#define MREMAP_FIXED 2
-
-/*
- * See https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md
+/**
+ * [mmap(2)](http://man7.org/linux/man-pages/man2/mmap.2.html)
+ * creates a memory mapping for the given range.
*
- * mmap64 wasn't really around until L, but we added an inline for it since it
- * allows a lot more code to compile with _FILE_OFFSET_BITS=64.
- *
- * GCC removes the static inline unless it is explicitly used. We can get around
- * this with __attribute__((used)), but that needlessly adds a definition of
- * mmap64 to every translation unit that includes this header. Instead, just
- * preserve the old behavior for GCC and emit a useful diagnostic.
+ * Returns the address of the mapping on success,
+ * and returns `MAP_FAILED` and sets `errno` on failure.
*/
#if defined(__USE_FILE_OFFSET64)
void* mmap(void* __addr, size_t __size, int __prot, int __flags, int __fd, off_t __offset) __RENAME(mmap64);
@@ -62,25 +55,126 @@
#endif
#if __ANDROID_API__ >= __ANDROID_API_L__
+/**
+ * mmap64() is a variant of mmap() that takes a 64-bit offset even on LP32.
+ *
+ * See https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md
+ *
+ * mmap64 wasn't really around until L, but we added an inline for it since it
+ * allows a lot more code to compile with _FILE_OFFSET_BITS=64.
+ */
void* mmap64(void* __addr, size_t __size, int __prot, int __flags, int __fd, off64_t __offset) __INTRODUCED_IN(21);
#endif
+/**
+ * [munmap(2)](http://man7.org/linux/man-pages/man2/munmap.2.html)
+ * deletes a memory mapping for the given range.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int munmap(void* __addr, size_t __size);
+
+/**
+ * [msync(2)](http://man7.org/linux/man-pages/man2/msync.2.html)
+ * flushes changes to a memory-mapped file to disk.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int msync(void* __addr, size_t __size, int __flags);
+
+/**
+ * [mprotect(2)](http://man7.org/linux/man-pages/man2/mprotect.2.html)
+ * sets the protection on a memory region.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int mprotect(void* __addr, size_t __size, int __prot);
+
+/** Flag for mremap(). */
+#define MREMAP_MAYMOVE 1
+
+/** Flag for mremap(). */
+#define MREMAP_FIXED 2
+
+/**
+ * [mremap(2)](http://man7.org/linux/man-pages/man2/mremap.2.html)
+ * expands or shrinks an existing memory mapping.
+ *
+ * Returns the address of the mapping on success,
+ * and returns `MAP_FAILED` and sets `errno` on failure.
+ */
void* mremap(void* __old_addr, size_t __old_size, size_t __new_size, int __flags, ...);
+/**
+ * [mlockall(2)](http://man7.org/linux/man-pages/man2/mlockall.2.html)
+ * locks pages (preventing swapping).
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int mlockall(int __flags) __INTRODUCED_IN(17);
+
+/**
+ * [munlockall(2)](http://man7.org/linux/man-pages/man2/munlockall.2.html)
+ * unlocks pages (allowing swapping).
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int munlockall(void) __INTRODUCED_IN(17);
+/**
+ * [mlock(2)](http://man7.org/linux/man-pages/man2/mlock.2.html)
+ * locks pages (preventing swapping).
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int mlock(const void* __addr, size_t __size);
+
+/**
+ * [mlock2(2)](http://man7.org/linux/man-pages/man2/mlock.2.html)
+ * locks pages (preventing swapping), with optional flags.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
+int mlock2(const void* __addr, size_t __size, int __flags) __INTRODUCED_IN(30);
+
+/**
+ * [munlock(2)](http://man7.org/linux/man-pages/man2/munlock.2.html)
+ * unlocks pages (allowing swapping).
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int munlock(const void* __addr, size_t __size);
+/**
+ * [mincore(2)](http://man7.org/linux/man-pages/man2/mincore.2.html)
+ * tests whether pages are resident in memory.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int mincore(void* __addr, size_t __size, unsigned char* __vector);
+/**
+ * [madvise(2)](http://man7.org/linux/man-pages/man2/madvise.2.html)
+ * gives the kernel advice about future usage patterns.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int madvise(void* __addr, size_t __size, int __advice);
+#if defined(__USE_GNU)
+
+/**
+ * [memfd_create(2)](http://man7.org/linux/man-pages/man2/memfd_create.2.html)
+ * creates an anonymous file.
+ *
+ * Returns an fd on success, and returns -1 and sets `errno` on failure.
+ */
+int memfd_create(const char* __name, unsigned __flags) __INTRODUCED_IN(30);
+
+#endif
+
#if __ANDROID_API__ >= __ANDROID_API_M__
+
/*
* Some third-party code uses the existence of POSIX_MADV_NORMAL to detect the
* availability of posix_madvise. This is not correct, since having up-to-date
@@ -89,16 +183,30 @@
*
* https://github.com/android-ndk/ndk/issues/395
*/
+
+/** Flag for posix_madvise(). */
#define POSIX_MADV_NORMAL MADV_NORMAL
+/** Flag for posix_madvise(). */
#define POSIX_MADV_RANDOM MADV_RANDOM
+/** Flag for posix_madvise(). */
#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL
+/** Flag for posix_madvise(). */
#define POSIX_MADV_WILLNEED MADV_WILLNEED
+/** Flag for posix_madvise(). */
#define POSIX_MADV_DONTNEED MADV_DONTNEED
+
#endif
+
+/**
+ * [posix_madvise(3)](http://man7.org/linux/man-pages/man3/posix_madvise.3.html)
+ * gives the kernel advice about future usage patterns.
+ *
+ * Returns 0 on success, and returns a positive error number on failure.
+ *
+ * See also madvise() which has been available much longer.
+ */
int posix_madvise(void* __addr, size_t __size, int __advice) __INTRODUCED_IN(23);
__END_DECLS
#include <android/legacy_sys_mman_inlines.h>
-
-#endif
diff --git a/libc/include/sys/statvfs.h b/libc/include/sys/statvfs.h
index e60cadc..93fa3d7 100644
--- a/libc/include/sys/statvfs.h
+++ b/libc/include/sys/statvfs.h
@@ -14,8 +14,12 @@
* limitations under the License.
*/
-#ifndef _SYS_STATVFS_H_
-#define _SYS_STATVFS_H_
+#pragma once
+
+/**
+ * @file sys/statvfs.h
+ * @brief Filesystem statistics.
+ */
#include <stdint.h>
#include <sys/cdefs.h>
@@ -23,47 +27,123 @@
__BEGIN_DECLS
-#ifdef __LP64__
-#define __STATVFS64_RESERVED uint32_t __f_reserved[6];
-#else
-#define __STATVFS64_RESERVED
+struct statvfs {
+ /** Block size. */
+ unsigned long f_bsize;
+ /** Fragment size. */
+ unsigned long f_frsize;
+ /** Total size of filesystem in `f_frsize` blocks. */
+ fsblkcnt_t f_blocks;
+ /** Number of free blocks. */
+ fsblkcnt_t f_bfree;
+ /** Number of free blocks for non-root. */
+ fsblkcnt_t f_bavail;
+ /** Number of inodes. */
+ fsfilcnt_t f_files;
+ /** Number of free inodes. */
+ fsfilcnt_t f_ffree;
+ /** Number of free inodes for non-root. */
+ fsfilcnt_t f_favail;
+ /** Filesystem id. */
+ unsigned long f_fsid;
+ /** Mount flags. (See `ST_` constants.) */
+ unsigned long f_flag;
+ /** Maximum filename length. */
+ unsigned long f_namemax;
+
+#if defined(__LP64__)
+ uint32_t __f_reserved[6];
#endif
+};
-#define __STATVFS64_BODY \
- unsigned long f_bsize; \
- unsigned long f_frsize; \
- fsblkcnt_t f_blocks; \
- fsblkcnt_t f_bfree; \
- fsblkcnt_t f_bavail; \
- fsfilcnt_t f_files; \
- fsfilcnt_t f_ffree; \
- fsfilcnt_t f_favail; \
- unsigned long f_fsid; \
- unsigned long f_flag; \
- unsigned long f_namemax; \
- __STATVFS64_RESERVED
+struct statvfs64 {
+ /** Block size. */
+ unsigned long f_bsize;
+ /** Fragment size. */
+ unsigned long f_frsize;
+ /** Total size of filesystem in `f_frsize` blocks. */
+ fsblkcnt_t f_blocks;
+ /** Number of free blocks. */
+ fsblkcnt_t f_bfree;
+ /** Number of free blocks for non-root. */
+ fsblkcnt_t f_bavail;
+ /** Number of inodes. */
+ fsfilcnt_t f_files;
+ /** Number of free inodes. */
+ fsfilcnt_t f_ffree;
+ /** Number of free inodes for non-root. */
+ fsfilcnt_t f_favail;
+ /** Filesystem id. */
+ unsigned long f_fsid;
+ /** Mount flags. (See `ST_` constants.) */
+ unsigned long f_flag;
+ /** Maximum filename length. */
+ unsigned long f_namemax;
-struct statvfs { __STATVFS64_BODY };
-struct statvfs64 { __STATVFS64_BODY };
+#if defined(__LP64__)
+ uint32_t __f_reserved[6];
+#endif
+};
-#undef __STATVFS64_BODY
-#undef __STATVFS64_RESERVED
-
+/** Flag for `f_flag` in `struct statvfs`: mounted read-only. */
#define ST_RDONLY 0x0001
+
+/** Flag for `f_flag` in `struct statvfs`: setuid/setgid ignored. */
#define ST_NOSUID 0x0002
+
+/** Flag for `f_flag` in `struct statvfs`: access to device files disallowed. */
#define ST_NODEV 0x0004
+
+/** Flag for `f_flag` in `struct statvfs`: execution disallowed. */
#define ST_NOEXEC 0x0008
+
+/** Flag for `f_flag` in `struct statvfs`: writes synced immediately. */
#define ST_SYNCHRONOUS 0x0010
+
+/** Flag for `f_flag` in `struct statvfs`: mandatory locking permitted. */
#define ST_MANDLOCK 0x0040
+
+/** Flag for `f_flag` in `struct statvfs`: access times not updated. */
#define ST_NOATIME 0x0400
+
+/** Flag for `f_flag` in `struct statvfs`: directory access times not updated. */
#define ST_NODIRATIME 0x0800
+
+/** Flag for `f_flag` in `struct statvfs`: see `MS_RELATIME`. */
#define ST_RELATIME 0x1000
+#if __ANDROID_API__ >= 19
+// These functions are implemented as static inlines before API level 19.
+
+/**
+ * [statvfs(3)](http://man7.org/linux/man-pages/man3/statvfs.3.html)
+ * queries filesystem statistics for the given path.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int statvfs(const char* __path, struct statvfs* __buf) __INTRODUCED_IN(19);
-int statvfs64(const char* __path, struct statvfs64* __buf) __INTRODUCED_IN(21);
+
+/**
+ * [fstatvfs(3)](http://man7.org/linux/man-pages/man3/fstatvfs.3.html)
+ * queries filesystem statistics for the given file descriptor.
+ *
+ * Returns 0 on success, and returns -1 and sets `errno` on failure.
+ */
int fstatvfs(int __fd, struct statvfs* __buf) __INTRODUCED_IN(19);
+
+#endif
+
+#if __ANDROID_API__ >= 21
+// These functions are implemented as static inlines before API level 21.
+
+/** Equivalent to statvfs(). */
+int statvfs64(const char* __path, struct statvfs64* __buf) __INTRODUCED_IN(21);
+
+/** Equivalent to fstatvfs(). */
int fstatvfs64(int __fd, struct statvfs64* __buf) __INTRODUCED_IN(21);
+#endif
+
__END_DECLS
-#endif
+#include <android/legacy_sys_statvfs_inlines.h>
diff --git a/libc/include/threads.h b/libc/include/threads.h
index 2c43b0b..752761d 100644
--- a/libc/include/threads.h
+++ b/libc/include/threads.h
@@ -82,71 +82,72 @@
// This file is implemented as static inlines before API level 30.
/** Uses `__flag` to ensure that `__function` is called exactly once. */
-void call_once(once_flag* __flag, void (*__function)(void));
+void call_once(once_flag* __flag, void (*__function)(void)) __INTRODUCED_IN(30);
/**
* Unblocks all threads blocked on `__cond`.
*/
-int cnd_broadcast(cnd_t* __cond);
+int cnd_broadcast(cnd_t* __cond) __INTRODUCED_IN(30);
/**
* Destroys a condition variable.
*/
-void cnd_destroy(cnd_t* __cond);
+void cnd_destroy(cnd_t* __cond) __INTRODUCED_IN(30);
/**
* Creates a condition variable.
*/
-int cnd_init(cnd_t* __cond);
+int cnd_init(cnd_t* __cond) __INTRODUCED_IN(30);
/**
* Unblocks one thread blocked on `__cond`.
*/
-int cnd_signal(cnd_t* __cond);
+int cnd_signal(cnd_t* __cond) __INTRODUCED_IN(30);
/**
* Unlocks `__mutex` and blocks until `__cond` is signaled or `__timeout` occurs.
*/
-int cnd_timedwait(cnd_t* __cond, mtx_t* __mutex, const struct timespec* __timeout);
+int cnd_timedwait(cnd_t* __cond, mtx_t* __mutex, const struct timespec* __timeout)
+ __INTRODUCED_IN(30);
/**
* Unlocks `__mutex` and blocks until `__cond` is signaled.
*/
-int cnd_wait(cnd_t* __cond, mtx_t* __mutex);
+int cnd_wait(cnd_t* __cond, mtx_t* __mutex) __INTRODUCED_IN(30);
/**
* Destroys a mutex.
*/
-void mtx_destroy(mtx_t* __mutex);
+void mtx_destroy(mtx_t* __mutex) __INTRODUCED_IN(30);
/**
* Creates a mutex.
*/
-int mtx_init(mtx_t* __mutex, int __type);
+int mtx_init(mtx_t* __mutex, int __type) __INTRODUCED_IN(30);
/**
* Blocks until `__mutex` is acquired.
*/
-int mtx_lock(mtx_t* __mutex);
+int mtx_lock(mtx_t* __mutex) __INTRODUCED_IN(30);
/**
* Blocks until `__mutex` is acquired or `__timeout` expires.
*/
-int mtx_timedlock(mtx_t* __mutex, const struct timespec* __timeout);
+int mtx_timedlock(mtx_t* __mutex, const struct timespec* __timeout) __INTRODUCED_IN(30);
/**
* Acquires `__mutex` or returns `thrd_busy`.
*/
-int mtx_trylock(mtx_t* __mutex);
+int mtx_trylock(mtx_t* __mutex) __INTRODUCED_IN(30);
/**
* Unlocks `__mutex`.
*/
-int mtx_unlock(mtx_t* __mutex);
+int mtx_unlock(mtx_t* __mutex) __INTRODUCED_IN(30);
@@ -154,33 +155,33 @@
* Creates a new thread running `__function(__arg)`, and sets `*__thrd` to
* the new thread.
*/
-int thrd_create(thrd_t* __thrd, thrd_start_t __function, void* __arg);
+int thrd_create(thrd_t* __thrd, thrd_start_t __function, void* __arg) __INTRODUCED_IN(30);
/**
* Returns the `thrd_t` corresponding to the caller.
*/
-thrd_t thrd_current(void);
+thrd_t thrd_current(void) __INTRODUCED_IN(30);
/**
* Tells the OS to automatically dispose of `__thrd` when it exits.
*/
-int thrd_detach(thrd_t __thrd);
+int thrd_detach(thrd_t __thrd) __INTRODUCED_IN(30);
/**
* Tests whether two threads are the same thread.
*/
-int thrd_equal(thrd_t __lhs, thrd_t __rhs);
+int thrd_equal(thrd_t __lhs, thrd_t __rhs) __INTRODUCED_IN(30);
/**
* Terminates the calling thread, setting its result to `__result`.
*/
-void thrd_exit(int __result) __noreturn;
+void thrd_exit(int __result) __noreturn __INTRODUCED_IN(30);
/**
* Blocks until `__thrd` terminates. If `__result` is not null, `*__result`
* is set to the exiting thread's result.
*/
-int thrd_join(thrd_t __thrd, int* __result);
+int thrd_join(thrd_t __thrd, int* __result) __INTRODUCED_IN(30);
/**
* Blocks the caller for at least `__duration` unless a signal is delivered.
@@ -189,12 +190,12 @@
*
* Returns 0 on success, or -1 if a signal was delivered.
*/
-int thrd_sleep(const struct timespec* __duration, struct timespec* __remaining);
+int thrd_sleep(const struct timespec* __duration, struct timespec* __remaining) __INTRODUCED_IN(30);
/**
* Request that other threads should be scheduled.
*/
-void thrd_yield(void);
+void thrd_yield(void) __INTRODUCED_IN(30);
@@ -202,24 +203,24 @@
* Creates a thread-specific storage key with the associated destructor (which
* may be null).
*/
-int tss_create(tss_t* __key, tss_dtor_t __dtor);
+int tss_create(tss_t* __key, tss_dtor_t __dtor) __INTRODUCED_IN(30);
/**
* Destroys a thread-specific storage key.
*/
-void tss_delete(tss_t __key);
+void tss_delete(tss_t __key) __INTRODUCED_IN(30);
/**
* Returns the value for the current thread held in the thread-specific storage
* identified by `__key`.
*/
-void* tss_get(tss_t __key);
+void* tss_get(tss_t __key) __INTRODUCED_IN(30);
/**
* Sets the current thread's value for the thread-specific storage identified
* by `__key` to `__value`.
*/
-int tss_set(tss_t __key, void* __value);
+int tss_set(tss_t __key, void* __value) __INTRODUCED_IN(30);
#endif
diff --git a/libc/kernel/tools/update_all.py b/libc/kernel/tools/update_all.py
index 9d5b02d..cef24dd 100755
--- a/libc/kernel/tools/update_all.py
+++ b/libc/kernel/tools/update_all.py
@@ -110,7 +110,9 @@
content += ' #define SYS_%s %s\n' % (syscall, nr_name)
content += '#endif\n'
- updater.editFile('%s/include/bits/glibc-syscalls.h' % libc_root, content)
+ syscall_file = os.path.join(libc_root, 'include/bits/glibc-syscalls.h')
+ updater.readFile(syscall_file)
+ updater.editFile(syscall_file, content)
try:
diff --git a/libc/kernel/uapi/asm-x86/asm/vmx.h b/libc/kernel/uapi/asm-x86/asm/vmx.h
index 0f7ede3..83365f8 100644
--- a/libc/kernel/uapi/asm-x86/asm/vmx.h
+++ b/libc/kernel/uapi/asm-x86/asm/vmx.h
@@ -78,6 +78,5 @@
#define VMX_EXIT_REASONS { EXIT_REASON_EXCEPTION_NMI, "EXCEPTION_NMI" }, { EXIT_REASON_EXTERNAL_INTERRUPT, "EXTERNAL_INTERRUPT" }, { EXIT_REASON_TRIPLE_FAULT, "TRIPLE_FAULT" }, { EXIT_REASON_PENDING_INTERRUPT, "PENDING_INTERRUPT" }, { EXIT_REASON_NMI_WINDOW, "NMI_WINDOW" }, { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, { EXIT_REASON_CPUID, "CPUID" }, { EXIT_REASON_HLT, "HLT" }, { EXIT_REASON_INVD, "INVD" }, { EXIT_REASON_INVLPG, "INVLPG" }, { EXIT_REASON_RDPMC, "RDPMC" }, { EXIT_REASON_RDTSC, "RDTSC" }, { EXIT_REASON_VMCALL, "VMCALL" }, { EXIT_REASON_VMCLEAR, "VMCLEAR" }, { EXIT_REASON_VMLAUNCH, "VMLAUNCH" }, { EXIT_REASON_VMPTRLD, "VMPTRLD" }, { EXIT_REASON_VMPTRST, "VMPTRST" }, { EXIT_REASON_VMREAD, "VMREAD" }, { EXIT_REASON_VMRESUME, "VMRESUME" }, { EXIT_REASON_VMWRITE, "VMWRITE" }, { EXIT_REASON_VMOFF, "VMOFF" }, { EXIT_REASON_VMON, "VMON" }, { EXIT_REASON_CR_ACCESS, "CR_ACCESS" }, { EXIT_REASON_DR_ACCESS, "DR_ACCESS" }, { EXIT_REASON_IO_INSTRUCTION, "IO_INSTRUCTION" }, { EXIT_REASON_MSR_READ, "MSR_READ" }, { EXIT_REASON_MSR_WRITE, "MSR_WRITE" }, { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, { EXIT_REASON_MWAIT_INSTRUCTION, "MWAIT_INSTRUCTION" }, { EXIT_REASON_MONITOR_TRAP_FLAG, "MONITOR_TRAP_FLAG" }, { EXIT_REASON_MONITOR_INSTRUCTION, "MONITOR_INSTRUCTION" }, { EXIT_REASON_PAUSE_INSTRUCTION, "PAUSE_INSTRUCTION" }, { EXIT_REASON_MCE_DURING_VMENTRY, "MCE_DURING_VMENTRY" }, { EXIT_REASON_TPR_BELOW_THRESHOLD, "TPR_BELOW_THRESHOLD" }, { EXIT_REASON_APIC_ACCESS, "APIC_ACCESS" }, { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, { EXIT_REASON_LDTR_TR, "LDTR_TR" }, { EXIT_REASON_EPT_VIOLATION, "EPT_VIOLATION" }, { EXIT_REASON_EPT_MISCONFIG, "EPT_MISCONFIG" }, { EXIT_REASON_INVEPT, "INVEPT" }, { EXIT_REASON_RDTSCP, "RDTSCP" }, { EXIT_REASON_PREEMPTION_TIMER, "PREEMPTION_TIMER" }, { EXIT_REASON_INVVPID, "INVVPID" }, { EXIT_REASON_WBINVD, "WBINVD" }, { EXIT_REASON_XSETBV, "XSETBV" }, { EXIT_REASON_APIC_WRITE, "APIC_WRITE" }, { EXIT_REASON_RDRAND, "RDRAND" }, { EXIT_REASON_INVPCID, "INVPCID" }, { EXIT_REASON_VMFUNC, "VMFUNC" }, { EXIT_REASON_ENCLS, "ENCLS" }, { EXIT_REASON_RDSEED, "RDSEED" }, { EXIT_REASON_PML_FULL, "PML_FULL" }, { EXIT_REASON_XSAVES, "XSAVES" }, { EXIT_REASON_XRSTORS, "XRSTORS" }
#define VMX_ABORT_SAVE_GUEST_MSR_FAIL 1
#define VMX_ABORT_LOAD_HOST_PDPTE_FAIL 2
-#define VMX_ABORT_VMCS_CORRUPTED 3
#define VMX_ABORT_LOAD_HOST_MSR_FAIL 4
#endif
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index 11df994..3f09421 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -548,6 +548,7 @@
char name[BPF_OBJ_NAME_LEN];
__u32 ifindex;
__u32 gpl_compatible : 1;
+ __u32 : 31;
__u64 netns_dev;
__u64 netns_ino;
__u32 nr_jited_ksyms;
diff --git a/libc/kernel/uapi/linux/nilfs2_ondisk.h b/libc/kernel/uapi/linux/nilfs2_ondisk.h
index e9995a1..a05e7b7 100644
--- a/libc/kernel/uapi/linux/nilfs2_ondisk.h
+++ b/libc/kernel/uapi/linux/nilfs2_ondisk.h
@@ -20,6 +20,7 @@
#define _LINUX_NILFS2_ONDISK_H
#include <linux/types.h>
#include <linux/magic.h>
+#include <asm/byteorder.h>
#define NILFS_INODE_BMAP_SIZE 7
struct nilfs_inode {
__le64 i_blocks;
@@ -248,11 +249,11 @@
NILFS_CHECKPOINT_MINOR,
};
#define NILFS_CHECKPOINT_FNS(flag,name) static inline void nilfs_checkpoint_set_ ##name(struct nilfs_checkpoint * cp) \
-{ cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | (1UL << NILFS_CHECKPOINT_ ##flag)); \
+{ cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) | (1UL << NILFS_CHECKPOINT_ ##flag)); \
} static inline void nilfs_checkpoint_clear_ ##name(struct nilfs_checkpoint * cp) \
-{ cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & ~(1UL << NILFS_CHECKPOINT_ ##flag)); \
+{ cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) & ~(1UL << NILFS_CHECKPOINT_ ##flag)); \
} static inline int nilfs_checkpoint_ ##name(const struct nilfs_checkpoint * cp) \
-{ return ! ! (le32_to_cpu(cp->cp_flags) & (1UL << NILFS_CHECKPOINT_ ##flag)); \
+{ return ! ! (__le32_to_cpu(cp->cp_flags) & (1UL << NILFS_CHECKPOINT_ ##flag)); \
}
struct nilfs_cpfile_header {
__le64 ch_ncheckpoints;
@@ -272,11 +273,11 @@
NILFS_SEGMENT_USAGE_ERROR,
};
#define NILFS_SEGMENT_USAGE_FNS(flag,name) static inline void nilfs_segment_usage_set_ ##name(struct nilfs_segment_usage * su) \
-{ su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | (1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
+{ su->su_flags = __cpu_to_le32(__le32_to_cpu(su->su_flags) | (1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
} static inline void nilfs_segment_usage_clear_ ##name(struct nilfs_segment_usage * su) \
-{ su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) & ~(1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
+{ su->su_flags = __cpu_to_le32(__le32_to_cpu(su->su_flags) & ~(1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
} static inline int nilfs_segment_usage_ ##name(const struct nilfs_segment_usage * su) \
-{ return ! ! (le32_to_cpu(su->su_flags) & (1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
+{ return ! ! (__le32_to_cpu(su->su_flags) & (1UL << NILFS_SEGMENT_USAGE_ ##flag)); \
}
struct nilfs_sufile_header {
__le64 sh_ncleansegs;
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index 815f53d..94bf4ba 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,5 +16,5 @@
***
****************************************************************************
****************************************************************************/
-#define LINUX_VERSION_CODE 328192
+#define LINUX_VERSION_CODE 328198
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index e6df45c..f77c6bd 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -210,7 +210,7 @@
#define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2')
#define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2')
#define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2')
-#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('B', 'A', '1', '2')
+#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2')
#define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2')
#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O')
#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5')
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index 0cab83d..9b39bb8 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -1493,6 +1493,8 @@
cnd_signal;
cnd_timedwait;
cnd_wait;
+ memfd_create;
+ mlock2;
mtx_destroy;
mtx_init;
mtx_lock;
@@ -1503,6 +1505,7 @@
pthread_mutex_clocklock;
pthread_rwlock_clockrdlock;
pthread_rwlock_clockwrlock;
+ renameat2;
sem_clockwait;
thrd_create;
thrd_current;
diff --git a/libc/malloc_debug/Android.bp b/libc/malloc_debug/Android.bp
index d6b8531..2bff260 100644
--- a/libc/malloc_debug/Android.bp
+++ b/libc/malloc_debug/Android.bp
@@ -27,6 +27,12 @@
},
native_coverage: false,
+ target: {
+ android: {
+ static_libs: ["libc++demangle"],
+ },
+ },
+
// -Wno-error=format-zero-length needed for gcc to compile.
cflags: [
"-Wall",
diff --git a/libc/private/WriteProtected.h b/libc/private/WriteProtected.h
index d240e14..26c239c 100644
--- a/libc/private/WriteProtected.h
+++ b/libc/private/WriteProtected.h
@@ -47,11 +47,11 @@
WriteProtectedContents<T> contents;
int set_protection(int prot) {
- auto addr = reinterpret_cast<uintptr_t>(&contents);
+ auto addr = &contents;
#if __has_feature(hwaddress_sanitizer)
// The mprotect system call does not currently untag pointers, so do it
// ourselves.
- addr &= (1ULL << 56) - 1;
+ addr = untag_address(addr);
#endif
return mprotect(reinterpret_cast<void*>(addr), PAGE_SIZE, prot);
}
diff --git a/libc/private/bionic_globals.h b/libc/private/bionic_globals.h
index d73079e..ef735ba 100644
--- a/libc/private/bionic_globals.h
+++ b/libc/private/bionic_globals.h
@@ -88,6 +88,10 @@
TlsModules tls_modules;
BionicAllocator tls_allocator;
+ // Values passed from the HWASan runtime (via libc.so) to the loader.
+ void (*load_hook)(ElfW(Addr) base, const ElfW(Phdr)* phdr, ElfW(Half) phnum) = nullptr;
+ void (*unload_hook)(ElfW(Addr) base, const ElfW(Phdr)* phdr, ElfW(Half) phnum) = nullptr;
+
// Values passed from the linker to libc.so.
const char* init_progname = nullptr;
char** init_environ = nullptr;
diff --git a/libc/private/bionic_macros.h b/libc/private/bionic_macros.h
index 4800e3a..54903f5 100644
--- a/libc/private/bionic_macros.h
+++ b/libc/private/bionic_macros.h
@@ -50,10 +50,7 @@
}
#if defined(__arm__)
-// Do not emit anything for arm, clang does not allow emiting an arm unwind
-// directive.
-// #define BIONIC_STOP_UNWIND asm volatile(".cantunwind")
-#define BIONIC_STOP_UNWIND
+#define BIONIC_STOP_UNWIND asm volatile(".cfi_undefined r14")
#elif defined(__aarch64__)
#define BIONIC_STOP_UNWIND asm volatile(".cfi_undefined x30")
#elif defined(__i386__)
@@ -87,3 +84,12 @@
#else
#define __BIONIC_FALLTHROUGH
#endif
+
+template <typename T>
+static inline T* untag_address(T* p) {
+#if defined(__aarch64__)
+ return reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(p) & ((1ULL << 56) - 1));
+#else
+ return p;
+#endif
+}
diff --git a/libdl/libdl_cfi.cpp b/libdl/libdl_cfi.cpp
index 1446143..3b68fc7 100644
--- a/libdl/libdl_cfi.cpp
+++ b/libdl/libdl_cfi.cpp
@@ -44,11 +44,8 @@
}
static uint16_t shadow_load(void* p) {
- uintptr_t addr = reinterpret_cast<uintptr_t>(p);
-#ifdef __aarch64__
// Untag the pointer to move it into the address space covered by the shadow.
- addr &= (1ULL << 56) - 1;
-#endif
+ uintptr_t addr = reinterpret_cast<uintptr_t>(untag_address(p));
uintptr_t ofs = CFIShadow::MemToShadowOffset(addr);
if (ofs > CFIShadow::kShadowSize) return CFIShadow::kInvalidShadow;
return *reinterpret_cast<uint16_t*>(shadow_base_storage.v + ofs);
diff --git a/libm/x86/e_exp.S b/libm/x86/e_exp.S
deleted file mode 100644
index eab619d..0000000
--- a/libm/x86/e_exp.S
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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
-ALIAS_SYMBOL(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_log.S b/libm/x86/e_log.S
deleted file mode 100644
index a6181ca..0000000
--- a/libm/x86/e_log.S
+++ /dev/null
@@ -1,780 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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
-ALIAS_SYMBOL(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_pow.S b/libm/x86/e_pow.S
deleted file mode 100644
index 43e30d8..0000000
--- a/libm/x86/e_pow.S
+++ /dev/null
@@ -1,4277 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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_64/e_exp.S b/libm/x86_64/e_exp.S
deleted file mode 100644
index 6882dfc..0000000
--- a/libm/x86_64/e_exp.S
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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_log.S b/libm/x86_64/e_log.S
deleted file mode 100644
index 40cb5e2..0000000
--- a/libm/x86_64/e_log.S
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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_pow.S b/libm/x86_64/e_pow.S
deleted file mode 100644
index 9ec3828..0000000
--- a/libm/x86_64/e_pow.S
+++ /dev/null
@@ -1,4282 +0,0 @@
-/*
-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 <private/bionic_asm.h>
-# -- 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/linker/Android.bp b/linker/Android.bp
index 5e7a921..e2cdd14 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -177,11 +177,6 @@
"-Wextra",
"-Wunused",
"-Werror",
-
- // Define _USING_LIBCXX so <stdatomic.h> defers to the <atomic> header. When a Soong module
- // uses the platform libc++, Soong automatically passes this macro, but the dynamic linker
- // links against libc++ manually.
- "-D_USING_LIBCXX",
],
// TODO: split out the asflags.
@@ -300,7 +295,10 @@
target: {
android: {
- static_libs: ["libdebuggerd_handler_fallback"],
+ static_libs: [
+ "libc++demangle",
+ "libdebuggerd_handler_fallback",
+ ],
},
},
compile_multilib: "both",
diff --git a/linker/ld.config.format.md b/linker/ld.config.format.md
index faf5cc8..f9fbcde 100644
--- a/linker/ld.config.format.md
+++ b/linker/ld.config.format.md
@@ -25,7 +25,7 @@
## Example
```
-# The following line maps section to a dir. Binraies ran from this location will use namespaces
+# The following line maps section to a dir. Binaries ran from this location will use namespaces
# configuration specified in [example_section] below
dir.example_section=/system/bin/example
@@ -38,7 +38,7 @@
# default value is false
enable.target.sdk.version = true
-# This property can be used to declare additional namespaces.Note that there is always the default
+# This property can be used to declare additional namespaces. Note that there is always the default
# namespace. The default namespace is the namespace for the main executable. This list is
# comma-separated.
additional.namespaces = ns1
@@ -65,7 +65,7 @@
# This declares linked namespaces - comma separated list.
namespace.default.links = ns1
-# For every link define list of shared libraries. This is list of the libraries accessilbe from
+# For every link define list of shared libraries. This is list of the libraries accessible from
# default namespace but loaded in the linked namespace.
namespace.default.link.ns1.shared_libs = libexternal.so:libother.so
diff --git a/linker/linker.cpp b/linker/linker.cpp
index df7dd40..0bc3121 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -46,8 +46,8 @@
#include <android-base/properties.h>
#include <android-base/scopeguard.h>
-
#include <async_safe/log.h>
+#include <bionic/pthread_internal.h>
// Private C library headers.
@@ -76,6 +76,7 @@
static std::unordered_map<void*, size_t> g_dso_handle_counters;
+static bool g_anonymous_namespace_set = false;
static android_namespace_t* g_anonymous_namespace = &g_default_namespace;
static std::unordered_map<std::string, android_namespace_t*> g_exported_namespaces;
@@ -85,11 +86,16 @@
static LinkerTypeAllocator<android_namespace_t> g_namespace_allocator;
static LinkerTypeAllocator<LinkedListEntry<android_namespace_t>> g_namespace_list_allocator;
+static uint64_t g_module_load_counter = 0;
+static uint64_t g_module_unload_counter = 0;
+
static const char* const kLdConfigArchFilePath = "/system/etc/ld.config." ABI_STRING ".txt";
static const char* const kLdConfigFilePath = "/system/etc/ld.config.txt";
static const char* const kLdConfigVndkLiteFilePath = "/system/etc/ld.config.vndk_lite.txt";
+static const char* const kLdGeneratedConfigFilePath = "/dev/linkerconfig/ld.config.txt";
+
#if defined(__LP64__)
static const char* const kSystemLibDir = "/system/lib64";
static const char* const kOdmLibDir = "/odm/lib64";
@@ -97,7 +103,7 @@
static const char* const kAsanSystemLibDir = "/data/asan/system/lib64";
static const char* const kAsanOdmLibDir = "/data/asan/odm/lib64";
static const char* const kAsanVendorLibDir = "/data/asan/vendor/lib64";
-static const char* const kRuntimeApexLibDir = "/apex/com.android.runtime/lib64";
+static const char* const kArtApexLibDir = "/apex/com.android.art/lib64";
#else
static const char* const kSystemLibDir = "/system/lib";
static const char* const kOdmLibDir = "/odm/lib";
@@ -105,7 +111,7 @@
static const char* const kAsanSystemLibDir = "/data/asan/system/lib";
static const char* const kAsanOdmLibDir = "/data/asan/odm/lib";
static const char* const kAsanVendorLibDir = "/data/asan/vendor/lib";
-static const char* const kRuntimeApexLibDir = "/apex/com.android.runtime/lib";
+static const char* const kArtApexLibDir = "/apex/com.android.art/lib";
#endif
static const char* const kAsanLibDirPrefix = "/data/asan";
@@ -239,7 +245,7 @@
* return true if translation is needed
*/
static bool translateSystemPathToApexPath(const char* name, std::string* out_name_to_apex) {
- static const char* const kSystemToRuntimeApexLibs[] = {
+ static const char* const kSystemToArtApexLibs[] = {
"libicuuc.so",
"libicui18n.so",
};
@@ -257,9 +263,9 @@
const char* base_name = basename(name);
- for (const char* soname : kSystemToRuntimeApexLibs) {
+ for (const char* soname : kSystemToArtApexLibs) {
if (strcmp(base_name, soname) == 0) {
- *out_name_to_apex = std::string(kRuntimeApexLibDir) + "/" + base_name;
+ *out_name_to_apex = std::string(kArtApexLibDir) + "/" + base_name;
return true;
}
}
@@ -270,8 +276,6 @@
static std::vector<std::string> g_ld_preload_names;
-static bool g_anonymous_namespace_initialized;
-
#if STATS
struct linker_stats_t {
int count[kRelocMax];
@@ -423,6 +427,24 @@
return true;
}
+// Returns the address of the current thread's copy of a TLS module. If the current thread doesn't
+// have a copy yet, allocate one on-demand if should_alloc is true, and return nullptr otherwise.
+static inline void* get_tls_block_for_this_thread(const soinfo_tls* si_tls, bool should_alloc) {
+ const TlsModule& tls_mod = get_tls_module(si_tls->module_id);
+ if (tls_mod.static_offset != SIZE_MAX) {
+ const StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+ char* static_tls = reinterpret_cast<char*>(__get_bionic_tcb()) - layout.offset_bionic_tcb();
+ return static_tls + tls_mod.static_offset;
+ } else if (should_alloc) {
+ const TlsIndex ti { si_tls->module_id, 0 };
+ return TLS_GET_ADDR(&ti);
+ } else {
+ TlsDtv* dtv = __get_tcb_dtv(__get_bionic_tcb());
+ if (dtv->generation < tls_mod.first_generation) return nullptr;
+ return dtv->modules[__tls_module_id_to_idx(si_tls->module_id)];
+ }
+}
+
#if defined(__arm__)
// For a given PC, find the .so that it belongs to.
@@ -452,6 +474,16 @@
dl_info.dlpi_name = si->link_map_head.l_name;
dl_info.dlpi_phdr = si->phdr;
dl_info.dlpi_phnum = si->phnum;
+ dl_info.dlpi_adds = g_module_load_counter;
+ dl_info.dlpi_subs = g_module_unload_counter;
+ if (soinfo_tls* tls_module = si->get_tls()) {
+ dl_info.dlpi_tls_modid = tls_module->module_id;
+ dl_info.dlpi_tls_data = get_tls_block_for_this_thread(tls_module, /*should_alloc=*/false);
+ } else {
+ dl_info.dlpi_tls_modid = 0;
+ dl_info.dlpi_tls_data = nullptr;
+ }
+
rv = cb(&dl_info, sizeof(dl_phdr_info), data);
if (rv != 0) {
break;
@@ -951,7 +983,9 @@
}
soinfo* find_containing_library(const void* p) {
- ElfW(Addr) address = reinterpret_cast<ElfW(Addr)>(p);
+ // Addresses within a library may be tagged if they point to globals. Untag
+ // them so that the bounds check succeeds.
+ ElfW(Addr) address = reinterpret_cast<ElfW(Addr)>(untag_address(p));
for (soinfo* si = solist_get_head(); si != nullptr; si = si->next) {
if (address < si->base || address - si->base >= si->size) {
continue;
@@ -1901,6 +1935,9 @@
// flag is set.
link_extinfo = extinfo;
}
+ if (__libc_shared_globals()->load_hook) {
+ __libc_shared_globals()->load_hook(si->load_bias, si->phdr, si->phnum);
+ }
if (!si->link_image(global_group, local_group, link_extinfo, &relro_fd_offset) ||
!get_cfi_shadow()->AfterLoad(si, solist_get_head())) {
return false;
@@ -2037,8 +2074,12 @@
"... dlclose: unloading \"%s\"@%p ...",
si->get_realpath(),
si);
+ ++g_module_unload_counter;
notify_gdb_of_unload(si);
unregister_soinfo_tls(si);
+ if (__libc_shared_globals()->unload_hook) {
+ __libc_shared_globals()->unload_hook(si->load_bias, si->phdr, si->phnum);
+ }
get_cfi_shadow()->BeforeUnload(si);
soinfo_free(si);
}
@@ -2420,18 +2461,15 @@
if ((bind == STB_GLOBAL || bind == STB_WEAK) && sym->st_shndx != 0) {
if (type == STT_TLS) {
// For a TLS symbol, dlsym returns the address of the current thread's
- // copy of the symbol. This function may allocate a DTV and/or storage
- // for the source TLS module. (Allocating a DTV isn't necessary if the
- // symbol is part of static TLS, but it's simpler to reuse
- // __tls_get_addr.)
- soinfo_tls* tls_module = found->get_tls();
+ // copy of the symbol.
+ const soinfo_tls* tls_module = found->get_tls();
if (tls_module == nullptr) {
DL_ERR("TLS symbol \"%s\" in solib \"%s\" with no TLS segment",
sym_name, found->get_realpath());
return false;
}
- const TlsIndex ti { tls_module->module_id, sym->st_value };
- *symbol = TLS_GET_ADDR(&ti);
+ void* tls_block = get_tls_block_for_this_thread(tls_module, /*should_alloc=*/true);
+ *symbol = static_cast<char*>(tls_block) + sym->st_value;
} else {
*symbol = reinterpret_cast<void*>(found->resolve_symbol_address(sym));
}
@@ -2471,14 +2509,29 @@
return 0;
}
-bool init_anonymous_namespace(const char* shared_lib_sonames, const char* library_search_path) {
- if (g_anonymous_namespace_initialized) {
- DL_ERR("anonymous namespace has already been initialized.");
- return false;
+// Make ns as the anonymous namespace that is a namespace used when
+// we fail to determine the caller address (e.g., call from mono-jited code)
+// Since there can be multiple anonymous namespace in a process, subsequent
+// call to this function causes an error.
+static bool set_anonymous_namespace(android_namespace_t* ns) {
+ if (!g_anonymous_namespace_set && ns != nullptr) {
+ CHECK(ns->is_also_used_as_anonymous());
+ g_anonymous_namespace = ns;
+ g_anonymous_namespace_set = true;
+ return true;
}
+ return false;
+}
+// TODO(b/130388701) remove this. Currently, this is used only for testing
+// where we don't have classloader namespace.
+bool init_anonymous_namespace(const char* shared_lib_sonames, const char* library_search_path) {
ProtectedDataGuard guard;
+ // Test-only feature: we need to change the anonymous namespace multiple times
+ // while the test is running.
+ g_anonymous_namespace_set = false;
+
// create anonymous namespace
// When the caller is nullptr - create_namespace will take global group
// from the anonymous namespace, which is fine because anonymous namespace
@@ -2488,21 +2541,18 @@
"(anonymous)",
nullptr,
library_search_path,
- ANDROID_NAMESPACE_TYPE_ISOLATED,
+ ANDROID_NAMESPACE_TYPE_ISOLATED |
+ ANDROID_NAMESPACE_TYPE_ALSO_USED_AS_ANONYMOUS,
nullptr,
&g_default_namespace);
- if (anon_ns == nullptr) {
- return false;
- }
+ CHECK(anon_ns != nullptr);
if (!link_namespaces(anon_ns, &g_default_namespace, shared_lib_sonames)) {
+ // TODO: delete anon_ns
return false;
}
- g_anonymous_namespace = anon_ns;
- g_anonymous_namespace_initialized = true;
-
return true;
}
@@ -2542,6 +2592,7 @@
ns->set_name(name);
ns->set_isolated((type & ANDROID_NAMESPACE_TYPE_ISOLATED) != 0);
ns->set_greylist_enabled((type & ANDROID_NAMESPACE_TYPE_GREYLIST_ENABLED) != 0);
+ ns->set_also_used_as_anonymous((type & ANDROID_NAMESPACE_TYPE_ALSO_USED_AS_ANONYMOUS) != 0);
if ((type & ANDROID_NAMESPACE_TYPE_SHARED) != 0) {
// append parent namespace paths.
@@ -2573,6 +2624,16 @@
ns->set_default_library_paths(std::move(default_library_paths));
ns->set_permitted_paths(std::move(permitted_paths));
+ if (ns->is_also_used_as_anonymous() && !set_anonymous_namespace(ns)) {
+ DL_ERR("failed to set namespace: [name=\"%s\", ld_library_path=\"%s\", default_library_paths=\"%s\""
+ " permitted_paths=\"%s\"] as the anonymous namespace",
+ ns->get_name(),
+ android::base::Join(ns->get_ld_library_paths(), ':').c_str(),
+ android::base::Join(ns->get_default_library_paths(), ':').c_str(),
+ android::base::Join(ns->get_permitted_paths(), ':').c_str());
+ return nullptr;
+ }
+
return ns;
}
@@ -4074,6 +4135,7 @@
}
}
+ ++g_module_load_counter;
notify_gdb_of_load(this);
set_image_linked();
return true;
@@ -4142,6 +4204,13 @@
}
#endif
+ // Use generated linker config if flag is set
+ // TODO(b/138920271) Do not check property once it is confirmed as stable
+ if (android::base::GetBoolProperty("sys.linker.use_generated_config", false) &&
+ file_exists(kLdGeneratedConfigFilePath)) {
+ return kLdGeneratedConfigFilePath;
+ }
+
std::string path = get_ld_config_file_apex_path(executable_path);
if (!path.empty()) {
if (file_exists(path.c_str())) {
diff --git a/linker/linker.h b/linker/linker.h
index 782da1c..89390b3 100644
--- a/linker/linker.h
+++ b/linker/linker.h
@@ -165,6 +165,13 @@
*/
ANDROID_NAMESPACE_TYPE_GREYLIST_ENABLED = 0x08000000,
+ /* This flag instructs linker to use this namespace as the anonymous
+ * namespace. There can be only one anonymous namespace in a process. If there
+ * already an anonymous namespace in the process, using this flag when
+ * creating a new namespace causes an error
+ */
+ ANDROID_NAMESPACE_TYPE_ALSO_USED_AS_ANONYMOUS = 0x10000000,
+
ANDROID_NAMESPACE_TYPE_SHARED_ISOLATED = ANDROID_NAMESPACE_TYPE_SHARED |
ANDROID_NAMESPACE_TYPE_ISOLATED,
};
diff --git a/linker/linker_main.cpp b/linker/linker_main.cpp
index 11d3d29..fd1592d 100644
--- a/linker/linker_main.cpp
+++ b/linker/linker_main.cpp
@@ -63,6 +63,8 @@
static void get_elf_base_from_phdr(const ElfW(Phdr)* phdr_table, size_t phdr_count,
ElfW(Addr)* base, ElfW(Addr)* load_bias);
+static void set_bss_vma_name(soinfo* si);
+
// These should be preserved static to avoid emitting
// RELATIVE relocations for the part of the code running
// before linker links itself.
@@ -366,6 +368,8 @@
si->set_main_executable();
init_link_map_head(*si);
+ set_bss_vma_name(si);
+
// Use the executable's PT_INTERP string as the solinker filename in the
// dynamic linker's module list. gdb reads both PT_INTERP and the module list,
// and if the paths for the linker are different, gdb will report that the
@@ -570,6 +574,31 @@
async_safe_fatal("Could not find a PHDR: broken executable?");
}
+/*
+ * Set anonymous VMA name for .bss section. For DSOs loaded by the linker, this
+ * is done by ElfReader. This function is here for DSOs loaded by the kernel,
+ * namely the linker itself and the main executable.
+ */
+static void set_bss_vma_name(soinfo* si) {
+ for (size_t i = 0; i < si->phnum; ++i) {
+ auto phdr = &si->phdr[i];
+
+ if (phdr->p_type != PT_LOAD) {
+ continue;
+ }
+
+ ElfW(Addr) seg_start = phdr->p_vaddr + si->load_bias;
+ ElfW(Addr) seg_page_end = PAGE_END(seg_start + phdr->p_memsz);
+ ElfW(Addr) seg_file_end = PAGE_END(seg_start + phdr->p_filesz);
+
+ if (seg_page_end > seg_file_end) {
+ prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME,
+ reinterpret_cast<void*>(seg_file_end), seg_page_end - seg_file_end,
+ ".bss");
+ }
+ }
+}
+
// Detect an attempt to run the linker on itself. e.g.:
// /system/bin/linker64 /system/bin/linker64
// Use priority-1 to run this constructor before other constructors.
@@ -660,6 +689,9 @@
// couldn't make system calls on x86 at that point, but we can now...
if (!tmp_linker_so.protect_relro()) __linker_cannot_link(args.argv[0]);
+ // And we can set VMA name for the bss section now
+ set_bss_vma_name(&tmp_linker_so);
+
// Initialize the linker's static libc's globals
__libc_init_globals();
diff --git a/linker/linker_namespaces.h b/linker/linker_namespaces.h
index 215ad05..9561bb4 100644
--- a/linker/linker_namespaces.h
+++ b/linker/linker_namespaces.h
@@ -72,7 +72,10 @@
struct android_namespace_t {
public:
- android_namespace_t() : is_isolated_(false), is_greylist_enabled_(false) {}
+ android_namespace_t() :
+ is_isolated_(false),
+ is_greylist_enabled_(false),
+ is_also_used_as_anonymous_(false) {}
const char* get_name() const { return name_.c_str(); }
void set_name(const char* name) { name_ = name; }
@@ -83,6 +86,9 @@
bool is_greylist_enabled() const { return is_greylist_enabled_; }
void set_greylist_enabled(bool enabled) { is_greylist_enabled_ = enabled; }
+ bool is_also_used_as_anonymous() const { return is_also_used_as_anonymous_; }
+ void set_also_used_as_anonymous(bool yes) { is_also_used_as_anonymous_ = yes; }
+
const std::vector<std::string>& get_ld_library_paths() const {
return ld_library_paths_;
}
@@ -164,6 +170,7 @@
std::string name_;
bool is_isolated_;
bool is_greylist_enabled_;
+ bool is_also_used_as_anonymous_;
std::vector<std::string> ld_library_paths_;
std::vector<std::string> default_library_paths_;
std::vector<std::string> permitted_paths_;
diff --git a/linker/linker_sdk_versions.cpp b/linker/linker_sdk_versions.cpp
index b06f3e6..29c0f4a 100644
--- a/linker/linker_sdk_versions.cpp
+++ b/linker/linker_sdk_versions.cpp
@@ -26,10 +26,13 @@
* SUCH DAMAGE.
*/
-#include "linker.h"
-#include <android/api-level.h>
#include <atomic>
+#include <android/api-level.h>
+#include <android/fdsan.h>
+
+#include "linker.h"
+
static std::atomic<int> g_target_sdk_version(__ANDROID_API__);
void set_application_target_sdk_version(int target) {
@@ -38,6 +41,10 @@
target = __ANDROID_API__;
}
g_target_sdk_version = target;
+
+ if (target < 30) {
+ android_fdsan_set_error_level_from_property(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
+ }
}
int get_application_target_sdk_version() {
diff --git a/tests/Android.bp b/tests/Android.bp
index 42d280b..4477b52 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -286,6 +286,7 @@
"-Wno-builtin-memcpy-chk-size",
"-Wno-format-security",
"-Wno-format-zero-length",
+ "-Wno-fortify-source",
"-Wno-memset-transposed-args",
"-Wno-strlcpy-strlcat-size",
"-Wno-strncat-size",
diff --git a/tests/clang_fortify_tests.cpp b/tests/clang_fortify_tests.cpp
index 1b6b898..6923302 100644
--- a/tests/clang_fortify_tests.cpp
+++ b/tests/clang_fortify_tests.cpp
@@ -36,6 +36,11 @@
// Similarly, there are a few overload tricks we have to emit errors. Ignore any notes from those.
// expected-note@* 0+{{candidate function}}
+// FIXME(b/138701943): Silence warnings produced by -Wfortify-source since they're expected.
+// expected-warning@* 0+{{will always overflow}}
+// expected-warning@* 0+{{size argument is too large}}
+// expected-note@* 0+{{has been explicitly marked unavailable here}}
+
#ifndef _FORTIFY_SOURCE
#error "_FORTIFY_SOURCE must be defined"
#endif
diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp
index 67ebf37..e7274f7 100644
--- a/tests/dlext_test.cpp
+++ b/tests/dlext_test.cpp
@@ -29,9 +29,7 @@
#include <android-base/file.h>
#include <android-base/strings.h>
-#include <linux/memfd.h>
#include <sys/mman.h>
-#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/vfs.h>
#include <sys/wait.h>
@@ -363,8 +361,10 @@
uint32_t* taxicab_number = reinterpret_cast<uint32_t*>(dlsym(handle_, "dlopen_testlib_taxicab_number"));
ASSERT_DL_NOTNULL(taxicab_number);
- EXPECT_GE(reinterpret_cast<void*>(taxicab_number), start);
- EXPECT_LT(reinterpret_cast<void*>(taxicab_number), reinterpret_cast<char*>(start) + kLibSize);
+ // Untag the pointer so that it can be compared with start, which will be untagged.
+ void* addr = reinterpret_cast<void*>(untag_address(taxicab_number));
+ EXPECT_GE(addr, start);
+ EXPECT_LT(addr, reinterpret_cast<char*>(start) + kLibSize);
EXPECT_EQ(1729U, *taxicab_number);
}
@@ -942,7 +942,7 @@
const std::string lib_path = GetTestlibRoot() + "/libtest_simple.so";
// create memfd
- int memfd = syscall(__NR_memfd_create, "foobar", MFD_CLOEXEC);
+ int memfd = memfd_create("foobar", MFD_CLOEXEC);
if (memfd == -1 && errno == ENOSYS) {
return;
}
diff --git a/tests/elftls_dl_test.cpp b/tests/elftls_dl_test.cpp
index 6d88880..012aad7 100644
--- a/tests/elftls_dl_test.cpp
+++ b/tests/elftls_dl_test.cpp
@@ -28,6 +28,7 @@
#include <dlfcn.h>
#include <gtest/gtest.h>
+#include <link.h>
#include <thread>
@@ -335,3 +336,58 @@
ASSERT_STREQ(nullptr, info.dli_sname);
ASSERT_EQ(nullptr, info.dli_saddr);
}
+
+TEST(elftls_dl, dl_iterate_phdr) {
+ void* lib = dlopen("libtest_elftls_dynamic.so", RTLD_LOCAL | RTLD_NOW);
+
+ auto get_var_addr = reinterpret_cast<void*(*)()>(dlsym(lib, "get_large_tls_var_addr"));
+ ASSERT_NE(nullptr, get_var_addr);
+
+ struct TlsInfo {
+ bool found;
+ size_t modid;
+ void* data;
+ size_t memsz;
+ };
+
+ auto get_tls_info = []() {
+ auto callback = [](dl_phdr_info* info, size_t, void* data) {
+ TlsInfo& tls_info = *static_cast<TlsInfo*>(data);
+
+ // This test is also run with glibc, where dlpi_name may have relative path components, so
+ // examine just the basename when searching for the library.
+ if (strcmp(basename(info->dlpi_name), "libtest_elftls_dynamic.so") != 0) return 0;
+
+ tls_info.found = true;
+ tls_info.modid = info->dlpi_tls_modid;
+ tls_info.data = info->dlpi_tls_data;
+ for (ElfW(Half) i = 0; i < info->dlpi_phnum; ++i) {
+ if (info->dlpi_phdr[i].p_type == PT_TLS) {
+ tls_info.memsz = info->dlpi_phdr[i].p_memsz;
+ }
+ }
+ EXPECT_NE(static_cast<size_t>(0), tls_info.memsz);
+ return 1;
+ };
+
+ TlsInfo result {};
+ dl_iterate_phdr(callback, &result);
+ return result;
+ };
+
+ // The executable has a TLS segment, so it will use module ID #1, and the DSO's ID will be larger
+ // than 1. Initially, the data field is nullptr, because this thread's instance hasn't been
+ // allocated yet.
+ TlsInfo tls_info = get_tls_info();
+ ASSERT_TRUE(tls_info.found);
+ ASSERT_GT(tls_info.modid, static_cast<size_t>(1));
+ ASSERT_EQ(nullptr, tls_info.data);
+
+ void* var_addr = get_var_addr();
+
+ // Verify that dl_iterate_phdr returns a range of memory covering the allocated TLS variable.
+ tls_info = get_tls_info();
+ ASSERT_TRUE(tls_info.found);
+ ASSERT_GE(var_addr, tls_info.data);
+ ASSERT_LT(var_addr, static_cast<char*>(tls_info.data) + tls_info.memsz);
+}
diff --git a/tests/eventfd_test.cpp b/tests/eventfd_test.cpp
index 68d9192..3c303c2 100644
--- a/tests/eventfd_test.cpp
+++ b/tests/eventfd_test.cpp
@@ -21,14 +21,16 @@
#include <sys/eventfd.h>
+#include "utils.h"
+
TEST(eventfd, smoke) {
- unsigned int initial_value = 2;
- int fd = eventfd(initial_value, O_NONBLOCK);
- ASSERT_NE(fd, -1);
+ constexpr unsigned int kInitialValue = 2;
+ int fd = eventfd(kInitialValue, EFD_NONBLOCK);
+ ASSERT_NE(-1, fd);
eventfd_t value = 123;
ASSERT_EQ(0, eventfd_read(fd, &value));
- ASSERT_EQ(initial_value, value);
+ ASSERT_EQ(kInitialValue, value);
// Reading clears the counter.
ASSERT_EQ(-1, eventfd_read(fd, &value));
@@ -44,3 +46,49 @@
close(fd);
}
+
+TEST(eventfd, cloexec) {
+ constexpr unsigned int kInitialValue = 2;
+ int fd = eventfd(kInitialValue, EFD_CLOEXEC);
+ ASSERT_NE(-1, fd);
+ AssertCloseOnExec(fd, true);
+
+ eventfd_t value = 123;
+ ASSERT_EQ(0, eventfd_read(fd, &value));
+ ASSERT_EQ(kInitialValue, value);
+
+ close(fd);
+
+ fd = eventfd(kInitialValue, EFD_NONBLOCK | EFD_CLOEXEC);
+ ASSERT_NE(-1, fd);
+ AssertCloseOnExec(fd, true);
+
+ value = 123;
+ ASSERT_EQ(0, eventfd_read(fd, &value));
+ ASSERT_EQ(kInitialValue, value);
+
+ close(fd);
+}
+
+TEST(eventfd, semaphore) {
+ int fd = eventfd(3, EFD_NONBLOCK | EFD_SEMAPHORE);
+ ASSERT_NE(-1, fd);
+
+ eventfd_t value = 123;
+ ASSERT_EQ(0, eventfd_read(fd, &value));
+ ASSERT_EQ(1U, value);
+
+ value = 123;
+ ASSERT_EQ(0, eventfd_read(fd, &value));
+ ASSERT_EQ(1U, value);
+
+ value = 123;
+ ASSERT_EQ(0, eventfd_read(fd, &value));
+ ASSERT_EQ(1U, value);
+
+ // The counter is cleared after the initial value decrements to 0.
+ ASSERT_EQ(-1, eventfd_read(fd, &value));
+ ASSERT_EQ(EAGAIN, errno);
+
+ close(fd);
+}
diff --git a/tests/leak_test.cpp b/tests/leak_test.cpp
index 6005209..3cc1a0a 100644
--- a/tests/leak_test.cpp
+++ b/tests/leak_test.cpp
@@ -17,6 +17,7 @@
#include <err.h>
#include <inttypes.h>
#include <pthread.h>
+#include <sched.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
@@ -30,26 +31,28 @@
#include <vector>
#include <android-base/macros.h>
+#include <android-base/threads.h>
#include "utils.h"
using namespace std::chrono_literals;
-static void WaitUntilAllExited(pid_t* pids, size_t pid_count) {
+static void WaitUntilAllThreadsExited(pid_t* tids, size_t tid_count) {
// Wait until all children have exited.
bool alive = true;
while (alive) {
alive = false;
- for (size_t i = 0; i < pid_count; ++i) {
- if (pids[i] != 0) {
- if (kill(pids[i], 0) == 0) {
+ for (size_t i = 0; i < tid_count; ++i) {
+ if (tids[i] != 0) {
+ if (tgkill(getpid(), tids[i], 0) == 0) {
alive = true;
} else {
EXPECT_EQ(errno, ESRCH);
- pids[i] = 0; // Skip in next loop.
+ tids[i] = 0; // Skip in next loop.
}
}
}
+ sched_yield();
}
}
@@ -155,7 +158,7 @@
pthread_barrier_wait(&barrier);
ASSERT_EQ(pthread_barrier_destroy(&barrier), 0);
- WaitUntilAllExited(tids, arraysize(tids));
+ WaitUntilAllThreadsExited(tids, threads_count);
// A native bridge implementation might need a warm up pass to reach a steady state.
// http://b/37920774.
diff --git a/tests/libs/segment_gap_outer.lds b/tests/libs/segment_gap_outer.lds
index f326aab..0f175af 100644
--- a/tests/libs/segment_gap_outer.lds
+++ b/tests/libs/segment_gap_outer.lds
@@ -1,15 +1,14 @@
SECTIONS {
- # This starts off fairly normal: rodata, text, data, relro, bss with
+ # This starts off fairly normal: rodata, text, dynamic, data, bss with
# appropriate alignment between them.
. = SIZEOF_HEADERS;
.rodata : {}
. = ALIGN(0x1000);
.text : {}
. = ALIGN(0x1000);
+ .dynamic : {}
+ . = ALIGN(0x1000);
.data : {}
- . = ALIGN(0x1000);
- .data.rel.ro : {}
- . = ALIGN(0x1000);
.bss : {}
# Now create the gap. We need a text segment first to prevent the linker from
@@ -22,6 +21,6 @@
# Place end_of_gap at the end of the gap.
. = 0x1000000;
.bss.end_of_gap : {
- *(.bss.end_of_gap);
+ *(.bss.*end_of_gap*);
}
}
diff --git a/tests/link_test.cpp b/tests/link_test.cpp
index cf5fc0b..75bb4d6 100644
--- a/tests/link_test.cpp
+++ b/tests/link_test.cpp
@@ -28,6 +28,7 @@
#include <gtest/gtest.h>
+#include <dlfcn.h>
#include <link.h>
#if __has_include(<sys/auxv.h>)
#include <sys/auxv.h>
@@ -80,6 +81,52 @@
ASSERT_EQ(0, dl_iterate_phdr(Functor::Callback, &f));
}
+// Verify that the module load/unload counters from dl_iterate_phdr are incremented.
+TEST(link, dl_iterate_phdr_counters) {
+ struct Counters {
+ bool inited = false;
+ uint64_t adds = 0;
+ uint64_t subs = 0;
+ };
+
+ auto get_adds_subs = []() {
+ auto callback = [](dl_phdr_info* info, size_t size, void* data) {
+ Counters& counters = *static_cast<Counters*>(data);
+ EXPECT_GE(size, sizeof(dl_phdr_info));
+ if (!counters.inited) {
+ counters.inited = true;
+ counters.adds = info->dlpi_adds;
+ counters.subs = info->dlpi_subs;
+ } else {
+ // The counters have the same value for each module.
+ EXPECT_EQ(counters.adds, info->dlpi_adds);
+ EXPECT_EQ(counters.subs, info->dlpi_subs);
+ }
+ return 0;
+ };
+
+ Counters counters {};
+ EXPECT_EQ(0, dl_iterate_phdr(callback, &counters));
+ EXPECT_TRUE(counters.inited);
+ return counters;
+ };
+
+ // dlopen increments the 'adds' counter.
+ const auto before_dlopen = get_adds_subs();
+ void* const handle = dlopen("libtest_empty.so", RTLD_NOW);
+ ASSERT_NE(nullptr, handle);
+ const auto after_dlopen = get_adds_subs();
+ ASSERT_LT(before_dlopen.adds, after_dlopen.adds);
+ ASSERT_EQ(before_dlopen.subs, after_dlopen.subs);
+
+ // dlclose increments the 'subs' counter.
+ const auto before_dlclose = after_dlopen;
+ dlclose(handle);
+ const auto after_dlclose = get_adds_subs();
+ ASSERT_EQ(before_dlclose.adds, after_dlclose.adds);
+ ASSERT_LT(before_dlclose.subs, after_dlclose.subs);
+}
+
struct ProgHdr {
const ElfW(Phdr)* table;
size_t size;
diff --git a/tests/malloc_iterate_test.cpp b/tests/malloc_iterate_test.cpp
index 9d4fe04..87ec942 100644
--- a/tests/malloc_iterate_test.cpp
+++ b/tests/malloc_iterate_test.cpp
@@ -14,16 +14,19 @@
* limitations under the License.
*/
-#include <stdint.h>
-#include <stdlib.h>
-#include <time.h>
-
#include <gtest/gtest.h>
#if defined(__BIONIC__)
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
#include <vector>
+#include <async_safe/log.h>
#include <procinfo/process_map.h>
#include "utils.h"
@@ -92,15 +95,22 @@
test_data->total_allocated_bytes = 0;
// Find all of the maps that are [anon:libc_malloc].
- ASSERT_TRUE(android::procinfo::ReadMapFile(
- "/proc/self/maps",
- [&](uint64_t start, uint64_t end, uint16_t, uint64_t, ino_t, const char* name) {
- if (std::string(name) == "[anon:libc_malloc]") {
- malloc_disable();
- malloc_iterate(start, end - start, SavePointers, test_data);
- malloc_enable();
- }
- }));
+ auto callback = [&](uint64_t start, uint64_t end, uint16_t, uint64_t, ino_t, const char* name) {
+ if (strcmp(name, "[anon:libc_malloc]") == 0) {
+ malloc_iterate(start, end - start, SavePointers, test_data);
+ }
+ };
+
+ std::vector<char> buffer(64 * 1024);
+
+ // Avoid doing allocations so that the maps don't change while looking
+ // for the pointers.
+ malloc_disable();
+ bool parsed = android::procinfo::ReadMapFileAsyncSafe("/proc/self/maps", buffer.data(),
+ buffer.size(), callback);
+ malloc_enable();
+
+ ASSERT_TRUE(parsed) << "Failed to parse /proc/self/maps";
for (size_t i = 0; i < test_data->allocs.size(); i++) {
EXPECT_EQ(1UL, test_data->allocs[i].count) << "Failed on size " << test_data->allocs[i].size;
@@ -180,16 +190,42 @@
SKIP_WITH_HWASAN;
TestDataType test_data = {};
- // Find all of the maps that are not [anon:libc_malloc].
- ASSERT_TRUE(android::procinfo::ReadMapFile(
- "/proc/self/maps",
- [&](uint64_t start, uint64_t end, uint16_t, uint64_t, ino_t, const char* name) {
- if (std::string(name) != "[anon:libc_malloc]") {
- malloc_disable();
- malloc_iterate(start, end - start, SavePointers, &test_data);
- malloc_enable();
+ // Only attempt to get memory data for maps that are not from the native allocator.
+ auto callback = [&](uint64_t start, uint64_t end, uint16_t, uint64_t, ino_t, const char* name) {
+ if (strcmp(name, "[anon:libc_malloc]") != 0) {
+ size_t total = test_data.total_allocated_bytes;
+ malloc_iterate(start, end - start, SavePointers, &test_data);
+ total = test_data.total_allocated_bytes - total;
+ if (total > 0) {
+ char buffer[256];
+ int len = 0;
+ if (name[0] != '\0') {
+ len = async_safe_format_buffer(buffer, sizeof(buffer), "Failed on map %s: %zu\n", name,
+ total);
+ } else {
+ len = async_safe_format_buffer(buffer, sizeof(buffer),
+ "Failed on map anon:<%" PRIx64 "-%" PRIx64 ">: %zu\n",
+ start, end, total);
}
- }));
+ if (len > 0) {
+ write(STDOUT_FILENO, buffer, len);
+ }
+ }
+ }
+ };
+
+ std::vector<char> buffer(64 * 1024);
+
+ // Need to make sure that there are no allocations while reading the
+ // maps. Otherwise, it might create a new map during this check and
+ // incorrectly think a map is empty while it actually includes real
+ // allocations.
+ malloc_disable();
+ bool parsed = android::procinfo::ReadMapFileAsyncSafe("/proc/self/maps", buffer.data(),
+ buffer.size(), callback);
+ malloc_enable();
+
+ ASSERT_TRUE(parsed) << "Failed to parse /proc/self/maps";
ASSERT_EQ(0UL, test_data.total_allocated_bytes);
#else
diff --git a/tests/stdatomic_test.cpp b/tests/stdatomic_test.cpp
index a9665d1..9911d64 100644
--- a/tests/stdatomic_test.cpp
+++ b/tests/stdatomic_test.cpp
@@ -16,12 +16,9 @@
#include <gtest/gtest.h>
-#if defined(__ANDROID__)
+// The real <stdatomic.h> checks for the availability of C++'s atomics and uses them if present. Since
+// we want to test the libc versions, we instead include <bits/stdatomic.h> where they're actually defined.
#include <bits/stdatomic.h>
-#else
-#undef _USING_LIBCXX //TODO(b/137876753): Remove this
-#include <stdatomic.h>
-#endif
#include <pthread.h>
#include <stdint.h>
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index 01b4dba..a0cda1b 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -19,7 +19,6 @@
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
-#include <linux/fs.h>
#include <math.h>
#include <stdio.h>
#include <sys/types.h>
@@ -34,10 +33,18 @@
#include <vector>
#include <android-base/file.h>
+#include <android-base/unique_fd.h>
#include "BionicDeathTest.h"
#include "utils.h"
+// This #include is actually a test too. We have to duplicate the
+// definitions of the RENAME_ constants because <linux/fs.h> also contains
+// pollution such as BLOCK_SIZE which conflicts with lots of user code.
+// Important to check that we have matching definitions.
+// There's no _MAX to test that we have all the constants, sadly.
+#include <linux/fs.h>
+
#if defined(NOFORTIFY)
#define STDIO_TEST stdio_nofortify
#define STDIO_DEATHTEST stdio_nofortify_DeathTest
@@ -2610,3 +2617,77 @@
// So we'll notice if Linux grows another constant in <linux/fs.h>...
ASSERT_EQ(SEEK_MAX, SEEK_HOLE);
}
+
+TEST(STDIO_TEST, rename) {
+ TemporaryDir td;
+ std::string old_path = td.path + "/old"s;
+ std::string new_path = td.path + "/new"s;
+
+ // Create the file, check it exists.
+ ASSERT_EQ(0, close(creat(old_path.c_str(), 0666)));
+ struct stat sb;
+ ASSERT_EQ(0, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(-1, stat(new_path.c_str(), &sb));
+
+ // Rename and check it moved.
+ ASSERT_EQ(0, rename(old_path.c_str(), new_path.c_str()));
+ ASSERT_EQ(-1, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(0, stat(new_path.c_str(), &sb));
+}
+
+TEST(STDIO_TEST, renameat) {
+ TemporaryDir td;
+ android::base::unique_fd dirfd{open(td.path, O_PATH)};
+ std::string old_path = td.path + "/old"s;
+ std::string new_path = td.path + "/new"s;
+
+ // Create the file, check it exists.
+ ASSERT_EQ(0, close(creat(old_path.c_str(), 0666)));
+ struct stat sb;
+ ASSERT_EQ(0, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(-1, stat(new_path.c_str(), &sb));
+
+ // Rename and check it moved.
+ ASSERT_EQ(0, renameat(dirfd, "old", dirfd, "new"));
+ ASSERT_EQ(-1, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(0, stat(new_path.c_str(), &sb));
+}
+
+TEST(STDIO_TEST, renameat2) {
+#if defined(__GLIBC__)
+ GTEST_SKIP() << "glibc doesn't have renameat2 until 2.28";
+#else
+ TemporaryDir td;
+ android::base::unique_fd dirfd{open(td.path, O_PATH)};
+ std::string old_path = td.path + "/old"s;
+ std::string new_path = td.path + "/new"s;
+
+ // Create the file, check it exists.
+ ASSERT_EQ(0, close(creat(old_path.c_str(), 0666)));
+ struct stat sb;
+ ASSERT_EQ(0, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(-1, stat(new_path.c_str(), &sb));
+
+ // Rename and check it moved.
+ ASSERT_EQ(0, renameat2(dirfd, "old", dirfd, "new", 0));
+ ASSERT_EQ(-1, stat(old_path.c_str(), &sb));
+ ASSERT_EQ(0, stat(new_path.c_str(), &sb));
+
+ // After this, both "old" and "new" exist.
+ ASSERT_EQ(0, close(creat(old_path.c_str(), 0666)));
+
+ // Rename and check it moved.
+ ASSERT_EQ(-1, renameat2(dirfd, "old", dirfd, "new", RENAME_NOREPLACE));
+ ASSERT_EQ(EEXIST, errno);
+#endif
+}
+
+TEST(STDIO_TEST, renameat2_flags) {
+#if defined(__GLIBC__)
+ GTEST_SKIP() << "glibc doesn't have renameat2 until 2.28";
+#else
+ ASSERT_NE(0, RENAME_EXCHANGE);
+ ASSERT_NE(0, RENAME_NOREPLACE);
+ ASSERT_NE(0, RENAME_WHITEOUT);
+#endif
+}
diff --git a/tests/sys_mman_test.cpp b/tests/sys_mman_test.cpp
index 0b98198..e403ea5 100644
--- a/tests/sys_mman_test.cpp
+++ b/tests/sys_mman_test.cpp
@@ -230,7 +230,10 @@
TEST(sys_mman, mremap_PTRDIFF_MAX) {
void* map = mmap(nullptr, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
ASSERT_NE(MAP_FAILED, map);
+
ASSERT_EQ(MAP_FAILED, mremap(map, PAGE_SIZE, kHuge, MREMAP_MAYMOVE));
+
+ ASSERT_EQ(0, munmap(map, PAGE_SIZE));
}
TEST(sys_mman, mmap_bug_27265969) {
@@ -239,3 +242,61 @@
// Some kernels had bugs that would cause segfaults here...
__builtin___clear_cache(base, base + (PAGE_SIZE * 2));
}
+
+TEST(sys_mman, mlock) {
+ void* map = mmap(nullptr, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ ASSERT_NE(MAP_FAILED, map);
+
+ // Not really anything we can assert about this.
+ mlock(map, PAGE_SIZE);
+
+ ASSERT_EQ(0, munmap(map, PAGE_SIZE));
+}
+
+TEST(sys_mman, mlock2) {
+#if defined(__GLIBC__)
+ GTEST_SKIP() << "needs glibc 2.27";
+#else
+ void* map = mmap(nullptr, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ ASSERT_NE(MAP_FAILED, map);
+
+ // Not really anything we can assert about this.
+ mlock2(map, PAGE_SIZE, MLOCK_ONFAULT);
+
+ ASSERT_EQ(0, munmap(map, PAGE_SIZE));
+#endif
+}
+
+TEST(sys_mman, memfd_create) {
+#if defined(__GLIBC__)
+ GTEST_SKIP() << "needs glibc 2.27";
+#else
+ // Is the MFD_CLOEXEC flag obeyed?
+ errno = 0;
+ int fd = memfd_create("doesn't matter", 0);
+ if (fd == -1) {
+ ASSERT_EQ(ENOSYS, errno);
+ GTEST_SKIP() << "no memfd_create available";
+ }
+ int f = fcntl(fd, F_GETFD);
+ ASSERT_NE(-1, f);
+ ASSERT_FALSE(f & FD_CLOEXEC);
+ close(fd);
+
+ errno = 0;
+ fd = memfd_create("doesn't matter", MFD_CLOEXEC);
+ f = fcntl(fd, F_GETFD);
+ ASSERT_NE(-1, f);
+ ASSERT_TRUE(f & FD_CLOEXEC);
+
+ // Can we read and write?
+ std::string expected("hello, world!");
+ ASSERT_TRUE(android::base::WriteStringToFd(expected, fd));
+ ASSERT_EQ(0, lseek(fd, 0, SEEK_SET));
+ std::string actual;
+ ASSERT_TRUE(android::base::ReadFdToString(fd, &actual));
+ ASSERT_EQ(expected, actual);
+
+ close(fd);
+#endif
+}
diff --git a/tools/versioner/src/Arch.h b/tools/versioner/src/Arch.h
index 16fa265..e4bbcc4 100644
--- a/tools/versioner/src/Arch.h
+++ b/tools/versioner/src/Arch.h
@@ -138,7 +138,9 @@
{ Arch::x86_64, "x86_64-linux-android" },
};
-static const std::set<int> default_levels = { 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29 };
+static const std::set<int> default_levels = {
+ 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30,
+};
static const ArchMap<int> arch_min_api = {
{ Arch::arm, 9 },
@@ -165,4 +167,5 @@
{"O-MR1", 27},
{"P", 28},
{"Q", 29},
+ {"R", 30},
};
diff --git a/tools/versioner/src/Driver.cpp b/tools/versioner/src/Driver.cpp
index 3927480..d2c50a9 100644
--- a/tools/versioner/src/Driver.cpp
+++ b/tools/versioner/src/Driver.cpp
@@ -258,7 +258,7 @@
Compiler.setInvocation(std::move(invocation));
Compiler.setDiagnostics(diags.get());
- Compiler.setVirtualFileSystem(vfs);
+ Compiler.createFileManager(vfs);
VersionerASTAction versioner_action(header_database, type);
if (!Compiler.ExecuteAction(versioner_action)) {
diff --git a/tools/versioner/src/SymbolFileParser.cpp b/tools/versioner/src/SymbolFileParser.cpp
index c312b48..1b4adae 100644
--- a/tools/versioner/src/SymbolFileParser.cpp
+++ b/tools/versioner/src/SymbolFileParser.cpp
@@ -266,19 +266,23 @@
if (!api_level.empty()) {
// If an api-level tag is specified, it must be an exact match (mainly
// for versioner unit tests).
- return compilation_type.api_level == decodeApiLevelValue(api_level);
+ return compilation_type.api_level == parseApiLevelValue(api_level);
}
- return compilation_type.api_level >= decodeApiLevelValue(intro);
+ return compilation_type.api_level >= parseApiLevelValue(intro);
}
- // Extract and decode the integer API level from api-level or introduced tags.
- static int decodeApiLevelValue(const std::string& tag) {
+ // Parse the integer API level from api-level or introduced tags.
+ int parseApiLevelValue(const std::string& tag) const {
std::string api_level = tag.substr(tag.find('=') + 1);
auto it = api_codename_map.find(api_level);
if (it != api_codename_map.end()) {
return it->second;
}
+ if (api_level.find_first_not_of("0123456789") != std::string::npos) {
+ errx(1, "%s:%zu: error: unknown API level codename specified: \"%s\"",
+ file_path.c_str(), curr_line_num, tag.c_str());
+ }
return std::stoi(api_level);
}